Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision 1187c54972b86c05d22e6c40e217c82f0d98ed65)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision 0824dd198ecf3d9295689829ad5f5377ecad4aae)
@@ -213,4 +213,7 @@
   const MoleculeNodeMap::iterator moliter = MoleculesinSceneMap.find(molid);
   if (moliter != MoleculesinSceneMap.end()) {
+    const RemovedMoleculesMap_t::iterator emptyiter = EmptyMolecules.find(_mol);
+    if (emptyiter != EmptyMolecules.end())
+      EmptyMolecules.erase(emptyiter);
     // check that it is the right molecule
     QtObservedMolecule::ptr &checkmol = moliter->second->ObservedMolecule;
@@ -497,9 +500,29 @@
 
   MoleculeNodeMap::iterator iter = MoleculesinSceneMap.find(molid);
-  if ( iter != MoleculesinSceneMap.end()) {
-    LOG(1, "DEBUG: Removing GLMoleculeObject_molecule to id " << molid << " from scene.");
+  ASSERT ( iter != MoleculesinSceneMap.end(),
+      "GLWorldScene::moleculeRemoved() - to be removed molecule "+toString(molid)
+      +" is already gone.");
+  // check if it's already empty
+  const RemovedMoleculesMap_t::iterator emptyiter = EmptyMolecules.find(_mol);
+  if (emptyiter != EmptyMolecules.end()) {
+    LOG(1, "DEBUG: Removing empty GLMoleculeObject_molecule to id " << molid << " from scene.");
+    // it's already empty, remove it
+    ASSERT( emptyiter->second == iter->second,
+        "GLWorldScene::moleculeRemoved() - empty molecule "
+        +toString(emptyiter->second)+" and removed molecule "
+        +toString(iter->second)+" don't match.");
+    LOG(1, "DEBUG: Deleting already empty GLMoleculeObject_molecule to id " << molid);
+    GLMoleculeObject_molecule *molObject = emptyiter->second;
+    EmptyMolecules.erase(emptyiter);
+    molObject->disconnect();
+    delete molObject;
+
+    emit changed();
+    emit changeOccured();
+  } else {
+    // otherwise note it as removal candidate
     RemovedMolecules.insert( std::make_pair(_mol, iter->second) );
-    MoleculesinSceneMap.erase(iter);
-  }
+  }
+  MoleculesinSceneMap.erase(iter);
 
   // remove any possible state changes left
@@ -517,24 +540,29 @@
   boost::recursive_mutex::scoped_lock lock(MoleculeinSceneMap_mutex);
 
-  RemovedMoleculesMap_t::iterator iter = RemovedMolecules.find(_mol.get());
-  if ( iter != RemovedMolecules.end()) {
-    LOG(1, "DEBUG: Deleting GLMoleculeObject_molecule to id " << molid);
-    GLMoleculeObject_molecule *molObject = iter->second;
-    RemovedMolecules.erase(iter);
+  MoleculeNodeMap::iterator iter = MoleculesinSceneMap.find(molid);
+  if ( iter == MoleculesinSceneMap.end()) {
+    RemovedMoleculesMap_t::iterator removeiter = RemovedMolecules.find(_mol.get());
+    ASSERT ( removeiter != RemovedMolecules.end(),
+        "GLWorldScene::moleculeEmpty() - to be removed molecule "+toString(molid)
+        +" is neither in MoleculesinSceneMap, nor in RemovedMolecules.");
+    // it's noted for removal already, remove it
+    LOG(1, "DEBUG: Deleting empty GLMoleculeObject_molecule to id " << molid);
+    GLMoleculeObject_molecule *molObject = removeiter->second;
+    RemovedMolecules.erase(removeiter);
     molObject->disconnect();
     delete molObject;
+
+    emit changed();
+    emit changeOccured();
   } else {
-    ASSERT(0,
-        "GLWorldScene::moleculeEmpty() - molecule "+toString(molid)+" is empty that is not present.");
-  }
-
-  // remove any possible state changes left
-  {
-    boost::recursive_mutex::scoped_lock lock(MoleculeMissedStateMap_mutex);
-    MoleculeMissedStateMap.erase(molid);
-  }
-
-  emit changed();
-  emit changeOccured();
+    // otherwise just note it as empty
+    EmptyMolecules.insert( std::make_pair(_mol.get(), iter->second) );
+  }
+
+//  // remove any possible state changes left
+//  {
+//    boost::recursive_mutex::scoped_lock lock(MoleculeMissedStateMap_mutex);
+//    MoleculeMissedStateMap.erase(molid);
+//  }
 }
 
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp	(revision 1187c54972b86c05d22e6c40e217c82f0d98ed65)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp	(revision 0824dd198ecf3d9295689829ad5f5377ecad4aae)
@@ -141,4 +141,6 @@
   //!> set of all currently removed molecules
   RemovedMoleculesMap_t RemovedMolecules;
+  //!> set of all currently empty molecules (about to be removed)
+  RemovedMoleculesMap_t EmptyMolecules;
 
   //!> flag to indicate whether state map is currently worked on
