[540786] Make it easier to regenerate UML2 for CDO

Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=540786
Change-Id: I6341b09ebae300ef075acb26e0c61c7d41be9529
Signed-off-by: Eike Stepper <stepper@esc-net.de>
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ActivityImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ActivityImpl.java
index f01747f..8a373bd 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ActivityImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ActivityImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2017 IBM Corporation, Embarcadero Technologies, CEA, and others.
+ * Copyright (c) 2005, 2018 IBM Corporation, Embarcadero Technologies, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *   Kenn Hussey (Embarcadero Technologies) - 204200
  *   Kenn Hussey - 286329, 323181, 519572
  *   Kenn Hussey (CEA) - 327039, 351774, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
@@ -22,11 +23,11 @@
 import org.eclipse.emf.common.notify.NotificationChain;
 
 import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.common.util.EList;
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
@@ -119,7 +120,7 @@
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @see #getGroups()
-	 * @generated NOT
+	 * @generated NOT_CDO
 	 * @ordered
 	 */
 	protected EList<ActivityGroup> groups;
@@ -159,7 +160,7 @@
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @see #getNodes()
-	 * @generated NOT
+	 * @generated NOT_CDO
 	 * @ordered
 	 */
 	protected EList<ActivityNode> nodes;
@@ -253,6 +254,35 @@
 		return UMLPackage.Literals.ACTIVITY;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.ACTIVITY__GROUP) {
+			return createGroupsList();
+		}
+
+		if (eStructuralFeature == UMLPackage.Literals.ACTIVITY__NODE) {
+			return createNodesList();
+		}
+
+		if (eStructuralFeature == UMLPackage.Literals.ACTIVITY__STRUCTURED_NODE) {
+			return createStructuredNodesList();
+		}
+		
+		if (eStructuralFeature == UMLPackage.Literals.ACTIVITY__PARTITION) {
+			return createPartitionsList();
+		}
+		
+		if (eStructuralFeature == UMLPackage.Literals.ACTIVITY__OWNED_GROUP) {
+			return createOwnedGroupsList();
+		}
+		
+		if (eStructuralFeature == UMLPackage.Literals.ACTIVITY__OWNED_NODE) {
+			return createOwnedNodesList();
+		}
+		
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -313,13 +343,17 @@
 	 */
 	public EList<ActivityGroup> getGroups() {
 		if (groups == null) {
-			groups = new SubsetSupersetEObjectResolvingEList<ActivityGroup>(
-				ActivityGroup.class, this, UMLPackage.ACTIVITY__GROUP, null,
-				GROUP_ESUBSETS);
+			groups = createGroupsList();
 		}
 		return groups;
 	}
 
