diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt
index 4393d3628cf63743b0191857b7f25b1329b6297c..62154f7c6f8f8d42aa478099c63ba8220bb60e0a 100644
--- a/include/CMakeLists.txt
+++ b/include/CMakeLists.txt
@@ -41,12 +41,12 @@ set(libcaosdb_INCL
     ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/utility.h
     ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/register_file_upload_handler.h
     ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/Client.h
-    ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/UploadRequestHandler.h
-    ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/DownloadRequestHandler.h
-    ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/FileWriter.h
-    ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/FileReader.h
-    ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/FileLock.h
-    ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/FileError.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
+    ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/file_reader.h
+    ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/file_lock.h
+    ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/file_error.h
     )
 
 # pass variable to parent scope
diff --git a/include/caosdb/file_transmission/DownloadRequestHandler.h b/include/caosdb/file_transmission/download_request_handler.h
similarity index 97%
rename from include/caosdb/file_transmission/DownloadRequestHandler.h
rename to include/caosdb/file_transmission/download_request_handler.h
index a59f9067605ac15aa01f569b8cc10ccadd6e7fef..e6e8f9f4e9aeb53e87766b387b0e6107582e8868 100644
--- a/include/caosdb/file_transmission/DownloadRequestHandler.h
+++ b/include/caosdb/file_transmission/download_request_handler.h
@@ -1,7 +1,7 @@
 #include "caosdb/entity.h"                        // for FileDescriptor
 #include "caosdb/entity/v1alpha1/main.grpc.pb.h"  // for FileTransmissionS...
 #include "caosdb/entity/v1alpha1/main.pb.h"       // for FileDownloadResponse
-#include "caosdb/file_transmission/FileWriter.h"  // for FileWriter
+#include "caosdb/file_transmission/file_writer.h" // for FileWriter
 #include "caosdb/handler_interface.h"             // for HandlerTag, Handl...
 #include "caosdb/transaction_status.h"            // for TransactionStatus
 #include <grpcpp/impl/codegen/async_stream.h>     // for ClientAsyncReader
diff --git a/include/caosdb/file_transmission/FileError.h b/include/caosdb/file_transmission/file_error.h
similarity index 100%
rename from include/caosdb/file_transmission/FileError.h
rename to include/caosdb/file_transmission/file_error.h
diff --git a/include/caosdb/file_transmission/FileLock.h b/include/caosdb/file_transmission/file_lock.h
similarity index 100%
rename from include/caosdb/file_transmission/FileLock.h
rename to include/caosdb/file_transmission/file_lock.h
diff --git a/include/caosdb/file_transmission/FileReader.h b/include/caosdb/file_transmission/file_reader.h
similarity index 64%
rename from include/caosdb/file_transmission/FileReader.h
rename to include/caosdb/file_transmission/file_reader.h
index 4ddca922cf5304239086840cb268b1205b505bb2..9c89f833d6cbca0cc444b004874db04563bca97a 100644
--- a/include/caosdb/file_transmission/FileReader.h
+++ b/include/caosdb/file_transmission/file_reader.h
@@ -1,12 +1,12 @@
 #pragma once
 
