diff --git a/org.eclipse.emf.cdo.threedee.ui/src/org/eclipse/emf/cdo/threedee/ui/ThreeDeeView.java b/org.eclipse.emf.cdo.threedee.ui/src/org/eclipse/emf/cdo/threedee/ui/ThreeDeeView.java
index 5d8c843..4b0ec1d 100644
--- a/org.eclipse.emf.cdo.threedee.ui/src/org/eclipse/emf/cdo/threedee/ui/ThreeDeeView.java
+++ b/org.eclipse.emf.cdo.threedee.ui/src/org/eclipse/emf/cdo/threedee/ui/ThreeDeeView.java
@@ -94,7 +94,7 @@
         Element rootElement = session.getRootElement();
         if (rootElement != null/* && !elementGroups.containsKey(rootElement) */)
         {
-          world.addElement(rootElement);
+          world.addElement(null, rootElement);
         }
       }
 
@@ -171,14 +171,14 @@
     @Override
     protected void onAdded(IContainer<Object> container, Object object)
     {
-      addElement(object);
+      addElement(container, object);
       world.layout();
     }
 
     @Override
     protected void onRemoved(IContainer<Object> container, Object object)
     {
-      removeElement(object);
+      removeElement(container, object);
       world.layout();
     }
 
@@ -195,22 +195,22 @@
       }
     }
 
-    private void addElement(Object object)
+    private void addElement(Object container, Object object)
     {
       if (object instanceof Element)
       {
         Element element = (Element)object;
-        world.addElement(element);
+        world.addElement(container, element);
         for (Element child : element.getElements())
         {
-          addElement(child);
+          addElement(element, child);
         }
       }
 
       EventUtil.addListener(object, this);
     }
 
-    private void removeElement(Object object)
+    private void removeElement(Object container, Object object)
     {
       EventUtil.removeListener(object, this);
       if (object instanceof Element)
@@ -218,12 +218,12 @@
         Element element = (Element)object;
         for (Element child : element.getElements())
         {
-          removeElement(child);
+          removeElement(element, child);
         }
 
         try
         {
-          world.removeElement(element);
+          world.removeElement(container, element);
         }
         catch (Exception ex)
         {
diff --git a/org.eclipse.emf.cdo.threedee.ui/src/org/eclipse/emf/cdo/threedee/ui/ThreeDeeWorld.java b/org.eclipse.emf.cdo.threedee.ui/src/org/eclipse/emf/cdo/threedee/ui/ThreeDeeWorld.java
index 49ce1a8..52c8cf2 100644
--- a/org.eclipse.emf.cdo.threedee.ui/src/org/eclipse/emf/cdo/threedee/ui/ThreeDeeWorld.java
+++ b/org.eclipse.emf.cdo.threedee.ui/src/org/eclipse/emf/cdo/threedee/ui/ThreeDeeWorld.java
@@ -79,6 +79,7 @@
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
@@ -101,6 +102,55 @@
 
   private Set<ElementDescriptor> disabledDescriptors = Collections.emptySet();
 
+  class ElementGroups
+  {
+    private Map<Pair<Element, Element>, ElementGroup> map = new HashMap<Pair<Element, Element>, ElementGroup>();
+
+    public Collection<ElementGroup> values()
+    {
+      return map.values();
+    }
+
+    public boolean containsKey(Element element)
+    {
+      Pair<Element, Element> pair = makePair(element);
+      return map.containsKey(pair);
+    }
+
+    public ElementGroup get(Object object)
+    {
+      if (object instanceof Element)
+      {
+        Element element = (Element)object;
+        Pair<Element, Element> pair = makePair(element);
+        return map.get(pair);
+      }
+
+      return null;
+    }
+
+    public ElementGroup put(Element element, ElementGroup elementGroup)
+    {
+      Pair<Element, Element> pair = makePair(element);
+      return map.put(pair, elementGroup);
+    }
+
+    public ElementGroup remove(Element element)
+    {
+      Pair<Element, Element> pair = makePair(element);
+      return map.remove(pair);
+    }
+
+    private Pair<Element, Element> makePair(Element element)
+    {
+      Element container = element.getContainer();
+      Pair<Element, Element> pair = new Pair<Element, Element>(element, container);
+      return pair;
+    }
+  }
+
+  // private ElementGroups elementGroups = new ElementGroups();
+
   private Map<Element, ElementGroup> elementGroups = new HashMap<Element, ElementGroup>();
 
   private Map<Element, Map<Element, ReferenceShape>> referenceShapes = new HashMap<Element, Map<Element, ReferenceShape>>();
@@ -323,28 +373,35 @@
     return root;
   }
 
-  public void addElement(Element element)
+  public void addElement(Object container, Element element)
   {
-    if (!elementGroups.containsKey(element))
+    if (elementGroups.containsKey(element))
+    {
+      removeElement(element.getContainer(), element);
+    }
     {
       ElementGroup group = createElementGroup(element);
-      ElementProvider provider = element.getProvider();
 
-      Map<Integer, Boolean> references = element.getReferences();
-      createChildren(group, provider, references);
+      // TODO check if the createChildren call is still needed
+      // ElementProvider provider = element.getProvider();
+      // Map<Integer, Boolean> references = element.getReferences();
+      // createChildren(group, provider, references);
 
       ElementGroup containerGroup = getContainerElementGroup(element);
       addNode(group, containerGroup);
     }
   }
 
-  public void removeElement(Element element)
+  public void removeElement(Object container, Element element)
   {
-    ElementGroup containmentGroup = elementGroups.remove(element);
-    if (containmentGroup != null)
+    if (container == element.getContainer())
     {
-      containmentGroup.detach();
-      clearReferenceNodes(element);
+      ElementGroup containmentGroup = elementGroups.remove(element);
+      if (containmentGroup != null)
+      {
+        containmentGroup.detach();
+        clearReferenceNodes(element);
+      }
     }
   }
 
