Index: src/UIElements/Qt4/InstanceBoard/ObservedValuesContainer.hpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/ObservedValuesContainer.hpp	(revision 04c3a3bef347017439e9f064f0b080ae18219eab)
+++ src/UIElements/Qt4/InstanceBoard/ObservedValuesContainer.hpp	(revision 4e6ffe2dae92054b52a94a8f11d2d364f8117035)
@@ -79,9 +79,15 @@
   void countsubjectKilled(const id _id);
 
+  /** Prepares removeal a vector of observed values of an instance  identified by \a _id.
+   *
+   * \param _id identifier of instance
+   */
+  void removeObservedValues(const id _id);
+
   /** Erases a vector of observed values of an instance  identified by \a _id.
    *
    * \param _id identifier of instance
    */
-  void removeObservedValues(const id _id);
+  void eraseObservedValues(const id _id);
 
 private:
@@ -96,4 +102,10 @@
   //!> counts how many ObservedValues have already been subjectKilled()
   subjectKilledCount_t subjectKilledCount;
+
+  //!> typedef for the set with ids to be erase
+  typedef std::set<id> MarkedForErase_t;
+
+  //!> marks ids marked for erase (i.e. all subjectKilled() received)
+  MarkedForErase_t MarkedForErase;
 
   //!> name used in describing the instance type
@@ -122,4 +134,15 @@
    */
   bool checksubjectKilled(const id _id) const;
+
+  /** Internal function to check whether the vector of ObservedValue's
+   *  identified by \a _id has been marked for erase.
+   *
+   *  Marked for erase means that it has received all subjectKilled()
+   *  (the container not the values themselves).
+   *
+   * \param _id identifier of instance
+   * \return true - marked for erase, false - else
+   */
+  bool checkMarkedForErase(const id _id) const;
 
 private:
Index: src/UIElements/Qt4/InstanceBoard/ObservedValuesContainer_impl.hpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/ObservedValuesContainer_impl.hpp	(revision 04c3a3bef347017439e9f064f0b080ae18219eab)
+++ src/UIElements/Qt4/InstanceBoard/ObservedValuesContainer_impl.hpp	(revision 4e6ffe2dae92054b52a94a8f11d2d364f8117035)
@@ -53,5 +53,7 @@
     const id _id)
 {
-  typename CountedObservedValues_t::iterator iter = ObservedValues.find(_id);
+  LOG(3, "DEBUG: ObservedValuesContainer got markObservedValuesAsConnected() for an observed value of "
+      << NameOfType << " " << _id);
+ typename CountedObservedValues_t::iterator iter = ObservedValues.find(_id);
   ASSERT (iter != ObservedValues.end(),
       "ObservedValuesContainer<T,id>::markObservedValuesAsConnected() - Observed value of "
@@ -72,4 +74,6 @@
     const id _id)
 {
+  LOG(3, "DEBUG: ObservedValuesContainer got markObservedValuesAsDisconnected() for an observed value of "
+      << NameOfType << " " << _id);
   typename CountedObservedValues_t::iterator iter = ObservedValues.find(_id);
   ASSERT (iter != ObservedValues.end(),
@@ -81,5 +85,5 @@
   --(iter->second.second);
 
-  if (checkRefCount(_id) && checksubjectKilled(_id))
+  if (checkRefCount(_id) && checksubjectKilled(_id) && checkMarkedForErase(_id))
     removeObservedValues(_id);
 }
@@ -109,5 +113,5 @@
   ++(iter->second);
 
-  if (checkRefCount(_id) && checksubjectKilled(_id))
+  if (checkRefCount(_id) && checksubjectKilled(_id) && checkMarkedForErase(_id))
     removeObservedValues(_id);
 }
@@ -121,4 +125,26 @@
   subjectKilledCount.erase(_id);
   ObservedValues.erase(_id);
+  MarkedForErase.erase(_id);
+}
+
+template <class T, typename id>
+void ObservedValuesContainer<T,id>::eraseObservedValues(const id _id)
+{
+#ifndef NDEBUG
+  std::pair< typename std::set<id>::iterator, bool > inserter =
+#endif
+  MarkedForErase.insert(_id);
+  ASSERT( inserter.second,
+      "ObservedValuesContainer<T,id>::eraseObservedValues() - received twice for "
+      +NameOfType+" "+toString(_id)+".");
+
+  if (checkRefCount(_id) && checksubjectKilled(_id) && checkMarkedForErase(_id))
+    removeObservedValues(_id);
+}
+
+template <class T, typename id>
+bool ObservedValuesContainer<T,id>::checkMarkedForErase(const id _id) const
+{
+  return MarkedForErase.count(_id);
 }
 
