diff --git a/CMakeLists.txt b/CMakeLists.txt
index 78e4d616085a4d99156bb536ee0711b0b1362047..6ee7afc36e67df46d42d86ee6693b9ddb25473cd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,8 +7,6 @@ ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
     SET( CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++")
 ENDIF(WIN32)
 
-message(STATUS ${CMAKE_CXX_COMPILER_ID})
-
 option(BUILD_TESTS "Uses googletest to build tests" OFF)
 option(BUILD_INTEGRATION_TESTS "Include integration tests (CMAKE >3.7 is needed)" OFF)
 option(BUILD_DOCS "Uses doxygen to build the documentaion" OFF)
diff --git a/common/cpp/CMakeLists.txt b/common/cpp/CMakeLists.txt
index 0cf8083f69350326fd392932637447988a07dffc..3d3950be158b3509e113124482a763dbb2fc6085 100644
--- a/common/cpp/CMakeLists.txt
+++ b/common/cpp/CMakeLists.txt
@@ -15,7 +15,9 @@ ENDIF(WIN32)
 ################################
 # Library
 ################################
-add_library(${TARGET_NAME} STATIC ${SOURCE_FILES})
+add_library(${TARGET_NAME} OBJECT ${SOURCE_FILES})
 #add_library(${TARGET_NAME} SHARED ${SOURCE_FILES})
 target_include_directories(${TARGET_NAME} PUBLIC include)
 set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
+
+install(DIRECTORY include/ DESTINATION include)
diff --git a/examples/worker/process_folder/CMakeLists.txt b/examples/worker/process_folder/CMakeLists.txt
index 91328be81451bba9347fa928b1b3721c2b0b8a86..4ec508a102a525b0d1ffdf7eab74fbf9057973b4 100644
--- a/examples/worker/process_folder/CMakeLists.txt
+++ b/examples/worker/process_folder/CMakeLists.txt
@@ -1,15 +1,8 @@
 set(TARGET_NAME worker_processfolder)
 set(SOURCE_FILES process_folder.cpp)
 
-
-################################
-# Executable and link
-################################
-#if (CMAKE_BUILD_TYPE STREQUAL "Release")
-#set(CMAKE_FIND_STATIC FIRST)
-#endif()
 add_executable(${TARGET_NAME} ${SOURCE_FILES})
-target_link_libraries(${TARGET_NAME} common worker-api ${CMAKE_THREAD_LIBS_INIT})
+target_link_libraries(${TARGET_NAME} hidra2-worker ${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
@@ -22,6 +15,16 @@ message (STATUS  ${VAR})
 if (CMAKE_COMPILER_IS_GNUCXX)
     set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS_DEBUG "--coverage")
 endif()
-#set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS "-static-libstdc++")
 
 add_example_test("${TARGET_NAME}")
+
+
+set (dir examples/worker/process_folder)
+install(TARGETS ${TARGET_NAME} DESTINATION "${dir}")
+install(FILES ${SOURCE_FILES} DESTINATION "${dir}")
+
+configure_file(CMakeLists_separate.in CMakeLists_separate.txt @ONLY)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CMakeLists_separate.txt DESTINATION "${dir}" RENAME CMakeLists.txt)
+
+configure_file(Makefile.in Makefile_LINUX @ONLY)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/Makefile_LINUX DESTINATION "${dir}")
diff --git a/examples/worker/process_folder/CMakeLists_separate.in b/examples/worker/process_folder/CMakeLists_separate.in
new file mode 100644
index 0000000000000000000000000000000000000000..cd02b336cd9078cf6b87178126ed26e324e72179
--- /dev/null
+++ b/examples/worker/process_folder/CMakeLists_separate.in
@@ -0,0 +1,22 @@
+cmake_minimum_required(VERSION 2.8)
+
+project(worker_processfolder)
+
+set(CMAKE_CXX_STANDARD 11)
+
+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
+    SET( CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++")
+ENDIF()
+
+find_package (Threads)
+
+set(TARGET_NAME ${CMAKE_PROJECT_NAME})
+
+set(SOURCE_FILES process_folder.cpp)
+
+link_directories(@CMAKE_INSTALL_PREFIX@/lib)
+
+add_executable(${TARGET_NAME} ${SOURCE_FILES})
+target_include_directories(${TARGET_NAME} PUBLIC @CMAKE_INSTALL_PREFIX@/include)
+target_link_libraries(${TARGET_NAME} hidra2-worker ${CMAKE_THREAD_LIBS_INIT})
+
diff --git a/examples/worker/process_folder/Makefile.in b/examples/worker/process_folder/Makefile.in
new file mode 100644
index 0000000000000000000000000000000000000000..f71764db49ab3cc4bd173c4ee86945d084aadf72
--- /dev/null
+++ b/examples/worker/process_folder/Makefile.in
@@ -0,0 +1,25 @@
+PROGRAM=worker_processfolder
+
+CXX=g++
+CXXFLAGS=-std=c++11
+LDFLAGS=-pthread  -static-libgcc -static-libstdc++
+LIBS=-L @CMAKE_INSTALL_PREFIX@/lib -lhidra2-worker
+INCLUDE=@CMAKE_INSTALL_PREFIX@/include
+RM=rm -f
+
+SRCS=process_folder.cpp
+OBJS=$(subst .cpp,.o,$(SRCS))
+
+all: $(PROGRAM)
+
+$(PROGRAM): $(OBJS)
+	$(CXX) $(LDFLAGS) -o $@ $^ $(LIBS)
+
+%.o: %.cpp
+	$(CXX) $(CXXFLAGS) -I$(INCLUDE) -c -o $@ $<
+
+clean:
+	$(RM) $(OBJS)
+
+distclean: clean
+	$(RM) $(PROGRAM)
diff --git a/examples/worker/process_folder/process_folder.cpp b/examples/worker/process_folder/process_folder.cpp
index c2c0b0587437366b086bc0323e63f7941b847e7e..54935ab54b350e300bff73cae61c2045ab2e0b7a 100644
--- a/examples/worker/process_folder/process_folder.cpp
+++ b/examples/worker/process_folder/process_folder.cpp
@@ -6,7 +6,7 @@
 #include <chrono>
 #include <iomanip>
 
-#include "worker/data_broker.h"
+#include "hidra2_worker.h"
 
 using hidra2::WorkerErrorCode;
 using std::chrono::high_resolution_clock;
diff --git a/producer/api/CMakeLists.txt b/producer/api/CMakeLists.txt
index b09e6b457682248e75714f06ae09abac04db1761..4bd5421dbf0434ebd19096fbea9fce167d124e96 100644
--- a/producer/api/CMakeLists.txt
+++ b/producer/api/CMakeLists.txt
@@ -5,9 +5,8 @@ set(SOURCE_FILES src/producer/producer.cpp include/producer/producer.h)
 ################################
 # Library
 ################################
-add_library(${TARGET_NAME} STATIC ${SOURCE_FILES})
+add_library(${TARGET_NAME} STATIC ${SOURCE_FILES} $<TARGET_OBJECTS:common>)
 target_include_directories(${TARGET_NAME} PUBLIC include)
-target_link_libraries(${TARGET_NAME} common)
 set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
 
 ################################
diff --git a/tests/system_io/read_file_content/CMakeLists.txt b/tests/system_io/read_file_content/CMakeLists.txt
index 21ad081c58db0b10f91b9ac7a45f6085802010dc..55a84f07f8ee50efc8b61c927bfcac6e7e206270 100644
--- a/tests/system_io/read_file_content/CMakeLists.txt
+++ b/tests/system_io/read_file_content/CMakeLists.txt
@@ -5,8 +5,9 @@ set(SOURCE_FILES read_file_content.cpp)
 ################################
 # Executable and link
 ################################
-add_executable(${TARGET_NAME} ${SOURCE_FILES})
-target_link_libraries(${TARGET_NAME} test_common common )
+add_executable(${TARGET_NAME} ${SOURCE_FILES} $<TARGET_OBJECTS:common> )
+target_link_libraries(${TARGET_NAME} test_common)
+target_include_directories(${TARGET_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/common/cpp/include)
 set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
 
 ################################
diff --git a/tests/system_io/read_files_in_folder/CMakeLists.txt b/tests/system_io/read_files_in_folder/CMakeLists.txt
index d8019e0e89c580792cfefe03ed30c208e70538d8..cb22f8bd778be2e6b9df6421cc1b522108a35ff8 100644
--- a/tests/system_io/read_files_in_folder/CMakeLists.txt
+++ b/tests/system_io/read_files_in_folder/CMakeLists.txt
@@ -5,9 +5,9 @@ set(SOURCE_FILES read_folder_content.cpp)
 ################################
 # Executable and link
 ################################
-add_executable(${TARGET_NAME} ${SOURCE_FILES})
-target_link_libraries(${TARGET_NAME} test_common common)
-#target_include_directories(${TARGET_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/tests/common/cpp/include)
+add_executable(${TARGET_NAME} ${SOURCE_FILES}  $<TARGET_OBJECTS:common>)
+target_link_libraries(${TARGET_NAME} test_common)
+target_include_directories(${TARGET_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/common/cpp/include)
 set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
 
 ################################
diff --git a/tests/worker/connect_multithread/CMakeLists.txt b/tests/worker/connect_multithread/CMakeLists.txt
index 8dc1b8ae7ece633d9733d2d8aafd5759bbfd9c8f..31364d77e74b1b833bc6d06d63105fbdf967f9f6 100644
--- a/tests/worker/connect_multithread/CMakeLists.txt
+++ b/tests/worker/connect_multithread/CMakeLists.txt
@@ -6,7 +6,7 @@ set(SOURCE_FILES content_multithread.cpp)
 # Executable and link
 ################################
 add_executable(${TARGET_NAME} ${SOURCE_FILES})
-target_link_libraries(${TARGET_NAME} test_common common worker-api ${CMAKE_THREAD_LIBS_INIT})
+target_link_libraries(${TARGET_NAME} test_common hidra2-worker ${CMAKE_THREAD_LIBS_INIT})
 set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
 if (CMAKE_COMPILER_IS_GNUCXX)
     set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS_DEBUG "--coverage")
diff --git a/tests/worker/next_multithread/CMakeLists.txt b/tests/worker/next_multithread/CMakeLists.txt
index 13de6686bb6d807d0ce6d017dc16a5c1416c4faf..a386726ec5e6e4a719e29d7341a327fc8adec88e 100644
--- a/tests/worker/next_multithread/CMakeLists.txt
+++ b/tests/worker/next_multithread/CMakeLists.txt
@@ -6,7 +6,7 @@ set(SOURCE_FILES next_multithread.cpp)
 # Executable and link
 ################################
 add_executable(${TARGET_NAME} ${SOURCE_FILES})
-target_link_libraries(${TARGET_NAME} test_common common worker-api  ${CMAKE_THREAD_LIBS_INIT})
+target_link_libraries(${TARGET_NAME} test_common hidra2-worker  ${CMAKE_THREAD_LIBS_INIT})
 set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
 if (CMAKE_COMPILER_IS_GNUCXX)
     set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS_DEBUG "--coverage")
diff --git a/worker/api/cpp/CMakeLists.txt b/worker/api/cpp/CMakeLists.txt
index da84ebcfb01cfd3b01e0b9d196ee5fe41d0398ef..da6376a3f0c99db6c85b9360c99499b61a69a958 100644
--- a/worker/api/cpp/CMakeLists.txt
+++ b/worker/api/cpp/CMakeLists.txt
@@ -1,18 +1,18 @@
-set(TARGET_NAME worker-api)
+set(TARGET_NAME hidra2-worker)
 
-set(SOURCE_FILES include/worker/data_broker.h src/data_broker.cpp src/folder_data_broker.cpp src/folder_data_broker.h)
+set(SOURCE_FILES include/worker/data_broker.h src/data_broker.cpp src/folder_data_broker.cpp src/folder_data_broker.h include/hidra2_worker.h)
 
 
 ################################
 # Library
 ################################
-#add_library(${TARGET_NAME} SHARED ${SOURCE_FILES})
-add_library(${TARGET_NAME} STATIC ${SOURCE_FILES})
+add_library(${TARGET_NAME} STATIC ${SOURCE_FILES} $<TARGET_OBJECTS:common>)
 
-target_include_directories(${TARGET_NAME} PUBLIC include)
-target_link_libraries(${TARGET_NAME} common)
+target_include_directories(${TARGET_NAME} PUBLIC include ${CMAKE_SOURCE_DIR}/common/cpp/include)
+#target_link_libraries(${TARGET_NAME} $<TARGET_OBJECTS:common>)
 set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
 
+
 ################################
 # Testing
 ################################
@@ -21,4 +21,8 @@ set(TEST_SOURCE_FILES unittests/test_worker_api.cpp
 set(TEST_LIBRARIES "${TARGET_NAME}")
 
 
-gtest(${TARGET_NAME} "${TEST_SOURCE_FILES}" "${TEST_LIBRARIES}")
\ No newline at end of file
+gtest(${TARGET_NAME} "${TEST_SOURCE_FILES}" "${TEST_LIBRARIES}")
+
+install(TARGETS ${TARGET_NAME} DESTINATION lib)
+
+install(DIRECTORY include/ DESTINATION include)
diff --git a/worker/api/cpp/include/hidra2_worker.h b/worker/api/cpp/include/hidra2_worker.h
new file mode 100644
index 0000000000000000000000000000000000000000..f919a549668b32a8eb0f6be728394f91d7007a0b
--- /dev/null
+++ b/worker/api/cpp/include/hidra2_worker.h
@@ -0,0 +1,6 @@
+#ifndef HIDRA2_HIDRA2_WORKER_H
+#define HIDRA2_HIDRA2_WORKER_H
+
+#include "worker/data_broker.h"
+
+#endif //HIDRA2_HIDRA2_WORKER_H
diff --git a/worker/api/cpp/include/worker/data_broker.h b/worker/api/cpp/include/worker/data_broker.h
index 4383aeeb2614caf44b52f5e3a3048d48f32ec45b..57393eab7b6ac17b80fa86295ab20168779f3d13 100644
--- a/worker/api/cpp/include/worker/data_broker.h
+++ b/worker/api/cpp/include/worker/data_broker.h
@@ -3,7 +3,8 @@
 
 #include <memory>
 #include <string>
-#include <common/file_info.h>
+
+#include "common/file_info.h"
 
 namespace hidra2 {