diff --git "a/org.eclipse.emf.cdo.threedee.ui/ThreeDee Frontend \0503D\051.launch" "b/org.eclipse.emf.cdo.threedee.ui/ThreeDee Frontend \0503D\051.launch"
index 4faac98..0734bd4 100644
--- "a/org.eclipse.emf.cdo.threedee.ui/ThreeDee Frontend \0503D\051.launch"
+++ "b/org.eclipse.emf.cdo.threedee.ui/ThreeDee Frontend \0503D\051.launch"
@@ -20,7 +20,7 @@
 <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms256m&#13;&#10;-Xmx512m&#13;&#10;-XX:MaxPermSize=2048m&#13;&#10;-Dsun.awt.nopixfmt=true"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms256m&#13;&#10;-Xmx2048m&#13;&#10;-XX:MaxPermSize=512m&#13;&#10;-Dsun.awt.nopixfmt=true"/>
 <stringAttribute key="pde.version" value="3.3"/>
 <stringAttribute key="product" value="org.eclipse.platform.ide"/>
 <stringAttribute key="selectedPlugin" value="org.eclipse.emf.cdo.threedee"/>
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 099ddd5..0510be3 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
@@ -174,12 +174,14 @@
     protected void onAdded(IContainer<Object> container, Object object)
     {
       addElement(object);
+      world.layout();
     }
 
     @Override
     protected void onRemoved(IContainer<Object> container, Object object)
     {
       removeElement(object);
+      world.layout();
     }
 
     @Override
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 cb1746a..81bffb2 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
@@ -340,11 +340,8 @@
       if (containerContainmentGroup != null)
       {
         clearReferenceNodes(element.getProvider().getElement(element.getContainerID()));
-        updateReferences(containerElement);
       }
     }
-
-    layout();
   }
 
   private void addNode(ElementGroup node, ElementGroup parent)
@@ -358,19 +355,6 @@
       ThreeDeeUtil.enablePicking(node, true);
       parent.addChild(node);
     }
-
-    layout();
-
-    Element element = node.getModel();
-    Element containerElement = getContainerElement(element);
-    if (containerElement != null)
-    {
-      updateReferences(containerElement);
-    }
-    else
-    {
-      updateReferences(element);
-    }
   }
 
   private void removeNode(ElementGroup elementGroup, ElementGroup containerElementGroup)
@@ -461,25 +445,18 @@
   public void layout()
   {
     root.layout();
+    updateReferences();
   }
 
   public void updateReferences()
   {
-    synchronized (Frontend.INSTANCE)
+    for (Session session : Frontend.INSTANCE.getElements())
     {
-      for (Session session : Frontend.INSTANCE.getElements())
-      {
-        Element[] elements = session.getElements();
-        updateReferences(elements);
-      }
+      Element[] elements = session.getElements();
+      updateReferences(elements);
     }
   }
 
-  private void updateReferences(Element source)
-  {
-    updateReferences(source, new HashSet<Element>());
-  }
-
   private void updateReferences(Element[] sources)
   {
     Set<Element> visited = new HashSet<Element>();
diff --git a/org.eclipse.emf.cdo.threedee.ui/src/org/eclipse/emf/cdo/threedee/ui/nodes/RootElementGroup.java b/org.eclipse.emf.cdo.threedee.ui/src/org/eclipse/emf/cdo/threedee/ui/nodes/RootElementGroup.java
index 9703114..ee18525 100644
--- a/org.eclipse.emf.cdo.threedee.ui/src/org/eclipse/emf/cdo/threedee/ui/nodes/RootElementGroup.java
+++ b/org.eclipse.emf.cdo.threedee.ui/src/org/eclipse/emf/cdo/threedee/ui/nodes/RootElementGroup.java
@@ -59,7 +59,6 @@
     for (int i = 0; i < n; i++)
     {
       ThreeDeeNode<Element> child = children[i];
-      // child.layout();
 
       double x = radius * Math.cos(phi);
       double y = radius * Math.sin(phi);
@@ -72,8 +71,6 @@
 
       phi += distanceAngle;
     }
-
-    getWorld().updateReferences();
   }
 
   private static Appearance createAppearance()
