diff --git a/common/cpp/include/common/file_info.h b/common/cpp/include/common/file_info.h
index da182e34249b29e6ae9360855e35696d2158c33f..88bd4f4af0e7e087f82bd224a009b4d7a1642787 100644
--- a/common/cpp/include/common/file_info.h
+++ b/common/cpp/include/common/file_info.h
@@ -14,7 +14,7 @@ struct FileInfo {
     uint64_t size{0};
 };
 
-typedef std::unique_ptr<uint8_t[]> FileData;
+using FileData = std::unique_ptr<uint8_t[]>;
 
 
 }
diff --git a/common/cpp/include/system_wrappers/io.h b/common/cpp/include/system_wrappers/io.h
index 8370b7b9d0aa9da2212ff37df095ebb1ea9f23f6..88bb23570c31e0432294691861fb94ce4800f0c0 100644
--- a/common/cpp/include/system_wrappers/io.h
+++ b/common/cpp/include/system_wrappers/io.h
@@ -26,15 +26,15 @@ IOErrors IOErrorFromErrno();
 class IO {
   public:
 
-    virtual FileData GetDataFromFile(const std::string& fname, uint64_t fsize, IOErrors* err) = 0;
+    virtual FileData GetDataFromFile(const std::string& fname, uint64_t fsize, IOErrors* err) const noexcept = 0;
 
-    virtual int open(const char* __file, int __oflag) = 0;
-    virtual int close(int __fd) = 0;
-    virtual int64_t read(int __fd, void* buf, size_t count) = 0;
-    virtual int64_t write(int __fd, const void* __buf, size_t __n) = 0;
+    virtual int open(const char* __file, int __oflag) const noexcept = 0;
+    virtual int close(int __fd) const noexcept = 0;
+    virtual int64_t read(int __fd, void* buf, size_t count) const noexcept = 0;
+    virtual int64_t write(int __fd, const void* __buf, size_t __n) const noexcept = 0;
 
 // this is not standard function - to be implemented differently in windows and linux
-    virtual std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) = 0;
+    virtual std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) const = 0;
 };
 
 }
diff --git a/common/cpp/include/system_wrappers/system_io.h b/common/cpp/include/system_wrappers/system_io.h
index 666fa7e539d5b0d03a9811840728049372cafc4f..6c2c626465d9b8fb68416de6f61b3ce3e0b265ef 100644
--- a/common/cpp/include/system_wrappers/system_io.h
+++ b/common/cpp/include/system_wrappers/system_io.h
@@ -7,16 +7,16 @@ namespace hidra2 {
 
 class SystemIO final : public IO {
   public:
-    FileData GetDataFromFile(const std::string& fname, uint64_t fsize, IOErrors* err) override;
-    int open(const char* __file, int __oflag) override;
-    int close(int __fd) override;
-    int64_t read(int __fd, void* buf, size_t count) override;
-    int64_t write(int __fd, const void* __buf, size_t __n) override;
-    std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) override;
+    FileData GetDataFromFile(const std::string& fname, uint64_t fsize, IOErrors* err) const noexcept override;
+    int open(const char* __file, int __oflag) const noexcept override;
+    int close(int __fd) const noexcept override;
+    int64_t read(int __fd, void* buf, size_t count) const noexcept override;
+    int64_t write(int __fd, const void* __buf, size_t __n) const noexcept override;
+    std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) const override;
   private:
-    void ReadWholeFile(int fd, uint8_t* array, uint64_t fsize, IOErrors* err);
+    void ReadWholeFile(int fd, uint8_t* array, uint64_t fsize, IOErrors* err) const noexcept;
     void CollectFileInformationRecursivly(const std::string& path,
-                                          std::vector<FileInfo>& files, IOErrors* err);
+                                          std::vector<FileInfo>* files, IOErrors* err) const;
 
 };
 }
