diff --git a/CMakeModules/check_test.sh b/CMakeModules/check_test.sh
index 5ab34057c6bfae352994e5de4cf2088963fe4695..ff6f8c5bfebcbe0e1be718368182ab3b7a95aaa1 100755
--- a/CMakeModules/check_test.sh
+++ b/CMakeModules/check_test.sh
@@ -17,7 +17,7 @@ if (( coverage < HIDRA2_MINIMUM_COVERAGE )); then
 	echo
 	echo "*****"
 	echo
-	echo $TARGET coverage is ${coverage}% - less than required ${HIDRA2_MINIMUM_COVERAGE}%
+	echo ${TARGET} coverage is ${coverage}% - less than required ${HIDRA2_MINIMUM_COVERAGE}%
 	echo	
 	echo "*****"
 	echo
diff --git a/CMakeModules/testing_cpp.cmake b/CMakeModules/testing_cpp.cmake
index d3b2ed02357436b8bb3adacd2eb6bb82694ab455..ab96564a56608fc5e28550eab3a661f88cdddbd5 100644
--- a/CMakeModules/testing_cpp.cmake
+++ b/CMakeModules/testing_cpp.cmake
@@ -33,16 +33,31 @@ function(gtest target test_source_files test_libraries)
             set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} PARENT_SCOPE)
         endif ()
 
-        if (MEMORYCHECK_COMMAND)
-            set(memcheck_args ${MEMORYCHECK_COMMAND_OPTIONS})
-            separate_arguments(memcheck_args)
-            add_test(NAME memcheck-${target} COMMAND ${MEMORYCHECK_COMMAND} ${memcheck_args}
-                    ${CMAKE_CURRENT_BINARY_DIR}/test-${target})
-            set_tests_properties(memcheck-${target} PROPERTIES LABELS "memcheck;all")
-        endif()
+        add_memory_test(${target} test-${target} "" "" "unit")
+
     endif ()
  endfunction()
 
+function(add_memory_test target executable commandargs fixture label)
+    if (MEMORYCHECK_COMMAND)
+        set(memcheck_args ${MEMORYCHECK_COMMAND_OPTIONS})
+        separate_arguments(memcheck_args)
+        set( args ${commandargs} )
+        separate_arguments(args)
+        add_test(NAME memcheck-${target} COMMAND ${MEMORYCHECK_COMMAND} ${memcheck_args}
+                ${CMAKE_CURRENT_BINARY_DIR}/${executable} ${args})
+        set_tests_properties(memcheck-${target} PROPERTIES
+                LABELS "memcheck_${label};all"
+                DEPENDS test-${target}
+                )
+        if (NOT ${fixture} STREQUAL "")
+            set_tests_properties(memcheck-${target} PROPERTIES
+                FIXTURES_REQUIRED ${fixture}
+                )
+        endif()
+
+    endif()
+endfunction()
 
 function(add_test_setup_cleanup exename)
     if (BUILD_TESTS)
@@ -62,5 +77,8 @@ function(add_integration_test exename testname commandargs)
                 LABELS "integration;all"
                 FIXTURES_REQUIRED test-${exename}-fixture
                 )
+        add_memory_test(${exename}-${testname} ${exename}
+                "${commandargs}" test-${exename}-fixture
+                "integration")
     endif ()
 endfunction()
