diff --git a/org.eclipse.emf.cdo.threedee.common/src/org/eclipse/emf/cdo/threedee/common/descriptors/_INIT_.java b/org.eclipse.emf.cdo.threedee.common/src/org/eclipse/emf/cdo/threedee/common/descriptors/_INIT_.java
index 04c1c8d..cb57332 100644
--- a/org.eclipse.emf.cdo.threedee.common/src/org/eclipse/emf/cdo/threedee/common/descriptors/_INIT_.java
+++ b/org.eclipse.emf.cdo.threedee.common/src/org/eclipse/emf/cdo/threedee/common/descriptors/_INIT_.java
@@ -15,6 +15,7 @@
 import org.eclipse.emf.cdo.threedee.common.descriptors.cdoclient._INIT_CDO_CLIENT_;
 import org.eclipse.emf.cdo.threedee.common.descriptors.cdoserver._INIT_CDO_SERVER_;
 import org.eclipse.emf.cdo.threedee.common.descriptors.net4j._INIT_NET4J_;
+import org.eclipse.emf.cdo.threedee.common.descriptors.net4jdb._INIT_NET4J_DB_;
 
 import java.awt.Color;
 
@@ -30,7 +31,7 @@
     _INIT_CDO_CLIENT_.init(registry);
     _INIT_CDO_SERVER_.init(registry);
     _INIT_NET4J_.init(registry);
-    // _INIT_NET4J_DB_.init(registry);
+    _INIT_NET4J_DB_.init(registry);
 
     Color color = Color.white;
     registry.register(new ManagedContainerDescriptor(), color, 0.8f);
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 a10cece..c5a8928 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
@@ -709,7 +709,7 @@
       ElementGroup elementGroup = elementGroups.get(object);
       if (elementGroup != null)
       {
-        elementGroup.select(select);
+        elementGroup.setSelected(select);
       }
     }
   }
diff --git a/org.eclipse.emf.cdo.threedee.ui/src/org/eclipse/emf/cdo/threedee/ui/nodes/ElementGroup.java b/org.eclipse.emf.cdo.threedee.ui/src/org/eclipse/emf/cdo/threedee/ui/nodes/ElementGroup.java
index 1279bf7..6d416fd 100644
--- a/org.eclipse.emf.cdo.threedee.ui/src/org/eclipse/emf/cdo/threedee/ui/nodes/ElementGroup.java
+++ b/org.eclipse.emf.cdo.threedee.ui/src/org/eclipse/emf/cdo/threedee/ui/nodes/ElementGroup.java
@@ -24,6 +24,7 @@
 import javax.media.j3d.Canvas3D;
 import javax.media.j3d.Node;
 import javax.media.j3d.RenderingAttributes;
+import javax.media.j3d.Shape3D;
 import javax.media.j3d.Transform3D;
 import javax.media.j3d.TransparencyAttributes;
 import javax.vecmath.AxisAngle4d;
@@ -50,8 +51,6 @@
 
   private static SelectionThread selectionThread;
 
-  private BranchGroup selection;
-
   public ElementGroup(Element element, Canvas3D canvas)
   {
     super(element, createAppearance(element, canvas));
@@ -63,7 +62,12 @@
     return (ElementSphere)super.getShape();
   }
 
-  public void select(boolean selected)
+  public boolean isSelected()
+  {
+    return getSelectionThread().isSelected(this);
+  }
+
+  public void setSelected(boolean selected)
   {
     if (selected)
     {
@@ -78,21 +82,11 @@
       float radius = ElementSphere.RADIUS * 1.4f;
       Sphere selectionShape = new Sphere(radius, Primitive.GENERATE_NORMALS, 32, appearance);
 
-      selection = new BranchGroup();
-      selection.setCapability(ALLOW_DETACH);
-      selection.addChild(selectionShape);
-
-      addChild(selection);
-      getSelectionThread().add(selection, transparencyAttributes);
+      getSelectionThread().add(this, selectionShape);
     }
     else
     {
-      if (selection != null)
-      {
-        getSelectionThread().remove(selection);
-        selection.detach();
-        selection = null;
-      }
+      getSelectionThread().remove(this);
     }
   }
 
@@ -173,7 +167,7 @@
   public final class ElementSphere extends Sphere
   {
     public static final float RADIUS = .1f;
-  
+
     public ElementSphere(Appearance appearance)
     {
       super(RADIUS, Primitive.GENERATE_NORMALS, 32, appearance);
@@ -185,7 +179,7 @@
    */
   private static final class SelectionThread extends Thread
   {
-    private Map<BranchGroup, TransparencyAttributes> selections = new HashMap<BranchGroup, TransparencyAttributes>();
+    private Map<ElementGroup, Node> selectionShapes = new HashMap<ElementGroup, Node>();
 
     private double theta;
 
@@ -194,19 +188,30 @@
       setDaemon(true);
     }
 
-    public synchronized TransparencyAttributes[] getSelections()
+    public synchronized boolean isSelected(ElementGroup elementGroup)
     {
-      return selections.values().toArray(new TransparencyAttributes[selections.size()]);
+      return selectionShapes.containsKey(elementGroup);
     }
 
-    public synchronized void add(BranchGroup selection, TransparencyAttributes transparencyAttributes)
+    public synchronized void add(ElementGroup elementGroup, Node selectionShape)
     {
-      selections.put(selection, transparencyAttributes);
+      BranchGroup branchGroup = new BranchGroup();
+      branchGroup.setCapability(ALLOW_DETACH);
+      branchGroup.addChild(selectionShape);
+
+      elementGroup.addChild(branchGroup);
+      selectionShapes.put(elementGroup, selectionShape);
     }
 
-    public synchronized void remove(BranchGroup selection)
+    public synchronized void remove(ElementGroup elementGroup)
     {
-      selections.remove(selection);
+      Node selectionShape = selectionShapes.remove(elementGroup);
+      if (selectionShape != null)
+      {
+        BranchGroup branchGroup = (BranchGroup)selectionShape.getParent();
+        branchGroup.detach();
+      }
+
     }
 
     @Override
@@ -215,9 +220,22 @@
       while (!interrupted())
       {
         float alpha = (float)Math.abs(Math.cos(theta));
-        for (TransparencyAttributes transparencyAttributes : getSelections())
+
+        for (Node node : getSelections())
         {
-          transparencyAttributes.setTransparency(alpha);
+          Appearance appearance;
+          if (node instanceof Shape3D)
+          {
+            Shape3D selectionShape = (Shape3D)node;
+            appearance = selectionShape.getAppearance();
+          }
+          else
+          {
+            Primitive selectionShape = (Primitive)node;
+            appearance = selectionShape.getAppearance();
+          }
+
+          appearance.getTransparencyAttributes().setTransparency(alpha);
         }
 
         theta += 0.02f;
@@ -229,5 +247,10 @@
         ConcurrencyUtil.sleep(5);
       }
     }
+
+    private synchronized Node[] getSelections()
+    {
+      return selectionShapes.values().toArray(new Node[selectionShapes.size()]);
+    }
   }
 }
