diff --git a/Modules/CppRestSdk/include/mitkRESTClient.h b/Modules/CppRestSdk/include/mitkRESTClient.h
index 4ea071c392..bf4d3b4147 100644
--- a/Modules/CppRestSdk/include/mitkRESTClient.h
+++ b/Modules/CppRestSdk/include/mitkRESTClient.h
@@ -1,59 +1,59 @@
 /*===================================================================
 
 The Medical Imaging Interaction Toolkit (MITK)
 
 Copyright (c) German Cancer Research Center,
 Division of Medical and Biological Informatics.
 All rights reserved.
 
 This software is distributed WITHOUT ANY WARRANTY; without
 even the implied warranty of MERCHANTABILITY or FITNESS FOR
 A PARTICULAR PURPOSE.
 
 See LICENSE.txt or http://www.mitk.org for details.
 
 ===================================================================*/
 
 #ifndef MITKRESTCLIENT_H
 #define MITKRESTCLIENT_H
 
 #include "cpprest/asyncrt_utils.h"
 #include "cpprest/containerstream.h"
 #include "cpprest/filestream.h"
 #include "cpprest/http_client.h"
 #include "cpprest/json.h"
 #include "cpprest/producerconsumerstream.h"
 #include "cpprest/uri.h"
 
 // hm.. maybe go after that warning at some time? seems like a nasty hack, but works so far :)
 #pragma warning(disable : 4251)
 
 #include "MitkCppRestSdkExports.h"
 
 typedef web::http::client::http_client MitkClient;
 typedef web::http::http_request MitkRequest;
 typedef web::http::http_response MitkResponse;
 typedef web::http::methods MitkRESTMethods;
 typedef web::http::uri_builder MitkUriBuilder;
 typedef web::http::status_codes MitkRestStatusCodes;
 typedef web::json::json_exception MitkJsonException;
 
 namespace mitk
 {
   class MITKCPPRESTSDK_EXPORT RESTClient
   {
   public:;
     RESTClient(utility::string_t url);
     virtual ~RESTClient();
 
-    void executeGETRequest(const utility::string_t filePath, utility::string_t uri);
-    void executeWADOGET(const utility::string_t filePath, std::string studyUID, std::string seriesUID, std::string instanceUID);
-    void executeWADOGET(const utility::string_t filePath, std::string studyUID, std::string seriesUID);
+    pplx::task<void> executeGETRequest(const utility::string_t filePath, utility::string_t uri);
+    pplx::task<void> executeWADOGET(const utility::string_t filePath, std::string studyUID, std::string seriesUID, std::string instanceUID);
+    pplx::task<void> executeWADOGET(const utility::string_t filePath, std::string studyUID, std::string seriesUID);
  
   private:
     MitkClient m_Client;
 
   };
 };
 
 #endif // MITKRESTCLIENT_H
\ No newline at end of file
diff --git a/Modules/CppRestSdk/src/mitkRESTClient.cpp b/Modules/CppRestSdk/src/mitkRESTClient.cpp
index db91239c53..d664d047ab 100644
--- a/Modules/CppRestSdk/src/mitkRESTClient.cpp
+++ b/Modules/CppRestSdk/src/mitkRESTClient.cpp
@@ -1,97 +1,115 @@
 /*===================================================================
 
 The Medical Imaging Interaction Toolkit (MITK)
 
 Copyright (c) German Cancer Research Center,
 Division of Medical and Biological Informatics.
 All rights reserved.
 
 This software is distributed WITHOUT ANY WARRANTY; without
 even the implied warranty of MERCHANTABILITY or FITNESS FOR
 A PARTICULAR PURPOSE.
 
 See LICENSE.txt or http://www.mitk.org for details.
 
 ===================================================================*/
 
 #include "mitkRESTClient.h"
 
 #include <mitkCommon.h>
 
-mitk::RESTClient::RESTClient(utility::string_t url) : m_Client(url) {}
+mitk::RESTClient::RESTClient(utility::string_t url) : m_Client(url) {
+}
 
 mitk::RESTClient::~RESTClient() {}
 
