Index: src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp	(revision 3927ef32aa0c52dd73d5c9a4fe5eccea8715a379)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp	(revision 53059ec2dd3238b5576917fc5f3b886c51b6c88d)
@@ -26,4 +26,6 @@
 #include "CodePatterns/MemDebug.hpp"
 
+#include "Atom/AtomObserver.hpp"
+#include "Atom/atom_observable.hpp"
 #include "CodePatterns/Log.hpp"
 #include "CodePatterns/Observer/Notification.hpp"
@@ -50,7 +52,8 @@
   World::getInstance().signOn(this, World::AtomInserted);
   World::getInstance().signOn(this, World::AtomRemoved);
-  World::getInstance().signOn(this, World::AtomPositionChanged);
+  World::getInstance().signOn(this, World::MoleculeInserted);
   World::getInstance().signOn(this, World::MoleculeRemoved);
   World::getInstance().signOn(this, World::SelectionChanged);
+  AtomObserver::getInstance().signOn(this, AtomObservable::PositionChanged);
 }
 
@@ -60,7 +63,8 @@
   World::getInstance().signOff(this, World::AtomInserted);
   World::getInstance().signOff(this, World::AtomRemoved);
-  World::getInstance().signOff(this, World::AtomPositionChanged);
+  World::getInstance().signOff(this, World::MoleculeInserted);
   World::getInstance().signOff(this, World::MoleculeRemoved);
   World::getInstance().signOff(this, World::SelectionChanged);
+  AtomObserver::getInstance().signOff(this, AtomObservable::PositionChanged);
   delete worldscene;
 }
@@ -87,53 +91,71 @@
 void GLWorldView::recieveNotification(Observable *publisher, Notification_ptr notification)
 {
-  switch (notification->getChannelNo()) {
-    case World::AtomInserted:
-    {
-      const atom *_atom = World::getInstance().lastChanged<atom>();
-#ifdef LOG_OBSERVER
-      observerLog().addMessage() << "++ Observer " << observerLog().getName(this) << " received notification that atom "+toString(_atom->getId())+" has been inserted.";
-#endif
-      emit atomInserted(_atom);
-      break;
+  if (static_cast<World *>(publisher) == World::getPointer()) {
+    switch (notification->getChannelNo()) {
+      case World::AtomInserted:
+      {
+        const atom *_atom = World::getInstance().lastChanged<atom>();
+  #ifdef LOG_OBSERVER
+        observerLog().addMessage() << "++ Observer " << observerLog().getName(this) << " received notification that atom "+toString(_atom->getId())+" has been inserted.";
+  #endif
+        emit atomInserted(_atom);
+        break;
+      }
+      case World::AtomRemoved:
+      {
+        const atom *_atom = World::getInstance().lastChanged<atom>();
+  #ifdef LOG_OBSERVER
+        observerLog().addMessage() << "++ Observer " << observerLog().getName(this) << " received notification that atom "+toString(_atom->getId())+" has been removed.";
+  #endif
+        emit atomRemoved(_atom);
+        break;
+      }
+      case World::SelectionChanged:
+      {
+  #ifdef LOG_OBSERVER
+        observerLog().addMessage() << "++ Observer " << observerLog().getName(this) << " received notification that selection has changed.";
+  #endif
+        emit worldSelectionChanged();
+        break;
+      }
+      case World::MoleculeInserted:
+      {
+        const molecule *_molecule = World::getInstance().lastChanged<molecule>();
+  #ifdef LOG_OBSERVER
+        observerLog().addMessage() << "++ Observer " << observerLog().getName(this) << " received notification that molecule "+toString(_molecule->getId())+" has been removed.";
+  #endif
+        emit moleculeInserted(_molecule);
+        break;
+      }
+      case World::MoleculeRemoved:
+      {
+        const molecule *_molecule = World::getInstance().lastChanged<molecule>();
+  #ifdef LOG_OBSERVER
+        observerLog().addMessage() << "++ Observer " << observerLog().getName(this) << " received notification that molecule "+toString(_molecule->getId())+" has been removed.";
+  #endif
+        emit moleculeRemoved(_molecule);
+        break;
+      }
+      default:
+        ASSERT(0, "GLWorldView::recieveNotification() - we cannot get here.");
+        break;
     }
-    case World::AtomRemoved:
-    {
-      const atom *_atom = World::getInstance().lastChanged<atom>();
-#ifdef LOG_OBSERVER
-      observerLog().addMessage() << "++ Observer " << observerLog().getName(this) << " received notification that atom "+toString(_atom->getId())+" has been removed.";
-#endif
-      emit atomRemoved(_atom);
-      break;
+  } else if (dynamic_cast<AtomObservable *>(publisher) != NULL) {
+    switch (notification->getChannelNo()) {
+      case AtomObservable::PositionChanged:
+      {
+        const atom *_atom = dynamic_cast<const atom *>(publisher);
+    #ifdef LOG_OBSERVER
+        observerLog().addMessage() << "++ Observer " << observerLog().getName(this) << " received notification that atom "+toString(_atom->getId())+" has changed its position.";
+    #endif
+        emit changed();
+        break;
+      }
+      default:
+        ASSERT(0, "GLWorldView::recieveNotification() - we cannot get here.");
+        break;
     }
-    case World::AtomPositionChanged:
-    {
-      const atom *_atom = World::getInstance().lastChanged<atom>();
-#ifdef LOG_OBSERVER
-      observerLog().addMessage() << "++ Observer " << observerLog().getName(this) << " received notification that atom "+toString(_atom->getId())+" has changed its position.";
-#endif
-      emit changed();
-      break;
-    }
-    case World::SelectionChanged:
-    {
-#ifdef LOG_OBSERVER
-      observerLog().addMessage() << "++ Observer " << observerLog().getName(this) << " received notification that selection has changed.";
-#endif
-      emit worldSelectionChanged();
-      break;
-    }
-    case World::MoleculeRemoved:
-    {
-      const molecule *_molecule = World::getInstance().lastChanged<molecule>();
-#ifdef LOG_OBSERVER
-      observerLog().addMessage() << "++ Observer " << observerLog().getName(this) << " received notification that molecule "+toString(_molecule->getId())+" has been removed.";
-#endif
-      emit moleculeRemoved(_molecule);
-      break;
-    }
-    default:
-      ASSERT(0, "GLWorldView::recieveNotification() - we cannot get here.");
-      break;
-  }
+  } else
+    ASSERT(0, "GLWorldView::recieveNotification() - received notification from unknown source.");
 }
 
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp	(revision 3927ef32aa0c52dd73d5c9a4fe5eccea8715a379)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp	(revision 53059ec2dd3238b5576917fc5f3b886c51b6c88d)
@@ -47,4 +47,5 @@
   void atomInserted(const atom *_atom);
   void atomRemoved(const atom *_atom);
+  void moleculeInserted(const molecule *_molecule);
   void moleculeRemoved(const molecule *_molecule);
   void worldSelectionChanged();
