Let CallActivity and SubProcess implement InteractionNode. This allows
MessageFlows to be connected to these elements which, according to the
BPMN2 spec, is valid.
diff --git a/org.eclipse.bpmn2.edit/src/org/eclipse/bpmn2/provider/CallActivityItemProvider.java b/org.eclipse.bpmn2.edit/src/org/eclipse/bpmn2/provider/CallActivityItemProvider.java
index 5ff49dc..1fef3e9 100644
--- a/org.eclipse.bpmn2.edit/src/org/eclipse/bpmn2/provider/CallActivityItemProvider.java
+++ b/org.eclipse.bpmn2.edit/src/org/eclipse/bpmn2/provider/CallActivityItemProvider.java
@@ -60,12 +60,46 @@
         if (itemPropertyDescriptors == null) {
             super.getPropertyDescriptors(object);
 
+            addIncomingConversationLinksPropertyDescriptor(object);
+            addOutgoingConversationLinksPropertyDescriptor(object);
             addCalledElementRefPropertyDescriptor(object);
         }
         return itemPropertyDescriptors;
     }
 
     /**
+     * This adds a property descriptor for the Incoming Conversation Links feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addIncomingConversationLinksPropertyDescriptor(Object object) {
+        itemPropertyDescriptors.add(createItemPropertyDescriptor(
+                ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+                getResourceLocator(),
+                getString("_UI_InteractionNode_incomingConversationLinks_feature"),
+                getString("_UI_InteractionNode_incomingConversationLinks_description"),
+                Bpmn2Package.Literals.INTERACTION_NODE__INCOMING_CONVERSATION_LINKS, false, false,
+                true, null, null, null));
+    }
+
+    /**
+     * This adds a property descriptor for the Outgoing Conversation Links feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addOutgoingConversationLinksPropertyDescriptor(Object object) {
+        itemPropertyDescriptors.add(createItemPropertyDescriptor(
+                ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+                getResourceLocator(),
+                getString("_UI_InteractionNode_outgoingConversationLinks_feature"),
+                getString("_UI_InteractionNode_outgoingConversationLinks_description"),
+                Bpmn2Package.Literals.INTERACTION_NODE__OUTGOING_CONVERSATION_LINKS, false, false,
+                true, null, null, null));
+    }
+
+    /**
      * This adds a property descriptor for the Called Element Ref feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
diff --git a/org.eclipse.bpmn2.edit/src/org/eclipse/bpmn2/provider/SubProcessItemProvider.java b/org.eclipse.bpmn2.edit/src/org/eclipse/bpmn2/provider/SubProcessItemProvider.java
index 1ef5a00..f98ca46 100644
--- a/org.eclipse.bpmn2.edit/src/org/eclipse/bpmn2/provider/SubProcessItemProvider.java
+++ b/org.eclipse.bpmn2.edit/src/org/eclipse/bpmn2/provider/SubProcessItemProvider.java
@@ -1,320 +1,354 @@
-/**

- * <copyright>

- * 

- * Copyright (c) 2010 SAP AG.

- * 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

- * 

- * Contributors:

- *    Reiner Hille-Doering (SAP AG) - initial API and implementation and/or initial documentation

- * 

- * </copyright>

- *

- */

-package org.eclipse.bpmn2.provider;

-

-import java.util.Collection;

-import java.util.List;

-

-import org.eclipse.bpmn2.Bpmn2Factory;

-import org.eclipse.bpmn2.Bpmn2Package;

-import org.eclipse.bpmn2.SubProcess;

-import org.eclipse.emf.common.notify.AdapterFactory;

-import org.eclipse.emf.common.notify.Notification;

-import org.eclipse.emf.ecore.EStructuralFeature;

-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

-import org.eclipse.emf.edit.provider.IItemLabelProvider;

-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;

-import org.eclipse.emf.edit.provider.IItemPropertySource;

-import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

-import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

-import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;

-import org.eclipse.emf.edit.provider.ViewerNotification;

-

-/**

- * This is the item provider adapter for a {@link org.eclipse.bpmn2.SubProcess} object.

- * <!-- begin-user-doc -->

- * <!-- end-user-doc -->

- * @generated

- */

-public class SubProcessItemProvider extends ActivityItemProvider implements

-        IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider,

