Index: src/Fragmentation/Automation/Operations/OperationQueue.cpp
===================================================================
--- src/Fragmentation/Automation/Operations/OperationQueue.cpp	(revision b15c4f94be3c79c09159bcc3186d3b4d4f735d7c)
+++ src/Fragmentation/Automation/Operations/OperationQueue.cpp	(revision 92b1d39c3763b13224e498d28e23523734f99945)
@@ -35,4 +35,6 @@
 #include "WorkerAddress.hpp"
 
+size_t OperationQueue::max_connections = 1;
+
 OperationQueue::OperationQueue_t::iterator OperationQueue::findOperation(AsyncOperation *op)
 {
@@ -48,11 +50,41 @@
     AsyncOp_ptr ptr(op); // this always prevents memory loss
     ptr->signOn(this);
-    queue.push_back( ptr );
+    OperationQueue_t::iterator iter = queue.insert(queue.end(), ptr );
     op = NULL;
-    // only start operation when address is valid
-    if ((!address.host.empty()) && (!address.service.empty()))
-      (*ptr)(address.host, address.service);
+    AddressMap.insert( make_pair(*iter, address) );
+    LaunchNextOp();
   } else {
     ELOG(1, "Given operation pointer is NULL.");
+  }
+}
+
+void OperationQueue::LaunchNextOp()
+{
+  // connection available?
+  if (getNumberOfRunningOps() < max_connections) {
+    // only start operation when address is valid
+    OperationQueue_t::iterator queueiter =
+        std::find_if(queue.begin(), queue.end(),
+            boost::bind(&AddressMap_t::count, boost::ref(AddressMap), boost::lambda::_1) );
+    if (queueiter != queue.end()) {
+      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;
+      // 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())) {
+        LOG(2, "DEBUG: Launching next operation " << ptr->getName() << ".");
+       (*ptr)(address.host, address.service);
+      } else {
+        LOG(3, "DEBUG: Skipping debug operation " << ptr->getName() << " with empty address.");
+      }
+    } else {
+      LOG(2, "DEBUG: All remaining operations are already running.");
+    }
+  } else {
+    LOG(2, "DEBUG: Currently there are no free connections.");
   }
 }
@@ -82,4 +114,5 @@
     // remove from queue
     remove(op, this);
+    LaunchNextOp();
   }
 }
Index: src/Fragmentation/Automation/Operations/OperationQueue.hpp
===================================================================
--- src/Fragmentation/Automation/Operations/OperationQueue.hpp	(revision b15c4f94be3c79c09159bcc3186d3b4d4f735d7c)
+++ src/Fragmentation/Automation/Operations/OperationQueue.hpp	(revision 92b1d39c3763b13224e498d28e23523734f99945)
@@ -37,5 +37,6 @@
    */
   OperationQueue() :
-    Observer("OperationQueue")
+    Observer("OperationQueue"),
+    RunningOps(0)
   {}
   /** Default destructor for class OperationQueue.
@@ -74,4 +75,18 @@
   void remove(AsyncOperation *op, Observer *observer);
 
+  /** Returns the number of currently running operations.
+   *
+   * @return Gives the difference between the entries in the queue and in the AddressMap.
+   */
+  size_t getNumberOfRunningOps() const
+  {
+    return queue.size() - AddressMap.size();
+  }
+
+  /** Helper to launch the next pending operation.
+   *
+   */
+  void LaunchNextOp();
+
   //!> internal operation to send jobs to workers
   typedef std::deque<AsyncOp_ptr> OperationQueue_t;
@@ -84,7 +99,18 @@
   OperationQueue_t::iterator findOperation(AsyncOperation *op);
 
+  //!> internal number stating how many operations are running
+  size_t RunningOps;
+
+  //!> giving the maximum number of connections
+  static size_t max_connections;
+
 private:
   //!> internal queue with operations
   OperationQueue_t queue;
+
+  //!> typedef for the association for each operation to its address to connect to
+  typedef std::map<AsyncOp_ptr, WorkerAddress> AddressMap_t;
+  //!> Association for each operation to its address to connect to
+  AddressMap_t AddressMap;
 };
 
