Index: src/UIElements/Qt4/InstanceBoard/ObservedValuesContainer.hpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/ObservedValuesContainer.hpp	(revision 5aec20876fc61913a0a9d0db96a5769b7fff9150)
+++ src/UIElements/Qt4/InstanceBoard/ObservedValuesContainer.hpp	(revision 387a84787571a9fe001752d730c47ee72648aa70)
@@ -216,4 +216,7 @@
   const onDestroy_t onDestroy;
 
+  //!> internal mutex to have atomic access to control maps
+  mutable boost::recursive_mutex atomic_mutex;
+
 private:
   /** Internal function to check whether an Observed instance identified by
Index: src/UIElements/Qt4/InstanceBoard/ObservedValuesContainer_impl.hpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/ObservedValuesContainer_impl.hpp	(revision 5aec20876fc61913a0a9d0db96a5769b7fff9150)
+++ src/UIElements/Qt4/InstanceBoard/ObservedValuesContainer_impl.hpp	(revision 387a84787571a9fe001752d730c47ee72648aa70)
@@ -18,4 +18,6 @@
 
 #include "CodePatterns/Assert.hpp"
+
+#include <boost/thread/recursive_mutex.hpp>
 
 template <class T, typename id>
@@ -32,4 +34,5 @@
 ObservedValuesContainer<T,id>::~ObservedValuesContainer()
 {
+  boost::recursive_mutex::scoped_lock lock(atomic_mutex);
   for (typename CountedObservedValues_t::iterator iter = ObservedValues.begin();
       iter != ObservedValues.end(); ++iter) {
@@ -47,4 +50,5 @@
 typename T::ptr ObservedValuesContainer<T,id>::get(const id _id)
 {
+  boost::recursive_mutex::scoped_lock lock(atomic_mutex);
   LOG(3, "DEBUG: ObservedValuesContainer got get() for an observed value of "
       << NameOfType << " " << _id);
@@ -60,4 +64,5 @@
     const id _id)
 {
+  boost::recursive_mutex::scoped_lock lock(atomic_mutex);
   LOG(3, "DEBUG: ObservedValuesContainer got markObservedValuesAsConnected() for an observed value of "
       << NameOfType << " " << _id);
@@ -73,4 +78,5 @@
     const id _id) const
 {
+  boost::recursive_mutex::scoped_lock lock(atomic_mutex);
   typename CountedObservedValues_t::const_iterator iter = ObservedValues.find(_id);
   return ((iter != ObservedValues.end()) && (iter->second.getEraseCandidate().second == 0));
@@ -81,4 +87,5 @@
     const id _id)
 {
+  boost::recursive_mutex::scoped_lock lock(atomic_mutex);
   LOG(3, "DEBUG: ObservedValuesContainer got markObservedValuesAsDisconnected() for an observed value of "
       << NameOfType << " " << _id);
@@ -100,4 +107,5 @@
     const id _id) const
 {
+  boost::recursive_mutex::scoped_lock lock(atomic_mutex);
   typename subjectKilledCount_t::const_iterator iter = subjectKilledCount.find(_id);
   return ((iter != subjectKilledCount.end()) && (iter->second == T::MAX_ObservedTypes));
@@ -107,4 +115,5 @@
 void ObservedValuesContainer<T,id>::countsubjectKilled(const id _id)
 {
+  boost::recursive_mutex::scoped_lock lock(atomic_mutex);
   LOG(3, "DEBUG: ObservedValuesContainer got subjectKilled() for an observed value of "
       << NameOfType << " " << _id);
@@ -127,4 +136,5 @@
 void ObservedValuesContainer<T,id>::removeObservedValues(const id _id)
 {
+  boost::recursive_mutex::scoped_lock lock(atomic_mutex);
   LOG(3, "DEBUG: ObservedValuesContainer removes " << NameOfType << " " << _id);
   // call callback function
@@ -141,4 +151,5 @@
 void ObservedValuesContainer<T,id>::eraseObservedValues(const id _id)
 {
+  boost::recursive_mutex::scoped_lock lock(atomic_mutex);
 #ifndef NDEBUG
   std::pair< typename std::set<id>::iterator, bool > inserter =
@@ -156,4 +167,5 @@
 bool ObservedValuesContainer<T,id>::checkMarkedForErase(const id _id) const
 {
+  boost::recursive_mutex::scoped_lock lock(atomic_mutex);
   return MarkedForErase.count(_id);
 }
@@ -162,4 +174,5 @@
 void ObservedValuesContainer<T,id>::insert(const id _id, const typename T::ptr &_obsvalues)
 {
+  boost::recursive_mutex::scoped_lock lock(atomic_mutex);
   typename ObservedValuesContainer<T,id>::RefCountedObserved::Value_t value(std::make_pair(_obsvalues,0));
   typename CountedObservedValues_t::iterator iter = ObservedValues.find(_id);
@@ -184,4 +197,5 @@
 bool ObservedValuesContainer<T,id>::changeIdentifier(const id _oldid, const id _newid)
 {
+  boost::recursive_mutex::scoped_lock lock(atomic_mutex);
   const typename CountedObservedValues_t::iterator Colditer = ObservedValues.find(_oldid);
   const typename CountedObservedValues_t::iterator Cnewiter = ObservedValues.find(_newid);
@@ -222,4 +236,5 @@
 bool ObservedValuesContainer<T,id>::isPresent(const id _id) const
 {
+  boost::recursive_mutex::scoped_lock lock(atomic_mutex);
   typename CountedObservedValues_t::const_iterator iter = ObservedValues.find(_id);
   return (iter != ObservedValues.end());
