diff --git a/plugins/org.eclipse.gmf.codegen.xtend/xtend/xpt/diagram/editpolicies/Utils_qvto.xtend b/plugins/org.eclipse.gmf.codegen.xtend/xtend/xpt/diagram/editpolicies/Utils_qvto.xtend
index 649754b..86fa080 100644
--- a/plugins/org.eclipse.gmf.codegen.xtend/xtend/xpt/diagram/editpolicies/Utils_qvto.xtend
+++ b/plugins/org.eclipse.gmf.codegen.xtend/xtend/xpt/diagram/editpolicies/Utils_qvto.xtend
@@ -120,8 +120,10 @@
 	 * if child's containment feature comes from the node, assume deletion of the parent would delete the child.
 	 */
 	def boolean isDirectlyOwned(GenChildNode child, GenNode genNode) {
-		if(child.modelFacet == null || genNode.modelFacet == null) return false;
-		return child.modelFacet.containmentMetaFeature.genClass.isSuperTypeOf(genNode.modelFacet.metaClass)
+		var childFacet = child.modelFacet;
+		if (childFacet == null || genNode.modelFacet == null) return false;
+		if (childFacet.containmentMetaFeature == null) return false;
+		return childFacet.containmentMetaFeature.genClass.isSuperTypeOf(genNode.modelFacet.metaClass)
 	}
 
 }
diff --git a/plugins/org.eclipse.gmf.codegen.xtend/xtend/xpt/diagram/updater/DiagramUpdater.xtend b/plugins/org.eclipse.gmf.codegen.xtend/xtend/xpt/diagram/updater/DiagramUpdater.xtend
index 8d6288e..3e1c760 100644
--- a/plugins/org.eclipse.gmf.codegen.xtend/xtend/xpt/diagram/updater/DiagramUpdater.xtend
+++ b/plugins/org.eclipse.gmf.codegen.xtend/xtend/xpt/diagram/updater/DiagramUpdater.xtend
@@ -191,7 +191,7 @@
 			«ENDFOR»
 			«IF it.getPhantomNodes.notEmpty»
 				org.eclipse.emf.ecore.resource.Resource resource = modelElement.eResource();
