Index: src/Actions/ActionStatusList.cpp
===================================================================
--- src/Actions/ActionStatusList.cpp	(revision 26b4eb453c6d8c6ccdb34e5b8a56f055e76a561b)
+++ src/Actions/ActionStatusList.cpp	(revision 378f2d5ba8914489acde58f6de2d54c2e0ae84ba)
@@ -52,5 +52,7 @@
 
 ActionStatusList::~ActionStatusList()
-{}
+{
+  // subjectKilled() informs all observers that we go offline: Fetch all remaining messages
+}
 
 std::string ActionStatusList::popFirstMessage()
Index: src/UIElements/CommandLineUI/CommandLineStatusIndicator.cpp
===================================================================
--- src/UIElements/CommandLineUI/CommandLineStatusIndicator.cpp	(revision 26b4eb453c6d8c6ccdb34e5b8a56f055e76a561b)
+++ src/UIElements/CommandLineUI/CommandLineStatusIndicator.cpp	(revision 378f2d5ba8914489acde58f6de2d54c2e0ae84ba)
@@ -34,4 +34,6 @@
 
 #include "CodePatterns/MemDebug.hpp"
+#include "CodePatterns/Observer/Notification.hpp"
+#include "CodePatterns/Observer/Observable.hpp"
 
 #include "CommandLineUI/CommandLineStatusIndicator.hpp"
@@ -39,13 +41,19 @@
 #include <iostream>
 
+#include "Actions/ActionQueue.hpp"
+#include "Actions/ActionStatusList.hpp"
 #include "Actions/Process.hpp"
-#include "CodePatterns/Observer/Observable.hpp"
 
 using namespace MoleCuilder;
 
 CommandLineStatusIndicator::CommandLineStatusIndicator() :
-    Observer("CommandLineStatusIndicator")
+    Observer("CommandLineStatusIndicator"),
+    StatusList(ActionQueue::getInstance().getStatusList()),
+    StatusList_signedOn(false)
 {
   Process::AddObserver(this);
+
+  StatusList.signOn(this, ActionStatusList::StatusAdded);
+  StatusList_signedOn = true;
 }
 
