diff --git a/producer/event_monitor_producer/src/eventmon_config.cpp b/producer/event_monitor_producer/src/eventmon_config.cpp
index e4ee00fa3d8f2be519b648373ddaa3562a120a48..0cf4549f60f9e52f01a9085a99c39f7de1b07bf8 100644
--- a/producer/event_monitor_producer/src/eventmon_config.cpp
+++ b/producer/event_monitor_producer/src/eventmon_config.cpp
@@ -19,8 +19,9 @@ Error EventMonConfigFactory::ParseConfigFile(std::string file_name) {
     (err = parser.GetString("BeamtimeID", &config.beamtime_id)) ||
     (err = parser.GetString("Mode", &config.mode_str)) ||
     (err = parser.GetUInt64("NThreads", &config.nthreads)) ||
+    (err = parser.GetString("RootMonitoredFolder", &config.root_monitored_folder)) ||
     (err = parser.GetString("LogLevel", &config.log_level_str)) ||
-    (err = parser.GetArrayString("MonitoredFolders", &config.monitored_folders)) ||
+    (err = parser.GetArrayString("MonitoredSubFolders", &config.monitored_subfolders)) ||
     (err = parser.GetArrayString("IgnoreExtentions", &config.ignored_extentions));
 
     return err;
diff --git a/producer/event_monitor_producer/src/eventmon_config.h b/producer/event_monitor_producer/src/eventmon_config.h
index 9066df3c7c7c5686f7ec897b63186186ebbb6585..e6f0cc0ec252bb74b00dcb0324de9c7e68f5ba6a 100644
--- a/producer/event_monitor_producer/src/eventmon_config.h
+++ b/producer/event_monitor_producer/src/eventmon_config.h
@@ -16,7 +16,8 @@ struct EventMonConfig {
     uint64_t nthreads = 1;
     std::string beamtime_id;
     RequestHandlerType mode = RequestHandlerType::kTcp;
-    std::vector<std::string> monitored_folders;
+    std::string root_monitored_folder;
+    std::vector<std::string> monitored_subfolders;
     std::vector<std::string> ignored_extentions;
   private:
     std::string log_level_str;
diff --git a/producer/event_monitor_producer/src/folder_event_detector.cpp b/producer/event_monitor_producer/src/folder_event_detector.cpp
index d9f650f4d73609e14daa1ff55d570c34c5ace5ba..c744c613e4860b2d4e7e202ce322dbb6733e0017 100644
--- a/producer/event_monitor_producer/src/folder_event_detector.cpp
+++ b/producer/event_monitor_producer/src/folder_event_detector.cpp
@@ -70,7 +70,7 @@ Error FolderEventDetector::StartMonitoring() {
         return nullptr;
     }
 
-    auto err = system_folder_watch__->StartFolderMonitor(config_->monitored_folders);
+    auto err = system_folder_watch__->StartFolderMonitor(config_->root_monitored_folder, config_->monitored_subfolders);
     if (err) {
         return err;
     }
diff --git a/producer/event_monitor_producer/src/system_folder_watch_linux.cpp b/producer/event_monitor_producer/src/system_folder_watch_linux.cpp
index 05df62c32203ff378d251360c32c98e5780bd393..3d83d0e733c10cf45a359ce915d6e1d65a19fd39 100644
--- a/producer/event_monitor_producer/src/system_folder_watch_linux.cpp
+++ b/producer/event_monitor_producer/src/system_folder_watch_linux.cpp
@@ -22,7 +22,9 @@ Error SystemFolderWatch::AddFolderToWatch(std::string folder, bool recursive) {
     } else {
         GetDefaultEventMonLogger()->Debug("added folder to monitor: " + folder);
     }
-    watched_folders_paths_[id] = folder;
+    std::string relative_path = folder;
+    relative_path.erase(0, root_folder_.size() + 1);
+    watched_folders_paths_[id] = relative_path;
     if (recursive) {
         Error err;
         auto subdirs = io_-> GetSubDirectories(folder, &err);
@@ -41,13 +43,15 @@ Error SystemFolderWatch::AddFolderToWatch(std::string folder, bool recursive) {
 }
 
 
-Error SystemFolderWatch::StartFolderMonitor(const std::vector<std::string>& monitored_folders) {
+Error SystemFolderWatch::StartFolderMonitor(const std::string& root_folder,
+                                            const std::vector<std::string>& monitored_folders) {
     watch_fd_ = inotify_init();
     if (watch_fd_ == -1) {
         return EventMonitorErrorTemplates::kSystemError.Generate("cannot initialize inotify");
     }
+    root_folder_ = root_folder;
     for (auto& folder : monitored_folders) {
-        auto err = AddFolderToWatch(folder, true);
+        auto err = AddFolderToWatch(root_folder_ + "/" + folder, true);
         if (err) {
             return EventMonitorErrorTemplates::kSystemError.Generate("cannot initialize inotify: " + err->Explain());
         }
@@ -91,7 +95,7 @@ Error SystemFolderWatch::ProcessInotifyEvent(struct inotify_event* i, FileEvents
                         i->wd));
         }
 
-        std::string newpath = it->second + "/" + i->name;
+        std::string newpath = root_folder_ + "/" + it->second + "/" + i->name;
         auto err = AddFolderToWatch(newpath, true);
         if (err) {
             return err;
diff --git a/producer/event_monitor_producer/src/system_folder_watch_linux.h b/producer/event_monitor_producer/src/system_folder_watch_linux.h
index 69ffc51b5a9fc23b9dcd96f738551e7afde53920..b54fee76300d6bd0a47ad2bce44339b903f428eb 100644
--- a/producer/event_monitor_producer/src/system_folder_watch_linux.h
+++ b/producer/event_monitor_producer/src/system_folder_watch_linux.h
@@ -18,7 +18,7 @@ namespace asapo {
 
 class SystemFolderWatch {
   public:
-    VIRTUAL Error StartFolderMonitor(const std::vector<std::string>& monitored_folders);
+    VIRTUAL Error StartFolderMonitor(const std::string& root_folder, const std::vector<std::string>& monitored_folders);
     VIRTUAL FileEvents GetFileEventList(Error* err);
   private:
     Error AddFolderToWatch(std::string folder, bool recursive);
@@ -28,6 +28,7 @@ class SystemFolderWatch {
     static const uint64_t kBufLen  = 2000 * (sizeof(struct inotify_event) + FILENAME_MAX + 1);
     std::map<int, std::string> watched_folders_paths_;
     int watch_fd_ = -1;
+    std::string root_folder_;
 };
 
 }
diff --git a/producer/event_monitor_producer/src/system_folder_watch_windows.cpp b/producer/event_monitor_producer/src/system_folder_watch_windows.cpp
index dc0dfa558e4d9b1bd0e282317d83e55612deb8b2..b4e699f37959e058ef2d6ebd91d8f65717c38090 100644
--- a/producer/event_monitor_producer/src/system_folder_watch_windows.cpp
+++ b/producer/event_monitor_producer/src/system_folder_watch_windows.cpp
@@ -2,7 +2,8 @@
 
 namespace asapo {
 
-Error SystemFolderWatch::StartFolderMonitor(const std::vector<std::string>& monitored_folders) {
+Error SystemFolderWatch::StartFolderMonitor(const std::string& root_folder,
+                                            const std::vector<std::string>& monitored_folders) {
     return nullptr;
 }
 
diff --git a/producer/event_monitor_producer/unittests/mock_eventmon_config.cpp b/producer/event_monitor_producer/unittests/mock_eventmon_config.cpp
index f7772c7361c2458c42812a872af85abba5c5cdcc..2ff7a98bcd363c1f9dcb5c4da77095b1b50f80c6 100644
--- a/producer/event_monitor_producer/unittests/mock_eventmon_config.cpp
+++ b/producer/event_monitor_producer/unittests/mock_eventmon_config.cpp
@@ -49,7 +49,7 @@ Error SetFolderMonConfig (const EventMonConfig& config) {
     config_string += "," + std::string("\"NThreads\":") + std::to_string(config.nthreads);
     config_string += "," + std::string("\"LogLevel\":") + "\"" + log_level + "\"";
     std::string mon_folders;
-    for (auto folder : config.monitored_folders) {
+    for (auto folder : config.monitored_subfolders) {
         mon_folders += "\"" + folder + "\"" + ",";
     }
     if (mon_folders.size()) {
@@ -65,7 +65,8 @@ Error SetFolderMonConfig (const EventMonConfig& config) {
     }
 
 
-    config_string += "," + std::string("\"MonitoredFolders\":") + "[" + mon_folders + "]";
+    config_string += "," + std::string("\"MonitoredSubFolders\":") + "[" + mon_folders + "]";
+    config_string += "," + std::string("\"RootMonitoredFolder\":") + "\"" + config.root_monitored_folder + "\"";
     config_string += "," + std::string("\"IgnoreExtentions\":") + "[" + ignored_exts + "]";
     config_string += "," + std::string("\"Tag\":") + "\"" + config.tag + "\"";
     config_string += "," + std::string("\"AsapoEndpoint\":") + "\"" + config.asapo_endpoint + "\"";
diff --git a/producer/event_monitor_producer/unittests/mock_system_folder_watch.h b/producer/event_monitor_producer/unittests/mock_system_folder_watch.h
index 43dc6cdf9dba11eab19a83c6c0ba44e4eba454ee..6cf14de9adb44ee8f82f836b12b041ce5edb3ec7 100644
--- a/producer/event_monitor_producer/unittests/mock_system_folder_watch.h
+++ b/producer/event_monitor_producer/unittests/mock_system_folder_watch.h
@@ -11,10 +11,11 @@ namespace asapo {
 
 class MockSystemFolderWatch : public SystemFolderWatch {
   public:
-    MOCK_METHOD1(StartFolderMonitor_t, ErrorInterface * (const std::vector<std::string>& monitored_folders));
+    MOCK_METHOD2(StartFolderMonitor_t, ErrorInterface * (const std::string& root_folder,
+                 const std::vector<std::string>& monitored_folders));
 
-    Error StartFolderMonitor(const std::vector<std::string>& monitored_folders) override {
-        return Error{StartFolderMonitor_t(monitored_folders)};
+    Error StartFolderMonitor(const std::string& root_folder, const std::vector<std::string>& monitored_folders) override {
+        return Error{StartFolderMonitor_t(root_folder, monitored_folders)};
 
     }
 
diff --git a/producer/event_monitor_producer/unittests/test_eventmon_config.cpp b/producer/event_monitor_producer/unittests/test_eventmon_config.cpp
index 5e1b14f0e7c4985ec4c48712c14daafe6a3e312c..fdaaa055b6805457d61a4b59f51095887c7716ca 100644
--- a/producer/event_monitor_producer/unittests/test_eventmon_config.cpp
+++ b/producer/event_monitor_producer/unittests/test_eventmon_config.cpp
@@ -56,7 +56,8 @@ TEST_F(ConfigTests, ReadSettingsOK) {
     test_config.beamtime_id = "test";
     test_config.asapo_endpoint = "uri:001";
     test_config.mode = asapo::RequestHandlerType::kTcp;
-    test_config.monitored_folders = {"test1", "test2"};
+    test_config.root_monitored_folder = "tmp";
+    test_config.monitored_subfolders = {"test1", "test2"};
     test_config.ignored_extentions = {"tmp", "test"};
     auto err = asapo::SetFolderMonConfig(test_config);
 
@@ -69,7 +70,8 @@ TEST_F(ConfigTests, ReadSettingsOK) {
     ASSERT_THAT(config->beamtime_id, Eq("test"));
     ASSERT_THAT(config->asapo_endpoint, Eq("uri:001"));
     ASSERT_THAT(config->mode, Eq(asapo::RequestHandlerType::kTcp));
-    ASSERT_THAT(config->monitored_folders, ElementsAre("test1", "test2"));
+    ASSERT_THAT(config->monitored_subfolders, ElementsAre("test1", "test2"));
+    ASSERT_THAT(config->root_monitored_folder, Eq("tmp"));
     ASSERT_THAT(config->ignored_extentions, ElementsAre("tmp", "test"));
 
 }
diff --git a/producer/event_monitor_producer/unittests/test_folder_event_detector.cpp b/producer/event_monitor_producer/unittests/test_folder_event_detector.cpp
index 9ad181cbb518b5ebdeb3e69037961d1187533359..477dd7dcd5c5915dbac12d8221e2638ffce51cf5 100644
--- a/producer/event_monitor_producer/unittests/test_folder_event_detector.cpp
+++ b/producer/event_monitor_producer/unittests/test_folder_event_detector.cpp
@@ -48,6 +48,7 @@ class FolderEventDetectorTests : public testing::Test {
     ::testing::NiceMock<asapo::MockSystemFolderWatch> mock_system_folder_watch;
     asapo::EventMonConfig test_config;
     FolderEventDetector detector{&test_config};
+    std::string expected_root_folder = "/tmp";
     std::vector<std::string> expected_folders{"test1", "test2"};
     FileEvent expected_event1{EventType::closed, 10, "test1.dat"};
     FileEvent expected_event2{EventType::renamed_to, 11, "test2.dat"};
@@ -55,7 +56,8 @@ class FolderEventDetectorTests : public testing::Test {
     FileEvent expected_event4{EventType::closed, 12, "test4.tmp"};
     FileEvents expected_events{expected_event1, expected_event2, expected_event3, expected_event4};
     void SetUp() override {
-        test_config.monitored_folders = expected_folders;
+        test_config.root_monitored_folder = expected_root_folder;
+        test_config.monitored_subfolders = expected_folders;
         err = nullptr;
         detector.system_folder_watch__ = std::unique_ptr<asapo::SystemFolderWatch> {&mock_system_folder_watch};
     }
@@ -68,7 +70,7 @@ class FolderEventDetectorTests : public testing::Test {
 };
 
 void FolderEventDetectorTests::MockStartMonitoring() {
-    EXPECT_CALL(mock_system_folder_watch, StartFolderMonitor_t(expected_folders))
+    EXPECT_CALL(mock_system_folder_watch, StartFolderMonitor_t(expected_root_folder, expected_folders))
     .WillOnce(
         Return(nullptr)
     );
@@ -77,7 +79,7 @@ void FolderEventDetectorTests::MockStartMonitoring() {
 
 
 TEST_F(FolderEventDetectorTests, StartsFolderMonitoringOK) {
-    EXPECT_CALL(mock_system_folder_watch, StartFolderMonitor_t(expected_folders))
+    EXPECT_CALL(mock_system_folder_watch, StartFolderMonitor_t(expected_root_folder, expected_folders))
     .WillOnce(
         Return(nullptr)
     );
@@ -86,7 +88,7 @@ TEST_F(FolderEventDetectorTests, StartsFolderMonitoringOK) {
 }
 
 TEST_F(FolderEventDetectorTests, StartFolderMonitoringInitiatesOnlyOnce) {
-    EXPECT_CALL(mock_system_folder_watch, StartFolderMonitor_t(expected_folders))
+    EXPECT_CALL(mock_system_folder_watch, StartFolderMonitor_t(expected_root_folder, expected_folders))
     .WillOnce(
         Return(nullptr)
     );
@@ -97,7 +99,7 @@ TEST_F(FolderEventDetectorTests, StartFolderMonitoringInitiatesOnlyOnce) {
 }
 
 TEST_F(FolderEventDetectorTests, StartFolderMonitoringReturnsError) {
-    EXPECT_CALL(mock_system_folder_watch, StartFolderMonitor_t(expected_folders))
+    EXPECT_CALL(mock_system_folder_watch, StartFolderMonitor_t(expected_root_folder, expected_folders))
     .Times(2)
     .WillOnce(
         Return(asapo::ErrorTemplates::kMemoryAllocationError.Generate().release())