diff --git a/producer/api/include/producer/producer.h b/producer/api/include/producer/producer.h
index ce4cc920975f500ac978a6a7e3f4139339ea3ff9..bc2f11da4a69eb7ce2824167231df73aafc302d0 100644
--- a/producer/api/include/producer/producer.h
+++ b/producer/api/include/producer/producer.h
@@ -6,45 +6,41 @@
 #include <common/networking.h>
 #include <system_wrappers/io.h>
 
-namespace hidra2
-{
-    enum ProducerError {
-        PRODUCER_ERROR__OK,
-        PRODUCER_ERROR__CONNECTION_NOT_READY,
-        PRODUCER_ERROR__CHUNK_PROVIDER_NOT_READY_AT_START,
-    };
-
-    enum ProducerStatus {
-        PRODUCER_STATUS__DISCONNECTED,
-        PRODUCER_STATUS__CONNECTING,
-        PRODUCER_STATUS__CONNECTED,
-        PRODUCER_STATUS__SENDING,
-        PRODUCER_STATUS__ERROR,
-    };
-
-    struct FileChunk {
-        void* ptr;
-        uint64_t start_byte;
-        uint64_t chunk_size;
-    };
-
-
-    class Producer
-    {
-     private:
-      IO io
-    public:
-        static std::unique_ptr<Producer> create();
-
-        //virtual ~Producer() = 0;W
-
-        virtual void            __set_io(IO* io);
-
-        virtual uint64_t        get_version() const = 0;
-        virtual ProducerStatus  get_status() const = 0;
-        virtual ProducerError   connectToReceiver(std::string receiver_address) = 0;
-        virtual FileReferenceId send(std::string filename, uint64_t file_size, void* data) = 0;
-    };
+namespace hidra2 {
+enum ProducerError {
+  PRODUCER_ERROR__OK,
+  PRODUCER_ERROR__CONNECTION_NOT_READY,
+  PRODUCER_ERROR__CHUNK_PROVIDER_NOT_READY_AT_START,
+};
+
+enum ProducerStatus {
+  PRODUCER_STATUS__DISCONNECTED,
+  PRODUCER_STATUS__CONNECTING,
+  PRODUCER_STATUS__CONNECTED,
+  PRODUCER_STATUS__SENDING,
+  PRODUCER_STATUS__ERROR,
+};
+
+struct FileChunk {
+  void *ptr;
+  uint64_t start_byte;
+  uint64_t chunk_size;
+};
+
+class Producer {
+ public:
+  static std::unique_ptr<Producer> create();
+
+  //virtual ~Producer() = 0;
+
+  virtual void __set_io(IO *io) = 0;
+
+  virtual uint64_t get_version() const = 0;
+  virtual ProducerStatus get_status() const = 0;
+
+  virtual ProducerError connect_to_receiver(std::string receiver_address) = 0;
+  virtual ProducerError send(std::string filename, uint64_t file_size, void *data) = 0;
+};
 }
 
 #endif //HIDRA2__PRODUCER_PRODUCER_H
diff --git a/producer/api/src/producer.cpp b/producer/api/src/producer.cpp
index 06e04169a380a20409a7178d86fc79a9ae209c6a..e92d9872141c6420bd746ff0de37153901b4eb53 100644
--- a/producer/api/src/producer.cpp
+++ b/producer/api/src/producer.cpp
@@ -1,8 +1,6 @@
 #include "producer/producer.h"
 #include "producer_impl.h"
 
-
-std::unique_ptr<hidra2::Producer> hidra2::Producer::create()
-{
+std::unique_ptr<hidra2::Producer> hidra2::Producer::create() {
     return std::unique_ptr<hidra2::Producer>(new ProducerImpl());
 }
diff --git a/producer/api/src/producer_impl.cpp b/producer/api/src/producer_impl.cpp
index 72813e3effb7b490fdc7e56d90ff8d941cb161f3..12e3b2ff608db24b5958c931522582f5839f3a8c 100644
--- a/producer/api/src/producer_impl.cpp
+++ b/producer/api/src/producer_impl.cpp
@@ -1,44 +1,30 @@
+#include <system_wrappers/system_io.h>
 #include "producer_impl.h"
 
 const uint32_t hidra2::ProducerImpl::kVersion = 1;
+const hidra2::IO *hidra2::ProducerImpl::kDefaultIO = new hidra2::SystemIO();
+
 hidra2::FileReferenceId hidra2::ProducerImpl::kGlobalReferenceId = 0;
 
-uint64_t hidra2::ProducerImpl::get_version() const {
-    return kVersion;
+hidra2::ProducerImpl::ProducerImpl() {
+  __set_io(ProducerImpl::kDefaultIO);
 }
 
-hidra2::ProducerStatus hidra2::ProducerImpl::get_status() const {
-    return PRODUCER_STATUS__CONNECTED;
+void hidra2::ProducerImpl::__set_io(hidra2::IO *io) {
+  this->io = io;
 }
 
-hidra2::ProducerError hidra2::ProducerImpl::connectToReceiver(std::string receiver_address) {
-    return PRODUCER_ERROR__OK;
+uint64_t hidra2::ProducerImpl::get_version() const {
+  return kVersion;
 }
 
-hidra2::FileReferenceId
-hidra2::ProducerImpl::send(std::string filename, uint64_t file_size, Yieldable<hidra2::FileChunk>* chunk_provider,
-                           std::function<void(hidra2::FileChunk)> after_processing,
-                           std::function<void(hidra2::FileReferenceId, hidra2::ProducerError)> file_done,
-                           hidra2::ProducerError &error) {
-    hidra2::FileReferenceId ref_id = kGlobalReferenceId++;
-
-    if (chunk_provider->is_done()) {
-        return PRODUCER_ERROR__CHUNK_PROVIDER_NOT_READY_AT_START;
-    }
-    do {
-        chunk_provider->next();
-    } while (!chunk_provider->is_done());
-
-    file_done(ref_id, hidra2::ProducerError::PRODUCER_ERROR__OK);
-
-    error = PRODUCER_ERROR__OK;
-    return ref_id;
+hidra2::ProducerStatus hidra2::ProducerImpl::get_status() const {
+  return PRODUCER_STATUS__CONNECTED;
 }
-/*
-hidra2::ProducerImpl::~ProducerImpl()
-{
 
+hidra2::ProducerError hidra2::ProducerImpl::connect_to_receiver(std::string receiver_address) {
+  return PRODUCER_ERROR__OK;
 }
- */
-
 
+hidra2::ProducerError hidra2::ProducerImpl::send(std::string filename, uint64_t file_size, void *data) {
+}
diff --git a/producer/api/src/producer_impl.h b/producer/api/src/producer_impl.h
index 435fc63ce2b640157b14d470e59f6d6f992036f7..5848a32ead6471ac6ddc95af718bd7e7d6c91ca9 100644
--- a/producer/api/src/producer_impl.h
+++ b/producer/api/src/producer_impl.h
@@ -6,21 +6,27 @@
 
 namespace hidra2 {
 class ProducerImpl : public Producer {
+  friend Producer;
  private:
   static const uint32_t kVersion;
   static FileReferenceId kGlobalReferenceId;
+  static IO* const kDefaultIO;
+
+  IO* io;
+
+  ProducerImpl() = default;
 
  public:
   ProducerImpl(const ProducerImpl &) = delete;
   ProducerImpl &operator=(const ProducerImpl &) = delete;
-  ProducerImpl() = default;
   //~ProducerImpl() override;
 
+  void __set_io(IO* io) override;
 
   uint64_t get_version() const override;
   ProducerStatus get_status() const override;
-  ProducerError connectToReceiver(std::string receiver_address) override;
-  FileReferenceId send(std::string filename, uint64_t file_size, void* data) override;
+  ProducerError connect_to_receiver(std::string receiver_address) override;
+  ProducerError send(std::string filename, uint64_t file_size, void* data) override;
 
 };
 }
diff --git a/producer/dummy-event-detector-cpp/src/dummy_detector.cpp b/producer/dummy-event-detector-cpp/src/dummy_detector.cpp
index 669f3b98a7b7710a004f5f84f1408f519c90eb32..abf10327da5a6c257ee694169c1e7ac6807e5ce7 100644
--- a/producer/dummy-event-detector-cpp/src/dummy_detector.cpp
+++ b/producer/dummy-event-detector-cpp/src/dummy_detector.cpp
@@ -1,37 +1,25 @@
 #include "dummy_detector.h"
-#include "dummy_yieldable.h"
 #include <iostream>
 
-int DummyDetector::main(int argc, char** argv)
-{
+int DummyDetector::main(int argc, char **argv) {
 
-    std::unique_ptr<hidra2::Producer> producer = hidra2::Producer::create();
-    producer->connectToReceiver("127.0.0.1");
+  std::unique_ptr<hidra2::Producer> producer = hidra2::Producer::create();
+  producer->connect_to_receiver("127.0.0.1");
 
-    const size_t size = 1024*20;
-    void* buffer = malloc(size);
-    auto dummy_yieldable = new DummyYieldable(buffer, size);
+  const size_t size = 1024 * 20;
+  void *buffer = malloc(size);
 
-    hidra2::ProducerError error;
-    producer->send("test", size, dummy_yieldable,
-    [&dummy_yieldable, &buffer](hidra2::FileChunk fileChunk) {
-        if(dummy_yieldable->is_done()) {
-            free(buffer);
-            delete dummy_yieldable;
-        }
-    }, [this](hidra2::FileReferenceId reference_id, hidra2::ProducerError error) {
-        handle_file_done(reference_id, error);
-    },
-    error);
+  hidra2::ProducerError error;
+  error = producer->send("testfile", size, buffer);
 
-    return 0;
-}
+  if(error) {
+    std::cerr << "File was not successfully send, ErrorCode: " << error << std::endl;
+  }
+  else {
+    std::cout << "File was successfully send." << std::endl;
+  }
+
+  free(buffer);
 
-void DummyDetector::handle_file_done(hidra2::FileReferenceId reference_id, hidra2::ProducerError error)
-{
-    if(!error) {
-        std::cout << "File " << reference_id << " was successfully send." << std::endl;
-        return;
-    }
-    std::cout << "An error occurred while sending file " << error << std::endl;
+  return 0;
 }