diff --git a/producer/event_monitor_producer/CMakeLists.txt b/producer/event_monitor_producer/CMakeLists.txt
index 1cfcdbed87e6ebe8a37bb711157b27bc617220ee..3e6f92c394e609702c103ede3892cb73ecd1f03e 100644
--- a/producer/event_monitor_producer/CMakeLists.txt
+++ b/producer/event_monitor_producer/CMakeLists.txt
@@ -1,10 +1,17 @@
 set(TARGET_NAME event-monitor-producer)
 set(SOURCE_FILES
-        src/event_detector.cpp
         src/eventmon_config.cpp
         src/eventmon_logger.cpp
         src/event_detector_factory.cpp
-        src/inotify_event_detector.cpp)
+        src/folder_event_detector.cpp
+)
+
+IF(WIN32)
+    set(SOURCE_FILES ${SOURCE_FILES} src/system_folder_watch_windows.cpp)
+ELSEIF(UNIX)
+    set(SOURCE_FILES ${SOURCE_FILES} src/system_folder_watch_linux.cpp)
+ENDIF(WIN32)
+
 
 
 ################################
@@ -43,6 +50,7 @@ set(TEST_SOURCE_FILES
         unittests/test_eventmon_config.cpp
         unittests/mock_eventmon_config.cpp
         unittests/test_event_detector_factory.cpp
+        unittests/test_folder_event_detector.cpp
    )
 
 set(TEST_LIBRARIES "${TARGET_NAME}")
diff --git a/producer/event_monitor_producer/src/event_detector.cpp b/producer/event_monitor_producer/src/event_detector.cpp
deleted file mode 100644
index f667dbbb4c1d49cb16bf9d59d497398dd56737d5..0000000000000000000000000000000000000000
--- a/producer/event_monitor_producer/src/event_detector.cpp
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "event_detector.h"
-
-namespace asapo {
-
-}
\ No newline at end of file
diff --git a/producer/event_monitor_producer/src/event_detector_factory.cpp b/producer/event_monitor_producer/src/event_detector_factory.cpp
index 8933c2cb772504d8f888037bb20c5fc884f71a3c..4658cbc8a168de385ebe27064dd5396b9bae5d13 100644
--- a/producer/event_monitor_producer/src/event_detector_factory.cpp
+++ b/producer/event_monitor_producer/src/event_detector_factory.cpp
@@ -1,13 +1,13 @@
 #include "event_detector_factory.h"
 
 #include "eventmon_config.h"
-#include "inotify_event_detector.h"
+#include "folder_event_detector.h"
 
 namespace asapo {
 
 EventDetector EventDetectorFactory::CreateEventDetector() {
     auto config = GetEventMonConfig();
-    return EventDetector{new InotifyEventDetector(config)};
+    return EventDetector{new FolderEventDetector(config)};
 }
 
 }
\ No newline at end of file
diff --git a/producer/event_monitor_producer/src/folder_event_detector.cpp b/producer/event_monitor_producer/src/folder_event_detector.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..833d508b4f3c7aa23f9453262c83f134bae48f0b
--- /dev/null
+++ b/producer/event_monitor_producer/src/folder_event_detector.cpp
@@ -0,0 +1,15 @@
+#include "folder_event_detector.h"
+#include "io/io_factory.h"
+#include "eventmon_logger.h"
+
+namespace asapo {
+
+Error FolderEventDetector::GetNextEvent(EventHeader* event_header) {
+    return nullptr;
+}
+FolderEventDetector::FolderEventDetector(const EventMonConfig* config) : system_folder_watch__{new SystemFolderWatch()},
+log__{GetDefaultEventMonLogger()}, config_{config}{
+
+}
+
+}
\ No newline at end of file
diff --git a/producer/event_monitor_producer/src/inotify_event_detector.h b/producer/event_monitor_producer/src/folder_event_detector.h
similarity index 52%
rename from producer/event_monitor_producer/src/inotify_event_detector.h
rename to producer/event_monitor_producer/src/folder_event_detector.h
index 37bd1f2ec6a93c9a09c62f6ab030f032983af13c..1d0901e582c48b8529b7cf66e5752ea8ec6ba380 100644
--- a/producer/event_monitor_producer/src/inotify_event_detector.h
+++ b/producer/event_monitor_producer/src/folder_event_detector.h
@@ -3,13 +3,19 @@
 
 #include "event_detector.h"
 #include "eventmon_config.h"
