diff --git a/org.eclipse.papyrus.bpmn.tests/src/org/eclipse/papyrus/bpmn/bpmnprofiletest/FlowNodeCustomTest.java b/org.eclipse.papyrus.bpmn.tests/src/org/eclipse/papyrus/bpmn/bpmnprofiletest/FlowNodeCustomTest.java
new file mode 100644
index 0000000..d647c71
--- /dev/null
+++ b/org.eclipse.papyrus.bpmn.tests/src/org/eclipse/papyrus/bpmn/bpmnprofiletest/FlowNodeCustomTest.java
@@ -0,0 +1,123 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA.
+ * <p>
+ * 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ * <p>
+ * Contributors:
+ * Géry Deloge (CEATech AQUI) gery.deloge@cea.fr - Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.bpmn.bpmnprofiletest;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNAssociation;
+import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNProfilePackage;
+import org.eclipse.papyrus.bpmn.BPMNProfile.FlowNode;
+import org.eclipse.papyrus.bpmn.BPMNProfile.impl.FlowNodeCustom;
+import org.eclipse.papyrus.bpmn.util.BPMNResource;
+import org.eclipse.uml2.uml.*;
+import org.eclipse.uml2.uml.util.UMLUtil;
+import org.eclipse.uml2.uml.util.UMLUtil.StereotypeApplicationHelper;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class FlowNodeCustomTest {
+
+	private OpaqueAction source;
+	private OpaqueAction target;
+	
+	@Before
+	public void setUp() {
+		Model model = BPMNResource.createBPMNModel();
+
+		Activity activity = UMLFactory.eINSTANCE.createActivity();
+		model.getPackagedElements().add(activity);
+		StereotypeApplicationHelper.getInstance(null).applyStereotype(activity, BPMNProfilePackage.eINSTANCE.getBPMNProcess());
+
+		ControlFlow controlFlow = UMLFactory.eINSTANCE.createControlFlow();
+		controlFlow.setActivity(activity);
+		StereotypeApplicationHelper.getInstance(null).applyStereotype(controlFlow, BPMNProfilePackage.eINSTANCE.getSequenceFlow());
+	
+		source = UMLFactory.eINSTANCE.createOpaqueAction();
+		activity.getOwnedNodes().add(source);		
+		StereotypeApplicationHelper.getInstance(null).applyStereotype(source, BPMNProfilePackage.eINSTANCE.getTask());
+	
+		target = UMLFactory.eINSTANCE.createOpaqueAction();
+		activity.getOwnedNodes().add(target);		
+		StereotypeApplicationHelper.getInstance(null).applyStereotype(target, BPMNProfilePackage.eINSTANCE.getTask());
+
+		controlFlow.setSource(source);
+		controlFlow.setTarget(target);
+	}
+	
+	@Test
+	public void getOutgoingGeneratedTest(){
+		FlowNode flownode = UMLUtil.getStereotypeApplication(source, FlowNode.class);
+		try{			
+			flownode.getOutgoing();
+		}
+		catch(UnsupportedOperationException e){
+			Assert.fail("missing custom code !");
+		}
+	}
+
+	/* ignored for now
+	   see https://bugs.eclipse.org/bugs/show_bug.cgi?id=516820
+	 */
+	@Ignore @Test
+	public void getOutgoingGeneratedCustomTest(){
+		FlowNode flownode = UMLUtil.getStereotypeApplication(source, FlowNode.class);	
+		EList<BPMNAssociation> list = FlowNodeCustom.getOutgoing(flownode);
+		Assert.assertEquals(1, list.size());
+		Assert.assertEquals(target, list.get(0));
+	}
+
+	/* ignored for now
+	   see https://bugs.eclipse.org/bugs/show_bug.cgi?id=516820
+	 */
+	@Ignore @Test
+	public void getOutgoingTest(){
+		FlowNode flownode = UMLUtil.getStereotypeApplication(source, FlowNode.class);	
+		EList<BPMNAssociation> list = flownode.getOutgoing();
+		Assert.assertEquals(1, list.size());
+		Assert.assertEquals(target, list.get(0));
+	}
+
+
+	@Test
+	public void getIncomingGeneratedTest(){
+		FlowNode flownode = UMLUtil.getStereotypeApplication(target, FlowNode.class);
+		try{
+			flownode.getIncoming();
+		}
+		catch(UnsupportedOperationException e){
+			Assert.fail("missing custom code !");
+		}
+	}
+
+	/* ignored for now
+   	   see https://bugs.eclipse.org/bugs/show_bug.cgi?id=516820
+ 	*/
+	@Ignore @Test
+	public void getIncomingGeneratedCustomTest(){
+		FlowNode flownode = UMLUtil.getStereotypeApplication(target, FlowNode.class);	
+		EList<BPMNAssociation> list = FlowNodeCustom.getOutgoing(flownode);
+		Assert.assertEquals(1, list.size());
+		Assert.assertEquals(source, list.get(0));
+	}
+
+	/* ignored for now
+	   see https://bugs.eclipse.org/bugs/show_bug.cgi?id=516820
+ 	*/
+	@Ignore @Test
+	public void getIncomingTest(){
+		FlowNode flownode = UMLUtil.getStereotypeApplication(target, FlowNode.class);	
+		EList<BPMNAssociation> list = flownode.getOutgoing();
+		Assert.assertEquals(1, list.size());
+		Assert.assertEquals(source, list.get(0));
+	}
+}
diff --git a/org.eclipse.papyrus.bpmn/custom-src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/FlowNodeCustom.java b/org.eclipse.papyrus.bpmn/custom-src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/FlowNodeCustom.java
new file mode 100644
index 0000000..2c74298
--- /dev/null
+++ b/org.eclipse.papyrus.bpmn/custom-src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/FlowNodeCustom.java
@@ -0,0 +1,68 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST and others.
+ * <p>
+ * 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ * <p>
+ * Contributors:
+ * CEA LIST - Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.bpmn.BPMNProfile.impl;
+
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNAssociation;
+import org.eclipse.papyrus.bpmn.BPMNProfile.FlowNode;
+import org.eclipse.uml2.uml.ActivityEdge;
+import org.eclipse.uml2.uml.ActivityNode;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+
+public class FlowNodeCustom {
+
+	private FlowNodeCustom() {
+	}
+
+	/*
+	 * from BPMN profile v1.0 §10.2.2.4, should return List<SequenceFlow>
+	 */
+	public static EList<BPMNAssociation> getOutgoing(FlowNode flowNode) {
+
+		ActivityNode activityNode = flowNode.getBase_ActivityNode();
+		List<BPMNAssociation> list = new ArrayList<>();
+		if (activityNode != null) {
+			EList<ActivityEdge> outgoings = activityNode.getOutgoings();
+			list = outgoings.stream().map(e -> UMLUtil.getStereotypeApplication(e, BPMNAssociation.class))
+					.filter(Objects::nonNull)
+					.collect(Collectors.toList());
+		}
+
+		return new BasicEList<>(list);
+	}
+
+	/*
+	 * from BPMN profile v1.0 §10.2.2.4, should return List<SequenceFlow>
+	 */
+	public static EList<BPMNAssociation> getIncoming(FlowNode flowNode) {
+
+		ActivityNode activityNode = flowNode.getBase_ActivityNode();
+		List<BPMNAssociation> list = new ArrayList<>();
+		if (activityNode != null) {
+			EList<ActivityEdge> incomings = activityNode.getIncomings();
+			list = incomings.stream().map(e -> UMLUtil.getStereotypeApplication(e, BPMNAssociation.class))
+					.filter(Objects::nonNull)
+					.collect(Collectors.toList());
+		}
+
+		return new BasicEList<>(list);
+	}
+
+}
diff --git a/org.eclipse.papyrus.bpmn/model/BPMNProfile.ecore b/org.eclipse.papyrus.bpmn/model/BPMNProfile.ecore
index fd4a3b6..373c17a 100755
--- a/org.eclipse.papyrus.bpmn/model/BPMNProfile.ecore
+++ b/org.eclipse.papyrus.bpmn/model/BPMNProfile.ecore
@@ -44,11 +44,13 @@
   <eClassifiers xsi:type="ecore:EClass" name="FlowNode" abstract="true" eSuperTypes="#//FlowElement">
     <eAnnotations source="duplicates">
       <contents xsi:type="ecore:EReference" name="incoming" ordered="false" upperBound="-1"
