Index: src/UIElements/Views/Qt4/QtGeometryList.cpp
===================================================================
--- src/UIElements/Views/Qt4/QtGeometryList.cpp	(revision 8f2f4eb77927bf028e9727a89c50be3bbc84ca70)
+++ src/UIElements/Views/Qt4/QtGeometryList.cpp	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -109,4 +109,6 @@
 void QtGeometryList::refill(::GeometryObject *ignore)
 {
+  boost::recursive_mutex::scoped_lock lock(refill_mutex);
+
   clear();
 
@@ -125,12 +127,11 @@
 }
 
-#if 0
 void QtGeometryList::paintEvent(QPaintEvent * event)
 {
+  boost::recursive_mutex::scoped_lock lock(refill_mutex);
   /*if (dirty)
     refill(NULL);*/
-  QtGeometryList::paintEvent(event);
+  QTreeWidget::paintEvent(event);
 }
-#endif
 
 void QtGeometryList::subjectKilled(Observable *publisher) {
@@ -151,4 +152,6 @@
 void QtGeometryList::mouseMoveFunction(QMouseEvent * event)
 {
+  boost::recursive_mutex::scoped_lock lock(refill_mutex);
+
   if (event->type() == QEvent::MouseMove) {
     QTreeWidgetItem* current = itemAt(event->pos());
Index: src/UIElements/Views/Qt4/QtGeometryList.hpp
===================================================================
--- src/UIElements/Views/Qt4/QtGeometryList.hpp	(revision 8f2f4eb77927bf028e9727a89c50be3bbc84ca70)
+++ src/UIElements/Views/Qt4/QtGeometryList.hpp	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -17,4 +17,6 @@
 #include <QtGui/QTreeWidget>
 #include <QMouseEvent>
+
+#include <boost/thread/recursive_mutex.hpp>
 
 #include "CodePatterns/Observer/Observer.hpp"
@@ -38,5 +40,5 @@
   virtual void subjectKilled(Observable *publisher);
   virtual void recieveNotification(Observable *publisher, Notification_ptr notification);
-  //virtual void paintEvent(QPaintEvent * event);
+  virtual void paintEvent(QPaintEvent * event);
   void refill(::GeometryObject *ignore);
 
@@ -45,4 +47,7 @@
   static const char *COLUMNNAMES[];
 
+private:
+
+  mutable boost::recursive_mutex refill_mutex;
 };
 
Index: src/UIElements/Views/Qt4/QtHomologyList.cpp
===================================================================
--- src/UIElements/Views/Qt4/QtHomologyList.cpp	(revision 8f2f4eb77927bf028e9727a89c50be3bbc84ca70)
+++ src/UIElements/Views/Qt4/QtHomologyList.cpp	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -108,5 +108,4 @@
 
   dirty = true;
-  clearing = false;
   
   QSettings settings;
@@ -151,12 +150,10 @@
 }
 
-void QtHomologyList::update(Observable *publisher) {
-
+void QtHomologyList::update(Observable *publisher)
+{
   dirty = true;
 
   // force an update from Qt...
-//  clearing = true;
 //  treewidget->clear();
-//  clearing = false;
   emit changed(); //doesn't work!?!
 }
@@ -164,5 +161,6 @@
 void QtHomologyList::refill()
 {
-  clearing = true;
+  boost::recursive_mutex::scoped_lock lock(refill_mutex);
+
   const HomologyContainer &homologies = World::getInstance().getHomologies();
 
@@ -290,9 +288,10 @@
   }
   dirty = false;
-  clearing = false;
 }
 
 void QtHomologyList::paintEvent(QPaintEvent * event)
 {
+  boost::recursive_mutex::scoped_lock lock(refill_mutex);
+
   if (dirty)
     refill();
@@ -313,4 +312,6 @@
 void QtHomologyList::rowSelected()
 {
+  boost::recursive_mutex::scoped_lock lock(refill_mutex);
+
   //std::cout << "rowSelected\n";
   for (int i=0;i<treewidget->topLevelItemCount();i++){
Index: src/UIElements/Views/Qt4/QtHomologyList.hpp
===================================================================
--- src/UIElements/Views/Qt4/QtHomologyList.hpp	(revision 8f2f4eb77927bf028e9727a89c50be3bbc84ca70)
+++ src/UIElements/Views/Qt4/QtHomologyList.hpp	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -17,4 +17,6 @@
 #include <QtGui/QWidget>
 #include "CodePatterns/Observer/Observer.hpp"
+
+#include <boost/thread/recursive_mutex.hpp>
 
 class HomologyGraph;
@@ -53,8 +55,8 @@
   //!> flag to indicate that we got an update
   bool dirty;
-  //!> flag to indicate that we currently clear the view, avoids thread collisions
-  bool clearing;
   //!> flag to indicate whether we are subscribed to PotentialRegistry
   bool potentialregistry_enabled;
+
+  mutable boost::recursive_mutex refill_mutex;
 
 private:
Index: src/UIElements/Views/Qt4/QtShapeList.cpp
===================================================================
--- src/UIElements/Views/Qt4/QtShapeList.cpp	(revision 8f2f4eb77927bf028e9727a89c50be3bbc84ca70)
+++ src/UIElements/Views/Qt4/QtShapeList.cpp	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -65,5 +65,4 @@
 	setHeaderLabels(header);
 
-	clearing = false;
 	selecting = false;
 
@@ -114,7 +113,8 @@
 }
 
-void QtShapeList::refill(::Shape *ignore) {
+void QtShapeList::refill(::Shape *ignore)
+{
+  boost::recursive_mutex::scoped_lock lock(refill_mutex);
 
-  clearing = true;
   clear();
   shapeSelection.clear();
@@ -138,15 +138,13 @@
     shapeSelection.push_back(reg.isSelected(s));
   }
-  clearing = false;
 }
 
-#if 0
 void QtShapeList::paintEvent(QPaintEvent * event)
 {
+  boost::recursive_mutex::scoped_lock lock(refill_mutex);
   /*if (dirty)
     refill();*/
-  QtShapeList::paintEvent(event);
+  QTreeWidget::paintEvent(event);
 }
-#endif
 
 void QtShapeList::subjectKilled(Observable *publisher) {
@@ -156,6 +154,6 @@
 void QtShapeList::rowSelected()
 {
-  if (clearing)
-    return;
+  boost::recursive_mutex::scoped_lock lock(refill_mutex);
+
   if (selecting)
     return;
Index: src/UIElements/Views/Qt4/QtShapeList.hpp
===================================================================
--- src/UIElements/Views/Qt4/QtShapeList.hpp	(revision 8f2f4eb77927bf028e9727a89c50be3bbc84ca70)
+++ src/UIElements/Views/Qt4/QtShapeList.hpp	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -16,4 +16,7 @@
 
 #include <QtGui/QTreeWidget>
+
+#include <boost/thread/recursive_mutex.hpp>
+
 #include "CodePatterns/Observer/Observer.hpp"
 
@@ -32,5 +35,5 @@
   virtual void subjectKilled(Observable *publisher);
   virtual void recieveNotification(Observable *publisher, Notification_ptr notification);
-  //virtual void paintEvent(QPaintEvent * event);
+  virtual void paintEvent(QPaintEvent * event);
   void refill(::Shape *ignore);
 
@@ -48,7 +51,8 @@
 
 private:
-  bool clearing;
   bool selecting;
   std::vector<bool> shapeSelection; //!< needed to determine when a selection changes
+
+  mutable boost::recursive_mutex refill_mutex;
 };
 
Index: src/UIElements/Views/Qt4/QtStatusBar.cpp
===================================================================
--- src/UIElements/Views/Qt4/QtStatusBar.cpp	(revision 8f2f4eb77927bf028e9727a89c50be3bbc84ca70)
+++ src/UIElements/Views/Qt4/QtStatusBar.cpp	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -99,5 +99,13 @@
 }
 
-void QtStatusBar::update(Observable *subject){
+void QtStatusBar::paintEvent(QPaintEvent * event)
+{
+  boost::recursive_mutex::scoped_lock lock(refill_mutex);
+
+  QStatusBar::paintEvent(event);
+}
+
+void QtStatusBar::update(Observable *subject)
+{
   if (subject == World::getPointer()){
     atomCount = World::getInstance().numAtoms();
@@ -133,4 +141,6 @@
 void QtStatusBar::updateStatusMessage()
 {
+  boost::recursive_mutex::scoped_lock lock(refill_mutex);
+
   if (StatusList.size() != 0) {
     // get oldest message from the StatusList
@@ -177,5 +187,8 @@
 }
 
-void QtStatusBar::redrawStatus(){
+void QtStatusBar::redrawStatus()
+{
+  boost::recursive_mutex::scoped_lock lock(refill_mutex);
+
   stringstream sstr;
   sstr << "You have " << atomCount << " atom" << PLURAL_S(atomCount)
@@ -190,4 +203,6 @@
     const bool StopStatus)
 {
+  boost::recursive_mutex::scoped_lock lock(refill_mutex);
+
   progressIndicator *ind=0;
   progressBars_t::iterator iter = progressBars.find(name);
@@ -216,5 +231,6 @@
 
 
-QtStatusBar::progressIndicator::progressIndicator(const std::string &name){
+QtStatusBar::progressIndicator::progressIndicator(const std::string &name)
+{
   stringstream sstr;
   sstr << "Busy (" << name << ")";
Index: src/UIElements/Views/Qt4/QtStatusBar.hpp
===================================================================
--- src/UIElements/Views/Qt4/QtStatusBar.hpp	(revision 8f2f4eb77927bf028e9727a89c50be3bbc84ca70)
+++ src/UIElements/Views/Qt4/QtStatusBar.hpp	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -19,4 +19,6 @@
 #include <string>
 #include <QtGui/QStatusBar>
+
+#include <boost/thread/recursive_mutex.hpp>
 
 #include "CodePatterns/Observer/Observer.hpp"
@@ -51,4 +53,5 @@
   void subjectKilled(Observable *subject);
   void recieveNotification(Observable *_publisher, Notification *_notification);
+  virtual void paintEvent(QPaintEvent * event);
 
 private slots:
@@ -89,4 +92,6 @@
   //!> time interval in milliseconds
   const int timer_interval;
+
+  mutable boost::recursive_mutex refill_mutex;
 };
 
Index: src/UIElements/Views/Qt4/QtTimeLine.cpp
===================================================================
--- src/UIElements/Views/Qt4/QtTimeLine.cpp	(revision 8f2f4eb77927bf028e9727a89c50be3bbc84ca70)
+++ src/UIElements/Views/Qt4/QtTimeLine.cpp	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -82,4 +82,11 @@
 }
 
+void QtTimeLine::paintEvent(QPaintEvent * event)
+{
+  boost::recursive_mutex::scoped_lock lock(refill_mutex);
+
+  QSlider::paintEvent(event);
+}
+
 void QtTimeLine::subjectKilled(Observable *publisher)
 {
@@ -101,4 +108,6 @@
 void QtTimeLine::recieveNotification(Observable *publisher, Notification_ptr notification)
 {
+  boost::recursive_mutex::scoped_lock lock(refill_mutex);
+
   if (static_cast<WorldTime *>(publisher) == WorldTime::getPointer()) {
     const int timestep = WorldTime::getTime();
@@ -122,4 +131,6 @@
 void QtTimeLine::StepUpdate(int position)
 {
+  boost::recursive_mutex::scoped_lock lock(refill_mutex);
+
   if (WorldTime_change)
     WorldTime_change = false;
Index: src/UIElements/Views/Qt4/QtTimeLine.hpp
===================================================================
--- src/UIElements/Views/Qt4/QtTimeLine.hpp	(revision 8f2f4eb77927bf028e9727a89c50be3bbc84ca70)
+++ src/UIElements/Views/Qt4/QtTimeLine.hpp	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -15,4 +15,7 @@
 
 #include <QtGui/QSlider>
+
+#include <boost/thread/recursive_mutex.hpp>
+
 #include "CodePatterns/Observer/Observer.hpp"
 
@@ -29,4 +32,5 @@
   virtual void recieveNotification(Observable *publisher, Notification_ptr notification);
   virtual void subjectKilled(Observable *publisher);
+  virtual void paintEvent(QPaintEvent * event);
 
 private slots:
@@ -40,4 +44,6 @@
   //!> states whether value was set by observing WorldTime (and not by slider)
   bool WorldTime_change;
+
+  mutable boost::recursive_mutex refill_mutex;
 };
 
