@Override
	public ConfigurationAreaFile addAreaFile(String configurationAreaPid, File configurationAreaDir, short activeVersion, List<VersionInfo> localVersionTimes)
			throws IllegalArgumentException, IOException, NoSuchVersionException {
		// Datei laden
		final String fileName = configurationAreaPid + ".config";
		final File areaFile = new File(configurationAreaDir, fileName);
		if(!areaFile.exists()) throw new IllegalStateException("Konfigurationsdatei " + areaFile.toString() + " existiert nicht.");

		// Konfigurationsbereich wird geladen
		final ConfigAreaFile configurationAreaFile;
		// Diese Datei wurde mit createAreaFile erzeugt, also existiert ein Header
		configurationAreaFile = new ConfigAreaFile(areaFile, activeVersion, this, localVersionTimes);

		// überprüfen, ob der Konfigurationsbereich bereits der Konfiguration hinzugefügt wurde
		synchronized(_configurationFiles) {
			// Falls der Eintrag bereits existiert, wird eine Fehlermeldung geworfen, falls nicht, wird er gespeichert.
			if(_configurationFiles.containsKey(configurationAreaPid)) {
				throw new IllegalArgumentException("Konfigurationsbereich ist der Konfiguration bereits bekannt.");
			}
			else {
				_configurationFiles.put(configurationAreaPid, configurationAreaFile);
			}
		}

		// Alle Objekte, die sich in der Mischobjektmenge befinden anfragen
		final Collection<Object> allMixedObjects = configurationAreaFile.getMixedObjectSetObjects();

//		System.out.println("größe Mixed: " + allMixedObjects.size());
//		System.out.println("");

		for(Iterator<Object> iterator = allMixedObjects.iterator(); iterator.hasNext();) {
			final Object unknownObject = iterator.next();

			// Das Objekt kann ein dynamisches Objekt, ein Konfigurationsobjekt oder ein "OldObject" sein

			if((unknownObject instanceof ConfigurationObjectInfo)) {
				ConfigurationObjectInfo confObject = (ConfigurationObjectInfo)unknownObject;

				// In die Id Map eintragen
				putObjectId(confObject);

				// Pid eintragen
				// Ist das Objekt jetzt oder erst in der Zukunft gültig ?
				if(confObject.getFirstValidVersion() <= configurationAreaFile.getActiveVersion()) {
					// Das Objekt ist jetzt gültig
					putActiveObjectPidHashMap(confObject);
				}
				else {
					// Das Objekt ist erst in Zukunft gültig
					assert confObject.getFirstValidVersion() > configurationAreaFile.getActiveVersion() : "Gültig ab " + confObject.getFirstValidVersion()
					                                                                                      + " Derzeit gültige Version: "
					                                                                                      + configurationAreaFile.getActiveVersion();
					putNewObjectPidHashMap(confObject);
				}
			}
			else if(unknownObject instanceof DynamicObjectInfo) {
				DynamicObjectInfo dynObject = (DynamicObjectInfo)unknownObject;

				// In die Id Map eintragen
				putObjectId(dynObject);

				// Pid eintragen
				// dyn Objekte sind sofort bei ihrer Erschaffung gültig und werden sofort (nicht in der Zukunft ungültig)
				putActiveObjectPidHashMap(dynObject);
			}
			else if(unknownObject instanceof ConfigAreaFile.OldObject) {
				// Bei OldObjects wurde nur die Id und die Hash der Pid geladen. Weiterhin stellt die Klasse
				// die Position des Objekts in der Datei zur Verfügung, somit können die restlichen Teile nachgeladen werden.
				ConfigAreaFile.OldObject oldObject = (ConfigAreaFile.OldObject)unknownObject;

				// Mit diesem Objekt kann das als ungültig markierte Objekt aus der Datei in den Hauptspeicher geladen werden
				final LoadInformations loadInformations = new LoadInformations(oldObject.getFilePosition(), oldObject.getConfigAreaFile());

				putObjectId(oldObject.getId(), loadInformations);
//				synchronized (_idMap) {
//					_idMap.put(oldObject.getId(), loadInformations);
//				}
				// Pid eintragen
			}
			else {
				// Das Objekt ist völlig unbekannt, das sollte nicht passieren
				_debug.error("Konfigurationsobjekt völlig unbekannt: " + unknownObject.getClass());
			}
		}

//		System.out.println("Größe der Id Map: " + _idMap.size());
//		System.out.println("");

		return configurationAreaFile;
	}