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 d3eb7ec..c7e26d8 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
@@ -272,7 +272,7 @@
       {
         DescriptorView view = DescriptorView.INSTANCE.getValue();
         Set<ElementDescriptor> toBeHidden = view.getAllChecked(false);
-        world.filter(toBeHidden);
+        world.setDisabledDescriptors(toBeHidden);
       }
     }
 
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 25320dd..d3b682b 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
@@ -82,6 +82,7 @@
 import java.awt.event.MouseAdapter;

 import java.awt.event.MouseEvent;

 import java.util.ArrayList;

+import java.util.Collections;

 import java.util.HashMap;

 import java.util.HashSet;

 import java.util.Iterator;

@@ -100,6 +101,8 @@
 

   private static boolean PRODUCTION = false;

 

+  private Set<ElementDescriptor> disabledDescriptors = Collections.emptySet();

+

   private Map<Element, ElementGroup> elementGroups = new HashMap<Element, ElementGroup>();

 

   private Map<Element, Map<Element, ReferenceShape>> referenceShapes = new HashMap<Element, Map<Element, ReferenceShape>>();

@@ -494,17 +497,24 @@
   private ElementGroup createElementGroup(Element element)

   {

     ElementGroup group = new ElementGroup(element, canvas);

+    ElementDescriptor descriptor = element.getDescriptor();

+    if (disabledDescriptors.contains(descriptor))

+    {

+      group.setVisible(false);

+    }

+

     elementGroups.put(element, group);

     return group;

   }

 

-  public void filter(Set<ElementDescriptor> toBeHidden)

+  public void setDisabledDescriptors(Set<ElementDescriptor> disabledDescriptors)

   {

+    this.disabledDescriptors = disabledDescriptors;

     for (ElementGroup elementGroup : elementGroups.values())

     {

       Element element = elementGroup.getModel();

       ElementDescriptor descriptor = element.getDescriptor();

-      elementGroup.setVisible(!toBeHidden.contains(descriptor));

+      elementGroup.setVisible(!disabledDescriptors.contains(descriptor));

     }

 

     updateReferences();

@@ -590,7 +600,6 @@
 

           BranchGroup branchGroup = new BranchGroup();

           branchGroup.setCapability(BranchGroup.ALLOW_DETACH);

-          // branchGroup.setCapability(Node.ALLOW_PICKABLE_WRITE);

           branchGroup.addChild(transformGroup);

 

           universe.addBranchGraph(branchGroup);

@@ -652,6 +661,16 @@
       return;

     }

 

+    if (disabledDescriptors.contains(source.getDescriptor()))

+    {

+      return;

+    }

+

+    if (disabledDescriptors.contains(target.getDescriptor()))

+    {

+      return;

+    }

+

     getCallThread().add(source, target, transmission);

   }