-          eType="#//SequenceFlow" eOpposite="#//SequenceFlow/targetRef">
+          eType="#//SequenceFlow" changeable="false" volatile="true" transient="true"
+          derived="true" eOpposite="#//SequenceFlow/targetRef">
         <eAnnotations source="redefines" references="#//BaseElement/incoming"/>
       </contents>
       <contents xsi:type="ecore:EReference" name="outgoing" ordered="false" upperBound="-1"
-          eType="#//SequenceFlow" eOpposite="#//SequenceFlow/sourceRef">
+          eType="#//SequenceFlow" changeable="false" volatile="true" transient="true"
+          derived="true" eOpposite="#//SequenceFlow/sourceRef">
         <eAnnotations source="redefines" references="#//BaseElement/outgoing"/>
       </contents>
     </eAnnotations>
@@ -456,9 +458,11 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="conditionExpression" ordered="false"
         eType="#//BPMNExpression"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="sourceRef" ordered="false"
-        lowerBound="1" eType="#//FlowNode" volatile="true"/>
+        lowerBound="1" eType="#//FlowNode" changeable="false" volatile="true" transient="true"
+        derived="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="targetRef" ordered="false"
-        lowerBound="1" eType="#//FlowNode" volatile="true"/>
+        lowerBound="1" eType="#//FlowNode" changeable="false" volatile="true" transient="true"
+        derived="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="BPMNExpression" eSuperTypes="#//BaseElement">
     <eStructuralFeatures xsi:type="ecore:EReference" name="base_OpaqueExpression"
