Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp	(revision 8d5fbf175be3a0dab17997f67f03c1284b6174fb)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp	(revision 0f7ffe77d9333b4c1f491534cd62859d247be023)
@@ -183,7 +183,11 @@
   connect (this, SIGNAL(IdChanged()), this, SLOT(resetIndex()), Qt::QueuedConnection);
   connect (this, SIGNAL(AtomInserted(const atomId_t)), this, SLOT(atomInserted(const atomId_t)), Qt::QueuedConnection);
-  connect (this, SIGNAL(AtomInserted(const atomId_t)), this, SLOT(resetAtoms()), Qt::QueuedConnection);
-  connect (this, SIGNAL(AtomRemoved(const atomId_t)), this, SLOT(resetAtoms()), Qt::QueuedConnection);
   connect (this, SIGNAL(AtomRemoved(const atomId_t)), this, SLOT(atomRemoved(const atomId_t)), Qt::QueuedConnection);
+  if (board != NULL) {
+    connect(board, SIGNAL(atomInserted(const atomId_t)),
+        this, SLOT(atomInserted(const atomId_t)));
+    connect(board, SIGNAL(atomRemoved(const atomId_t)),
+        this, SLOT(atomRemoved(const atomId_t)));
+  }
 
   connect( this, SIGNAL(clicked()), this, SLOT(wasClicked()));
@@ -345,5 +349,6 @@
 void GLMoleculeObject_molecule::resetTesselationHull()
 {
-  if (!TesselationHull.isValid())
+  // only when Observable still lives so far, we may check on Cacheable::isValid
+  if ((owner != NULL) && (!TesselationHull.isValid()))
     updateMesh(createMoleculeMesh(*TesselationHull));
 }
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision 8d5fbf175be3a0dab17997f67f03c1284b6174fb)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision 0f7ffe77d9333b4c1f491534cd62859d247be023)
@@ -113,41 +113,4 @@
   GLMoleculeObject::cleanMaterialMap();
 }
-
-///** Update the WorldScene with molecules and atomsfrom World.
-// *
-// * This function should be called after e.g. WorldTime::TimeChanged was
-// * received or after another molecule has been loaded.
-// *
-// */
-//void GLWorldScene::update()
-//{
-//  const std::vector<const molecule *> &molecules =
-//      const_cast<const World &>(World::getInstance()).getAllMolecules();
-//
-//  for (std::vector<const molecule*>::const_iterator moliter = molecules.begin();
-//      moliter != molecules.end();
-//      moliter++) {
-//    boost::recursive_mutex::scoped_lock lock(MoleculeinSceneMap_mutex);
-//    // check whether molecule already exists
-//    const moleculeId_t molid = (*moliter)->getId();
-//    const bool mol_present = MoleculesinSceneMap.count(molid);
-//    if (!mol_present)
-//      moleculeInserted((*moliter)->getId());
-//  }
-//
-//  boost::recursive_mutex::scoped_lock lock(MoleculeinSceneMap_mutex);
-//  MoleculeNodeMap::iterator iter = MoleculesinSceneMap.begin();
-//  for (;iter != MoleculesinSceneMap.end();) {
-//    const moleculeId_t molid = iter->first;
-//    const molecule * const mol = const_cast<const World &>(World::getInstance()).
-//        getMolecule(MoleculeById(molid));
-//    const bool mol_absent = (mol == NULL);
-//    // step on to next molecule before possibly removing entry and invalidating iter
-//    ++iter;
-//    if (mol_absent)
-//      moleculeRemoved(molid);
-//  }
-//
-//}
 
 void GLWorldScene::atomClicked(atomId_t no)
@@ -350,8 +313,4 @@
   connect (molObject, SIGNAL(hoverChanged(const moleculeId_t, int)), this, SIGNAL(hoverChanged(const moleculeId_t, int)));
   connect (molObject, SIGNAL(hoverChanged(const moleculeId_t, int)), this, SIGNAL(hoverChanged(const moleculeId_t, int)));
-  connect(board, SIGNAL(atomInserted(const atomId_t)),
-      molObject, SLOT(atomInserted(const atomId_t)));
-  connect(board, SIGNAL(atomRemoved(const atomId_t)),
-      molObject, SLOT(atomRemoved(const atomId_t)));
 
   emit changed();
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp	(revision 8d5fbf175be3a0dab17997f67f03c1284b6174fb)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp	(revision 0f7ffe77d9333b4c1f491534cd62859d247be023)
@@ -102,5 +102,4 @@
   // sign on to changes in the world
   World::getInstance().signOn(this);
-  World::getInstance().signOn(this, World::MoleculeInserted);
   World::getInstance().signOn(this, World::SelectionChanged);
 //  WorldTime::getInstance().signOn(this, WorldTime::TimeChanged);
@@ -117,10 +116,4 @@
 GLWorldView::~GLWorldView()
 {
-  // remove me from all observed molecules
-  for (ObservedMolecules_t::iterator iter = ObservedMolecules.begin();
-      !ObservedMolecules.empty();
-      iter = ObservedMolecules.begin())
-    signOffFromMolecule(*iter);
-
   QSettings settings;
   settings.beginGroup("WorldView");
@@ -131,5 +124,4 @@
 
   World::getInstance().signOff(this);
-  World::getInstance().signOff(this, World::MoleculeInserted);
   World::getInstance().signOff(this, World::SelectionChanged);
 //  WorldTime::getInstance().signOff(this, WorldTime::TimeChanged);
@@ -335,30 +327,4 @@
 }
 
