Index: src/UIElements/Qt4/InstanceBoard/ObservedValue_wCallback.hpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/ObservedValue_wCallback.hpp	(revision b2c2e4f3957f35f792eec4674734751c82230bcb)
+++ src/UIElements/Qt4/InstanceBoard/ObservedValue_wCallback.hpp	(revision 04c3a3bef347017439e9f064f0b080ae18219eab)
@@ -43,4 +43,5 @@
         signedOnChannels(std::max((size_t)1,_channels.size())),
         callback(_callback),
+        CallbackIsGone(false),
         getId(_getId)
   {}
@@ -48,12 +49,21 @@
   {}
 
+  /** Function is called by callback owner to inform about its destruction.
+   *
+   * \note callback must not be used after this
+   */
+  void noteCallBackIsGone()
+  { CallbackIsGone = true; }
+
 protected:
   virtual void subjectKilled(Observable *publisher)
   {
-    ObservedValue<T>::subjectKilled(publisher);
     ASSERT(signedOnChannels > 0,
         "ObservedValue_wCallback::subjectKilled() - signedOnChannels is already zero.");
-    if ((--signedOnChannels) == 0)
-      callback(getId());
+    if ((--signedOnChannels) == 0) {
+      ObservedValue<T>::subjectKilled(publisher);
+      if (!CallbackIsGone)
+        callback(getId());
+    }
   }
 
@@ -63,4 +73,7 @@
   //!> callback function to tell other entity about subjectKilled
   const boost::function<void(const id)> callback;
+  //!> is callback still alive or not
+  bool CallbackIsGone;
+  //!> callback function to get id
   const boost::function<const id()> getId;
 };
@@ -94,4 +107,5 @@
         signedOnChannels(std::max((size_t)1,_channels.size())),
         callback(_callback),
+        CallbackIsGone(false),
         getId(_getId)
   {}
@@ -106,8 +120,16 @@
         signedOnChannels(std::max((size_t)1,_channels.size())),
         callback(_callback),
+        CallbackIsGone(false),
         getId(boost::bind(&ObservedValue<T>::get, this))
   {}
   virtual ~ObservedValue_wCallback()
   {}
+
+  /** Function is called by callback owner to inform about its destruction.
+   *
+   * \note callback must not be used after this
+   */
+  void noteCallBackIsGone()
+  { CallbackIsGone = true; }
 
 protected:
@@ -118,5 +140,7 @@
         "ObservedValue_wCallback::subjectKilled() - signedOnChannels is already zero.");
     if ((--signedOnChannels) == 0)
-      callback(getId());
+      ObservedValue<T>::subjectKilled(publisher);
+      if (!CallbackIsGone)
+        callback(getId());
   }
 
@@ -126,4 +150,7 @@
   //!> callback function to tell other entity about subjectKilled
   const boost::function<void(const T)> callback;
+  //!> is callback still alive or not
+  bool CallbackIsGone;
+  //!> callback function to get id
   const boost::function<const T()> getId;
 };
Index: src/UIElements/Qt4/InstanceBoard/ObservedValuesContainer.hpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/ObservedValuesContainer.hpp	(revision b2c2e4f3957f35f792eec4674734751c82230bcb)
+++ src/UIElements/Qt4/InstanceBoard/ObservedValuesContainer.hpp	(revision 04c3a3bef347017439e9f064f0b080ae18219eab)
@@ -48,4 +48,9 @@
       QtObservedInstanceBoard &_board,
       const onDestroy_t _onDestroy);