-void mitk::RESTClient::executeGETRequest(utility::string_t filePath, utility::string_t uri)
+pplx::task<void> mitk::RESTClient::executeGETRequest(utility::string_t filePath, utility::string_t uri)
 {
   MITK_INFO << "Calling GET with " << utility::conversions::to_utf8string(uri) << " on client "
             << utility::conversions::to_utf8string(m_Client.base_uri().to_string()) << " save into "
             << utility::conversions::to_utf8string(filePath);
 
   auto fileBuffer = std::make_shared<concurrency::streams::streambuf<uint8_t>>();
 
-  concurrency::streams::file_buffer<uint8_t>::open(filePath, std::ios::out).then([=](concurrency::streams::streambuf<uint8_t> outFile) -> pplx::task<MitkResponse>
+  return concurrency::streams::file_buffer<uint8_t>::open(filePath, std::ios::out).then([=](concurrency::streams::streambuf<uint8_t> outFile) -> pplx::task<MitkResponse>
   {
     *fileBuffer = outFile;
 
     return m_Client.request(MitkRESTMethods::GET, uri);
   })
     // Write the response body into the file buffer.
     .then([=](MitkResponse response) -> pplx::task<size_t>
   {
       MITK_INFO << "Status code: " << response.status_code();
 
     return response.body().read_to_end(*fileBuffer);
   })
     // Close the file buffer.
     .then([=](size_t)
   {
     return fileBuffer->close();
-  })
-    // Wait for the entire response body to be written into the file.
-    .wait();
+  });
+  //  // Wait for the entire response body to be written into the file.
+  //  .wait();
 
-  return;
 }
 
-void mitk::RESTClient::executeWADOGET(utility::string_t filePath, std::string studyUID, std::string seriesUID, std::string instanceUID)
+pplx::task<void> mitk::RESTClient::executeWADOGET(utility::string_t filePath, std::string studyUID, std::string seriesUID, std::string instanceUID)
 {
   MitkUriBuilder builder(U("wado"));
   builder.append_query(U("requestType"), U("WADO"));
   builder.append_query(U("studyUID"), utility::conversions::to_string_t(studyUID));
   builder.append_query(U("seriesUID"), utility::conversions::to_string_t(seriesUID));
   builder.append_query(U("objectUID"), utility::conversions::to_string_t(instanceUID));
   builder.append_query(U("contentType"), U("application/dicom"));
-  executeGETRequest(filePath, builder.to_string());
+  return executeGETRequest(filePath, builder.to_string());
 }
 
-void mitk::RESTClient::executeWADOGET(const utility::string_t folderPath, std::string studyUID, std::string seriesUID)
+pplx::task<void> mitk::RESTClient::executeWADOGET(const utility::string_t folderPath, std::string studyUID, std::string seriesUID)
 {
-  MitkUriBuilder builder(U("instances"));
-  builder.append_query(U("studyUID"), utility::conversions::to_string_t(studyUID));
-  builder.append_query(U("seriesUID"), utility::conversions::to_string_t(seriesUID));
+  MitkUriBuilder builder(U("rs/instances"));
+  builder.append_query(U("StudyInstanceUID"), utility::conversions::to_string_t(studyUID));
+  builder.append_query(U("SeriesInstanceUID"), utility::conversions::to_string_t(seriesUID));
 
-  m_Client.request(MitkRESTMethods::GET, builder.to_string()).then([=](MitkResponse response)
+  MITK_INFO << utility::conversions::to_utf8string(builder.to_string());
+  MitkRequest getSeries(MitkRESTMethods::GET);
+  getSeries.set_request_uri(builder.to_string());
+  getSeries.headers().add(U("Accept"), U("application/json"));
+
+  return m_Client.request(getSeries).then([=](MitkResponse response)
   {
     MITK_INFO << "search for instances in series with uid " << seriesUID
               << " status: " << response.status_code();
 
     auto jsonListResult = response.extract_json().get();
     auto resultArray = jsonListResult.as_array();
 
+    std::vector<pplx::task<void>> tasks;
+
     for (unsigned short i = 0; i < resultArray.size(); i++)
     {
-      auto firstResult = resultArray[i];
-      auto sopInstanceUIDKey = firstResult.at(U("00080018"));
-      auto sopInstanceObject = sopInstanceUIDKey.as_object();
-      auto valueKey = sopInstanceObject.at(U("Value"));
-      auto sopInstanceUID = valueKey.as_string();
-
-      auto filePath = utility::string_t(folderPath)
-                        .append(sopInstanceUID)
-                        .append(U(".dcm"));
-      executeWADOGET(filePath, studyUID, seriesUID, utility::conversions::to_utf8string(sopInstanceUID));
+      try 
+      {
+        auto firstResult = resultArray[i];
+        auto sopInstanceUIDKey = firstResult.at(U("00080018"));
+        auto sopInstanceObject = sopInstanceUIDKey.as_object();
+        auto valueKey = sopInstanceObject.at(U("Value"));
+        auto valueArray = valueKey.as_array();
+        auto sopInstanceUID = valueArray[0].as_string();
+
+        auto filePath = utility::string_t(folderPath)
+          .append(sopInstanceUID)
+          .append(U(".dcm"));
+        auto task = executeWADOGET(filePath, studyUID, seriesUID, utility::conversions::to_utf8string(sopInstanceUID));
+        tasks.push_back(task);
+      }
+      catch (const web::json::json_exception& e) 
+      {
+        MITK_ERROR << e.what();
+      }
     }
-  });
 
+    auto joinTask = pplx::when_all(begin(tasks), end(tasks));
+    return joinTask;
+  });
 }
