private List register(List subscriptionInfos) throws Exception {
		List allObjects = new LinkedList();
		Iterator infoIterator = subscriptionInfos.iterator();
		while(infoIterator.hasNext()) {
			SubscriptionInfo subscriptionInfo = (SubscriptionInfo)infoIterator.next();
			List<SystemObject> objects = new LinkedList<SystemObject>();
			String objectSpec = subscriptionInfo.getObjectSpec();
			objects = ConfigurationHelper.getObjects(objectSpec, dataModel);
			Iterator objectIterator = objects.iterator();
			while(objectIterator.hasNext()) {
				SystemObject checkedObject = (SystemObject)objectIterator.next();
				if(checkedObject == null) {
					debug.error("Angegebenes Objekt \"" + objectSpec + "\" wurde in der Konfiguration nicht gefunden.");
					System.exit(1);
				}
			}
			String[] dataSpecs = subscriptionInfo.getSplittedData(":", 3);
			AttributeGroup attributeGroup = dataModel.getAttributeGroup(dataSpecs[0]);
			if(attributeGroup == null) {
				debug.error("Attributgruppe  \"" + dataSpecs[0] + "\" existiert nicht.");
				System.exit(1);
			}
			Aspect aspect = dataModel.getAspect(dataSpecs[1]);
			if(aspect == null) {
				debug.error("Aspekt  \"" + dataSpecs[1] + "\" existiert nicht.");
				System.exit(1);
			}
			DataDescription dataDescription;
			String simulationVariantText = "";
			if(dataSpecs.length == 3) {
				short simulationVariant = Short.parseShort(dataSpecs[2]);
				simulationVariantText = ":" + simulationVariant;
				dataDescription = new DataDescription(attributeGroup, aspect, simulationVariant);
			}
			else {
				dataDescription = new DataDescription(attributeGroup, aspect);
			}
			;
			debug.config(
					"Anmeldung als " + subscriptionInfo.getSenderRole() + " für " + attributeGroup.getNameOrPidOrId() + ":" + aspect.getNameOrPidOrId()
			);
			debug.config(simulationVariantText);
			debug.config(" Objekte: " + objects);

			/*
			 * XXX
			 * Work around: Ist die Simulationsvariante -1 (also nicht explizit
			 * über die Aufrufparameter gesetzt), so wird sie durch die
			 * DaV-Applikationsfunktionen automatisch auf 0 gesetzt. Dieses
			 * Verhalten ist unerwünscht und wird hier bis auf weiteres
			 * umgangen.
			 */
			short rescueSimulationVariant = dataDescription.getSimulationVariant();

			if(!isAutarkic) {
				connection.subscribeSender(
						this, objects, dataDescription, subscriptionInfo.getSenderRole()
				);
			}

			waitForDataRequests = System.currentTimeMillis() + 3000;

			/*
			 * XXX
			 * Work around (s. o.)
			 */
			dataDescription.setSimulationVariant(rescueSimulationVariant);

			allObjects.addAll(objects);

			subscriptionInfo.setObjects(objects);
			subscriptionInfo.setDataDescription(dataDescription);
		}
		infoIterator = subscriptionInfos.iterator();
		debug.fine("Start der Datengenerierung-Threads");
		return allObjects;
	}