+	private EList<ActivityGroup> createGroupsList() {
+		return new SubsetSupersetEObjectResolvingEList<ActivityGroup>(
+			ActivityGroup.class, this, UMLPackage.ACTIVITY__GROUP, null,
+			GROUP_ESUBSETS);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -327,13 +361,17 @@
 	 */
 	public EList<ActivityNode> getNodes() {
 		if (nodes == null) {
-			nodes = new SubsetSupersetEObjectResolvingEList<ActivityNode>(
-				ActivityNode.class, this, UMLPackage.ACTIVITY__NODE, null,
-				NODE_ESUBSETS);
+			nodes = createNodesList();
 		}
 		return nodes;
 	}
 
+	private EList<ActivityNode> createNodesList() {
+		return new SubsetSupersetEObjectResolvingEList<ActivityNode>(
+			ActivityNode.class, this, UMLPackage.ACTIVITY__NODE, null,
+			NODE_ESUBSETS);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -418,18 +456,22 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated NOT
+	 * @generated NOT_CDO
 	 */
 	public EList<StructuredActivityNode> getStructuredNodes() {
 		if (structuredNodes == null) {
-			structuredNodes = new SubsetSupersetEObjectContainmentEList.Resolving<StructuredActivityNode>(
-				StructuredActivityNode.class, this,
-				UMLPackage.ACTIVITY__STRUCTURED_NODE,
-				STRUCTURED_NODE_ESUPERSETS, null);
+			structuredNodes = createStructuredNodesList();
 		}
 		return structuredNodes;
 	}
 
+	private EList<StructuredActivityNode> createStructuredNodesList() {
+		return new SubsetSupersetEObjectContainmentEList.Resolving<StructuredActivityNode>(
+			StructuredActivityNode.class, this,
+			UMLPackage.ACTIVITY__STRUCTURED_NODE,
+			STRUCTURED_NODE_ESUPERSETS, null);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -574,17 +616,21 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<ActivityPartition> getPartitions() {
 		if (partitions == null) {
-			partitions = new SubsetSupersetEObjectResolvingEList<ActivityPartition>(
-				ActivityPartition.class, this, UMLPackage.ACTIVITY__PARTITION,
-				PARTITION_ESUPERSETS, null);
+			partitions = createPartitionsList();
 		}
 		return partitions;
 	}
 
+	private EList<ActivityPartition> createPartitionsList() {
+		return new SubsetSupersetEObjectResolvingEList<ActivityPartition>(
+			ActivityPartition.class, this, UMLPackage.ACTIVITY__PARTITION,
+			PARTITION_ESUPERSETS, null);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1934,17 +1980,21 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated NOT
+	 * @generated NOT_CDO
 	 */
 	public EList<ActivityGroup> getOwnedGroups() {
 		if (ownedGroups == null) {
-			ownedGroups = new SubsetSupersetEObjectContainmentEList.Resolving<ActivityGroup>(
-				ActivityGroup.class, this, UMLPackage.ACTIVITY__OWNED_GROUP,
-				OWNED_GROUP_ESUPERSETS, OWNED_GROUP_ESUBSETS);
+			ownedGroups = createOwnedGroupsList();
 		}
 		return ownedGroups;
 	}
 
+	private EList<ActivityGroup> createOwnedGroupsList() {
+		return new SubsetSupersetEObjectContainmentEList.Resolving<ActivityGroup>(
+			ActivityGroup.class, this, UMLPackage.ACTIVITY__OWNED_GROUP,
+			OWNED_GROUP_ESUPERSETS, OWNED_GROUP_ESUBSETS);
+	}
+
 	/**
 	 * The array of subset feature identifiers for the '{@link #getOwnedGroups() <em>Owned Group</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
@@ -2044,17 +2094,21 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated NOT
+	 * @generated NOT_CDO
 	 */
 	public EList<ActivityNode> getOwnedNodes() {
 		if (ownedNodes == null) {
-			ownedNodes = new SubsetSupersetEObjectContainmentEList.Resolving<ActivityNode>(
-				ActivityNode.class, this, UMLPackage.ACTIVITY__OWNED_NODE,
-				OWNED_NODE_ESUPERSETS, null);
+			ownedNodes = createOwnedNodesList();
 		}
 		return ownedNodes;
 	}
 
+	private EList<ActivityNode> createOwnedNodesList() {
+		return new SubsetSupersetEObjectContainmentEList.Resolving<ActivityNode>(
+			ActivityNode.class, this, UMLPackage.ACTIVITY__OWNED_NODE,
+			OWNED_NODE_ESUPERSETS, null);
+	}
+
 	protected static final int[] OWNED_NODE_ESUPERSETS = new int[]{
 		UMLPackage.ACTIVITY__NODE};
 
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/AssociationClassImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/AssociationClassImpl.java
index 72c6ce7..06761d0 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/AssociationClassImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/AssociationClassImpl.java
@@ -10,11 +10,13 @@
  *   Kenn Hussey (Embarcadero Technologies) - 204200
  *   Kenn Hussey - 286329, 323181, 519572
  *   Kenn Hussey (CEA) - 327039, 351774, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.Map;
 
@@ -22,11 +24,11 @@
 import org.eclipse.emf.common.notify.NotificationChain;
 
 import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.common.util.EList;
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
@@ -174,6 +176,23 @@
 		return UMLPackage.Literals.ASSOCIATION_CLASS;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.ASSOCIATION__MEMBER_END) {
+			return createMemberEndsList();
+		}
+
+		if (eStructuralFeature == UMLPackage.Literals.ASSOCIATION__NAVIGABLE_OWNED_END) {
+			return createNavigableOwnedEndsList();
+		}
+
+		if (eStructuralFeature == UMLPackage.Literals.ASSOCIATION__OWNED_END) {
+			return createOwnedEndsList();
+		}
+		
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -286,32 +305,40 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<Property> getMemberEnds() {
 		if (memberEnds == null) {
-			memberEnds = new SubsetSupersetEObjectWithInverseResolvingEList<Property>(
-				Property.class, this, UMLPackage.ASSOCIATION_CLASS__MEMBER_END,
-				null, MEMBER_END_ESUBSETS, UMLPackage.PROPERTY__ASSOCIATION);
+			memberEnds = createMemberEndsList();
 		}
 		return memberEnds;
 	}
 
+	private EList<Property> createMemberEndsList() {
+		return new SubsetSupersetEObjectWithInverseResolvingEList<Property>(
+			Property.class, this, UMLPackage.ASSOCIATION_CLASS__MEMBER_END,
+			null, MEMBER_END_ESUBSETS, UMLPackage.PROPERTY__ASSOCIATION);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<Property> getOwnedEnds() {
 		if (ownedEnds == null) {
-			ownedEnds = new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<Property>(
-				Property.class, this, UMLPackage.ASSOCIATION_CLASS__OWNED_END,
-				OWNED_END_ESUPERSETS, OWNED_END_ESUBSETS,
-				UMLPackage.PROPERTY__OWNING_ASSOCIATION);
+			ownedEnds = createOwnedEndsList();
 		}
 		return ownedEnds;
 	}
 
+	private EList<Property> createOwnedEndsList() {
+		return new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<Property>(
+			Property.class, this, UMLPackage.ASSOCIATION_CLASS__OWNED_END,
+			OWNED_END_ESUPERSETS, OWNED_END_ESUBSETS,
+			UMLPackage.PROPERTY__OWNING_ASSOCIATION);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -388,18 +415,22 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<Property> getNavigableOwnedEnds() {
 		if (navigableOwnedEnds == null) {
-			navigableOwnedEnds = new SubsetSupersetEObjectResolvingEList<Property>(
-				Property.class, this,
-				UMLPackage.ASSOCIATION_CLASS__NAVIGABLE_OWNED_END,
-				NAVIGABLE_OWNED_END_ESUPERSETS, null);
+			navigableOwnedEnds = createNavigableOwnedEndsList();
 		}
 		return navigableOwnedEnds;
 	}
 
+	private EList<Property> createNavigableOwnedEndsList() {
+		return new SubsetSupersetEObjectResolvingEList<Property>(
+			Property.class, this,
+			UMLPackage.ASSOCIATION_CLASS__NAVIGABLE_OWNED_END,
+			NAVIGABLE_OWNED_END_ESUPERSETS, null);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/AssociationImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/AssociationImpl.java
index 9762b79..a188046 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/AssociationImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/AssociationImpl.java
@@ -10,11 +10,13 @@
  *   Kenn Hussey (Embarcadero Technologies) - 204200
  *   Kenn Hussey - 286329, 323181, 519572
  *   Kenn Hussey (CEA) - 327039, 351774, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.Map;
 
@@ -22,11 +24,11 @@
 import org.eclipse.emf.common.notify.NotificationChain;
 
 import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.common.util.EList;
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
@@ -167,6 +169,23 @@
 		return UMLPackage.Literals.ASSOCIATION;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.ASSOCIATION__MEMBER_END) {
+			return createMemberEndsList();
+		}
+
+		if (eStructuralFeature == UMLPackage.Literals.ASSOCIATION__OWNED_END) {
+			return createOwnedEndsList();
+		}
+		
+		if (eStructuralFeature == UMLPackage.Literals.ASSOCIATION__NAVIGABLE_OWNED_END) {
+			return createNavigableOwnedEndsList();
+		}
+		
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -276,32 +295,40 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<Property> getMemberEnds() {
 		if (memberEnds == null) {
-			memberEnds = new SubsetSupersetEObjectWithInverseResolvingEList<Property>(
-				Property.class, this, UMLPackage.ASSOCIATION__MEMBER_END, null,
-				MEMBER_END_ESUBSETS, UMLPackage.PROPERTY__ASSOCIATION);
+			memberEnds = createMemberEndsList();
 		}
 		return memberEnds;
 	}
 
+	private EList<Property> createMemberEndsList() {
+		return new SubsetSupersetEObjectWithInverseResolvingEList<Property>(
+			Property.class, this, UMLPackage.ASSOCIATION__MEMBER_END, null,
+			MEMBER_END_ESUBSETS, UMLPackage.PROPERTY__ASSOCIATION);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<Property> getOwnedEnds() {
 		if (ownedEnds == null) {
-			ownedEnds = new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<Property>(
-				Property.class, this, UMLPackage.ASSOCIATION__OWNED_END,
-				OWNED_END_ESUPERSETS, OWNED_END_ESUBSETS,
-				UMLPackage.PROPERTY__OWNING_ASSOCIATION);
+			ownedEnds = createOwnedEndsList();
 		}
 		return ownedEnds;
 	}
 
+	private EList<Property> createOwnedEndsList() {
+		return new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<Property>(
+			Property.class, this, UMLPackage.ASSOCIATION__OWNED_END,
+			OWNED_END_ESUPERSETS, OWNED_END_ESUBSETS,
+			UMLPackage.PROPERTY__OWNING_ASSOCIATION);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -378,18 +405,22 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<Property> getNavigableOwnedEnds() {
 		if (navigableOwnedEnds == null) {
-			navigableOwnedEnds = new SubsetSupersetEObjectResolvingEList<Property>(
-				Property.class, this,
-				UMLPackage.ASSOCIATION__NAVIGABLE_OWNED_END,
-				NAVIGABLE_OWNED_END_ESUPERSETS, null);
+			navigableOwnedEnds = createNavigableOwnedEndsList();
 		}
 		return navigableOwnedEnds;
 	}
 
+	private EList<Property> createNavigableOwnedEndsList() {
+		return new SubsetSupersetEObjectResolvingEList<Property>(
+			Property.class, this,
+			UMLPackage.ASSOCIATION__NAVIGABLE_OWNED_END,
+			NAVIGABLE_OWNED_END_ESUPERSETS, null);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/BehaviorImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/BehaviorImpl.java
index 92fb36a..ca2f632 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/BehaviorImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/BehaviorImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2017 IBM Corporation, Embarcadero Technologies, CEA, and others.
+ * Copyright (c) 2005, 2018 IBM Corporation, Embarcadero Technologies, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *   Kenn Hussey (Embarcadero Technologies) - 204200
  *   Kenn Hussey - 286329, 323181, 519572
  *   Kenn Hussey (CEA) - 327039, 351774, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
@@ -22,11 +23,11 @@
 import org.eclipse.emf.common.notify.NotificationChain;
 
 import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.common.util.EList;
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
@@ -38,9 +39,9 @@
 
 import org.eclipse.uml2.common.util.CacheAdapter;
 import org.eclipse.uml2.common.util.DerivedUnionEObjectEList;
-
 import org.eclipse.uml2.common.util.SubsetSupersetEObjectContainmentWithInverseEList;
 import org.eclipse.uml2.common.util.SubsetSupersetEObjectResolvingEList;
+
 import org.eclipse.uml2.uml.AggregationKind;
 import org.eclipse.uml2.uml.Behavior;
 import org.eclipse.uml2.uml.BehavioralFeature;
@@ -216,6 +217,31 @@
 		return UMLPackage.Literals.BEHAVIOR;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.BEHAVIOR__REDEFINED_BEHAVIOR) {
+			return createRedefinedBehaviorsList();
+		}
+		
+		if (eStructuralFeature == UMLPackage.Literals.BEHAVIOR__PRECONDITION) {
+			return createPreconditionsList();
+		}
+
+		if (eStructuralFeature == UMLPackage.Literals.BEHAVIOR__POSTCONDITION) {
+			return createPostconditionsList();
+		}
+
+		if (eStructuralFeature == UMLPackage.Literals.NAMESPACE__OWNED_RULE) {
+			return createOwnedRulesList();
+		}
+		
+		if (eStructuralFeature == UMLPackage.Literals.CLASSIFIER__REDEFINED_CLASSIFIER) {
+			return createRedefinedClassifiersList();
+		}
+		
+		return null;
+	}
+	
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -331,17 +357,21 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<Behavior> getRedefinedBehaviors() {
 		if (redefinedBehaviors == null) {
-			redefinedBehaviors = new SubsetSupersetEObjectResolvingEList<Behavior>(
-				Behavior.class, this, UMLPackage.BEHAVIOR__REDEFINED_BEHAVIOR,
-				REDEFINED_BEHAVIOR_ESUPERSETS, null);
+			redefinedBehaviors = createRedefinedBehaviorsList();
 		}
 		return redefinedBehaviors;
 	}
 
+	private EList<Behavior> createRedefinedBehaviorsList() {
+		return new SubsetSupersetEObjectResolvingEList<Behavior>(
+			Behavior.class, this, UMLPackage.BEHAVIOR__REDEFINED_BEHAVIOR,
+			REDEFINED_BEHAVIOR_ESUPERSETS, null);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -425,59 +455,67 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated NOT
+	 * @generated NOT_CDO
 	 */
-	@SuppressWarnings("serial")
 	public EList<Constraint> getPreconditions() {
 		if (preconditions == null) {
-			preconditions = new SubsetSupersetEObjectResolvingEList<Constraint>(
-				Constraint.class, this, UMLPackage.BEHAVIOR__PRECONDITION,
-				PRECONDITION_ESUPERSETS, null) {
-
-				@Override
-				protected boolean enforceSubsetConstraints() {
-					return true;
-				}
-
-				@Override
-				protected void didAdd(int index, Constraint newObject) {
-					super.didAdd(index, newObject);
-
-					supersetAdd(newObject);
-				}
-			};
+			preconditions = createPreconditionsList();
 		}
 		return preconditions;
 	}
 
+	@SuppressWarnings("serial")
+	private EList<Constraint> createPreconditionsList() {
+		return new SubsetSupersetEObjectResolvingEList<Constraint>(
+			Constraint.class, this, UMLPackage.BEHAVIOR__PRECONDITION,
+			PRECONDITION_ESUPERSETS, null) {
+
+			@Override
+			protected boolean enforceSubsetConstraints() {
+				return true;
+			}
+
+			@Override
+			protected void didAdd(int index, Constraint newObject) {
+				super.didAdd(index, newObject);
+
+				supersetAdd(newObject);
+			}
+		};
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated NOT
+	 * @generated NOT_CDO
 	 */
-	@SuppressWarnings("serial")
 	public EList<Constraint> getPostconditions() {
 		if (postconditions == null) {
-			postconditions = new SubsetSupersetEObjectResolvingEList<Constraint>(
-				Constraint.class, this, UMLPackage.BEHAVIOR__POSTCONDITION,
-				POSTCONDITION_ESUPERSETS, null) {
-
-				@Override
-				protected boolean enforceSubsetConstraints() {
-					return true;
-				}
-
-				@Override
-				protected void didAdd(int index, Constraint newObject) {
-					super.didAdd(index, newObject);
-
-					supersetAdd(newObject);
-				}
-			};
+			postconditions = createPostconditionsList();
 		}
 		return postconditions;
 	}
 
+	@SuppressWarnings("serial")
+	private EList<Constraint> createPostconditionsList() {
+		return new SubsetSupersetEObjectResolvingEList<Constraint>(
+			Constraint.class, this, UMLPackage.BEHAVIOR__POSTCONDITION,
+			POSTCONDITION_ESUPERSETS, null) {
+
+			@Override
+			protected boolean enforceSubsetConstraints() {
+				return true;
+			}
+
+			@Override
+			protected void didAdd(int index, Constraint newObject) {
+				super.didAdd(index, newObject);
+
+				supersetAdd(newObject);
+			}
+		};
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1862,19 +1900,23 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 
 	@Override
 	public EList<Constraint> getOwnedRules() {
 		if (ownedRules == null) {
-			ownedRules = new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<Constraint>(
-				Constraint.class, this, UMLPackage.BEHAVIOR__OWNED_RULE, null,
-				OWNED_RULE_ESUBSETS, UMLPackage.CONSTRAINT__CONTEXT);
+			ownedRules = createOwnedRulesList();
 		}
 		return ownedRules;
 	}
 
+	private EList<Constraint> createOwnedRulesList() {
+		return new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<Constraint>(
+			Constraint.class, this, UMLPackage.BEHAVIOR__OWNED_RULE, null,
+			OWNED_RULE_ESUBSETS, UMLPackage.CONSTRAINT__CONTEXT);
+	}
+
 	/**
 	 * The array of subset feature identifiers for the '{@link #getOwnedRules() <em>Owned Rule</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
@@ -1889,19 +1931,23 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	@Override
 	public EList<Classifier> getRedefinedClassifiers() {
 		if (redefinedClassifiers == null) {
-			redefinedClassifiers = new SubsetSupersetEObjectResolvingEList<Classifier>(
-				Classifier.class, this,
-				UMLPackage.BEHAVIOR__REDEFINED_CLASSIFIER, null,
-				REDEFINED_CLASSIFIER_ESUBSETS);
+			redefinedClassifiers = createRedefinedClassifiersList();
 		}
 		return redefinedClassifiers;
 	}
 
+	private EList<Classifier> createRedefinedClassifiersList() {
+		return new SubsetSupersetEObjectResolvingEList<Classifier>(
+			Classifier.class, this,
+			UMLPackage.BEHAVIOR__REDEFINED_CLASSIFIER, null,
+			REDEFINED_CLASSIFIER_ESUBSETS);
+	}
+
 	/**
 	 * The array of subset feature identifiers for the '{@link #getRedefinedClassifiers() <em>Redefined Classifier</em>}' reference list.
 	 * <!-- begin-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/BehavioredClassifierImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/BehavioredClassifierImpl.java
index 5d40584..9b40430 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/BehavioredClassifierImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/BehavioredClassifierImpl.java
@@ -9,11 +9,13 @@
  *   IBM - initial API and implementation
  *   Kenn Hussey - 286329, 323181
  *   Kenn Hussey (CEA) - 327039, 351774, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.Map;
 
@@ -21,11 +23,11 @@
 import org.eclipse.emf.common.notify.NotificationChain;
 
 import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.common.util.EList;
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
@@ -141,6 +143,15 @@
 		return UMLPackage.Literals.BEHAVIORED_CLASSIFIER;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.BEHAVIORED_CLASSIFIER__OWNED_BEHAVIOR) {
+			return createOwnedBehaviorsList();
+		}
+
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -200,18 +211,22 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<Behavior> getOwnedBehaviors() {
 		if (ownedBehaviors == null) {
-			ownedBehaviors = new SubsetSupersetEObjectContainmentEList.Resolving<Behavior>(
-				Behavior.class, this,
-				UMLPackage.BEHAVIORED_CLASSIFIER__OWNED_BEHAVIOR, null,
-				OWNED_BEHAVIOR_ESUBSETS);
+			ownedBehaviors = createOwnedBehaviorsList();
 		}
 		return ownedBehaviors;
 	}
 
+	private EList<Behavior> createOwnedBehaviorsList() {
+		return new SubsetSupersetEObjectContainmentEList.Resolving<Behavior>(
+			Behavior.class, this,
+			UMLPackage.BEHAVIORED_CLASSIFIER__OWNED_BEHAVIOR, null,
+			OWNED_BEHAVIOR_ESUBSETS);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ClassImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ClassImpl.java
index 420466e..f53c599 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ClassImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ClassImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2017 IBM Corporation, Embarcadero Technologies, CEA, and others.
+ * Copyright (c) 2005, 2018 IBM Corporation, Embarcadero Technologies, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,11 +10,13 @@
  *   Kenn Hussey (Embarcadero Technologies) - 204200
  *   Kenn Hussey - 286329, 323181, 519572
  *   Kenn Hussey (CEA) - 327039, 351774, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.List;
 import java.util.ListIterator;
@@ -24,7 +26,6 @@
 import org.eclipse.emf.common.notify.NotificationChain;
 
 import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.common.util.EList;
 
 import org.eclipse.emf.ecore.EAnnotation;
@@ -57,9 +58,9 @@
 import org.eclipse.uml2.uml.ElementImport;
 import org.eclipse.uml2.uml.Extension;
 import org.eclipse.uml2.uml.Feature;
-import org.eclipse.uml2.uml.Interface;
 import org.eclipse.uml2.uml.Generalization;
 import org.eclipse.uml2.uml.GeneralizationSet;
+import org.eclipse.uml2.uml.Interface;
 import org.eclipse.uml2.uml.InterfaceRealization;
 import org.eclipse.uml2.uml.NamedElement;
 import org.eclipse.uml2.uml.Namespace;
@@ -216,6 +217,15 @@
 		return UMLPackage.Literals.CLASS;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.BEHAVIORED_CLASSIFIER__OWNED_BEHAVIOR) {
+			return createOwnedBehaviorsList();
+		}
+
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -271,17 +281,21 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<Behavior> getOwnedBehaviors() {
 		if (ownedBehaviors == null) {
-			ownedBehaviors = new SubsetSupersetEObjectContainmentEList.Resolving<Behavior>(
-				Behavior.class, this, UMLPackage.CLASS__OWNED_BEHAVIOR, null,
-				OWNED_BEHAVIOR_ESUBSETS);
+			ownedBehaviors = createOwnedBehaviorsList();
 		}
 		return ownedBehaviors;
 	}
 
+	private EList<Behavior> createOwnedBehaviorsList() {
+		return new SubsetSupersetEObjectContainmentEList.Resolving<Behavior>(
+			Behavior.class, this, UMLPackage.CLASS__OWNED_BEHAVIOR, null,
+			OWNED_BEHAVIOR_ESUBSETS);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ClassifierImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ClassifierImpl.java
index 44bf995..7669c87 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ClassifierImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ClassifierImpl.java
@@ -10,11 +10,13 @@
  *   Kenn Hussey (Embarcadero Technologies) - 204200
  *   Kenn Hussey - 286329, 323181, 519572
  *   Kenn Hussey (CEA) - 327039, 351774, 212765, 418466, 454400, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.Map;
 
@@ -22,11 +24,11 @@
 import org.eclipse.emf.common.notify.NotificationChain;
 
 import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.common.util.EList;
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
@@ -66,8 +68,8 @@
 import org.eclipse.uml2.uml.ParameterableElement;
 import org.eclipse.uml2.uml.Property;
 import org.eclipse.uml2.uml.RedefinableElement;
-import org.eclipse.uml2.uml.Stereotype;
 import org.eclipse.uml2.uml.RedefinableTemplateSignature;
+import org.eclipse.uml2.uml.Stereotype;
 import org.eclipse.uml2.uml.StringExpression;
 import org.eclipse.uml2.uml.StructuralFeature;
 import org.eclipse.uml2.uml.Substitution;
@@ -86,7 +88,6 @@
 import org.eclipse.uml2.uml.internal.operations.ParameterableElementOperations;
 import org.eclipse.uml2.uml.internal.operations.RedefinableElementOperations;
 import org.eclipse.uml2.uml.internal.operations.TemplateableElementOperations;
-
 import org.eclipse.uml2.uml.internal.operations.TypeOperations;
 
 /**
@@ -322,6 +323,15 @@
 		return UMLPackage.Literals.CLASSIFIER;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.CLASSIFIER__COLLABORATION_USE) {
+			return createCollaborationUsesList();
+		}
+
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1154,18 +1164,22 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<CollaborationUse> getCollaborationUses() {
 		if (collaborationUses == null) {
-			collaborationUses = new SubsetSupersetEObjectContainmentEList.Resolving<CollaborationUse>(
-				CollaborationUse.class, this,
-				UMLPackage.CLASSIFIER__COLLABORATION_USE, null,
-				COLLABORATION_USE_ESUBSETS);
+			collaborationUses = createCollaborationUsesList();
 		}
 		return collaborationUses;
 	}
 
+	private EList<CollaborationUse> createCollaborationUsesList() {
+		return new SubsetSupersetEObjectContainmentEList.Resolving<CollaborationUse>(
+			CollaborationUse.class, this,
+			UMLPackage.CLASSIFIER__COLLABORATION_USE, null,
+			COLLABORATION_USE_ESUBSETS);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ClassifierTemplateParameterImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ClassifierTemplateParameterImpl.java
index 171d3b7..abbafc1 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ClassifierTemplateParameterImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ClassifierTemplateParameterImpl.java
@@ -9,11 +9,13 @@
  *   IBM - initial API and implementation
  *   Kenn Hussey - 286329, 323181, 519572
  *   Kenn Hussey (CEA) - 327039, 351774, 212765, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.Map;
 
@@ -21,15 +23,17 @@
 import org.eclipse.emf.common.notify.NotificationChain;
 
 import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
 import org.eclipse.emf.ecore.util.EObjectResolvingEList;
 import org.eclipse.emf.ecore.util.InternalEList;
+
 import org.eclipse.emf.ecore.resource.Resource;
 
 import org.eclipse.uml2.uml.Classifier;
@@ -249,6 +253,7 @@
 
 		if (eInternalResource == null || !eInternalResource.isLoading()) {
 
+			ParameterableElement ownedParameteredElement = basicGetOwnedParameteredElement();
 			if (ownedParameteredElement != null
 				&& ownedParameteredElement != newParameteredElement) {
 
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/CollaborationImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/CollaborationImpl.java
index daa0bf5..8b07a2f 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/CollaborationImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/CollaborationImpl.java
@@ -9,11 +9,13 @@
  *   IBM - initial API and implementation
  *   Kenn Hussey - 286329, 323181
  *   Kenn Hussey (CEA) - 327039, 351774, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.Map;
 
@@ -21,14 +23,15 @@
 import org.eclipse.emf.common.notify.NotificationChain;
 
 import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.common.util.EList;
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
 import org.eclipse.emf.ecore.resource.Resource;
 
 import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
@@ -37,8 +40,8 @@
 
 import org.eclipse.uml2.common.util.CacheAdapter;
 import org.eclipse.uml2.common.util.DerivedUnionEObjectEList;
-
 import org.eclipse.uml2.common.util.SubsetSupersetEObjectContainmentEList;
+
 import org.eclipse.uml2.uml.AggregationKind;
 import org.eclipse.uml2.uml.Behavior;
 import org.eclipse.uml2.uml.BehavioredClassifier;
@@ -157,6 +160,15 @@
 		return UMLPackage.Literals.COLLABORATION;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.BEHAVIORED_CLASSIFIER__OWNED_BEHAVIOR) {
+			return createOwnedBehaviorsList();
+		}
+
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1400,17 +1412,21 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<Behavior> getOwnedBehaviors() {
 		if (ownedBehaviors == null) {
-			ownedBehaviors = new SubsetSupersetEObjectContainmentEList.Resolving<Behavior>(
-				Behavior.class, this, UMLPackage.COLLABORATION__OWNED_BEHAVIOR,
-				null, OWNED_BEHAVIOR_ESUBSETS);
+			ownedBehaviors = createOwnedBehaviorsList();
 		}
 		return ownedBehaviors;
 	}
 
+	private EList<Behavior> createOwnedBehaviorsList() {
+		return new SubsetSupersetEObjectContainmentEList.Resolving<Behavior>(
+			Behavior.class, this, UMLPackage.COLLABORATION__OWNED_BEHAVIOR,
+			null, OWNED_BEHAVIOR_ESUBSETS);
+	}
+
 	/**
 	 * The array of subset feature identifiers for the '{@link #getOwnedBehaviors() <em>Owned Behavior</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ComponentRealizationImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ComponentRealizationImpl.java
index 79e377d..817a8ca 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ComponentRealizationImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ComponentRealizationImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2016 IBM Corporation, CEA, and others.
+ * Copyright (c) 2005, 2018 IBM Corporation, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,11 +8,13 @@
  * Contributors:
  *   IBM - initial API and implementation
  *   Kenn Hussey (CEA) - 327039, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.util.Collection;
+
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
 
@@ -20,6 +22,7 @@
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
@@ -93,6 +96,23 @@
 		return UMLPackage.Literals.COMPONENT_REALIZATION;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.DEPENDENCY__CLIENT) {
+			return createClientsList();
+		}
+
+		if (eStructuralFeature == UMLPackage.Literals.COMPONENT_REALIZATION__REALIZING_CLASSIFIER) {
+			return createRealizingClassifiersList();
+		}
+		
+		if (eStructuralFeature == UMLPackage.Literals.DEPENDENCY__SUPPLIER) {
+			return createSuppliersList();
+		}
+		
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -109,19 +129,23 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	@Override
 	public EList<NamedElement> getClients() {
 		if (clients == null) {
-			clients = new SubsetSupersetEObjectResolvingEList<NamedElement>(
-				NamedElement.class, this,
-				UMLPackage.COMPONENT_REALIZATION__CLIENT, null,
-				CLIENT_ESUBSETS);
+			clients = createClientsList();
 		}
 		return clients;
 	}
 
+	private EList<NamedElement> createClientsList() {
+		return new SubsetSupersetEObjectResolvingEList<NamedElement>(
+			NamedElement.class, this,
+			UMLPackage.COMPONENT_REALIZATION__CLIENT, null,
+			CLIENT_ESUBSETS);
+	}
+
 	/**
 	 * The array of subset feature identifiers for the '{@link #getClients() <em>Client</em>}' reference list.
 	 * <!-- begin-user-doc -->
@@ -136,19 +160,23 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	@Override
 	public EList<NamedElement> getSuppliers() {
 		if (suppliers == null) {
-			suppliers = new SubsetSupersetEObjectResolvingEList<NamedElement>(
-				NamedElement.class, this,
-				UMLPackage.COMPONENT_REALIZATION__SUPPLIER, null,
-				SUPPLIER_ESUBSETS);
+			suppliers = createSuppliersList();
 		}
 		return suppliers;
 	}
 
+	private EList<NamedElement> createSuppliersList() {
+		return new SubsetSupersetEObjectResolvingEList<NamedElement>(
+			NamedElement.class, this,
+			UMLPackage.COMPONENT_REALIZATION__SUPPLIER, null,
+			SUPPLIER_ESUBSETS);
+	}
+
 	/**
 	 * The array of subset feature identifiers for the '{@link #getSuppliers() <em>Supplier</em>}' reference list.
 	 * <!-- begin-user-doc -->
@@ -233,18 +261,22 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<Classifier> getRealizingClassifiers() {
 		if (realizingClassifiers == null) {
-			realizingClassifiers = new SubsetSupersetEObjectResolvingEList<Classifier>(
-				Classifier.class, this,
-				UMLPackage.COMPONENT_REALIZATION__REALIZING_CLASSIFIER,
-				REALIZING_CLASSIFIER_ESUPERSETS, null);
+			realizingClassifiers = createRealizingClassifiersList();
 		}
 		return realizingClassifiers;
 	}
 
+	private EList<Classifier> createRealizingClassifiersList() {
+		return new SubsetSupersetEObjectResolvingEList<Classifier>(
+			Classifier.class, this,
+			UMLPackage.COMPONENT_REALIZATION__REALIZING_CLASSIFIER,
+			REALIZING_CLASSIFIER_ESUPERSETS, null);
+	}
+
 	/**
 	 * The array of superset feature identifiers for the '{@link #getRealizingClassifiers() <em>Realizing Classifier</em>}' reference list.
 	 * <!-- begin-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ConnectableElementTemplateParameterImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ConnectableElementTemplateParameterImpl.java
index 8c3b66d..58253a0 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ConnectableElementTemplateParameterImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ConnectableElementTemplateParameterImpl.java
@@ -8,11 +8,13 @@
  * Contributors:
  *   IBM - initial API and implementation
  *   Kenn Hussey (CEA) - 212765, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.util.Collection;
+
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
 
@@ -21,9 +23,11 @@
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
 import org.eclipse.emf.ecore.resource.Resource;
 
 import org.eclipse.emf.ecore.util.InternalEList;
+
 import org.eclipse.uml2.uml.Comment;
 import org.eclipse.uml2.uml.ConnectableElement;
 import org.eclipse.uml2.uml.ConnectableElementTemplateParameter;
@@ -136,6 +140,7 @@
 
 		if (eInternalResource == null || !eInternalResource.isLoading()) {
 
+			ParameterableElement ownedParameteredElement = basicGetOwnedParameteredElement();
 			if (ownedParameteredElement != null
 				&& ownedParameteredElement != newParameteredElement) {
 
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/DeploymentImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/DeploymentImpl.java
index 2f0b004..2c44c58 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/DeploymentImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/DeploymentImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2016 IBM Corporation, CEA, and others.
+ * Copyright (c) 2005, 2018 IBM Corporation, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,11 +8,13 @@
  * Contributors:
  *   IBM - initial API and implementation
  *   Kenn Hussey (CEA) - 327039, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.util.Collection;
+
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
 
@@ -20,6 +22,7 @@
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
@@ -108,6 +111,23 @@
 		return UMLPackage.Literals.DEPLOYMENT;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.DEPENDENCY__CLIENT) {
+			return createClientsList();
+		}
+
+		if (eStructuralFeature == UMLPackage.Literals.DEPLOYMENT__DEPLOYED_ARTIFACT) {
+			return createDeployedArtifactsList();
+		}
+		
+		if (eStructuralFeature == UMLPackage.Literals.DEPENDENCY__SUPPLIER) {
+			return createSuppliersList();
+		}
+		
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -138,48 +158,60 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	@Override
 	public EList<NamedElement> getSuppliers() {
 		if (suppliers == null) {
-			suppliers = new SubsetSupersetEObjectResolvingEList<NamedElement>(
-				NamedElement.class, this, UMLPackage.DEPLOYMENT__SUPPLIER, null,
-				SUPPLIER_ESUBSETS);
+			suppliers = createSuppliersList();
 		}
 		return suppliers;
 	}
 
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EList<NamedElement> getClients() {
-		if (clients == null) {
-			clients = new SubsetSupersetEObjectResolvingEList<NamedElement>(
-				NamedElement.class, this, UMLPackage.DEPLOYMENT__CLIENT, null,
-				CLIENT_ESUBSETS);
-		}
-		return clients;
+	private EList<NamedElement> createSuppliersList() {
+		return new SubsetSupersetEObjectResolvingEList<NamedElement>(
+			NamedElement.class, this, UMLPackage.DEPLOYMENT__SUPPLIER, null,
+			SUPPLIER_ESUBSETS);
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
+	 */
+	@Override
+	public EList<NamedElement> getClients() {
+		if (clients == null) {
+			clients = createClientsList();
+		}
+		return clients;
+	}
+
+	private EList<NamedElement> createClientsList() {
+		return new SubsetSupersetEObjectResolvingEList<NamedElement>(
+			NamedElement.class, this, UMLPackage.DEPLOYMENT__CLIENT, null,
+			CLIENT_ESUBSETS);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT_CDO
 	 */
 	public EList<DeployedArtifact> getDeployedArtifacts() {
 		if (deployedArtifacts == null) {
-			deployedArtifacts = new SubsetSupersetEObjectResolvingEList<DeployedArtifact>(
-				DeployedArtifact.class, this,
-				UMLPackage.DEPLOYMENT__DEPLOYED_ARTIFACT,
-				DEPLOYED_ARTIFACT_ESUPERSETS, null);
+			deployedArtifacts = createDeployedArtifactsList();
 		}
 		return deployedArtifacts;
 	}
 
+	private EList<DeployedArtifact> createDeployedArtifactsList() {
+		return new SubsetSupersetEObjectResolvingEList<DeployedArtifact>(
+			DeployedArtifact.class, this,
+			UMLPackage.DEPLOYMENT__DEPLOYED_ARTIFACT,
+			DEPLOYED_ARTIFACT_ESUPERSETS, null);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ExtensionImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ExtensionImpl.java
index d4f339b..07ee836 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ExtensionImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ExtensionImpl.java
@@ -9,33 +9,36 @@
  *   IBM - initial API and implementation
  *   Kenn Hussey - 286329, 323181
  *   Kenn Hussey (CEA) - 327039, 351774, 212765, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.Map;
 
 import org.eclipse.emf.common.notify.NotificationChain;
-import org.eclipse.emf.common.util.DiagnosticChain;
 
+import org.eclipse.emf.common.util.DiagnosticChain;
 import org.eclipse.emf.common.util.EList;
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
-import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
-
 import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.uml2.common.util.SubsetSupersetEObjectContainmentWithInverseEList;
+
 import org.eclipse.uml2.uml.AggregationKind;
 import org.eclipse.uml2.uml.Classifier;
 import org.eclipse.uml2.uml.CollaborationUse;
 import org.eclipse.uml2.uml.Comment;
 import org.eclipse.uml2.uml.Constraint;
 import org.eclipse.uml2.uml.ElementImport;
-import org.eclipse.uml2.common.util.SubsetSupersetEObjectContainmentWithInverseEList;
 import org.eclipse.uml2.uml.Extension;
 import org.eclipse.uml2.uml.ExtensionEnd;
 import org.eclipse.uml2.uml.Generalization;
@@ -55,9 +58,9 @@
 import org.eclipse.uml2.uml.TemplateSignature;
 import org.eclipse.uml2.uml.Type;
 import org.eclipse.uml2.uml.UMLPackage;
-
 import org.eclipse.uml2.uml.UseCase;
 import org.eclipse.uml2.uml.VisibilityKind;
+
 import org.eclipse.uml2.uml.internal.operations.ExtensionOperations;
 
 /**
@@ -107,30 +110,34 @@
 	protected EClass eStaticClass() {
 		return UMLPackage.Literals.EXTENSION;
 	}
+	
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.ASSOCIATION__OWNED_END) {
+			return createOwnedEndsList();
+		}
+
+		return null;
+	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
-	public EList<Property> getOwnedEndsGen() {
+	@Override
+	public EList<Property> getOwnedEnds() {
 		if (ownedEnds == null) {
-			ownedEnds = new EObjectContainmentWithInverseEList.Resolving<Property>(
-				ExtensionEnd.class, this, UMLPackage.EXTENSION__OWNED_END,
-				UMLPackage.PROPERTY__OWNING_ASSOCIATION);
+			ownedEnds = createOwnedEndsList();
 		}
 		return ownedEnds;
 	}
 
-	@Override
-	public EList<Property> getOwnedEnds() {
-		if (ownedEnds == null) {
-			ownedEnds = new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<Property>(
-				ExtensionEnd.class, this, UMLPackage.EXTENSION__OWNED_END,
-				OWNED_END_ESUPERSETS, OWNED_END_ESUBSETS,
-				UMLPackage.PROPERTY__OWNING_ASSOCIATION);
-		}
-		return ownedEnds;
+	private EList<Property> createOwnedEndsList() {
+		return new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<Property>(
+			ExtensionEnd.class, this, UMLPackage.EXTENSION__OWNED_END,
+			OWNED_END_ESUPERSETS, OWNED_END_ESUBSETS,
+			UMLPackage.PROPERTY__OWNING_ASSOCIATION);
 	}
 
 	/**
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/InterfaceImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/InterfaceImpl.java
index b01905b..7462839 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/InterfaceImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/InterfaceImpl.java
@@ -9,11 +9,13 @@
  *   IBM - initial API and implementation
  *   Kenn Hussey - 286329, 323181
  *   Kenn Hussey (CEA) - 327039, 351774, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.Map;
 
@@ -21,11 +23,11 @@
 import org.eclipse.emf.common.notify.NotificationChain;
 
 import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.common.util.EList;
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
@@ -38,8 +40,8 @@
 
 import org.eclipse.uml2.common.util.CacheAdapter;
 import org.eclipse.uml2.common.util.DerivedUnionEObjectEList;
-
 import org.eclipse.uml2.common.util.SubsetSupersetEObjectResolvingEList;
+
 import org.eclipse.uml2.uml.AggregationKind;
 import org.eclipse.uml2.uml.Classifier;
 import org.eclipse.uml2.uml.CollaborationUse;
@@ -179,6 +181,19 @@
 		return UMLPackage.Literals.INTERFACE;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.CLASSIFIER__REDEFINED_CLASSIFIER) {
+			return createRedefinedClassifiersList();
+		}
+
+		if (eStructuralFeature == UMLPackage.Literals.INTERFACE__REDEFINED_INTERFACE) {
+			return createRedefinedInterfacesList();
+		}
+		
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -389,18 +404,22 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<Interface> getRedefinedInterfaces() {
 		if (redefinedInterfaces == null) {
-			redefinedInterfaces = new SubsetSupersetEObjectResolvingEList<Interface>(
-				Interface.class, this,
-				UMLPackage.INTERFACE__REDEFINED_INTERFACE,
-				REDEFINED_INTERFACE_ESUPERSETS, null);
+			redefinedInterfaces = createRedefinedInterfacesList();
 		}
 		return redefinedInterfaces;
 	}
 
+	private EList<Interface> createRedefinedInterfacesList() {
+		return new SubsetSupersetEObjectResolvingEList<Interface>(
+			Interface.class, this,
+			UMLPackage.INTERFACE__REDEFINED_INTERFACE,
+			REDEFINED_INTERFACE_ESUPERSETS, null);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1706,19 +1725,23 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	@Override
 	public EList<Classifier> getRedefinedClassifiers() {
 		if (redefinedClassifiers == null) {
-			redefinedClassifiers = new SubsetSupersetEObjectResolvingEList<Classifier>(
-				Classifier.class, this,
-				UMLPackage.INTERFACE__REDEFINED_CLASSIFIER, null,
-				REDEFINED_CLASSIFIER_ESUBSETS);
+			redefinedClassifiers = createRedefinedClassifiersList();
 		}
 		return redefinedClassifiers;
 	}
 
+	private EList<Classifier> createRedefinedClassifiersList() {
+		return new SubsetSupersetEObjectResolvingEList<Classifier>(
+			Classifier.class, this,
+			UMLPackage.INTERFACE__REDEFINED_CLASSIFIER, null,
+			REDEFINED_CLASSIFIER_ESUBSETS);
+	}
+
 	/**
 	 * The array of subset feature identifiers for the '{@link #getRedefinedClassifiers() <em>Redefined Classifier</em>}' reference list.
 	 * <!-- begin-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/InterfaceRealizationImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/InterfaceRealizationImpl.java
index b59a440..d301b00 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/InterfaceRealizationImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/InterfaceRealizationImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2016 IBM Corporation, CEA, and others.
+ * Copyright (c) 2005, 2018 IBM Corporation, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,11 +8,13 @@
  * Contributors:
  *   IBM - initial API and implementation
  *   Kenn Hussey (CEA) - 327039, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.util.Collection;
+
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
 
@@ -20,6 +22,7 @@
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
@@ -93,6 +96,19 @@
 		return UMLPackage.Literals.INTERFACE_REALIZATION;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.DEPENDENCY__CLIENT) {
+			return createClientsList();
+		}
+
+		if (eStructuralFeature == UMLPackage.Literals.DEPENDENCY__SUPPLIER) {
+			return createSuppliersList();
+		}
+		
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -123,19 +139,23 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	@Override
 	public EList<NamedElement> getSuppliers() {
 		if (suppliers == null) {
-			suppliers = new SubsetSupersetEObjectResolvingEList<NamedElement>(
-				NamedElement.class, this,
-				UMLPackage.INTERFACE_REALIZATION__SUPPLIER, null,
-				SUPPLIER_ESUBSETS);
+			suppliers = createSuppliersList();
 		}
 		return suppliers;
 	}
 
+	private EList<NamedElement> createSuppliersList() {
+		return new SubsetSupersetEObjectResolvingEList<NamedElement>(
+			NamedElement.class, this,
+			UMLPackage.INTERFACE_REALIZATION__SUPPLIER, null,
+			SUPPLIER_ESUBSETS);
+	}
+
 	/**
 	 * The array of subset feature identifiers for the '{@link #getSuppliers() <em>Supplier</em>}' reference list.
 	 * <!-- begin-user-doc -->
@@ -150,19 +170,23 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	@Override
 	public EList<NamedElement> getClients() {
 		if (clients == null) {
-			clients = new SubsetSupersetEObjectResolvingEList<NamedElement>(
-				NamedElement.class, this,
-				UMLPackage.INTERFACE_REALIZATION__CLIENT, null,
-				CLIENT_ESUBSETS);
+			clients = createClientsList();
 		}
 		return clients;
 	}
 
+	private EList<NamedElement> createClientsList() {
+		return new SubsetSupersetEObjectResolvingEList<NamedElement>(
+			NamedElement.class, this,
+			UMLPackage.INTERFACE_REALIZATION__CLIENT, null,
+			CLIENT_ESUBSETS);
+	}
+
 	/**
 	 * The array of subset feature identifiers for the '{@link #getClients() <em>Client</em>}' reference list.
 	 * <!-- begin-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ManifestationImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ManifestationImpl.java
index f429d59..14ce4cf 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ManifestationImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ManifestationImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2016 IBM Corporation, CEA, and others.
+ * Copyright (c) 2005, 2018 IBM Corporation, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,17 +8,20 @@
  * Contributors:
  *   IBM - initial API and implementation
  *   Kenn Hussey (CEA) - 327039, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.util.Collection;
+
 import org.eclipse.emf.common.notify.Notification;
 
 import org.eclipse.emf.common.util.EList;
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
@@ -84,21 +87,34 @@
 		return UMLPackage.Literals.MANIFESTATION;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.DEPENDENCY__SUPPLIER) {
+			return createSuppliersList();
+		}
+
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	@Override
 	public EList<NamedElement> getSuppliers() {
 		if (suppliers == null) {
-			suppliers = new SubsetSupersetEObjectResolvingEList<NamedElement>(
-				NamedElement.class, this, UMLPackage.MANIFESTATION__SUPPLIER,
-				null, SUPPLIER_ESUBSETS);
+			suppliers = createSuppliersList();
 		}
 		return suppliers;
 	}
 
+	private EList<NamedElement> createSuppliersList() {
+		return new SubsetSupersetEObjectResolvingEList<NamedElement>(
+			NamedElement.class, this, UMLPackage.MANIFESTATION__SUPPLIER,
+			null, SUPPLIER_ESUBSETS);
+	}
+
 	/**
 	 * The array of subset feature identifiers for the '{@link #getSuppliers() <em>Supplier</em>}' reference list.
 	 * <!-- begin-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/OperationImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/OperationImpl.java
index efd1726..78b2161 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/OperationImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/OperationImpl.java
@@ -10,11 +10,13 @@
  *   Kenn Hussey (Embarcadero Technologies) - 204200
  *   Kenn Hussey - 286329, 323181, 519572
  *   Kenn Hussey (CEA) - 327039, 351774, 212765, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.Map;
 
@@ -22,11 +24,11 @@
 import org.eclipse.emf.common.notify.NotificationChain;
 
 import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.common.util.EList;
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
@@ -56,9 +58,9 @@
 import org.eclipse.uml2.uml.NamedElement;
 import org.eclipse.uml2.uml.Namespace;
 import org.eclipse.uml2.uml.Operation;
+import org.eclipse.uml2.uml.OperationTemplateParameter;
 import org.eclipse.uml2.uml.PackageImport;
 import org.eclipse.uml2.uml.PackageableElement;
-import org.eclipse.uml2.uml.OperationTemplateParameter;
 import org.eclipse.uml2.uml.Parameter;
 import org.eclipse.uml2.uml.ParameterSet;
 import org.eclipse.uml2.uml.ParameterableElement;
@@ -268,6 +270,23 @@
 		return UMLPackage.Literals.OPERATION;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.NAMESPACE__OWNED_RULE) {
+			return createOwnedRulesList();
+		}
+
+		if (eStructuralFeature == UMLPackage.Literals.OPERATION__POSTCONDITION) {
+			return createPostconditionsList();
+		}
+
+		if (eStructuralFeature == UMLPackage.Literals.OPERATION__PRECONDITION) {
+			return createPreconditionsList();
+		}
+		
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -757,18 +776,22 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	@Override
 	public EList<Constraint> getOwnedRules() {
 		if (ownedRules == null) {
-			ownedRules = new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<Constraint>(
-				Constraint.class, this, UMLPackage.OPERATION__OWNED_RULE, null,
-				OWNED_RULE_ESUBSETS, UMLPackage.CONSTRAINT__CONTEXT);
+			ownedRules = createOwnedRulesList();
 		}
 		return ownedRules;
 	}
 
+	private EList<Constraint> createOwnedRulesList() {
+		return new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<Constraint>(
+			Constraint.class, this, UMLPackage.OPERATION__OWNED_RULE, null,
+			OWNED_RULE_ESUBSETS, UMLPackage.CONSTRAINT__CONTEXT);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -894,31 +917,39 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<Constraint> getPreconditions() {
 		if (preconditions == null) {
-			preconditions = new SubsetSupersetEObjectResolvingEList<Constraint>(
-				Constraint.class, this, UMLPackage.OPERATION__PRECONDITION,
-				PRECONDITION_ESUPERSETS, null);
+			preconditions = createPreconditionsList();
 		}
 		return preconditions;
 	}
 
+	private EList<Constraint> createPreconditionsList() {
+		return new SubsetSupersetEObjectResolvingEList<Constraint>(
+			Constraint.class, this, UMLPackage.OPERATION__PRECONDITION,
+			PRECONDITION_ESUPERSETS, null);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<Constraint> getPostconditions() {
 		if (postconditions == null) {
-			postconditions = new SubsetSupersetEObjectResolvingEList<Constraint>(
-				Constraint.class, this, UMLPackage.OPERATION__POSTCONDITION,
-				POSTCONDITION_ESUPERSETS, null);
+			postconditions = createPostconditionsList();
 		}
 		return postconditions;
 	}
 
+	private EList<Constraint> createPostconditionsList() {
+		return new SubsetSupersetEObjectResolvingEList<Constraint>(
+			Constraint.class, this, UMLPackage.OPERATION__POSTCONDITION,
+			POSTCONDITION_ESUPERSETS, null);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/OperationTemplateParameterImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/OperationTemplateParameterImpl.java
index 71cd2a6..c5ee928 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/OperationTemplateParameterImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/OperationTemplateParameterImpl.java
@@ -8,26 +8,32 @@
  * Contributors:
  *   IBM - initial API and implementation
  *   Kenn Hussey (CEA) - 212765, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.Map;
+
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
 
 import org.eclipse.emf.common.util.DiagnosticChain;
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
 import org.eclipse.emf.ecore.resource.Resource;
 
 import org.eclipse.emf.ecore.util.InternalEList;
+
 import org.eclipse.uml2.uml.Comment;
 import org.eclipse.uml2.uml.Operation;
 import org.eclipse.uml2.uml.OperationTemplateParameter;
@@ -35,6 +41,7 @@
 import org.eclipse.uml2.uml.Stereotype;
 import org.eclipse.uml2.uml.TemplateSignature;
 import org.eclipse.uml2.uml.UMLPackage;
+
 import org.eclipse.uml2.uml.internal.operations.OperationTemplateParameterOperations;
 
 /**
@@ -142,6 +149,7 @@
 
 		if (eInternalResource == null || !eInternalResource.isLoading()) {
 
+			ParameterableElement ownedParameteredElement = basicGetOwnedParameteredElement();
 			if (ownedParameteredElement != null
 				&& ownedParameteredElement != newParameteredElement) {
 
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/PortImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/PortImpl.java
index 39c239c..e60bc1e 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/PortImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/PortImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2017 IBM Corporation, Embarcadero Technologies, CEA, and others.
+ * Copyright (c) 2005, 2018 IBM Corporation, Embarcadero Technologies, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,22 +10,24 @@
  *   Kenn Hussey (Embarcadero Technologies) - 204200
  *   Kenn Hussey - 286329, 323181, 519572
  *   Kenn Hussey (CEA) - 327039, 351774, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.Map;
 
 import org.eclipse.emf.common.notify.Notification;
 
 import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.common.util.EList;
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
@@ -181,21 +183,38 @@
 		return UMLPackage.Literals.PORT;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.PORT__REDEFINED_PORT) {
+			return createRedefinedPortsList();
+		}
+
+		if (eStructuralFeature == UMLPackage.Literals.PROPERTY__REDEFINED_PROPERTY) {
+			return createRedefinedPropertiesList();
+		}
+		
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	@Override
 	public EList<Property> getRedefinedProperties() {
 		if (redefinedProperties == null) {
-			redefinedProperties = new SubsetSupersetEObjectResolvingEList<Property>(
-				Property.class, this, UMLPackage.PORT__REDEFINED_PROPERTY, null,
-				REDEFINED_PROPERTY_ESUBSETS);
+			redefinedProperties = createRedefinedPropertiesList();
 		}
 		return redefinedProperties;
 	}
 
+	private EList<Property> createRedefinedPropertiesList() {
+		return new SubsetSupersetEObjectResolvingEList<Property>(
+			Property.class, this, UMLPackage.PORT__REDEFINED_PROPERTY, null,
+			REDEFINED_PROPERTY_ESUBSETS);
+	}
+
 	/**
 	 * The array of subset feature identifiers for the '{@link #getRedefinedProperties() <em>Redefined Property</em>}' reference list.
 	 * <!-- begin-user-doc -->
@@ -331,17 +350,21 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<Port> getRedefinedPorts() {
 		if (redefinedPorts == null) {
-			redefinedPorts = new SubsetSupersetEObjectResolvingEList<Port>(
-				Port.class, this, UMLPackage.PORT__REDEFINED_PORT,
-				REDEFINED_PORT_ESUPERSETS, null);
+			redefinedPorts = createRedefinedPortsList();
 		}
 		return redefinedPorts;
 	}
 
+	private EList<Port> createRedefinedPortsList() {
+		return new SubsetSupersetEObjectResolvingEList<Port>(
+			Port.class, this, UMLPackage.PORT__REDEFINED_PORT,
+			REDEFINED_PORT_ESUPERSETS, null);
+	}
+
 	/**
 	 * The array of superset feature identifiers for the '{@link #getRedefinedPorts() <em>Redefined Port</em>}' reference list.
 	 * <!-- begin-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ProfileImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ProfileImpl.java
index 3923d51..7b68a68 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ProfileImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ProfileImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2016 IBM Corporation, CEA, and others.
+ * Copyright (c) 2005, 2018 IBM Corporation, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,18 +9,19 @@
  *   IBM - initial API and implementation
  *   Kenn Hussey - 286329, 323181
  *   Kenn Hussey (CEA) - 327039, 351774, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.Map;
 
 import org.eclipse.emf.common.notify.NotificationChain;
 
 import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.common.util.EList;
 
 import org.eclipse.emf.ecore.EAnnotation;
@@ -28,6 +29,7 @@
 import org.eclipse.emf.ecore.ENamedElement;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.util.InternalEList;
@@ -120,22 +122,47 @@
 		return UMLPackage.Literals.PROFILE;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.NAMESPACE__ELEMENT_IMPORT) {
+			return createElementImportsList();
+		}
+
+		if (eStructuralFeature == UMLPackage.Literals.PROFILE__METACLASS_REFERENCE) {
+			return createMetaclassReferencesList();
+		}
+		
+		if (eStructuralFeature == UMLPackage.Literals.PROFILE__METAMODEL_REFERENCE) {
+			return createMetamodelReferencesList();
+		}
+		
+		if (eStructuralFeature == UMLPackage.Literals.NAMESPACE__PACKAGE_IMPORT) {
+			return createPackageImportsList();
+		}
+		
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	@Override
 	public EList<ElementImport> getElementImports() {
 		if (elementImports == null) {
-			elementImports = new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<ElementImport>(
-				ElementImport.class, this, UMLPackage.PROFILE__ELEMENT_IMPORT,
-				null, ELEMENT_IMPORT_ESUBSETS,
-				UMLPackage.ELEMENT_IMPORT__IMPORTING_NAMESPACE);
+			elementImports = createElementImportsList();
 		}
 		return elementImports;
 	}
 
+	private EList<ElementImport> createElementImportsList() {
+		return new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<ElementImport>(
+			ElementImport.class, this, UMLPackage.PROFILE__ELEMENT_IMPORT,
+			null, ELEMENT_IMPORT_ESUBSETS,
+			UMLPackage.ELEMENT_IMPORT__IMPORTING_NAMESPACE);
+	}
+
 	/**
 	 * The array of subset feature identifiers for the '{@link #getElementImports() <em>Element Import</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
@@ -150,19 +177,23 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	@Override
 	public EList<PackageImport> getPackageImports() {
 		if (packageImports == null) {
-			packageImports = new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<PackageImport>(
-				PackageImport.class, this, UMLPackage.PROFILE__PACKAGE_IMPORT,
-				null, PACKAGE_IMPORT_ESUBSETS,
-				UMLPackage.PACKAGE_IMPORT__IMPORTING_NAMESPACE);
+			packageImports = createPackageImportsList();
 		}
 		return packageImports;
 	}
 
+	private EList<PackageImport> createPackageImportsList() {
+		return new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<PackageImport>(
+			PackageImport.class, this, UMLPackage.PROFILE__PACKAGE_IMPORT,
+			null, PACKAGE_IMPORT_ESUBSETS,
+			UMLPackage.PACKAGE_IMPORT__IMPORTING_NAMESPACE);
+	}
+
 	/**
 	 * The array of subset feature identifiers for the '{@link #getPackageImports() <em>Package Import</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
@@ -199,18 +230,22 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<ElementImport> getMetaclassReferences() {
 		if (metaclassReferences == null) {
-			metaclassReferences = new SubsetSupersetEObjectResolvingEList<ElementImport>(
-				ElementImport.class, this,
-				UMLPackage.PROFILE__METACLASS_REFERENCE,
-				METACLASS_REFERENCE_ESUPERSETS, null);
+			metaclassReferences = createMetaclassReferencesList();
 		}
 		return metaclassReferences;
 	}
 
+	private EList<ElementImport> createMetaclassReferencesList() {
+		return new SubsetSupersetEObjectResolvingEList<ElementImport>(
+			ElementImport.class, this,
+			UMLPackage.PROFILE__METACLASS_REFERENCE,
+			METACLASS_REFERENCE_ESUPERSETS, null);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -257,18 +292,22 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<PackageImport> getMetamodelReferences() {
 		if (metamodelReferences == null) {
-			metamodelReferences = new SubsetSupersetEObjectResolvingEList<PackageImport>(
-				PackageImport.class, this,
-				UMLPackage.PROFILE__METAMODEL_REFERENCE,
-				METAMODEL_REFERENCE_ESUPERSETS, null);
+			metamodelReferences = createMetamodelReferencesList();
 		}
 		return metamodelReferences;
 	}
 
+	private EList<PackageImport> createMetamodelReferencesList() {
+		return new SubsetSupersetEObjectResolvingEList<PackageImport>(
+			PackageImport.class, this,
+			UMLPackage.PROFILE__METAMODEL_REFERENCE,
+			METAMODEL_REFERENCE_ESUPERSETS, null);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ProtocolTransitionImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ProtocolTransitionImpl.java
index 396b429..83c9a11 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ProtocolTransitionImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/ProtocolTransitionImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2016 IBM Corporation, Embarcadero Technologies, CEA, and others.
+ * Copyright (c) 2005, 2018 IBM Corporation, Embarcadero Technologies, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,11 +10,13 @@
  *   Kenn Hussey (Embarcadero Technologies) - 204200
  *   Kenn Hussey - 286329, 323181
  *   Kenn Hussey (CEA) - 327039, 351774, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.List;
 import java.util.ListIterator;
@@ -24,7 +26,6 @@
 import org.eclipse.emf.common.notify.NotificationChain;
 
 import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.common.util.EList;
 
 import org.eclipse.emf.ecore.EAnnotation;
@@ -39,18 +40,17 @@
 import org.eclipse.emf.ecore.util.InternalEList;
 
 import org.eclipse.uml2.common.util.CacheAdapter;
+import org.eclipse.uml2.common.util.DerivedEObjectEList;
 import org.eclipse.uml2.common.util.SubsetSupersetEObjectContainmentWithInverseEList;
 
-import org.eclipse.uml2.common.util.DerivedEObjectEList;
-
 import org.eclipse.uml2.uml.Behavior;
-import org.eclipse.uml2.uml.Comment;
 import org.eclipse.uml2.uml.CallEvent;
+import org.eclipse.uml2.uml.Comment;
 import org.eclipse.uml2.uml.Constraint;
 import org.eclipse.uml2.uml.ElementImport;
+import org.eclipse.uml2.uml.Event;
 import org.eclipse.uml2.uml.NamedElement;
 import org.eclipse.uml2.uml.Namespace;
-import org.eclipse.uml2.uml.Event;
 import org.eclipse.uml2.uml.Operation;
 import org.eclipse.uml2.uml.PackageImport;
 import org.eclipse.uml2.uml.PackageableElement;
@@ -130,22 +130,35 @@
 		return UMLPackage.Literals.PROTOCOL_TRANSITION;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.NAMESPACE__OWNED_RULE) {
+			return createOwnedRulesList();
+		}
+
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	@Override
 	public EList<Constraint> getOwnedRules() {
 		if (ownedRules == null) {
-			ownedRules = new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<Constraint>(
-				Constraint.class, this,
-				UMLPackage.PROTOCOL_TRANSITION__OWNED_RULE, null,
-				OWNED_RULE_ESUBSETS, UMLPackage.CONSTRAINT__CONTEXT);
+			ownedRules = createOwnedRulesList();
 		}
 		return ownedRules;
 	}
 
+	private EList<Constraint> createOwnedRulesList() {
+		return new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<Constraint>(
+			Constraint.class, this,
+			UMLPackage.PROTOCOL_TRANSITION__OWNED_RULE, null,
+			OWNED_RULE_ESUBSETS, UMLPackage.CONSTRAINT__CONTEXT);
+	}
+
 	/**
 	 * The array of subset feature identifiers for the '{@link #getOwnedRules() <em>Owned Rule</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/RedefinableTemplateSignatureImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/RedefinableTemplateSignatureImpl.java
index 8c83c1d..d140676 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/RedefinableTemplateSignatureImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/RedefinableTemplateSignatureImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2016 IBM Corporation, CEA, and others.
+ * Copyright (c) 2005, 2018 IBM Corporation, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,11 +9,13 @@
  *   IBM - initial API and implementation
  *   Kenn Hussey - 286329, 323181
  *   Kenn Hussey (CEA) - 327039, 351774, 386760, 212765, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.Map;
 
@@ -21,7 +23,6 @@
 import org.eclipse.emf.common.notify.NotificationChain;
 
 import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.common.util.EList;
 
 import org.eclipse.emf.ecore.EAnnotation;
@@ -31,6 +32,7 @@
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
 import org.eclipse.emf.ecore.resource.Resource;
 
 import org.eclipse.emf.ecore.util.EObjectResolvingEList;
@@ -134,6 +136,19 @@
 		return UMLPackage.Literals.REDEFINABLE_TEMPLATE_SIGNATURE;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.TEMPLATE_SIGNATURE__PARAMETER) {
+			return createParametersList();
+		}
+		
+		if (eStructuralFeature == UMLPackage.Literals.TEMPLATE_SIGNATURE__OWNED_PARAMETER) {
+			return createOwnedParametersList();
+		}
+		
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -165,18 +180,22 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<TemplateParameter> getParameters() {
 		if (parameters == null) {
-			parameters = new SubsetSupersetEObjectResolvingEList<TemplateParameter>(
-				TemplateParameter.class, this,
-				UMLPackage.REDEFINABLE_TEMPLATE_SIGNATURE__PARAMETER, null,
-				PARAMETER_ESUBSETS);
+			parameters = createParametersList();
 		}
 		return parameters;
 	}
 
+	private EList<TemplateParameter> createParametersList() {
+		return new SubsetSupersetEObjectResolvingEList<TemplateParameter>(
+			TemplateParameter.class, this,
+			UMLPackage.REDEFINABLE_TEMPLATE_SIGNATURE__PARAMETER, null,
+			PARAMETER_ESUBSETS);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -268,15 +287,19 @@
 	 */
 	public EList<TemplateParameter> getOwnedParameters() {
 		if (ownedParameters == null) {
-			ownedParameters = new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<TemplateParameter>(
-				TemplateParameter.class, this,
-				UMLPackage.REDEFINABLE_TEMPLATE_SIGNATURE__OWNED_PARAMETER,
-				OWNED_PARAMETER_ESUPERSETS, null,
-				UMLPackage.TEMPLATE_PARAMETER__SIGNATURE);
+			ownedParameters = createOwnedParametersList();
 		}
 		return ownedParameters;
 	}
 
+	private EList<TemplateParameter> createOwnedParametersList() {
+		return new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<TemplateParameter>(
+			TemplateParameter.class, this,
+			UMLPackage.REDEFINABLE_TEMPLATE_SIGNATURE__OWNED_PARAMETER,
+			OWNED_PARAMETER_ESUPERSETS, null,
+			UMLPackage.TEMPLATE_PARAMETER__SIGNATURE);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/StateImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/StateImpl.java
index 9c1d871..6f3ec94 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/StateImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/StateImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2017 IBM Corporation, Embarcadero Technologies, CEA, and others.
+ * Copyright (c) 2005, 2018 IBM Corporation, Embarcadero Technologies, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,11 +10,13 @@
  *   Kenn Hussey (Embarcadero Technologies) - 204200
  *   Kenn Hussey - 286329, 323181, 519572
  *   Kenn Hussey (CEA) - 327039, 351774, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -28,6 +30,7 @@
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
@@ -42,8 +45,8 @@
 
 import org.eclipse.uml2.common.util.CacheAdapter;
 import org.eclipse.uml2.common.util.DerivedUnionEObjectEList;
-
 import org.eclipse.uml2.common.util.SubsetSupersetEObjectContainmentWithInverseEList;
+
 import org.eclipse.uml2.uml.Behavior;
 import org.eclipse.uml2.uml.Classifier;
 import org.eclipse.uml2.uml.Comment;
@@ -291,6 +294,15 @@
 		return UMLPackage.Literals.STATE;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.NAMESPACE__OWNED_RULE) {
+			return createOwnedRulesList();
+		}
+
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -2431,18 +2443,22 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	@Override
 	public EList<Constraint> getOwnedRules() {
 		if (ownedRules == null) {
-			ownedRules = new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<Constraint>(
-				Constraint.class, this, UMLPackage.STATE__OWNED_RULE, null,
-				OWNED_RULE_ESUBSETS, UMLPackage.CONSTRAINT__CONTEXT);
+			ownedRules = createOwnedRulesList();
 		}
 		return ownedRules;
 	}
 
+	private EList<Constraint> createOwnedRulesList() {
+		return new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<Constraint>(
+			Constraint.class, this, UMLPackage.STATE__OWNED_RULE, null,
+			OWNED_RULE_ESUBSETS, UMLPackage.CONSTRAINT__CONTEXT);
+	}
+
 	/**
 	 * The array of subset feature identifiers for the '{@link #getOwnedRules() <em>Owned Rule</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/StateMachineImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/StateMachineImpl.java
index 46f9966..3de883b 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/StateMachineImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/StateMachineImpl.java
@@ -9,22 +9,23 @@
  *   IBM - initial API and implementation
  *   Kenn Hussey - 286329, 323181
  *   Kenn Hussey (CEA) - 327039, 351774, 418466, 451350, 479276, 485756, 511674
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.Map;
 
 import org.eclipse.emf.common.notify.NotificationChain;
-
 import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.common.util.EList;
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.resource.Resource;
@@ -35,8 +36,8 @@
 
 import org.eclipse.uml2.common.util.CacheAdapter;
 import org.eclipse.uml2.common.util.DerivedUnionEObjectEList;
-
 import org.eclipse.uml2.common.util.SubsetSupersetEObjectResolvingEList;
+
 import org.eclipse.uml2.uml.AggregationKind;
 import org.eclipse.uml2.uml.Behavior;
 import org.eclipse.uml2.uml.BehavioralFeature;
@@ -160,6 +161,19 @@
 		return UMLPackage.Literals.STATE_MACHINE;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.STATE_MACHINE__EXTENDED_STATE_MACHINE) {
+			return createExtendedStateMachinesList();
+		}
+
+		if (eStructuralFeature == UMLPackage.Literals.CLASSIFIER__REDEFINED_CLASSIFIER) {
+			return createRedefinedClassifiersList();
+		}
+		
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -345,18 +359,22 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<StateMachine> getExtendedStateMachines() {
 		if (extendedStateMachines == null) {
-			extendedStateMachines = new SubsetSupersetEObjectResolvingEList<StateMachine>(
-				StateMachine.class, this,
-				UMLPackage.STATE_MACHINE__EXTENDED_STATE_MACHINE,
-				EXTENDED_STATE_MACHINE_ESUPERSETS, null);
+			extendedStateMachines = createExtendedStateMachinesList();
 		}
 		return extendedStateMachines;
 	}
 
+	private EList<StateMachine> createExtendedStateMachinesList() {
+		return new SubsetSupersetEObjectResolvingEList<StateMachine>(
+			StateMachine.class, this,
+			UMLPackage.STATE_MACHINE__EXTENDED_STATE_MACHINE,
+			EXTENDED_STATE_MACHINE_ESUPERSETS, null);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1705,19 +1723,23 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	@Override
 	public EList<Classifier> getRedefinedClassifiers() {
 		if (redefinedClassifiers == null) {
-			redefinedClassifiers = new SubsetSupersetEObjectResolvingEList<Classifier>(
-				Classifier.class, this,
-				UMLPackage.STATE_MACHINE__REDEFINED_CLASSIFIER, null,
-				REDEFINED_CLASSIFIER_ESUBSETS);
+			redefinedClassifiers = createRedefinedClassifiersList();
 		}
 		return redefinedClassifiers;
 	}
 
+	private EList<Classifier> createRedefinedClassifiersList() {
+		return new SubsetSupersetEObjectResolvingEList<Classifier>(
+			Classifier.class, this,
+			UMLPackage.STATE_MACHINE__REDEFINED_CLASSIFIER, null,
+			REDEFINED_CLASSIFIER_ESUBSETS);
+	}
+
 	/**
 	 * The array of subset feature identifiers for the '{@link #getRedefinedClassifiers() <em>Redefined Classifier</em>}' reference list.
 	 * <!-- begin-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/SubstitutionImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/SubstitutionImpl.java
index c74102a..dd63112 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/SubstitutionImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/SubstitutionImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2016 IBM Corporation, CEA, and others.
+ * Copyright (c) 2005, 2018 IBM Corporation, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,11 +8,13 @@
  * Contributors:
  *   IBM - initial API and implementation
  *   Kenn Hussey (CEA) - 327039, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.util.Collection;
+
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
 
@@ -20,6 +22,7 @@
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
@@ -92,6 +95,19 @@
 		return UMLPackage.Literals.SUBSTITUTION;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.DEPENDENCY__CLIENT) {
+			return createClientsList();
+		}
+
+		if (eStructuralFeature == UMLPackage.Literals.DEPENDENCY__SUPPLIER) {
+			return createSuppliersList();
+		}
+		
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -122,18 +138,22 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	@Override
 	public EList<NamedElement> getSuppliers() {
 		if (suppliers == null) {
-			suppliers = new SubsetSupersetEObjectResolvingEList<NamedElement>(
-				NamedElement.class, this, UMLPackage.SUBSTITUTION__SUPPLIER,
-				null, SUPPLIER_ESUBSETS);
+			suppliers = createSuppliersList();
 		}
 		return suppliers;
 	}
 
+	private EList<NamedElement> createSuppliersList() {
+		return new SubsetSupersetEObjectResolvingEList<NamedElement>(
+			NamedElement.class, this, UMLPackage.SUBSTITUTION__SUPPLIER,
+			null, SUPPLIER_ESUBSETS);
+	}
+
 	/**
 	 * The array of subset feature identifiers for the '{@link #getSuppliers() <em>Supplier</em>}' reference list.
 	 * <!-- begin-user-doc -->
@@ -148,18 +168,22 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	@Override
 	public EList<NamedElement> getClients() {
 		if (clients == null) {
-			clients = new SubsetSupersetEObjectResolvingEList<NamedElement>(
-				NamedElement.class, this, UMLPackage.SUBSTITUTION__CLIENT, null,
-				CLIENT_ESUBSETS);
+			clients = createClientsList();
 		}
 		return clients;
 	}
 
+	private EList<NamedElement> createClientsList() {
+		return new SubsetSupersetEObjectResolvingEList<NamedElement>(
+			NamedElement.class, this, UMLPackage.SUBSTITUTION__CLIENT, null,
+			CLIENT_ESUBSETS);
+	}
+
 	/**
 	 * The array of subset feature identifiers for the '{@link #getClients() <em>Client</em>}' reference list.
 	 * <!-- begin-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/TemplateSignatureImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/TemplateSignatureImpl.java
index 1d5ddde..788ba12 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/TemplateSignatureImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/TemplateSignatureImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2016 IBM Corporation, CEA, and others.
+ * Copyright (c) 2005, 2018 IBM Corporation, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,11 +9,13 @@
  *   IBM - initial API and implementation
  *   Kenn Hussey - 286329, 323181
  *   Kenn Hussey (CEA) - 327039, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.Map;
 
@@ -21,11 +23,11 @@
 import org.eclipse.emf.common.notify.NotificationChain;
 
 import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.common.util.EList;
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
@@ -110,6 +112,19 @@
 		return UMLPackage.Literals.TEMPLATE_SIGNATURE;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.TEMPLATE_SIGNATURE__PARAMETER) {
+			return createParametersList();
+		}
+		
+		if (eStructuralFeature == UMLPackage.Literals.TEMPLATE_SIGNATURE__OWNED_PARAMETER) {
+			return createOwnedParametersList();
+		}
+		
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -141,18 +156,22 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	public EList<TemplateParameter> getParameters() {
 		if (parameters == null) {
-			parameters = new SubsetSupersetEObjectResolvingEList<TemplateParameter>(
-				TemplateParameter.class, this,
-				UMLPackage.TEMPLATE_SIGNATURE__PARAMETER, null,
-				PARAMETER_ESUBSETS);
+			parameters = createParametersList();
 		}
 		return parameters;
 	}
 
+	private EList<TemplateParameter> createParametersList() {
+		return new SubsetSupersetEObjectResolvingEList<TemplateParameter>(
+			TemplateParameter.class, this,
+			UMLPackage.TEMPLATE_SIGNATURE__PARAMETER, null,
+			PARAMETER_ESUBSETS);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -222,15 +241,19 @@
 	 */
 	public EList<TemplateParameter> getOwnedParameters() {
 		if (ownedParameters == null) {
-			ownedParameters = new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<TemplateParameter>(
-				TemplateParameter.class, this,
-				UMLPackage.TEMPLATE_SIGNATURE__OWNED_PARAMETER,
-				OWNED_PARAMETER_ESUPERSETS, null,
-				UMLPackage.TEMPLATE_PARAMETER__SIGNATURE);
+			ownedParameters = createOwnedParametersList();
 		}
 		return ownedParameters;
 	}
 
+	private EList<TemplateParameter> createOwnedParametersList() {
+		return new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<TemplateParameter>(
+			TemplateParameter.class, this,
+			UMLPackage.TEMPLATE_SIGNATURE__OWNED_PARAMETER,
+			OWNED_PARAMETER_ESUPERSETS, null,
+			UMLPackage.TEMPLATE_PARAMETER__SIGNATURE);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/TransitionImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/TransitionImpl.java
index 5b50bb1..fc657b3 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/TransitionImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/impl/TransitionImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2017 IBM Corporation, Embarcadero Technologies, CEA, and others.
+ * Copyright (c) 2005, 2018 IBM Corporation, Embarcadero Technologies, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,11 +10,13 @@
  *   Kenn Hussey (Embarcadero Technologies) - 204200
  *   Kenn Hussey - 286329, 323181, 519572
  *   Kenn Hussey (CEA) - 327039, 351774, 418466, 451350, 485756
+ *   Eike Stepper - 540786
  *
  */
 package org.eclipse.uml2.uml.internal.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -28,6 +30,7 @@
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
@@ -41,7 +44,6 @@
 
 import org.eclipse.uml2.common.util.CacheAdapter;
 import org.eclipse.uml2.common.util.DerivedUnionEObjectEList;
-
 import org.eclipse.uml2.common.util.SubsetSupersetEObjectContainmentWithInverseEList;
 
 import org.eclipse.uml2.uml.Behavior;
@@ -248,6 +250,15 @@
 		return UMLPackage.Literals.TRANSITION;
 	}
 
+	@SuppressWarnings("unused")
+	private EList<?> createSubsetSupersetList(EStructuralFeature eStructuralFeature) {
+		if (eStructuralFeature == UMLPackage.Literals.NAMESPACE__OWNED_RULE) {
+			return createOwnedRulesList();
+		}
+
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -307,18 +318,22 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT_CDO
 	 */
 	@Override
 	public EList<Constraint> getOwnedRules() {
 		if (ownedRules == null) {
-			ownedRules = new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<Constraint>(
-				Constraint.class, this, UMLPackage.TRANSITION__OWNED_RULE, null,
-				OWNED_RULE_ESUBSETS, UMLPackage.CONSTRAINT__CONTEXT);
+			ownedRules = createOwnedRulesList();
 		}
 		return ownedRules;
 	}
 
+	private EList<Constraint> createOwnedRulesList() {
+		return new SubsetSupersetEObjectContainmentWithInverseEList.Resolving<Constraint>(
+			Constraint.class, this, UMLPackage.TRANSITION__OWNED_RULE, null,
+			OWNED_RULE_ESUBSETS, UMLPackage.CONSTRAINT__CONTEXT);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/releng/org.eclipse.uml2.build-feature/UML2.setup b/releng/org.eclipse.uml2.build-feature/UML2.setup
index db08f4f..12f49a2 100644
--- a/releng/org.eclipse.uml2.build-feature/UML2.setup
+++ b/releng/org.eclipse.uml2.build-feature/UML2.setup
@@ -195,6 +195,10 @@
     <description>${scope.project.label}</description>
   </setupTask>
   <setupTask
+      xsi:type="setup:StringSubstitutionTask"
+      name="git.clone.uml2"
+      value="${git.clone.uml2}"/>
+  <setupTask
       xsi:type="setup.targlets:TargletTask">
     <targlet
         name="${scope.project.label}"