diff --git a/common/cpp/src/system_io_linux.cpp b/common/cpp/src/system_io_linux.cpp
index 5e39b413bb8a63c4aa349733765724ecd1f8eea5..e74694106341d158d22961ceb22c52d04e3316fb 100644
--- a/common/cpp/src/system_io_linux.cpp
+++ b/common/cpp/src/system_io_linux.cpp
@@ -40,7 +40,7 @@ bool IsDirectory(const struct dirent* entity) {
 
 system_clock::time_point GetTimePointFromFile(const string& fname, IOErrors* err) {
 
-    struct stat t_stat;
+    struct stat t_stat{};
     int res = stat(fname.c_str(), &t_stat);
     if (res < 0) {
         *err = IOErrorFromErrno();
diff --git a/tests/system_io/read_folder_content.cpp b/tests/system_io/read_folder_content.cpp
index cb4b24c10e4babb8fff403aca9c4503c61b9b45b..8391c73bce59b7c5cbd8415471d56b6305f5d6b3 100644
--- a/tests/system_io/read_folder_content.cpp
+++ b/tests/system_io/read_folder_content.cpp
@@ -8,7 +8,7 @@ using hidra2::IOErrors;
 
 
 void M_AssertEq(const std::string& expected, const std::string& got) {
-    if (expected.compare(got) != 0) {
+    if (expected != got) {
         std::cerr << "Assert failed:\n"
                   << "Expected:\t'" << expected << "'\n"
                   << "Obtained:\t'" << got << "'\n";
@@ -40,6 +40,9 @@ int main(int argc, char* argv[]) {
     case IOErrors::PERMISSIONS_DENIED:
         result = "noaccess";
         break;
+    default:
+        result = "";
+        break;
     }
 
     M_AssertEq(expect, result);
diff --git a/worker/api/cpp/include/worker/data_broker.h b/worker/api/cpp/include/worker/data_broker.h
index 38a263f36d7c23714b79915228cfa20fc640f628..df931e4ac11c8046d5555df1cbfcdb023dde800a 100644
--- a/worker/api/cpp/include/worker/data_broker.h
+++ b/worker/api/cpp/include/worker/data_broker.h
@@ -18,6 +18,7 @@ enum class WorkerErrorCode {
 class DataBroker {
   public:
     virtual WorkerErrorCode Connect() = 0;
+    virtual ~DataBroker() = default; // needed for unique_ptr to delete itself
 };
 
 class DataBrokerFactory {
diff --git a/worker/api/cpp/src/data_broker.cpp b/worker/api/cpp/src/data_broker.cpp
index f412eaf1c6007d861d70d5fca99455a8c7ade33c..cdcd966844b4ebaca2b90271dee5183e14f570d4 100644
--- a/worker/api/cpp/src/data_broker.cpp
+++ b/worker/api/cpp/src/data_broker.cpp
@@ -13,7 +13,7 @@ std::unique_ptr<DataBroker> DataBrokerFactory::Create(const std::string& source_
 
     std::unique_ptr<DataBroker> p = nullptr;
     try {
-        p = (std::unique_ptr<DataBroker>) new FolderDataBroker(source_name);
+        p.reset(new FolderDataBroker(source_name));
         *return_code = WorkerErrorCode::ERR__NO_ERROR;
     } catch (...) {         // we do not test this part
         *return_code = WorkerErrorCode::ERR__MEMORY_ERROR;
diff --git a/worker/api/cpp/src/folder_data_broker.h b/worker/api/cpp/src/folder_data_broker.h
index bdecc943d2fce54262c8ca16c0a98d496c102190..56475115848dca0837a504d585f4a718742d5034 100644
--- a/worker/api/cpp/src/folder_data_broker.h
+++ b/worker/api/cpp/src/folder_data_broker.h
@@ -15,6 +15,7 @@ class FolderDataBroker final : public hidra2::DataBroker {
     explicit FolderDataBroker(const std::string& source_name);
     WorkerErrorCode Connect() override;
     std::unique_ptr<hidra2::IO> io__; // modified in testings to mock system calls,otherwise do not touch
+
   private:
     std::string base_path_;
     std::vector<FileInfo>  filelist_;
diff --git a/worker/api/cpp/unittests/test_folder_broker.cpp b/worker/api/cpp/unittests/test_folder_broker.cpp
index 27952a410578c3b48a565d3b489793717eeac8e3..a8b891b1eec68aba861ffd9d913a1ca8759318f6 100644
--- a/worker/api/cpp/unittests/test_folder_broker.cpp
+++ b/worker/api/cpp/unittests/test_folder_broker.cpp
@@ -21,7 +21,8 @@ namespace {
 
 TEST(FolderDataBroker, SetCorrectIO) {
     auto data_broker = new FolderDataBroker("test");
-    ASSERT_THAT(dynamic_cast<hidra2::SystemIO*>(data_broker->io__.release()), Ne(nullptr));
+    ASSERT_THAT(dynamic_cast<hidra2::SystemIO*>(data_broker->io__.get()), Ne(nullptr));
+    delete data_broker;
 }
 
 
diff --git a/worker/api/cpp/unittests/test_worker_api.cpp b/worker/api/cpp/unittests/test_worker_api.cpp
index ca87f122618a8363ad494f4cd4b0f5cbbf983d0e..681a99462e4696b21daf35815ff891b83745467b 100644
--- a/worker/api/cpp/unittests/test_worker_api.cpp
+++ b/worker/api/cpp/unittests/test_worker_api.cpp
@@ -20,7 +20,7 @@ TEST(DataBrokerFactoryTests, CreateFolderDataSource) {
     auto data_broker = DataBrokerFactory::Create("path/to/file", &return_code);
 
     ASSERT_THAT(return_code, Eq(WorkerErrorCode::ERR__NO_ERROR));
-    ASSERT_THAT(dynamic_cast<FolderDataBroker*>(data_broker.release()), Ne(nullptr));
+    ASSERT_THAT(dynamic_cast<FolderDataBroker*>(data_broker.get()), Ne(nullptr));
 }
 
 TEST(DataBrokerFactoryTests, FailCreateDataSourceWithEmptySource) {