-				for (java.util.Iterator<org.eclipse.emf.ecore.EObject> it = getPhantomNodesIterator(resource)) {
+				for (java.util.Iterator<org.eclipse.emf.ecore.EObject> it = getPhantomNodesIterator(resource); it.hasNext();) {
 					org.eclipse.emf.ecore.EObject childElement = it.next();
 					if (childElement == modelElement) {
 						continue;
@@ -249,7 +249,7 @@
 
 
 	def getPhantomNodesIterator(GenDiagramUpdater it) '''
-	«IF editorGen.diagram.phantomNodes.notEmpty»
+	«IF editorGen.diagram.hasPhantomNodes»
 	
 	«generatedMemberComment»
 	private static java.util.Iterator<org.eclipse.emf.ecore.EObject> getPhantomNodesIterator(org.eclipse.emf.ecore.resource.Resource resource) {
diff --git a/plugins/org.eclipse.gmf.codegen.xtend/xtend/xpt/diagram/updater/Utils_qvto.xtend b/plugins/org.eclipse.gmf.codegen.xtend/xtend/xpt/diagram/updater/Utils_qvto.xtend
index 0514b48..4ca377c 100644
--- a/plugins/org.eclipse.gmf.codegen.xtend/xtend/xpt/diagram/updater/Utils_qvto.xtend
+++ b/plugins/org.eclipse.gmf.codegen.xtend/xtend/xpt/diagram/updater/Utils_qvto.xtend
@@ -167,12 +167,30 @@
 		return getSemanticChildren(containerBase).filter[node|!node.modelFacet.isPhantomElement()]
 	}
 
+	def boolean hasPhantomNodes(GenDiagram it) {
+		if (it.phantomNodes.notEmpty) return true; 
+		for (GenNode node: it.allNodes) {
+			if (node.phantomNodes.notEmpty) {
+				return true;
+			}
+		}
+		return false;
+	}
+
 	def dispatch Iterable<GenNode> getPhantomNodes(GenContainerBase it) {
 		return <GenNode>newLinkedList()
 	}
 
 	def dispatch Iterable<GenNode> getPhantomNodes(GenNode it) {
-		return getSemanticChildren(it).filter[node|node.modelFacet.isPhantomElement()]
+		return getPhantomNodesForContainers(it)
+	}
+
+	def dispatch Iterable<GenNode> getPhantomNodes(GenDiagram it) {
+		return getPhantomNodesForContainers(it)
+	}
+
+	def Iterable<GenNode> getPhantomNodesForContainers(GenContainerBase it) {
+		getSemanticChildren(it).filter[node|node.modelFacet.isPhantomElement()]
 	}
 
 	def Iterable<GenNode> getSemanticChildren(GenContainerBase containerBase) {
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/.classpath b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/.classpath
new file mode 100755
index 0000000..ad32c83
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/.gitignore b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/.gitignore
new file mode 100755
index 0000000..7985f5e
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/.gitignore
@@ -0,0 +1,3 @@
+/bin
+/xtend-gen
+*.java._trace
\ No newline at end of file
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/.project b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/.project
new file mode 100755
index 0000000..0f514b2
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.gmf.tooling.examples.phantoms</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/.settings/org.eclipse.jdt.core.prefs b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/.settings/phantoms.gmfgen.prefs b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/.settings/phantoms.gmfgen.prefs
new file mode 100755
index 0000000..672ea48
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/.settings/phantoms.gmfgen.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+generate_rcp=false
+ignore_gmfgen_validation=true
+ignore_mapmodel_validation=true
+use_in_transfo_code_gen=false
+use_map_mode=true
+use_runtime_figures=true
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/META-INF/MANIFEST.MF b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..41ed518
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.gmf.tooling.examples.phantoms;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: org.eclipse.gmf.tooling.examples.phantoms,
+ org.eclipse.gmf.tooling.examples.phantoms.impl,
+ org.eclipse.gmf.tooling.examples.phantoms.util
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/build.properties b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/build.properties
new file mode 100755
index 0000000..4d3b182
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/build.properties
@@ -0,0 +1,10 @@
+#
+
+bin.includes = .,\
+               model/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.ecore b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.ecore
new file mode 100755
index 0000000..13d26c9
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.ecore
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="phantoms" nsURI="http://org.eclipse.gmf.tooling.examples.phantoms"
+    nsPrefix="phantoms">
+  <eClassifiers xsi:type="ecore:EClass" name="Root">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="children" upperBound="-1"
+        eType="#//RootChild" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="RootChild"/>
+  <eClassifiers xsi:type="ecore:EClass" name="TopParent" eSuperTypes="#//RootChild">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="children" upperBound="-1"
+        eType="#//TopChild" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Medium" eSuperTypes="#//RootChild">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="children" upperBound="-1"
+        eType="#//MediumParent" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TopChild">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        defaultValueLiteral="TopChild"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MediumParent">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="children" upperBound="-1"
+        eType="#//MediumChild" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MediumChild">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        defaultValueLiteral="MediumChild"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.genmodel b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.genmodel
new file mode 100755
index 0000000..412af91
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.genmodel
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.gmf.tooling.examples.phantoms/src"
+    editDirectory="/org.eclipse.gmf.tooling.examples.phantoms.edit/src" editorDirectory="/org.eclipse.gmf.tooling.examples.phantoms.editor/src"
+    modelPluginID="org.eclipse.gmf.tooling.examples.phantoms" modelName="Phantoms"
+    rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container" importerID="org.eclipse.emf.importer.ecore"
+    complianceLevel="6.0" copyrightFields="false" editPluginID="org.eclipse.gmf.tooling.examples.phantoms.edit"
+    editorPluginID="org.eclipse.gmf.tooling.examples.phantoms.editor" operationReflection="true"
+    importOrganizing="true">
+  <foreignModel>phantoms.ecore</foreignModel>
+  <genPackages prefix="Phantoms" basePackage="org.eclipse.gmf.tooling.examples" disposableProviderFactory="true"
+      ecorePackage="phantoms.ecore#/">
+    <genClasses ecoreClass="phantoms.ecore#//Root">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference phantoms.ecore#//Root/children"/>
+    </genClasses>
+    <genClasses ecoreClass="phantoms.ecore#//RootChild"/>
+    <genClasses ecoreClass="phantoms.ecore#//TopParent">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference phantoms.ecore#//TopParent/children"/>
+    </genClasses>
+    <genClasses ecoreClass="phantoms.ecore#//Medium">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference phantoms.ecore#//Medium/children"/>
+    </genClasses>
+    <genClasses ecoreClass="phantoms.ecore#//TopChild">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute phantoms.ecore#//TopChild/name"/>
+    </genClasses>
+    <genClasses ecoreClass="phantoms.ecore#//MediumParent">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference phantoms.ecore#//MediumParent/children"/>
+    </genClasses>
+    <genClasses ecoreClass="phantoms.ecore#//MediumChild">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute phantoms.ecore#//MediumChild/name"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.gmfgen b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.gmfgen
new file mode 100755
index 0000000..0aaf336
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.gmfgen
@@ -0,0 +1,423 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gmfgen:GenEditorGenerator
+    xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:gmfgen="http://www.eclipse.org/gmf/2009/GenModel">
+  <diagram
+      visualID="1000"
+      editPartClassName="RootEditPart"
+      itemSemanticEditPolicyClassName="RootItemSemanticEditPolicy"
+      canonicalEditPolicyClassName="RootCanonicalEditPolicy"
+      iconProviderPriority="Low"
+      validationProviderPriority="Low">
+    <diagramRunTimeClass
+        href="../../../plugin/org.eclipse.gmf.runtime.notation/model/notation.genmodel#//notation/Diagram"/>
+    <elementType
+        xsi:type="gmfgen:MetamodelType"
+        editHelperClassName="RootEditHelper"/>
+    <viewmap
+        xsi:type="gmfgen:ModeledViewmap">
+      <figureModel
+          href="phantoms.gmfgraph#phantoms"/>
+    </viewmap>
+    <domainDiagramElement
+        href="phantoms.genmodel#//phantoms/Root"/>
+    <childNodes
+        visualID="3001"
+        editPartClassName="MediumParentEditPart"
+        itemSemanticEditPolicyClassName="MediumParentItemSemanticEditPolicy"
+        canonicalEditPolicyClassName="MediumParentCanonicalEditPolicy"
+        graphicalNodeEditPolicyClassName="MediumParentGraphicalNodeEditPolicy"
+        createCommandClassName="MediumParentCreateCommand"
+        containers="//@diagram/@topLevelNodes.0">
+      <diagramRunTimeClass
+          href="../../../plugin/org.eclipse.gmf.runtime.notation/model/notation.genmodel#//notation/Node"/>
+      <elementType
+          xsi:type="gmfgen:MetamodelType"
+          editHelperClassName="MediumParentEditHelper"/>
+      <viewmap
+          xsi:type="gmfgen:ModeledViewmap">
+        <figureModel
+            href="phantoms.gmfgraph#MediumParent"/>
+      </viewmap>
+      <modelFacet>
+        <metaClass
+            href="phantoms.genmodel#//phantoms/MediumParent"/>
+        <containmentMetaFeature
+            href="phantoms.genmodel#//phantoms/Medium/children"/>
+        <childMetaFeature
+            href="phantoms.genmodel#//phantoms/Medium/children"/>
+      </modelFacet>
+    </childNodes>
+    <childNodes
+        visualID="3002"
+        editPartClassName="MediumChildEditPart"
+        itemSemanticEditPolicyClassName="MediumChildItemSemanticEditPolicy"
+        canonicalEditPolicyClassName="MediumChildCanonicalEditPolicy"
+        graphicalNodeEditPolicyClassName="MediumChildGraphicalNodeEditPolicy"
+        createCommandClassName="MediumChildCreateCommand"
+        containers="//@diagram/@topLevelNodes.0">
+      <diagramRunTimeClass
+          href="../../../plugin/org.eclipse.gmf.runtime.notation/model/notation.genmodel#//notation/Node"/>
+      <elementType
+          xsi:type="gmfgen:MetamodelType"
+          editHelperClassName="MediumChildEditHelper"/>
+      <viewmap
+          xsi:type="gmfgen:ModeledViewmap"
+          layoutType="FLOW_LAYOUT">
+        <figureModel
+            href="phantoms.gmfgraph#MediumChild"/>
+      </viewmap>
+      <modelFacet>
+        <metaClass
+            href="phantoms.genmodel#//phantoms/MediumChild"/>
+      </modelFacet>
+      <labels
+          visualID="5001"
+          editPartClassName="MediumChildNameEditPart"
+          itemSemanticEditPolicyClassName="MediumChildNameItemSemanticEditPolicy"
+          elementIcon="true">
+        <diagramRunTimeClass
+            href="../../../plugin/org.eclipse.gmf.runtime.notation/model/notation.genmodel#//notation/Node"/>
+        <viewmap
+            xsi:type="gmfgen:ModeledViewmap">
+          <figureModel
+              href="phantoms.gmfgraph#MediumChildName"/>
+        </viewmap>
+        <modelFacet
+            xsi:type="gmfgen:FeatureLabelModelFacet"
+            parser="//@labelParsers/@implementations.0">
+          <metaFeatures
+              href="phantoms.genmodel#//phantoms/MediumChild/name"/>
+        </modelFacet>
+      </labels>
+    </childNodes>
+    <topLevelNodes
+        visualID="2001"
+        editPartClassName="MediumEditPart"
+        itemSemanticEditPolicyClassName="MediumItemSemanticEditPolicy"
+        canonicalEditPolicyClassName="MediumCanonicalEditPolicy"
+        childNodes="//@diagram/@childNodes.0 //@diagram/@childNodes.1"
+        graphicalNodeEditPolicyClassName="MediumGraphicalNodeEditPolicy"
+        createCommandClassName="MediumCreateCommand">
+      <diagramRunTimeClass
+          href="../../../plugin/org.eclipse.gmf.runtime.notation/model/notation.genmodel#//notation/Node"/>
+      <elementType
+          xsi:type="gmfgen:MetamodelType"
+          editHelperClassName="MediumEditHelper"/>
+      <viewmap
+          xsi:type="gmfgen:ModeledViewmap"
+          layoutType="XY_LAYOUT">
+        <figureModel
+            href="phantoms.gmfgraph#Medium"/>
+      </viewmap>
+      <modelFacet>
+        <metaClass
+            href="phantoms.genmodel#//phantoms/Medium"/>
+        <containmentMetaFeature
+            href="phantoms.genmodel#//phantoms/Root/children"/>
+        <childMetaFeature
+            href="phantoms.genmodel#//phantoms/Root/children"/>
+      </modelFacet>
+    </topLevelNodes>
+    <topLevelNodes
+        visualID="2002"
+        editPartClassName="TopParentEditPart"
+        itemSemanticEditPolicyClassName="TopParentItemSemanticEditPolicy"
+        canonicalEditPolicyClassName="TopParentCanonicalEditPolicy"
+        graphicalNodeEditPolicyClassName="TopParentGraphicalNodeEditPolicy"
+        createCommandClassName="TopParentCreateCommand">
+      <diagramRunTimeClass
+          href="../../../plugin/org.eclipse.gmf.runtime.notation/model/notation.genmodel#//notation/Node"/>
+      <elementType
+          xsi:type="gmfgen:MetamodelType"
+          editHelperClassName="TopParentEditHelper"/>
+      <viewmap
+          xsi:type="gmfgen:ModeledViewmap">
+        <figureModel
+            href="phantoms.gmfgraph#TopParent"/>
+      </viewmap>
+      <modelFacet>
+        <metaClass
+            href="phantoms.genmodel#//phantoms/TopParent"/>
+        <containmentMetaFeature
+            href="phantoms.genmodel#//phantoms/Root/children"/>
+        <childMetaFeature
+            href="phantoms.genmodel#//phantoms/Root/children"/>
+      </modelFacet>
+    </topLevelNodes>
+    <topLevelNodes
+        visualID="2003"
+        editPartClassName="TopChildEditPart"
+        itemSemanticEditPolicyClassName="TopChildItemSemanticEditPolicy"
+        canonicalEditPolicyClassName="TopChildCanonicalEditPolicy"
+        graphicalNodeEditPolicyClassName="TopChildGraphicalNodeEditPolicy"
+        createCommandClassName="TopChildCreateCommand">
+      <diagramRunTimeClass
+          href="../../../plugin/org.eclipse.gmf.runtime.notation/model/notation.genmodel#//notation/Node"/>
+      <elementType
+          xsi:type="gmfgen:MetamodelType"
+          editHelperClassName="TopChildEditHelper"/>
+      <viewmap
+          xsi:type="gmfgen:ModeledViewmap"
+          layoutType="FLOW_LAYOUT">
+        <figureModel
+            href="phantoms.gmfgraph#TopChild"/>
+      </viewmap>
+      <modelFacet>
+        <metaClass
+            href="phantoms.genmodel#//phantoms/TopChild"/>
+      </modelFacet>
+      <labels
+          visualID="5002"
+          editPartClassName="TopChildNameEditPart"
+          itemSemanticEditPolicyClassName="TopChildNameItemSemanticEditPolicy"
+          elementIcon="true">
+        <diagramRunTimeClass
+            href="../../../plugin/org.eclipse.gmf.runtime.notation/model/notation.genmodel#//notation/Node"/>
+        <viewmap
+            xsi:type="gmfgen:ModeledViewmap">
+          <figureModel
+              href="phantoms.gmfgraph#TopChildName"/>
+        </viewmap>
+        <modelFacet
+            xsi:type="gmfgen:FeatureLabelModelFacet"
+            parser="//@labelParsers/@implementations.0">
+          <metaFeatures
+              href="phantoms.genmodel#//phantoms/TopChild/name"/>
+        </modelFacet>
+      </labels>
+    </topLevelNodes>
+    <links
+        visualID="4001"
+        editPartClassName="TopParentChildrenEditPart"
+        itemSemanticEditPolicyClassName="TopParentChildrenItemSemanticEditPolicy"
+        createCommandClassName="TopParentChildrenCreateCommand"
+        reorientCommandClassName="TopParentChildrenReorientCommand">
+      <diagramRunTimeClass
+          href="../../../plugin/org.eclipse.gmf.runtime.notation/model/notation.genmodel#//notation/Edge"/>
+      <elementType
+          xsi:type="gmfgen:SpecializationType"/>
+      <viewmap
+          xsi:type="gmfgen:ModeledViewmap">
+        <figureModel
+            href="phantoms.gmfgraph#TopParentChildren"/>
+      </viewmap>
+      <modelFacet
+          xsi:type="gmfgen:FeatureLinkModelFacet">
+        <metaFeature
+            href="phantoms.genmodel#//phantoms/TopParent/children"/>
+      </modelFacet>
+    </links>
+    <links
+        visualID="4002"
+        editPartClassName="MediumParentChildrenEditPart"
+        itemSemanticEditPolicyClassName="MediumParentChildrenItemSemanticEditPolicy"
+        createCommandClassName="MediumParentChildrenCreateCommand"
+        reorientCommandClassName="MediumParentChildrenReorientCommand">
+      <diagramRunTimeClass
+          href="../../../plugin/org.eclipse.gmf.runtime.notation/model/notation.genmodel#//notation/Edge"/>
+      <elementType
+          xsi:type="gmfgen:SpecializationType"/>
+      <viewmap
+          xsi:type="gmfgen:ModeledViewmap">
+        <figureModel
+            href="phantoms.gmfgraph#MediumParentChildren"/>
+      </viewmap>
+      <modelFacet
+          xsi:type="gmfgen:FeatureLinkModelFacet">
+        <metaFeature
+            href="phantoms.genmodel#//phantoms/MediumParent/children"/>
+      </modelFacet>
+    </links>
+    <palette>
+      <groups
+          title="Nodes"
+          collapse="true">
+        <entries
+            xsi:type="gmfgen:ToolEntry"
+            title="TopParent"
+            description="Create new TopParent"
+            genNodes="//@diagram/@topLevelNodes.1"/>
+        <entries
+            xsi:type="gmfgen:ToolEntry"
+            title="Medium"
+            description="Create new Medium"
+            genNodes="//@diagram/@topLevelNodes.0"/>
+        <entries
+            xsi:type="gmfgen:ToolEntry"
+            title="MediumParent"
+            description="Create new MediumParent"
+            genNodes="//@diagram/@childNodes.0"/>
+      </groups>
+      <groups
+          title="Phantoms"
+          collapse="true">
+        <entries
+            xsi:type="gmfgen:ToolEntry"
+            title="TopChild"
+            description="Create new TopChild"
+            genNodes="//@diagram/@topLevelNodes.2"/>
+        <entries
+            xsi:type="gmfgen:ToolEntry"
+            title="MediumChild"
+            description="Create new MediumChild"
+            genNodes="//@diagram/@childNodes.1"/>
+      </groups>
+      <groups
+          title="Links"
+          collapse="true">
+        <entries
+            xsi:type="gmfgen:ToolEntry"
+            title="MediumParentChildren"
+            description="Create new MediumParentChildren"
+            genLinks="//@diagram/@links.1"/>
+        <entries
+            xsi:type="gmfgen:ToolEntry"
+            title="TopParentChildren"
+            description="Create new TopParentChildren"
+            genLinks="//@diagram/@links.0"/>
+      </groups>
+    </palette>
+    <preferencePages
+        xsi:type="gmfgen:GenStandardPreferencePage"
+        iD="org.eclipse.gmf.tooling.examples.phantoms.diagram.general"
+        name="Phantoms Diagram">
+      <children
+          xsi:type="gmfgen:GenStandardPreferencePage"
+          iD="org.eclipse.gmf.tooling.examples.phantoms.diagram.appearance"
+          name="Appearance"
+          kind="Appearance"/>
+      <children
+          xsi:type="gmfgen:GenStandardPreferencePage"
+          iD="org.eclipse.gmf.tooling.examples.phantoms.diagram.connections"
+          name="Connections"
+          kind="Connections"/>
+      <children
+          xsi:type="gmfgen:GenStandardPreferencePage"
+          iD="org.eclipse.gmf.tooling.examples.phantoms.diagram.printing"
+          name="Printing"
+          kind="Printing"/>
+      <children
+          xsi:type="gmfgen:GenStandardPreferencePage"
+          iD="org.eclipse.gmf.tooling.examples.phantoms.diagram.rulersAndGrid"
+          name="Rulers And Grid"
+          kind="RulersAndGrid"/>
+    </preferencePages>
+  </diagram>
+  <plugin>
+    <requiredPlugins>org.eclipse.gmf.tooling.runtime</requiredPlugins>
+  </plugin>
+  <editor/>
+  <navigator>
+    <childReferences
+        child="//@diagram"/>
+    <childReferences
+        parent="//@diagram/@topLevelNodes.0"
+        child="//@diagram/@childNodes.0"/>
+    <childReferences
+        parent="//@diagram/@topLevelNodes.0"
+        child="//@diagram/@childNodes.1"/>
+    <childReferences
+        parent="//@diagram"
+        child="//@diagram/@topLevelNodes.0"/>
+    <childReferences
+        parent="//@diagram"
+        child="//@diagram/@topLevelNodes.1"/>
+    <childReferences
+        parent="//@diagram"
+        child="//@diagram/@topLevelNodes.2"/>
+    <childReferences
+        parent="//@diagram"
+        child="//@diagram/@links.0"
+        groupName="links"
+        groupIcon="icons/linksNavigatorGroup.gif"/>
+    <childReferences
+        parent="//@diagram/@links.0"
+        child="//@diagram/@topLevelNodes.2"
+        referenceType="out_target"
+        groupName="target"
+        groupIcon="icons/linkTargetNavigatorGroup.gif"/>
+    <childReferences
+        parent="//@diagram/@topLevelNodes.2"
+        child="//@diagram/@links.0"
+        referenceType="in_source"
+        groupName="incoming links"
+        groupIcon="icons/incomingLinksNavigatorGroup.gif"/>
+    <childReferences
+        parent="//@diagram/@links.0"
+        child="//@diagram/@topLevelNodes.1"
+        referenceType="in_source"
+        groupName="source"
+        groupIcon="icons/linkSourceNavigatorGroup.gif"/>
+    <childReferences
+        parent="//@diagram/@topLevelNodes.1"
+        child="//@diagram/@links.0"
+        referenceType="out_target"
+        groupName="outgoing links"
+        groupIcon="icons/outgoingLinksNavigatorGroup.gif"/>
+    <childReferences
+        parent="//@diagram"
+        child="//@diagram/@links.1"
+        groupName="links"
+        groupIcon="icons/linksNavigatorGroup.gif"/>
+    <childReferences
+        parent="//@diagram/@links.1"
+        child="//@diagram/@childNodes.1"
+        referenceType="out_target"
+        groupName="target"
+        groupIcon="icons/linkTargetNavigatorGroup.gif"/>
+    <childReferences
+        parent="//@diagram/@childNodes.1"
+        child="//@diagram/@links.1"
+        referenceType="in_source"
+        groupName="incoming links"
+        groupIcon="icons/incomingLinksNavigatorGroup.gif"/>
+    <childReferences
+        parent="//@diagram/@links.1"
+        child="//@diagram/@childNodes.0"
+        referenceType="in_source"
+        groupName="source"
+        groupIcon="icons/linkSourceNavigatorGroup.gif"/>
+    <childReferences
+        parent="//@diagram/@childNodes.0"
+        child="//@diagram/@links.1"
+        referenceType="out_target"
+        groupName="outgoing links"
+        groupIcon="icons/outgoingLinksNavigatorGroup.gif"/>
+  </navigator>
+  <diagramUpdater/>
+  <propertySheet>
+    <tabs
+        xsi:type="gmfgen:GenStandardPropertyTab"
+        iD="appearance"/>
+    <tabs
+        xsi:type="gmfgen:GenStandardPropertyTab"
+        iD="diagram"/>
+    <tabs
+        xsi:type="gmfgen:GenCustomPropertyTab"
+        iD="domain"
+        label="Core">
+      <filter
+          xsi:type="gmfgen:TypeTabFilter">
+        <types>org.eclipse.gmf.runtime.notation.View</types>
+        <types>org.eclipse.gef.EditPart</types>
+        <generatedTypes>abstractNavigatorItem</generatedTypes>
+      </filter>
+    </tabs>
+  </propertySheet>
+  <domainGenModel
+      href="phantoms.genmodel#/"/>
+  <labelParsers
+      extensibleViaService="true">
+    <implementations
+        xsi:type="gmfgen:PredefinedParser"
+        uses="//@diagram/@childNodes.1/@labels.0/@modelFacet //@diagram/@topLevelNodes.2/@labels.0/@modelFacet"/>
+  </labelParsers>
+  <contextMenus
+      context="//@diagram">
+    <items
+        xsi:type="gmfgen:LoadResourceAction"/>
+  </contextMenus>
+</gmfgen:GenEditorGenerator>
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.gmfgraph b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.gmfgraph
new file mode 100755
index 0000000..9e3fea9
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.gmfgraph
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gmfgraph:Canvas xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gmfgraph="http://www.eclipse.org/gmf/2006/GraphicalDefinition" name="phantoms">
+  <figures name="Default">
+    <figures xsi:type="gmfgraph:PolylineDecoration" name="TopParentChildrenTargetDecoration"/>
+    <figures xsi:type="gmfgraph:PolylineDecoration" name="MediumParentChildrenTargetDecoration"/>
+    <descriptors name="TopParentFigure">
+      <actualFigure xsi:type="gmfgraph:Ellipse"/>
+    </descriptors>
+    <descriptors name="TopParentChildrenFigure">
+      <actualFigure xsi:type="gmfgraph:PolylineConnection" name="TopParentChildrenFigure" targetDecoration="//@figures.0/@figures.0"/>
+    </descriptors>
+    <descriptors name="MediumFigure">
+      <actualFigure xsi:type="gmfgraph:RoundedRectangle">
+        <layout xsi:type="gmfgraph:XYLayout"/>
+      </actualFigure>
+    </descriptors>
+    <descriptors name="TopChildFigure">
+      <actualFigure xsi:type="gmfgraph:Rectangle" name="TopChildFigure">
+        <layout xsi:type="gmfgraph:FlowLayout"/>
+        <children xsi:type="gmfgraph:Label" name="TopChildNameFigure" text="&lt;...>"/>
+      </actualFigure>
+      <accessors figure="//@figures.0/@descriptors.3/@actualFigure/@children.0"/>
+    </descriptors>
+    <descriptors name="MediumParentFigure">
+      <actualFigure xsi:type="gmfgraph:Ellipse"/>
+    </descriptors>
+    <descriptors name="MediumParentChildrenFigure">
+      <actualFigure xsi:type="gmfgraph:PolylineConnection" name="MediumParentChildrenFigure" targetDecoration="//@figures.0/@figures.1"/>
+    </descriptors>
+    <descriptors name="MediumChildFigure">
+      <actualFigure xsi:type="gmfgraph:Rectangle" name="MediumChildFigure">
+        <layout xsi:type="gmfgraph:FlowLayout"/>
+        <children xsi:type="gmfgraph:Label" name="MediumChildNameFigure" text="&lt;...>"/>
+      </actualFigure>
+      <accessors figure="//@figures.0/@descriptors.6/@actualFigure/@children.0"/>
+    </descriptors>
+  </figures>
+  <nodes name="TopParent" figure="TopParentFigure"/>
+  <nodes name="Medium" figure="MediumFigure"/>
+  <nodes name="TopChild" figure="TopChildFigure"/>
+  <nodes name="MediumParent" figure="MediumParentFigure"/>
+  <nodes name="MediumChild" figure="MediumChildFigure"/>
+  <connections name="TopParentChildren" figure="TopParentChildrenFigure"/>
+  <connections name="MediumParentChildren" figure="MediumParentChildrenFigure"/>
+  <labels name="TopChildName" figure="TopChildFigure" accessor="//@figures.0/@descriptors.3/@accessors.0"/>
+  <labels name="MediumChildName" figure="MediumChildFigure" accessor="//@figures.0/@descriptors.6/@accessors.0"/>
+</gmfgraph:Canvas>
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.gmfmap b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.gmfmap
new file mode 100755
index 0000000..23b049e
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.gmfmap
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gmfmap:Mapping
+    xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:gmfmap="http://www.eclipse.org/gmf/2008/mappings"
+    xmlns:gmftool="http://www.eclipse.org/gmf/2005/ToolDefinition">
+  <nodes>
+    <containmentFeature
+        href="phantoms.ecore#//Root/children"/>
+    <ownedChild>
+      <domainMetaElement
+          href="phantoms.ecore#//Medium"/>
+      <tool
+          xsi:type="gmftool:CreationTool"
+          href="phantoms.gmftool#//@palette/@tools.0/@tools.1"/>
+      <diagramNode
+          href="phantoms.gmfgraph#Medium"/>
+      <children>
+        <containmentFeature
+            href="phantoms.ecore#//Medium/children"/>
+        <ownedChild>
+          <domainMetaElement
+              href="phantoms.ecore#//MediumParent"/>
+          <tool
+              xsi:type="gmftool:CreationTool"
+              href="phantoms.gmftool#//@palette/@tools.0/@tools.2"/>
+          <diagramNode
+              href="phantoms.gmfgraph#MediumParent"/>
+        </ownedChild>
+      </children>
+      <children>
+        <ownedChild>
+          <domainMetaElement
+              href="phantoms.ecore#//MediumChild"/>
+          <labelMappings
+              xsi:type="gmfmap:FeatureLabelMapping">
+            <diagramLabel
+                href="phantoms.gmfgraph#MediumChildName"/>
+            <features
+                href="phantoms.ecore#//MediumChild/name"/>
+          </labelMappings>
+          <tool
+              xsi:type="gmftool:CreationTool"
+              href="phantoms.gmftool#//@palette/@tools.1/@tools.1"/>
+          <diagramNode
+              href="phantoms.gmfgraph#MediumChild"/>
+        </ownedChild>
+      </children>
+    </ownedChild>
+  </nodes>
+  <nodes>
+    <containmentFeature
+        href="phantoms.ecore#//Root/children"/>
+    <ownedChild>
+      <domainMetaElement
+          href="phantoms.ecore#//TopParent"/>
+      <tool
+          xsi:type="gmftool:CreationTool"
+          href="phantoms.gmftool#//@palette/@tools.0/@tools.0"/>
+      <diagramNode
+          href="phantoms.gmfgraph#TopParent"/>
+    </ownedChild>
+  </nodes>
+  <nodes>
+    <ownedChild>
+      <domainMetaElement
+          href="phantoms.ecore#//TopChild"/>
+      <labelMappings
+          xsi:type="gmfmap:FeatureLabelMapping">
+        <diagramLabel
+            href="phantoms.gmfgraph#TopChildName"/>
+        <features
+            href="phantoms.ecore#//TopChild/name"/>
+      </labelMappings>
+      <tool
+          xsi:type="gmftool:CreationTool"
+          href="phantoms.gmftool#//@palette/@tools.1/@tools.0"/>
+      <diagramNode
+          href="phantoms.gmfgraph#TopChild"/>
+    </ownedChild>
+  </nodes>
+  <links>
+    <tool
+        xsi:type="gmftool:CreationTool"
+        href="phantoms.gmftool#//@palette/@tools.2/@tools.1"/>
+    <diagramLink
+        href="phantoms.gmfgraph#TopParentChildren"/>
+    <linkMetaFeature
+        xsi:type="ecore:EReference"
+        href="phantoms.ecore#//TopParent/children"/>
+  </links>
+  <links>
+    <tool
+        xsi:type="gmftool:CreationTool"
+        href="phantoms.gmftool#//@palette/@tools.2/@tools.0"/>
+    <diagramLink
+        href="phantoms.gmfgraph#MediumParentChildren"/>
+    <linkMetaFeature
+        xsi:type="ecore:EReference"
+        href="phantoms.ecore#//MediumParent/children"/>
+  </links>
+  <diagram>
+    <diagramCanvas
+        href="phantoms.gmfgraph#phantoms"/>
+    <domainModel
+        href="phantoms.ecore#/"/>
+    <domainMetaElement
+        href="phantoms.ecore#//Root"/>
+    <palette
+        href="phantoms.gmftool#//@palette"/>
+  </diagram>
+</gmfmap:Mapping>
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.gmftool b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.gmftool
new file mode 100755
index 0000000..c530a04
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.gmftool
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gmftool:ToolRegistry
+    xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:gmftool="http://www.eclipse.org/gmf/2005/ToolDefinition">
+  <palette
+      title="phantomsPalette">
+    <tools
+        xsi:type="gmftool:ToolGroup"
+        title="Nodes"
+        collapsible="true">
+      <tools
+          xsi:type="gmftool:CreationTool"
+          title="TopParent"
+          description="Create new TopParent">
+        <smallIcon
+            xsi:type="gmftool:DefaultImage"/>
+        <largeIcon
+            xsi:type="gmftool:DefaultImage"/>
+      </tools>
+      <tools
+          xsi:type="gmftool:CreationTool"
+          title="Medium"
+          description="Create new Medium">
+        <smallIcon
+            xsi:type="gmftool:DefaultImage"/>
+        <largeIcon
+            xsi:type="gmftool:DefaultImage"/>
+      </tools>
+      <tools
+          xsi:type="gmftool:CreationTool"
+          title="MediumParent"
+          description="Create new MediumParent">
+        <smallIcon
+            xsi:type="gmftool:DefaultImage"/>
+        <largeIcon
+            xsi:type="gmftool:DefaultImage"/>
+      </tools>
+    </tools>
+    <tools
+        xsi:type="gmftool:ToolGroup"
+        title="Phantoms"
+        collapsible="true">
+      <tools
+          xsi:type="gmftool:CreationTool"
+          title="TopChild"
+          description="Create new TopChild">
+        <smallIcon
+            xsi:type="gmftool:DefaultImage"/>
+        <largeIcon
+            xsi:type="gmftool:DefaultImage"/>
+      </tools>
+      <tools
+          xsi:type="gmftool:CreationTool"
+          title="MediumChild"
+          description="Create new MediumChild">
+        <smallIcon
+            xsi:type="gmftool:DefaultImage"/>
+        <largeIcon
+            xsi:type="gmftool:DefaultImage"/>
+      </tools>
+    </tools>
+    <tools
+        xsi:type="gmftool:ToolGroup"
+        title="Links"
+        collapsible="true">
+      <tools
+          xsi:type="gmftool:CreationTool"
+          title="MediumParentChildren"
+          description="Create new MediumParentChildren">
+        <smallIcon
+            xsi:type="gmftool:DefaultImage"/>
+        <largeIcon
+            xsi:type="gmftool:DefaultImage"/>
+      </tools>
+      <tools
+          xsi:type="gmftool:CreationTool"
+          title="TopParentChildren"
+          description="Create new TopParentChildren">
+        <smallIcon
+            xsi:type="gmftool:DefaultImage"/>
+        <largeIcon
+            xsi:type="gmftool:DefaultImage"/>
+      </tools>
+    </tools>
+  </palette>
+</gmftool:ToolRegistry>
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.trace b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.trace
new file mode 100755
index 0000000..d0178c6
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.trace
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<trace:TraceModel
+    xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI"
+    xmlns:trace="http://www.eclipse.org/gmf/2006/Trace">
+  <nodeTraces
+      visualID="2001"
+      queryText="(let _eClass_:ecore::EClass = modelFacet.metaClass.ecoreClass in _eClass_.ePackage.nsURI = 'http://org.eclipse.gmf.tooling.examples.phantoms' and _eClass_.name = 'Medium') and (let _containmentMF_:ecore::EStructuralFeature = modelFacet.containmentMetaFeature.ecoreFeature in (let _eClass_:ecore::EClass = _containmentMF_.eContainingClass in _eClass_.ePackage.nsURI = 'http://org.eclipse.gmf.tooling.examples.phantoms' and _eClass_.name = 'Root') and _containmentMF_.name = 'children')"/>
+  <nodeTraces
+      visualID="2002"
+      queryText="(let _eClass_:ecore::EClass = modelFacet.metaClass.ecoreClass in _eClass_.ePackage.nsURI = 'http://org.eclipse.gmf.tooling.examples.phantoms' and _eClass_.name = 'TopParent') and (let _containmentMF_:ecore::EStructuralFeature = modelFacet.containmentMetaFeature.ecoreFeature in (let _eClass_:ecore::EClass = _containmentMF_.eContainingClass in _eClass_.ePackage.nsURI = 'http://org.eclipse.gmf.tooling.examples.phantoms' and _eClass_.name = 'Root') and _containmentMF_.name = 'children')"/>
+  <nodeTraces
+      visualID="2003"
+      queryText="let _eClass_:ecore::EClass = modelFacet.metaClass.ecoreClass in _eClass_.ePackage.nsURI = 'http://org.eclipse.gmf.tooling.examples.phantoms' and _eClass_.name = 'TopChild'">
+    <nodeLabelTraces
+        visualID="5002"
+        queryText="true"/>
+  </nodeTraces>
+  <childNodeTraces
+      visualID="3001"
+      queryText="(let _eClass_:ecore::EClass = modelFacet.metaClass.ecoreClass in _eClass_.ePackage.nsURI = 'http://org.eclipse.gmf.tooling.examples.phantoms' and _eClass_.name = 'MediumParent') and (let _containmentMF_:ecore::EStructuralFeature = modelFacet.containmentMetaFeature.ecoreFeature in (let _eClass_:ecore::EClass = _containmentMF_.eContainingClass in _eClass_.ePackage.nsURI = 'http://org.eclipse.gmf.tooling.examples.phantoms' and _eClass_.name = 'Medium') and _containmentMF_.name = 'children')"/>
+  <childNodeTraces
+      visualID="3002"
+      queryText="let _eClass_:ecore::EClass = modelFacet.metaClass.ecoreClass in _eClass_.ePackage.nsURI = 'http://org.eclipse.gmf.tooling.examples.phantoms' and _eClass_.name = 'MediumChild'">
+    <nodeLabelTraces
+        visualID="5001"
+        queryText="true"/>
+  </childNodeTraces>
+  <linkTraces
+      visualID="4001"
+      queryText="modelFacet.oclIsKindOf(gmfgen::FeatureLinkModelFacet) and (let _feature_:ecore::EStructuralFeature = modelFacet.oclAsType(gmfgen::FeatureLinkModelFacet).metaFeature.ecoreFeature in (let _eClass_:ecore::EClass = _feature_.eContainingClass in _eClass_.ePackage.nsURI = 'http://org.eclipse.gmf.tooling.examples.phantoms' and _eClass_.name = 'TopParent') and _feature_.name = 'children')"/>
+  <linkTraces
+      visualID="4002"
+      queryText="modelFacet.oclIsKindOf(gmfgen::FeatureLinkModelFacet) and (let _feature_:ecore::EStructuralFeature = modelFacet.oclAsType(gmfgen::FeatureLinkModelFacet).metaFeature.ecoreFeature in (let _eClass_:ecore::EClass = _feature_.eContainingClass in _eClass_.ePackage.nsURI = 'http://org.eclipse.gmf.tooling.examples.phantoms' and _eClass_.name = 'MediumParent') and _feature_.name = 'children')"/>
+</trace:TraceModel>
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/plugin.properties b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/plugin.properties
new file mode 100755
index 0000000..7127140
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/plugin.properties
@@ -0,0 +1,2 @@
+pluginName = Phantoms Test Sample Model
+providerName = Eclipse Modeling Project
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/plugin.xml b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/plugin.xml
new file mode 100755
index 0000000..75cbfec
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/plugin.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <!-- @generated phantoms -->
+      <package
+            uri="http://org.eclipse.gmf.tooling.examples.phantoms"
+            class="org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage"
+            genModel="model/phantoms.genmodel"/>
+   </extension>
+
+</plugin>
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/pom.xml b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/pom.xml
new file mode 100755
index 0000000..fdece57
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/pom.xml
@@ -0,0 +1,23 @@
+<!--
+ * Copyright (c) 2013 Montages 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
+ *  
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.eclipse.gmf-tooling</groupId>
+  <artifactId>org.eclipse.gmf.tooling.examples.phantoms</artifactId>
+  <version>1.0.0-SNAPSHOT</version>
+  <packaging>eclipse-plugin</packaging>
+  
+  <parent>
+  	<groupId>org.eclipse.gmf-tooling</groupId>
+	<artifactId>phantoms-example</artifactId>
+	<version>1.0.0-SNAPSHOT</version>
+	<relativePath>../</relativePath>
+  </parent>
+  
+</project>
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/Medium.java b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/Medium.java
new file mode 100755
index 0000000..9ab5f43
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/Medium.java
@@ -0,0 +1,40 @@
+/**
+ */
+package org.eclipse.gmf.tooling.examples.phantoms;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Medium</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.gmf.tooling.examples.phantoms.Medium#getChildren <em>Children</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage#getMedium()
+ * @model
+ * @generated
+ */
+public interface Medium extends RootChild {
+	/**
+	 * Returns the value of the '<em><b>Children</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.gmf.tooling.examples.phantoms.MediumParent}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Children</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Children</em>' containment reference list.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage#getMedium_Children()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<MediumParent> getChildren();
+
+} // Medium
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/MediumChild.java b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/MediumChild.java
new file mode 100755
index 0000000..42433c5
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/MediumChild.java
@@ -0,0 +1,51 @@
+/**
+ */
+package org.eclipse.gmf.tooling.examples.phantoms;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Medium Child</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.gmf.tooling.examples.phantoms.MediumChild#getName <em>Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage#getMediumChild()
+ * @model
+ * @generated
+ */
+public interface MediumChild extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Name</b></em>' attribute.
+	 * The default value is <code>"MediumChild"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Name</em>' attribute.
+	 * @see #setName(String)
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage#getMediumChild_Name()
+	 * @model default="MediumChild"
+	 * @generated
+	 */
+	String getName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.gmf.tooling.examples.phantoms.MediumChild#getName <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Name</em>' attribute.
+	 * @see #getName()
+	 * @generated
+	 */
+	void setName(String value);
+
+} // MediumChild
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/MediumParent.java b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/MediumParent.java
new file mode 100755
index 0000000..73a81cf
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/MediumParent.java
@@ -0,0 +1,42 @@
+/**
+ */
+package org.eclipse.gmf.tooling.examples.phantoms;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Medium Parent</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.gmf.tooling.examples.phantoms.MediumParent#getChildren <em>Children</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage#getMediumParent()
+ * @model
+ * @generated
+ */
+public interface MediumParent extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Children</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.gmf.tooling.examples.phantoms.MediumChild}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Children</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Children</em>' containment reference list.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage#getMediumParent_Children()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<MediumChild> getChildren();
+
+} // MediumParent
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/PhantomsFactory.java b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/PhantomsFactory.java
new file mode 100755
index 0000000..d593fa3
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/PhantomsFactory.java
@@ -0,0 +1,96 @@
+/**
+ */
+package org.eclipse.gmf.tooling.examples.phantoms;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage
+ * @generated
+ */
+public interface PhantomsFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	PhantomsFactory eINSTANCE = org.eclipse.gmf.tooling.examples.phantoms.impl.PhantomsFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Root</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Root</em>'.
+	 * @generated
+	 */
+	Root createRoot();
+
+	/**
+	 * Returns a new object of class '<em>Root Child</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Root Child</em>'.
+	 * @generated
+	 */
+	RootChild createRootChild();
+
+	/**
+	 * Returns a new object of class '<em>Top Parent</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Top Parent</em>'.
+	 * @generated
+	 */
+	TopParent createTopParent();
+
+	/**
+	 * Returns a new object of class '<em>Medium</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Medium</em>'.
+	 * @generated
+	 */
+	Medium createMedium();
+
+	/**
+	 * Returns a new object of class '<em>Top Child</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Top Child</em>'.
+	 * @generated
+	 */
+	TopChild createTopChild();
+
+	/**
+	 * Returns a new object of class '<em>Medium Parent</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Medium Parent</em>'.
+	 * @generated
+	 */
+	MediumParent createMediumParent();
+
+	/**
+	 * Returns a new object of class '<em>Medium Child</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Medium Child</em>'.
+	 * @generated
+	 */
+	MediumChild createMediumChild();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	PhantomsPackage getPhantomsPackage();
+
+} //PhantomsFactory
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/PhantomsPackage.java b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/PhantomsPackage.java
new file mode 100755
index 0000000..ddbda0d
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/PhantomsPackage.java
@@ -0,0 +1,589 @@
+/**
+ */
+package org.eclipse.gmf.tooling.examples.phantoms;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each operation of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.gmf.tooling.examples.phantoms.PhantomsFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface PhantomsPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "phantoms";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http://org.eclipse.gmf.tooling.examples.phantoms";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "phantoms";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	PhantomsPackage eINSTANCE = org.eclipse.gmf.tooling.examples.phantoms.impl.PhantomsPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.gmf.tooling.examples.phantoms.impl.RootImpl <em>Root</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.RootImpl
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.PhantomsPackageImpl#getRoot()
+	 * @generated
+	 */
+	int ROOT = 0;
+
+	/**
+	 * The feature id for the '<em><b>Children</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ROOT__CHILDREN = 0;
+
+	/**
+	 * The number of structural features of the '<em>Root</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ROOT_FEATURE_COUNT = 1;
+
+	/**
+	 * The number of operations of the '<em>Root</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ROOT_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.gmf.tooling.examples.phantoms.impl.RootChildImpl <em>Root Child</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.RootChildImpl
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.PhantomsPackageImpl#getRootChild()
+	 * @generated
+	 */
+	int ROOT_CHILD = 1;
+
+	/**
+	 * The number of structural features of the '<em>Root Child</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ROOT_CHILD_FEATURE_COUNT = 0;
+
+	/**
+	 * The number of operations of the '<em>Root Child</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ROOT_CHILD_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.gmf.tooling.examples.phantoms.impl.TopParentImpl <em>Top Parent</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.TopParentImpl
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.PhantomsPackageImpl#getTopParent()
+	 * @generated
+	 */
+	int TOP_PARENT = 2;
+
+	/**
+	 * The feature id for the '<em><b>Children</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TOP_PARENT__CHILDREN = ROOT_CHILD_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Top Parent</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TOP_PARENT_FEATURE_COUNT = ROOT_CHILD_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of operations of the '<em>Top Parent</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TOP_PARENT_OPERATION_COUNT = ROOT_CHILD_OPERATION_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.gmf.tooling.examples.phantoms.impl.MediumImpl <em>Medium</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.MediumImpl
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.PhantomsPackageImpl#getMedium()
+	 * @generated
+	 */
+	int MEDIUM = 3;
+
+	/**
+	 * The feature id for the '<em><b>Children</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MEDIUM__CHILDREN = ROOT_CHILD_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Medium</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MEDIUM_FEATURE_COUNT = ROOT_CHILD_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of operations of the '<em>Medium</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MEDIUM_OPERATION_COUNT = ROOT_CHILD_OPERATION_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.gmf.tooling.examples.phantoms.impl.TopChildImpl <em>Top Child</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.TopChildImpl
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.PhantomsPackageImpl#getTopChild()
+	 * @generated
+	 */
+	int TOP_CHILD = 4;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TOP_CHILD__NAME = 0;
+
+	/**
+	 * The number of structural features of the '<em>Top Child</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TOP_CHILD_FEATURE_COUNT = 1;
+
+	/**
+	 * The number of operations of the '<em>Top Child</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TOP_CHILD_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.gmf.tooling.examples.phantoms.impl.MediumParentImpl <em>Medium Parent</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.MediumParentImpl
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.PhantomsPackageImpl#getMediumParent()
+	 * @generated
+	 */
+	int MEDIUM_PARENT = 5;
+
+	/**
+	 * The feature id for the '<em><b>Children</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MEDIUM_PARENT__CHILDREN = 0;
+
+	/**
+	 * The number of structural features of the '<em>Medium Parent</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MEDIUM_PARENT_FEATURE_COUNT = 1;
+
+	/**
+	 * The number of operations of the '<em>Medium Parent</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MEDIUM_PARENT_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.gmf.tooling.examples.phantoms.impl.MediumChildImpl <em>Medium Child</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.MediumChildImpl
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.PhantomsPackageImpl#getMediumChild()
+	 * @generated
+	 */
+	int MEDIUM_CHILD = 6;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MEDIUM_CHILD__NAME = 0;
+
+	/**
+	 * The number of structural features of the '<em>Medium Child</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MEDIUM_CHILD_FEATURE_COUNT = 1;
+
+	/**
+	 * The number of operations of the '<em>Medium Child</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MEDIUM_CHILD_OPERATION_COUNT = 0;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.gmf.tooling.examples.phantoms.Root <em>Root</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Root</em>'.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.Root
+	 * @generated
+	 */
+	EClass getRoot();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.gmf.tooling.examples.phantoms.Root#getChildren <em>Children</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Children</em>'.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.Root#getChildren()
+	 * @see #getRoot()
+	 * @generated
+	 */
+	EReference getRoot_Children();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.gmf.tooling.examples.phantoms.RootChild <em>Root Child</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Root Child</em>'.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.RootChild
+	 * @generated
+	 */
+	EClass getRootChild();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.gmf.tooling.examples.phantoms.TopParent <em>Top Parent</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Top Parent</em>'.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.TopParent
+	 * @generated
+	 */
+	EClass getTopParent();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.gmf.tooling.examples.phantoms.TopParent#getChildren <em>Children</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Children</em>'.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.TopParent#getChildren()
+	 * @see #getTopParent()
+	 * @generated
+	 */
+	EReference getTopParent_Children();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.gmf.tooling.examples.phantoms.Medium <em>Medium</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Medium</em>'.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.Medium
+	 * @generated
+	 */
+	EClass getMedium();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.gmf.tooling.examples.phantoms.Medium#getChildren <em>Children</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Children</em>'.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.Medium#getChildren()
+	 * @see #getMedium()
+	 * @generated
+	 */
+	EReference getMedium_Children();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.gmf.tooling.examples.phantoms.TopChild <em>Top Child</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Top Child</em>'.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.TopChild
+	 * @generated
+	 */
+	EClass getTopChild();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.gmf.tooling.examples.phantoms.TopChild#getName <em>Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Name</em>'.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.TopChild#getName()
+	 * @see #getTopChild()
+	 * @generated
+	 */
+	EAttribute getTopChild_Name();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.gmf.tooling.examples.phantoms.MediumParent <em>Medium Parent</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Medium Parent</em>'.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.MediumParent
+	 * @generated
+	 */
+	EClass getMediumParent();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.gmf.tooling.examples.phantoms.MediumParent#getChildren <em>Children</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Children</em>'.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.MediumParent#getChildren()
+	 * @see #getMediumParent()
+	 * @generated
+	 */
+	EReference getMediumParent_Children();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.gmf.tooling.examples.phantoms.MediumChild <em>Medium Child</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Medium Child</em>'.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.MediumChild
+	 * @generated
+	 */
+	EClass getMediumChild();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.gmf.tooling.examples.phantoms.MediumChild#getName <em>Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Name</em>'.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.MediumChild#getName()
+	 * @see #getMediumChild()
+	 * @generated
+	 */
+	EAttribute getMediumChild_Name();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	PhantomsFactory getPhantomsFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each operation of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.gmf.tooling.examples.phantoms.impl.RootImpl <em>Root</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.RootImpl
+		 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.PhantomsPackageImpl#getRoot()
+		 * @generated
+		 */
+		EClass ROOT = eINSTANCE.getRoot();
+
+		/**
+		 * The meta object literal for the '<em><b>Children</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ROOT__CHILDREN = eINSTANCE.getRoot_Children();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.gmf.tooling.examples.phantoms.impl.RootChildImpl <em>Root Child</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.RootChildImpl
+		 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.PhantomsPackageImpl#getRootChild()
+		 * @generated
+		 */
+		EClass ROOT_CHILD = eINSTANCE.getRootChild();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.gmf.tooling.examples.phantoms.impl.TopParentImpl <em>Top Parent</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.TopParentImpl
+		 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.PhantomsPackageImpl#getTopParent()
+		 * @generated
+		 */
+		EClass TOP_PARENT = eINSTANCE.getTopParent();
+
+		/**
+		 * The meta object literal for the '<em><b>Children</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference TOP_PARENT__CHILDREN = eINSTANCE.getTopParent_Children();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.gmf.tooling.examples.phantoms.impl.MediumImpl <em>Medium</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.MediumImpl
+		 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.PhantomsPackageImpl#getMedium()
+		 * @generated
+		 */
+		EClass MEDIUM = eINSTANCE.getMedium();
+
+		/**
+		 * The meta object literal for the '<em><b>Children</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference MEDIUM__CHILDREN = eINSTANCE.getMedium_Children();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.gmf.tooling.examples.phantoms.impl.TopChildImpl <em>Top Child</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.TopChildImpl
+		 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.PhantomsPackageImpl#getTopChild()
+		 * @generated
+		 */
+		EClass TOP_CHILD = eINSTANCE.getTopChild();
+
+		/**
+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TOP_CHILD__NAME = eINSTANCE.getTopChild_Name();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.gmf.tooling.examples.phantoms.impl.MediumParentImpl <em>Medium Parent</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.MediumParentImpl
+		 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.PhantomsPackageImpl#getMediumParent()
+		 * @generated
+		 */
+		EClass MEDIUM_PARENT = eINSTANCE.getMediumParent();
+
+		/**
+		 * The meta object literal for the '<em><b>Children</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference MEDIUM_PARENT__CHILDREN = eINSTANCE.getMediumParent_Children();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.gmf.tooling.examples.phantoms.impl.MediumChildImpl <em>Medium Child</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.MediumChildImpl
+		 * @see org.eclipse.gmf.tooling.examples.phantoms.impl.PhantomsPackageImpl#getMediumChild()
+		 * @generated
+		 */
+		EClass MEDIUM_CHILD = eINSTANCE.getMediumChild();
+
+		/**
+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute MEDIUM_CHILD__NAME = eINSTANCE.getMediumChild_Name();
+
+	}
+
+} //PhantomsPackage
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/Root.java b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/Root.java
new file mode 100755
index 0000000..c14562e
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/Root.java
@@ -0,0 +1,42 @@
+/**
+ */
+package org.eclipse.gmf.tooling.examples.phantoms;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Root</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.gmf.tooling.examples.phantoms.Root#getChildren <em>Children</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage#getRoot()
+ * @model
+ * @generated
+ */
+public interface Root extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Children</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.gmf.tooling.examples.phantoms.RootChild}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Children</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Children</em>' containment reference list.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage#getRoot_Children()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<RootChild> getChildren();
+
+} // Root
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/RootChild.java b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/RootChild.java
new file mode 100755
index 0000000..e853887
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/RootChild.java
@@ -0,0 +1,18 @@
+/**
+ */
+package org.eclipse.gmf.tooling.examples.phantoms;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Root Child</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage#getRootChild()
+ * @model
+ * @generated
+ */
+public interface RootChild extends EObject {
+} // RootChild
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/TopChild.java b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/TopChild.java
new file mode 100755
index 0000000..dce34ca
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/TopChild.java
@@ -0,0 +1,51 @@
+/**
+ */
+package org.eclipse.gmf.tooling.examples.phantoms;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Top Child</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.gmf.tooling.examples.phantoms.TopChild#getName <em>Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage#getTopChild()
+ * @model
+ * @generated
+ */
+public interface TopChild extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Name</b></em>' attribute.
+	 * The default value is <code>"TopChild"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Name</em>' attribute.
+	 * @see #setName(String)
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage#getTopChild_Name()
+	 * @model default="TopChild"
+	 * @generated
+	 */
+	String getName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.gmf.tooling.examples.phantoms.TopChild#getName <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Name</em>' attribute.
+	 * @see #getName()
+	 * @generated
+	 */
+	void setName(String value);
+
+} // TopChild
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/TopParent.java b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/TopParent.java
new file mode 100755
index 0000000..568f900
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/TopParent.java
@@ -0,0 +1,40 @@
+/**
+ */
+package org.eclipse.gmf.tooling.examples.phantoms;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Top Parent</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.gmf.tooling.examples.phantoms.TopParent#getChildren <em>Children</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage#getTopParent()
+ * @model
+ * @generated
+ */
+public interface TopParent extends RootChild {
+	/**
+	 * Returns the value of the '<em><b>Children</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.gmf.tooling.examples.phantoms.TopChild}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Children</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Children</em>' containment reference list.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage#getTopParent_Children()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<TopChild> getChildren();
+
+} // TopParent
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/MediumChildImpl.java b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/MediumChildImpl.java
new file mode 100755
index 0000000..22c0acb
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/MediumChildImpl.java
@@ -0,0 +1,163 @@
+/**
+ */
+package org.eclipse.gmf.tooling.examples.phantoms.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.gmf.tooling.examples.phantoms.MediumChild;
+import org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Medium Child</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.gmf.tooling.examples.phantoms.impl.MediumChildImpl#getName <em>Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class MediumChildImpl extends MinimalEObjectImpl.Container implements MediumChild {
+	/**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NAME_EDEFAULT = "MediumChild";
+
+	/**
+	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String name = NAME_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MediumChildImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PhantomsPackage.Literals.MEDIUM_CHILD;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setName(String newName) {
+		String oldName = name;
+		name = newName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PhantomsPackage.MEDIUM_CHILD__NAME, oldName, name));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case PhantomsPackage.MEDIUM_CHILD__NAME:
+				return getName();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case PhantomsPackage.MEDIUM_CHILD__NAME:
+				setName((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case PhantomsPackage.MEDIUM_CHILD__NAME:
+				setName(NAME_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case PhantomsPackage.MEDIUM_CHILD__NAME:
+				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (name: ");
+		result.append(name);
+		result.append(')');
+		return result.toString();
+	}
+
+} //MediumChildImpl
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/MediumImpl.java b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/MediumImpl.java
new file mode 100755
index 0000000..dac09f8
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/MediumImpl.java
@@ -0,0 +1,150 @@
+/**
+ */
+package org.eclipse.gmf.tooling.examples.phantoms.impl;
+
+import java.util.Collection;
+
+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.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.gmf.tooling.examples.phantoms.Medium;
+import org.eclipse.gmf.tooling.examples.phantoms.MediumParent;
+import org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Medium</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.gmf.tooling.examples.phantoms.impl.MediumImpl#getChildren <em>Children</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class MediumImpl extends RootChildImpl implements Medium {
+	/**
+	 * The cached value of the '{@link #getChildren() <em>Children</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getChildren()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<MediumParent> children;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MediumImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PhantomsPackage.Literals.MEDIUM;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<MediumParent> getChildren() {
+		if (children == null) {
+			children = new EObjectContainmentEList<MediumParent>(MediumParent.class, this, PhantomsPackage.MEDIUM__CHILDREN);
+		}
+		return children;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case PhantomsPackage.MEDIUM__CHILDREN:
+				return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case PhantomsPackage.MEDIUM__CHILDREN:
+				return getChildren();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case PhantomsPackage.MEDIUM__CHILDREN:
+				getChildren().clear();
+				getChildren().addAll((Collection<? extends MediumParent>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case PhantomsPackage.MEDIUM__CHILDREN:
+				getChildren().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case PhantomsPackage.MEDIUM__CHILDREN:
+				return children != null && !children.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //MediumImpl
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/MediumParentImpl.java b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/MediumParentImpl.java
new file mode 100755
index 0000000..fef5c7d
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/MediumParentImpl.java
@@ -0,0 +1,152 @@
+/**
+ */
+package org.eclipse.gmf.tooling.examples.phantoms.impl;
+
+import java.util.Collection;
+
+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.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.gmf.tooling.examples.phantoms.MediumChild;
+import org.eclipse.gmf.tooling.examples.phantoms.MediumParent;
+import org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Medium Parent</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.gmf.tooling.examples.phantoms.impl.MediumParentImpl#getChildren <em>Children</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class MediumParentImpl extends MinimalEObjectImpl.Container implements MediumParent {
+	/**
+	 * The cached value of the '{@link #getChildren() <em>Children</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getChildren()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<MediumChild> children;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MediumParentImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PhantomsPackage.Literals.MEDIUM_PARENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<MediumChild> getChildren() {
+		if (children == null) {
+			children = new EObjectContainmentEList<MediumChild>(MediumChild.class, this, PhantomsPackage.MEDIUM_PARENT__CHILDREN);
+		}
+		return children;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case PhantomsPackage.MEDIUM_PARENT__CHILDREN:
+				return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case PhantomsPackage.MEDIUM_PARENT__CHILDREN:
+				return getChildren();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case PhantomsPackage.MEDIUM_PARENT__CHILDREN:
+				getChildren().clear();
+				getChildren().addAll((Collection<? extends MediumChild>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case PhantomsPackage.MEDIUM_PARENT__CHILDREN:
+				getChildren().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case PhantomsPackage.MEDIUM_PARENT__CHILDREN:
+				return children != null && !children.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //MediumParentImpl
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/PhantomsFactoryImpl.java b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/PhantomsFactoryImpl.java
new file mode 100755
index 0000000..195f6a9
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/PhantomsFactoryImpl.java
@@ -0,0 +1,161 @@
+/**
+ */
+package org.eclipse.gmf.tooling.examples.phantoms.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.gmf.tooling.examples.phantoms.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PhantomsFactoryImpl extends EFactoryImpl implements PhantomsFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static PhantomsFactory init() {
+		try {
+			PhantomsFactory thePhantomsFactory = (PhantomsFactory)EPackage.Registry.INSTANCE.getEFactory(PhantomsPackage.eNS_URI);
+			if (thePhantomsFactory != null) {
+				return thePhantomsFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new PhantomsFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PhantomsFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case PhantomsPackage.ROOT: return createRoot();
+			case PhantomsPackage.ROOT_CHILD: return createRootChild();
+			case PhantomsPackage.TOP_PARENT: return createTopParent();
+			case PhantomsPackage.MEDIUM: return createMedium();
+			case PhantomsPackage.TOP_CHILD: return createTopChild();
+			case PhantomsPackage.MEDIUM_PARENT: return createMediumParent();
+			case PhantomsPackage.MEDIUM_CHILD: return createMediumChild();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Root createRoot() {
+		RootImpl root = new RootImpl();
+		return root;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RootChild createRootChild() {
+		RootChildImpl rootChild = new RootChildImpl();
+		return rootChild;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TopParent createTopParent() {
+		TopParentImpl topParent = new TopParentImpl();
+		return topParent;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Medium createMedium() {
+		MediumImpl medium = new MediumImpl();
+		return medium;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TopChild createTopChild() {
+		TopChildImpl topChild = new TopChildImpl();
+		return topChild;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MediumParent createMediumParent() {
+		MediumParentImpl mediumParent = new MediumParentImpl();
+		return mediumParent;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MediumChild createMediumChild() {
+		MediumChildImpl mediumChild = new MediumChildImpl();
+		return mediumChild;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PhantomsPackage getPhantomsPackage() {
+		return (PhantomsPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static PhantomsPackage getPackage() {
+		return PhantomsPackage.eINSTANCE;
+	}
+
+} //PhantomsFactoryImpl
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/PhantomsPackageImpl.java b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/PhantomsPackageImpl.java
new file mode 100755
index 0000000..e96bf79
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/PhantomsPackageImpl.java
@@ -0,0 +1,361 @@
+/**
+ */
+package org.eclipse.gmf.tooling.examples.phantoms.impl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.gmf.tooling.examples.phantoms.Medium;
+import org.eclipse.gmf.tooling.examples.phantoms.MediumChild;
+import org.eclipse.gmf.tooling.examples.phantoms.MediumParent;
+import org.eclipse.gmf.tooling.examples.phantoms.PhantomsFactory;
+import org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage;
+import org.eclipse.gmf.tooling.examples.phantoms.Root;
+import org.eclipse.gmf.tooling.examples.phantoms.RootChild;
+import org.eclipse.gmf.tooling.examples.phantoms.TopChild;
+import org.eclipse.gmf.tooling.examples.phantoms.TopParent;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PhantomsPackageImpl extends EPackageImpl implements PhantomsPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass rootEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass rootChildEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass topParentEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass mediumEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass topChildEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass mediumParentEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass mediumChildEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private PhantomsPackageImpl() {
+		super(eNS_URI, PhantomsFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link PhantomsPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static PhantomsPackage init() {
+		if (isInited) return (PhantomsPackage)EPackage.Registry.INSTANCE.getEPackage(PhantomsPackage.eNS_URI);
+
+		// Obtain or create and register package
+		PhantomsPackageImpl thePhantomsPackage = (PhantomsPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof PhantomsPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new PhantomsPackageImpl());
+
+		isInited = true;
+
+		// Create package meta-data objects
+		thePhantomsPackage.createPackageContents();
+
+		// Initialize created meta-data
+		thePhantomsPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		thePhantomsPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(PhantomsPackage.eNS_URI, thePhantomsPackage);
+		return thePhantomsPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getRoot() {
+		return rootEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getRoot_Children() {
+		return (EReference)rootEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getRootChild() {
+		return rootChildEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTopParent() {
+		return topParentEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getTopParent_Children() {
+		return (EReference)topParentEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getMedium() {
+		return mediumEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getMedium_Children() {
+		return (EReference)mediumEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTopChild() {
+		return topChildEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTopChild_Name() {
+		return (EAttribute)topChildEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getMediumParent() {
+		return mediumParentEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getMediumParent_Children() {
+		return (EReference)mediumParentEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getMediumChild() {
+		return mediumChildEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getMediumChild_Name() {
+		return (EAttribute)mediumChildEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PhantomsFactory getPhantomsFactory() {
+		return (PhantomsFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		rootEClass = createEClass(ROOT);
+		createEReference(rootEClass, ROOT__CHILDREN);
+
+		rootChildEClass = createEClass(ROOT_CHILD);
+
+		topParentEClass = createEClass(TOP_PARENT);
+		createEReference(topParentEClass, TOP_PARENT__CHILDREN);
+
+		mediumEClass = createEClass(MEDIUM);
+		createEReference(mediumEClass, MEDIUM__CHILDREN);
+
+		topChildEClass = createEClass(TOP_CHILD);
+		createEAttribute(topChildEClass, TOP_CHILD__NAME);
+
+		mediumParentEClass = createEClass(MEDIUM_PARENT);
+		createEReference(mediumParentEClass, MEDIUM_PARENT__CHILDREN);
+
+		mediumChildEClass = createEClass(MEDIUM_CHILD);
+		createEAttribute(mediumChildEClass, MEDIUM_CHILD__NAME);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		topParentEClass.getESuperTypes().add(this.getRootChild());
+		mediumEClass.getESuperTypes().add(this.getRootChild());
+
+		// Initialize classes, features, and operations; add parameters
+		initEClass(rootEClass, Root.class, "Root", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getRoot_Children(), this.getRootChild(), null, "children", null, 0, -1, Root.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(rootChildEClass, RootChild.class, "RootChild", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(topParentEClass, TopParent.class, "TopParent", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getTopParent_Children(), this.getTopChild(), null, "children", null, 0, -1, TopParent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(mediumEClass, Medium.class, "Medium", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getMedium_Children(), this.getMediumParent(), null, "children", null, 0, -1, Medium.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(topChildEClass, TopChild.class, "TopChild", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getTopChild_Name(), ecorePackage.getEString(), "name", "TopChild", 0, 1, TopChild.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(mediumParentEClass, MediumParent.class, "MediumParent", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getMediumParent_Children(), this.getMediumChild(), null, "children", null, 0, -1, MediumParent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(mediumChildEClass, MediumChild.class, "MediumChild", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getMediumChild_Name(), ecorePackage.getEString(), "name", "MediumChild", 0, 1, MediumChild.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //PhantomsPackageImpl
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/RootChildImpl.java b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/RootChildImpl.java
new file mode 100755
index 0000000..a270fcc
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/RootChildImpl.java
@@ -0,0 +1,41 @@
+/**
+ */
+package org.eclipse.gmf.tooling.examples.phantoms.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage;
+import org.eclipse.gmf.tooling.examples.phantoms.RootChild;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Root Child</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class RootChildImpl extends MinimalEObjectImpl.Container implements RootChild {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RootChildImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PhantomsPackage.Literals.ROOT_CHILD;
+	}
+
+} //RootChildImpl
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/RootImpl.java b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/RootImpl.java
new file mode 100755
index 0000000..9072f07
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/RootImpl.java
@@ -0,0 +1,152 @@
+/**
+ */
+package org.eclipse.gmf.tooling.examples.phantoms.impl;
+
+import java.util.Collection;
+
+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.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage;
+import org.eclipse.gmf.tooling.examples.phantoms.Root;
+import org.eclipse.gmf.tooling.examples.phantoms.RootChild;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Root</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.gmf.tooling.examples.phantoms.impl.RootImpl#getChildren <em>Children</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class RootImpl extends MinimalEObjectImpl.Container implements Root {
+	/**
+	 * The cached value of the '{@link #getChildren() <em>Children</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getChildren()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<RootChild> children;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RootImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PhantomsPackage.Literals.ROOT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<RootChild> getChildren() {
+		if (children == null) {
+			children = new EObjectContainmentEList<RootChild>(RootChild.class, this, PhantomsPackage.ROOT__CHILDREN);
+		}
+		return children;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case PhantomsPackage.ROOT__CHILDREN:
+				return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case PhantomsPackage.ROOT__CHILDREN:
+				return getChildren();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case PhantomsPackage.ROOT__CHILDREN:
+				getChildren().clear();
+				getChildren().addAll((Collection<? extends RootChild>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case PhantomsPackage.ROOT__CHILDREN:
+				getChildren().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case PhantomsPackage.ROOT__CHILDREN:
+				return children != null && !children.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //RootImpl
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/TopChildImpl.java b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/TopChildImpl.java
new file mode 100755
index 0000000..6ea87fc
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/TopChildImpl.java
@@ -0,0 +1,163 @@
+/**
+ */
+package org.eclipse.gmf.tooling.examples.phantoms.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage;
+import org.eclipse.gmf.tooling.examples.phantoms.TopChild;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Top Child</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.gmf.tooling.examples.phantoms.impl.TopChildImpl#getName <em>Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class TopChildImpl extends MinimalEObjectImpl.Container implements TopChild {
+	/**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NAME_EDEFAULT = "TopChild";
+
+	/**
+	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String name = NAME_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TopChildImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PhantomsPackage.Literals.TOP_CHILD;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setName(String newName) {
+		String oldName = name;
+		name = newName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PhantomsPackage.TOP_CHILD__NAME, oldName, name));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case PhantomsPackage.TOP_CHILD__NAME:
+				return getName();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case PhantomsPackage.TOP_CHILD__NAME:
+				setName((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case PhantomsPackage.TOP_CHILD__NAME:
+				setName(NAME_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case PhantomsPackage.TOP_CHILD__NAME:
+				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (name: ");
+		result.append(name);
+		result.append(')');
+		return result.toString();
+	}
+
+} //TopChildImpl
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/TopParentImpl.java b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/TopParentImpl.java
new file mode 100755
index 0000000..7ee0cd9
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/impl/TopParentImpl.java
@@ -0,0 +1,150 @@
+/**
+ */
+package org.eclipse.gmf.tooling.examples.phantoms.impl;
+
+import java.util.Collection;
+
+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.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage;
+import org.eclipse.gmf.tooling.examples.phantoms.TopChild;
+import org.eclipse.gmf.tooling.examples.phantoms.TopParent;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Top Parent</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.gmf.tooling.examples.phantoms.impl.TopParentImpl#getChildren <em>Children</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class TopParentImpl extends RootChildImpl implements TopParent {
+	/**
+	 * The cached value of the '{@link #getChildren() <em>Children</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getChildren()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<TopChild> children;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TopParentImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PhantomsPackage.Literals.TOP_PARENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<TopChild> getChildren() {
+		if (children == null) {
+			children = new EObjectContainmentEList<TopChild>(TopChild.class, this, PhantomsPackage.TOP_PARENT__CHILDREN);
+		}
+		return children;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case PhantomsPackage.TOP_PARENT__CHILDREN:
+				return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case PhantomsPackage.TOP_PARENT__CHILDREN:
+				return getChildren();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case PhantomsPackage.TOP_PARENT__CHILDREN:
+				getChildren().clear();
+				getChildren().addAll((Collection<? extends TopChild>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case PhantomsPackage.TOP_PARENT__CHILDREN:
+				getChildren().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case PhantomsPackage.TOP_PARENT__CHILDREN:
+				return children != null && !children.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //TopParentImpl
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/util/PhantomsAdapterFactory.java b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/util/PhantomsAdapterFactory.java
new file mode 100755
index 0000000..7cc4afd
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/util/PhantomsAdapterFactory.java
@@ -0,0 +1,228 @@
+/**
+ */
+package org.eclipse.gmf.tooling.examples.phantoms.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.gmf.tooling.examples.phantoms.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage
+ * @generated
+ */
+public class PhantomsAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static PhantomsPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PhantomsAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = PhantomsPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PhantomsSwitch<Adapter> modelSwitch =
+		new PhantomsSwitch<Adapter>() {
+			@Override
+			public Adapter caseRoot(Root object) {
+				return createRootAdapter();
+			}
+			@Override
+			public Adapter caseRootChild(RootChild object) {
+				return createRootChildAdapter();
+			}
+			@Override
+			public Adapter caseTopParent(TopParent object) {
+				return createTopParentAdapter();
+			}
+			@Override
+			public Adapter caseMedium(Medium object) {
+				return createMediumAdapter();
+			}
+			@Override
+			public Adapter caseTopChild(TopChild object) {
+				return createTopChildAdapter();
+			}
+			@Override
+			public Adapter caseMediumParent(MediumParent object) {
+				return createMediumParentAdapter();
+			}
+			@Override
+			public Adapter caseMediumChild(MediumChild object) {
+				return createMediumChildAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.gmf.tooling.examples.phantoms.Root <em>Root</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.Root
+	 * @generated
+	 */
+	public Adapter createRootAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.gmf.tooling.examples.phantoms.RootChild <em>Root Child</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.RootChild
+	 * @generated
+	 */
+	public Adapter createRootChildAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.gmf.tooling.examples.phantoms.TopParent <em>Top Parent</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.TopParent
+	 * @generated
+	 */
+	public Adapter createTopParentAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.gmf.tooling.examples.phantoms.Medium <em>Medium</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.Medium
+	 * @generated
+	 */
+	public Adapter createMediumAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.gmf.tooling.examples.phantoms.TopChild <em>Top Child</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.TopChild
+	 * @generated
+	 */
+	public Adapter createTopChildAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.gmf.tooling.examples.phantoms.MediumParent <em>Medium Parent</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.MediumParent
+	 * @generated
+	 */
+	public Adapter createMediumParentAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.gmf.tooling.examples.phantoms.MediumChild <em>Medium Child</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.gmf.tooling.examples.phantoms.MediumChild
+	 * @generated
+	 */
+	public Adapter createMediumChildAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //PhantomsAdapterFactory
diff --git a/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/util/PhantomsSwitch.java b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/util/PhantomsSwitch.java
new file mode 100755
index 0000000..c7ba9a2
--- /dev/null
+++ b/test-examples/phantoms/org.eclipse.gmf.tooling.examples.phantoms/src/org/eclipse/gmf/tooling/examples/phantoms/util/PhantomsSwitch.java
@@ -0,0 +1,238 @@
+/**
+ */
+package org.eclipse.gmf.tooling.examples.phantoms.util;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+import org.eclipse.gmf.tooling.examples.phantoms.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.gmf.tooling.examples.phantoms.PhantomsPackage
+ * @generated
+ */
+public class PhantomsSwitch<T> extends Switch<T> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static PhantomsPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PhantomsSwitch() {
+		if (modelPackage == null) {
+			modelPackage = PhantomsPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Checks whether this is a switch for the given package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @parameter ePackage the package in question.
+	 * @return whether this is a switch for the given package.
+	 * @generated
+	 */
+	@Override
+	protected boolean isSwitchFor(EPackage ePackage) {
+		return ePackage == modelPackage;
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	@Override
+	protected T doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case PhantomsPackage.ROOT: {
+				Root root = (Root)theEObject;
+				T result = caseRoot(root);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PhantomsPackage.ROOT_CHILD: {
+				RootChild rootChild = (RootChild)theEObject;
+				T result = caseRootChild(rootChild);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PhantomsPackage.TOP_PARENT: {
+				TopParent topParent = (TopParent)theEObject;
+				T result = caseTopParent(topParent);
+				if (result == null) result = caseRootChild(topParent);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PhantomsPackage.MEDIUM: {
+				Medium medium = (Medium)theEObject;
+				T result = caseMedium(medium);
+				if (result == null) result = caseRootChild(medium);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PhantomsPackage.TOP_CHILD: {
+				TopChild topChild = (TopChild)theEObject;
+				T result = caseTopChild(topChild);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PhantomsPackage.MEDIUM_PARENT: {
+				MediumParent mediumParent = (MediumParent)theEObject;
+				T result = caseMediumParent(mediumParent);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PhantomsPackage.MEDIUM_CHILD: {
+				MediumChild mediumChild = (MediumChild)theEObject;
+				T result = caseMediumChild(mediumChild);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Root</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Root</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseRoot(Root object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Root Child</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Root Child</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseRootChild(RootChild object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Top Parent</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Top Parent</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseTopParent(TopParent object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Medium</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Medium</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseMedium(Medium object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Top Child</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Top Child</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseTopChild(TopChild object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Medium Parent</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Medium Parent</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseMediumParent(MediumParent object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Medium Child</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Medium Child</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseMediumChild(MediumChild object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	@Override
+	public T defaultCase(EObject object) {
+		return null;
+	}
+
+} //PhantomsSwitch
diff --git a/test-examples/phantoms/pom.xml b/test-examples/phantoms/pom.xml
new file mode 100755
index 0000000..7650485
--- /dev/null
+++ b/test-examples/phantoms/pom.xml
@@ -0,0 +1,27 @@
+<!--
+ * Copyright (c) 2013 Montages 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
+ *  
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.eclipse.gmf-tooling</groupId>
+  <artifactId>phantoms-example</artifactId>
+  <packaging>pom</packaging>
+  <version>1.0.0-SNAPSHOT</version>
+
+  
+  <parent>
+  	<groupId>org.eclipse.gmf-tooling</groupId>
+	<artifactId>test-examples</artifactId>
+	<version>1.0.0-SNAPSHOT</version>
+	<relativePath>../</relativePath>
+  </parent>
+  
+  <modules>
+		<module>org.eclipse.gmf.tooling.examples.phantoms</module>
+  </modules>
+</project>
diff --git a/test-examples/pom.xml b/test-examples/pom.xml
index b69dfd5..aa1711a 100644
--- a/test-examples/pom.xml
+++ b/test-examples/pom.xml
@@ -32,6 +32,7 @@
 		<module>svg</module>
 		<module>link_labels</module>
 		<module>linklf</module>
+		<module>phantoms</module>
 	</modules>
 	
 </project>
diff --git a/tests/org.eclipse.gmf.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.gmf.tests/META-INF/MANIFEST.MF
index fd70344..164c171 100644
--- a/tests/org.eclipse.gmf.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.gmf.tests/META-INF/MANIFEST.MF
@@ -44,7 +44,8 @@
  org.eclipse.gmf.runtime.lite.svg,
  org.eclipse.gmf.tooling.examples.border.custom,
  org.eclipse.gmf.tooling.examples.labels,
- org.eclipse.gmf.tooling.examples.linklabels
+ org.eclipse.gmf.tooling.examples.linklabels,
+ org.eclipse.gmf.tooling.examples.phantoms
 Bundle-Activator: org.eclipse.gmf.tests.Plugin
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.gmf.tests;x-friends:="org.eclipse.gmf.tests.lite,org.eclipse.gmf.tooling.tests.xtend",
diff --git a/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/TestSamplesSuite.java b/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/TestSamplesSuite.java
index 4594355..77c5ab1 100644
--- a/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/TestSamplesSuite.java
+++ b/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/TestSamplesSuite.java
@@ -7,25 +7,30 @@
 import org.eclipse.gmf.tests.samples.CompartmentsSampleTest;
 import org.eclipse.gmf.tests.samples.LabelsSampleTest;
 import org.eclipse.gmf.tests.samples.LinkLabelsTest;
+import org.eclipse.gmf.tests.samples.LinklfSampleTest;
 import org.eclipse.gmf.tests.samples.LinksSampleTest;
+import org.eclipse.gmf.tests.samples.PhantomSampleTest;
 import org.eclipse.gmf.tests.samples.PinsSampleTest;
 import org.eclipse.gmf.tests.samples.SVGSampleTest;
 import org.eclipse.gmf.tests.samples.ShourtcutSampleTest;
 
+
 public class TestSamplesSuite {
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite("Tests for org.eclipse.gmf samples");
-		suite.addTestSuite(PinsSampleTest.class);
-		suite.addTestSuite(CompartmentsSampleTest.class);
-		suite.addTestSuite(LinksSampleTest.class);
-		suite.addTestSuite(SVGSampleTest.class);
-		suite.addTestSuite(ShourtcutSampleTest.class);
-		suite.addTestSuite(AffixedSampleTest.class);
-		suite.addTestSuite(LabelsSampleTest.class);
-		//suite.addTestSuite(BorderSampleTest.class);
-		suite.addTestSuite(LinkLabelsTest.class);
-		return suite;
-	}
+  public static Test suite() {
+    TestSuite suite = new TestSuite("Tests for org.eclipse.gmf samples");
+    suite.addTestSuite(PinsSampleTest.class);
+    suite.addTestSuite(CompartmentsSampleTest.class);
+    suite.addTestSuite(LinksSampleTest.class);
+    suite.addTestSuite(SVGSampleTest.class);
+    suite.addTestSuite(ShourtcutSampleTest.class);
+    suite.addTestSuite(AffixedSampleTest.class);
+    suite.addTestSuite(LabelsSampleTest.class);
+    // suite.addTestSuite(BorderSampleTest.class);
+    suite.addTestSuite(LinkLabelsTest.class);
+    suite.addTestSuite(LinklfSampleTest.class);
+    suite.addTestSuite(PhantomSampleTest.class);
+    return suite;
+  }
 
 }
diff --git a/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/samples/PhantomSampleTest.java b/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/samples/PhantomSampleTest.java
new file mode 100644
index 0000000..808fc09
--- /dev/null
+++ b/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/samples/PhantomSampleTest.java
@@ -0,0 +1,22 @@
+package org.eclipse.gmf.tests.samples;
+
+import org.eclipse.gmf.tests.setup.RuntimeBasedGeneratorConfiguration;
+
+public class PhantomSampleTest extends BaseSampleTest {
+
+	public static final String GIT_GMFGEN_PATH = "platform:/plugin/org.eclipse.gmf.tooling.examples.phantoms/model/phantoms.gmfgen"; 
+
+	public PhantomSampleTest(String name) {
+		this(name, new RuntimeBasedGeneratorConfiguration());
+	}
+	
+	public PhantomSampleTest(String name, RuntimeBasedGeneratorConfiguration genCongif) {
+		super(name, genCongif);
+	}
+	
+	@Override
+	protected String getRelativeGMFGENPath() {
+		return GIT_GMFGEN_PATH;
+	}
+	
+}
diff --git a/tests/org.eclipse.gmf.tooling.tests.xtend/META-INF/MANIFEST.MF b/tests/org.eclipse.gmf.tooling.tests.xtend/META-INF/MANIFEST.MF
index 99e93c1..7f61b8c 100644
--- a/tests/org.eclipse.gmf.tooling.tests.xtend/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.gmf.tooling.tests.xtend/META-INF/MANIFEST.MF
@@ -50,7 +50,8 @@
  org.eclipse.gmf.runtime.lite.svg,
  org.eclipse.gmf.tooling.examples.border.custom,
  org.eclipse.gmf.tooling.examples.labels,
- org.eclipse.gmf.tooling.examples.linklabels
+ org.eclipse.gmf.tooling.examples.linklabels,
+ org.eclipse.gmf.tooling.examples.phantoms
 Bundle-Activator: org.eclipse.gmf.tooling.tests.xtend.XtendsTestPluginActivator
 Bundle-ActivationPolicy: lazy
 Export-Package: edithelpers,
diff --git a/tests/org.eclipse.gmf.tooling.tests.xtend/src/org/eclipse/gmf/tooling/tests/xtend/TestSamplesSuiteXtend.java b/tests/org.eclipse.gmf.tooling.tests.xtend/src/org/eclipse/gmf/tooling/tests/xtend/TestSamplesSuiteXtend.java
index b01c700..65e5dc7 100644
--- a/tests/org.eclipse.gmf.tooling.tests.xtend/src/org/eclipse/gmf/tooling/tests/xtend/TestSamplesSuiteXtend.java
+++ b/tests/org.eclipse.gmf.tooling.tests.xtend/src/org/eclipse/gmf/tooling/tests/xtend/TestSamplesSuiteXtend.java
@@ -7,24 +7,28 @@
 import org.eclipse.gmf.tooling.tests.xtend.samples.CompartmentsSampleTestXtend;
 import org.eclipse.gmf.tooling.tests.xtend.samples.LabelsSampleTestXtend;
 import org.eclipse.gmf.tooling.tests.xtend.samples.LinkLabelsTestXtend;
+import org.eclipse.gmf.tooling.tests.xtend.samples.LinklfSampleTestXtend;
 import org.eclipse.gmf.tooling.tests.xtend.samples.LinksSampleTestXtend;
+import org.eclipse.gmf.tooling.tests.xtend.samples.PhantomSampleTestXtend;
 import org.eclipse.gmf.tooling.tests.xtend.samples.PinsSampleTestXtend;
 import org.eclipse.gmf.tooling.tests.xtend.samples.SVGSampleTestXtend;
 import org.eclipse.gmf.tooling.tests.xtend.samples.ShourtcutSampleTestXtend;
 
 
 public class TestSamplesSuiteXtend {
-	public static Test suite() {
-		TestSuite suite = new TestSuite("Tests for org.eclipse.tooling.gmf samples");
-		suite.addTestSuite(PinsSampleTestXtend.class);
-		suite.addTestSuite(CompartmentsSampleTestXtend.class);
-		suite.addTestSuite(LinksSampleTestXtend.class);
-		suite.addTestSuite(LinksSampleTestXtend.class);
-		suite.addTestSuite(SVGSampleTestXtend.class);
-		suite.addTestSuite(ShourtcutSampleTestXtend.class);
-		suite.addTestSuite(AffixedSampleTestXtend.class);
-		suite.addTestSuite(LabelsSampleTestXtend.class);
-		suite.addTestSuite(LinkLabelsTestXtend.class);
-		return suite;
-	}
+  public static Test suite() {
+    TestSuite suite = new TestSuite("Tests for org.eclipse.tooling.gmf samples");
+    suite.addTestSuite(PinsSampleTestXtend.class);
+    suite.addTestSuite(CompartmentsSampleTestXtend.class);
+    suite.addTestSuite(LinksSampleTestXtend.class);
+    suite.addTestSuite(LinksSampleTestXtend.class);
+    suite.addTestSuite(SVGSampleTestXtend.class);
+    suite.addTestSuite(ShourtcutSampleTestXtend.class);
+    suite.addTestSuite(AffixedSampleTestXtend.class);
+    suite.addTestSuite(LabelsSampleTestXtend.class);
+    suite.addTestSuite(LinkLabelsTestXtend.class);
+    suite.addTestSuite(PhantomSampleTestXtend.class);
+    suite.addTestSuite(LinklfSampleTestXtend.class);
+    return suite;
+  }
 }
diff --git a/tests/org.eclipse.gmf.tooling.tests.xtend/src/org/eclipse/gmf/tooling/tests/xtend/samples/PhantomSampleTestXtend.java b/tests/org.eclipse.gmf.tooling.tests.xtend/src/org/eclipse/gmf/tooling/tests/xtend/samples/PhantomSampleTestXtend.java
new file mode 100644
index 0000000..0fd5b6f
--- /dev/null
+++ b/tests/org.eclipse.gmf.tooling.tests.xtend/src/org/eclipse/gmf/tooling/tests/xtend/samples/PhantomSampleTestXtend.java
@@ -0,0 +1,12 @@
+package org.eclipse.gmf.tooling.tests.xtend.samples;
+
+import org.eclipse.gmf.tests.samples.PhantomSampleTest;
+import org.eclipse.gmf.tooling.tests.xtend.setup.RuntimeBasedGeneratorConfigurationXtend;
+
+public class PhantomSampleTestXtend extends PhantomSampleTest {
+
+	public PhantomSampleTestXtend(String name) {
+		super(name, new RuntimeBasedGeneratorConfigurationXtend());
+	}
+	
+}