-        IItemLabelProvider, IItemPropertySource {

-    /**

-     * This constructs an instance from a factory and a notifier.

-     * <!-- begin-user-doc -->

-     * <!-- end-user-doc -->

-     * @generated

-     */

-    public SubProcessItemProvider(AdapterFactory adapterFactory) {

-        super(adapterFactory);

-    }

-

-    /**

-     * This returns the property descriptors for the adapted class.

-     * <!-- begin-user-doc -->

-     * <!-- end-user-doc -->

-     * @generated

-     */

-    @Override

-    public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {

-        if (itemPropertyDescriptors == null) {

-            super.getPropertyDescriptors(object);

-

-            addTriggeredByEventPropertyDescriptor(object);

-        }

-        return itemPropertyDescriptors;

-    }

-

-    /**

-     * This adds a property descriptor for the Triggered By Event feature.

-     * <!-- begin-user-doc -->

-     * <!-- end-user-doc -->

-     * @generated

-     */

-    protected void addTriggeredByEventPropertyDescriptor(Object object) {

-        itemPropertyDescriptors.add(createItemPropertyDescriptor(

-                ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),

-                getResourceLocator(),

-                getString("_UI_SubProcess_triggeredByEvent_feature"),

-                getString("_UI_PropertyDescriptor_description",

-                        "_UI_SubProcess_triggeredByEvent_feature", "_UI_SubProcess_type"),

-                Bpmn2Package.Literals.SUB_PROCESS__TRIGGERED_BY_EVENT, true, false, false,

-                ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null));

-    }

-

-    /**

-     * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an

-     * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or

-     * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.

-     * <!-- begin-user-doc -->

-     * <!-- end-user-doc -->

-     * @generated

-     */

-    @Override

-    public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {

-        if (childrenFeatures == null) {

-            super.getChildrenFeatures(object);

-            childrenFeatures.add(Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__LANE_SETS);

-            childrenFeatures.add(Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS);

-            childrenFeatures.add(Bpmn2Package.Literals.SUB_PROCESS__ARTIFACTS);

-        }

-        return childrenFeatures;

-    }

-

-    /**

-     * <!-- begin-user-doc -->

-     * <!-- end-user-doc -->

-     * @generated

-     */

-    @Override

-    protected EStructuralFeature getChildFeature(Object object, Object child) {

-        // Check the type of the specified child object and return the proper feature to use for

-        // adding (see {@link AddCommand}) it as a child.

-

-        return super.getChildFeature(object, child);

-    }

-

-    /**

-     * This returns SubProcess.png.

-     * <!-- begin-user-doc -->

-     * <!-- end-user-doc -->

-     * @generated

-     */

-    @Override

-    public Object getImage(Object object) {

-        try {

-            return overlayImage(object, getResourceLocator().getImage("full/obj16/SubProcess.png"));

-        } catch (java.util.MissingResourceException e) {

-            return overlayImage(object, getResourceLocator().getImage("full/obj16/SubProcess.gif"));

-        }

-    }

-

-    /**

-     * This returns the label text for the adapted class.

-     * <!-- begin-user-doc -->

-     * <!-- end-user-doc -->

-     * @generated

-     */

-    @Override

-    public String getText(Object object) {

-        String label = ((SubProcess) object).getName();

-        return label == null || label.length() == 0 ? getString("_UI_SubProcess_type")

-                : getString("_UI_SubProcess_type") + " " + label;

-    }

-

-    /**

-     * This handles model notifications by calling {@link #updateChildren} to update any cached

-     * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.

-     * <!-- begin-user-doc -->

-     * <!-- end-user-doc -->

-     * @generated

-     */

-    @Override

-    public void notifyChanged(Notification notification) {

-        updateChildren(notification);

-

-        switch (notification.getFeatureID(SubProcess.class)) {

-        case Bpmn2Package.SUB_PROCESS__TRIGGERED_BY_EVENT:

-            fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(),

-                    false, true));

-            return;

-        case Bpmn2Package.SUB_PROCESS__LANE_SETS:

-        case Bpmn2Package.SUB_PROCESS__FLOW_ELEMENTS:

-        case Bpmn2Package.SUB_PROCESS__ARTIFACTS:

-            fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(),

-                    true, false));

-            return;

-        }

-        super.notifyChanged(notification);

-    }

-

-    /**

-     * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children

-     * that can be created under this object.

-     * <!-- begin-user-doc -->

-     * <!-- end-user-doc -->

-     * @generated

-     */

-    @Override

-    protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {

-        super.collectNewChildDescriptors(newChildDescriptors, object);

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__LANE_SETS,

-                Bpmn2Factory.eINSTANCE.createLaneSet()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createSubProcess()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createAdHocSubProcess()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createBoundaryEvent()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createTask()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createBusinessRuleTask()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createCallActivity()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createCallChoreography()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createChoreographyTask()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createComplexGateway()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createDataObject()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createDataObjectReference()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createDataStoreReference()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createEndEvent()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createEventBasedGateway()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createExclusiveGateway()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createImplicitThrowEvent()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createInclusiveGateway()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createIntermediateCatchEvent()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createIntermediateThrowEvent()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createManualTask()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createParallelGateway()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createReceiveTask()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createScriptTask()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createSendTask()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createSequenceFlow()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createServiceTask()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createStartEvent()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createSubChoreography()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createTransaction()));

-

-        newChildDescriptors.add(createChildParameter(

-                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,

-                Bpmn2Factory.eINSTANCE.createUserTask()));

-

-        newChildDescriptors.add(createChildParameter(Bpmn2Package.Literals.SUB_PROCESS__ARTIFACTS,

-                Bpmn2Factory.eINSTANCE.createAssociation()));

