diff --git a/CMakeLists.txt b/CMakeLists.txt
index ba6f058881623355b145876c3b277e1a32fb1f95..a4af698e58b93033ea1b684ce78c7a6a165b572f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -41,24 +41,24 @@ conan_basic_setup()
 
 set(PROJECT_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/include")
 
-find_program(iwyu NAMES include-what-you-use iwyu PATHS ${CMAKE_SOURCE_DIR}/tools/include-what-you-use/${iwyu_os}/bin)
-if(NOT iwyu)
-    message(STATUS "include-what-you-use: Not found")
-else()
-    message(STATUS "include-what-you-use: ${iwyu}")
-    set(_CMAKE_CXX_INCLUDE_WHAT_YOU_USE ${iwyu})
-endif()
-
-find_program(clang_tidy NAMES clang-tidy clang-tidy-11)
-if(NOT clang_tidy)
-    message(STATUS "clang-tidy: Not found")
-else()
-    message(STATUS "clang-tidy: ${clang_tidy}")
-    set(_CMAKE_CXX_CLANG_TIDY "${clang_tidy}"
-        "--header-filter=caosdb/.*[^\(\.pb\.h\)]$"
-        "--checks=*,-fuchsia-*,-llvm-include-order,-llvmlibc-*"
-        "--warnings-as-errors=*")
-endif()
+#find_program(iwyu NAMES include-what-you-use iwyu PATHS ${CMAKE_SOURCE_DIR}/tools/include-what-you-use/${iwyu_os}/bin)
+#if(NOT iwyu)
+    #message(STATUS "include-what-you-use: Not found")
+#else()
+    #message(STATUS "include-what-you-use: ${iwyu}")
+    #set(_CMAKE_CXX_INCLUDE_WHAT_YOU_USE ${iwyu})
+#endif()
+
+#find_program(clang_tidy NAMES clang-tidy clang-tidy-11)
+#if(NOT clang_tidy)
+    #message(STATUS "clang-tidy: Not found")
+#else()
+    #message(STATUS "clang-tidy: ${clang_tidy}")
+    #set(_CMAKE_CXX_CLANG_TIDY "${clang_tidy}"
+        #"--header-filter=caosdb/.*[^\(\.pb\.h\)]$"
+        #"--checks=*,-fuchsia-*,-llvm-include-order,-llvmlibc-*"
+        #"--warnings-as-errors=*")
+#endif()
 
 add_subdirectory(src)
 add_subdirectory(include)
@@ -138,6 +138,7 @@ target_include_directories(caosdb_info_v1alpha1 PUBLIC
 
 target_link_libraries(caosdb
 caosdb_info_v1alpha1
+${CONAN_LIBS}
 ${_REFLECTION}
 ${_GRPC_GRPCPP}
 ${_PROTOBUF_LIBPROTOBUF})
diff --git a/include/caosdb/utils.h b/include/caosdb/utils.h
index e00c1806344493c10142c0e2a3939fcbfe47662b..bb54e798c1fd2a3abff9f2964001445ea0157fc4 100644
--- a/include/caosdb/utils.h
+++ b/include/caosdb/utils.h
@@ -21,10 +21,12 @@
 
 #ifndef CAOSDB_UTILS_H
 #define CAOSDB_UTILS_H
+#include <iostream>
 #include <string_view>
 #include <fstream>
 #include <string>
 #include <cstdlib>
+#include <boost/beast/core/detail/base64.hpp>
 
 namespace caosdb::utils {
 
@@ -63,11 +65,17 @@ inline auto get_env_var(const std::string &key, const std::string &fall_back)
 }
 
 /**
- * @brief
- * @todo use boost-beast's implementation
+ * @brief Encode string as base64
  */
 inline auto base64_encode(const std::string &plain) -> std::string {
-  return plain;
+  auto size_plain = plain.size();
+  auto size_encoded = boost::beast::detail::base64::encoded_size(size_plain);
+
+  char encoded[size_encoded];
+  boost::beast::detail::base64::encode(&encoded, plain.c_str(), size_plain);
+
+  // the encoded char[] is not null terminated, so explicitely set the length
+  return std::string(encoded, encoded + size_encoded);
 }
 
 } // namespace caosdb::utils
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 0eae700e02829e96d40851d5cf80f5bb6a5e09a2..44dc1a788eea655ebb4db3cf5807afc9fe4b6f61 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -21,6 +21,7 @@
 # append all the test cases here (file name without the ".cpp" suffix)
 set(test_cases
     test_connection
+    test_utils
     )
 
 # download gtest library
diff --git a/test/test_utils.cpp b/test/test_utils.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..619627cc53827dfbd444da9ddfc06b645cff84d5
--- /dev/null
+++ b/test/test_utils.cpp
@@ -0,0 +1,35 @@
+/*
+ *
+ * This file is a part of the CaosDB Project.
+ *
+ * Copyright (C) 2021 Timm Fitschen <t.fitschen@indiscale.com>
+ * Copyright (C) 2021 IndiScale GmbH <info@indiscale.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "caosdb/utils.h"
+#include <string>
+#include <gtest/gtest-message.h>
+#include <gtest/gtest-test-part.h>
+#include "gtest/gtest_pred_impl.h"
+
+TEST(test_utils, base64_encode) {
+  auto test_plain = std::string("Test");
+  auto test_encoded = std::string("VGVzdA==");
+  ASSERT_EQ(4, test_plain.size());
+  ASSERT_EQ(8, boost::beast::detail::base64::encoded_size(test_plain.size()));
+  ASSERT_EQ(test_encoded, caosdb::utils::base64_encode(test_plain));
+}