* @param atgAndSet         Array, welches die Attributgruppen und Mengenverwendungen enthält
	 *
	 * @throws ConfigurationChangeException Falls die Mengen nicht am Objekt-Typ gespeichert werden konnten.
	 */
	private void setSystemObjectTypeAttributeGroups(ConfigurationArea configurationArea, SystemObjectType systemObjectType, Object[] atgAndSet)
			throws ConfigurationChangeException {
		NonMutableSet atgSet = systemObjectType.getNonMutableSet("Attributgruppen");
		if(atgSet == null) {
			// Menge der Attributgruppen wird neu angelegt
			final ConfigurationObjectType atgType = (ConfigurationObjectType)_dataModel.getType(Pid.SetType.ATTRIBUTEGROUPS);
			atgSet = (NonMutableSet)configurationArea.createConfigurationObject(atgType, "", "Attributgruppen", null);
			systemObjectType.addSet(atgSet);
			_debug.finer("Menge der Attributgruppen für den Objekt-Typ mit der Pid '" + systemObjectType.getPid() + "' wurde erstellt.");
		}
		else {
			setSystemObjectKeeping(atgSet);
		}
		NonMutableSet objectSetUsesSet = systemObjectType.getNonMutableSet("Mengen");
		if(objectSetUsesSet == null && systemObjectType.isConfigurating()) {
			// Menge der Mengenverwendungen erzeugen, wenn es kein dynamischer Typ ist.
			final ConfigurationObjectType objectSetUseType = (ConfigurationObjectType)_dataModel.getType(Pid.SetType.OBJECT_SET_USES);
			objectSetUsesSet = (NonMutableSet)configurationArea.createConfigurationObject(objectSetUseType, "", "Mengen", null);
			systemObjectType.addSet(objectSetUsesSet);
			_debug.finer("Menge der Mengenverwendungen für den Objekt-Typ mit der Pid '" + systemObjectType.getPid() + "' wurde erstellt.");
		}
		else {
			setSystemObjectKeeping(objectSetUsesSet);
		}

		// Elemente der Mengenverwendungen
		List<SystemObject> elementsInObjectSetUsesSet = new LinkedList<SystemObject>();
		if(systemObjectType.isConfigurating()) {
			elementsInObjectSetUsesSet = objectSetUsesSet.getElementsInVersion(systemObjectType.getConfigurationArea().getModifiableVersion());
		}

		final List<AttributeGroup> directAttributeGroups = new ArrayList<AttributeGroup>();
		final List<ObjectSetUse> directObjectSetUses = new ArrayList<ObjectSetUse>();
		for(Object o : atgAndSet) {
			if(o instanceof String) {
				// hier handelt es sich um Attributgruppen
				final String pid = (String)o;
				final SystemObject object = getObject(pid);
				if(object == null) throwNoObjectException(pid);
				directAttributeGroups.add((AttributeGroup)object);
			}
			else if(o instanceof ConfigurationSet) {
				if(systemObjectType.isConfigurating()) {
					// hier handelt es sich um Mengen
					ConfigurationSet configurationSet = (ConfigurationSet)o;
					// neues Objekt erhält keine Pid und keinen Namen (wird nicht benötigt)
					ObjectSetUse objectSetUse = null;
					for(SystemObject systemObject : elementsInObjectSetUsesSet) {
						ObjectSetUse use = (ObjectSetUse)systemObject;
						if(use.getObjectSetName().equals(configurationSet.getObjectSetName())) {
							objectSetUse = use;
						}
					}
					if(objectSetUse == null) {
						// Neue Mengenverwendung wird angelegt
						final ConfigurationObjectType type = (ConfigurationObjectType)_dataModel.getType(Pid.Type.OBJECT_SET_USE);
						objectSetUse = (ObjectSetUse)configurationArea.createConfigurationObject(type, "", "", null);
					}
					else {
						setSystemObjectKeeping(objectSetUse);
					}
					if(_objectDiffs.isInfoDifferent(configurationSet.getInfo(), objectSetUse.getInfo())) {
						setInfo(objectSetUse, configurationSet.getInfo());
					}
					// Mengen-Typ der Elemente und ob die Menge erforderlich ist überprüfen
					final String setTypePid = configurationSet.getSetTypePid();
					final SystemObject objectSetType = getObject(setTypePid);
					if(objectSetType == null) throwNoObjectException(setTypePid);
//					if(objectSetUse.getConfigurationData(_dataModel.getAttributeGroup("atg.mengenVerwendungsEigenschaften")) == null
					if(getConfigurationData(objectSetUse, _dataModel.getAttributeGroup("atg.mengenVerwendungsEigenschaften")) == null
					   || configurationSet.getRequired() != objectSetUse.isRequired() || objectSetType != objectSetUse.getObjectSetType()) {
						setObjectSetUseProperties(objectSetUse, configurationSet);
					}
					directObjectSetUses.add(objectSetUse);
				}
				else {
					throw new ConfigurationChangeException("Ein dynamischer Typ darf keine Mengen besitzen.");
				}
			}
		}

		// Menge der Attributgruppen
		final List<SystemObject> elementsInAtgSet = atgSet.getElementsInVersion(systemObjectType.getConfigurationArea().getModifiableVersion());
		// überflüssige Elemente entfernen
		for(SystemObject systemObject : elementsInAtgSet) {
			AttributeGroup attributeGroup = (AttributeGroup)systemObject;
			if(!directAttributeGroups.contains(attributeGroup)) {
				atgSet.remove(attributeGroup);
			}
		}
		// Elemente hinzufügen
		for(AttributeGroup attributeGroup : directAttributeGroups) {
			if(!elementsInAtgSet.contains(attributeGroup)) {
				atgSet.add(attributeGroup);
			}
		}

		if(systemObjectType.isConfigurating()) {
			// Menge der Mengenverwendungen
			// überflüssige Elemente entfernen
			for(SystemObject systemObject : elementsInObjectSetUsesSet) {
				ObjectSetUse use = (ObjectSetUse)systemObject;
				if(!directObjectSetUses.contains(use)) {
					objectSetUsesSet.remove(use);
				}
			}
			// Elemente hinzufügen
			for(ObjectSetUse objectSetUse : directObjectSetUses) {
				if(!elementsInObjectSetUsesSet.contains(objectSetUse)) {
					objectSetUsesSet.add(objectSetUse);
				}
			}
		}
	}