-

-        newChildDescriptors.add(createChildParameter(Bpmn2Package.Literals.SUB_PROCESS__ARTIFACTS,

-                Bpmn2Factory.eINSTANCE.createGroup()));

-

-        newChildDescriptors.add(createChildParameter(Bpmn2Package.Literals.SUB_PROCESS__ARTIFACTS,

-                Bpmn2Factory.eINSTANCE.createTextAnnotation()));

-    }

-

-}

+/**
+ * <copyright>
+ * 
+ * Copyright (c) 2010 SAP AG.
+ * 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
+ * 
+ * Contributors:
+ *    Reiner Hille-Doering (SAP AG) - initial API and implementation and/or initial documentation
+ * 
+ * </copyright>
+ *
+ */
+package org.eclipse.bpmn2.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.bpmn2.Bpmn2Factory;
+import org.eclipse.bpmn2.Bpmn2Package;
+import org.eclipse.bpmn2.SubProcess;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.bpmn2.SubProcess} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class SubProcessItemProvider extends ActivityItemProvider implements
+        IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider,
+        IItemLabelProvider, IItemPropertySource {
+    /**
+     * This constructs an instance from a factory and a notifier.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public SubProcessItemProvider(AdapterFactory adapterFactory) {
+        super(adapterFactory);
+    }
+
+    /**
+     * This returns the property descriptors for the adapted class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+        if (itemPropertyDescriptors == null) {
+            super.getPropertyDescriptors(object);
+
+            addIncomingConversationLinksPropertyDescriptor(object);
+            addOutgoingConversationLinksPropertyDescriptor(object);
+            addTriggeredByEventPropertyDescriptor(object);
+        }
+        return itemPropertyDescriptors;
+    }
+
+    /**
+     * This adds a property descriptor for the Incoming Conversation Links feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addIncomingConversationLinksPropertyDescriptor(Object object) {
+        itemPropertyDescriptors.add(createItemPropertyDescriptor(
+                ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+                getResourceLocator(),
+                getString("_UI_InteractionNode_incomingConversationLinks_feature"),
+                getString("_UI_InteractionNode_incomingConversationLinks_description"),
+                Bpmn2Package.Literals.INTERACTION_NODE__INCOMING_CONVERSATION_LINKS, false, false,
+                true, null, null, null));
+    }
+
+    /**
+     * This adds a property descriptor for the Outgoing Conversation Links feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addOutgoingConversationLinksPropertyDescriptor(Object object) {
+        itemPropertyDescriptors.add(createItemPropertyDescriptor(
+                ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+                getResourceLocator(),
+                getString("_UI_InteractionNode_outgoingConversationLinks_feature"),
+                getString("_UI_InteractionNode_outgoingConversationLinks_description"),
+                Bpmn2Package.Literals.INTERACTION_NODE__OUTGOING_CONVERSATION_LINKS, false, false,
+                true, null, null, null));
+    }
+
+    /**
+     * This adds a property descriptor for the Triggered By Event feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addTriggeredByEventPropertyDescriptor(Object object) {
+        itemPropertyDescriptors.add(createItemPropertyDescriptor(
+                ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+                getResourceLocator(),
+                getString("_UI_SubProcess_triggeredByEvent_feature"),
+                getString("_UI_PropertyDescriptor_description",
+                        "_UI_SubProcess_triggeredByEvent_feature", "_UI_SubProcess_type"),
+                Bpmn2Package.Literals.SUB_PROCESS__TRIGGERED_BY_EVENT, true, false, false,
+                ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null));
+    }
+
+    /**
+     * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+     * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+     * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+        if (childrenFeatures == null) {
+            super.getChildrenFeatures(object);
+            childrenFeatures.add(Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__LANE_SETS);
+            childrenFeatures.add(Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS);
+            childrenFeatures.add(Bpmn2Package.Literals.SUB_PROCESS__ARTIFACTS);
+        }
+        return childrenFeatures;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EStructuralFeature getChildFeature(Object object, Object child) {
+        // Check the type of the specified child object and return the proper feature to use for
+        // adding (see {@link AddCommand}) it as a child.
+
+        return super.getChildFeature(object, child);
+    }
+
+    /**
+     * This returns SubProcess.png.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object getImage(Object object) {
+        try {
+            return overlayImage(object, getResourceLocator().getImage("full/obj16/SubProcess.png"));
+        } catch (java.util.MissingResourceException e) {
+            return overlayImage(object, getResourceLocator().getImage("full/obj16/SubProcess.gif"));
+        }
+    }
+
+    /**
+     * This returns the label text for the adapted class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String getText(Object object) {
+        String label = ((SubProcess) object).getName();
+        return label == null || label.length() == 0 ? getString("_UI_SubProcess_type")
+                : getString("_UI_SubProcess_type") + " " + label;
+    }
+
+    /**
+     * This handles model notifications by calling {@link #updateChildren} to update any cached
+     * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void notifyChanged(Notification notification) {
+        updateChildren(notification);
+
+        switch (notification.getFeatureID(SubProcess.class)) {
+        case Bpmn2Package.SUB_PROCESS__TRIGGERED_BY_EVENT:
+            fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(),
+                    false, true));
+            return;
+        case Bpmn2Package.SUB_PROCESS__LANE_SETS:
+        case Bpmn2Package.SUB_PROCESS__FLOW_ELEMENTS:
+        case Bpmn2Package.SUB_PROCESS__ARTIFACTS:
+            fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(),
+                    true, false));
+            return;
+        }
+        super.notifyChanged(notification);
+    }
+
+    /**
+     * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+     * that can be created under this object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+        super.collectNewChildDescriptors(newChildDescriptors, object);
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__LANE_SETS,
+                Bpmn2Factory.eINSTANCE.createLaneSet()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createSubProcess()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createAdHocSubProcess()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createBoundaryEvent()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createTask()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createBusinessRuleTask()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createCallActivity()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createCallChoreography()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createChoreographyTask()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createComplexGateway()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createDataObject()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createDataObjectReference()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createDataStoreReference()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createEndEvent()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createEventBasedGateway()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createExclusiveGateway()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createImplicitThrowEvent()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createInclusiveGateway()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createIntermediateCatchEvent()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createIntermediateThrowEvent()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createManualTask()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createParallelGateway()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createReceiveTask()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createScriptTask()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createSendTask()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createSequenceFlow()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createServiceTask()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createStartEvent()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createSubChoreography()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createTransaction()));
+
+        newChildDescriptors.add(createChildParameter(
+                Bpmn2Package.Literals.FLOW_ELEMENTS_CONTAINER__FLOW_ELEMENTS,
+                Bpmn2Factory.eINSTANCE.createUserTask()));
+
+        newChildDescriptors.add(createChildParameter(Bpmn2Package.Literals.SUB_PROCESS__ARTIFACTS,
+                Bpmn2Factory.eINSTANCE.createAssociation()));
+
+        newChildDescriptors.add(createChildParameter(Bpmn2Package.Literals.SUB_PROCESS__ARTIFACTS,
+                Bpmn2Factory.eINSTANCE.createGroup()));
+
+        newChildDescriptors.add(createChildParameter(Bpmn2Package.Literals.SUB_PROCESS__ARTIFACTS,
+                Bpmn2Factory.eINSTANCE.createTextAnnotation()));
+    }
+
+}
diff --git a/org.eclipse.bpmn2/model/BPMN20.ecore b/org.eclipse.bpmn2/model/BPMN20.ecore
index 7c4bbbb..05384ec 100644
--- a/org.eclipse.bpmn2/model/BPMN20.ecore
+++ b/org.eclipse.bpmn2/model/BPMN20.ecore
@@ -1588,7 +1588,7 @@
       </eAnnotations>
     </eStructuralFeatures>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="CallActivity" eSuperTypes="#//Activity">
+  <eClassifiers xsi:type="ecore:EClass" name="CallActivity" eSuperTypes="#//Activity #//InteractionNode">
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tCallActivity"/>
       <details key="kind" value="elementOnly"/>
@@ -4300,7 +4300,7 @@
       </eAnnotations>
     </eStructuralFeatures>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="SubProcess" eSuperTypes="#//Activity #//FlowElementsContainer">
+  <eClassifiers xsi:type="ecore:EClass" name="SubProcess" eSuperTypes="#//Activity #//FlowElementsContainer #//InteractionNode">
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tSubProcess"/>
       <details key="kind" value="elementOnly"/>
diff --git a/org.eclipse.bpmn2/src/org/eclipse/bpmn2/Bpmn2Package.java b/org.eclipse.bpmn2/src/org/eclipse/bpmn2/Bpmn2Package.java
index abd9b7a..3c297f4 100644
--- a/org.eclipse.bpmn2/src/org/eclipse/bpmn2/Bpmn2Package.java
+++ b/org.eclipse.bpmn2/src/org/eclipse/bpmn2/Bpmn2Package.java
@@ -2082,13 +2082,31 @@
     int SUB_PROCESS__FLOW_ELEMENTS = ACTIVITY_FEATURE_COUNT + 1;
 
     /**
+     * The feature id for the '<em><b>Incoming Conversation Links</b></em>' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SUB_PROCESS__INCOMING_CONVERSATION_LINKS = ACTIVITY_FEATURE_COUNT + 2;
+
+    /**
+     * The feature id for the '<em><b>Outgoing Conversation Links</b></em>' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SUB_PROCESS__OUTGOING_CONVERSATION_LINKS = ACTIVITY_FEATURE_COUNT + 3;
+
+    /**
      * The feature id for the '<em><b>Artifacts</b></em>' containment reference list.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int SUB_PROCESS__ARTIFACTS = ACTIVITY_FEATURE_COUNT + 2;
+    int SUB_PROCESS__ARTIFACTS = ACTIVITY_FEATURE_COUNT + 4;
 
     /**
      * The feature id for the '<em><b>Triggered By Event</b></em>' attribute.
@@ -2097,7 +2115,7 @@
      * @generated
      * @ordered
      */
-    int SUB_PROCESS__TRIGGERED_BY_EVENT = ACTIVITY_FEATURE_COUNT + 3;
+    int SUB_PROCESS__TRIGGERED_BY_EVENT = ACTIVITY_FEATURE_COUNT + 5;
 
     /**
      * The number of structural features of the '<em>Sub Process</em>' class.
@@ -2106,7 +2124,7 @@
      * @generated
      * @ordered
      */
-    int SUB_PROCESS_FEATURE_COUNT = ACTIVITY_FEATURE_COUNT + 4;
+    int SUB_PROCESS_FEATURE_COUNT = ACTIVITY_FEATURE_COUNT + 6;
 
     /**
      * The meta object id for the '{@link org.eclipse.bpmn2.impl.AdHocSubProcessImpl <em>Ad Hoc Sub Process</em>}' class.
@@ -2344,6 +2362,24 @@
     int AD_HOC_SUB_PROCESS__FLOW_ELEMENTS = SUB_PROCESS__FLOW_ELEMENTS;
 
     /**
+     * The feature id for the '<em><b>Incoming Conversation Links</b></em>' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int AD_HOC_SUB_PROCESS__INCOMING_CONVERSATION_LINKS = SUB_PROCESS__INCOMING_CONVERSATION_LINKS;
+
+    /**
+     * The feature id for the '<em><b>Outgoing Conversation Links</b></em>' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int AD_HOC_SUB_PROCESS__OUTGOING_CONVERSATION_LINKS = SUB_PROCESS__OUTGOING_CONVERSATION_LINKS;
+
+    /**
      * The feature id for the '<em><b>Artifacts</b></em>' containment reference list.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -4001,13 +4037,31 @@
     int CALL_ACTIVITY__START_QUANTITY = ACTIVITY__START_QUANTITY;
 
     /**
+     * The feature id for the '<em><b>Incoming Conversation Links</b></em>' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CALL_ACTIVITY__INCOMING_CONVERSATION_LINKS = ACTIVITY_FEATURE_COUNT + 0;
+
+    /**
+     * The feature id for the '<em><b>Outgoing Conversation Links</b></em>' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CALL_ACTIVITY__OUTGOING_CONVERSATION_LINKS = ACTIVITY_FEATURE_COUNT + 1;
+
+    /**
      * The feature id for the '<em><b>Called Element Ref</b></em>' reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int CALL_ACTIVITY__CALLED_ELEMENT_REF = ACTIVITY_FEATURE_COUNT + 0;
+    int CALL_ACTIVITY__CALLED_ELEMENT_REF = ACTIVITY_FEATURE_COUNT + 2;
 
     /**
      * The number of structural features of the '<em>Call Activity</em>' class.
@@ -4016,7 +4070,7 @@
      * @generated
      * @ordered
      */
-    int CALL_ACTIVITY_FEATURE_COUNT = ACTIVITY_FEATURE_COUNT + 1;
+    int CALL_ACTIVITY_FEATURE_COUNT = ACTIVITY_FEATURE_COUNT + 3;
 
     /**
      * The meta object id for the '{@link org.eclipse.bpmn2.impl.ChoreographyActivityImpl <em>Choreography Activity</em>}' class.
@@ -17810,6 +17864,24 @@
     int TRANSACTION__FLOW_ELEMENTS = SUB_PROCESS__FLOW_ELEMENTS;
 
     /**
+     * The feature id for the '<em><b>Incoming Conversation Links</b></em>' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int TRANSACTION__INCOMING_CONVERSATION_LINKS = SUB_PROCESS__INCOMING_CONVERSATION_LINKS;
+
+    /**
+     * The feature id for the '<em><b>Outgoing Conversation Links</b></em>' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int TRANSACTION__OUTGOING_CONVERSATION_LINKS = SUB_PROCESS__OUTGOING_CONVERSATION_LINKS;
+
+    /**
      * The feature id for the '<em><b>Artifacts</b></em>' containment reference list.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
diff --git a/org.eclipse.bpmn2/src/org/eclipse/bpmn2/CallActivity.java b/org.eclipse.bpmn2/src/org/eclipse/bpmn2/CallActivity.java
index d4ce569..29b8094 100644
--- a/org.eclipse.bpmn2/src/org/eclipse/bpmn2/CallActivity.java
+++ b/org.eclipse.bpmn2/src/org/eclipse/bpmn2/CallActivity.java
@@ -30,7 +30,7 @@
  * @model extendedMetaData="name='tCallActivity' kind='elementOnly'"
  * @generated
  */
-public interface CallActivity extends Activity {
+public interface CallActivity extends Activity, InteractionNode {
     /**
      * Returns the value of the '<em><b>Called Element Ref</b></em>' reference.
      * <!-- begin-user-doc -->
diff --git a/org.eclipse.bpmn2/src/org/eclipse/bpmn2/SubProcess.java b/org.eclipse.bpmn2/src/org/eclipse/bpmn2/SubProcess.java
index e4ae2a4..e2155cf 100644
--- a/org.eclipse.bpmn2/src/org/eclipse/bpmn2/SubProcess.java
+++ b/org.eclipse.bpmn2/src/org/eclipse/bpmn2/SubProcess.java
@@ -33,7 +33,7 @@
  * @model extendedMetaData="name='tSubProcess' kind='elementOnly'"
  * @generated
  */
-public interface SubProcess extends Activity, FlowElementsContainer {
+public interface SubProcess extends Activity, FlowElementsContainer, InteractionNode {
     /**
      * Returns the value of the '<em><b>Artifacts</b></em>' containment reference list.
      * The list contents are of type {@link org.eclipse.bpmn2.Artifact}.
diff --git a/org.eclipse.bpmn2/src/org/eclipse/bpmn2/impl/CallActivityImpl.java b/org.eclipse.bpmn2/src/org/eclipse/bpmn2/impl/CallActivityImpl.java
index 87d1a04..20e58af 100644
--- a/org.eclipse.bpmn2/src/org/eclipse/bpmn2/impl/CallActivityImpl.java
+++ b/org.eclipse.bpmn2/src/org/eclipse/bpmn2/impl/CallActivityImpl.java
@@ -14,9 +14,14 @@
  */
 package org.eclipse.bpmn2.impl;
 
+import java.util.List;
+
 import org.eclipse.bpmn2.Bpmn2Package;
 import org.eclipse.bpmn2.CallActivity;
 import org.eclipse.bpmn2.CallableElement;
+import org.eclipse.bpmn2.ConversationLink;
+import org.eclipse.bpmn2.InteractionNode;
+import org.eclipse.bpmn2.util.Bpmn2Resource;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
@@ -29,6 +34,8 @@
  * <p>
  * The following features are implemented:
  * <ul>
+ *   <li>{@link org.eclipse.bpmn2.impl.CallActivityImpl#getIncomingConversationLinks <em>Incoming Conversation Links</em>}</li>
+ *   <li>{@link org.eclipse.bpmn2.impl.CallActivityImpl#getOutgoingConversationLinks <em>Outgoing Conversation Links</em>}</li>
  *   <li>{@link org.eclipse.bpmn2.impl.CallActivityImpl#getCalledElementRef <em>Called Element Ref</em>}</li>
  * </ul>
  * </p>
@@ -68,6 +75,34 @@
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    public List<ConversationLink> getIncomingConversationLinks() {
+        if (eResource() instanceof Bpmn2Resource) {
+            return ((Bpmn2Resource) eResource()).getOppositeReferenceAdapter().getOppositeList(
+                    ConversationLink.class, this,
+                    Bpmn2Package.Literals.CONVERSATION_LINK__TARGET_REF);
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    public List<ConversationLink> getOutgoingConversationLinks() {
+        if (eResource() instanceof Bpmn2Resource) {
+            return ((Bpmn2Resource) eResource()).getOppositeReferenceAdapter().getOppositeList(
+                    ConversationLink.class, this,
+                    Bpmn2Package.Literals.CONVERSATION_LINK__SOURCE_REF);
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
      * @generated
      */
     public CallableElement getCalledElementRef() {
@@ -115,6 +150,10 @@
     @Override
     public Object eGet(int featureID, boolean resolve, boolean coreType) {
         switch (featureID) {
+        case Bpmn2Package.CALL_ACTIVITY__INCOMING_CONVERSATION_LINKS:
+            return getIncomingConversationLinks();
+        case Bpmn2Package.CALL_ACTIVITY__OUTGOING_CONVERSATION_LINKS:
+            return getOutgoingConversationLinks();
         case Bpmn2Package.CALL_ACTIVITY__CALLED_ELEMENT_REF:
             if (resolve)
                 return getCalledElementRef();
@@ -161,10 +200,54 @@
     @Override
     public boolean eIsSet(int featureID) {
         switch (featureID) {
+        case Bpmn2Package.CALL_ACTIVITY__INCOMING_CONVERSATION_LINKS:
+            return !getIncomingConversationLinks().isEmpty();
+        case Bpmn2Package.CALL_ACTIVITY__OUTGOING_CONVERSATION_LINKS:
+            return !getOutgoingConversationLinks().isEmpty();
         case Bpmn2Package.CALL_ACTIVITY__CALLED_ELEMENT_REF:
             return calledElementRef != null;
         }
         return super.eIsSet(featureID);
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+        if (baseClass == InteractionNode.class) {
+            switch (derivedFeatureID) {
+            case Bpmn2Package.CALL_ACTIVITY__INCOMING_CONVERSATION_LINKS:
+                return Bpmn2Package.INTERACTION_NODE__INCOMING_CONVERSATION_LINKS;
+            case Bpmn2Package.CALL_ACTIVITY__OUTGOING_CONVERSATION_LINKS:
+                return Bpmn2Package.INTERACTION_NODE__OUTGOING_CONVERSATION_LINKS;
+            default:
+                return -1;
+            }
+        }
+        return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+        if (baseClass == InteractionNode.class) {
+            switch (baseFeatureID) {
+            case Bpmn2Package.INTERACTION_NODE__INCOMING_CONVERSATION_LINKS:
+                return Bpmn2Package.CALL_ACTIVITY__INCOMING_CONVERSATION_LINKS;
+            case Bpmn2Package.INTERACTION_NODE__OUTGOING_CONVERSATION_LINKS:
+                return Bpmn2Package.CALL_ACTIVITY__OUTGOING_CONVERSATION_LINKS;
+            default:
+                return -1;
+            }
+        }
+        return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+    }
+
 } //CallActivityImpl
diff --git a/org.eclipse.bpmn2/src/org/eclipse/bpmn2/impl/SubProcessImpl.java b/org.eclipse.bpmn2/src/org/eclipse/bpmn2/impl/SubProcessImpl.java
index 77fbd75..6f38b03 100644
--- a/org.eclipse.bpmn2/src/org/eclipse/bpmn2/impl/SubProcessImpl.java
+++ b/org.eclipse.bpmn2/src/org/eclipse/bpmn2/impl/SubProcessImpl.java
@@ -19,10 +19,13 @@
 
 import org.eclipse.bpmn2.Artifact;
 import org.eclipse.bpmn2.Bpmn2Package;
+import org.eclipse.bpmn2.ConversationLink;
 import org.eclipse.bpmn2.FlowElement;
 import org.eclipse.bpmn2.FlowElementsContainer;
+import org.eclipse.bpmn2.InteractionNode;
 import org.eclipse.bpmn2.LaneSet;
 import org.eclipse.bpmn2.SubProcess;
+import org.eclipse.bpmn2.util.Bpmn2Resource;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.common.util.EList;
@@ -41,6 +44,8 @@
  * <ul>
  *   <li>{@link org.eclipse.bpmn2.impl.SubProcessImpl#getLaneSets <em>Lane Sets</em>}</li>
  *   <li>{@link org.eclipse.bpmn2.impl.SubProcessImpl#getFlowElements <em>Flow Elements</em>}</li>
+ *   <li>{@link org.eclipse.bpmn2.impl.SubProcessImpl#getIncomingConversationLinks <em>Incoming Conversation Links</em>}</li>
+ *   <li>{@link org.eclipse.bpmn2.impl.SubProcessImpl#getOutgoingConversationLinks <em>Outgoing Conversation Links</em>}</li>
  *   <li>{@link org.eclipse.bpmn2.impl.SubProcessImpl#getArtifacts <em>Artifacts</em>}</li>
  *   <li>{@link org.eclipse.bpmn2.impl.SubProcessImpl#isTriggeredByEvent <em>Triggered By Event</em>}</li>
  * </ul>
@@ -147,6 +152,34 @@
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    public List<ConversationLink> getIncomingConversationLinks() {
+        if (eResource() instanceof Bpmn2Resource) {
+            return ((Bpmn2Resource) eResource()).getOppositeReferenceAdapter().getOppositeList(
+                    ConversationLink.class, this,
+                    Bpmn2Package.Literals.CONVERSATION_LINK__TARGET_REF);
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    public List<ConversationLink> getOutgoingConversationLinks() {
+        if (eResource() instanceof Bpmn2Resource) {
+            return ((Bpmn2Resource) eResource()).getOppositeReferenceAdapter().getOppositeList(
+                    ConversationLink.class, this,
+                    Bpmn2Package.Literals.CONVERSATION_LINK__SOURCE_REF);
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
      * @generated
      */
     public List<Artifact> getArtifacts() {
@@ -211,6 +244,10 @@
             return getLaneSets();
         case Bpmn2Package.SUB_PROCESS__FLOW_ELEMENTS:
             return getFlowElements();
+        case Bpmn2Package.SUB_PROCESS__INCOMING_CONVERSATION_LINKS:
+            return getIncomingConversationLinks();
+        case Bpmn2Package.SUB_PROCESS__OUTGOING_CONVERSATION_LINKS:
+            return getOutgoingConversationLinks();
         case Bpmn2Package.SUB_PROCESS__ARTIFACTS:
             return getArtifacts();
         case Bpmn2Package.SUB_PROCESS__TRIGGERED_BY_EVENT:
@@ -283,6 +320,10 @@
             return laneSets != null && !laneSets.isEmpty();
         case Bpmn2Package.SUB_PROCESS__FLOW_ELEMENTS:
             return flowElements != null && !flowElements.isEmpty();
+        case Bpmn2Package.SUB_PROCESS__INCOMING_CONVERSATION_LINKS:
+            return !getIncomingConversationLinks().isEmpty();
+        case Bpmn2Package.SUB_PROCESS__OUTGOING_CONVERSATION_LINKS:
+            return !getOutgoingConversationLinks().isEmpty();
         case Bpmn2Package.SUB_PROCESS__ARTIFACTS:
             return artifacts != null && !artifacts.isEmpty();
         case Bpmn2Package.SUB_PROCESS__TRIGGERED_BY_EVENT:
@@ -308,6 +349,16 @@
                 return -1;
             }
         }
+        if (baseClass == InteractionNode.class) {
+            switch (derivedFeatureID) {
+            case Bpmn2Package.SUB_PROCESS__INCOMING_CONVERSATION_LINKS:
+                return Bpmn2Package.INTERACTION_NODE__INCOMING_CONVERSATION_LINKS;
+            case Bpmn2Package.SUB_PROCESS__OUTGOING_CONVERSATION_LINKS:
+                return Bpmn2Package.INTERACTION_NODE__OUTGOING_CONVERSATION_LINKS;
+            default:
+                return -1;
+            }
+        }
         return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
     }
 
@@ -328,6 +379,16 @@
                 return -1;
             }
         }
+        if (baseClass == InteractionNode.class) {
+            switch (baseFeatureID) {
+            case Bpmn2Package.INTERACTION_NODE__INCOMING_CONVERSATION_LINKS:
+                return Bpmn2Package.SUB_PROCESS__INCOMING_CONVERSATION_LINKS;
+            case Bpmn2Package.INTERACTION_NODE__OUTGOING_CONVERSATION_LINKS:
+                return Bpmn2Package.SUB_PROCESS__OUTGOING_CONVERSATION_LINKS;
+            default:
+                return -1;
+            }
+        }
         return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
     }
 
diff --git a/org.eclipse.bpmn2/src/org/eclipse/bpmn2/impl/bpmn2.ecore b/org.eclipse.bpmn2/src/org/eclipse/bpmn2/impl/bpmn2.ecore
index aae858c..5b7cc6c 100644
--- a/org.eclipse.bpmn2/src/org/eclipse/bpmn2/impl/bpmn2.ecore
+++ b/org.eclipse.bpmn2/src/org/eclipse/bpmn2/impl/bpmn2.ecore
@@ -1588,7 +1588,7 @@
       </eAnnotations>
     </eStructuralFeatures>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="CallActivity" eSuperTypes="#//Activity">
+  <eClassifiers xsi:type="ecore:EClass" name="CallActivity" eSuperTypes="#//Activity #//InteractionNode">
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tCallActivity"/>
       <details key="kind" value="elementOnly"/>
@@ -4301,7 +4301,7 @@
       </eAnnotations>
     </eStructuralFeatures>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="SubProcess" eSuperTypes="#//Activity #//FlowElementsContainer">
+  <eClassifiers xsi:type="ecore:EClass" name="SubProcess" eSuperTypes="#//Activity #//FlowElementsContainer #//InteractionNode">
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tSubProcess"/>
       <details key="kind" value="elementOnly"/>
diff --git a/org.eclipse.bpmn2/src/org/eclipse/bpmn2/util/Bpmn2Switch.java b/org.eclipse.bpmn2/src/org/eclipse/bpmn2/util/Bpmn2Switch.java
index 83c9db5..2ca4c73 100644
--- a/org.eclipse.bpmn2/src/org/eclipse/bpmn2/util/Bpmn2Switch.java
+++ b/org.eclipse.bpmn2/src/org/eclipse/bpmn2/util/Bpmn2Switch.java
@@ -257,6 +257,8 @@
             if (result == null)
                 result = caseFlowElementsContainer(adHocSubProcess);
             if (result == null)
+                result = caseInteractionNode(adHocSubProcess);
+            if (result == null)
                 result = caseFlowNode(adHocSubProcess);
             if (result == null)
                 result = caseFlowElement(adHocSubProcess);
@@ -355,6 +357,8 @@
             if (result == null)
                 result = caseActivity(callActivity);
             if (result == null)
+                result = caseInteractionNode(callActivity);
+            if (result == null)
                 result = caseFlowNode(callActivity);
             if (result == null)
                 result = caseFlowElement(callActivity);
@@ -1783,6 +1787,8 @@
             if (result == null)
                 result = caseFlowElementsContainer(subProcess);
             if (result == null)
+                result = caseInteractionNode(subProcess);
+            if (result == null)
                 result = caseFlowNode(subProcess);
             if (result == null)
                 result = caseFlowElement(subProcess);
@@ -1873,6 +1879,8 @@
             if (result == null)
                 result = caseFlowElementsContainer(transaction);
             if (result == null)
+                result = caseInteractionNode(transaction);
+            if (result == null)
                 result = caseFlowNode(transaction);
             if (result == null)
                 result = caseFlowElement(transaction);