@@ -53,28 +61,39 @@
 {
   Process::RemoveObserver(this);
+
+  if (StatusList_signedOn) {
+    // print all remaining messages prior to exit
+    while (StatusList.size() != 0)
+      displayStatusMessage();
+    StatusList.signOff(this, ActionStatusList::StatusAdded);
+  }
 }
 
 void CommandLineStatusIndicator::update(Observable *subject){
-  Process *proc;
-  // we are only observing Processes
-  if((proc=dynamic_cast<Process*>(subject))){
-    // see what kind of progress we have to display
-    if(proc->getMaxSteps()>0){
-      if(!proc->doesStop()){
-        std::cout << "Busy (" << proc->getName() << ") ";
-        // we can show a percentage done
-        std::cout << (int)proc->getDoneRatio() << "% done" << std::endl;
+  if (subject == &StatusList) {
+    // we do not react to general updates from StatusList
+  } else {
+    Process *proc;
+    // we are only observing Processes
+    if((proc=dynamic_cast<Process*>(subject))){
+      // see what kind of progress we have to display
+      if(proc->getMaxSteps()>0){
+        if(!proc->doesStop()){
+          std::cout << "Busy (" << proc->getName() << ") ";
+          // we can show a percentage done
+          std::cout << (int)proc->getDoneRatio() << "% done" << std::endl;
+        }
       }
-    }
-    else{
-      // we only show some kind of busy animation
-      if(proc->doesStart()){
-        std::cout << "Busy (" << proc->getName() << ")";
-      }
-      if(!proc->doesStop()){
-        std::cout << ".";
-      }
-      else {
-        std::cout << std::endl;
+      else{
+        // we only show some kind of busy animation
+        if(proc->doesStart()){
+          std::cout << "Busy (" << proc->getName() << ")";
+        }
+        if(!proc->doesStop()){
+          std::cout << ".";
+        }
+        else {
+          std::cout << std::endl;
+        }
       }
     }
@@ -82,6 +101,30 @@
 }
 
-void CommandLineStatusIndicator::subjectKilled(Observable *subject){
-
+void CommandLineStatusIndicator::subjectKilled(Observable *subject)
+{
+  if (subject == &StatusList) {
+    // print all remaining messages
+    while (StatusList.size() != 0)
+      displayStatusMessage();
+    // don't need to sign off, just note down that we are
+    StatusList_signedOn = false;
+  }
 }
 
+void CommandLineStatusIndicator::displayStatusMessage() const
+{
+  const std::string message = StatusList.popFirstMessage();
+  std::cout << message << std::endl;
+}
+
+void CommandLineStatusIndicator::recieveNotification(Observable *_publisher, Notification *_notification)
+{
+  if (_publisher == &StatusList) {
+    switch(_notification->getChannelNo()) {
+      case ActionStatusList::StatusAdded:
+        displayStatusMessage();
+        break;
+    }
+  }
+}
+
Index: src/UIElements/CommandLineUI/CommandLineStatusIndicator.hpp
===================================================================
--- src/UIElements/CommandLineUI/CommandLineStatusIndicator.hpp	(revision 26b4eb453c6d8c6ccdb34e5b8a56f055e76a561b)
+++ src/UIElements/CommandLineUI/CommandLineStatusIndicator.hpp	(revision 378f2d5ba8914489acde58f6de2d54c2e0ae84ba)
@@ -17,4 +17,8 @@
 #include "CodePatterns/Observer/Observer.hpp"
 
+namespace MoleCuilder {
+  class ActionStatusList;
+}
+
 class Observable;
 
@@ -27,7 +31,14 @@
   void update(Observable *subject);
   void subjectKilled(Observable *subject);
+  void recieveNotification(Observable *_publisher, Notification *_notification);
 
 private:
+  void displayStatusMessage() const;
 
+private:
+  //!> reference to the StatusList we are signed on
+  MoleCuilder::ActionStatusList& StatusList;
+  //!> indicates whether we are currently signed on
+  bool StatusList_signedOn;
 };
 
Index: src/UIElements/TextUI/TextStatusIndicator.cpp
===================================================================
--- src/UIElements/TextUI/TextStatusIndicator.cpp	(revision 26b4eb453c6d8c6ccdb34e5b8a56f055e76a561b)
+++ src/UIElements/TextUI/TextStatusIndicator.cpp	(revision 378f2d5ba8914489acde58f6de2d54c2e0ae84ba)
@@ -34,4 +34,5 @@
 
 #include "CodePatterns/MemDebug.hpp"
+#include "CodePatterns/Observer/Notification.hpp"
 
 #include "TextUI/TextStatusIndicator.hpp"
@@ -39,4 +40,6 @@
 #include <iostream>
 
+#include "Actions/ActionQueue.hpp"
+#include "Actions/ActionStatusList.hpp"
 #include "Actions/Process.hpp"
 
@@ -44,7 +47,12 @@
 
 TextStatusIndicator::TextStatusIndicator() :
-  Observer("TextStatusIndicator")
+  Observer("TextStatusIndicator"),
+  StatusList(ActionQueue::getInstance().getStatusList()),
+  StatusList_signedOn(false)
 {
   Process::AddObserver(this);
+
+  StatusList.signOn(this, ActionStatusList::StatusAdded);
+  StatusList_signedOn = true;
 }
 
@@ -52,28 +60,35 @@
 {
   Process::RemoveObserver(this);
+
+  if (StatusList_signedOn)
+    StatusList.signOff(this, ActionStatusList::StatusAdded);
 }
 
 void TextStatusIndicator::update(Observable *subject){
-  Process *proc;
-  // we are only observing Processes
-  if((proc=dynamic_cast<Process*>(subject))){
-    // see what kind of progress we have to display
-    if(proc->getMaxSteps()>0){
-      if(!proc->doesStop()){
-        std::cout << "Busy (" << proc->getName() << ") ";
-        // we can show a percentage done
-        std::cout << (int)proc->getDoneRatio() << "% done" << std::endl;
+  if (subject == &StatusList) {
+    // we do not react to general updates from StatusList
+  } else {
+    Process *proc;
+    // we are otherwise only observing Processes
+    if((proc=dynamic_cast<Process*>(subject))){
+      // see what kind of progress we have to display
+      if(proc->getMaxSteps()>0){
+        if(!proc->doesStop()){
+          std::cout << "Busy (" << proc->getName() << ") ";
+          // we can show a percentage done
+          std::cout << (int)proc->getDoneRatio() << "% done" << std::endl;
+        }
       }
-    }
-    else{
-      // we only show some kind of busy animation
-      if(proc->doesStart()){
-        std::cout << "Busy (" << proc->getName() << ")";
-      }
-      if(!proc->doesStop()){
-        std::cout << ".";
-      }
-      else {
-        std::cout << std::endl;
+      else{
+        // we only show some kind of busy animation
+        if(proc->doesStart()){
+          std::cout << "Busy (" << proc->getName() << ")";
+        }
+        if(!proc->doesStop()){
+          std::cout << ".";
+        }
+        else {
+          std::cout << std::endl;
+        }
       }
     }
@@ -81,6 +96,30 @@
 }
 
-void TextStatusIndicator::subjectKilled(Observable *subject){
-
+void TextStatusIndicator::subjectKilled(Observable *subject)
+{
+  if (subject == &StatusList) {
+    // print all remaining messages
+    while (StatusList.size() != 0)
+      displayStatusMessage();
+    // don't need to sign off, just note down that we are
+    StatusList_signedOn = false;
+  }
 }
 
+void TextStatusIndicator::displayStatusMessage() const
+{
+  const std::string message = StatusList.popFirstMessage();
+  std::cout << message << std::endl;
+}
+
+void TextStatusIndicator::recieveNotification(Observable *_publisher, Notification *_notification)
+{
+  if (_publisher == &StatusList) {
+    switch(_notification->getChannelNo()) {
+      case MoleCuilder::ActionStatusList::StatusAdded:
+        // if timer is not already running
+        displayStatusMessage();
+        break;
+    }
+  }
+}
Index: src/UIElements/TextUI/TextStatusIndicator.hpp
===================================================================
--- src/UIElements/TextUI/TextStatusIndicator.hpp	(revision 26b4eb453c6d8c6ccdb34e5b8a56f055e76a561b)
+++ src/UIElements/TextUI/TextStatusIndicator.hpp	(revision 378f2d5ba8914489acde58f6de2d54c2e0ae84ba)
@@ -17,4 +17,9 @@
 #include "CodePatterns/Observer/Observer.hpp"
 
+namespace MoleCuilder {
+  class ActionStatusList;
+}
+
+
 class TextStatusIndicator : public Observer
 {
@@ -25,7 +30,14 @@
   void update(Observable *subject);
   void subjectKilled(Observable *subject);
+  void recieveNotification(Observable *_publisher, Notification *_notification);
 
 private:
+  void displayStatusMessage() const;
 
+private:
+  //!> reference to the StatusList we are signed on
+  MoleCuilder::ActionStatusList& StatusList;
+  //!> indicates whether we are currently signed on
+  bool StatusList_signedOn;
 };
 
Index: src/UIElements/Views/Qt4/QtStatusBar.cpp
===================================================================
--- src/UIElements/Views/Qt4/QtStatusBar.cpp	(revision 26b4eb453c6d8c6ccdb34e5b8a56f055e76a561b)
+++ src/UIElements/Views/Qt4/QtStatusBar.cpp	(revision 378f2d5ba8914489acde58f6de2d54c2e0ae84ba)
@@ -39,10 +39,14 @@
 #include <QtCore/QMetaType>
 #include <QtGui/QProgressBar>
+#include <QtCore/QTimer>
 
 #include "QtStatusBar.hpp"
 
 #include "CodePatterns/MemDebug.hpp"
+#include "CodePatterns/Observer/Notification.hpp"
 
 #include "World.hpp"
+#include "Actions/ActionQueue.hpp"
+#include "Actions/ActionStatusList.hpp"
 #include "Actions/Process.hpp"
 
@@ -57,8 +61,14 @@
   moleculeCount(World::getInstance().numMolecules()),
   parent(_parent),
-  activeProcess("")
+  activeProcess(""),
+  StatusList(ActionQueue::getInstance().getStatusList()),
+  StatusList_signedOn(false),
+  timer(NULL),
+  timer_interval(1500)
 {
   World::getInstance().signOn(this);
   Process::AddObserver(this);
+  StatusList.signOn(this, ActionStatusList::StatusAdded);
+  StatusList_signedOn = true;
   statusLabel = new QLabel(this);
   statusLabel->setFrameStyle(QFrame::NoFrame | QFrame::Plain);
@@ -66,4 +76,9 @@
   redrawStatus();
 
+  // connect the timer
+  timer = new QTimer(this);
+  timer->stop();
+  connect(timer, SIGNAL(timeout()), this, SLOT(updateStatusMessage()));
+
   qRegisterMetaType<std::string>("std::string");
   connect(
@@ -74,15 +89,24 @@
 QtStatusBar::~QtStatusBar()
 {
+  // stop the timer if it is running
+  if (timer->isActive())
+    timer->stop();
+
   Process::RemoveObserver(this);
   World::getInstance().signOff(this);
+  if (StatusList_signedOn)
+    StatusList.signOff(this, ActionStatusList::StatusAdded);
 }
 
 void QtStatusBar::update(Observable *subject){
-  if (subject==World::getPointer()){
+  if (subject == World::getPointer()){
     atomCount = World::getInstance().numAtoms();
     moleculeCount = World::getInstance().numMolecules();
-    redrawStatus();
-  }
-  else {
+    // redraw only if no timer updates messages
+    if (!timer->isActive())
+      redrawStatus();
+  } else if (subject == &StatusList) {
+    // we do not react to general updates from StatusList
+  } else {
     // we probably have some process
     // as notify comes from ActionQueue's thread, we have to use signal/slots
@@ -97,10 +121,58 @@
 }
 
-void QtStatusBar::subjectKilled(Observable *subject){
+void QtStatusBar::startTimer()
+{
+  timer->start(timer_interval);
+}
+
+void QtStatusBar::stopTimer()
+{
+  timer->stop();
+}
+
+void QtStatusBar::updateStatusMessage()
+{
+  if (StatusList.size() != 0) {
+    // get oldest message from the StatusList
+    const std::string message = StatusList.popFirstMessage();
+    statusLabel->setText(QString(message.c_str()));
+  } else {
+    // just send the standard message
+    redrawStatus();
+    // and stop the timer
+    stopTimer();
+  }
+}
+
+void QtStatusBar::recieveNotification(Observable *_publisher, Notification *_notification)
+{
+  if (_publisher == &StatusList) {
+    switch(_notification->getChannelNo()) {
+      case MoleCuilder::ActionStatusList::StatusAdded:
+        if (!timer->isActive()) {
+          // if timer is not already running
+          updateStatusMessage();
+          startTimer();
+        }
+        break;
+    }
+  }
+}
+
+void QtStatusBar::subjectKilled(Observable *subject)
+{
   // Processes don't notify when they are killed
-  atomCount = World::getInstance().numAtoms();
-  moleculeCount = World::getInstance().numMolecules();
-  World::getInstance().signOn(this);
-  redrawStatus();
+  if (subject == &StatusList) {
+    // print all remaining messages
+    while (StatusList.size() != 0)
+      updateStatusMessage();
+    // don't need to sign off, just note down that we are
+    StatusList_signedOn = false;
+  } else {
+    atomCount = World::getInstance().numAtoms();
+    moleculeCount = World::getInstance().numMolecules();
+    World::getInstance().signOn(this);
+    redrawStatus();
+  }
 }
 
Index: src/UIElements/Views/Qt4/QtStatusBar.hpp
===================================================================
--- src/UIElements/Views/Qt4/QtStatusBar.hpp	(revision 26b4eb453c6d8c6ccdb34e5b8a56f055e76a561b)
+++ src/UIElements/Views/Qt4/QtStatusBar.hpp	(revision 378f2d5ba8914489acde58f6de2d54c2e0ae84ba)
@@ -22,9 +22,11 @@
 #include "CodePatterns/Observer/Observer.hpp"
 
+class QBoxLayout;
 class QLabel;
 class QProgressBar;
-class QBoxLayout;
+class QTimer;
 
 namespace MoleCuilder {
+  class ActionStatusList;
   class Process;
 }
@@ -48,4 +50,5 @@
   void update(Observable *subject);
   void subjectKilled(Observable *subject);
+  void recieveNotification(Observable *_publisher, Notification *_notification);
 
 private slots:
@@ -55,4 +58,5 @@
       const unsigned int currentstep,
       const bool StopStatus);
+  void updateStatusMessage();
 
 signals:
@@ -66,4 +70,7 @@
   void redrawStatus();
 
+  void startTimer();
+  void stopTimer();
+
   int atomCount;
   int moleculeCount;
@@ -74,4 +81,12 @@
   progressBars_t progressBars;
   std::string activeProcess;
+  //!> reference to the StatusList we are signed on
+  MoleCuilder::ActionStatusList& StatusList;
+  //!> indicates whether we are currently signed on
+  bool StatusList_signedOn;
+  //!> QTimer instance that causes regular updates of status messages
+  QTimer *timer;
+  //!> time interval in milliseconds
+  const int timer_interval;
 };
 