+
+  /** Destor of class ObservedValuesContainer.
+   *
+   */
+  ~ObservedValuesContainer();
 
   /** Delivers the set of Observed value for the instance identified by \a _id.
Index: src/UIElements/Qt4/InstanceBoard/ObservedValuesContainer_impl.hpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/ObservedValuesContainer_impl.hpp	(revision b2c2e4f3957f35f792eec4674734751c82230bcb)
+++ src/UIElements/Qt4/InstanceBoard/ObservedValuesContainer_impl.hpp	(revision 04c3a3bef347017439e9f064f0b080ae18219eab)
@@ -28,4 +28,12 @@
   onDestroy(_onDestroy)
 {}
+
+template <class T, typename id>
+ObservedValuesContainer<T,id>::~ObservedValuesContainer()
+{
+  for (typename CountedObservedValues_t::iterator iter = ObservedValues.begin();
+      iter != ObservedValues.end(); ++iter)
+    iter->second.first->noteBoardIsGone();
+}
 
 template <class T, typename id>
Index: src/UIElements/Qt4/InstanceBoard/QtObservedAtom.cpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/QtObservedAtom.cpp	(revision b2c2e4f3957f35f792eec4674734751c82230bcb)
+++ src/UIElements/Qt4/InstanceBoard/QtObservedAtom.cpp	(revision 04c3a3bef347017439e9f064f0b080ae18219eab)
@@ -98,4 +98,5 @@
   owner(NULL),
   board(_board),
+  BoardIsGone(false),
   ObservedValues(_ObservedValues)
 {
@@ -105,4 +106,11 @@
 QtObservedAtom::~QtObservedAtom()
 {
+  boost::any_cast<ObservedValue_wCallback<atomId_t> *>(ObservedValues[AtomIndex])->noteCallBackIsGone();
+  boost::any_cast<ObservedValue_wCallback<ListOfBonds_t, atomId_t> *>(ObservedValues[AtomBonds])->noteCallBackIsGone();
+  boost::any_cast<ObservedValue_wCallback<atomicNumber_t, atomId_t> *>(ObservedValues[AtomElement])->noteCallBackIsGone();
+  boost::any_cast<ObservedValue_wCallback<moleculeId_t, atomId_t> *>(ObservedValues[AtomMoleculeIndex])->noteCallBackIsGone();
+  boost::any_cast<ObservedValue_wCallback<std::string, atomId_t> *>(ObservedValues[AtomName])->noteCallBackIsGone();
+  boost::any_cast<ObservedValue_wCallback<Vector, atomId_t> *>(ObservedValues[AtomPosition])->noteCallBackIsGone();
+
   deactivateObserver();
 }
@@ -201,5 +209,6 @@
     owner = NULL;
 
-    board.markObservedAtomAsDisconnected(getAtomIndex());
+    if (!BoardIsGone)
+      board.markObservedAtomAsDisconnected(getAtomIndex());
 
     emit atomRemoved();
@@ -246,6 +255,8 @@
         iter != channels.end(); ++iter)
       owner->signOn(this, *iter);
+    if (!BoardIsGone)
+      board.markObservedAtomAsConnected(getAtomIndex());
   } else
-    signedOffChannels = getAllObservedChannels().size();
+    signedOffChannels = AllsignedOnChannels;
 }
 
@@ -260,5 +271,6 @@
     owner = NULL;
     signedOffChannels = AllsignedOnChannels;
-    board.markObservedAtomAsDisconnected(getAtomIndex());
+    if (!BoardIsGone)
+      board.markObservedAtomAsDisconnected(getAtomIndex());
   }
 }
Index: src/UIElements/Qt4/InstanceBoard/QtObservedAtom.hpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/QtObservedAtom.hpp	(revision b2c2e4f3957f35f792eec4674734751c82230bcb)
+++ src/UIElements/Qt4/InstanceBoard/QtObservedAtom.hpp	(revision 04c3a3bef347017439e9f064f0b080ae18219eab)
@@ -191,4 +191,11 @@
       std::vector<boost::any> &_ObservedValues);
 
+  /** Function is called by InstanceBoard to inform about its destruction.
+   *
+   * \note callbacks must not be used after this
+   */
+  void noteBoardIsGone()
+  { BoardIsGone = true; }
+
   //!> counts how many ObservedValues have already been subjectKilled()
   mutable size_t subjectKilledCount;
@@ -221,4 +228,7 @@
   QtObservedInstanceBoard & board;
 
+  //!> is board still alive or not, impacts callbacks
+  bool BoardIsGone;
+
   //!> internal reference to ObservedValues held by QtObservedInstanceBoard
   ObservedValues_t ObservedValues;
Index: src/UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.cpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.cpp	(revision b2c2e4f3957f35f792eec4674734751c82230bcb)
+++ src/UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.cpp	(revision 04c3a3bef347017439e9f064f0b080ae18219eab)
@@ -35,4 +35,6 @@
 
 #include "QtObservedInstanceBoard.hpp"
+
+#include <QtCore/QMetaType>
 
 #include "UIElements/Qt4/InstanceBoard/QtObservedAtom.hpp"
