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()