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 83615df..bad9973 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
@@ -81,7 +81,6 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Random;
 import java.util.Set;
 
 /**
@@ -95,6 +94,8 @@
 
   private Map<Element, Map<Element, ReferenceShape>> referenceShapes = new HashMap<Element, Map<Element, ReferenceShape>>();
 
+  private boolean production = true;
+
   private Composite composite;
 
   private QueueRunner runner;
@@ -151,35 +152,22 @@
     scene = createScene(canvas);
 
     universe.addBranchGraph(scene);
-    universe.addBranchGraph(createCoordinateSystem());
+
+    if (!production)
+    {
+      universe.addBranchGraph(createCoordinateSystem());
+    }
 
     setNominalViewingTransform();
     frame.add(canvas);
     createPicking(canvas, scene);
 
-    // intro();
-
-    // mouseTest();
-
-    // flashing1();
-    // flashing2();
-
-    // addSelectionChangedListener(new ISelectionChangedListener()
-    // {
-    // public void selectionChanged(SelectionChangedEvent event)
-    // {
-    // ThreeDeeNodeSelection selection = (ThreeDeeNodeSelection)event.getSelection();
-    // System.out.println("Selection changed " + selection.getNode() + " " + selection.getElement());
-    // }
-    // });
-  }
-
-  @SuppressWarnings("unused")
-  private void intro()
-  {
-    IntroPlanet planet = new IntroPlanet(this);
-    universe.addBranchGraph(planet);
-    planet.start();
+    if (production)
+    {
+      IntroPlanet planet = new IntroPlanet(this);
+      universe.addBranchGraph(planet);
+      planet.start();
+    }
   }
 
   @SuppressWarnings("unused")
@@ -245,204 +233,6 @@
     t.start();
   }
 
-  @SuppressWarnings("unused")
-  private void flashing1()
-  {
-    final Random random = new Random(System.currentTimeMillis());
-    new Thread()
-    {
-      @Override
-      public void run()
-      {
-        while (isAlive())
-        {
-          ConcurrencyUtil.sleep(random.nextInt(500));
-
-          new Thread()
-          {
-            private List<CallShape> shapes = new ArrayList<CallShape>();
-
-            @Override
-            public void run()
-            {
-              while (isAlive())
-              {
-                Session[] sessions = Frontend.INSTANCE.getElements();
-                Session session = sessions[random.nextInt(sessions.length)];
-
-                Element rootElement = session.getRootElement();
-                flash(rootElement, random.nextInt(50));
-
-                for (final CallShape shape : shapes)
-                {
-                  schedule(new Runnable()
-                  {
-                    public void run()
-                    {
-                      shape.detach();
-                    }
-                  });
-
-                  ConcurrencyUtil.sleep(random.nextInt(20));
-                }
-              }
-            }
-
-            private void flash(Element element, int count)
-            {
-              if (count == 0)
-              {
-                return;
-              }
-
-              Set<Integer> ids = element.getReferences().keySet();
-              if (ids.isEmpty())
-              {
-                return;
-              }
-
-              Iterator<Integer> it = ids.iterator();
-
-              int id = 0;
-              int n = random.nextInt(ids.size());
-              while (n-- > 0)
-              {
-                id = it.next();
-              }
-
-              ElementProvider provider = element.getProvider();
-              Element target = provider.getElement(id);
-              if (target != null)
-              {
-                final CallShape shape = new CallShape(element, target);
-                Geometry geometry = getLineGeometry(element, target);
-                shape.setGeometry(geometry);
-                shapes.add(shape);
-
-                schedule(new Runnable()
-                {
-                  public void run()
-                  {
-                    universe.addBranchGraph(shape);
-                  }
-                });
-
-                ConcurrencyUtil.sleep(random.nextInt(20));
-                flash(target, --count);
-              }
-            }
-          }.start();
-        }
-      }
-    }.start();
-  }
-
-  @SuppressWarnings("unused")
-  private void flashing2()
-  {
-    final Random random = new Random(System.currentTimeMillis());
-    new Thread()
-    {
-      @Override
-      public void run()
-      {
-        while (isAlive())
-        {
-          ConcurrencyUtil.sleep(500L + random.nextInt(2000));
-
-          new Thread()
-          {
-            private List<CallShape> shapes = new ArrayList<CallShape>();
-
-            @Override
-            public void run()
-            {
-              while (isAlive())
-              {
-                Session[] sessions = Frontend.INSTANCE.getElements();
-                Session session = sessions[random.nextInt(sessions.length)];
-
-                Element[] elements = session.getAllElements();
-                Element rootElement = elements[random.nextInt(elements.length)];
-
-                flash(elements, rootElement, random.nextInt(50));
-
-                for (final CallShape shape : shapes)
-                {
-                  schedule(new Runnable()
-                  {
-                    public void run()
-                    {
-                      shape.detach();
-                    }
-                  });
-
-                  ConcurrencyUtil.sleep(random.nextInt(100));
-                }
-              }
-            }
-
-            private void flash(Element[] elements, Element element, int count)
-            {
-              if (count == 0)
-              {
-                return;
-              }
-
-              Element target;
-
-              Set<Integer> ids = element.getReferences().keySet();
-              if (ids.isEmpty())
-              {
-                if (random.nextInt(5) == 0)
-                {
-                  target = elements[random.nextInt(elements.length)];
-                }
-                else
-                {
-                  return;
-                }
-              }
-              else
-              {
-                Iterator<Integer> it = ids.iterator();
-
-                int id = 0;
-                int n = random.nextInt(ids.size());
-                while (n-- > 0)
-                {
-                  id = it.next();
-                }
-
-                ElementProvider provider = element.getProvider();
-                target = provider.getElement(id);
-              }
-
-              if (target != null)
-              {
-                final CallShape shape = new CallShape(element, target);
-                Geometry geometry = getLineGeometry(element, target);
-                shape.setGeometry(geometry);
-                shapes.add(shape);
-
-                schedule(new Runnable()
-                {
-                  public void run()
-                  {
-                    universe.addBranchGraph(shape);
-                  }
-                });
-
-                ConcurrencyUtil.sleep(random.nextInt(20));
-                flash(elements, target, --count);
-              }
-            }
-          }.start();
-        }
-      }
-    }.start();
-  }
-
   private BranchGroup createScene(Canvas3D canvas)
   {
     BranchGroup scene = new BranchGroup();
@@ -566,7 +356,7 @@
     return group;
   }
 
-  private void setNominalViewingTransform()
+  public void setNominalViewingTransform()
   {
     ViewingPlatform viewingPlatform = universe.getViewingPlatform();
 
diff --git a/org.eclipse.emf.cdo.threedee.ui/src/org/eclipse/emf/cdo/threedee/ui/nodes/IntroPlanet.java b/org.eclipse.emf.cdo.threedee.ui/src/org/eclipse/emf/cdo/threedee/ui/nodes/IntroPlanet.java
index c2ce44c..6e7a265 100644
--- a/org.eclipse.emf.cdo.threedee.ui/src/org/eclipse/emf/cdo/threedee/ui/nodes/IntroPlanet.java
+++ b/org.eclipse.emf.cdo.threedee.ui/src/org/eclipse/emf/cdo/threedee/ui/nodes/IntroPlanet.java
@@ -85,6 +85,7 @@
     this.world = world;
     setCapability(Group.ALLOW_CHILDREN_EXTEND);
     setCapability(Group.ALLOW_CHILDREN_WRITE);
+    setCapability(BranchGroup.ALLOW_DETACH);
 
     addChild(createBackground());
 
@@ -495,5 +496,12 @@
       ViewingPlatform viewingPlatform = world.getUniverse().getViewingPlatform();
       viewingPlatform.getViewPlatformTransform().setTransform(viewingTransform);
     }
+
+    @Override
+    protected void done()
+    {
+      world.setNominalViewingTransform();
+      detach();
+    }
   }
 }
