Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.cpp	(revision 099f67dcc87a9df01ccc2248c45c7116c48065cb)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.cpp	(revision 026bef57c11cf9d09d87056dab378f0b357f2a4c)
@@ -78,5 +78,8 @@
 GLMoleculeObject_atom::AtomBondsChannels(getAtomBondsChannels());
 
-GLMoleculeObject_atom::GLMoleculeObject_atom(QGLSceneNode *mesh[], QObject *parent, const atomId_t _id) :
+GLMoleculeObject_atom::GLMoleculeObject_atom(
+    QGLSceneNode *mesh[],
+    QObject *parent,
+    const atomId_t _id) :
   GLMoleculeObject(mesh, parent),
   Observer(std::string("GLMoleculeObject_atom")+toString(_id)),
@@ -86,8 +89,28 @@
   owner(NULL)
 {
-  boost::function<void()> subjectKilled =
-      boost::bind(&GLMoleculeObject_atom::countsubjectKilled, this);
+  boost::function<void(const atomId_t)> subjectKilled =
+      boost::bind(&GLMoleculeObject_atom::countsubjectKilled, this, _id);
   initObservedValues(ObservedValues, _id, atomref, subjectKilled);
 
+  init(_id);
+}
+
+GLMoleculeObject_atom::GLMoleculeObject_atom(
+    QGLSceneNode *mesh[],
+    QObject *parent,
+    const atomId_t _id,
+    std::vector<boost::any> _ObservedValues) :
+  GLMoleculeObject(mesh, parent),
+  Observer(std::string("GLMoleculeObject_atom")+toString(_id)),
+  atomref(getAtom(_id)),
+  ObservedValues(_ObservedValues),
+  subjectKilledCount(0),
+  owner(NULL)
+{
+  init(_id);
+}
+
+void GLMoleculeObject_atom::init(const atomId_t _id)
+{
   setObjectId(_id);
   resetPosition();
@@ -317,5 +340,5 @@
   deactivateObserver();
 
-  countsubjectKilled();
+  countsubjectKilled(getAtomIndex());
 }
 
@@ -348,5 +371,5 @@
 }
 
