diff --git a/common/cpp/include/common/error.h b/common/cpp/include/common/error.h
index ee07360567adef4c64e4747b24e013509796bf59..863b87dafad91f0fb3d2f3488147a0c84650e3d8 100644
--- a/common/cpp/include/common/error.h
+++ b/common/cpp/include/common/error.h
@@ -155,5 +155,48 @@ auto const kEndOfFile = SimpleErrorTemplate {
 
 }
 
+template <typename ServiceErrorType, ErrorType MainErrorType>
+class ServiceError : public SimpleError {
+ private:
+  ServiceErrorType error_type_;
+ public:
+  ServiceError(const std::string& error, ServiceErrorType error_type) : SimpleError(error, MainErrorType) {
+      error_type_ = error_type;
+  }
+  ServiceErrorType GetServiceErrorType() const noexcept {
+      return error_type_;
+  }
+};
+
+template <typename ServiceErrorType, ErrorType MainErrorType>
+class ServiceErrorTemplate : public SimpleErrorTemplate {
+ protected:
+  ServiceErrorType error_type_;
+ public:
+  ServiceErrorTemplate(const std::string& error, ServiceErrorType error_type) : SimpleErrorTemplate(error,
+                                                                                                    MainErrorType) {
+      error_type_ = error_type;
+  }
+
+  inline ServiceErrorType GetServiceErrorType() const noexcept {
+      return error_type_;
+  }
+
+  inline Error Generate() const noexcept override {
+      auto err = new ServiceError<ServiceErrorType, MainErrorType>(error_, error_type_);
+      return Error(err);
+  }
+
+  inline Error Generate(const std::string& prefix) const noexcept {
+      auto err = new ServiceError<ServiceErrorType, MainErrorType>(prefix + " :" + error_, error_type_);
+      return Error(err);
+  }
+
+  inline bool operator==(const Error& rhs) const override {
+      return SimpleErrorTemplate::operator==(rhs)
+          && GetServiceErrorType() == ((ServiceError<ServiceErrorType, MainErrorType>*) rhs.get())->GetServiceErrorType();
+  }
+};
+
 }
 #endif //ASAPO_ERROR_H
diff --git a/deploy/nomad_jobs/fluentd.conf b/deploy/nomad_jobs/fluentd.conf
index 3c7d54708e94b1dc168d7dac3922e78447ae85b7..5be45afa2f189e1dc97eb5435839651e017232d1 100644
--- a/deploy/nomad_jobs/fluentd.conf
+++ b/deploy/nomad_jobs/fluentd.conf
@@ -48,6 +48,7 @@
   <store>
   @type file
   flush_interval 1s
+  append true
   buffer_type memory
   path /shared/asapo-logs
   </store>
diff --git a/receiver/CMakeLists.txt b/receiver/CMakeLists.txt
index e13af4c7e7bc1b6d535e2a4506e99a9b1a736a8d..3bccb108760827e87ad3b553927a8662b4962470 100644
--- a/receiver/CMakeLists.txt
+++ b/receiver/CMakeLists.txt
@@ -12,7 +12,12 @@ set(SOURCE_FILES
         src/request_handler_authorize.cpp
         src/statistics_sender_fluentd.cpp
         src/requests_dispatcher.cpp
-)
+        src/receiver_data_server/receiver_data_server.cpp
+        src/receiver_data_server/net_server.cpp
+        src/receiver_data_server/tcp_server.cpp
+        src/receiver_data_server/request_pool.cpp
+        src/receiver_data_server/request.cpp
+        src/receiver_data_server/receiver_data_server_logger.cpp)
 
 
 ################################