diff --git a/org.eclipse.papyrus.bpmn/model/bpmn.profile.uml b/org.eclipse.papyrus.bpmn/model/bpmn.profile.uml
index e023433..e560871 100755
--- a/org.eclipse.papyrus.bpmn/model/bpmn.profile.uml
+++ b/org.eclipse.papyrus.bpmn/model/bpmn.profile.uml
@@ -12735,11 +12735,11 @@
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_J9hK4NywEeaKmtNtvNnrBw"/>
         <upperValue xmi:type="uml:LiteralInteger" xmi:id="_K0vGwNywEeaKmtNtvNnrBw" value="1"/>
       </ownedAttribute>
-      <ownedAttribute xmi:type="uml:Property" xmi:id="BPMNProfile-CoreStructure-Common-FlowNode-incoming" name="incoming" visibility="public" type="BPMNProfile-CoreStructure-Common-SequenceFlow" association="BPMNProfile-CoreStructure-Common-packagedElement-44" isderived="false">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="BPMNProfile-CoreStructure-Common-FlowNode-incoming" name="incoming" visibility="public" type="BPMNProfile-CoreStructure-Common-SequenceFlow" isReadOnly="true" isDerived="true" association="BPMNProfile-CoreStructure-Common-packagedElement-44" isderived="false">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="BPMNProfile-CoreStructure-Common-FlowNode-incoming-lowerValue"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="BPMNProfile-CoreStructure-Common-FlowNode-incoming-upperValue" value="*"/>
       </ownedAttribute>
-      <ownedAttribute xmi:type="uml:Property" xmi:id="BPMNProfile-CoreStructure-Common-FlowNode-outgoing" name="outgoing" visibility="public" type="BPMNProfile-CoreStructure-Common-SequenceFlow" association="BPMNProfile-CoreStructure-Common-packagedElement-45" isderived="false">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="BPMNProfile-CoreStructure-Common-FlowNode-outgoing" name="outgoing" visibility="public" type="BPMNProfile-CoreStructure-Common-SequenceFlow" isReadOnly="true" isDerived="true" association="BPMNProfile-CoreStructure-Common-packagedElement-45" isderived="false">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="BPMNProfile-CoreStructure-Common-FlowNode-outgoing-lowerValue"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="BPMNProfile-CoreStructure-Common-FlowNode-outgoing-upperValue" value="*"/>
       </ownedAttribute>
@@ -12924,8 +12924,8 @@
       <ownedAttribute xmi:type="uml:Property" xmi:id="BPMNProfile-CoreStructure-Common-SequenceFlow-conditionExpression" name="conditionExpression" visibility="public" type="BPMNProfile-CoreStructure-Common-BPMNExpression" association="BPMNProfile-CoreStructure-Common-packagedElement-39" isderived="false">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="BPMNProfile-CoreStructure-Common-SequenceFlow-conditionExpression-lowerValue"/>
       </ownedAttribute>
-      <ownedAttribute xmi:type="uml:Property" xmi:id="BPMNProfile-CoreStructure-Common-SequenceFlow-sourceRef" name="sourceRef" visibility="public" type="BPMNProfile-CoreStructure-Common-FlowNode" association="BPMNProfile-CoreStructure-Common-packagedElement-45" isderived="false"/>
-      <ownedAttribute xmi:type="uml:Property" xmi:id="BPMNProfile-CoreStructure-Common-SequenceFlow-targetRef" name="targetRef" visibility="public" type="BPMNProfile-CoreStructure-Common-FlowNode" association="BPMNProfile-CoreStructure-Common-packagedElement-44" isderived="false"/>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="BPMNProfile-CoreStructure-Common-SequenceFlow-sourceRef" name="sourceRef" visibility="public" type="BPMNProfile-CoreStructure-Common-FlowNode" isReadOnly="true" isDerived="true" association="BPMNProfile-CoreStructure-Common-packagedElement-45" isderived="false"/>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="BPMNProfile-CoreStructure-Common-SequenceFlow-targetRef" name="targetRef" visibility="public" type="BPMNProfile-CoreStructure-Common-FlowNode" isReadOnly="true" isDerived="true" association="BPMNProfile-CoreStructure-Common-packagedElement-44" isderived="false"/>
       <icon xmi:type="uml:Image" xmi:id="_8EYzYOmcEeSE8qC-7-3YgA" format="Papyrus" location="platform:/plugin/org.eclipse.papyrus.bpmn/icons/SequenceFlow.png">
         <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_mSNYsLJLEeW3evHeiuWSvw" source="image_papyrus">
           <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_mSP08LJLEeW3evHeiuWSvw" key="image_kind_key" value="icon"/>
diff --git a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/SequenceFlow.java b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/SequenceFlow.java
index 70202ad..9e6eced 100755
--- a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/SequenceFlow.java
+++ b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/SequenceFlow.java
@@ -115,24 +115,13 @@
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Source Ref</em>' reference.
-	 * @see #setSourceRef(FlowNode)
 	 * @see org.eclipse.papyrus.bpmn.BPMNProfile.BPMNProfilePackage#getSequenceFlow_SourceRef()