-void GLMoleculeObject_atom::countsubjectKilled()
+void GLMoleculeObject_atom::countsubjectKilled(const atomId_t)
 {
   ++subjectKilledCount;
@@ -360,5 +383,5 @@
     const atomId_t _id,
     const atom * const _atomref,
-    const boost::function<void()> &_subjectKilled)
+    const boost::function<void(const atomId_t)> &_subjectKilled)
 {
   /* This is an old note from when the code was still part of cstor's initializer body.
@@ -399,5 +422,5 @@
       boost::bind(&GLMoleculeObject_atom::updateBonds, AtomIndexGetter));
 
-  _ObservedValues[AtomPosition] = new ObservedValue_wCallback<Vector>(
+  _ObservedValues[AtomPosition] = new ObservedValue_wCallback<Vector, atomId_t>(
       _atomref,
       AtomPositionUpdater,
@@ -405,6 +428,7 @@
       AtomPositionUpdater(),
       AtomPositionChannels,
-      _subjectKilled);
-  _ObservedValues[AtomElement] = new ObservedValue_wCallback<atomicNumber_t>(
+      _subjectKilled,
+      AtomIndexGetter);
+  _ObservedValues[AtomElement] = new ObservedValue_wCallback<atomicNumber_t, atomId_t>(
       _atomref,
       AtomElementUpdater,
@@ -412,6 +436,7 @@
       AtomElementUpdater(),
       AtomElementChannels,
-      _subjectKilled);
-  _ObservedValues[AtomBonds] = new ObservedValue_wCallback<ListOfBonds_t>(
+      _subjectKilled,
+      AtomIndexGetter);
+  _ObservedValues[AtomBonds] = new ObservedValue_wCallback<ListOfBonds_t, atomId_t>(
       _atomref,
       AtomBondsUpdater,
@@ -419,5 +444,6 @@
       AtomBondsUpdater(),
       AtomBondsChannels,
-      _subjectKilled);
+      _subjectKilled,
+      AtomIndexGetter);
 }
 
@@ -426,7 +452,7 @@
 {
   delete boost::any_cast<ObservedValue_wCallback<atomId_t> *>(_ObservedValues[AtomIndex]);
-  delete boost::any_cast<ObservedValue_wCallback<Vector> *>(_ObservedValues[AtomPosition]);
-  delete boost::any_cast<ObservedValue_wCallback<atomicNumber_t> *>(_ObservedValues[AtomElement]);
-  delete boost::any_cast<ObservedValue_wCallback<ListOfBonds_t> *>(_ObservedValues[AtomBonds]);
+  delete boost::any_cast<ObservedValue_wCallback<Vector, atomId_t> *>(_ObservedValues[AtomPosition]);
+  delete boost::any_cast<ObservedValue_wCallback<atomicNumber_t, atomId_t> *>(_ObservedValues[AtomElement]);
+  delete boost::any_cast<ObservedValue_wCallback<ListOfBonds_t, atomId_t> *>(_ObservedValues[AtomBonds]);
   _ObservedValues.clear();
 }
@@ -439,14 +465,14 @@
 Vector GLMoleculeObject_atom::getAtomPosition() const
 {
-  return boost::any_cast<ObservedValue_wCallback<Vector> *>(ObservedValues[AtomPosition])->get();
+  return boost::any_cast<ObservedValue_wCallback<Vector, atomId_t> *>(ObservedValues[AtomPosition])->get();
 }
 
 atomicNumber_t GLMoleculeObject_atom::getAtomElement() const
 {
-  return boost::any_cast<ObservedValue_wCallback<atomicNumber_t> *>(ObservedValues[AtomElement])->get();
+  return boost::any_cast<ObservedValue_wCallback<atomicNumber_t, atomId_t> *>(ObservedValues[AtomElement])->get();
 }
 
 GLMoleculeObject_atom::ListOfBonds_t GLMoleculeObject_atom::getAtomBonds() const
 {
-  return boost::any_cast<ObservedValue_wCallback<ListOfBonds_t> *>(ObservedValues[AtomBonds])->get();
-}
+  return boost::any_cast<ObservedValue_wCallback<ListOfBonds_t, atomId_t> *>(ObservedValues[AtomBonds])->get();
+}
Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.hpp	(revision 099f67dcc87a9df01ccc2248c45c7116c48065cb)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.hpp	(revision 026bef57c11cf9d09d87056dab378f0b357f2a4c)
@@ -34,5 +34,15 @@
   Q_OBJECT
 public:
-  GLMoleculeObject_atom(QGLSceneNode *mesh[], QObject *parent, const atomId_t id);
+  GLMoleculeObject_atom(
+      QGLSceneNode *mesh[],
+      QObject *parent,
+      const atomId_t id
+      );
+  GLMoleculeObject_atom(
+      QGLSceneNode *mesh[],
+      QObject *parent,
+      const atomId_t id,
+      std::vector<boost::any> _ObservedValues
+      );
   virtual ~GLMoleculeObject_atom();
 
@@ -86,4 +96,6 @@
   void activateObserver();
   void deactivateObserver();
+
+  void init(const atomId_t _id);
 
 private:
@@ -126,5 +138,5 @@
       const atomId_t _id,
       const atom * const _atomref,
-      const boost::function<void()> &_subjectKilled);
+      const boost::function<void(const atomId_t)> &_subjectKilled);
 
   /** Destroys all \a ObservedValues entries.
@@ -165,6 +177,7 @@
    * monitored Observable. Only then can we safely remove the instance.
    *
-   */
-  void countsubjectKilled();
+   * \param _atomid id of atom who signalled subjectKilled()
+   */
+  void countsubjectKilled(const atomId_t _atomid);
 
   //!> counts how many ObservedValues have already been subjectKilled()
Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_bond.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_bond.cpp	(revision 099f67dcc87a9df01ccc2248c45c7116c48065cb)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_bond.cpp	(revision 026bef57c11cf9d09d87056dab378f0b357f2a4c)
@@ -89,8 +89,58 @@
   rightobservable_enabled(false)
 {
-  boost::function<void()> subjectKilled =
-      boost::bind(&GLMoleculeObject_bond::countsubjectKilled, this);
-  initObservedValues(ObservedValues, bondIds.first, bondIds.second, leftowner, rightowner, bondowner, subjectKilled);
-
+  boost::function<void(const atomId_t &)> leftsubjectKilled =
+      boost::bind(
+          static_cast<void (GLMoleculeObject_bond::*) (const atomId_t &)>(
+              &GLMoleculeObject_bond::countsubjectKilled),
+          this, _1);
+  boost::function<void(const atomId_t &)> rightsubjectKilled =
+      boost::bind(
+          static_cast<void (GLMoleculeObject_bond::*) (const atomId_t &)>(
+              &GLMoleculeObject_bond::countsubjectKilled)
+              , this, _1);
+  boost::function<void(const bondIds_t &)> bondsubjectKilled =
+      boost::bind(
+          static_cast<void (GLMoleculeObject_bond::*) (const bondIds_t &)>(
+              &GLMoleculeObject_bond::countsubjectKilled)
+              , this, _1);
+  initObservedValues(
+      ObservedValues,
+      bondIds.first,
+      bondIds.second,
+      leftowner,
+      rightowner,
+      bondowner,
+      leftsubjectKilled,
+      rightsubjectKilled,
+      bondsubjectKilled);
+
+  init();
+}
+
+GLMoleculeObject_bond::GLMoleculeObject_bond(
+    QGLSceneNode *mesh[],
+    QObject *parent,
+    const bondIds_t bondIds,
+    const enum SideOfBond side,
+    std::vector<boost::any> &_ObservedValues) :
+  GLMoleculeObject(mesh, parent),
+  Observer(std::string("GLMoleculeObject_bond")
+      +toString(bondIds.first)
+      +std::string("-")
+      +toString(bondIds.second)),
+  leftowner(getAtomConst(bondIds.first)),
+  rightowner(getAtomConst(bondIds.second)),
+  bondowner(getAtomConst(bondIds.first)->getBond(getAtomConst(bondIds.second)).get()),
+  BondSide(side),
+  ObservedValues(_ObservedValues),
+  subjectKilledCount(0),
+  leftobservable_enabled(false),
+  rightobservable_enabled(false)
+{
+  init();
+}
+
+void GLMoleculeObject_bond::init()
+{
   // sign on as observer (obtain non-const instance before)
   bondowner->signOn(this, BondObservable::BondRemoved);
@@ -159,5 +209,5 @@
   removeChannels();
   // check whether we should be removed
-  countsubjectKilled();
+  countsubjectKilled(std::make_pair(getleftIndex(), getrightIndex()));
 }
 
@@ -339,4 +389,11 @@
 }
 
