Index: ThirdParty/JobMarket/src/JobMarket/FragmentScheduler.cpp
===================================================================
--- ThirdParty/JobMarket/src/JobMarket/FragmentScheduler.cpp	(revision 8e7a1b20697e82ca4bb86bb17239e4e2692bd22c)
+++ ThirdParty/JobMarket/src/JobMarket/FragmentScheduler.cpp	(revision cc85e4082e5612b2c03369280ae745e9cba1b9e0)
@@ -65,4 +65,5 @@
       boost::bind(&FragmentScheduler::shutdown, boost::ref(*this))),
   connection(_io_service),
+  OpQueue(boost::bind(&FragmentScheduler::removeWorker, boost::ref(*this), _1)),
   guard(_io_service, timeout, connection,
       boost::bind(&FragmentScheduler::removeWorker, boost::ref(*this), _1),
Index: ThirdParty/JobMarket/src/JobMarket/Operations/OperationQueue.cpp
===================================================================
--- ThirdParty/JobMarket/src/JobMarket/Operations/OperationQueue.cpp	(revision 8e7a1b20697e82ca4bb86bb17239e4e2692bd22c)
+++ ThirdParty/JobMarket/src/JobMarket/Operations/OperationQueue.cpp	(revision cc85e4082e5612b2c03369280ae745e9cba1b9e0)
@@ -33,5 +33,9 @@
 #include "JobMarket/Operations/AsyncOperation.hpp"
 #include "JobMarket/Operations/OperationQueue.hpp"
-#include "JobMarket/WorkerAddress.hpp"
+
+static void NoOp(const WorkerAddress) {}
+
+// static instances
+const boost::function<void (const WorkerAddress)> OperationQueue::NoOpCallback = boost::bind(&NoOp, _1);
 
 size_t OperationQueue::max_connections = 1;
@@ -74,15 +78,15 @@
             boost::bind(&AddressMap_t::count, boost::ref(AddressMap), boost::lambda::_1) );
     if (queueiter != queue.end()) {
-      AddressMap_t::iterator mapiter = AddressMap.find(*queueiter);
+      const AddressMap_t::iterator mapiter = AddressMap.find(*queueiter);
       ASSERT( mapiter != AddressMap.end(),
           "OperationQueue::LaunchNextOp() - cannot find connection "+toString((*queueiter)->getName())+" in AddressMap.");
-      const WorkerAddress address = mapiter->second;
-      AsyncOp_ptr ptr = mapiter->first;
+      currentOpsAddress = mapiter->second;
+      const AsyncOp_ptr ptr = mapiter->first;
       // always erase the op from the list of ones pending for launch
       AddressMap.erase(mapiter);
       // only launch when not a debug op
-      if ((!address.host.empty()) && (!address.service.empty())) {
+      if ((!currentOpsAddress.host.empty()) && (!currentOpsAddress.service.empty())) {
         LOG(2, "DEBUG: Launching next operation " << ptr->getName() << ".");
-       (*ptr)(address.host, address.service);
+       (*ptr)(currentOpsAddress.host, currentOpsAddress.service);
       } else {
         LOG(3, "DEBUG: Skipping debug operation " << ptr->getName() << " with empty address.");
@@ -117,5 +121,12 @@
   AsyncOperation *op = static_cast<AsyncOperation *>(publisher);
   if (op != NULL) {
-    LOG(1, "INFO: We are notified that " << op->getName() << " is done, removing ...");
+    // check for error code of operation
+    if (op->getStatus() != Operation::success) {
+      // remove the worker from the queue
+      failure_callback(currentOpsAddress);
+      LOG(1, "INFO: We are notified that " << op->getName() << " has failed, removing ...");
+    } else {
+      LOG(1, "INFO: We are notified that " << op->getName() << " is done, removing ...");
+    }
     // remove from queue
     remove(op, this);
Index: ThirdParty/JobMarket/src/JobMarket/Operations/OperationQueue.hpp
===================================================================
--- ThirdParty/JobMarket/src/JobMarket/Operations/OperationQueue.hpp	(revision 8e7a1b20697e82ca4bb86bb17239e4e2692bd22c)
+++ ThirdParty/JobMarket/src/JobMarket/Operations/OperationQueue.hpp	(revision cc85e4082e5612b2c03369280ae745e9cba1b9e0)
@@ -15,4 +15,5 @@
 #endif
 
+#include <boost/function.hpp>
 #include <boost/shared_ptr.hpp>
 #include <deque>
@@ -20,8 +21,9 @@
 #include "CodePatterns/Observer/Observer.hpp"
 
+#include "JobMarket/WorkerAddress.hpp"
+
 class AsyncOperation;
 class Observer;
 class OperationQueueTest;
-class WorkerAddress;
 
 /** This class is a container for \ref AsyncOperation's that are kept as shared_ptr
@@ -32,4 +34,7 @@
   //!> grant unit test access to private part
   friend class OperationQueueTest;
+
+  //!> static function as default callback on failure of operation that does nothing
+  static const boost::function<void (const WorkerAddress)> NoOpCallback;
 public:
   /** Default constructor for class OperationQueue.
@@ -39,6 +44,20 @@
     Observer("OperationQueue"),
     RunningOps(0),
-    IsBlockedFlag(false)
+    currentOpsAddress("localhost", "default"),
+    IsBlockedFlag(false),
+    failure_callback(NoOpCallback)
   {}
+
+  /** Default constructor for class OperationQueue.
+   *
+   */
+  OperationQueue(const boost::function<void (const WorkerAddress)> &_failure_callback) :
+    Observer("OperationQueue"),
+    RunningOps(0),
+    currentOpsAddress("localhost", "default"),
+    IsBlockedFlag(false),
+    failure_callback(_failure_callback)
+  {}
+
   /** Default destructor for class OperationQueue.
    *
@@ -140,6 +159,12 @@
   AddressMap_t AddressMap;
 
+  //!> address of current operation in case of failure
+  WorkerAddress currentOpsAddress;
+
   //!> status flag whether queue is blocked or operations may be pushed.
   bool IsBlockedFlag;
+
+  //!> failure callback to call when operation's address could not be resolved
+  const boost::function<void (const WorkerAddress)> failure_callback;
 };
 
Index: ThirdParty/JobMarket/src/JobMarket/Pool/PoolWorker.cpp
===================================================================
--- ThirdParty/JobMarket/src/JobMarket/Pool/PoolWorker.cpp	(revision 8e7a1b20697e82ca4bb86bb17239e4e2692bd22c)
+++ ThirdParty/JobMarket/src/JobMarket/Pool/PoolWorker.cpp	(revision cc85e4082e5612b2c03369280ae745e9cba1b9e0)
@@ -63,4 +63,5 @@
   connection_(_io_service),
   failed(boost::bind(&ExitflagContainer::setExitflag, this, ExitflagContainer::ErrorFlag)),
+  OpQueue(boost::bind(&PoolWorker::finish, boost::ref(*this))),
   thread_remover(boost::bind(&PoolWorker::PoolListener_t::handle_RemoveThread, boost::ref(PoolListener)))
 {
Index: ThirdParty/JobMarket/tests/regression/testsuite-falsehost.at
===================================================================
--- ThirdParty/JobMarket/tests/regression/testsuite-falsehost.at	(revision 8e7a1b20697e82ca4bb86bb17239e4e2692bd22c)
+++ ThirdParty/JobMarket/tests/regression/testsuite-falsehost.at	(revision cc85e4082e5612b2c03369280ae745e9cba1b9e0)
@@ -3,5 +3,4 @@
 AT_SETUP([Fragmentation - Automation: Worker sets false hostname])
 AT_KEYWORDS([fragmentation automation controller poolworker server falsehost])
-AT_XFAIL_IF([/bin/true])
 
 WORKERPORT=1080