-	 * @model required="true" volatile="true" ordered="false"
+	 * @model required="true" transient="true" changeable="false" volatile="true" derived="true" ordered="false"
 	 * @generated
 	 */
 	FlowNode getSourceRef();
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.bpmn.BPMNProfile.SequenceFlow#getSourceRef <em>Source Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Source Ref</em>' reference.
-	 * @see #getSourceRef()
-	 * @generated
-	 */
-	void setSourceRef(FlowNode value);
-
-	/**
 	 * Returns the value of the '<em><b>Target Ref</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <p>
@@ -141,24 +130,13 @@
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Target Ref</em>' reference.
-	 * @see #setTargetRef(FlowNode)
 	 * @see org.eclipse.papyrus.bpmn.BPMNProfile.BPMNProfilePackage#getSequenceFlow_TargetRef()
-	 * @model required="true" volatile="true" ordered="false"
+	 * @model required="true" transient="true" changeable="false" volatile="true" derived="true" ordered="false"
 	 * @generated
 	 */
 	FlowNode getTargetRef();
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.bpmn.BPMNProfile.SequenceFlow#getTargetRef <em>Target Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Target Ref</em>' reference.
-	 * @see #getTargetRef()
-	 * @generated
-	 */
-	void setTargetRef(FlowNode value);
-
-	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * <!-- begin-model-doc -->
diff --git a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/BPMNProfile.ecore b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/BPMNProfile.ecore
index 49923b5..66d6511 100755
--- a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/BPMNProfile.ecore
+++ b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/BPMNProfile.ecore
@@ -34,11 +34,13 @@
   <eClassifiers xsi:type="ecore:EClass" name="FlowNode" abstract="true" eSuperTypes="#//FlowElement">
     <eAnnotations source="duplicates">
       <contents xsi:type="ecore:EReference" name="incoming" ordered="false" upperBound="-1"
-          eType="#//SequenceFlow" eOpposite="#//SequenceFlow/targetRef">
+          eType="#//SequenceFlow" changeable="false" volatile="true" transient="true"
+          derived="true" eOpposite="#//SequenceFlow/targetRef">
         <eAnnotations source="redefines" references="#//BaseElement/incoming"/>
       </contents>
       <contents xsi:type="ecore:EReference" name="outgoing" ordered="false" upperBound="-1"
-          eType="#//SequenceFlow" eOpposite="#//SequenceFlow/sourceRef">
+          eType="#//SequenceFlow" changeable="false" volatile="true" transient="true"
+          derived="true" eOpposite="#//SequenceFlow/sourceRef">
         <eAnnotations source="redefines" references="#//BaseElement/outgoing"/>
       </contents>
     </eAnnotations>
@@ -326,9 +328,11 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="conditionExpression" ordered="false"
         eType="#//BPMNExpression"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="sourceRef" ordered="false"
-        lowerBound="1" eType="#//FlowNode" volatile="true"/>
+        lowerBound="1" eType="#//FlowNode" changeable="false" volatile="true" transient="true"
+        derived="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="targetRef" ordered="false"
-        lowerBound="1" eType="#//FlowNode" volatile="true"/>
+        lowerBound="1" eType="#//FlowNode" changeable="false" volatile="true" transient="true"
+        derived="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="BPMNExpression" eSuperTypes="#//BaseElement">
     <eStructuralFeatures xsi:type="ecore:EReference" name="base_OpaqueExpression"
diff --git a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/BPMNProfilePackageImpl.java b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/BPMNProfilePackageImpl.java
index a999218..a60f4ef 100755
--- a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/BPMNProfilePackageImpl.java
+++ b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/BPMNProfilePackageImpl.java
@@ -15,12 +15,14 @@
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EReference;
 import org.eclipse.emf.ecore.EValidator;
+import org.eclipse.emf.ecore.EcorePackage;
 import org.eclipse.emf.ecore.impl.EPackageImpl;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl;
 import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNProfileFactory;
 import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNProfilePackage;
 import org.eclipse.papyrus.bpmn.BPMNProfile.util.BPMNProfileValidator;
