diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt
index 18d9334acdac17d3b583efabb4e2eeb116cbb5a9..d480ec17b4ad33498ca1a845ebc0fb1a622cb04a 100644
--- a/include/CMakeLists.txt
+++ b/include/CMakeLists.txt
@@ -42,8 +42,6 @@ set(libcaosdb_INCL
     ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/utility.h
     ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/value.h
     ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/register_file_upload_handler.h
-	# TODO this  file is still missing
-	# ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/register_file_download_handler.h
     ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/upload_request_handler.h
     ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/download_request_handler.h
     ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/file_writer.h
diff --git a/include/caosdb/logging.h b/include/caosdb/logging.h
index a119c9cfa2b7c740a63ea355e3ede80187a41305..896b16d9091b7e4fff10f5157fa97a029e55f9af 100644
--- a/include/caosdb/logging.h
+++ b/include/caosdb/logging.h
@@ -30,11 +30,11 @@
 #include <boost/log/utility/setup/settings.hpp>          // for settings
 #include <boost/smart_ptr/intrusive_ptr.hpp>             // for intrusive_ptr
 #include <boost/smart_ptr/intrusive_ref_counter.hpp>     // for intrusive_p...
-#include <boost/log/core/record.hpp>                      // for record
-#include <boost/log/detail/attachable_sstream_buf.hpp>    // for basic_ostri...
-#include <boost/preprocessor/seq/limits/enum_256.hpp>     // for BOOST_PP_SE...
-#include <boost/preprocessor/seq/limits/size_256.hpp>     // for BOOST_PP_SE...
-#include <iosfwd>                                         // for streamsize
+#include <boost/log/core/record.hpp>                     // for record
+#include <boost/log/detail/attachable_sstream_buf.hpp>   // for basic_ostri...
+#include <boost/preprocessor/seq/limits/enum_256.hpp>    // for BOOST_PP_SE...
+#include <boost/preprocessor/seq/limits/size_256.hpp>    // for BOOST_PP_SE...
+#include <iosfwd>                                        // for streamsize
 #include <memory>                                        // for shared_ptr
 #include <string>                                        // for string
 #include <vector>                                        // for vector
diff --git a/src/caosdb/transaction.cpp b/src/caosdb/transaction.cpp
index 0a17bc9790cac73592342292bd62a32855b75e27..2507287b602909747dc2180dc5b96f250f90fa0f 100644
--- a/src/caosdb/transaction.cpp
+++ b/src/caosdb/transaction.cpp
@@ -441,20 +441,17 @@ auto Transaction::ProcessCalls() -> TransactionStatus {
         if (!res) {
           // The handler has finished it's work
           result = handler_->GetStatus();
-          handler_.reset();
           return result;
         }
       } else {
         std::string description("Invalid tag delivered by notification queue.");
         CAOSDB_LOG_ERROR(logger_name) << description;
-        handler_.reset();
         return TransactionStatus::RPC_ERROR(description);
       }
     } break;
     case NextStatus::SHUTDOWN: {
       CAOSDB_LOG_ERROR(logger_name) << "Notification queue has been shut down unexpectedly.";
       result = handler_->GetStatus();
-      handler_.reset();
       return result;
     } break;
     case NextStatus::TIMEOUT: {
@@ -463,7 +460,6 @@ auto Transaction::ProcessCalls() -> TransactionStatus {
     default:
       CAOSDB_LOG_FATAL(logger_name) << "Got an invalid NextStatus from CompletionQueue.";
       result = handler_->GetStatus();
-      handler_.reset();
       return result;
     }
   }
@@ -494,6 +490,10 @@ void Transaction::Cancel() {
   while (completion_queue.Next(&ignoredTag, &ok)) {
     ;
   }
+
+  if (transaction_future.valid()) {
+    transaction_future.wait();
+  }
 }
 
 } // namespace caosdb::transaction
diff --git a/src/caosdb/unary_rpc_handler.cpp b/src/caosdb/unary_rpc_handler.cpp
index 0c324624a07b532fa28e9f58baeb5860eb2783b9..4db2a949cc2667b4f145a7ef012bbfa68eb2c193 100644
--- a/src/caosdb/unary_rpc_handler.cpp
+++ b/src/caosdb/unary_rpc_handler.cpp
@@ -65,6 +65,7 @@
 namespace caosdb::transaction {
 
 bool UnaryRpcHandler::OnNext(bool ok) {
+  CAOSDB_LOG_TRACE_ENTER_AND_LEAVE(logger_name, "UnaryRpcHandler::OnNext(bool)")
   try {
     if (ok) {
       if (state_ == CallState::NewCall) {
@@ -112,7 +113,7 @@ void UnaryRpcHandler::Cancel() {
 }
 
 void UnaryRpcHandler::handleCallCompleteState() {
-  CAOSDB_LOG_TRACE(logger_name) << "Enter UnaryRpcHandler::handleCallCompleteState";
+  CAOSDB_LOG_TRACE_ENTER_AND_LEAVE(logger_name, "UnaryRpcHandler::handleCallCompleteState()")
 
   switch (status_.error_code()) {
   case grpc::OK:
@@ -127,8 +128,6 @@ void UnaryRpcHandler::handleCallCompleteState() {
                                   << "): " << description;
     break;
   }
-
-  CAOSDB_LOG_TRACE(logger_name) << "Leave UnaryRpcHandler::handleCallCompleteState";
 }
 
 } // namespace caosdb::transaction