diff --git a/CHANGELOG.md b/CHANGELOG.md
index bce87d5256020c3749631f19cd18d4b0538593b1..10652f17f2f515bb408d91ffc2f18564c7452f1d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,8 +9,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ### Added
 
-* Initial release.
-
 ### Changed
 
 ### Deprecated
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b786aa78ef91c6cdd10ce9d33c3eedaac9247791..abcbaddbe6cea492b54007b468fdb07958c22b1d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -177,7 +177,7 @@ target_link_libraries(ccaosdb
     ${CONAN_LIBS}
 )
 
-add_executable(ccaosdbcli src/ccaosdbcli.c)
+add_executable(ccaosdbcli EXCLUDE_FROM_ALL src/ccaosdbcli.c)
 target_include_directories(ccaosdbcli PUBLIC
     $<BUILD_INTERFACE:${libcaosdb_SOURCE_DIR}/include>
     $<BUILD_INTERFACE:${libcaosdb_BINARY_DIR}/include>
@@ -189,7 +189,7 @@ target_link_libraries(ccaosdbcli
     ${CONAN_LIBS}
 )
 
-add_executable(cxxcaosdbcli src/cxxcaosdbcli.cpp)
+add_executable(cxxcaosdbcli EXCLUDE_FROM_ALL src/cxxcaosdbcli.cpp)
 target_include_directories(cxxcaosdbcli PUBLIC
     $<BUILD_INTERFACE:${libcaosdb_SOURCE_DIR}/include>
     $<BUILD_INTERFACE:${libcaosdb_BINARY_DIR}/include>
diff --git a/include/caosdb/configuration.h b/include/caosdb/configuration.h
index 6426ab4b9e5b6dbfebb3cce4d67983df58a57a6a..80bc927018cb625d045e4f7379555b5a90d7b9b5 100644
--- a/include/caosdb/configuration.h
+++ b/include/caosdb/configuration.h
@@ -26,9 +26,10 @@
 #include "boost/json/object.hpp"           // for object
 #include "boost/json/value.hpp"            // for value
 #include "boost/json/value_ref.hpp"        // IWYU pragma: keep
-#include "caosdb/authentication.h"         // for Authenticator, PlainPassw...
-#include "caosdb/certificate_provider.h"   // for CertificateProvider, path
-#include "caosdb/exceptions.h"             // for ConfigurationError
+// IWYU pragma: no_include "boost/json/fwd.hpp"
+#include "caosdb/authentication.h"       // for Authenticator, PlainPassw...
+#include "caosdb/certificate_provider.h" // for CertificateProvider, path
+#include "caosdb/exceptions.h"           // for ConfigurationError
 #include "caosdb/logging.h"
 #include "caosdb/utility.h"              // for load_json_file
 #include "grpcpp/security/credentials.h" // for ChannelCredentials
diff --git a/include/caosdb/entity.h b/include/caosdb/entity.h
index 10333d75ba16da611e39433de803c4b004ee96ac..5688409860a10be7a85c6f5e3686633fd9f84337 100644
--- a/include/caosdb/entity.h
+++ b/include/caosdb/entity.h
@@ -450,7 +450,6 @@ public:
   auto AppendProperty(const Property &property) -> void;
 
   auto AppendParent(const Parent &parent) -> void;
-  auto Switch(ProtoEntity *entity) -> void;
   /**
    * Copy all of this entity's features to the target ProtoEntity.
    */
diff --git a/proto b/proto
index daf705ef4e86c30f96b3aac429a66667f50c7b77..36d7956b6eca506fb87096d8d50b6f4b820778b8 160000
--- a/proto
+++ b/proto
@@ -1 +1 @@
-Subproject commit daf705ef4e86c30f96b3aac429a66667f50c7b77
+Subproject commit 36d7956b6eca506fb87096d8d50b6f4b820778b8
diff --git a/src/caosdb/entity.cpp b/src/caosdb/entity.cpp
index 999ba3753b068909dc7dd54518ca5ff8bd8033bf..1d616663642c11737228ce02b4e1fd15fc8d77a6 100644
--- a/src/caosdb/entity.cpp
+++ b/src/caosdb/entity.cpp
@@ -177,13 +177,6 @@ auto Entity::SetVersionId(const std::string &id) -> void {
   this->wrapped->mutable_version()->set_id(id);
 }
 
-// TODO(tf) Re-implement s.th. properties and parents are kept.
-auto Entity::Switch(ProtoEntity *entity) -> void {
-  this->wrapped->Swap(entity);
-  this->wrapped->Clear();
-  this->wrapped = entity;
-}
-
 auto Entity::CopyTo(ProtoEntity *target) -> void {
   target->CopyFrom(*(this->wrapped));
 }
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index fc8e134ea90db40f0d67fde6f44de9ca826adcd8..389d5d919f8200a77ea1ffb93267c11ac70baf75 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -36,7 +36,7 @@ set(test_cases
 
 # special linting for tests
 set(_CMAKE_CXX_CLANG_TIDY_TEST_CHECKS
-  "${_CMAKE_CXX_CLANG_TIDY_CHECKS},-cert-err58-cpp,-cppcoreguidelines-avoid-non-const-global-variables,-cppcoreguidelines-owning-memory,-modernize-use-trailing-return-type,-google-readability-avoid-underscore-in-googletest-name,-cppcoreguidelines-avoid-magic-numbers,-readability-magic-numbers,-cppcoreguidelines-avoid-goto,-hicpp-avoid-goto"
+  "${_CMAKE_CXX_CLANG_TIDY_CHECKS},-cert-err58-cpp,-cppcoreguidelines-avoid-non-const-global-variables,-cppcoreguidelines-owning-memory,-modernize-use-trailing-return-type,-google-readability-avoid-underscore-in-googletest-name,-cppcoreguidelines-avoid-magic-numbers,-readability-magic-numbers,-cppcoreguidelines-avoid-goto,-hicpp-avoid-goto,-readability-function-cognitive-complexity"
 )
 
 # add special cmake functions for gtest
diff --git a/test/test_configuration.cpp b/test/test_configuration.cpp
index 3c047850e82da2a30039cc0c46361542284af38b..abc797fbe97fb408e0ff05ea5deab2a8581f194a 100644
--- a/test/test_configuration.cpp
+++ b/test/test_configuration.cpp
@@ -38,8 +38,7 @@ protected:
   void TearDown() override { ConfigurationManager::Clear(); }
 };
 
-// TODO(tf) cogintive complexity > 25 (threshold)
-TEST_F(test_configuration, load_json) { // NOLINT
+TEST_F(test_configuration, load_json) {
   ConfigurationManager::LoadSingleJSONConfiguration(TEST_DATA_DIR +
                                                     "/test_caosdb_client.json");
   EXPECT_THROW_MESSAGE(
@@ -53,9 +52,7 @@ TEST_F(test_configuration, load_json) { // NOLINT
   ConfigurationManager::Clear();
 }
 
-// TODO(tf) cognitive complexity again
-TEST_F(test_configuration,                           // NOLINT
-       get_default_connection_configuration_error) { // NOLINT
+TEST_F(test_configuration, get_default_connection_configuration_error) {
   EXPECT_THROW_MESSAGE(ConfigurationManager::GetDefaultConnectionName(),
                        ConfigurationError,
                        "This CaosDB client has not been configured.");
diff --git a/test/test_connection.cpp b/test/test_connection.cpp
index 6c5fa0b58f224233a1826d7605a8c94e8270a7e9..7c2efab9566d58c709c060e4206fc0d193ac75df 100644
--- a/test/test_connection.cpp
+++ b/test/test_connection.cpp
@@ -65,8 +65,7 @@ TEST_F(test_connection, configure_ssl_localhost_8080) {
   EXPECT_TRUE(sslcc != nullptr);
 }
 
-// TODO(tf) cognitive complexity > 25 (threshold)
-TEST_F(test_connection, connection_manager_unknown_connection) { // NOLINT
+TEST_F(test_connection, connection_manager_unknown_connection) {
   EXPECT_THROW_MESSAGE(ConnectionManager::GetConnection("test"),
                        caosdb::exceptions::UnknownConnectionError,
                        "No connection named 'test' present.");
diff --git a/test/test_entity.cpp b/test/test_entity.cpp
index 56d3c2ab38d7bf300e329d1214d102510729e992..7b08e6d392fe89d519fbe0fc2c62a59a1ec07b00 100644
--- a/test/test_entity.cpp
+++ b/test/test_entity.cpp
@@ -78,8 +78,7 @@ TEST(test_entity, test_property_setters) {
   EXPECT_EQ(prop.GetDatatype(), "prop_dtype");
 }
 
-// TODO(fspreck) cognitive complexity > 25 (threshold)
-TEST(test_entity, test_append_property) { // NOLINT
+TEST(test_entity, test_append_property) {
   auto entity = Entity();
 
   auto prop = Property();
@@ -151,8 +150,7 @@ TEST(test_entity, test_insert_entity) {
   EXPECT_EQ(entity.GetName(), "entity_name");
 }
 
-// TODO(fspreck) cognitive complexity > 25 (threshold)
-TEST(test_entity, test_insert_with_role) { // NOLINT
+TEST(test_entity, test_insert_with_role) {
   auto transaction = caosdb::transaction::Transaction(
     std::shared_ptr<transaction::EntityTransactionService::Stub>(nullptr));
 
@@ -197,8 +195,7 @@ TEST(test_entity, test_insert_with_parent) {
   EXPECT_EQ(inserted_parent.GetName(), parent.GetName());
 }
 
-// TODO(fspreck) cognitive complexity > 25 (threshold)
-TEST(test_entity, test_insert_with_property) { // NOLINT
+TEST(test_entity, test_insert_with_property) {
   auto transaction = caosdb::transaction::Transaction(
     std::shared_ptr<transaction::EntityTransactionService::Stub>(nullptr));
 
@@ -229,8 +226,7 @@ TEST(test_entity, test_insert_with_property) { // NOLINT
   EXPECT_EQ(prop.GetDatatype(), inserted_prop.GetDatatype());
 }
 
-// TODO(tf) cognitive complexity > 25 (threshold)
-TEST(test_entity, test_from_id_response) { // NOLINT
+TEST(test_entity, test_from_id_response) {
   IdResponse idResponse;
   idResponse.set_id("entity_id");
   auto *error = idResponse.add_entity_errors();
diff --git a/test/test_protobuf.cpp b/test/test_protobuf.cpp
index 61b85c89ae1fc1f5ee0a101ff4f8b4438275648f..9dc957a2f85cd95ce3ead5f59ab8c10868582003 100644
--- a/test/test_protobuf.cpp
+++ b/test/test_protobuf.cpp
@@ -29,8 +29,7 @@ namespace caosdb {
 using caosdb::entity::v1alpha1::Entity;
 using caosdb::entity::v1alpha1::Message;
 
-// TODO(tf) cognitive complexity > 25 (threshold)
-TEST(test_protobuf, test_swap_trivial) { // NOLINT
+TEST(test_protobuf, test_swap_trivial) {
   Message message_source;
   message_source.set_code(1234);
   message_source.set_description("desc");
@@ -50,8 +49,7 @@ TEST(test_protobuf, test_swap_trivial) { // NOLINT
   EXPECT_EQ(message_destination.description(), "desc");
 }
 
-// TODO(tf) cognitive complexity again
-TEST(test_protobuf, test_swap_nested) { // NOLINT
+TEST(test_protobuf, test_swap_nested) {
   Entity entity_source;
   entity_source.set_id("entity_id");
   auto *version_source = entity_source.mutable_version();
diff --git a/test/test_transaction.cpp b/test/test_transaction.cpp
index e17f34960438ce51f41e38da7ad7de4444e741dd..b1a51ab4aa0a256f902f5ebe833cab21c83e38e4 100644
--- a/test/test_transaction.cpp
+++ b/test/test_transaction.cpp
@@ -41,8 +41,7 @@ using caosdb::exceptions::ConnectionError;
 using caosdb::transaction::UniqueResult;
 using ProtoEntity = caosdb::entity::v1alpha1::Entity;
 
-// TODO(tf) cognitive complexity > 25 (threshold)
-TEST(test_transaction, create_transaction) { // NOLINT
+TEST(test_transaction, create_transaction) {
   const auto *host = "localhost";
   auto configuration = InsecureConnectionConfiguration(host, 8000);
   Connection connection(configuration);