Index: src/Fragmentation/Automation/Operations/Controllers/GetNextJobIdOperation.cpp
===================================================================
--- src/Fragmentation/Automation/Operations/Controllers/GetNextJobIdOperation.cpp	(revision e1161100bfae430fd5106708fc3936e1fe69a8a8)
+++ src/Fragmentation/Automation/Operations/Controllers/GetNextJobIdOperation.cpp	(revision bc16259004479a079319350325887ab2b54b8cf5)
@@ -46,7 +46,7 @@
   {
     // Successfully established connection. Give choice.
-          enum ControllerChoices choice = GetNextJobId;
+    enum ControllerChoices choice = GetNextJobId;
     connection_.async_write(choice,
-      boost::bind(&GetNextJobIdOperation::handle_ReceiveNextId, this,
+      boost::bind(&GetNextJobIdOperation::handle_SendNumberIds, this,
       boost::asio::placeholders::error));
   } else if (endpoint_iterator != boost::asio::ip::tcp::resolver::iterator()) {
@@ -65,9 +65,9 @@
 }
 
-/** Callback function when doneJobs have been received.
+/** Callback function when sending number of desired job ids.
  *
  * \param e error code if something went wrong
  */
-void GetNextJobIdOperation::handle_ReceiveNextId(const boost::system::error_code& e)
+void GetNextJobIdOperation::handle_SendNumberIds(const boost::system::error_code& e)
 {
   Info info(__FUNCTION__);
@@ -76,6 +76,29 @@
     // The connection::async_read() function will automatically
     // decode the data that is written to the underlying socket.
-    LOG(1, "INFO: Obtaining next available job id ...");
-    connection_.async_read(nextid,
+    LOG(1, "INFO: Requesting " << NumberIds <<  " ids  ...");
+    connection_.async_write(NumberIds,
+      boost::bind(&GetNextJobIdOperation::handle_ReceiveNextIds, this,
+      boost::asio::placeholders::error));
+  }
+  else
+  {
+    // An error occurred.
+    ELOG(1, e.message());
+  }
+}
+
+/** Callback function when doneJobs have been received.
+ *
+ * \param e error code if something went wrong
+ */
+void GetNextJobIdOperation::handle_ReceiveNextIds(const boost::system::error_code& e)
+{
+  Info info(__FUNCTION__);
+  if (!e)
+  {
+    // The connection::async_read() function will automatically
+    // decode the data that is written to the underlying socket.
+    LOG(1, "INFO: Obtaining a bunch of available job ids ...");
+    connection_.async_read(ids,
       boost::bind(&GetNextJobIdOperation::handle_FinishOperation, this,
       boost::asio::placeholders::error));
@@ -97,6 +120,7 @@
 
   // place id into nextids
-  nextids.push_back(nextid);
-  nextid = JobId::IllegalJob;
+  nextids.insert(nextids.end(), ids.begin(), ids.end());
+  ids.clear();
+  NumberIds = 0;
 
   // and finish operation
Index: src/Fragmentation/Automation/Operations/Controllers/GetNextJobIdOperation.hpp
===================================================================
--- src/Fragmentation/Automation/Operations/Controllers/GetNextJobIdOperation.hpp	(revision e1161100bfae430fd5106708fc3936e1fe69a8a8)
+++ src/Fragmentation/Automation/Operations/Controllers/GetNextJobIdOperation.hpp	(revision bc16259004479a079319350325887ab2b54b8cf5)
@@ -30,6 +30,5 @@
   /// Constructor for class GetNextJobIdOperation.
   GetNextJobIdOperation(Connection &_connection) :
-    AsyncOperation(std::string("getnextjobid"), _connection),
-    nextid(JobId::IllegalJob)
+    AsyncOperation(std::string("getnextjobid"), _connection)
   {}
   /// Destructor for class GetNextJobIdOperation
@@ -41,6 +40,14 @@
       boost::asio::ip::tcp::resolver::iterator endpoint_iterator);
 
-  /// Callback function when doneJobs have been received.
-  void handle_ReceiveNextId(const boost::system::error_code& e);
+  /// Callback function when sending number of desired job ids.
+  void handle_SendNumberIds(const boost::system::error_code& e);
+
+  /// Callback function when new job ids have been received.
+  void handle_ReceiveNextIds(const boost::system::error_code& e);
+
+  /// setter for the desired number of ids on next connect
+  void setDesiredIds(const size_t _number) {
+    NumberIds = _number;
+  }
 
   /// Getter for nextid
@@ -56,9 +63,13 @@
   void handle_FinishOperation(const boost::system::error_code& e);
 
-  /// current jobs left to calculate and currently calculated results
+private:
+  //!> number of desired job ids
+  size_t NumberIds;
+
+  //!> temporary for a bunch of received ids
+  std::vector<JobId_t> ids;
+
+  //!> number of received job ids
   std::list<JobId_t> nextids;
-
-  // temporary for receiving another job id
-  JobId_t nextid;
 };
 
