@Override
	public void subscribeSource(ClientSenderInterface sender, ResultData initialData) throws OneSubscriptionPerSendData {
		DataDescription dataDescription = initialData.getDataDescription();

		if((sender == null)) throw new IllegalArgumentException("Parameter 'sender' ist null");
		if((dataDescription == null)) throw new IllegalArgumentException("dataDescription im Parameter 'initialData' ist null");

		AttributeGroup attributeGroup = dataDescription.getAttributeGroup();
		Aspect aspect = dataDescription.getAspect();

		if((attributeGroup == null)) throw new IllegalArgumentException("Attributgruppe im Parameter 'initialData' ist null");
		if((aspect == null)) throw new IllegalArgumentException("Aspekt im Parameter 'initialData' ist null");
		final SystemObject systemObject = initialData.getObject();
		if(systemObject == null) throw new IllegalArgumentException("Das Systemobjekt im Parameter 'initialData' ist null");

		Aspect _aspect = aspectToSubstitute(attributeGroup, aspect);

		SystemObject[] objects = new SystemObject[]{systemObject};
		checkDataIdentification(objects, attributeGroup, _aspect, "Quellanmeldung");

		DataDescription redirectedDataDescription = dataDescription;
		if(!_aspect.equals(aspect)) {
			redirectedDataDescription = dataDescription.getRedirectedDescription(_aspect);
		}
		_subscriptionManager.subscribeSender(sender, objects, redirectedDataDescription, SenderRole.source());

		try {
			sendData(initialData);
		}
		catch(Exception e) {
			RuntimeException runtimeException;
			if(e instanceof RuntimeException) {
				runtimeException = (RuntimeException)e;
			}
			else {
				runtimeException = new RuntimeException(e);
			}
			try {
				unsubscribeSender(sender, objects, dataDescription);
			}
			catch(Exception unsubscribeException) {
				_debug.warning(
						"Initialer Datensatz bei Anmeldung als Quelle konnte nicht versandt werden und Anmeldung konnte nicht rückgängig gemacht werden",
						unsubscribeException
				);
			}
			throw runtimeException;
		}
	}