+#include "io/io.h"
+#include "logger/logger.h"
+
+#include "system_folder_watch.h"
 
 namespace asapo {
 
-class InotifyEventDetector : public AbstractEventDetector {
+class FolderEventDetector : public AbstractEventDetector {
   public:
     Error GetNextEvent(EventHeader* event_header) override;
-    InotifyEventDetector(const EventMonConfig* config);
+    FolderEventDetector(const EventMonConfig* config);
+    std::unique_ptr<SystemFolderWatch> system_folder_watch__;
+    const AbstractLogger* log__;
   private:
     const EventMonConfig* config_;
 };
diff --git a/producer/event_monitor_producer/src/inotify_event_detector.cpp b/producer/event_monitor_producer/src/inotify_event_detector.cpp
deleted file mode 100644
index 7806035c608e07e4137b3fabc3193086197040a2..0000000000000000000000000000000000000000
--- a/producer/event_monitor_producer/src/inotify_event_detector.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "inotify_event_detector.h"
-
-namespace asapo {
-
-Error InotifyEventDetector::GetNextEvent(EventHeader* event_header) {
-    return nullptr;
-}
-InotifyEventDetector::InotifyEventDetector(const EventMonConfig* config) : config_{config} {
-}
-
-}
\ No newline at end of file
diff --git a/producer/event_monitor_producer/src/system_folder_watch.h b/producer/event_monitor_producer/src/system_folder_watch.h
new file mode 100644
index 0000000000000000000000000000000000000000..e81687f5cccaeb10620a61514c10d8af734385af
--- /dev/null
+++ b/producer/event_monitor_producer/src/system_folder_watch.h
@@ -0,0 +1,13 @@
+#ifndef ASAPO_SYSTEM_FODLER_WATCH_H
+#define ASAPO_SYSTEM_FODLER_WATCH_H
+
+#ifdef _WIN32
+#include "system_folder_watch_windows.h"
+#endif
+
+#if defined(__linux__) || defined (__APPLE__)
+#include "system_folder_watch_linux.h"
+#endif
+
+
+#endif //ASAPO_SYSTEM_FODLER_WATCH_H
diff --git a/producer/event_monitor_producer/src/system_folder_watch_linux.cpp b/producer/event_monitor_producer/src/system_folder_watch_linux.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..57291cf353d74f5d4c06fc8b314f05eb0d5f9a50
--- /dev/null
+++ b/producer/event_monitor_producer/src/system_folder_watch_linux.cpp
@@ -0,0 +1,5 @@
+#include "system_folder_watch_linux.h"
+
+namespace asapo {
+
+}
\ No newline at end of file
diff --git a/producer/event_monitor_producer/src/system_folder_watch_linux.h b/producer/event_monitor_producer/src/system_folder_watch_linux.h
new file mode 100644
index 0000000000000000000000000000000000000000..e948f1aa3d73c647c3d856d922d8b21bba4ae8fc
--- /dev/null
+++ b/producer/event_monitor_producer/src/system_folder_watch_linux.h
@@ -0,0 +1,12 @@
+#ifndef ASAPO_SYSTEM_FOLDER_WATCH_LINUX_H
+#define ASAPO_SYSTEM_FOLDER_WATCH_LINUX_H
+
+namespace asapo {
+
+class SystemFolderWatch {
+
+};
+
+}
+
+#endif //ASAPO_SYSTEM_FOLDER_WATCH_LINUX_H
diff --git a/producer/event_monitor_producer/src/system_folder_watch_windows.cpp b/producer/event_monitor_producer/src/system_folder_watch_windows.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..57291cf353d74f5d4c06fc8b314f05eb0d5f9a50
--- /dev/null
+++ b/producer/event_monitor_producer/src/system_folder_watch_windows.cpp
@@ -0,0 +1,5 @@
+#include "system_folder_watch_linux.h"
+
+namespace asapo {
+
+}
\ No newline at end of file
diff --git a/producer/event_monitor_producer/src/system_folder_watch_windows.h b/producer/event_monitor_producer/src/system_folder_watch_windows.h
new file mode 100644
index 0000000000000000000000000000000000000000..655b402bd84663c5244526bd6d2cef232acdea5a
--- /dev/null
+++ b/producer/event_monitor_producer/src/system_folder_watch_windows.h
@@ -0,0 +1,12 @@
+#ifndef ASAPO_SYSTEM_FOLDER_WATCH_WINDOWS_H
+#define ASAPO_SYSTEM_FOLDER_WATCH_WINDOWS_H
+
+namespace asapo {
+
+class SystemFolderWatch {
+
+};
+
+}
+
+#endif //ASAPO_SYSTEM_FOLDER_WATCH_WINDOWS_H
diff --git a/producer/event_monitor_producer/unittests/MockSystemFolderWatch.h b/producer/event_monitor_producer/unittests/MockSystemFolderWatch.h
new file mode 100644
index 0000000000000000000000000000000000000000..e79d9951d532b7a4b2e790e75417255ce22248fe
--- /dev/null
+++ b/producer/event_monitor_producer/unittests/MockSystemFolderWatch.h
@@ -0,0 +1,17 @@
+#ifndef ASAPO_MOCKSYSTEMFOLDERWATCH_H
+#define ASAPO_MOCKSYSTEMFOLDERWATCH_H
+
+#include <gtest/gtest.h>
+#include <gmock/gmock.h>
+
+#include "../src/system_folder_watch.h"
+
+namespace asapo {
+
+class MockSystemFolderWatch : public SystemFolderWatch {
+};
+
+}
+
+
+#endif //ASAPO_MOCKSYSTEMFOLDERWATCH_H
diff --git a/producer/event_monitor_producer/unittests/test_event_detector_factory.cpp b/producer/event_monitor_producer/unittests/test_event_detector_factory.cpp
index da5b075e79ea14bbf538dc5db9e48370ba725eb1..cbc59002933a3b78f56bae01b71de93e1206e0ec 100644
--- a/producer/event_monitor_producer/unittests/test_event_detector_factory.cpp
+++ b/producer/event_monitor_producer/unittests/test_event_detector_factory.cpp
@@ -4,7 +4,7 @@
 #include "eventmon_mocking.h"
 #include "mock_eventmon_config.h"
 #include "../src/event_detector_factory.h"
-#include "../src/inotify_event_detector.h"
+#include "../src/folder_event_detector.h"
 
 using ::testing::Test;
 using ::testing::_;
@@ -34,7 +34,7 @@ class FactoryTests : public Test {
 
 TEST_F(FactoryTests, CreateDetector) {
     auto event_detector = factory.CreateEventDetector();
-    ASSERT_THAT(dynamic_cast<asapo::InotifyEventDetector*>(event_detector.get()), Ne(nullptr));
+    ASSERT_THAT(dynamic_cast<asapo::FolderEventDetector*>(event_detector.get()), Ne(nullptr));
 }
 
 }
diff --git a/producer/event_monitor_producer/unittests/test_folder_event_detector.cpp b/producer/event_monitor_producer/unittests/test_folder_event_detector.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d8d0e2ff67f2eee280ddd1a5cda9f36266e750ce
--- /dev/null
+++ b/producer/event_monitor_producer/unittests/test_folder_event_detector.cpp
@@ -0,0 +1,79 @@
+#include <gtest/gtest.h>
+#include <gmock/gmock.h>
+
+#include "../src/folder_event_detector.h"
+
+#include "unittests/MockIO.h"
+#include "unittests/MockLogger.h"
+
+#include "MockSystemFolderWatch.h"
+
+
+
+using ::testing::Return;
+using ::testing::_;
+using ::testing::DoAll;
+using ::testing::SetArgReferee;
+using ::testing::SetArgPointee;
+using ::testing::Gt;
+using ::testing::Eq;
+using ::testing::Ne;
+using ::testing::Mock;
+using ::testing::InSequence;
+using ::testing::HasSubstr;
+
+
+using ::asapo::Error;
+using ::asapo::FileDescriptor;
+using ::asapo::ErrorInterface;
+
+using asapo::FolderEventDetector;
+
+namespace {
+
+
+TEST(FolderEventDetector, Constructor) {
+    asapo::EventMonConfig test_config;
+    FolderEventDetector detector{&test_config};
+    ASSERT_THAT(dynamic_cast<asapo::SystemFolderWatch*>(detector.system_folder_watch__.get()), Ne(nullptr));
+}
+
+
+class FolderEventDetectorTests : public testing::Test {
+ public:
+  Error err;
+  ::testing::NiceMock<asapo::MockLogger> mock_logger;
+  ::testing::NiceMock<asapo::MockSystemFolderWatch> mock_system_folder_watch;
+  asapo::EventMonConfig test_config;
+  FolderEventDetector detector{&test_config};
+  std::vector<std::string> expected_folders{"test1","test2"};
+  void SetUp() override {
+//      test_config.expected_folders = expected_folders;
+      err = nullptr;
+      detector.system_folder_watch__ = std::unique_ptr<asapo::SystemFolderWatch> {&mock_system_folder_watch};
+      detector.log__ = &mock_logger;
+  }
+  void TearDown() override {
+      detector.system_folder_watch__.release();
+  }
+
+
+};
+
+TEST_F(FolderEventDetectorTests, GetNextEventCallsGetFolderEvents) {
+
+//    EXPECT_CALL(mock_system_folder_watch, StartFolderMonitor_t(expected_folders, receiver.kMaxUnacceptedConnectionsBacklog, _))
+//        .WillOnce(DoAll(
+//            SetArgPointee<2>(asapo::IOErrorTemplates::kUnknownIOError.Generate().release()),
+//            Return(0)
+//        ));
+
+    //EXPECT_CALL(mock_logger, Error(HasSubstr("prepare listener")));
+
+
+//    ASSERT_THAT(err, Eq(asapo::IOErrorTemplates::kUnknownIOError));
+}
+
+}
+
+