-void GLWorldView::signOnToMolecule(const molecule *_mol)
-{
-  ASSERT( _mol != NULL,
-      "GLWorldView::signOnToMolecule() - molecule ref is NULL.");
-  _mol->signOn(this, molecule::AtomInserted);
-  _mol->signOn(this, molecule::AtomRemoved);
-
-  ObservedMolecules.insert(const_cast<molecule *>(_mol));
-}
-
-void GLWorldView::signOffFromMolecule(const molecule *_mol)
-{
-  ObservedMolecules_t::const_iterator iter = ObservedMolecules.find(
-      const_cast<molecule *>(_mol));
-  ASSERT( iter != ObservedMolecules.end(),
-      "GLWorldView::signOffFromMolecule() - molecule "+toString(_mol)
-      +" gave subjectKilled we are not signed on.");
-//    LOG(1, "INFO: Erasing " << mol << " from ObservedMolecules.");
-  ObservedMolecules.erase(iter);
-
-  ASSERT( _mol != NULL,
-      "GLWorldView::signOffFromMolecule() - molecule ref is NULL.");
-  _mol->signOff(this, molecule::AtomInserted);
-  _mol->signOff(this, molecule::AtomRemoved);
-}
-
 /**
  * The observable can tell when it dies.
@@ -366,19 +332,5 @@
 void GLWorldView::subjectKilled(Observable *publisher)
 {
-  molecule * mol = static_cast<molecule *>(publisher);
-
-//  std::copy(ObservedMolecules.begin(), ObservedMolecules.end(),
-//      std::ostream_iterator<molecule *>(std::cout, "\n"));
-
-  if (mol != NULL) {
-    ObservedMolecules.erase(mol);
-//
-//    // sign off
-//    signOffFromMolecule(mol);
-
-    // emit removed signal
-    const moleculeId_t _id = mol->getId();
-    emit moleculeRemoved(_id);
-  }
+  // world never dies
 }
 
@@ -398,19 +350,4 @@
   #endif
         emit worldSelectionChanged();
-        break;
-      }
-      case World::MoleculeInserted:
-      {
-        const moleculeId_t _id = const_cast<const World &>(World::getInstance()).lastChangedMolId();
-  #ifdef LOG_OBSERVER
-        observerLog().addMessage() << "++ Observer " << observerLog().getName(static_cast<Observer *>(this)) << " received notification that molecule "+toString(_id)+" has been inserted.";
-  #endif
-        const molecule * const _molecule = const_cast<const World &>(World::getInstance()).
-            getMolecule(MoleculeById(_id));
-        if (_molecule != NULL) {
-          signOnToMolecule(_molecule);
-
-          emit moleculeInserted(_id);
-        }
         break;
       }
@@ -432,31 +369,4 @@
       default:
         ASSERT(0, "GLWorldView::recieveNotification() - we cannot get here for WorldTime.");
-        break;
-    }
-  } else if (dynamic_cast<molecule *>(publisher) != NULL) {
-    const molecule * mol = const_cast<const molecule * const>(dynamic_cast<molecule *>(publisher));
-    const moleculeId_t molid = mol->getId();
-    const atomId_t atomid = mol->lastChangedAtomId();
-    switch (notification->getChannelNo()) {
-      case molecule::AtomInserted:
-      {
-#ifdef LOG_OBSERVER
-        observerLog().addMessage() << "++ Observer " << observerLog().getName(static_cast<Observer *>(this))
-            << " received notification that atom "+toString(atomid)+" has been inserted into molecule "+toString(molid)+".";
-#endif
-        emit atomInserted(molid, atomid);
-        break;
-      }
-      case World::AtomRemoved:
-      {
-#ifdef LOG_OBSERVER
-        observerLog().addMessage() << "++ Observer " << observerLog().getName(static_cast<Observer *>(this))
-            << " received notification that atom "+toString(atomid)+" has been removed from molecule "+toString(molid)+".";
-#endif
-        emit atomRemoved(molid, atomid);
-        break;
-      }
-      default:
-        ASSERT(0, "GLWorldView::recieveNotification() - we cannot get here for molecule.");
         break;
     }
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp	(revision 8d5fbf175be3a0dab17997f67f03c1284b6174fb)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp	(revision 0f7ffe77d9333b4c1f491534cd62859d247be023)
@@ -66,8 +66,4 @@
   void changed();
   void TimeChanged();
-  void atomInserted(const moleculeId_t _molid, const atomId_t _atomid);
-  void atomRemoved(const moleculeId_t _molid, const atomId_t _atomid);
-  void moleculeInserted(const moleculeId_t _id);
-  void moleculeRemoved(const moleculeId_t _id);
   void worldSelectionChanged();
   void hoverChanged(const atomId_t _id);
@@ -116,7 +112,4 @@
   void setDomainStatus(const bool status);
 
-  void signOnToMolecule(const molecule *_mol);
-  void signOffFromMolecule(const molecule *_mol);
-
 private:
 
@@ -138,8 +131,4 @@
 
   double defaultEyeSeparation;
-
-  typedef std::multiset<molecule *> ObservedMolecules_t;
-  //!> sorted list of molecules we are sign on to
-  ObservedMolecules_t ObservedMolecules;
 };
 
