diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a79ad1944436beb30f82d1149dd1c840780a0287..8f77eea4848b735b3489d93238e3335e36cf04c5 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -83,6 +83,9 @@ test:
     - mkdir build
     - cd build
     - conan install .. -s "compiler.libcxx=libstdc++11"
+    - FILE_TO_BE_PATCHED="$(grep "std::unique_ptr<ContextAllocator> context_allocator) {}" -l -r $(conan config home))"
+    - echo "FILE_TO_BE_PATCHED=$FILE_TO_BE_PATCHED"
+    - sed -e "s|std::unique_ptr<ContextAllocator> context_allocator) {}|std::unique_ptr<ContextAllocator> /*context_allocator*/) {}|" -i $FILE_TO_BE_PATCHED
     - cmake -DCMAKE_BUILD_TYPE=Debug ..
     - cmake --build .
     - cmake --build . --target unit_test_coverage
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4a70cb28277060f30a0a030ddbf31f1511513374..2f94b5e8fd3ef7aa399c250e32dcbc0e7ef44ad9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -41,6 +41,10 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
 set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
 
+IF (WIN32)
+    set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
+ENDIF()
+
 ###########################################
 ### DEPENDENCY MANAGEMENT with CONAN
 ###########################################
@@ -79,8 +83,13 @@ set(PROTO_FILES
 set(PROTO_PATH ${PROJECT_SOURCE_DIR}/proto/proto)
 
 # compiler binaries
-set(_PROTOBUF_PROTOC "${CMAKE_BINARY_DIR}/build_tools/protoc")
-set(_GRPC_CPP_PLUGIN_EXECUTABLE "${CMAKE_BINARY_DIR}/build_tools/grpc_cpp_plugin")
+IF (WIN32)
+    set(_PROTOBUF_PROTOC "${CMAKE_BINARY_DIR}/build_tools/protoc.exe")
+    set(_GRPC_CPP_PLUGIN_EXECUTABLE "${CMAKE_BINARY_DIR}/build_tools/grpc_cpp_plugin.exe")
+ELSE()
+    set(_PROTOBUF_PROTOC "${CMAKE_BINARY_DIR}/build_tools/protoc")
+    set(_GRPC_CPP_PLUGIN_EXECUTABLE "${CMAKE_BINARY_DIR}/build_tools/grpc_cpp_plugin")
+ENDIF()
 
 # Generated sources
 list(LENGTH PROTO_FILES len_proto_files)
@@ -248,6 +257,7 @@ if(_LINTING)
     add_compiler_flag("-pedantic")
     add_compiler_flag("-Werror")
 
+    message(STATUS "PEDANTIC_CMAKE_CXX_FLAGS: [${PEDANTIC_CMAKE_CXX_FLAGS}]")
     set(TARGET_CAOSDB_COMPILE_FLAGS "${TARGET_CAOSDB_COMPILE_FLAGS} ${PEDANTIC_CMAKE_CXX_FLAGS}")
     set(TARGET_CCAOSDB_COMPILE_FLAGS "${TARGET_CCAOSDB_COMPILE_FLAGS} ${PEDANTIC_CMAKE_C_FLAGS}")
     set(TARGET_CXXCAOSDBCLI_COMPILE_FLAGS "${TARGET_CXXCAOSDBCLI_COMPILE_FLAGS} ${PEDANTIC_CMAKE_CXX_FLAGS}")
diff --git a/README_SETUP.md b/README_SETUP.md
index 34ae13a3eb91037e4bcb183c7ca8fe2eba160a3c..68b10626bf79286e3439a933efc551743ff7bc99 100644
--- a/README_SETUP.md
+++ b/README_SETUP.md
@@ -33,6 +33,19 @@ have to add `build/lib/` (or, alternatively after installation,
 `CMAKE_INSTALL_PREFIX/lib`) to your `DYLD_LIBRARY_PATH` environmental
 variable.
 
+### How to build on Windows
+
+We use [Visual Studio 2019](https://visualstudio.microsoft.com/de/vs/features/cplusplus/)
+as compiler. We use [cmake](https://cmake.org/download/) as build tool.
+
+1. `mkdir build`
+2. `cd build`
+3. `conan install .. -g visual_studio -s arch=x86_64 -s build_type=Release -s compiler.toolset=v142 -s compiler.version=16 -s compiler.runtime=MD  --build=missing --update`
+4. `cmake -B . ..`
+5. open ` libcaosdb.sln` with Visual Studio, change the buildtype to `Release`
+   and build the project. (You can open Tools/Command Line/Developer Command
+   Prompt and execute `msbuild libcaosdb.sln /property:Configuration=Release`)
+
 ## Unit Tests
 
 ### Build
diff --git a/conanfile.py b/conanfile.py
index 4ae59d5c79392e6cacc26e6dbfe2306010be3c0e..0fee0db6e8f6bec28fb514d98bda07050171a630 100644
--- a/conanfile.py
+++ b/conanfile.py
@@ -28,7 +28,7 @@ class CaosdbConan(ConanFile):
 
     def imports(self):
         self.copy("protoc*", "build_tools", "bin")
-        self.copy("grpc_cpp_plugin", "build_tools", "bin")
+        self.copy("grpc_cpp_plugin*", "build_tools", "bin")
 
     def build(self):
         cmake = CMake(self)
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index aab1f0a35b5a71436505a9ad33d13deabeafb8aa..4fbdc46040edcca4d92de9122a6520488a573017 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -82,6 +82,7 @@ include(CodeCoverage)
 if (LCOV_PATH)
     message(STATUS "Found LCOV: ${LCOV_PATH}")
     target_link_libraries(caosdb gcov)
+    target_link_libraries(ccaosdb gcov)
     setup_target_for_coverage_lcov(
         NAME unit_test_coverage
         EXECUTABLE ctest -L caosdb-cpplib-unit-tests
@@ -91,11 +92,13 @@ if (LCOV_PATH)
         GENHTML_ARGS --rc lcov_branch_coverage=1
         )
     message(STATUS "Adding COMPILE_FLAGS for coverage: ${COVERAGE_COMPILER_FLAGS}")
-    set(TARGET_CAOSDB_COMPILE_FLAGS "${TARGET_CAOSDB_COMPILE_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE)
-    set(TARGET_CCAOSDB_COMPILE_FLAGS "${TARGET_CCAOSDB_COMPILE_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE)
+    set(TARGET_CAOSDB_COMPILE_FLAGS "${TARGET_CAOSDB_COMPILE_FLAGS} ${COVERAGE_COMPILER_FLAGS}")
+    set(TARGET_CCAOSDB_COMPILE_FLAGS "${TARGET_CCAOSDB_COMPILE_FLAGS} ${COVERAGE_COMPILER_FLAGS}")
+    set(TARGET_CAOSDB_COMPILE_FLAGS ${TARGET_CAOSDB_COMPILE_FLAGS} PARENT_SCOPE)
+    set(TARGET_CCAOSDB_COMPILE_FLAGS ${TARGET_CCAOSDB_COMPILE_FLAGS} PARENT_SCOPE)
     set_target_properties(caosdb PROPERTIES
         COMPILE_FLAGS "${TARGET_CAOSDB_COMPILE_FLAGS}")
-    set_target_properties(caosdb PROPERTIES
+    set_target_properties(ccaosdb PROPERTIES
         COMPILE_FLAGS "${TARGET_CCAOSDB_COMPILE_FLAGS}")
 else ()
     message(WARNING "Could not generate code coverage report. Please install lcov.")