+import org.eclipse.uml2.types.TypesPackage;
 import org.eclipse.uml2.uml.UMLPackage;
 
 /**
@@ -1048,6 +1050,8 @@
 		isInited = true;
 
 		// Initialize simple dependencies
+		EcorePackage.eINSTANCE.eClass();
+		TypesPackage.eINSTANCE.eClass();
 		UMLPackage.eINSTANCE.eClass();
 
 		// Load packages
diff --git a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/FlowNodeImpl.java b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/FlowNodeImpl.java
index fa5bfbc..fae9dfa 100755
--- a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/FlowNodeImpl.java
+++ b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/FlowNodeImpl.java
@@ -3,17 +3,13 @@
 package org.eclipse.papyrus.bpmn.BPMNProfile.impl;
 
 import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.common.util.EList;
 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.EObjectWithInverseResolvingEList;
-import org.eclipse.emf.ecore.util.InternalEList;
 import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNAssociation;
 import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNProfilePackage;
 import org.eclipse.papyrus.bpmn.BPMNProfile.FlowNode;
-import org.eclipse.papyrus.bpmn.BPMNProfile.SequenceFlow;
 import org.eclipse.uml2.uml.ActivityNode;
 
 /**
@@ -102,14 +98,11 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT
 	 */
 	@Override
 	public EList<BPMNAssociation> getIncoming() {
-		if (incoming == null) {
-			incoming = new EObjectWithInverseResolvingEList<BPMNAssociation>(SequenceFlow.class, this, BPMNProfilePackage.FLOW_NODE__INCOMING, BPMNProfilePackage.BPMN_ASSOCIATION__TARGET_REF);
-		}
-		return incoming;
+		return FlowNodeCustom.getIncoming(this);
 	}
 
 	/**
@@ -118,20 +111,17 @@
 	 * @generated
 	 */
 	public boolean isSetIncoming() {
-		return incoming != null && !incoming.isEmpty();
+		return !getIncoming().isEmpty();
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT
 	 */
 	@Override
 	public EList<BPMNAssociation> getOutgoing() {
-		if (outgoing == null) {
-			outgoing = new EObjectWithInverseResolvingEList<BPMNAssociation>(SequenceFlow.class, this, BPMNProfilePackage.FLOW_NODE__OUTGOING, BPMNProfilePackage.BPMN_ASSOCIATION__SOURCE_REF);
-		}
-		return outgoing;
+		return FlowNodeCustom.getOutgoing(this);
 	}
 
 	/**
@@ -140,40 +130,7 @@
 	 * @generated
 	 */
 	public boolean isSetOutgoing() {
-		return outgoing != null && !outgoing.isEmpty();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@SuppressWarnings("unchecked")
-	@Override
-	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
-		switch (featureID) {
-			case BPMNProfilePackage.FLOW_NODE__INCOMING:
-				return ((InternalEList<InternalEObject>)(InternalEList<?>)getIncoming()).basicAdd(otherEnd, msgs);
-			case BPMNProfilePackage.FLOW_NODE__OUTGOING:
-				return ((InternalEList<InternalEObject>)(InternalEList<?>)getOutgoing()).basicAdd(otherEnd, msgs);
-		}
-		return super.eInverseAdd(otherEnd, featureID, msgs);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
-		switch (featureID) {
-			case BPMNProfilePackage.FLOW_NODE__INCOMING:
-				return ((InternalEList<?>)getIncoming()).basicRemove(otherEnd, msgs);
-			case BPMNProfilePackage.FLOW_NODE__OUTGOING:
-				return ((InternalEList<?>)getOutgoing()).basicRemove(otherEnd, msgs);
-		}
-		return super.eInverseRemove(otherEnd, featureID, msgs);
+		return !getOutgoing().isEmpty();
 	}
 
 	/**
diff --git a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/SequenceFlowImpl.java b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/SequenceFlowImpl.java
index fa96e49..65fd427 100755
--- a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/SequenceFlowImpl.java
+++ b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/SequenceFlowImpl.java
@@ -220,17 +220,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public void setSourceRef(FlowNode newSourceRef) {
-		// TODO: implement this method to set the 'Source Ref' reference
-		// Ensure that you remove @generated or mark it @generated NOT
-		throw new UnsupportedOperationException();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
 	public FlowNode getTargetRef() {
 		FlowNode targetRef = basicGetTargetRef();
 		return targetRef != null && targetRef.eIsProxy() ? (FlowNode)eResolveProxy((InternalEObject)targetRef) : targetRef;
@@ -250,17 +239,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public void setTargetRef(FlowNode newTargetRef) {
-		// TODO: implement this method to set the 'Target Ref' reference
-		// Ensure that you remove @generated or mark it @generated NOT
-		throw new UnsupportedOperationException();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
 	public boolean SequenceFlowconditionExpression(DiagnosticChain diagnostics, Map<Object, Object> context) {
 		// TODO: implement this method
 		// -> specify the condition that violates the invariant
@@ -269,12 +247,12 @@
 		if (false) {
 			if (diagnostics != null) {
 				diagnostics.add
-						(new BasicDiagnostic
-								(Diagnostic.ERROR,
-										BPMNProfileValidator.DIAGNOSTIC_SOURCE,
-										BPMNProfileValidator.SEQUENCE_FLOW__SEQUENCE_FLOWCONDITION_EXPRESSION,
-										EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "SequenceFlowconditionExpression", EObjectValidator.getObjectLabel(this, context) }),
-										new Object [] { this }));
+					(new BasicDiagnostic
+						(Diagnostic.ERROR,
+						 BPMNProfileValidator.DIAGNOSTIC_SOURCE,
+						 BPMNProfileValidator.SEQUENCE_FLOW__SEQUENCE_FLOWCONDITION_EXPRESSION,
+						 EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "SequenceFlowconditionExpression", EObjectValidator.getObjectLabel(this, context) }),
+						 new Object [] { this }));
 			}
 			return false;
 		}
@@ -294,12 +272,12 @@
 		if (false) {
 			if (diagnostics != null) {
 				diagnostics.add
-						(new BasicDiagnostic
-								(Diagnostic.ERROR,
-										BPMNProfileValidator.DIAGNOSTIC_SOURCE,
-										BPMNProfileValidator.SEQUENCE_FLOW__SEQUENCE_FLOWSOURCE_REF,
-										EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "SequenceFlowsourceRef", EObjectValidator.getObjectLabel(this, context) }),
-										new Object [] { this }));
+					(new BasicDiagnostic
+						(Diagnostic.ERROR,
+						 BPMNProfileValidator.DIAGNOSTIC_SOURCE,
+						 BPMNProfileValidator.SEQUENCE_FLOW__SEQUENCE_FLOWSOURCE_REF,
+						 EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "SequenceFlowsourceRef", EObjectValidator.getObjectLabel(this, context) }),
+						 new Object [] { this }));
 			}
 			return false;
 		}
@@ -319,12 +297,12 @@
 		if (false) {
 			if (diagnostics != null) {
 				diagnostics.add
-						(new BasicDiagnostic
-								(Diagnostic.ERROR,
-										BPMNProfileValidator.DIAGNOSTIC_SOURCE,
-										BPMNProfileValidator.SEQUENCE_FLOW__SEQUENCE_FLOWTARGET_REF,
-										EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "SequenceFlowtargetRef", EObjectValidator.getObjectLabel(this, context) }),
-										new Object [] { this }));
+					(new BasicDiagnostic
+						(Diagnostic.ERROR,
+						 BPMNProfileValidator.DIAGNOSTIC_SOURCE,
+						 BPMNProfileValidator.SEQUENCE_FLOW__SEQUENCE_FLOWTARGET_REF,
+						 EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "SequenceFlowtargetRef", EObjectValidator.getObjectLabel(this, context) }),
+						 new Object [] { this }));
 			}
 			return false;
 		}
@@ -339,20 +317,20 @@
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
-		case BPMNProfilePackage.SEQUENCE_FLOW__BASE_CONTROL_FLOW:
-			if (resolve) return getBase_ControlFlow();
-			return basicGetBase_ControlFlow();
-		case BPMNProfilePackage.SEQUENCE_FLOW__IS_IMMEDIATE:
-			return isImmediate();
-		case BPMNProfilePackage.SEQUENCE_FLOW__CONDITION_EXPRESSION:
-			if (resolve) return getConditionExpression();
-			return basicGetConditionExpression();
-		case BPMNProfilePackage.SEQUENCE_FLOW__SOURCE_REF:
-			if (resolve) return getSourceRef();
-			return basicGetSourceRef();
-		case BPMNProfilePackage.SEQUENCE_FLOW__TARGET_REF:
-			if (resolve) return getTargetRef();
-			return basicGetTargetRef();
+			case BPMNProfilePackage.SEQUENCE_FLOW__BASE_CONTROL_FLOW:
+				if (resolve) return getBase_ControlFlow();
+				return basicGetBase_ControlFlow();
+			case BPMNProfilePackage.SEQUENCE_FLOW__IS_IMMEDIATE:
+				return isImmediate();
+			case BPMNProfilePackage.SEQUENCE_FLOW__CONDITION_EXPRESSION:
+				if (resolve) return getConditionExpression();
+				return basicGetConditionExpression();
+			case BPMNProfilePackage.SEQUENCE_FLOW__SOURCE_REF:
+				if (resolve) return getSourceRef();
+				return basicGetSourceRef();
+			case BPMNProfilePackage.SEQUENCE_FLOW__TARGET_REF:
+				if (resolve) return getTargetRef();
+				return basicGetTargetRef();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -365,21 +343,15 @@
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-		case BPMNProfilePackage.SEQUENCE_FLOW__BASE_CONTROL_FLOW:
-			setBase_ControlFlow((ControlFlow)newValue);
-			return;
-		case BPMNProfilePackage.SEQUENCE_FLOW__IS_IMMEDIATE:
-			setIsImmediate((Boolean)newValue);
-			return;
-		case BPMNProfilePackage.SEQUENCE_FLOW__CONDITION_EXPRESSION:
-			setConditionExpression((BPMNExpression)newValue);
-			return;
-		case BPMNProfilePackage.SEQUENCE_FLOW__SOURCE_REF:
-			setSourceRef((FlowNode)newValue);
-			return;
-		case BPMNProfilePackage.SEQUENCE_FLOW__TARGET_REF:
-			setTargetRef((FlowNode)newValue);
-			return;
+			case BPMNProfilePackage.SEQUENCE_FLOW__BASE_CONTROL_FLOW:
+				setBase_ControlFlow((ControlFlow)newValue);
+				return;
+			case BPMNProfilePackage.SEQUENCE_FLOW__IS_IMMEDIATE:
+				setIsImmediate((Boolean)newValue);
+				return;
+			case BPMNProfilePackage.SEQUENCE_FLOW__CONDITION_EXPRESSION:
+				setConditionExpression((BPMNExpression)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -392,21 +364,15 @@
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-		case BPMNProfilePackage.SEQUENCE_FLOW__BASE_CONTROL_FLOW:
-			setBase_ControlFlow((ControlFlow)null);
-			return;
-		case BPMNProfilePackage.SEQUENCE_FLOW__IS_IMMEDIATE:
-			setIsImmediate(IS_IMMEDIATE_EDEFAULT);
-			return;
-		case BPMNProfilePackage.SEQUENCE_FLOW__CONDITION_EXPRESSION:
-			setConditionExpression((BPMNExpression)null);
-			return;
-		case BPMNProfilePackage.SEQUENCE_FLOW__SOURCE_REF:
-			setSourceRef((FlowNode)null);
-			return;
-		case BPMNProfilePackage.SEQUENCE_FLOW__TARGET_REF:
-			setTargetRef((FlowNode)null);
-			return;
+			case BPMNProfilePackage.SEQUENCE_FLOW__BASE_CONTROL_FLOW:
+				setBase_ControlFlow((ControlFlow)null);
+				return;
+			case BPMNProfilePackage.SEQUENCE_FLOW__IS_IMMEDIATE:
+				setIsImmediate(IS_IMMEDIATE_EDEFAULT);
+				return;
+			case BPMNProfilePackage.SEQUENCE_FLOW__CONDITION_EXPRESSION:
+				setConditionExpression((BPMNExpression)null);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -419,16 +385,16 @@
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
-		case BPMNProfilePackage.SEQUENCE_FLOW__BASE_CONTROL_FLOW:
-			return base_ControlFlow != null;
-		case BPMNProfilePackage.SEQUENCE_FLOW__IS_IMMEDIATE:
-			return isImmediate != IS_IMMEDIATE_EDEFAULT;
-		case BPMNProfilePackage.SEQUENCE_FLOW__CONDITION_EXPRESSION:
-			return conditionExpression != null;
-		case BPMNProfilePackage.SEQUENCE_FLOW__SOURCE_REF:
-			return basicGetSourceRef() != null;
-		case BPMNProfilePackage.SEQUENCE_FLOW__TARGET_REF:
-			return basicGetTargetRef() != null;
+			case BPMNProfilePackage.SEQUENCE_FLOW__BASE_CONTROL_FLOW:
+				return base_ControlFlow != null;
+			case BPMNProfilePackage.SEQUENCE_FLOW__IS_IMMEDIATE:
+				return isImmediate != IS_IMMEDIATE_EDEFAULT;
+			case BPMNProfilePackage.SEQUENCE_FLOW__CONDITION_EXPRESSION:
+				return conditionExpression != null;
+			case BPMNProfilePackage.SEQUENCE_FLOW__SOURCE_REF:
+				return basicGetSourceRef() != null;
+			case BPMNProfilePackage.SEQUENCE_FLOW__TARGET_REF:
+				return basicGetTargetRef() != null;
 		}
 		return super.eIsSet(featureID);
 	}
@@ -442,12 +408,12 @@
 	@SuppressWarnings("unchecked")
 	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
 		switch (operationID) {
-		case BPMNProfilePackage.SEQUENCE_FLOW___SEQUENCE_FLOWCONDITION_EXPRESSION__DIAGNOSTICCHAIN_MAP:
-			return SequenceFlowconditionExpression((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1));
-		case BPMNProfilePackage.SEQUENCE_FLOW___SEQUENCE_FLOWSOURCE_REF__DIAGNOSTICCHAIN_MAP:
-			return SequenceFlowsourceRef((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1));
-		case BPMNProfilePackage.SEQUENCE_FLOW___SEQUENCE_FLOWTARGET_REF__DIAGNOSTICCHAIN_MAP:
-			return SequenceFlowtargetRef((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1));
+			case BPMNProfilePackage.SEQUENCE_FLOW___SEQUENCE_FLOWCONDITION_EXPRESSION__DIAGNOSTICCHAIN_MAP:
+				return SequenceFlowconditionExpression((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1));
+			case BPMNProfilePackage.SEQUENCE_FLOW___SEQUENCE_FLOWSOURCE_REF__DIAGNOSTICCHAIN_MAP:
+				return SequenceFlowsourceRef((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1));
+			case BPMNProfilePackage.SEQUENCE_FLOW___SEQUENCE_FLOWTARGET_REF__DIAGNOSTICCHAIN_MAP:
+				return SequenceFlowtargetRef((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1));
 		}
 		return super.eInvoke(operationID, arguments);
 	}
diff --git a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/util/BPMNProfileSwitch.java b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/util/BPMNProfileSwitch.java
index d571606..4980994 100755
--- a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/util/BPMNProfileSwitch.java
+++ b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/util/BPMNProfileSwitch.java
@@ -5,136 +5,6 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.util.Switch;
-import org.eclipse.papyrus.bpmn.BPMNProfile.AdHocSubProcess;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Assignment;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Auditing;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNActivity;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNArtifact;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNAssociation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNCollaboration;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNEvent;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNExpression;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNExtension;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNInterface;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNMessage;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNOperation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNProcess;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNProfilePackage;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNProperty;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNRelationship;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNSignal;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BaseElement;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BoundaryEvent;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BusinessRuleTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CallActivity;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CallConversation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CallableElement;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CancelEventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CatchEvent;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Category;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CategoryValue;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CompensateEventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ComplexBehaviorDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ComplexGateway;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ConditionalEventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Conversation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ConversationLink;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ConversationNode;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CorrelationKey;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CorrelationProperty;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CorrelationPropertyBinding;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CorrelationPropertyRetrievalExpression;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CorrelationSubscription;
-import org.eclipse.papyrus.bpmn.BPMNProfile.DataAssociation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.DataInput;
-import org.eclipse.papyrus.bpmn.BPMNProfile.DataInputAssociation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.DataObject;
-import org.eclipse.papyrus.bpmn.BPMNProfile.DataObjectReference;
-import org.eclipse.papyrus.bpmn.BPMNProfile.DataOutput;
-import org.eclipse.papyrus.bpmn.BPMNProfile.DataOutputAssociation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.DataState;
-import org.eclipse.papyrus.bpmn.BPMNProfile.DataStore;
-import org.eclipse.papyrus.bpmn.BPMNProfile.DataStoreReference;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Definitions;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Documentation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.EndEvent;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ErrorEventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Escalation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.EscalationEventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.EventBasedGateway;
-import org.eclipse.papyrus.bpmn.BPMNProfile.EventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ExclusiveGateway;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ExtensionAttributeDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ExtensionAttributeValue;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ExtensionDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.FlowElement;
-import org.eclipse.papyrus.bpmn.BPMNProfile.FlowElementsContainer;
-import org.eclipse.papyrus.bpmn.BPMNProfile.FlowNode;
-import org.eclipse.papyrus.bpmn.BPMNProfile.FormalExpression;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Gateway;
-import org.eclipse.papyrus.bpmn.BPMNProfile.GlobalBusinessRuleTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.GlobalConversation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.GlobalManualTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.GlobalScriptTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.GlobalTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.GlobalUserTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Group;
-import org.eclipse.papyrus.bpmn.BPMNProfile.HumanPerformer;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ImplicitThrowEvent;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Import;
-import org.eclipse.papyrus.bpmn.BPMNProfile.InclusiveGateway;
-import org.eclipse.papyrus.bpmn.BPMNProfile.InputOutputBinding;
-import org.eclipse.papyrus.bpmn.BPMNProfile.InputOutputSpecification;
-import org.eclipse.papyrus.bpmn.BPMNProfile.InputSet;
-import org.eclipse.papyrus.bpmn.BPMNProfile.InteractionNode;
-import org.eclipse.papyrus.bpmn.BPMNProfile.IntermediateCatchEvent;
-import org.eclipse.papyrus.bpmn.BPMNProfile.IntermediateThrowEvent;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ItemAwareElement;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ItemDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Lane;
-import org.eclipse.papyrus.bpmn.BPMNProfile.LaneSet;
-import org.eclipse.papyrus.bpmn.BPMNProfile.LinkEventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.LoopCharacteristics;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ManualTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.MessageEventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.MessageFlow;
-import org.eclipse.papyrus.bpmn.BPMNProfile.MessageFlowAssociation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Monitoring;
-import org.eclipse.papyrus.bpmn.BPMNProfile.MultiInstanceLoopCharacteristics;
-import org.eclipse.papyrus.bpmn.BPMNProfile.NonExclusiveGateway;
-import org.eclipse.papyrus.bpmn.BPMNProfile.OutputSet;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ParallelGateway;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Participant;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ParticipantAssociation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ParticipantMultiplicity;
-import org.eclipse.papyrus.bpmn.BPMNProfile.PartnerEntity;
-import org.eclipse.papyrus.bpmn.BPMNProfile.PartnerRole;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Performer;
-import org.eclipse.papyrus.bpmn.BPMNProfile.PotentialOwner;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ReceiveTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Rendering;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Resource;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ResourceAssignmentExpression;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ResourceParameter;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ResourceParameterBinding;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ResourceRole;
-import org.eclipse.papyrus.bpmn.BPMNProfile.RootElement;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ScriptTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.SendTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.SequenceFlow;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ServiceTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.SignalEventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.StandardLoopCharacteristics;
-import org.eclipse.papyrus.bpmn.BPMNProfile.StartEvent;
-import org.eclipse.papyrus.bpmn.BPMNProfile.SubConversation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.SubProcess;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Task;
-import org.eclipse.papyrus.bpmn.BPMNProfile.TerminateEventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.TextAnnotation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ThrowEvent;
-import org.eclipse.papyrus.bpmn.BPMNProfile.TimerEventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Transaction;
-import org.eclipse.papyrus.bpmn.BPMNProfile.UserTask;
 import org.eclipse.papyrus.bpmn.BPMNProfile.*;
 
 /**
