Index: src/Fragmentation/Automation/unittests/Makefile.am
===================================================================
--- src/Fragmentation/Automation/unittests/Makefile.am	(revision d6b12c1d8227a7a37a477f6fbdc178f95f7caaf3)
+++ src/Fragmentation/Automation/unittests/Makefile.am	(revision 2344a30f31c0fe3d7ef97b7598871abb375747d2)
@@ -143,5 +143,5 @@
 
 WorkerPoolUnitTest_LDFLAGS = ${CodePatterns_LIBS} $(CPPUNIT_LIBS) -ldl
-WorkerPoolUnitTest_CPPFLAGS = ${BOOST_CPPFLAGS} $(CPPUNIT_CFLAGS) ${CodePatterns_CFLAGS}
+WorkerPoolUnitTest_CPPFLAGS = ${BOOST_CPPFLAGS} $(CPPUNIT_CFLAGS) ${CodePatterns_CFLAGS} -I$(top_srcdir)/src
 WorkerPoolUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
   unittests/WorkerPoolUnitTest.cpp \
@@ -150,5 +150,7 @@
   Pool/WorkerPool.hpp \
   WorkerAddress.cpp \
-  WorkerAddress.hpp
+  WorkerAddress.hpp \
+  $(top_srcdir)/src/unittests/stubs/ObserverStub.cpp \
+  $(top_srcdir)/src/unittests/stubs/ObserverStub.hpp
 WorkerPoolUnitTest_LDADD = \
   $(BOOST_SERIALIZATION_LDFLAGS) $(BOOST_SERIALIZATION_LIBS) \
Index: src/Fragmentation/Automation/unittests/WorkerPoolUnitTest.cpp
===================================================================
--- src/Fragmentation/Automation/unittests/WorkerPoolUnitTest.cpp	(revision d6b12c1d8227a7a37a477f6fbdc178f95f7caaf3)
+++ src/Fragmentation/Automation/unittests/WorkerPoolUnitTest.cpp	(revision 2344a30f31c0fe3d7ef97b7598871abb375747d2)
@@ -27,4 +27,5 @@
 
 #include "CodePatterns/Assert.hpp"
+#include "CodePatterns/Observer/Channels.hpp"
 #include "Pool/WorkerPool.hpp"
 #include "WorkerAddress.hpp"
@@ -38,4 +39,5 @@
 
 #include "stubs/FragmentJobStub.hpp"
+#include "unittests/stubs/ObserverStub.hpp"
 
 // Registers the fixture into the 'registry'
@@ -49,8 +51,23 @@
 
   pool = new WorkerPool();
+  addobserver = new NotificationObserver(pool->getChannel(WorkerPool::WorkerAdded));
+  removeobserver = new NotificationObserver(pool->getChannel(WorkerPool::WorkerRemoved));
+  idleobserver = new NotificationObserver(pool->getChannel(WorkerPool::WorkerIdle));
+
+  // and sign on
+  pool->signOn(addobserver, WorkerPool::WorkerAdded);
+  pool->signOn(removeobserver, WorkerPool::WorkerRemoved);
+  pool->signOn(idleobserver, WorkerPool::WorkerIdle);
 }
 
 void WorkerPoolTest::tearDown()
 {
+  pool->signOff(addobserver, WorkerPool::WorkerAdded);
+  pool->signOff(removeobserver, WorkerPool::WorkerRemoved);
+  pool->signOff(idleobserver, WorkerPool::WorkerIdle);
+
+  delete removeobserver;
+  delete addobserver;
+  delete idleobserver;
   delete pool;
 }
@@ -68,8 +85,16 @@
   CPPUNIT_ASSERT_EQUAL( (size_t)0, pool->busy_queue.size() );
   CPPUNIT_ASSERT_EQUAL( (size_t)1, pool->pool.size() );
+  CPPUNIT_ASSERT( addobserver->wasNotified );
+  CPPUNIT_ASSERT( !removeobserver->wasNotified );
+  CPPUNIT_ASSERT( idleobserver->wasNotified );
+  addobserver->wasNotified = false;
+  idleobserver->wasNotified = false;
 
   // remove non-present worker
   std::cout << "The following error message is intended and does not indicate a failure." << std::endl;
   CPPUNIT_ASSERT( !pool->removeWorker(otheraddress) );
+  CPPUNIT_ASSERT( !addobserver->wasNotified );
+  CPPUNIT_ASSERT( !removeobserver->wasNotified );
+  CPPUNIT_ASSERT( !idleobserver->wasNotified );
 
   // check for presence
@@ -82,4 +107,8 @@
   CPPUNIT_ASSERT_EQUAL( (size_t)0, pool->busy_queue.size() );
   CPPUNIT_ASSERT_EQUAL( (size_t)0, pool->pool.size() );
+  CPPUNIT_ASSERT( !addobserver->wasNotified );
+  CPPUNIT_ASSERT( removeobserver->wasNotified );
+  CPPUNIT_ASSERT( !idleobserver->wasNotified );
+  removeobserver->wasNotified = false;
 }
 
@@ -96,4 +125,9 @@
   CPPUNIT_ASSERT_EQUAL( (size_t)0, pool->busy_queue.size() );
   CPPUNIT_ASSERT_EQUAL( (size_t)1, pool->pool.size() );
+  CPPUNIT_ASSERT( addobserver->wasNotified );
+  CPPUNIT_ASSERT( !removeobserver->wasNotified );
+  CPPUNIT_ASSERT( idleobserver->wasNotified );
+  addobserver->wasNotified = false;
+  idleobserver->wasNotified = false;
 
   // unmark and check
@@ -120,4 +154,7 @@
   CPPUNIT_ASSERT_EQUAL( (size_t)0, pool->idle_queue.size() );
   CPPUNIT_ASSERT_EQUAL( (size_t)1, pool->busy_queue.size() );
+  CPPUNIT_ASSERT( !addobserver->wasNotified );
+  CPPUNIT_ASSERT( !removeobserver->wasNotified );
+  CPPUNIT_ASSERT( !idleobserver->wasNotified );
 
   // unmark and check
@@ -126,3 +163,6 @@
   CPPUNIT_ASSERT_EQUAL( (size_t)1, pool->idle_queue.size() );
   CPPUNIT_ASSERT_EQUAL( (size_t)0, pool->busy_queue.size() );
+  CPPUNIT_ASSERT( !addobserver->wasNotified );
+  CPPUNIT_ASSERT( !removeobserver->wasNotified );
+  CPPUNIT_ASSERT( idleobserver->wasNotified );
 }
Index: src/Fragmentation/Automation/unittests/WorkerPoolUnitTest.hpp
===================================================================
--- src/Fragmentation/Automation/unittests/WorkerPoolUnitTest.hpp	(revision d6b12c1d8227a7a37a477f6fbdc178f95f7caaf3)
+++ src/Fragmentation/Automation/unittests/WorkerPoolUnitTest.hpp	(revision 2344a30f31c0fe3d7ef97b7598871abb375747d2)
@@ -18,4 +18,5 @@
 
 class WorkerPool;
+class NotificationObserver;
 
 /********************************************** Test classes **************************************/
@@ -36,4 +37,7 @@
 private:
       WorkerPool *pool;
+      NotificationObserver *addobserver;
+      NotificationObserver *removeobserver;
+      NotificationObserver *idleobserver;
 };
 