+static GLMoleculeObject_bond::bondIds_t getBondIdsForIds(
+    const boost::function<const atomId_t ()> _left,
+    const boost::function<const atomId_t ()> _right)
+{
+  return std::make_pair( _left(), _right());
+}
+
 void GLMoleculeObject_bond::initObservedValues(
     std::vector<boost::any> &_ObservedValues,
@@ -346,5 +403,7 @@
     const Observable * const _rightowner,
     const Observable * const _bondowner,
-    const boost::function<void()> &_subjectKilled)
+    const boost::function<void(const atomId_t &)> &_leftsubjectKilled,
+    const boost::function<void(const atomId_t &)> &_rightsubjectKilled,
+    const boost::function<void(const bondIds_t &)> &_bondsubjectKilled)
 {
   /* This is an old note from when the code was still part of cstor's initializer body.
@@ -372,5 +431,5 @@
         _leftatomId,
         IndexChannels,
-        _subjectKilled);
+        _leftsubjectKilled);
   _ObservedValues[leftIndex] = LeftIndexObservable;
   ObservedValue_wCallback<atomId_t> * const RightIndexObservable =
@@ -381,5 +440,5 @@
         _rightatomId,
         IndexChannels,
-        _subjectKilled);
+        _rightsubjectKilled);
   _ObservedValues[rightIndex] = RightIndexObservable;
 
@@ -402,6 +461,8 @@
   const boost::function<int ()> DegreeUpdater(
       boost::bind(&GLMoleculeObject_bond::updateDegree, LeftIndexGetter, RightIndexGetter));
-
-  _ObservedValues[leftPosition] = new ObservedValue_wCallback<Vector>(
+  const boost::function<bondIds_t ()> BondIdGetter(
+      boost::bind(&getBondIdsForIds, LeftIndexGetter, RightIndexGetter));
+
+  _ObservedValues[leftPosition] = new ObservedValue_wCallback<Vector, atomId_t>(
       _leftowner,
       LeftPositionUpdater,
@@ -409,6 +470,7 @@
       LeftPositionUpdater(),
       BondPositionChannels,
-      _subjectKilled);
-  _ObservedValues[rightPosition] = new ObservedValue_wCallback<Vector>(
+      _leftsubjectKilled,
+      LeftIndexGetter);
+  _ObservedValues[rightPosition] = new ObservedValue_wCallback<Vector, atomId_t>(
       _rightowner,
       RightPositionUpdater,
@@ -416,6 +478,7 @@
       RightPositionUpdater(),
       BondPositionChannels,
-      _subjectKilled);
-  _ObservedValues[leftElement] = new ObservedValue_wCallback<atomicNumber_t>(
+      _rightsubjectKilled,
+      RightIndexGetter);
+  _ObservedValues[leftElement] = new ObservedValue_wCallback<atomicNumber_t, atomId_t>(
       _leftowner,
       LeftElementUpdater,
@@ -423,6 +486,7 @@
       LeftElementUpdater(),
       BondElementChannels,
-      _subjectKilled);
-  _ObservedValues[rightElement] = new ObservedValue_wCallback<atomicNumber_t>(
+      _leftsubjectKilled,
+      LeftIndexGetter);
+  _ObservedValues[rightElement] = new ObservedValue_wCallback<atomicNumber_t, atomId_t>(
       _rightowner,
       RightElementUpdater,
@@ -430,6 +494,7 @@
       RightElementUpdater(),
       BondElementChannels,
-      _subjectKilled);
-  _ObservedValues[Degree] = new ObservedValue_wCallback<int>(
+      _rightsubjectKilled,
+      RightIndexGetter);
+  _ObservedValues[Degree] = new ObservedValue_wCallback<int, bondIds_t>(
       _bondowner,
       DegreeUpdater,
@@ -437,5 +502,6 @@
       DegreeUpdater(),
       BondDegreeChannels,
-      _subjectKilled);
+      _bondsubjectKilled,
+      BondIdGetter);
 }
 
@@ -445,9 +511,9 @@
   delete boost::any_cast<ObservedValue_wCallback<atomId_t> *>(_ObservedValues[leftIndex]);
   delete boost::any_cast<ObservedValue_wCallback<atomId_t> *>(_ObservedValues[rightIndex]);
-  delete boost::any_cast<ObservedValue_wCallback<Vector> *>(_ObservedValues[leftPosition]);
-  delete boost::any_cast<ObservedValue_wCallback<Vector> *>(_ObservedValues[rightPosition]);
-  delete boost::any_cast<ObservedValue_wCallback<atomicNumber_t> *>(_ObservedValues[leftElement]);
-  delete boost::any_cast<ObservedValue_wCallback<atomicNumber_t> *>(_ObservedValues[rightElement]);
-  delete boost::any_cast<ObservedValue_wCallback<int> *>(_ObservedValues[Degree]);
+  delete boost::any_cast<ObservedValue_wCallback<Vector,atomId_t> *>(_ObservedValues[leftPosition]);
+  delete boost::any_cast<ObservedValue_wCallback<Vector,atomId_t> *>(_ObservedValues[rightPosition]);
+  delete boost::any_cast<ObservedValue_wCallback<atomicNumber_t,atomId_t> *>(_ObservedValues[leftElement]);
+  delete boost::any_cast<ObservedValue_wCallback<atomicNumber_t,atomId_t> *>(_ObservedValues[rightElement]);
+  delete boost::any_cast<ObservedValue_wCallback<int, bondIds_t> *>(_ObservedValues[Degree]);
   _ObservedValues.clear();
 }
@@ -465,24 +531,24 @@
 Vector GLMoleculeObject_bond::getleftPosition() const
 {
-  return boost::any_cast<ObservedValue_wCallback<Vector> *>(ObservedValues[leftPosition])->get();
+  return boost::any_cast<ObservedValue_wCallback<Vector,atomId_t> *>(ObservedValues[leftPosition])->get();
 }
 
 Vector GLMoleculeObject_bond::getrightPosition() const
 {
-  return boost::any_cast<ObservedValue_wCallback<Vector> *>(ObservedValues[rightPosition])->get();
+  return boost::any_cast<ObservedValue_wCallback<Vector, atomId_t> *>(ObservedValues[rightPosition])->get();
 }
 
 atomicNumber_t GLMoleculeObject_bond::getleftElement() const
 {
-  return boost::any_cast<ObservedValue_wCallback<atomicNumber_t> *>(ObservedValues[leftElement])->get();
+  return boost::any_cast<ObservedValue_wCallback<atomicNumber_t, atomId_t> *>(ObservedValues[leftElement])->get();
 }
 
 atomicNumber_t GLMoleculeObject_bond::getrightElement() const
 {
-  return boost::any_cast<ObservedValue_wCallback<atomicNumber_t> *>(ObservedValues[rightElement])->get();
+  return boost::any_cast<ObservedValue_wCallback<atomicNumber_t, atomId_t> *>(ObservedValues[rightElement])->get();
 }
 
 int GLMoleculeObject_bond::getDegree() const
 {
-  return boost::any_cast<ObservedValue_wCallback<int> *>(ObservedValues[Degree])->get();
-}
+  return boost::any_cast<ObservedValue_wCallback<int, bondIds_t> *>(ObservedValues[Degree])->get();
+}
Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_bond.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_bond.hpp	(revision 099f67dcc87a9df01ccc2248c45c7116c48065cb)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_bond.hpp	(revision 026bef57c11cf9d09d87056dab378f0b357f2a4c)
@@ -39,5 +39,15 @@
   typedef std::pair<atomId_t, atomId_t> bondIds_t;
 
-  GLMoleculeObject_bond(QGLSceneNode *mesh[], QObject *parent, const bondIds_t bondIds, const enum SideOfBond side);
+  GLMoleculeObject_bond(
+      QGLSceneNode *mesh[],
+      QObject *parent,
+      const bondIds_t bondIds,
+      const enum SideOfBond side);
+  GLMoleculeObject_bond(
+      QGLSceneNode *mesh[],
+      QObject *parent,
+      const bondIds_t bondIds,
+      const enum SideOfBond side,
+      std::vector<boost::any> &_ObservedValues);
   virtual ~GLMoleculeObject_bond();
 
@@ -73,4 +83,7 @@
 
 private:
+
+  void init();
+
   void removeChannels();
 
@@ -136,5 +149,7 @@
    * \param _rightowner reference to right atom
    * \param _bondowner reference to bond
-   * \param _subjectKilled ref to function to call on subjectKilled()
+   * \param _leftsubjectKilled ref to function to call on subjectKilled() for left atom
+   * \param _rightsubjectKilled ref to function to call on subjectKilled() for right atom
+   * \param _bondsubjectKilled ref to function to call on subjectKilled() for bond
    */
   static void initObservedValues(
@@ -145,5 +160,7 @@
       const Observable * const _rightowner,
       const Observable * const _bondowner,
-      const boost::function<void()> &_subjectKilled);
+      const boost::function<void(const atomId_t &)> &_leftsubjectKilled,
+      const boost::function<void(const atomId_t &)> &_rightsubjectKilled,
+      const boost::function<void(const bondIds_t &)> &_bondsubjectKilled);
 
   /** Destroys all \a ObservedValues entries.
@@ -202,5 +219,18 @@
    * monitored Observable. Only then can we safely remove the instance.
    *
-   */
+   * \param _bondIds bond ids whose bond has called subjectKilled()
+   */
+  void countsubjectKilled(
+      const bondIds_t &_bondIds)
+  {
+    countsubjectKilled();
+  }
+
+  void countsubjectKilled(
+      const atomId_t &_atomid)
+  {
+    countsubjectKilled();
+  }
+
   void countsubjectKilled();
 
Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp	(revision 099f67dcc87a9df01ccc2248c45c7116c48065cb)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp	(revision 026bef57c11cf9d09d87056dab378f0b357f2a4c)
@@ -122,6 +122,6 @@
   hoverAtomId(-1)
 {
-  boost::function<void()> subjectKilled =
-      boost::bind(&GLMoleculeObject_molecule::countsubjectKilled, this);
+  boost::function<void(const moleculeId_t)> subjectKilled =
+      boost::bind(&GLMoleculeObject_molecule::countsubjectKilled, this, _molid);
   initObservedValues(ObservedValues, _molid, molref, subjectKilled);
 
@@ -138,5 +138,4 @@
   connect (this, SIGNAL(TesselationHullChanged()), this, SLOT(resetTesselationHull()), Qt::QueuedConnection);
   connect (this, SIGNAL(BoundingBoxChanged()), this, SLOT(resetBoundingBox()), Qt::QueuedConnection);
-  connect (this, SIGNAL(IsSelectedChanged()), this, SLOT(resetIsSelected()), Qt::QueuedConnection);
   connect (this, SIGNAL(IdChanged()), this, SLOT(resetIndex()), Qt::QueuedConnection);
   connect (this, SIGNAL(AtomInserted(const atomId_t)), this, SLOT(atomInserted(const atomId_t)), Qt::QueuedConnection);
@@ -148,5 +147,8 @@
 }
 