@@ -140,6 +166,9 @@
   const typename subjectKilledCount_t::iterator Solditer = subjectKilledCount.find(_oldid);
   const typename subjectKilledCount_t::iterator Snewiter = subjectKilledCount.find(_newid);
+  const typename MarkedForErase_t::iterator Eolditer = MarkedForErase.find(_oldid);
+  const typename MarkedForErase_t::iterator Enewiter = MarkedForErase.find(_newid);
   bool status = ((Colditer != ObservedValues.end()) && (Cnewiter == ObservedValues.end()));
   status &= ((Solditer != subjectKilledCount.end()) && (Snewiter == subjectKilledCount.end()));
+  status &= ((Eolditer != MarkedForErase.end()) && (Enewiter == MarkedForErase.end()));
   // change id here only if still present
   if (status) {
@@ -154,4 +183,8 @@
       subjectKilledCount.insert( std::make_pair(_newid, countvalue) );
     }
+    {
+      MarkedForErase.erase(Eolditer);
+      MarkedForErase.insert(_newid);
+    }
     return true;
   } else
Index: src/UIElements/Qt4/InstanceBoard/QtObservedAtom.cpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/QtObservedAtom.cpp	(revision 04c3a3bef347017439e9f064f0b080ae18219eab)
+++ src/UIElements/Qt4/InstanceBoard/QtObservedAtom.cpp	(revision 4e6ffe2dae92054b52a94a8f11d2d364f8117035)
@@ -209,8 +209,10 @@
     owner = NULL;
 
-    if (!BoardIsGone)
+    emit atomRemoved();
+
+    if (!BoardIsGone) {
       board.markObservedAtomAsDisconnected(getAtomIndex());
-
-    emit atomRemoved();
+      board.markObservedAtomForErase(getAtomIndex());
+    }
   }
 }
Index: src/UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.cpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.cpp	(revision 04c3a3bef347017439e9f064f0b080ae18219eab)
+++ src/UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.cpp	(revision 4e6ffe2dae92054b52a94a8f11d2d364f8117035)
@@ -351,4 +351,9 @@
 }
 
+void QtObservedInstanceBoard::markObservedAtomForErase(const atomId_t _id)
+{
+  atomObservedValues.eraseObservedValues(_id);
+}
+
 void QtObservedInstanceBoard::markObservedMoleculeAsConnected(const moleculeId_t _id)
 {
@@ -360,2 +365,7 @@
   moleculeObservedValues.markObservedValuesAsDisconnected(_id);
 }
+
+void QtObservedInstanceBoard::markObservedMoleculeForErase(const moleculeId_t _id)
+{
+  moleculeObservedValues.eraseObservedValues(_id);
+}
Index: src/UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.hpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.hpp	(revision 04c3a3bef347017439e9f064f0b080ae18219eab)
+++ src/UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.hpp	(revision 4e6ffe2dae92054b52a94a8f11d2d364f8117035)
@@ -83,6 +83,8 @@
   void markObservedAtomAsConnected(const atomId_t _id);
   void markObservedAtomAsDisconnected(const atomId_t _id);
+  void markObservedAtomForErase(const atomId_t _id);
   void markObservedMoleculeAsConnected(const moleculeId_t _id);
   void markObservedMoleculeAsDisconnected(const moleculeId_t _id);
+  void markObservedMoleculeForErase(const moleculeId_t _id);
 
 signals:
Index: src/UIElements/Qt4/InstanceBoard/QtObservedMolecule.cpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/QtObservedMolecule.cpp	(revision 04c3a3bef347017439e9f064f0b080ae18219eab)
+++ src/UIElements/Qt4/InstanceBoard/QtObservedMolecule.cpp	(revision 4e6ffe2dae92054b52a94a8f11d2d364f8117035)
@@ -172,8 +172,10 @@
     owner = NULL;
 
-    if (!BoardIsGone)
+    emit moleculeRemoved();
+
+    if (!BoardIsGone) {
       board.markObservedMoleculeAsDisconnected(getMolIndex());
-
-    emit moleculeRemoved();
+      board.markObservedMoleculeForErase(getMolIndex());
+    }
   }
 }