@@ -63,3 +68,7 @@ set(TEST_SOURCE_FILES
 #
 set(TEST_LIBRARIES "${TARGET_NAME};system_io")
 gtest(${TARGET_NAME} "${TEST_SOURCE_FILES}" "${TEST_LIBRARIES}" ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp)
+
+set(TEST_SOURCE_FILES_RDS
+        unittests/receiver_data_server/test_receiver_data_server.cpp)
+gtest(${TARGET_NAME}_RDS "${TEST_SOURCE_FILES_RDS}" "${TEST_LIBRARIES}")
diff --git a/receiver/src/receiver_data_server/common.h b/receiver/src/receiver_data_server/common.h
new file mode 100644
index 0000000000000000000000000000000000000000..552b109b034248db40eda40222c02db875bb0e6d
--- /dev/null
+++ b/receiver/src/receiver_data_server/common.h
@@ -0,0 +1,13 @@
+#ifndef ASAPO_COMMON_H
+#define ASAPO_COMMON_H
+
+#include <vector>
+
+#include "request.h"
+namespace asapo {
+
+using Requests = std::vector<asapo::Request>;
+
+}
+
+#endif //ASAPO_COMMON_H
diff --git a/receiver/src/receiver_data_server/net_server.cpp b/receiver/src/receiver_data_server/net_server.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..dbc8718a1dc0fef2c2f281f6ce05d49e0e1ded4b
--- /dev/null
+++ b/receiver/src/receiver_data_server/net_server.cpp
@@ -0,0 +1,5 @@
+#include "net_server.h"
+
+namespace asapo {
+
+}
\ No newline at end of file
diff --git a/receiver/src/receiver_data_server/net_server.h b/receiver/src/receiver_data_server/net_server.h
new file mode 100644
index 0000000000000000000000000000000000000000..d0ebb83bd9cc2c9564cc26eeee8e4ed3af378b58
--- /dev/null
+++ b/receiver/src/receiver_data_server/net_server.h
@@ -0,0 +1,18 @@
+#ifndef ASAPO_NET_SERVER_H
+#define ASAPO_NET_SERVER_H
+
+#include "common/error.h"
+
+#include "common.h"
+
+namespace asapo {
+
+class NetServer {
+  public:
+    virtual Requests GetNewRequests(Error* err) const noexcept = 0;
+    virtual ~NetServer() = default;
+};
+
+}
+
+#endif //ASAPO_NET_SERVER_H
diff --git a/receiver/src/receiver_data_server/receiver_data_server.cpp b/receiver/src/receiver_data_server/receiver_data_server.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..674a3cdc34313195828108c430f34e07741bb037
--- /dev/null
+++ b/receiver/src/receiver_data_server/receiver_data_server.cpp
@@ -0,0 +1,27 @@
+#include "receiver_data_server.h"
+#include "tcp_server.h"
+#include "receiver_data_server_logger.h"
+
+namespace asapo {
+
+ReceiverDataServer::ReceiverDataServer() : request_pool__{new RequestPool}, net__{new TcpServer()},
+log__{GetDefaultReceiverDataServerLogger()} {
+}
+
+void ReceiverDataServer::Run() {
+    while (true) {
+        Error err;
+        auto requests = net__->GetNewRequests(&err);
+        if (err) {
+            log__->Error(std::string("receiver data server stopped: ") + err->Explain());
+            return;
+        }
+        err = request_pool__->AddRequests(requests);
+        if (err) {
+            log__->Error(std::string("receiver data server stopped: ") + err->Explain());
+            return;
+        }
+    }
+}
+
+}
\ No newline at end of file
diff --git a/receiver/src/receiver_data_server/receiver_data_server.h b/receiver/src/receiver_data_server/receiver_data_server.h
new file mode 100644
index 0000000000000000000000000000000000000000..d3a2972efde3b0fa53dbba6cf56e100bdedb52bd
--- /dev/null
+++ b/receiver/src/receiver_data_server/receiver_data_server.h
@@ -0,0 +1,24 @@
+#ifndef ASAPO_RECEIVER_DATA_SERVER_H
+#define ASAPO_RECEIVER_DATA_SERVER_H
+
+#include <memory>
+
+#include "net_server.h"
+#include "request_pool.h"
+#include "logger/logger.h"
+
+namespace asapo {
+
+class ReceiverDataServer {
+  public:
+    std::unique_ptr<RequestPool> request_pool__;
+    std::unique_ptr<NetServer> net__;
+    const AbstractLogger* log__;
+
+    ReceiverDataServer();
+    void Run();
+};
+
+}
+
+#endif //ASAPO_RECEIVER_DATA_SERVER_H
diff --git a/receiver/src/receiver_data_server/receiver_data_server_error.h b/receiver/src/receiver_data_server/receiver_data_server_error.h
new file mode 100644
index 0000000000000000000000000000000000000000..822fbafbd3ed407a42b58b3100477e1cb3e0bf22
--- /dev/null
+++ b/receiver/src/receiver_data_server/receiver_data_server_error.h
@@ -0,0 +1,22 @@
+#ifndef ASAPO_RECEIVER_ERROR_H
+#define ASAPO_RECEIVER_ERROR_H
+
+#include "common/error.h"
+
+namespace asapo {
+
+enum class ReceiverDataServerErrorType {
+    kMemoryPool,
+};
+
+using ReceiverDataServerErrorTemplate = ServiceErrorTemplate<ReceiverDataServerErrorType, ErrorType::kReceiverError>;
+
+namespace ReceiverErrorTemplates {
+auto const kMemoryPool = ReceiverDataServerErrorTemplate {
+    "memory error", ReceiverDataServerErrorType::kMemoryPool
+};
+
+};
+}
+
+#endif //ASAPO_RECEIVER_ERROR_H
diff --git a/receiver/src/receiver_data_server/receiver_data_server_logger.cpp b/receiver/src/receiver_data_server/receiver_data_server_logger.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a3adbb050800da73957ccb9d9693c0d2a970cad5
--- /dev/null
+++ b/receiver/src/receiver_data_server/receiver_data_server_logger.cpp
@@ -0,0 +1,11 @@
+#include "receiver_data_server_logger.h"
+
+namespace asapo {
+
+
+AbstractLogger* GetDefaultReceiverDataServerLogger() {
+    static Logger logger = asapo::CreateDefaultLoggerBin("receiver_dataserver");
+    return logger.get();
+}
+
+}
diff --git a/receiver/src/receiver_data_server/receiver_data_server_logger.h b/receiver/src/receiver_data_server/receiver_data_server_logger.h
new file mode 100644
index 0000000000000000000000000000000000000000..c391dbe0d827627bf27edb7eb904235a16b62733
--- /dev/null
+++ b/receiver/src/receiver_data_server/receiver_data_server_logger.h
@@ -0,0 +1,14 @@
+#ifndef ASAPO_RECEIVER_LOGGER_H
+#define ASAPO_RECEIVER_LOGGER_H
+
+#include "logger/logger.h"
+
+namespace asapo {
+
+
+AbstractLogger* GetDefaultReceiverDataServerLogger();
+
+}
+
+
+#endif //ASAPO_RECEIVER_LOGGER_H
diff --git a/receiver/src/receiver_data_server/request.cpp b/receiver/src/receiver_data_server/request.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..85a4b136f49f3e469a6faf5b230a1bcef285dc8f
--- /dev/null
+++ b/receiver/src/receiver_data_server/request.cpp
@@ -0,0 +1,5 @@
+#include "request.h"
+
+namespace asapo {
+
+}
\ No newline at end of file
diff --git a/receiver/src/receiver_data_server/request.h b/receiver/src/receiver_data_server/request.h
new file mode 100644
index 0000000000000000000000000000000000000000..712dcb23e8fb375bbb5158328ac5af652f41d633
--- /dev/null
+++ b/receiver/src/receiver_data_server/request.h
@@ -0,0 +1,12 @@
+#ifndef ASAPO_REQUEST_H
+#define ASAPO_REQUEST_H
+
+namespace asapo {
+
+class Request {
+
+};
+
+}
+
+#endif //ASAPO_REQUEST_H
diff --git a/receiver/src/receiver_data_server/request_pool.cpp b/receiver/src/receiver_data_server/request_pool.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..837a62b2f219b5b2381e56fb78aa907136250082
--- /dev/null
+++ b/receiver/src/receiver_data_server/request_pool.cpp
@@ -0,0 +1,9 @@
+#include "request_pool.h"
+
+namespace asapo {
+
+Error RequestPool::AddRequests(const Requests& requests) noexcept {
+    return nullptr;
+}
+
+}
\ No newline at end of file
diff --git a/receiver/src/receiver_data_server/request_pool.h b/receiver/src/receiver_data_server/request_pool.h
new file mode 100644
index 0000000000000000000000000000000000000000..42d46fa20da2474ca89affac6d33e91131d8fbbf
--- /dev/null
+++ b/receiver/src/receiver_data_server/request_pool.h
@@ -0,0 +1,17 @@
+#ifndef ASAPO_REQUEST_POOL_H
+#define ASAPO_REQUEST_POOL_H
+
+#include "preprocessor/definitions.h"
+#include "common/error.h"
+#include "common.h"
+
+namespace asapo {
+
+class RequestPool {
+  public:
+    VIRTUAL Error AddRequests(const Requests& requests) noexcept;
+};
+
+}
+
+#endif //ASAPO_REQUEST_POOL_H
diff --git a/receiver/src/receiver_data_server/tcp_server.cpp b/receiver/src/receiver_data_server/tcp_server.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..db717fea1c103d0507153cd3b5f2310de031bce6
--- /dev/null
+++ b/receiver/src/receiver_data_server/tcp_server.cpp
@@ -0,0 +1,8 @@
+#include "tcp_server.h"
+
+namespace asapo {
+
+Requests TcpServer::GetNewRequests(Error* err) const noexcept {
+    return {};
+}
+}
\ No newline at end of file
diff --git a/receiver/src/receiver_data_server/tcp_server.h b/receiver/src/receiver_data_server/tcp_server.h
new file mode 100644
index 0000000000000000000000000000000000000000..27d28f078bf65b2f7c055ea974ee3f6800eaa644
--- /dev/null
+++ b/receiver/src/receiver_data_server/tcp_server.h
@@ -0,0 +1,15 @@
+#ifndef ASAPO_TCP_SERVER_H
+#define ASAPO_TCP_SERVER_H
+
+#include "net_server.h"
+
+namespace asapo {
+
+class TcpServer : public NetServer {
+  public:
+    virtual Requests GetNewRequests(Error* err) const noexcept override ;
+};
+
+}
+
+#endif //ASAPO_TCP_SERVER_H
diff --git a/receiver/unittests/receiver_data_server/receiver_dataserver_mocking.h b/receiver/unittests/receiver_data_server/receiver_dataserver_mocking.h
new file mode 100644
index 0000000000000000000000000000000000000000..07ebfe1409d1fca06d708cfe6599f2c7b4ed7594
--- /dev/null
+++ b/receiver/unittests/receiver_data_server/receiver_dataserver_mocking.h
@@ -0,0 +1,40 @@
+#ifndef ASAPO_MOCK_STATISTICS_H
+#define ASAPO_MOCK_STATISTICS_H
+
+#include <gtest/gtest.h>
+#include <gmock/gmock.h>
+
+#include "../../src/receiver_data_server/net_server.h"
+#include "../../src/receiver_data_server/request_pool.h"
+
+
+namespace asapo {
+
+class MockNetServer : public NetServer {
+  public:
+    Requests GetNewRequests(Error* err) const noexcept override {
+        ErrorInterface* error = nullptr;
+        auto reqs = GetNewRequests_t(&error);
+        err->reset(error);
+        return  reqs;
+    }
+
+    MOCK_CONST_METHOD1(GetNewRequests_t, Requests (ErrorInterface**
+                                                   error));
+};
+
+class MockPool : public RequestPool {
+  public:
+    Error AddRequests(const Requests& requests) noexcept override {
+        return Error(AddRequests_t(requests));
+
+    }
+
+    MOCK_METHOD1(AddRequests_t, ErrorInterface * (const Requests&));
+};
+
+
+
+}
+
+#endif //ASAPO_MOCK_STATISTICS_H
diff --git a/receiver/unittests/receiver_data_server/test_receiver_data_server.cpp b/receiver/unittests/receiver_data_server/test_receiver_data_server.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a7685fe9b0309c13ec47fae9142a5c39baa1c855
--- /dev/null
+++ b/receiver/unittests/receiver_data_server/test_receiver_data_server.cpp
@@ -0,0 +1,109 @@
+#include <gtest/gtest.h>
+#include <gmock/gmock.h>
+
+
+#include "unittests/MockLogger.h"
+#include "../../src/receiver_data_server/receiver_data_server.h"
+#include "../../src/receiver_data_server/tcp_server.h"
+#include "../../src/receiver_data_server/common.h"
+
+#include "receiver_dataserver_mocking.h"
+
+#include "common/io_error.h"
+#include "../../src/receiver_data_server/receiver_data_server_error.h"
+
+
+using ::testing::Test;
+using ::testing::Gt;
+using ::testing::Ge;
+using ::testing::Le;
+using ::testing::Eq;
+using ::testing::Ne;
+using ::testing::Ref;
+using ::testing::Return;
+using ::testing::_;
+using ::testing::SetArgPointee;
+using ::testing::NiceMock;
+using ::testing::HasSubstr;
+
+
+using asapo::MockLogger;
+using asapo::ReceiverDataServer;
+using asapo::Error;
+
+
+namespace {
+
+TEST(ReceiverDataServer, Constructor) {
+    ReceiverDataServer data_server;
+    ASSERT_THAT(dynamic_cast<const asapo::TcpServer*>(data_server.net__.get()), Ne(nullptr));
+    ASSERT_THAT(dynamic_cast<asapo::RequestPool*>(data_server.request_pool__.get()), Ne(nullptr));
+    ASSERT_THAT(dynamic_cast<const asapo::AbstractLogger*>(data_server.log__), Ne(nullptr));
+
+}
+
+class ReceiverDataServerTests : public Test {
+  public:
+    ReceiverDataServer data_server;
+    asapo::MockNetServer mock_net;
+    asapo::MockPool mock_pool;
+    NiceMock<asapo::MockLogger> mock_logger;
+    void SetUp() override {
+        data_server.net__ = std::unique_ptr<asapo::NetServer> {&mock_net};
+        data_server.request_pool__ = std::unique_ptr<asapo::RequestPool> {&mock_pool};
+        data_server.log__ = &mock_logger;
+
+    }
+    void TearDown() override {
+        data_server.net__.release();
+        data_server.request_pool__.release();
+    }
+};
+
+
+TEST_F(ReceiverDataServerTests, ErrorGetNewRequests) {
+
+    /*    EXPECT_CALL(mock_net, ProcessRequest_t(_)).WillOnce(
+            Return(nullptr)
+        ).WillOnce(
+            Return(new asapo::IOError("Test Send Error", asapo::IOErrorType::kUnknownIOError))
+        );
+    */
+
+    EXPECT_CALL(mock_net, GetNewRequests_t(_)).WillOnce(
+        DoAll(SetArgPointee<0>(asapo::IOErrorTemplates::kUnknownIOError.Generate().release()),
+              Return(asapo::Requests{})
+             )
+    );
+
+    auto errtext = asapo::IOErrorTemplates::kUnknownIOError.Generate()->Explain();
+
+    EXPECT_CALL(mock_logger, Error(AllOf(HasSubstr("stopped"), HasSubstr(errtext))));
+
+
+    data_server.Run();
+
+}
+
+TEST_F(ReceiverDataServerTests, ErrorAddingRequests) {
+
+    EXPECT_CALL(mock_net, GetNewRequests_t(_)).WillOnce(
+        DoAll(SetArgPointee<0>(nullptr),
+              Return(asapo::Requests{})
+             )
+    );
+
+    EXPECT_CALL(mock_pool, AddRequests_t(_)).WillOnce(
+        Return(asapo::ReceiverErrorTemplates::kMemoryPool.Generate("cannot add request to pool").release())
+    );
+
+    auto errtext = asapo::ReceiverErrorTemplates::kMemoryPool.Generate("cannot add request to pool")->Explain();
+
+    EXPECT_CALL(mock_logger, Error(AllOf(HasSubstr("stopped"), HasSubstr(errtext))));
+
+    data_server.Run();
+}
+
+
+
+}