-GLMoleculeObject_molecule::GLMoleculeObject_molecule(QGLSceneNode *mesh[], QObject *parent, const moleculeId_t _molid) :
+GLMoleculeObject_molecule::GLMoleculeObject_molecule(
+    QGLSceneNode *mesh[],
+    QObject *parent,
+    const moleculeId_t _molid) :
   GLMoleculeObject(mesh, parent),
   Observer(std::string("GLMoleculeObject_molecule")+toString(_molid)),
@@ -169,6 +171,6 @@
   hoverAtomId(-1)
 {
-  boost::function<void()> subjectKilled =
-      boost::bind(&GLMoleculeObject_molecule::countsubjectKilled, this);
+  boost::function<void(const moleculeId_t)> subjectKilled =
+      boost::bind(&GLMoleculeObject_molecule::countsubjectKilled, this, _molid);
   initObservedValues(ObservedValues, _molid, molref, subjectKilled);
 
@@ -480,5 +482,5 @@
   owner = NULL;
 
-  countsubjectKilled();
+  countsubjectKilled(getMolIndex());
 }
 
@@ -844,5 +846,5 @@
 }
 
-void GLMoleculeObject_molecule::countsubjectKilled()
+void GLMoleculeObject_molecule::countsubjectKilled(const moleculeId_t)
 {
   ++subjectKilledCount;
@@ -856,5 +858,5 @@
     const moleculeId_t _molid,
     const molecule * const _molref,
-    const boost::function<void()> &_subjectKilled)
+    const boost::function<void(const moleculeId_t)> &_subjectKilled)
 {
   /* This is an old note from when the code was still part of cstor's initializer body.
@@ -893,5 +895,5 @@
       boost::bind(&GLMoleculeObject_molecule::updateBoundingBox, MolIndexGetter));
 
-  _ObservedValues[MolName] = new ObservedValue_wCallback<std::string>(
+  _ObservedValues[MolName] = new ObservedValue_wCallback<std::string, moleculeId_t>(
       _molref,
       MolNameUpdater,
@@ -899,6 +901,7 @@
       MolNameUpdater(),
       NameChannels,
-      _subjectKilled);
-  _ObservedValues[BoundingBox] = new ObservedValue_wCallback<molecule::BoundingBoxInfo>(
+      _subjectKilled,
+      MolIndexGetter);
+  _ObservedValues[BoundingBox] = new ObservedValue_wCallback<molecule::BoundingBoxInfo, moleculeId_t>(
       _molref,
       BoundingBoxUpdater,
@@ -906,5 +909,6 @@
       initBoundingBox(),
       BoundingBoxChannels,
-      _subjectKilled);
+      _subjectKilled,
+      MolIndexGetter);
   _ObservedValues[PresentAtoms] = new ObservedValue_UpdateAtoms(
       _molref,
@@ -919,6 +923,6 @@
 {
   delete boost::any_cast<ObservedValue_wCallback<moleculeId_t> *>(_ObservedValues[MolIndex]);
-  delete boost::any_cast<ObservedValue_wCallback<std::string> *>(_ObservedValues[MolName]);
-  delete boost::any_cast<ObservedValue_wCallback<molecule::BoundingBoxInfo> *>(_ObservedValues[BoundingBox]);
+  delete boost::any_cast<ObservedValue_wCallback<std::string, moleculeId_t> *>(_ObservedValues[MolName]);
+  delete boost::any_cast<ObservedValue_wCallback<molecule::BoundingBoxInfo, moleculeId_t> *>(_ObservedValues[BoundingBox]);
   delete boost::any_cast<ObservedValue_UpdateAtoms *>(_ObservedValues[PresentAtoms]);
   _ObservedValues.clear();
@@ -932,10 +936,10 @@
 std::string GLMoleculeObject_molecule::getMolName() const
 {
-  return boost::any_cast<ObservedValue_wCallback<std::string> *>(ObservedValues[MolName])->get();
+  return boost::any_cast<ObservedValue_wCallback<std::string, moleculeId_t> *>(ObservedValues[MolName])->get();
 }
 
 molecule::BoundingBoxInfo GLMoleculeObject_molecule::getBoundingBox() const
 {
-  return boost::any_cast<ObservedValue_wCallback<molecule::BoundingBoxInfo> *>(ObservedValues[BoundingBox])->get();
+  return boost::any_cast<ObservedValue_wCallback<molecule::BoundingBoxInfo, moleculeId_t> *>(ObservedValues[BoundingBox])->get();
 }
 
Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.hpp	(revision 099f67dcc87a9df01ccc2248c45c7116c48065cb)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.hpp	(revision 026bef57c11cf9d09d87056dab378f0b357f2a4c)
@@ -39,6 +39,11 @@
   Q_OBJECT
 public:
-  GLMoleculeObject_molecule(QObject *parent, const moleculeId_t molid);
-  GLMoleculeObject_molecule(QGLSceneNode *mesh[], QObject *parent, const moleculeId_t molid);
+  GLMoleculeObject_molecule(
+      QObject *parent,
+      const moleculeId_t molid);
+  GLMoleculeObject_molecule(
+      QGLSceneNode *mesh[],
+      QObject *parent,
+      const moleculeId_t molid);
   virtual ~GLMoleculeObject_molecule();
 
@@ -172,5 +177,5 @@
       const moleculeId_t _molid,
       const molecule * const _molref,
-      const boost::function<void()> &_subjectKilled);
+      const boost::function<void(const moleculeId_t)> &_subjectKilled);
 
   /** Destroys all \a ObservedValues entries.
@@ -211,6 +216,7 @@
    * monitored Observable. Only then can we safely remove the instance.
    *
-   */
-  void countsubjectKilled();
+   * \param _molid molecule id who signalled subjectKilled()
+   */
+  void countsubjectKilled(const moleculeId_t _molid);
 
   //!> counts how many ObservedValues have already been subjectKilled()
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision 099f67dcc87a9df01ccc2248c45c7116c48065cb)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision 026bef57c11cf9d09d87056dab378f0b357f2a4c)
@@ -90,5 +90,4 @@
     GLMoleculeObject::meshCylinder[i]->setOption(QGLSceneNode::CullBoundingBox, true);
   }
