diff --git a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/di/DIUtils.java b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/di/DIUtils.java
index 7db2963..822d37a 100644
--- a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/di/DIUtils.java
+++ b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/di/DIUtils.java
@@ -652,48 +652,51 @@
 		
 		boolean canDelete = false;
 		Definitions definitions = (Definitions)rootElement.eContainer();
-		BPMNDiagram bpmnDiagram = DIUtils.findBPMNDiagram(rootElement);
-		RootElement newRootElement = null;
-		if (bpmnDiagram==null) {
-			List<EObject> allObjects = new ArrayList<EObject>();
-			Map<EObject, Collection<EStructuralFeature.Setting>> usages;
-			TreeIterator<EObject> iter = rootElement.eContainer().eAllContents();
-			while (iter.hasNext())
-				allObjects.add(iter.next());
-				
-	        usages = UsageCrossReferencer.findAll(allObjects, rootElement);
-			canDelete = usages.isEmpty();
-		}
-		else {
-			// find a replacement for the BPMNDiagram target element
-			for (RootElement r : definitions.getRootElements()) {
-				if (r!=rootElement && (r instanceof FlowElementsContainer || r instanceof Collaboration)) {
-					if (rootElement instanceof Collaboration) {
-						Collaboration collaboration = (Collaboration) rootElement;
-						if (collaboration.getParticipants().isEmpty()) {
-							newRootElement = r;
-							canDelete = true;
-							break;
+		// check if this thing has already been deleted (eContainer == null)
+		if (definitions!=null) {
+			BPMNDiagram bpmnDiagram = DIUtils.findBPMNDiagram(rootElement);
+			RootElement newRootElement = null;
+			if (bpmnDiagram==null) {
+				List<EObject> allObjects = new ArrayList<EObject>();
+				Map<EObject, Collection<EStructuralFeature.Setting>> usages;
+				TreeIterator<EObject> iter = definitions.eAllContents();
+				while (iter.hasNext())
+					allObjects.add(iter.next());
+					
+		        usages = UsageCrossReferencer.findAll(allObjects, rootElement);
+				canDelete = usages.isEmpty();
+			}
+			else {
+				// find a replacement for the BPMNDiagram target element
+				for (RootElement r : definitions.getRootElements()) {
+					if (r!=rootElement && (r instanceof FlowElementsContainer || r instanceof Collaboration)) {
+						if (rootElement instanceof Collaboration) {
+							Collaboration collaboration = (Collaboration) rootElement;
+							if (collaboration.getParticipants().isEmpty()) {
+								newRootElement = r;
+								canDelete = true;
+								break;
+							}
+								
 						}
-							
-					}
-					else if (rootElement instanceof FlowElementsContainer) {
-						FlowElementsContainer container = (FlowElementsContainer) rootElement;
-						if (container.getFlowElements().isEmpty()) {
-							newRootElement = r;
-							canDelete = true;
-							break;
+						else if (rootElement instanceof FlowElementsContainer) {
+							FlowElementsContainer container = (FlowElementsContainer) rootElement;
+							if (container.getFlowElements().isEmpty()) {
+								newRootElement = r;
+								canDelete = true;
+								break;
+							}
 						}
+						break;
 					}
-					break;
 				}
 			}
-		}
-		
-		if (canDelete) {
-			EcoreUtil.delete(rootElement);
-			if (bpmnDiagram!=null && newRootElement!=null)
-				bpmnDiagram.getPlane().setBpmnElement(newRootElement);
+			
+			if (canDelete) {
+				EcoreUtil.delete(rootElement);
+				if (bpmnDiagram!=null && newRootElement!=null)
+					bpmnDiagram.getPlane().setBpmnElement(newRootElement);
+			}
 		}
 		return canDelete;
 	}
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2Editor.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2Editor.java
index 55f6350..e92c657 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2Editor.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2Editor.java
@@ -604,11 +604,6 @@
 	public String getContributorId() {
 		return CONTRIBUTOR_ID;
 	}
-
-	public TargetRuntime getTargetRuntime(ITabDescriptorProvider tdp) {
-		tabDescriptorProvider = tdp;
-		return getTargetRuntime();
-	}
 	
 	public TargetRuntime getTargetRuntime() {
 		if (targetRuntime==null) {
@@ -843,13 +838,14 @@
 		}
 		if (required==ITabDescriptorProvider.class) {
 			if (tabDescriptorProvider==null) {
-				IWorkbenchPage page = getEditorSite().getPage();
-				String viewID = "org.eclipse.ui.views.PropertySheet"; //$NON-NLS-1$
-				try {
-					page.showView(viewID, null, IWorkbenchPage.VIEW_CREATE);
-					page.showView(viewID, null,  IWorkbenchPage.VIEW_ACTIVATE);
-				}
-				catch (Exception e) {}
+				tabDescriptorProvider = new PropertyTabDescriptorProvider();
+//				IWorkbenchPage page = getEditorSite().getPage();
+//				String viewID = "org.eclipse.ui.views.PropertySheet"; //$NON-NLS-1$
+//				try {
+//					page.showView(viewID, null, IWorkbenchPage.VIEW_CREATE);
+//					page.showView(viewID, null,  IWorkbenchPage.VIEW_ACTIVATE);
+//				}
+//				catch (Exception e) {}
 			}
 			return tabDescriptorProvider;
 		}
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2EditorDiagramBehavior.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2EditorDiagramBehavior.java
index 087fc28..6de025a 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2EditorDiagramBehavior.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2EditorDiagramBehavior.java
@@ -78,6 +78,10 @@
 					action.setEnabled(action.isEnabled());
 					manager.add(action);
 				}
+
+				action = getDiagramContainer().getActionRegistry().getAction("show.property.view"); //$NON-NLS-1$
+				action.setText(action.getText());
+				manager.add(action);
 			}
 		};
 	}
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/DesignEditor.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/DesignEditor.java
index 854d184..b89c4ff 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/DesignEditor.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/DesignEditor.java
@@ -63,6 +63,7 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.views.contentoutline.ContentOutline;
 
@@ -430,6 +431,37 @@
 			}
 		};
 		registry.registerAction(action);