diff --git a/Plugins/org.mitk.gui.qt.segmentation.rework/CMakeLists.txt b/Plugins/org.mitk.gui.qt.segmentation.rework/CMakeLists.txt
index fb79d2b4b1..05d0b97c3b 100644
--- a/Plugins/org.mitk.gui.qt.segmentation.rework/CMakeLists.txt
+++ b/Plugins/org.mitk.gui.qt.segmentation.rework/CMakeLists.txt
@@ -1,7 +1,8 @@
 project(org_mitk_gui_qt_segmentation_rework)
 
 mitk_create_plugin(
   EXPORT_DIRECTIVE REWORK_EXPORT
   EXPORTED_INCLUDE_SUFFIXES src
+  PACKAGE_DEPENDS Boost
   MODULE_DEPENDS MitkQtWidgetsExt MitkCppRestSdk MitkChart
 )
diff --git a/Plugins/org.mitk.gui.qt.segmentation.rework/src/internal/SegmentationReworkView.cpp b/Plugins/org.mitk.gui.qt.segmentation.rework/src/internal/SegmentationReworkView.cpp
index abbda47838..399e4a08c0 100644
--- a/Plugins/org.mitk.gui.qt.segmentation.rework/src/internal/SegmentationReworkView.cpp
+++ b/Plugins/org.mitk.gui.qt.segmentation.rework/src/internal/SegmentationReworkView.cpp
@@ -1,158 +1,162 @@
 /*===================================================================
 
 The Medical Imaging Interaction Toolkit (MITK)
 
 Copyright (c) German Cancer Research Center,
 Division of Medical and Biological Informatics.
 All rights reserved.
 
 This software is distributed WITHOUT ANY WARRANTY; without
 even the implied warranty of MERCHANTABILITY or FITNESS FOR
 A PARTICULAR PURPOSE.
 
 See LICENSE.txt or http://www.mitk.org for details.
 
 ===================================================================*/
 
 // Blueberry
 #include <berryISelectionService.h>
 #include <berryIWorkbenchWindow.h>
 
 // Qmitk
 #include "SegmentationReworkView.h"
 
 // Qt
 #include <QMessageBox>
 
 #include <mitkIOUtil.h>
 
 const std::string SegmentationReworkView::VIEW_ID = "org.mitk.views.segmentationreworkview";
 
 void SegmentationReworkView::SetFocus()
 {
 
 }
 
 void SegmentationReworkView::CreateQtPartControl(QWidget *parent)
 {
   // create GUI widgets from the Qt Designer's .ui file
   m_Controls.setupUi(parent);
 
   connect(m_Controls.buttonUpload, &QPushButton::clicked, this, &SegmentationReworkView::UploadNewSegmentation);
 
 
   utility::string_t port = U("2020");
   utility::string_t address = U("http://127.0.0.1:");
   address.append(port);
 
   m_HttpHandler = std::unique_ptr<SegmentationReworkREST>(new SegmentationReworkREST(address));
 
   connect(m_HttpHandler.get(), &SegmentationReworkREST::InvokeUpdateChartWidget, this, &SegmentationReworkView::UpdateChartWidget);
 
   m_HttpHandler->SetPutCallback(std::bind(&SegmentationReworkView::RESTPutCallback, this, std::placeholders::_1));
   m_HttpHandler->Open().wait();
 
   MITK_INFO << "Listening for requests at: " << utility::conversions::to_utf8string(address);
 
   utility::string_t pacsHost = U("http://193.174.48.78:8090/dcm4chee-arc/aets/DCM4CHEE");
-  m_RestClient = new mitk::RESTClient(U("http://www.officesupplyuae.com"));
+  m_RestClient = new mitk::RESTClient(pacsHost);
 
-  m_RestClient->executeWADOGET(U("/tmp/"), "1.2.840.113654.2.70.1.311779127785374989361829772874593461506", "1.2.840.113654.2.70.1.182762555335754050396179618615436313390");
+  utility::string_t folderPathSeries = U("/temp/downloadSeries/");
+  m_RestClient->executeWADOGET(folderPathSeries, "1.2.840.113654.2.70.1.311779127785374989361829772874593461506", "1.2.840.113654.2.70.1.182762555335754050396179618615436313390").wait();
+  MITK_INFO << "Loading series";
+  auto firstFilePath = folderPathSeries.append(U("1.2.840.113654.2.70.1.102028037630900004226480999888296698838.dcm"));
+  mitk::IOUtil::Load(utility::conversions::to_utf8string(firstFilePath), *this->GetDataStorage());
 }
 
 void SegmentationReworkView::RESTPutCallback(const SegmentationReworkREST::DicomDTO& dto)
 {
   MITK_INFO << "callback! " << dto.studyUID << dto.seriesUID << dto.instanceUID;
   SetSimilarityGraph(dto.simScoreArray, dto.minSliceStart);
 
   auto filePath = U("/temp/downloadWADO.dcm");
 
  // m_RestClient->executeWADOGET(filePath, dto.studyUID, dto.seriesUID, dto.instanceUID);
 
   MITK_INFO << "load file into data storage";
-  //mitk::IOUtil::Load(utility::conversions::to_utf8string(filePath), *this->GetDataStorage());
+  //mitk::IOUtil::Load(utility::conversions::to_utf8string(filePath), *this->GetDataStorage()).wait();
   this->GetDataStorage()->GetAll()->at(0)->Update();
 }
 
 void SegmentationReworkView::UpdateChartWidget() {
   m_Controls.chartWidget->Show();
 }
 
 void SegmentationReworkView::SetSimilarityGraph(std::vector<double> simScoreArray, int sliceMinStart)
 {
   std::map<double, double> map;
   MITK_INFO << simScoreArray.size();
 
   double sliceIndex = sliceMinStart;
   for (double score : simScoreArray) {
     map.insert(std::map<double, double>::value_type(sliceIndex, score));
     sliceIndex++;
   }
   m_Controls.chartWidget->AddData2D(map, "similarity score");
   m_Controls.chartWidget->SetChartType("similarity score", QmitkChartWidget::ChartType::line);
   m_Controls.chartWidget->SetXAxisLabel("slice number");
   m_Controls.chartWidget->SetYAxisLabel("similarity score");
 }
 
 
 void SegmentationReworkView::OnSelectionChanged(berry::IWorkbenchPart::Pointer /*source*/,
                                                 const QList<mitk::DataNode::Pointer> &nodes)
 {
   // iterate all selected objects, adjust warning visibility
   foreach (mitk::DataNode::Pointer node, nodes)
   {
     if (node.IsNotNull() && dynamic_cast<mitk::Image *>(node->GetData()))
     {
       m_Controls.labelWarning->setVisible(false);
       return;
     }
   }
 
   m_Controls.labelWarning->setVisible(true);
 }
 
 void SegmentationReworkView::UploadNewSegmentation()
 {
 
 }
 
 void SegmentationReworkView::DoImageProcessing()
 {
   QList<mitk::DataNode::Pointer> nodes = this->GetDataManagerSelection();
   if (nodes.empty())
     return;
 
   mitk::DataNode *node = nodes.front();
 
   if (!node)
   {
     // Nothing selected. Inform the user and return
     QMessageBox::information(nullptr, "Template", "Please load and select an image before starting image processing.");
     return;
   }
 
   // here we have a valid mitk::DataNode
 
   // a node itself is not very useful, we need its data item (the image)
   mitk::BaseData *data = node->GetData();
   if (data)
   {
     // test if this data item is an image or not (could also be a surface or something totally different)
     mitk::Image *image = dynamic_cast<mitk::Image *>(data);
     if (image)
     {
       std::stringstream message;
       std::string name;
       message << "Performing image processing for image ";
       if (node->GetName(name))
       {
         // a property called "name" was found for this DataNode
         message << "'" << name << "'";
       }
       message << ".";
       MITK_INFO << message.str();
 
       // actually do something here...
     }
   }
 }