diff --git a/conanfile.py b/conanfile.py
index 3495107311d4e0d467313dc4d8b088a508349d55..b37a045453b008b60c67985bf02effc02a6cc31c 100644
--- a/conanfile.py
+++ b/conanfile.py
@@ -14,10 +14,12 @@ class CaosdbConan(ConanFile):
     default_options = {"shared": False, "fPIC": True}
     generators = "cmake"
     requires = [
-        ("boost/1.77.0"),
-        ("gtest/1.11.0"),
+        ("boost/1.76.0"),
         ("grpc/1.39.1"),
     ]
+    build_requires = [
+        ("gtest/1.11.0"),
+    ]
     exports = "*.cpp", "*.h", "*.cmake", "*CMakeLists.txt", "*.in", "*.proto", "*.c"
     exports_sources = "src", "doc", "include", "test", "cmake", "proto"
 
diff --git a/include/caosdb/configuration.h b/include/caosdb/configuration.h
index 83b47810e7756555c201b57538b6f8ba738d1e43..1c3f0148a6679fd152563bd11859d2cab28a9d1a 100644
--- a/include/caosdb/configuration.h
+++ b/include/caosdb/configuration.h
@@ -25,6 +25,7 @@
 #include "caosdb/certificate_provider.h" // for CertificateProvider, path
 #include "caosdb/exceptions.h"           // for ConfigurationError
 #include "caosdb/logging.h"              // for CAOSDB_LOG_...
+#include "caosdb/protobuf_helper.h"      // for reset_arena
 #include "caosdb/utility.h"              // for load_json_file
 // IWYU pragma: no_include "boost/json/fwd.hpp"
 #include <boost/filesystem/operations.hpp> // for exists
@@ -32,10 +33,12 @@
 #include <boost/json/object.hpp>           // for object
 #include <boost/json/value.hpp>            // for value
 #include <boost/json/value_ref.hpp>        // IWYU pragma: keep
+#include <google/protobuf/arena.h>         // for Arena
 #include <grpcpp/security/credentials.h>   // for ChannelCredentials
 #include <iosfwd>                          // for ostream
