private DatasetElement extractData(Data data, boolean calledFromDataArray) {
		if(data.isPlain()) {
			if(data.getAttributeType() instanceof ReferenceAttributeType) {
				String value = data.asReferenceValue().getSystemObjectPid();
				if(value.length() == 0) value = "undefiniert";
				return new ConfigurationData(data.getName(), value);
			}
			else {
				return new ConfigurationData(data.getName(), data.asTextValue().getText());
			}
		}
		else if(data.isList()) {
			final List<DatasetElement> elements = new ArrayList<DatasetElement>();
			Iterator iter = data.iterator();
			while(iter.hasNext()) {
				elements.add(extractData((Data)iter.next(), false));
			}
			String name;
			if(calledFromDataArray) {
				name = "-";
			}
			else {
				name = data.getName();
			}
			return new ConfigurationDataList(elements.toArray(new DatasetElement[elements.size()]), name);
		}
		else if(data.isArray()) {
			final List<DatasetElement> elements = new ArrayList<DatasetElement>();
			Data.Array array = data.asArray();
			for(int i = 0; i < array.getLength(); i++) {
				// dies ist ein Array, nachfolgende Liste soll den Namen "-" annehmen
				elements.add(extractData(array.getItem(i), true));
			}
			return new ConfigurationDataField(data.getName(), elements.toArray(new DatasetElement[elements.size()]));
		}
		else {
			throw new IllegalStateException("Unbekanntes Data. Es ist kein einfaches Datum, noch eine Liste oder ein Array. Data = " + data);
		}
	}