I have tried out today both the IFQID and "on demand RemoteService" solution. Here are my findings:
The IFQID works fine now with resources but there is still a problem left. If I log-in two users with the same username and password only one of them is created/displayed correctly with the resource. There is no IRosterEntry created for the second user. But in order to deal with both user/resource pairs and to handle remote services for both user/resource pairs actually two IRosterEntry-objects will be needed - or something similar. Maybe the IFQID method fqID.getResourceName() could return an Array of all resources for a user? But if it does, how can remote services be than distinguished for each user/resource pair?
The remote service registration on demand doesn't work properly as well. I don't know why, but some services are registered properly others are not. If I log-in user A first and afterwards user B, some services of user A are registered properly to user B others are not. This is the way how I register remote services:
	public void registerRemoteService(String serviceName, Object impl,
			ID[] targetIDs) {
		if (targetIDs == null) {
			// register service to all user
			targetIDs = RosterUtil.getUserIDs(getRoster());
			Assert.isNotNull(targetIDs);
		}
		Dictionary<String, ID[]> props = new Hashtable<String, ID[]>();
		props.put(Constants.SERVICE_REGISTRATION_TARGETS, targetIDs);
		// register ECF remote service
		getRemoteServiceContainerAdapter().registerRemoteService(
				new String[] { serviceName }, impl, props);
		logger.info("Service Registered: " + serviceName);
	}
Please let me know if I can help you to sort this things out.