Index: src/Actions/WorldAction/SetWorldTimeAction.cpp
===================================================================
--- src/Actions/WorldAction/SetWorldTimeAction.cpp	(revision 38c5d1ddf8e15d850c38f402b8751d3f9e227692)
+++ src/Actions/WorldAction/SetWorldTimeAction.cpp	(revision 040a5c4933743745a8fee76949b4470d6e94a33a)
@@ -44,5 +44,5 @@
   getParametersfromValueStorage();
 
-  WorldTime::setTime(params.newtime);
+  WorldTime::getInstance().setTime(params.newtime);
   LOG(0, "Current time step is now: " << WorldTime::getTime() << ".");
   return Action::state_ptr(UndoState);
@@ -52,5 +52,5 @@
   WorldSetWorldTimeState *state = assert_cast<WorldSetWorldTimeState*>(_state.get());
 
-  WorldTime::setTime(state->oldtime);
+  WorldTime::getInstance().setTime(state->oldtime);
   LOG(0, "Current time step is now again: " << WorldTime::getTime() << ".");
 
@@ -61,5 +61,5 @@
   WorldSetWorldTimeState *state = assert_cast<WorldSetWorldTimeState*>(_state.get());
 
-  WorldTime::setTime(state->params.newtime);
+  WorldTime::getInstance().setTime(state->params.newtime);
   LOG(0, "Current time step is now: " << WorldTime::getTime() << ".");
 
Index: src/World.cpp
===================================================================
--- src/World.cpp	(revision 38c5d1ddf8e15d850c38f402b8751d3f9e227692)
+++ src/World.cpp	(revision 040a5c4933743745a8fee76949b4470d6e94a33a)
@@ -151,5 +151,5 @@
   if (_step != WorldTime::getTime()) {
     // set new time
-    WorldTime::setTime(_step);
+    WorldTime::getInstance().setTime(_step);
     // TODO: removed when BondGraph creates the adjacency
     // 1. remove all of World's molecules
Index: src/WorldTime.cpp
===================================================================
--- src/WorldTime.cpp	(revision 38c5d1ddf8e15d850c38f402b8751d3f9e227692)
+++ src/WorldTime.cpp	(revision 040a5c4933743745a8fee76949b4470d6e94a33a)
@@ -23,4 +23,6 @@
 
 #include "CodePatterns/Log.hpp"
+#include "CodePatterns/Observer/Channels.hpp"
+#include "CodePatterns/Observer/Notification.hpp"
 #include "CodePatterns/Singleton_impl.hpp"
 
@@ -28,9 +30,22 @@
 
 WorldTime::WorldTime() :
+  Observable("WorldTime"),
   StepWidth(0.)
-{}
+{
+  // observable stuff
+  Channels *OurChannel = new Channels;
+  NotificationChannels.insert( std::make_pair(this, OurChannel) );
+  // add instance for each notification type
+  for (size_t type = 0; type < NotificationType_MAX; ++type)
+    OurChannel->addChannel(type);
+}
 
 WorldTime::~WorldTime()
-{}
+{
+  // observable stuff
+  std::map<Observable *, Channels*>::iterator iter = NotificationChannels.find(this);
+  delete iter->second;
+  NotificationChannels.erase(iter);
+}
 
 void WorldTime::setStepWidth(const double _width)
@@ -45,3 +60,10 @@
 }
 
+void WorldTime::setTime(const unsigned int _time)
+{
+  OBSERVE;
+  NOTIFY(TimeChanged);
+  WorldTime::CurrentTime = _time;
+}
+
 CONSTRUCT_SINGLETON(WorldTime)
Index: src/WorldTime.hpp
===================================================================
--- src/WorldTime.hpp	(revision 38c5d1ddf8e15d850c38f402b8751d3f9e227692)
+++ src/WorldTime.hpp	(revision 040a5c4933743745a8fee76949b4470d6e94a33a)
@@ -14,4 +14,5 @@
 #endif
 
+#include "CodePatterns/Observer/Observable.hpp"
 #include "CodePatterns/Singleton.hpp"
 
@@ -22,5 +23,5 @@
 }
 
-class WorldTime : public Singleton<WorldTime>
+class WorldTime : public Singleton<WorldTime>, public Observable
 {
   //!> own unit test should be friend to access private variables.
@@ -38,4 +39,8 @@
   friend class MoleCuilder::WorldSetWorldTimeAction;
 public:
+  enum NotificationType {
+    TimeChanged,
+    NotificationType_MAX  // denotes the maximum of available notification types
+  };
 
   /** Getter for CurrentTime.
@@ -65,6 +70,5 @@
    * @param _time value to set CurrentTime to
    */
-  static void setTime(const unsigned int _time)
-    { WorldTime::CurrentTime = _time; }
+  void setTime(const unsigned int _time);
 
   static unsigned int CurrentTime;  //!< contains current time step
Index: src/unittests/ListOfBondsUnitTest.cpp
===================================================================
--- src/unittests/ListOfBondsUnitTest.cpp	(revision 38c5d1ddf8e15d850c38f402b8751d3f9e227692)
+++ src/unittests/ListOfBondsUnitTest.cpp	(revision 040a5c4933743745a8fee76949b4470d6e94a33a)
@@ -52,5 +52,5 @@
   atom *Walker = NULL;
 
-  WorldTime::setTime(0);
+  WorldTime::getInstance().setTime(0);
 
   // construct element
@@ -362,8 +362,8 @@
 
   // add bond
-  WorldTime::setTime(0);
-  Binder = TestMolecule->AddBond(atom1, atom2, 1);
-  CPPUNIT_ASSERT( Binder != NULL );
-  WorldTime::setTime(1);
+  WorldTime::getInstance().setTime(0);
+  Binder = TestMolecule->AddBond(atom1, atom2, 1);
+  CPPUNIT_ASSERT( Binder != NULL );
+  WorldTime::getInstance().setTime(1);
   Binder = TestMolecule->AddBond(atom1, atom2, 1);
   CPPUNIT_ASSERT( Binder != NULL );
@@ -371,5 +371,5 @@
   // access test via CurrentTime
   { // time step 0
-    WorldTime::setTime(0);
+    WorldTime::getInstance().setTime(0);
     {
       const BondList& ListOfBonds = atom1->getListOfBonds();
@@ -383,5 +383,5 @@
   }
   { // time step 1
-    WorldTime::setTime(1);
+    WorldTime::getInstance().setTime(1);
     {
       const BondList& ListOfBonds = atom1->getListOfBonds();
@@ -393,5 +393,5 @@
     }
     CPPUNIT_ASSERT_EQUAL( true, TestMolecule->hasBondStructure() );
-    WorldTime::setTime(0);
+    WorldTime::getInstance().setTime(0);
   }
 
@@ -423,5 +423,5 @@
   // check bond if removed from other atom for all time steps
   {
-    WorldTime::setTime(0);
+    WorldTime::getInstance().setTime(0);
     const BondList& ListOfBonds = atom1->getListOfBonds();
     CPPUNIT_ASSERT_EQUAL( (size_t) 0, ListOfBonds.size() );
@@ -429,9 +429,9 @@
   }
   {
-    WorldTime::setTime(1);
+    WorldTime::getInstance().setTime(1);
     const BondList& ListOfBonds = atom1->getListOfBonds();
     CPPUNIT_ASSERT_EQUAL( (size_t) 0, ListOfBonds.size() );
     CPPUNIT_ASSERT_EQUAL( false, TestMolecule->hasBondStructure() );
-    WorldTime::setTime(0);
+    WorldTime::getInstance().setTime(0);
   }
 
