Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision bcf9cda81fdd86254068b3785852032702603546)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision 8b59ddd233f0c59db6375c4778cb46d1b338b803)
@@ -194,5 +194,5 @@
  * @param _atom atom to insert
  */
-void GLWorldScene::moleculesAtomInserted(QtObservedAtom::ptr _atom)
+void GLWorldScene::moleculesAtomInserted(QtObservedAtom::ptr _atom, QtObservedMolecule * _mol)
 {
   const atomId_t atomid = _atom->getAtomIndex();
@@ -202,11 +202,29 @@
   // check of molecule is already present
   boost::recursive_mutex::scoped_lock lock(MoleculeinSceneMap_mutex);
-  MoleculeNodeMap::iterator moliter = MoleculesinSceneMap.find(molid);
+  const MoleculeNodeMap::iterator moliter = MoleculesinSceneMap.find(molid);
   if (moliter != MoleculesinSceneMap.end()) {
-    LOG(3, "INFO: GLWorldScene: Sending signal moleculesAtomInserted for atom "+toString(atomid)+".");
-    QMetaObject::invokeMethod(moliter->second,        // pointer to a QObject
-                              "atomInserted",       // member name (no parameters here)
-                              Qt::QueuedConnection,     // connection type
-                              Q_ARG(QtObservedAtom::ptr, _atom));     // parameters
+    // check that it is the right molecule
+    QtObservedMolecule::ptr &checkmol = moliter->second->ObservedMolecule;
+    if (checkmol.get() == _mol) {
+      LOG(3, "INFO: GLWorldScene: Sending signal moleculesAtomInserted for atom "+toString(atomid)+".");
+      QMetaObject::invokeMethod(moliter->second,        // pointer to a QObject
+                                "atomInserted",       // member name (no parameters here)
+                                Qt::QueuedConnection,     // connection type
+                                Q_ARG(QtObservedAtom::ptr, _atom));     // parameters
+    } else {
+      // relay atomRemoved to GLMoleculeObject_molecule in RemovedMolecules
+//      LOG(3, "INFO: GLWorldScene: Sending signal moleculesAtomInserted for atom "+toString(_atomid)
+//          +" to molecule in RemovedMolecules.");
+//      const MoleculeNodeMap::iterator removedmoliter = RemovedMolecules.find(molid);
+//      ASSERT( removedmoliter != RemovedMolecules.end(),
+//          "GLWorldScene::moleculesAtomInserted() - signal from old mol "
+//          +toString(molid)+", but not present in RemovedMolecules");
+//      QMetaObject::invokeMethod(removedmoliter->second,        // pointer to a QObject
+//                                "atomInserted ",       // member name (no parameters here)
+//                                Qt::QueuedConnection,     // connection type
+//                                Q_ARG(QtObservedAtom::ptr, _atom));     // parameters
+      ASSERT( 0,
+          "GLWorldScene::moleculesAtomInserted() - would need to send atomInserted to already removed molecule.");
+    }
   } else {
     boost::recursive_mutex::scoped_lock lock(MoleculeMissedStateMap_mutex);
@@ -231,5 +249,5 @@
  * @param _atomid atom to remove
  */
-void GLWorldScene::moleculesAtomRemoved(const atomId_t _atomid)
+void GLWorldScene::moleculesAtomRemoved(const atomId_t _atomid, QtObservedMolecule * _mol)
 {
   LOG(3, "INFO: GLWorldScene: Received signal atomRemoved for atom "+toString(_atomid)+".");
@@ -241,11 +259,26 @@
     // check of molecule is already present
     boost::recursive_mutex::scoped_lock lock(MoleculeinSceneMap_mutex);
-    MoleculeNodeMap::iterator moliter = MoleculesinSceneMap.find(molid);
+    const MoleculeNodeMap::iterator moliter = MoleculesinSceneMap.find(molid);
     if (moliter != MoleculesinSceneMap.end()) {
-      LOG(3, "INFO: GLWorldScene: Sending signal moleculesAtomRemoved for atom "+toString(_atomid)+".");
-      QMetaObject::invokeMethod(moliter->second,        // pointer to a QObject
-                                "atomRemoved",       // member name (no parameters here)
-                                Qt::QueuedConnection,     // connection type
-                                Q_ARG(const atomId_t, _atomid));     // parameters
+      QtObservedMolecule::ptr &checkmol = moliter->second->ObservedMolecule;
+      if (checkmol.get() == _mol) {
+        LOG(3, "INFO: GLWorldScene: Sending signal moleculesAtomRemoved for atom "+toString(_atomid)+".");
+        QMetaObject::invokeMethod(moliter->second,        // pointer to a QObject
+                                  "atomRemoved",       // member name (no parameters here)
+                                  Qt::QueuedConnection,     // connection type
+                                  Q_ARG(const atomId_t, _atomid));     // parameters
+      } else {
+        // relay atomRemoved to GLMoleculeObject_molecule in RemovedMolecules
+        LOG(3, "INFO: GLWorldScene: Sending signal moleculesAtomRemoved for atom "+toString(_atomid)
+            +" to molecule in RemovedMolecules.");
+        const MoleculeNodeMap::iterator removedmoliter = RemovedMolecules.find(molid);
+        ASSERT( removedmoliter != RemovedMolecules.end(),
+            "GLWorldScene::moleculesAtomRemoved() - signal from old mol "
+            +toString(molid)+", but not present in RemovedMolecules");
+        QMetaObject::invokeMethod(removedmoliter->second,        // pointer to a QObject
+                                  "atomRemoved",       // member name (no parameters here)
+                                  Qt::QueuedConnection,     // connection type
+                                  Q_ARG(const atomId_t, _atomid));     // parameters
+      }
     } else {
       boost::recursive_mutex::scoped_lock lock(MoleculeMissedStateMap_mutex);
@@ -267,8 +300,8 @@
   // sign on to QtObservedMolecule to get atomInserted/..Removed signals from same
   // source as GLMoleculeObject_molecule would
-  connect(_mol.get(), SIGNAL(atomInserted(QtObservedAtom::ptr)),
-      this, SLOT(moleculesAtomInserted(QtObservedAtom::ptr)) );
-  connect(_mol.get(), SIGNAL(atomRemoved(const atomId_t)),
-      this, SLOT(moleculesAtomRemoved(const atomId_t)) );
+  connect(_mol.get(), SIGNAL(atomInserted(QtObservedAtom::ptr, QtObservedMolecule *)),
+      this, SLOT(moleculesAtomInserted(QtObservedAtom::ptr, QtObservedMolecule *)) );
+  connect(_mol.get(), SIGNAL(atomRemoved(const atomId_t, QtObservedMolecule *)),
+      this, SLOT(moleculesAtomRemoved(const atomId_t, QtObservedMolecule *)) );
   const moleculeId_t molid = _mol->getMolIndex();
   ASSERT( QtObservedMoleculeMap.find(molid) == QtObservedMoleculeMap.end(),
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp	(revision bcf9cda81fdd86254068b3785852032702603546)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp	(revision 8b59ddd233f0c59db6375c4778cb46d1b338b803)
@@ -96,6 +96,6 @@
   void moleculeSignOn(QtObservedMolecule::ptr);
   void moleculeIndexChanged(const moleculeId_t _oldid, const moleculeId_t _newid);
-  void moleculesAtomRemoved(const atomId_t _atomid);
-  void moleculesAtomInserted(QtObservedAtom::ptr);
+  void moleculesAtomRemoved(const atomId_t _atomid, QtObservedMolecule * _mol);
+  void moleculesAtomInserted(QtObservedAtom::ptr, QtObservedMolecule *_mol);
   void atomRemoved(const atomId_t _atomid);
   void atomInserted(QtObservedAtom::ptr);
