Index: src/Fragmentation/Automation/Pool/PoolWorker.cpp
===================================================================
--- src/Fragmentation/Automation/Pool/PoolWorker.cpp	(revision b08c7ca9d5d6fe815e57e7f4ed568ab03f791cc6)
+++ src/Fragmentation/Automation/Pool/PoolWorker.cpp	(revision 9d7c6a15e3a0cde241838d05c776bc8f4bee3d16)
@@ -37,4 +37,7 @@
 #include "Jobs/MPQCCommandJob.hpp"
 #include "Jobs/SystemCommandJob.hpp"
+#include "Operations/Workers/EnrollInPoolOperation.hpp"
+#include "Operations/Workers/RemoveFromPoolOperation.hpp"
+#include "Operations/Workers/SubmitResultOperation.hpp"
 #include "Results/FragmentResult.hpp"
 #include "PoolWorker.hpp"
@@ -53,8 +56,8 @@
  *
  * @param _io_service io service for creating connections
- * @param _host host part of address of pool to connect to
- * @param _service service part of address of pool to connect to
- * @param listenhost host part of address of this instance for listening to pool connections
- * @param listenservice seervice part of address of this instance for listening to pool connections
+ * @param _host host part of MyAddress of pool to connect to
+ * @param _service service part of MyAddress of pool to connect to
+ * @param listenhost host part of MyAddress of this instance for listening to pool connections
+ * @param listenservice seervice part of MyAddress of this instance for listening to pool connections
  */
 PoolWorker::PoolWorker(
@@ -67,22 +70,16 @@
   PoolListener(_io_service, boost::lexical_cast<unsigned short>(listenservice), *this),
   MyAddress(listenhost, listenservice),
+  ServerAddress(_host, _service),
   connection_(_io_service),
-  failed(boost::bind(&ExitflagContainer::setExitflag, this, ExitflagContainer::ErrorFlag)),
-  closingdown(boost::bind(&PoolWorker::finish, this)),
-  initiateme(boost::bind(&PoolListener_t::initiateSocket, boost::ref(PoolListener))),
-  enrollOp(connection_, MyAddress, initiateme, failed),
-  submitOp(connection_, MyAddress, AsyncOperation::NoOpCallback, failed),
-  submitresult(boost::bind(&AsyncOperation::operator(),
-      boost::ref(submitOp),
-      _host, _service)),
-  removeOp(connection_, MyAddress, closingdown, failed),
-  removeme(boost::bind(&AsyncOperation::operator(),
-      boost::ref(removeOp),
-      _host, _service))
+  failed(boost::bind(&ExitflagContainer::setExitflag, this, ExitflagContainer::ErrorFlag))
 {
   Info info(__FUNCTION__);
 
-  // always enroll
-  enrollOp(_host,_service);
+  // always enroll and make listenining initiation depend on its success
+  const boost::function<void ()> initiateme =
+      boost::bind(&PoolListener_t::initiateSocket, boost::ref(PoolListener));
+  AsyncOperation *enrollOp = new EnrollInPoolOperation(connection_, MyAddress, initiateme, failed);
+  LOG(2, "DEBUG: Putting enroll in pool operation into queue ...");
+  OpQueue.push_back(enrollOp, ServerAddress);
 }
 
@@ -144,9 +141,11 @@
   FragmentResult::ptr result = job->Work();
   LOG(2, "DEBUG: Setting result " << result->getId() << ".");
-  submitOp.setResult(result);
+
+  AsyncOperation *submitOp = new SubmitResultOperation(connection_, MyAddress, AsyncOperation::NoOpCallback, failed);
+  static_cast<SubmitResultOperation *>(submitOp)->setResult(result);
 
   // submit result
-  LOG(2, "DEBUG: Sending result ...");
-  submitresult();
+  LOG(2, "DEBUG: Putting send result operation into queue ...");
+  OpQueue.push_back(submitOp, ServerAddress);
 }
 
@@ -172,5 +171,8 @@
 {
   // remove us from pool
-  removeme();
+  boost::function<void ()> closingdown = boost::bind(&PoolWorker::finish, this);
+  AsyncOperation *removeOp = new RemoveFromPoolOperation(connection_, MyAddress, closingdown, failed);
+  LOG(2, "DEBUG: Putting remove from pool operation into queue ...");
+  OpQueue.push_back(removeOp, ServerAddress);
 }
 
Index: src/Fragmentation/Automation/Pool/PoolWorker.hpp
===================================================================
--- src/Fragmentation/Automation/Pool/PoolWorker.hpp	(revision b08c7ca9d5d6fe815e57e7f4ed568ab03f791cc6)
+++ src/Fragmentation/Automation/Pool/PoolWorker.hpp	(revision 9d7c6a15e3a0cde241838d05c776bc8f4bee3d16)
@@ -23,7 +23,5 @@
 #include "ExitflagContainer.hpp"
 #include "Jobs/FragmentJob.hpp"
-#include "Operations/Workers/EnrollInPoolOperation.hpp"
-#include "Operations/Workers/RemoveFromPoolOperation.hpp"
-#include "Operations/Workers/SubmitResultOperation.hpp"
+#include "Operations/OperationQueue.hpp"
 #include "Listener.hpp"
 #include "WorkerAddress.hpp"
@@ -98,30 +96,15 @@
   const WorkerAddress MyAddress;
 
+  //!> address of the server we work for
+  WorkerAddress ServerAddress;
+
   //!> The Connection to the server for the stored operations
   Connection connection_;
 
-  //!> internally bound function that sets the Exitflag to ErrorFlag
+  //!> bound function as callback when operation fails
   boost::function<void ()> failed;
 
-  //!> internally bound function that sets the Exitflag to ErrorFlag
-  const boost::function<void ()> closingdown;
-
-  //!> internally bound function initiates the PoolListener's socket
-  const boost::function<void ()> initiateme;
-
-  //!> operation that handles obtaining a job
-  EnrollInPoolOperation enrollOp;
-
-  //!> operation that handles submitting job's result
-  SubmitResultOperation submitOp;
-
-  //!> internally bound function such that host and service don't have to be stored, submits result
-  boost::function<void ()> submitresult;
-
-  //!> operation that handles removal from pool
-  RemoveFromPoolOperation removeOp;
-
-  //!> internally bound function such that host and service don't have to be stored, removes us from server
-  boost::function<void ()> removeme;
+  //!> internal queue for all asynchronous operations
+  OperationQueue OpQueue;
 };
 