@@ -76,4 +78,7 @@
   lastremovedmolecule((moleculeId_t)-1)
 {
+  qRegisterMetaType<QtObservedAtom::ptr>("QtObservedAtom::ptr");
+  qRegisterMetaType<QtObservedMolecule::ptr>("QtObservedMolecule::ptr");
+
   // be first (besides ObservedValues to know about new insertions)
   World::getInstance().signOn(this, World::AtomInserted, GlobalObservableInfo::PriorityLevel(int(-10)));
Index: src/UIElements/Qt4/InstanceBoard/QtObservedMolecule.cpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/QtObservedMolecule.cpp	(revision b2c2e4f3957f35f792eec4674734751c82230bcb)
+++ src/UIElements/Qt4/InstanceBoard/QtObservedMolecule.cpp	(revision 04c3a3bef347017439e9f064f0b080ae18219eab)
@@ -108,4 +108,5 @@
   owner(NULL),
   board(_board),
+  BoardIsGone(false),
   ObservedValues(_ObservedValues)
 {
@@ -115,4 +116,13 @@
 QtObservedMolecule::~QtObservedMolecule()
 {
+  boost::any_cast<ObservedValue_wCallback<moleculeId_t> *>(ObservedValues[MolIndex])->noteCallBackIsGone();
+  boost::any_cast<ObservedValue_wCallback<int, moleculeId_t> *>(ObservedValues[AtomCount])->noteCallBackIsGone();
+  boost::any_cast<ObservedValue_wCallback<int, moleculeId_t> *>(ObservedValues[BondCount])->noteCallBackIsGone();
+  boost::any_cast<ObservedValue_wCallback<molecule::BoundingBoxInfo, moleculeId_t> *>(ObservedValues[BoundingBox])->noteCallBackIsGone();
+  boost::any_cast<ObservedValue_wCallback<std::string, moleculeId_t> *>(ObservedValues[FormulaString])->noteCallBackIsGone();
+  boost::any_cast<ObservedValue_wCallback<Vector, moleculeId_t> *>(ObservedValues[MolCenter])->noteCallBackIsGone();
+  boost::any_cast<ObservedValue_wCallback<std::string, moleculeId_t> *>(ObservedValues[MolName])->noteCallBackIsGone();
+  boost::any_cast<ObservedValue_wCallback<int, moleculeId_t> *>(ObservedValues[NonHydrogenCount])->noteCallBackIsGone();
+
   deactivateObserver();
 }
@@ -127,5 +137,6 @@
     owner = NULL;
     signedOffChannels = AllsignedOnChannels;
-    board.markObservedMoleculeAsDisconnected(getMolIndex());
+    if (!BoardIsGone)
+      board.markObservedMoleculeAsDisconnected(getMolIndex());
   }
 }
@@ -141,4 +152,6 @@
         iter != channels.end(); ++iter)
       owner->signOn(this, *iter);
+    if (!BoardIsGone)
+      board.markObservedMoleculeAsConnected(getMolIndex());
   } else
     signedOffChannels = AllsignedOnChannels;
@@ -159,5 +172,6 @@
     owner = NULL;
 
-    board.markObservedMoleculeAsDisconnected(getMolIndex());
+    if (!BoardIsGone)
+      board.markObservedMoleculeAsDisconnected(getMolIndex());
 
     emit moleculeRemoved();
@@ -376,7 +390,7 @@
   delete boost::any_cast<ObservedValue_wCallback<int, moleculeId_t> *>(_ObservedValues[AtomCount]);
   delete boost::any_cast<ObservedValue_wCallback<int, moleculeId_t> *>(_ObservedValues[BondCount]);
+  delete boost::any_cast<ObservedValue_wCallback<molecule::BoundingBoxInfo, moleculeId_t> *>(_ObservedValues[BoundingBox]);
   delete boost::any_cast<ObservedValue_wCallback<std::string, moleculeId_t> *>(_ObservedValues[FormulaString]);
   delete boost::any_cast<ObservedValue_wCallback<Vector, moleculeId_t> *>(_ObservedValues[MolCenter]);
-  delete boost::any_cast<ObservedValue_wCallback<molecule::BoundingBoxInfo, moleculeId_t> *>(_ObservedValues[BoundingBox]);
   delete boost::any_cast<ObservedValue_wCallback<std::string, moleculeId_t> *>(_ObservedValues[MolName]);
   delete boost::any_cast<ObservedValue_wCallback<int, moleculeId_t> *>(_ObservedValues[NonHydrogenCount]);
Index: src/UIElements/Qt4/InstanceBoard/QtObservedMolecule.hpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/QtObservedMolecule.hpp	(revision b2c2e4f3957f35f792eec4674734751c82230bcb)
+++ src/UIElements/Qt4/InstanceBoard/QtObservedMolecule.hpp	(revision 04c3a3bef347017439e9f064f0b080ae18219eab)
@@ -188,4 +188,6 @@
   //!> enumeration of observed values to match with entries in ObservedValues
   enum ObservedTypes {
+    //!> contains the current molecule index
+    MolIndex,
     //!> contains the current molecule's atom count
     AtomCount,
@@ -198,6 +200,4 @@
     //!> contains the current molecule's center
     MolCenter,
-    //!> contains the current molecule index
-    MolIndex,
     //!> contains the current molecule name
     MolName,
@@ -228,4 +228,11 @@
       std::vector<boost::any> &_ObservedValues);
 
+  /** Function is called by InstanceBoard to inform about its destruction.
+   *
+   * \note callbacks must not be used after this
+   */
+  void noteBoardIsGone()
+  { BoardIsGone = true; }
+
   //!> counts how many ObservedValues have already been subjectKilled()
   mutable size_t subjectKilledCount;
@@ -245,4 +252,7 @@
   QtObservedInstanceBoard & board;
 
+  //!> is board still alive or not, impacts callbacks
+  bool BoardIsGone;
+
   //!> internal reference to ObservedValues held by QtObservedInstanceBoard
   ObservedValues_t ObservedValues;