-#include "caosdb/file_transmission/FileLock.h" // for FileMutex, FileReadLock
-#include <boost/filesystem/fstream.hpp>        // for ifstream
-#include <boost/filesystem/operations.hpp>     // for exists
-#include <boost/filesystem/path.hpp>           // for path
-#include <fstream>                             // for ifstream, size_t
-#include <memory>                              // for shared_ptr
-#include <string>                              // for string
+#include "caosdb/file_transmission/file_lock.h" // for FileMutex, FileReadLock
+#include <boost/filesystem/fstream.hpp>         // for ifstream
+#include <boost/filesystem/operations.hpp>      // for exists
+#include <boost/filesystem/path.hpp>            // for path
+#include <fstream>                              // for ifstream, size_t
+#include <memory>                               // for shared_ptr
+#include <string>                               // for string
 
 namespace caosdb::transaction {
 using boost::filesystem::exists;
diff --git a/include/caosdb/file_transmission/FileWriter.h b/include/caosdb/file_transmission/file_writer.h
similarity index 67%
rename from include/caosdb/file_transmission/FileWriter.h
rename to include/caosdb/file_transmission/file_writer.h
index 0142d723910d361bee905c76c28d2157c7aebdb6..114918c76d7cda3d713633f0581101ddafca0e8b 100644
--- a/include/caosdb/file_transmission/FileWriter.h
+++ b/include/caosdb/file_transmission/file_writer.h
@@ -1,10 +1,10 @@
 #pragma once
 
-#include "caosdb/file_transmission/FileLock.h" // for FileMutex, FileWriteLock
-#include <boost/filesystem/path.hpp>           // for path
-#include <fstream>                             // for ofstream
-#include <memory>                              // for shared_ptr
-#include <string>                              // for string
+#include "caosdb/file_transmission/file_lock.h" // for FileMutex, FileWriteLock
+#include <boost/filesystem/path.hpp>            // for path
+#include <fstream>                              // for ofstream
+#include <memory>                               // for shared_ptr
+#include <string>                               // for string
 
 namespace caosdb::transaction {
 
diff --git a/include/caosdb/file_transmission/UploadRequestHandler.h b/include/caosdb/file_transmission/upload_request_handler.h
similarity index 97%
rename from include/caosdb/file_transmission/UploadRequestHandler.h
rename to include/caosdb/file_transmission/upload_request_handler.h
index 8ee96c8a2875162bbbb615fdb2d30a2e47f82370..0bfd45581ef9eabbd6ce90dcb4604130225102b6 100644
--- a/include/caosdb/file_transmission/UploadRequestHandler.h
+++ b/include/caosdb/file_transmission/upload_request_handler.h
@@ -1,7 +1,7 @@
 #include "caosdb/entity.h"                        // for FileDescriptor
 #include "caosdb/entity/v1alpha1/main.grpc.pb.h"  // for FileTransmissionS...
 #include "caosdb/entity/v1alpha1/main.pb.h"       // for FileUploadRequest
-#include "caosdb/file_transmission/FileReader.h"  // for FileReader
+#include "caosdb/file_transmission/file_reader.h" // for FileReader
 #include "caosdb/handler_interface.h"             // for HandlerTag, Handl...
 #include "caosdb/transaction_status.h"            // for TransactionStatus
 #include <cstdint>                                // for uint64_t
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 366875d669b57c4df3942aec5fa4658873754a86..7dd382a400699b052bf0edf04948532e1ab410cc 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -31,11 +31,11 @@ set(libcaosdb_SRC
     ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/transaction_handler.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/unary_rpc_handler.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/register_file_upload_handler.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/Client.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/UploadRequestHandler.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/DownloadRequestHandler.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/FileWriter.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/FileReader.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/client.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/upload_request_handler.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/download_request_handler.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/file_writer.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/file_reader.cpp
     )
 
 # pass variable to parent scope
diff --git a/src/caosdb/file_transmission/Client.cpp b/src/caosdb/file_transmission/client.cpp
similarity index 75%
rename from src/caosdb/file_transmission/Client.cpp
rename to src/caosdb/file_transmission/client.cpp
index 9adabd60806537c35ac882fa601723a2cad37464..fcb0bbda5d0b87b57629acf2631dab236e4135dd 100644
--- a/src/caosdb/file_transmission/Client.cpp
+++ b/src/caosdb/file_transmission/client.cpp
@@ -1,13 +1,13 @@
 #include "caosdb/file_transmission/Client.h"
-#include "caosdb/file_transmission/DownloadRequestHandler.h" // for DownloadReq...
-#include "caosdb/file_transmission/UploadRequestHandler.h" // for UploadReque...
-#include "caosdb/logging.h"                                // for CAOSDB_LOG_...
-#include "caosdb/status_code.h"                            // for StatusCode
-#include <boost/log/core/record.hpp>                       // for record
-#include <boost/log/sources/record_ostream.hpp>            // for basic_recor...
-#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 <exception>                                       // IWYU pragma: keep
+#include "caosdb/file_transmission/download_request_handler.h" // for DownloadReq...
+#include "caosdb/file_transmission/upload_request_handler.h" // for UploadReque...
+#include "caosdb/logging.h"                           // for CAOSDB_LOG_...
+#include "caosdb/status_code.h"                       // for StatusCode
+#include <boost/log/core/record.hpp>                  // for record
+#include <boost/log/sources/record_ostream.hpp>       // for basic_recor...
+#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 <exception>                                  // IWYU pragma: keep
 // IWYU pragma: no_include <bits/exception.h>
 #include <grpcpp/impl/codegen/completion_queue.h> // for CompletionQ...
 
diff --git a/src/caosdb/file_transmission/DownloadRequestHandler.cpp b/src/caosdb/file_transmission/download_request_handler.cpp
similarity index 98%
rename from src/caosdb/file_transmission/DownloadRequestHandler.cpp
rename to src/caosdb/file_transmission/download_request_handler.cpp
index 87730febcf8589f30639123a18a65d60df05de90..b0e44c3e60bd49ef64db2fcf64be8af6c00c9b5e 100644
--- a/src/caosdb/file_transmission/DownloadRequestHandler.cpp
+++ b/src/caosdb/file_transmission/download_request_handler.cpp
@@ -1,4 +1,4 @@
-#include "caosdb/file_transmission/DownloadRequestHandler.h"
+#include "caosdb/file_transmission/download_request_handler.h"
 #include "caosdb/exceptions.h"                         // for Exception
 #include "caosdb/logging.h"                            // for CAOSDB_LOG_TRACE
 #include "caosdb/protobuf_helper.h"                    // for get_arena
diff --git a/src/caosdb/file_transmission/FileReader.cpp b/src/caosdb/file_transmission/file_reader.cpp
similarity index 80%
rename from src/caosdb/file_transmission/FileReader.cpp
rename to src/caosdb/file_transmission/file_reader.cpp
index 5124846c5f993fa3311c72f3445f53ea5482bba7..598cd99866c15e3fd2779329c625cdfb47742859 100644
--- a/src/caosdb/file_transmission/FileReader.cpp
+++ b/src/caosdb/file_transmission/file_reader.cpp
@@ -1,8 +1,8 @@
-#include "caosdb/file_transmission/FileReader.h"
-#include "caosdb/file_transmission/FileError.h" // for FileIOError, FileLockError
-#include <boost/filesystem/path.hpp>            // for path
-#include <mutex>                                // for try_to_lock
-#include <utility>                              // for move
+#include "caosdb/file_transmission/file_reader.h"
+#include "caosdb/file_transmission/file_error.h" // for FileIOError, FileLockError
+#include <boost/filesystem/path.hpp>             // for path
+#include <mutex>                                 // for try_to_lock
+#include <utility>                               // for move
 
 namespace caosdb::transaction {
 
diff --git a/src/caosdb/file_transmission/FileWriter.cpp b/src/caosdb/file_transmission/file_writer.cpp
similarity index 75%
rename from src/caosdb/file_transmission/FileWriter.cpp
rename to src/caosdb/file_transmission/file_writer.cpp
index 3d89c1c6f2343ca5a39a167ad2dc88ff5a4e3aa2..a0db572e5cc980fe4341be741e276f80e116fe51 100644
--- a/src/caosdb/file_transmission/FileWriter.cpp
+++ b/src/caosdb/file_transmission/file_writer.cpp
@@ -1,8 +1,8 @@
-#include "caosdb/file_transmission/FileWriter.h"
-#include "caosdb/file_transmission/FileError.h" // for FileIOError, FileLockError
-#include <boost/filesystem/path.hpp>            // for path
-#include <mutex>                                // for try_to_lock
-#include <utility>                              // for move
+#include "caosdb/file_transmission/file_writer.h"
+#include "caosdb/file_transmission/file_error.h" // for FileIOError, FileLockError
+#include <boost/filesystem/path.hpp>             // for path
+#include <mutex>                                 // for try_to_lock
+#include <utility>                               // for move
 
 namespace caosdb::transaction {
 
diff --git a/src/caosdb/file_transmission/UploadRequestHandler.cpp b/src/caosdb/file_transmission/upload_request_handler.cpp
similarity index 98%
rename from src/caosdb/file_transmission/UploadRequestHandler.cpp
rename to src/caosdb/file_transmission/upload_request_handler.cpp
index c96115d29215c1189833fe1b774d48070c1391c3..32e6fa792ea930dba2fea13a2c0ea891307a4839 100644
--- a/src/caosdb/file_transmission/UploadRequestHandler.cpp
+++ b/src/caosdb/file_transmission/upload_request_handler.cpp
@@ -1,4 +1,4 @@
-#include "caosdb/file_transmission/UploadRequestHandler.h"
+#include "caosdb/file_transmission/upload_request_handler.h"
 #include "caosdb/exceptions.h"                         // for Exception
 #include "caosdb/logging.h"                            // for CAOSDB_LOG_ERROR
 #include "caosdb/protobuf_helper.h"                    // for get_arena
diff --git a/src/caosdb/transaction.cpp b/src/caosdb/transaction.cpp
index 377b3b0febaec8086cc385aa6d1b815bb49fa335..3be26bd8e09894a5555703a4048979f231845760 100644
--- a/src/caosdb/transaction.cpp
+++ b/src/caosdb/transaction.cpp
@@ -22,6 +22,7 @@
 #include "caosdb/entity/v1alpha1/main.pb.h"      // for TransactionRe...
 #include "caosdb/file_transmission/Client.h"     // for FileExchangeC...
 #include "caosdb/file_transmission/register_file_upload_handler.h"
+#include "caosdb/file_transmission/upload_request_handler.h" // Uplo...
 #include "caosdb/logging.h"         // for CAOSDB_LOG_FATAL
 #include "caosdb/protobuf_helper.h" // for get_arena
 #include "caosdb/status_code.h"     // for StatusCode
@@ -285,7 +286,6 @@ auto Transaction::ExecuteAsynchronously() noexcept -> StatusCode {
     CAOSDB_LOG_INFO(logger_name)
       << "Number of files to be uploaded: " << upload_files.size();
 
-    // TODO(tf): Use Arena
     auto *registration_request =
       Arena::CreateMessage<RegisterFileUploadRequest>(GetArena());
     auto *registration_response =
@@ -302,15 +302,15 @@ auto Transaction::ExecuteAsynchronously() noexcept -> StatusCode {
       return StatusCode::EXECUTING;
     }
 
-    FileExchangeClient upload_client(file_service);
-    for (auto file_descriptor : upload_files) {
+    for (auto &file_descriptor : upload_files) {
       file_descriptor.file_transmission_id->set_registration_id(
         registration_response->registration_id());
       CAOSDB_LOG_INFO(logger_name)
         << "Uploading " << file_descriptor.local_path;
-      auto file_upload_status = upload_client.upload(file_descriptor);
-      if (file_upload_status != StatusCode::SUCCESS) {
-        this->status = TransactionStatus::FILE_UPLOAD_ERROR();
+      handler_ = std::make_unique<UploadRequestHandler>(
+        &handler_, file_service.get(), &completion_queue, file_descriptor);
+      this->status = ProcessCalls();
+      if (this->status.GetCode() != StatusCode::SUCCESS) {
         return StatusCode::EXECUTING;
       }
     }
diff --git a/test/test_file_transmission.cpp b/test/test_file_transmission.cpp
index c5afd8741d9803a9899a229c12d53f71a266317e..9c2bdd39b6292a4318395a4e323f03082aeb308c 100644
--- a/test/test_file_transmission.cpp
+++ b/test/test_file_transmission.cpp
@@ -1,5 +1,5 @@
-#include "caosdb/file_transmission/FileWriter.h"
-#include "caosdb/file_transmission/FileReader.h"
+#include "caosdb/file_transmission/file_writer.h"
+#include "caosdb/file_transmission/file_reader.h"
 #include <boost/filesystem/operations.hpp>  // for exists, file_size, remove
 #include <boost/filesystem/path.hpp>        // for path
 #include <boost/filesystem/path_traits.hpp> // for filesystem