Index: src/Fragmentation/Automation/FragmentQueue.cpp
===================================================================
--- src/Fragmentation/Automation/FragmentQueue.cpp	(revision a06358c06389e0dcc7c1707087422a19b0beb155)
+++ src/Fragmentation/Automation/FragmentQueue.cpp	(revision d6b12c1d8227a7a37a477f6fbdc178f95f7caaf3)
@@ -23,4 +23,5 @@
 
 #include "CodePatterns/Assert.hpp"
+#include "CodePatterns/Observer/Channels.hpp"
 #include "CodePatterns/Log.hpp"
 
@@ -33,6 +34,14 @@
  *
  */
-FragmentQueue::FragmentQueue()
-{}
+FragmentQueue::FragmentQueue() :
+    Observable("FragmentQueue")
+{
+  // 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);
+}
 
 /** Destructor for class FragmentQueue.
@@ -65,4 +74,6 @@
   ASSERT(!results.count(job->getId()),
       "FragmentQueue::pushJob() - job id "+toString(job->getId())+" has already been used.");
+  OBSERVE;
+  NOTIFY(JobAdded);
   results.insert( std::make_pair(job->getId(), NoResult));
   jobs.push_back(job);
@@ -92,4 +103,6 @@
 FragmentJob::ptr FragmentQueue::popJob()
 {
+  OBSERVE;
+  NOTIFY(JobRemoved);
   ASSERT(jobs.size(),
       "FragmentQueue::popJob() - there are no jobs on the queue.");
Index: src/Fragmentation/Automation/FragmentQueue.hpp
===================================================================
--- src/Fragmentation/Automation/FragmentQueue.hpp	(revision a06358c06389e0dcc7c1707087422a19b0beb155)
+++ src/Fragmentation/Automation/FragmentQueue.hpp	(revision d6b12c1d8227a7a37a477f6fbdc178f95f7caaf3)
@@ -18,4 +18,6 @@
 #include <vector>
 
+#include "CodePatterns/Observer/Observable.hpp"
+
 #include "types.hpp"
 #include "Jobs/FragmentJob.hpp"
@@ -28,5 +30,5 @@
  * contained herein.
  */
-class FragmentQueue
+class FragmentQueue : public Observable
 {
   friend class FragmentQueueTest;
@@ -34,4 +36,10 @@
   FragmentQueue();
   ~FragmentQueue();
+
+  enum NotificationType {
+    JobAdded,
+    JobRemoved,
+    NotificationType_MAX  // denotes the maximum of available notification types
+  };
 
   // entering jobs into queue
Index: src/Fragmentation/Automation/unittests/FragmentQueueUnitTest.cpp
===================================================================
--- src/Fragmentation/Automation/unittests/FragmentQueueUnitTest.cpp	(revision a06358c06389e0dcc7c1707087422a19b0beb155)
+++ src/Fragmentation/Automation/unittests/FragmentQueueUnitTest.cpp	(revision d6b12c1d8227a7a37a477f6fbdc178f95f7caaf3)
@@ -29,4 +29,5 @@
 #include "FragmentQueue.hpp"
 
+#include "CodePatterns/Observer/Channels.hpp"
 
 #ifdef HAVE_TESTRUNNER
@@ -37,4 +38,5 @@
 
 #include "stubs/FragmentJobStub.hpp"
+#include "unittests/stubs/ObserverStub.hpp"
 
 // Registers the fixture into the 'registry'
@@ -48,4 +50,10 @@
 
   queue = new FragmentQueue();
+  addobserver = new NotificationObserver(queue->getChannel(FragmentQueue::JobAdded));
+  removeobserver = new NotificationObserver(queue->getChannel(FragmentQueue::JobRemoved));
+
+  // and sign on
+  queue->signOn(addobserver, FragmentQueue::JobAdded);
+  queue->signOn(removeobserver, FragmentQueue::JobRemoved);
 }
 
@@ -53,5 +61,10 @@
 void FragmentQueueTest::tearDown()
 {
+  queue->signOff(addobserver, FragmentQueue::JobAdded);
+  queue->signOff(removeobserver, FragmentQueue::JobRemoved);
+
   delete queue;
+  delete removeobserver;
+  delete addobserver;
 }
 
@@ -76,4 +89,7 @@
   queue->pushJob(testJob);
 #endif
+  CPPUNIT_ASSERT( addobserver->wasNotified );
+  CPPUNIT_ASSERT( !removeobserver->wasNotified );
+  addobserver->wasNotified = false;
 
   CPPUNIT_ASSERT_EQUAL((size_t)1, queue->jobs.size());
@@ -101,4 +117,6 @@
   poppedJob = queue->popJob();
 #endif
+  CPPUNIT_ASSERT( !addobserver->wasNotified );
+  CPPUNIT_ASSERT( removeobserver->wasNotified );
   CPPUNIT_ASSERT( poppedJob == testJob );
 
Index: src/Fragmentation/Automation/unittests/FragmentQueueUnitTest.hpp
===================================================================
--- src/Fragmentation/Automation/unittests/FragmentQueueUnitTest.hpp	(revision a06358c06389e0dcc7c1707087422a19b0beb155)
+++ src/Fragmentation/Automation/unittests/FragmentQueueUnitTest.hpp	(revision d6b12c1d8227a7a37a477f6fbdc178f95f7caaf3)
@@ -18,4 +18,5 @@
 
 class FragmentQueue;
+class NotificationObserver;
 
 /********************************************** Test classes **************************************/
@@ -42,4 +43,6 @@
 private:
       FragmentQueue *queue;
+      NotificationObserver *addobserver;
+      NotificationObserver *removeobserver;
 };
 
Index: src/Fragmentation/Automation/unittests/Makefile.am
===================================================================
--- src/Fragmentation/Automation/unittests/Makefile.am	(revision a06358c06389e0dcc7c1707087422a19b0beb155)
+++ src/Fragmentation/Automation/unittests/Makefile.am	(revision d6b12c1d8227a7a37a477f6fbdc178f95f7caaf3)
@@ -63,10 +63,12 @@
 
 FragmentQueueUnitTest_LDFLAGS = ${CodePatterns_LIBS} $(CPPUNIT_LIBS) -ldl
-FragmentQueueUnitTest_CPPFLAGS = ${BOOST_CPPFLAGS} $(CPPUNIT_CFLAGS) ${CodePatterns_CFLAGS}
+FragmentQueueUnitTest_CPPFLAGS = ${BOOST_CPPFLAGS} $(CPPUNIT_CFLAGS) ${CodePatterns_CFLAGS} -I$(top_srcdir)/src
 FragmentQueueUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
   unittests/FragmentQueueUnitTest.cpp \
   unittests/FragmentQueueUnitTest.hpp \
   unittests/stubs/FragmentJobStub.cpp \
-  unittests/stubs/FragmentJobStub.hpp
+  unittests/stubs/FragmentJobStub.hpp \
+  $(top_srcdir)/src/unittests/stubs/ObserverStub.cpp \
+  $(top_srcdir)/src/unittests/stubs/ObserverStub.hpp
 FragmentQueueUnitTest_LDADD = \
   libMolecuilderFragmentJobs.la \