diff --git a/common/cpp/src/system_io.cpp b/common/cpp/src/system_io.cpp
index 66001ea13bcd838345e025223b961eb33ddcf368..6ee383e0cdb0ec43f2c67d8fcfad800cf3d675c3 100644
--- a/common/cpp/src/system_io.cpp
+++ b/common/cpp/src/system_io.cpp
@@ -29,7 +29,7 @@ IOErrors IOErrorFromErrno() {
     return err;
 }
 
-void SystemIO::ReadWholeFile(int fd, uint8_t* array, uint64_t fsize, IOErrors* err) {
+void SystemIO::ReadWholeFile(int fd, uint8_t* array, uint64_t fsize, IOErrors* err) const noexcept {
     uint64_t totalbytes = 0;
     int64_t readbytes = 0;
     do {
@@ -42,7 +42,7 @@ void SystemIO::ReadWholeFile(int fd, uint8_t* array, uint64_t fsize, IOErrors* e
     }
 }
 
-FileData SystemIO::GetDataFromFile(const std::string& fname, uint64_t fsize, IOErrors* err) {
+FileData SystemIO::GetDataFromFile(const std::string& fname, uint64_t fsize, IOErrors* err) const noexcept {
     int fd = open(fname.c_str(), O_RDONLY);
     *err = IOErrorFromErrno();
     if (*err != IOErrors::kNoError) {
@@ -72,28 +72,28 @@ FileData SystemIO::GetDataFromFile(const std::string& fname, uint64_t fsize, IOE
     return data;
 }
 
-void SortFileList(std::vector<FileInfo>& file_list) {
-    std::sort(file_list.begin(), file_list.end(),
+void SortFileList(std::vector<FileInfo>* file_list) {
+    std::sort(file_list->begin(), file_list->end(),
     [](FileInfo const & a, FileInfo const & b) {
         return a.modify_date < b.modify_date;
     });
 }
 
-void StripBasePath(const std::string& folder, std::vector<FileInfo>& file_list) {
+void StripBasePath(const std::string& folder, std::vector<FileInfo>* file_list) {
     auto n_erase = folder.size() + 1;
-    for (auto& file : file_list) {
+    for (auto& file : *file_list) {
         file.relative_path.erase(0, n_erase);
     }
 }
 
-std::vector<FileInfo> SystemIO::FilesInFolder(const std::string& folder, IOErrors* err) {
+std::vector<FileInfo> SystemIO::FilesInFolder(const std::string& folder, IOErrors* err) const {
     std::vector<FileInfo> files{};
-    CollectFileInformationRecursivly(folder, files, err);
+    CollectFileInformationRecursivly(folder, &files, err);
     if (*err != IOErrors::kNoError) {
         return {};
     }
-    StripBasePath(folder, files);
-    SortFileList(files);
+    StripBasePath(folder, &files);
+    SortFileList(&files);
     return files;
 }
 
diff --git a/common/cpp/src/system_io_linux.cpp b/common/cpp/src/system_io_linux.cpp
index a932a90d39b4ce6af7e1c34217a7a81d0f456123..3c1bc09bb6da7d828fa9872cf08e6de34aa68d7e 100644
--- a/common/cpp/src/system_io_linux.cpp
+++ b/common/cpp/src/system_io_linux.cpp
@@ -73,7 +73,7 @@ FileInfo GetFileInfo(const string& path, const string& name, IOErrors* err) {
 }
 
 void ProcessFileEntity(const struct dirent* entity, const std::string& path,
-                       std::vector<FileInfo>& files, IOErrors* err) {
+                       std::vector<FileInfo>* files, IOErrors* err) {
 
     *err = IOErrors::kNoError;
     if (entity->d_type != DT_REG) {
@@ -85,11 +85,11 @@ void ProcessFileEntity(const struct dirent* entity, const std::string& path,
         return;
     }
 
-    files.push_back(file_info);
+    files->push_back(file_info);
 }
 
 void SystemIO::CollectFileInformationRecursivly(const std::string& path,
-                                                std::vector<FileInfo>& files, IOErrors* err) {
+                                                std::vector<FileInfo>* files, IOErrors* err)  const {
     auto dir = opendir((path).c_str());
     if (dir == nullptr) {
         *err = IOErrorFromErrno();
@@ -113,19 +113,19 @@ void SystemIO::CollectFileInformationRecursivly(const std::string& path,
 }
 
 
-int64_t SystemIO::read(int __fd, void* buf, size_t count) {
+int64_t SystemIO::read(int __fd, void* buf, size_t count) const noexcept {
     return (int64_t) ::read(__fd, buf, count);
 }
 
-int64_t SystemIO::write(int __fd, const void* __buf, size_t __n) {
+int64_t SystemIO::write(int __fd, const void* __buf, size_t __n) const noexcept {
     return (int64_t) ::write(__fd, __buf, __n);
 }
 
-int SystemIO::open(const char* __file, int __oflag) {
+int SystemIO::open(const char* __file, int __oflag) const noexcept {
     return ::open(__file, __oflag);
 }
 
-int SystemIO::close(int __fd) {
+int SystemIO::close(int __fd) const noexcept {
     return ::close(__fd);
 }
 
diff --git a/common/cpp/src/system_io_windows.cpp b/common/cpp/src/system_io_windows.cpp
index 4b2d113ed0fd1b338a09b7a01d823a7c8939e94d..5653ce87c7ecd956c4af152cc0374b2edb44fd2a 100644
--- a/common/cpp/src/system_io_windows.cpp
+++ b/common/cpp/src/system_io_windows.cpp
@@ -59,7 +59,7 @@ bool IsDirectory(const WIN32_FIND_DATA f) {
 }
 
 void ProcessFileEntity(const WIN32_FIND_DATA f, const std::string& path,
-                       std::vector<FileInfo>& files, IOErrors* err) {
+                       std::vector<FileInfo>* files, IOErrors* err) {
 
     *err = IOErrors::kNoError;
     if (f.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
@@ -74,12 +74,12 @@ void ProcessFileEntity(const WIN32_FIND_DATA f, const std::string& path,
 
     file_info.base_name = f.cFileName;
     file_info.relative_path = path;
-    files.push_back(file_info);
+    files->push_back(file_info);
 }
 
 
 void SystemIO::CollectFileInformationRecursivly(const std::string& path,
-                                                std::vector<FileInfo>& files, IOErrors* err) {
+                                                std::vector<FileInfo>* files, IOErrors* err) const {
     WIN32_FIND_DATA find_data;
     HANDLE handle = FindFirstFile((path + "\\*.*").c_str(), &find_data);
     if (handle == INVALID_HANDLE_VALUE) {
@@ -107,21 +107,21 @@ void SystemIO::CollectFileInformationRecursivly(const std::string& path,
 
 }
 
-int64_t SystemIO::read(int __fd, void* buf, size_t count) {
+int64_t SystemIO::read(int __fd, void* buf, size_t count) const noexcept {
     return (int64_t) _read(__fd, buf, (unsigned int) count);
 }
 
-int64_t SystemIO::write(int __fd, const void* __buf, size_t __n) {
+int64_t SystemIO::write(int __fd, const void* __buf, size_t __n) const noexcept {
     return (int64_t) _write(__fd, __buf, (unsigned int) __n);
 }
 
-int SystemIO::open(const char* __file, int __oflag) {
+int SystemIO::open(const char* __file, int __oflag) const noexcept {
     int fd;
     errno = _sopen_s(&fd, __file, __oflag, _SH_DENYNO, _S_IREAD | _S_IWRITE);
     return fd;
 }
 
-int SystemIO::close(int __fd) {
+int SystemIO::close(int __fd) const noexcept {
     return ::_close(__fd);
 }
 
diff --git a/examples/worker/process_folder/CMakeLists.txt b/examples/worker/process_folder/CMakeLists.txt
index 9fe64b4226af1119f15a7b0226ce1eb54e4a79c6..91328be81451bba9347fa928b1b3721c2b0b8a86 100644
--- a/examples/worker/process_folder/CMakeLists.txt
+++ b/examples/worker/process_folder/CMakeLists.txt
@@ -11,6 +11,14 @@ set(SOURCE_FILES process_folder.cpp)
 add_executable(${TARGET_NAME} ${SOURCE_FILES})
 target_link_libraries(${TARGET_NAME} common worker-api ${CMAKE_THREAD_LIBS_INIT})
 set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
+#use expression generator to get rid of VS adding Debug/Release folders
+set_target_properties(${TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
+        ${CMAKE_CURRENT_BINARY_DIR}$<$<CONFIG:Debug>:>
+        )
+
+get_target_property(VAR ${TARGET_NAME} RUNTIME_OUTPUT_DIRECTORY)
+message (STATUS  ${VAR})
+
 if (CMAKE_COMPILER_IS_GNUCXX)
     set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS_DEBUG "--coverage")
 endif()
diff --git a/examples/worker/process_folder/check_windows.bat b/examples/worker/process_folder/check_windows.bat
index 0735194ddb50c577b1bd68a4fa84daff8cea61d1..f03ab5c7094ed5c5d2e9e9c555ba3b77018bac54 100644
--- a/examples/worker/process_folder/check_windows.bat
+++ b/examples/worker/process_folder/check_windows.bat
@@ -1,6 +1,6 @@
 mkdir test
 echo "" > test/1
 
-worker_processfolder test | findstr "Processed 1 file(s)"
+.\worker_processfolder test | findstr "Processed 1 file(s)"
 
 rmdir /S /Q test
diff --git a/tests/system_io/read_file_content/cleanup_windows.bat b/tests/system_io/read_file_content/cleanup_windows.bat
index df76d933609eb4d60e195057a5484f579e705061..7766233dba98146a47749d087d56b2e93758f7c0 100644
--- a/tests/system_io/read_file_content/cleanup_windows.bat
+++ b/tests/system_io/read_file_content/cleanup_windows.bat
@@ -1,2 +1,3 @@
 rmdir /S /Q test
+icacls file_noaccess /grant:r users:D
 del file_noaccess
diff --git a/worker/api/cpp/src/folder_data_broker.cpp b/worker/api/cpp/src/folder_data_broker.cpp
index bc7fc88a64b9c93b9efee0a77d84f59c5ca432ec..a6c263c448f60f49fdcb3b97702ca3a27b0920ce 100644
--- a/worker/api/cpp/src/folder_data_broker.cpp
+++ b/worker/api/cpp/src/folder_data_broker.cpp
@@ -52,7 +52,7 @@ WorkerErrorCode FolderDataBroker::Connect() {
     return MapIOError(io_err);
 }
 
-WorkerErrorCode FolderDataBroker::CanGetData(FileInfo* info, FileData* data, int nfile) const {
+WorkerErrorCode FolderDataBroker::CanGetData(FileInfo* info, FileData* data, int nfile) const noexcept {
     if (!is_connected_) {
         return WorkerErrorCode::kSourceNotConnected;
     }
diff --git a/worker/api/cpp/src/folder_data_broker.h b/worker/api/cpp/src/folder_data_broker.h
index 27d960172df27455c55688a5aead4c7f9dcb05e4..f5b622bdaf66663f4ebcc023f51339198861ea81 100644
--- a/worker/api/cpp/src/folder_data_broker.h
+++ b/worker/api/cpp/src/folder_data_broker.h
@@ -23,7 +23,7 @@ class FolderDataBroker final : public hidra2::DataBroker {
     int current_file_;
     std::string base_path_;
     std::vector<FileInfo>  filelist_;
-    WorkerErrorCode CanGetData(FileInfo* info, FileData* data, int nfile) const;
+    WorkerErrorCode CanGetData(FileInfo* info, FileData* data, int nfile) const noexcept;
     std::mutex mutex_;
 
 };
diff --git a/worker/api/cpp/unittests/test_folder_broker.cpp b/worker/api/cpp/unittests/test_folder_broker.cpp
index 1942f1198360b1ef3c47644de4b568ba5b33b2e8..7da3645ce8e96d3b3402a2ce81435349981cb358 100644
--- a/worker/api/cpp/unittests/test_folder_broker.cpp
+++ b/worker/api/cpp/unittests/test_folder_broker.cpp
@@ -1,6 +1,5 @@
 #include <gmock/gmock.h>
 #include "gtest/gtest.h"
-using ::testing::AtLeast;
 
 #include "worker/data_broker.h"
 #include "system_wrappers/io.h"
@@ -16,7 +15,7 @@ using hidra2::IOErrors;
 using hidra2::FileInfo;
 using hidra2::FileData;
 
-
+using ::testing::AtLeast;
 using ::testing::Eq;
 using ::testing::Ne;
 using ::testing::Test;
@@ -37,29 +36,29 @@ TEST(FolderDataBroker, SetCorrectIO) {
 class FakeIO: public IO {
   public:
 
-    virtual uint8_t* GetDataFromFileProxy(const std::string& fname, uint64_t fsize, IOErrors* err) {
+    virtual uint8_t* GetDataFromFileProxy(const std::string& fname, uint64_t fsize, IOErrors* err) const {
         *err = IOErrors::kNoError;
         return nullptr;
     };
 
-    FileData GetDataFromFile(const std::string& fname, uint64_t fsize, IOErrors* err)override {
+    FileData GetDataFromFile(const std::string& fname, uint64_t fsize, IOErrors* err) const noexcept override {
         return FileData(GetDataFromFileProxy(fname, fsize, err));
     };
 
-    int open(const char* __file, int __oflag)override {
+    int open(const char* __file, int __oflag) const noexcept override {
         return 0;
     };
 
-    int close(int __fd)override {
+    int close(int __fd)const noexcept override {
         return 0;
     };
-    int64_t read(int __fd, void* buf, size_t count)override {
+    int64_t read(int __fd, void* buf, size_t count) const noexcept override {
         return 0;
     };
-    int64_t write(int __fd, const void* __buf, size_t __n) override {
+    int64_t write(int __fd, const void* __buf, size_t __n) const noexcept override {
         return 0;
     };
-    std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) override {
+    std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) const override {
         *err = IOErrors::kNoError;
         std::vector<FileInfo> file_infos;
         FileInfo fi;
@@ -77,7 +76,7 @@ class FakeIO: public IO {
 
 class IOFolderNotFound: public FakeIO {
   public:
-    std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) override {
+    std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) const override {
         *err = IOErrors::kFileNotFound;
         return {};
     }
@@ -85,7 +84,7 @@ class IOFolderNotFound: public FakeIO {
 
 class IOFodlerUnknownError: public FakeIO {
   public:
-    std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) override {
+    std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) const override {
         *err = IOErrors::kUnknownError;
         return {};
     }
@@ -93,7 +92,7 @@ class IOFodlerUnknownError: public FakeIO {
 
 class IOEmptyFodler: public FakeIO {
   public:
-    std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) override {
+    std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) const override {
         *err = IOErrors::kNoError;
         return {};
     }
@@ -101,7 +100,7 @@ class IOEmptyFodler: public FakeIO {
 
 class IOCannotOpenFile: public FakeIO {
   public:
-    FileData GetDataFromFile(const std::string& fname, uint64_t fsize, IOErrors* err) override {
+    FileData GetDataFromFile(const std::string& fname, uint64_t fsize, IOErrors* err) const noexcept override {
         *err = IOErrors::kPermissionDenied;
         return {};
     };
@@ -212,7 +211,7 @@ TEST_F(FolderDataBrokerTests, GetNextReturnsErrorWhenFilePermissionsDenied) {
 
 class OpenFileMock : public FakeIO {
   public:
-    MOCK_METHOD3(GetDataFromFileProxy, uint8_t* (const std::string&, uint64_t, IOErrors*));
+    MOCK_CONST_METHOD3(GetDataFromFileProxy, uint8_t* (const std::string&, uint64_t, IOErrors*));
 };