-#include <memory>                          // for unique_ptr, shared_ptr
-#include <string>                          // for string
+#include <iostream>
+#include <memory> // for unique_ptr, shared_ptr
+#include <string> // for string
 
 namespace caosdb::configuration {
 using boost::filesystem::exists;
@@ -47,6 +50,7 @@ using caosdb::authentication::Authenticator;
 using caosdb::authentication::PlainPasswordAuthenticator;
 using caosdb::exceptions::ConfigurationError;
 using caosdb::utility::load_json_file;
+using google::protobuf::Arena;
 using grpc::ChannelCredentials;
 
 const std::string logger_name = "caosdb::configuration";
@@ -218,7 +222,10 @@ public:
   ConfigurationManager(ConfigurationManager const &) = delete;
   void operator=(ConfigurationManager const &) = delete;
 
+  inline static auto GetArena() -> Arena * { return &GetInstance().arena; }
+
 private:
+  Arena arena;
   value json_configuration;
   ConnectionConfigurationHelper connection_configuration_helper;
   LoggingConfigurationHelper logging_configuration_helper;
diff --git a/include/caosdb/info.h b/include/caosdb/info.h
index e9e7e1773ab81a4676e5be65e904a8026a22d60a..87b1b3278597178cf572b6f00d62eed8f8a66c0f 100644
--- a/include/caosdb/info.h
+++ b/include/caosdb/info.h
@@ -54,11 +54,12 @@ public:
    * CaosDBConnection::GetVersionInfo() instead to get the version of the
    * server behind the given connection.
    */
-  explicit inline VersionInfo(ProtoVersionInfo *info) : info(info) {
-    if (this->info->GetArena() == nullptr) {
-      caosdb::utility::get_arena()->Own(this->info);
-    }
-  };
+  explicit inline VersionInfo(ProtoVersionInfo *info)
+    : info(info){
+        // if (this->info->GetArena() == nullptr) {
+        // caosdb::utility::get_arena()->Own(this->info);
+        //}
+      };
   [[nodiscard]] inline auto GetMajor() const -> int32_t { return this->info->major(); }
   [[nodiscard]] inline auto GetMinor() const -> int32_t { return this->info->minor(); }
   [[nodiscard]] inline auto GetPatch() const -> int32_t { return this->info->patch(); }
diff --git a/include/caosdb/logging.h b/include/caosdb/logging.h
index 73f14cad5ad779dcb2bdb134325ad7397f436edb..eb99f9a51b3630ce48849acf935b316044aa82b2 100644
--- a/include/caosdb/logging.h
+++ b/include/caosdb/logging.h
@@ -41,19 +41,14 @@ typedef boost::log::sources::severity_channel_logger_mt<int, std::string> boost_
 
 class logger {
 public:
-  static auto destroy() -> void {
-    auto &instance = logger::GetInstance();
-    delete instance._logger_instance;
-  }
-  static auto get() -> boost_logger_class & { return *logger::GetInstance()._logger_instance; }
+  static auto get() -> boost_logger_class & { return logger::GetInstance()._logger_instance; }
 
 private:
-  logger() { this->_logger_instance = new boost_logger_class(); };
   static logger &GetInstance() {
     static logger instance;
     return instance;
   }
-  boost_logger_class *_logger_instance;
+  boost_logger_class _logger_instance;
 };
 
 /**
diff --git a/include/caosdb/transaction.h b/include/caosdb/transaction.h
index 634c7a0d01b613e4fb6ad4d56e037693d9abc2c2..006b9f39e97164ca48bb1f1e9bc97c66295e20a7 100644
--- a/include/caosdb/transaction.h
+++ b/include/caosdb/transaction.h
@@ -407,7 +407,7 @@ public:
    * Instead, do Execute() or WaitForIt() and only call this method afterwards.
    */
   [[nodiscard]] inline auto GetResultSet() const noexcept -> const ResultSet & {
-    if (!this->result_set) {
+    if (this->result_set == nullptr) {
       CAOSDB_LOG_ERROR(logger_name)
         << "GetResultSet was called before the transaction has terminated. This is a programming "
            "error of the code which uses the transaction.";
diff --git a/src/caosdb/configuration.cpp b/src/caosdb/configuration.cpp
index 3d78ac70600f2dcbb62199a40c6ec5d5a0299823..aa35901c9bd116dba17c4ceed164e4ccbac6dfe7 100644
--- a/src/caosdb/configuration.cpp
+++ b/src/caosdb/configuration.cpp
@@ -46,10 +46,11 @@
 #include <exception>                                   // IWYU pragma: keep
 // IWYU pragma: no_include <bits/exception.h>
 #include <grpcpp/security/credentials.h> // for SslCredentials
-#include <iterator>                      // for next
-#include <map>                           // for map
-#include <stdexcept>                     // for out_of_range
-#include <string>                        // for string, operator+
+#include <iostream>
+#include <iterator>  // for next
+#include <map>       // for map
+#include <stdexcept> // for out_of_range
+#include <string>    // for string, operator+
 
 namespace caosdb::configuration {
 using boost::filesystem::exists;
diff --git a/src/caosdb/connection.cpp b/src/caosdb/connection.cpp
index fcf4b119f5dcf4dacf268fd3d6c19f9b036b93fe..9951cbf69f1905b861b679128dc34fc9a548e3e1 100644
--- a/src/caosdb/connection.cpp
+++ b/src/caosdb/connection.cpp
@@ -82,7 +82,7 @@ auto Connection::RetrieveVersionInfoNoExceptions() const noexcept -> Transaction
                                             error_message);
     }
   } else {
-    this->version_info = std::make_unique<VersionInfo>(response->release_version_info());
+    this->version_info = std::make_unique<VersionInfo>(response->mutable_version_info());
   }
 
   return status;
diff --git a/src/caosdb/file_transmission/download_request_handler.cpp b/src/caosdb/file_transmission/download_request_handler.cpp
index 755c8a438f0634ee62761a257173918e53280b50..e915075bdc5c8583c3e2ed2a5b7d979811e34942 100644
--- a/src/caosdb/file_transmission/download_request_handler.cpp
+++ b/src/caosdb/file_transmission/download_request_handler.cpp
@@ -128,22 +128,15 @@ void DownloadRequestHandler::handleNewCallState() {
   CAOSDB_LOG_TRACE(logger_name) << "Enter DownloadRequestHandler::handleNewCallState. local_path = "
                                 << file_descriptor_.local_path
                                 << ", download_id = " << file_descriptor_.file_transmission_id;
-  CAOSDB_LOG_TRACE(logger_name) << "HERE 1";
   fileWriter_ = std::make_unique<FileWriter>(file_descriptor_.local_path);
-  CAOSDB_LOG_TRACE(logger_name) << "HERE 2";
 
   auto *tid = request_->mutable_file_transmission_id();
-  CAOSDB_LOG_TRACE(logger_name) << "HERE 3";
   tid->CopyFrom(*(file_descriptor_.file_transmission_id));
-  CAOSDB_LOG_TRACE(logger_name) << "HERE 4";
 
   rpc_ = stub_->PrepareAsyncFileDownload(&ctx_, *request_, cq_);
-  CAOSDB_LOG_TRACE(logger_name) << "HERE 5";
 
   transaction_status = TransactionStatus::EXECUTING();
-  CAOSDB_LOG_TRACE(logger_name) << "HERE 6";
   state_ = CallState::SendingRequest;
-  CAOSDB_LOG_TRACE(logger_name) << "HERE 7";
   rpc_->StartCall(tag_);
   CAOSDB_LOG_TRACE(logger_name) << "Leave DownloadRequestHandler::handleNewCallState";
 }
diff --git a/src/caosdb/logging.cpp b/src/caosdb/logging.cpp
index ddbda4f05a2582ae058f63f7b4c1c8453b9960dd..ead331da4f91d0053d413846158425f2bdb0667e 100644
--- a/src/caosdb/logging.cpp
+++ b/src/caosdb/logging.cpp
@@ -20,6 +20,7 @@
  */
 #include "caosdb/logging.h"
 #include "caosdb/log_level.h"
+#include "caosdb/protobuf_helper.h"
 #include <boost/core/swap.hpp> // for swap
 #include <boost/iterator/iterator_facade.hpp>
 #include <boost/log/attributes/clock.hpp>
@@ -44,9 +45,6 @@
 #include <utility> // for move
 #include <vector>
 
-void __attribute__((constructor)) startup() {}
-void __attribute__((destructor)) shutdown() { caosdb::logging::logger::destroy(); }
-
 namespace caosdb::logging {
 
 LoggingConfiguration::LoggingConfiguration(int level) : LevelConfiguration(level) {}
diff --git a/src/caosdb/protobuf_helper.cpp b/src/caosdb/protobuf_helper.cpp
index 9633f58eec141e717a33e0a3f815e456179500d0..2b5847687d4926324cbbd5d4f49caca4131dc951 100644
--- a/src/caosdb/protobuf_helper.cpp
+++ b/src/caosdb/protobuf_helper.cpp
@@ -19,16 +19,14 @@
  *
  */
 #include "caosdb/protobuf_helper.h"
+#include "caosdb/configuration.h"
 #include <google/protobuf/arena.h> // for Arena
 
 namespace caosdb::utility {
 
 using google::protobuf::Arena;
 
-auto get_arena() -> Arena * {
-  static Arena arena;
-  return &arena;
-}
+auto get_arena() -> Arena * { return caosdb::configuration::ConfigurationManager::GetArena(); }
 
 auto reset_arena() -> void { get_arena()->Reset(); }
 
diff --git a/src/caosdb/transaction.cpp b/src/caosdb/transaction.cpp
index d315bf890fdaf5d2382f4fe2b3d2e57ba3a57bc2..7abaa1778b41353a4f8b6fef6acf75507a78ed03 100644
--- a/src/caosdb/transaction.cpp
+++ b/src/caosdb/transaction.cpp
@@ -251,7 +251,8 @@ auto Transaction::ExecuteAsynchronously() noexcept -> StatusCode { // NOLINT
           auto *entity_response =
             sub_response.mutable_retrieve_response()->mutable_entity_response();
           auto entity_id = entity_response->entity().id();
-          download_files[entity_id].file_transmission_id = entity_response->release_download_id();
+          download_files[entity_id].file_transmission_id =
+            entity_response->unsafe_arena_release_download_id();
           // TODO(tf) handle error
         }
       }
diff --git a/test/test_data_type.cpp b/test/test_data_type.cpp
index b1e714d705b23dcaef6354e17cf94e411f1d8335..5d0fa1b1a2748553a5c20ebadc04ad2b839d435f 100644
--- a/test/test_data_type.cpp
+++ b/test/test_data_type.cpp
@@ -39,8 +39,6 @@
 #include <utility>                                     // for pair
 
 namespace caosdb::entity {
-using ProtoEntity = caosdb::entity::v1alpha1::Entity;
-using ProtoParent = caosdb::entity::v1alpha1::Parent;
 using ProtoDataType = caosdb::entity::v1alpha1::DataType;
 using ProtoAtomicDataType = caosdb::entity::v1alpha1::AtomicDataType;
 
@@ -65,6 +63,7 @@ TEST(test_data_type, test_atomic) {
     EXPECT_TRUE(data_type.IsAtomic());
     EXPECT_EQ(data_type.GetAsAtomic(), map_el.first);
   }
+  caosdb::utility::reset_arena();
 }
 
 TEST(test_data_type, test_reference) {