Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision f754917924b80919f8e64d1677b63a945f3b35f9)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision dbf6c75cc47f8e2ae9d31a5c93c7386614cac23a)
@@ -303,4 +303,18 @@
 {
   GLMoleculeObject_shape *shapeObject = new GLMoleculeObject_shape(shape, this);
+  ShapeNodeMap::iterator iter = ShapesinSceneMap.find(shape.getName());
+  ASSERT(iter == ShapesinSceneMap.end(),
+      "GLWorldScene::addShape() - same shape "+shape.getName()+" added again.");
+  ShapesinSceneMap.insert( make_pair(shape.getName(), shapeObject) );
+}
+
+void GLWorldScene::clearShapes()
+{
+  foreach (QObject *obj, children()) {
+    GLMoleculeObject_shape *shapeobj = qobject_cast<GLMoleculeObject_shape *>(obj);
+      if (shapeobj)
+        delete(shapeobj);
+  }
+  ShapesinSceneMap.clear();
 }
 
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp	(revision f754917924b80919f8e64d1677b63a945f3b35f9)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp	(revision dbf6c75cc47f8e2ae9d31a5c93c7386614cac23a)
@@ -35,4 +35,5 @@
 class GLMoleculeObject_atom;
 class GLMoleculeObject_molecule;
+class GLMoleculeObject_shape;
 
 /** This class contains a list of all molecules in the world.
@@ -86,5 +87,8 @@
   void hoverChangedSignalled(GLMoleculeObject *ob);
   void changeAtomId(GLMoleculeObject_atom *ob, int oldId, int newOd);
+
+public:
   void addShape(const Shape &shape);
+  void clearShapes();
 
 private:
@@ -98,7 +102,9 @@
   typedef std::map< BondIds , GLMoleculeObject_bond* > BondNodeMap;
   typedef std::map< moleculeId_t , GLMoleculeObject_molecule* > MoleculeNodeMap;
+  typedef std::map< std::string , GLMoleculeObject_shape* > ShapeNodeMap;
   AtomNodeMap AtomsinSceneMap;
   BondNodeMap BondsinSceneMap;
   MoleculeNodeMap MoleculesinSceneMap;
+  ShapeNodeMap ShapesinSceneMap;
 
   QGLSceneNode *meshEmpty[GLMoleculeObject::DETAILTYPES_MAX];
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp	(revision f754917924b80919f8e64d1677b63a945f3b35f9)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp	(revision dbf6c75cc47f8e2ae9d31a5c93c7386614cac23a)
@@ -57,4 +57,5 @@
 #include "CodePatterns/Observer/Notification.hpp"
 #include "CodePatterns/Observer/ObserverLog.hpp"
+#include "Shapes/ShapeRegistry.hpp"
 #include "World.hpp"
 #include "Box.hpp"
@@ -94,4 +95,8 @@
   AtomObserver::getInstance().signOn(this, AtomObservable::PositionChanged);
 
+  ShapeRegistry::getInstance().signOn(this);
+  ShapeRegistry::getInstance().signOn(this, ShapeRegistry::ShapeRemoved);
+  ShapeRegistry::getInstance().signOn(this, ShapeRegistry::SelectionChanged);
+
   redrawTimer = new QTimer(this);
 }
@@ -106,4 +111,7 @@
   World::getInstance().signOff(this, World::SelectionChanged);
   AtomObserver::getInstance().signOff(this, AtomObservable::PositionChanged);
+  ShapeRegistry::getInstance().signOff(this);
+  ShapeRegistry::getInstance().signOff(this, ShapeRegistry::ShapeRemoved);
+  ShapeRegistry::getInstance().signOff(this, ShapeRegistry::SelectionChanged);
   delete worldscene;
 
@@ -357,4 +365,20 @@
         break;
     }
+  } else if (static_cast<ShapeRegistry*>(publisher) == ShapeRegistry::getPointer()) {
+    switch (notification->getChannelNo()) {
+      case ShapeRegistry::ShapeRemoved:
+      {
+        updateSelectedShapes();
+        break;
+      }
+      case ShapeRegistry::SelectionChanged:
+      {
+        updateSelectedShapes();
+        break;
+      }
+      default:
+        ASSERT(0, "GLWorldView::recieveNotification() - we cannot get here.");
+        break;
+    }
   } else
     ASSERT(0, "GLWorldView::recieveNotification() - received notification from unknown source.");
@@ -635,4 +659,12 @@
 {
   emit hoverChanged(_atom);
+}
+
+void GLWorldView::updateSelectedShapes()
+{
+  worldscene->clearShapes();
+  std::vector<Shape*> selectedShapes = ShapeRegistry::getInstance().getSelectedShapes();
+  for (unsigned int i=0; i<selectedShapes.size(); i++)
+    worldscene->addShape(*selectedShapes[i]);
 }
 
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp	(revision f754917924b80919f8e64d1677b63a945f3b35f9)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp	(revision dbf6c75cc47f8e2ae9d31a5c93c7386614cac23a)
@@ -98,4 +98,6 @@
 
 private:
+  void updateSelectedShapes();
+
   GLWorldScene *worldscene;
 