-  connect(this, SIGNAL(moleculePreparedInserted(const moleculeId_t)), this, SLOT(moleculeInserted(const moleculeId_t)));
 
 //  connect(this, SIGNAL(updated()), this, SLOT(update()));
@@ -220,22 +219,11 @@
 }
 
-/** Prepres insertion of a molecule into the scene.
- *
- * This function takes up the insertion information, i.e. a molecule has been
- * inserted and its id, and takes some immediate action (writing id into a map).
- * But the request is then transmitted indirectly (i.e. not necessarily being
- * processed in the same thread). Hence, we first take the request via a direction
- * connection in the thread where the actual World::createMolecule() was called.
- * However, the creation of the visual representation must occur in the thread
- * who also contains GLWorldScene and GLWorldView and all further parents.
- *
- * That's the reason why we split here into moleculePrepareInserted and
- * moleculeInserted.
+/** Inserts a molecule into the scene.
  *
  * @param _mol molecule to insert
  */
-void GLWorldScene::moleculePrepareInserted(const moleculeId_t _id)
-{
-  LOG(3, "INFO: GLWorldScene: Received signal moleculePrepareInserted for molecule "+toString(_id)+".");
+void GLWorldScene::moleculeInserted(const moleculeId_t _id)
+{
+  LOG(3, "INFO: GLWorldScene: Received signal moleculeInserted for molecule "+toString(_id)+".");
 
   boost::recursive_mutex::scoped_lock lock(MoleculeinSceneMap_mutex);
@@ -244,17 +232,4 @@
   ASSERT( iter == MoleculesinSceneMap.end(),
       "GLWorldScene::moleculeInserted() - molecule's id "+toString(_id)+" already present.");
-
-  emit moleculePreparedInserted(_id);
-}
-
-/** Inserts a molecule into the scene.
- *
- * \sa moleculePrepareInserted()
- *
- * @param _mol molecule to insert
- */
-void GLWorldScene::moleculeInserted(const moleculeId_t _id)
-{
-  boost::recursive_mutex::scoped_lock lock(MoleculeinSceneMap_mutex);
 
   // check whether molecule is still present
@@ -271,5 +246,6 @@
   LOG(1, "DEBUG: Adding GLMoleculeObject_molecule to id " << _id);
   GLMoleculeObject_molecule *molObject =
-      new GLMoleculeObject_molecule(GLMoleculeObject::meshEmpty, this, _id);
+      new GLMoleculeObject_molecule(
+          GLMoleculeObject::meshEmpty, this, _id);
   ASSERT( molObject != NULL,
       "GLWorldScene::moleculeInserted - could not create molecule object for "+toString(_id));
@@ -347,5 +323,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 (molObject, SIGNAL(InstanceRemoved(const moleculeId_t)), this, SLOT(moleculeRemoved(const moleculeId_t)));
 
   emit changed();
@@ -355,11 +330,9 @@
 /** Removes a molecule from the scene.
  *
- * * \sa moleculePrepareRemoved()
- *
  * @param _id id of molecule to remove
  */
 void GLWorldScene::moleculeRemoved(const moleculeId_t _id)
 {
-  LOG(3, "INFO: GLWorldScene: Received signal moleculePrepareRemoved for molecule "+toString(_id)+".");
+  LOG(3, "INFO: GLWorldScene: Received signal moleculeRemoved for molecule "+toString(_id)+".");
 
   boost::recursive_mutex::scoped_lock lock(MoleculeinSceneMap_mutex);
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp	(revision 099f67dcc87a9df01ccc2248c45c7116c48065cb)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp	(revision 026bef57c11cf9d09d87056dab378f0b357f2a4c)
@@ -82,10 +82,8 @@
   void hoverChanged(const atomId_t);
   void hoverChanged(const moleculeId_t, int);
-  void moleculePreparedInserted(const moleculeId_t _id);
 
 private slots:
   void atomClicked(atomId_t no);
   void moleculeClicked(moleculeId_t no);
-  void moleculePrepareInserted(const moleculeId_t _id);
   void moleculeRemoved(const moleculeId_t _id);
   void moleculeInserted(const moleculeId_t _id);
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp	(revision 099f67dcc87a9df01ccc2248c45c7116c48065cb)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp	(revision 026bef57c11cf9d09d87056dab378f0b357f2a4c)
@@ -90,7 +90,4 @@
   connect(worldscene, SIGNAL(hoverChanged(const atomId_t)), this, SLOT(sceneHoverSignalled(const atomId_t)));
   connect(worldscene, SIGNAL(hoverChanged(const moleculeId_t, int)), this, SLOT(sceneHoverSignalled(const moleculeId_t, int)));
-  connect(this, SIGNAL(atomRemoved(const moleculeId_t, const atomId_t)), worldscene, SLOT(atomRemoved(const moleculeId_t, const atomId_t)), Qt::DirectConnection);
-  connect(this, SIGNAL(atomInserted(const moleculeId_t, const atomId_t)), worldscene, SLOT(atomInserted(const moleculeId_t, const atomId_t)), Qt::DirectConnection);
-  connect(this, SIGNAL(moleculeInserted(const moleculeId_t)), worldscene, SLOT(moleculePrepareInserted(const moleculeId_t)), Qt::DirectConnection);
   //connect(this, SIGNAL(changed()), this, SLOT(updateGL()));
   connect(this, SIGNAL(changed()), this, SLOT(sceneChangeSignalled()));
Index: src/UIElements/Views/Qt4/Qt3D/ObservedValue_UpdateAtoms.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/ObservedValue_UpdateAtoms.hpp	(revision 099f67dcc87a9df01ccc2248c45c7116c48065cb)
+++ src/UIElements/Views/Qt4/Qt3D/ObservedValue_UpdateAtoms.hpp	(revision 026bef57c11cf9d09d87056dab378f0b357f2a4c)
@@ -34,5 +34,5 @@
  *
  */
-class ObservedValue_UpdateAtoms : public ObservedValue_wCallback< std::set<atomId_t> >
+class ObservedValue_UpdateAtoms : public ObservedValue_wCallback< std::set<atomId_t>, moleculeId_t >
 {
   typedef std::set<atomId_t> atoms_t;
@@ -43,8 +43,8 @@
     const std::string &_name,
     const Observable::channels_t &_channels,
-    const boost::function<void()> &_callback,
+    const boost::function<void(moleculeId_t)> &_callback,
     const boost::function<const moleculeId_t ()> &_getMolIndex
     ) :
-      ObservedValue_wCallback<atoms_t>(
+      ObservedValue_wCallback<atoms_t, moleculeId_t>(
           _owner,
           boost::bind(&ObservedValue_UpdateAtoms::updateAtoms,
@@ -52,5 +52,6 @@
               atoms_t(),
               _channels,
-              _callback),
+              _callback,
+              _getMolIndex),
       getMolIndex(_getMolIndex)
     {}
Index: src/UIElements/Views/Qt4/Qt3D/ObservedValue_wCallback.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/ObservedValue_wCallback.hpp	(revision 099f67dcc87a9df01ccc2248c45c7116c48065cb)
+++ src/UIElements/Views/Qt4/Qt3D/ObservedValue_wCallback.hpp	(revision 026bef57c11cf9d09d87056dab378f0b357f2a4c)
@@ -18,8 +18,13 @@
 #include "CodePatterns/Observer/Observable.hpp"
 
+#include <string>
+
+#include <boost/bind.hpp>
+#include <boost/function.hpp>
+
 /** We derive from ObservedValue in order to tell owning instance about
  * subjectKilled() having been called.
  */
-template <class T>
+template <class T, class id=T>
 class ObservedValue_wCallback : public ObservedValue<T>
 {
@@ -31,7 +36,9 @@
       const T &_initialvalue,
       const Observable::channels_t &_channels,
-      const boost::function<void()> &_callback) :
+      const boost::function<void(const id)> &_callback,
+      const boost::function<const id()> &_getId) :
         ObservedValue<T>(_owner, _recalcMethod, _name, _initialvalue, _channels),
-        callback(_callback)
+        callback(_callback),
+        getId(_getId)
   {}
   virtual ~ObservedValue_wCallback()
@@ -42,10 +49,67 @@
   {
     ObservedValue<T>::subjectKilled(publisher);
-    callback();
+    callback(getId());
   }
 
 private:
   //!> callback function to tell other entity about subjectKilled
-  const boost::function<void()> callback;
+  const boost::function<void(const id)> callback;
+  const boost::function<const id()> getId;
+};
+
+/** Specialization of ObservedValue_wCallback for the index ObservedValue.
+ *
+ * The index serves as the unique identifier for the object instance whose
+ * properties are monitored in ObservedValue. Hence, how to give a subjectKilled()
+ * with an external getId() function? For the index the ObservedValue::get() is
+ * the getId() we need to call! Hence, we may simply connect these internally
+ * in this partial template specialization.
+ *
+ * Because atomicNumber_t, atomId_t and moleculeId_t are not unique types but
+ * -- at the writing of this class -- just typedefs, we have to resort to the
+ * trick with two constructors, one taking an external getId(), the other
+ * routing the getId() internally by binding to ObservedValue<T>::get().
+ */
+template <class T>
+class ObservedValue_wCallback<T,T> : public ObservedValue<T>
+{
+public:
+  ObservedValue_wCallback(
+      const Observable * const _owner,
+      const boost::function<T()> &_recalcMethod,
+      const std::string &_name,
+      const T &_initialvalue,
+      const Observable::channels_t &_channels,
+      const boost::function<void(const T)> &_callback,
+      const boost::function<const T()> &_getId) :
+        ObservedValue<T>(_owner, _recalcMethod, _name, _initialvalue, _channels),
+        callback(_callback),
+        getId(_getId)
+  {}
+  ObservedValue_wCallback(
+      const Observable * const _owner,
+      const boost::function<T()> &_recalcMethod,
+      const std::string &_name,
+      const T &_initialvalue,
+      const Observable::channels_t &_channels,
+      const boost::function<void(const T)> &_callback) :
+        ObservedValue<T>(_owner, _recalcMethod, _name, _initialvalue, _channels),
+        callback(_callback),
+        getId(boost::bind(&ObservedValue<T>::get, this))
+  {}
+  virtual ~ObservedValue_wCallback()
+  {}
+
+protected:
+  virtual void subjectKilled(Observable *publisher)
+  {
+    ObservedValue<T>::subjectKilled(publisher);
+    callback(getId());
+  }
+
+private:
+  //!> callback function to tell other entity about subjectKilled
+  const boost::function<void(const T)> callback;
+  const boost::function<const T()> getId;
 };
 