+		
+		action = new WorkbenchPartAction(multipageEditor.getDesignEditor()) {
+
+			@Override
+			protected void init() {
+				super.init();
+				setId("show.property.view"); //$NON-NLS-1$
+			}
+
+			@Override
+			public String getText() {
+				return Messages.DesignEditor_Show_Property_View_Action;
+			}
+
+			@Override
+			protected boolean calculateEnabled() {
+				return true;
+			}
+
+			public void run() {
+				IWorkbenchPage page = getEditorSite().getPage();
+				String viewID = "org.eclipse.ui.views.PropertySheet"; //$NON-NLS-1$
+				try {
+					page.showView(viewID, null, IWorkbenchPage.VIEW_CREATE);
+					page.showView(viewID, null,  IWorkbenchPage.VIEW_ACTIVATE);
+				}
+				catch (Exception e) {}
+			}
+		};
+		registry.registerAction(action);
+
 	}
 
 	public class AddRemoveDiagramListener implements ResourceSetListener {
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/Messages.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/Messages.java
index 4ea544f..eb05ba4 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/Messages.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/Messages.java
@@ -23,6 +23,7 @@
 	public static String DesignEditor_Diagram_Tab;
 	public static String DesignEditor_Hide_Source_View_Action;
 	public static String DesignEditor_Show_Source_View_Action;
+	public static String DesignEditor_Show_Property_View_Action;
 	static {
 		// initialize resource bundle
 		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/messages.properties b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/messages.properties
index e4d0eab..987fe67 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/messages.properties
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/messages.properties
@@ -17,3 +17,4 @@
 DesignEditor_Diagram_Tab=Diagram
 DesignEditor_Hide_Source_View_Action=Hide Source View
 DesignEditor_Show_Source_View_Action=Show Source View
+DesignEditor_Show_Property_View_Action=Show Property View
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/choreography/SubChoreographyFeatureContainer.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/choreography/SubChoreographyFeatureContainer.java
index bd8500c..0b2ce4e 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/choreography/SubChoreographyFeatureContainer.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/choreography/SubChoreographyFeatureContainer.java
@@ -13,13 +13,18 @@
 package org.eclipse.bpmn2.modeler.ui.features.choreography;
 
 import org.eclipse.bpmn2.Bpmn2Package;
+import org.eclipse.bpmn2.ChoreographyActivity;
 import org.eclipse.bpmn2.Participant;
 import org.eclipse.bpmn2.SubChoreography;
+import org.eclipse.bpmn2.modeler.core.features.GraphitiConstants;
+import org.eclipse.bpmn2.modeler.core.features.MultiUpdateFeature;
+import org.eclipse.bpmn2.modeler.core.utils.ShapeDecoratorUtil;
 import org.eclipse.bpmn2.modeler.ui.ImageProvider;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.graphiti.features.IAddFeature;
 import org.eclipse.graphiti.features.ICreateFeature;
 import org.eclipse.graphiti.features.IFeatureProvider;
+import org.eclipse.graphiti.mm.pictograms.ContainerShape;
 
 public class SubChoreographyFeatureContainer extends AbstractChoreographyFeatureContainer {
 
@@ -39,6 +44,21 @@
 		return new AddSubChoreographyFeature(fp);
 	}
 
+	@Override
+	public MultiUpdateFeature getUpdateFeature(IFeatureProvider fp) {
+		MultiUpdateFeature multiUpdate = super.getUpdateFeature(fp);
+		multiUpdate.addFeature(new UpdateChoreographyMarkerFeature(fp) {
+			@Override
+			protected void doUpdate(ChoreographyActivity element, ContainerShape markerContainer) {
+				super.doUpdate(element, markerContainer);
+				// SubChoreography always has an EXPAND marker
+				ShapeDecoratorUtil.showActivityMarker(markerContainer, GraphitiConstants.ACTIVITY_MARKER_EXPAND);
+			}
+		});
+		
+		return multiUpdate;
+	}
+	
 	public static class CreateSubChoreographyFeature extends AbstractCreateChoreographyActivityFeature<SubChoreography> {
 
 		public CreateSubChoreographyFeature(IFeatureProvider fp) {
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/conversation/ConversationFeatureContainer.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/conversation/ConversationFeatureContainer.java
index d4767ca..cb88e17 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/conversation/ConversationFeatureContainer.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/conversation/ConversationFeatureContainer.java
@@ -16,7 +16,6 @@
 import org.eclipse.bpmn2.Conversation;
 import org.eclipse.bpmn2.SubConversation;
 import org.eclipse.bpmn2.modeler.core.features.BaseElementFeatureContainer;
-import org.eclipse.bpmn2.modeler.core.features.DefaultLayoutBPMNConnectionFeature;
 import org.eclipse.bpmn2.modeler.core.features.DefaultMoveBPMNShapeFeature;
 import org.eclipse.bpmn2.modeler.core.features.MultiUpdateFeature;
 import org.eclipse.bpmn2.modeler.core.features.label.UpdateLabelFeature;
@@ -30,10 +29,8 @@
 import org.eclipse.graphiti.features.IMoveShapeFeature;
 import org.eclipse.graphiti.features.IResizeShapeFeature;
 import org.eclipse.graphiti.features.IUpdateFeature;
-import org.eclipse.graphiti.features.context.IAddContext;
 import org.eclipse.graphiti.features.context.IResizeShapeContext;
 import org.eclipse.graphiti.features.impl.DefaultResizeShapeFeature;
-import org.eclipse.graphiti.mm.pictograms.ContainerShape;
 
 public class ConversationFeatureContainer extends BaseElementFeatureContainer {
 
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/lane/DeleteLaneFeature.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/lane/DeleteLaneFeature.java
index d747c82..57764c5 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/lane/DeleteLaneFeature.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/lane/DeleteLaneFeature.java
@@ -46,6 +46,10 @@
 		ContainerShape laneContainerShape = (ContainerShape) context.getPictogramElement();
 		ContainerShape parentContainerShape = laneContainerShape.getContainer();
 		Lane lane = (Lane)getBusinessObjectForPictogramElement(laneContainerShape);
+		if (lane==null) {
+			// this can happen if the lane was already deleted by its parent Lane or Pool
+			return;
+		}
 		LaneSet laneSet = (LaneSet)lane.eContainer();
 		
 		if (parentContainerShape != null) {
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/PropertyTabDescriptorProvider.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/PropertyTabDescriptorProvider.java
index 08128d3..3615397 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/PropertyTabDescriptorProvider.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/PropertyTabDescriptorProvider.java
@@ -16,11 +16,11 @@
 import java.util.Hashtable;
 import java.util.List;
 
+import org.eclipse.bpmn2.modeler.core.preferences.Bpmn2Preferences;
 import org.eclipse.bpmn2.modeler.core.runtime.Bpmn2SectionDescriptor;
 import org.eclipse.bpmn2.modeler.core.runtime.PropertyTabDescriptor;
 import org.eclipse.bpmn2.modeler.core.runtime.TargetRuntime;
 import org.eclipse.bpmn2.modeler.core.utils.BusinessObjectUtil;
-import org.eclipse.bpmn2.modeler.ui.editor.BPMN2Editor;
 import org.eclipse.emf.common.util.TreeIterator;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
@@ -35,7 +35,7 @@
 	// cached in this map. It is the BPMN2 Editor's responsibility to remove these items from the map
 	// when it is disposed().
 	// @see PropertyTabDescriptorProvider#disposeTabDescriptors(Resource)
-	Hashtable <EObject, TabDescriptorList> tabDescriptorListMap = new Hashtable <EObject, TabDescriptorList>();
+	static Hashtable <EObject, TabDescriptorList> tabDescriptorListMap = new Hashtable <EObject, TabDescriptorList>();
 	
 	public PropertyTabDescriptorProvider() {
 		super();
@@ -45,26 +45,22 @@
 	@Override
 	public ITabDescriptor[] getTabDescriptors(IWorkbenchPart part, ISelection selection) {
 		
-		// is the Tab Descriptor List already in our cache?
-		TabDescriptorList tabDescriptorList = null;
 		EObject businessObject = BusinessObjectUtil.getBusinessObjectForSelection(selection);
-		if (businessObject!=null) {
-			tabDescriptorList = tabDescriptorListMap.get(businessObject);
-			if (tabDescriptorList!=null) {
-				// Yes! return it.
-				return tabDescriptorList.toArray();
-			}
+		if (businessObject==null || businessObject.eResource()==null) {
+			return new ITabDescriptor[] {};
+		}
+		
+		// is the Tab Descriptor List already in our cache?
+		TabDescriptorList tabDescriptorList = tabDescriptorListMap.get(businessObject);
+		if (tabDescriptorList!=null) {
+			// Yes! return it.
+			return tabDescriptorList.toArray();
 		}
 		
 		// No, we need build the list: get the Target Runtime <propertyTab> contributions
 		// and merge with the Default Runtime Tab Descriptors
-		TargetRuntime rt = TargetRuntime.getDefaultRuntime();
-		Object bpmn2Editor = part.getAdapter(BPMN2Editor.class);
-		if (bpmn2Editor instanceof BPMN2Editor) {
-			rt = ((BPMN2Editor)bpmn2Editor).getTargetRuntime(this);
-		}
-		
 		List<PropertyTabDescriptor> desc = null;
+		TargetRuntime rt = Bpmn2Preferences.getInstance(businessObject.eResource()).getRuntime();
 		if (rt!=TargetRuntime.getDefaultRuntime()) {
 			desc = TargetRuntime.getDefaultRuntime().buildPropertyTabDescriptors();
 			desc.addAll(rt.buildPropertyTabDescriptors());
@@ -185,5 +181,14 @@
 				tabDescriptorListMap.remove(object);
 			}
 		}
+		// clean up any dangling EObjects (ones that are not contained in a Resource)
+		List<EObject> removed = new ArrayList<EObject>();
+		for (EObject o : tabDescriptorListMap.keySet()) {
+			if (o.eResource()==null) {
+				removed.add(o);
+			}
+		}
+		for (EObject o : removed)
+			tabDescriptorListMap.remove(o);
 	}
 }
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/views/outline/FlowElementTreeEditPart.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/views/outline/FlowElementTreeEditPart.java
index 2d4ebae..6f078bb 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/views/outline/FlowElementTreeEditPart.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/views/outline/FlowElementTreeEditPart.java
@@ -18,6 +18,7 @@
 import org.eclipse.bpmn2.CallActivity;
 import org.eclipse.bpmn2.CallableElement;
 import org.eclipse.bpmn2.CatchEvent;
+import org.eclipse.bpmn2.Choreography;
 import org.eclipse.bpmn2.ChoreographyActivity;
 import org.eclipse.bpmn2.Definitions;
 import org.eclipse.bpmn2.FlowElement;
@@ -25,6 +26,7 @@
 import org.eclipse.bpmn2.FlowNode;
 import org.eclipse.bpmn2.Lane;
 import org.eclipse.bpmn2.LaneSet;
+import org.eclipse.bpmn2.Participant;
 import org.eclipse.bpmn2.Process;
 import org.eclipse.bpmn2.SequenceFlow;
 import org.eclipse.bpmn2.SubChoreography;
@@ -168,6 +170,23 @@
 		if (container instanceof SubChoreography) {
 			retList.addAll(((SubChoreography)container).getArtifacts());
 		}
+		if (container instanceof Choreography) {
+			// Add Pools as children if the Pool has a Process associated with it,
+			// or if the Participant is NOT referenced by a Choreography Activity.
+			for (Participant p : ((Choreography)container).getParticipants()) {
+				if (p.getProcessRef()!=null)
+					retList.add(p);
+				else {
+					for (FlowElement fe : flowElements) {
+						if (fe instanceof ChoreographyActivity) {
+							if (!((ChoreographyActivity)fe).getParticipantRefs().contains(p)) {
+								retList.add(p);
+							}
+						}
+					}
+				}
+			}
+		}
 		return retList;
 	}
 	
