diff --git a/common/cpp/include/common/version.h.in b/common/cpp/include/common/version.h.in
index 15ecfac7b56a8241c3ac215e6c95aa644e8a904b..1ca92fd870aeecf79f17f29907c7b3d452cee070 100644
--- a/common/cpp/include/common/version.h.in
+++ b/common/cpp/include/common/version.h.in
@@ -2,13 +2,17 @@
 #define ASAPO_VERSION_H
 
 #include <iostream>
+#include "string.h"
 
 namespace asapo {
 
 const char kVersion[] = "@VERSION@";
 
-inline void PrintVersion(std::string prefix) {
- std::cout << prefix << ", version " << kVersion << std::endl;
+inline void ExitAfterPrintVersionIfNeeded(std::string prefix,int argc, char* argv[]) {
+    if (argc == 2 && strcmp(argv[1], "-v") == 0) {
+        std::cout << prefix << ", version " << kVersion << std::endl;
+        exit(0);
+    }
 }
 
 }
diff --git a/examples/producer/dummy-data-producer/dummy_data_producer.cpp b/examples/producer/dummy-data-producer/dummy_data_producer.cpp
index c2936de2f232a6060f194e5d1ba2d043a48dc296..80b010f4c242bf0fd14a3906e3e127e3a082c1d2 100644
--- a/examples/producer/dummy-data-producer/dummy_data_producer.cpp
+++ b/examples/producer/dummy-data-producer/dummy_data_producer.cpp
@@ -35,7 +35,7 @@ void PrintCommandArguments(const Args& args) {
 
 
 void ProcessCommandArguments(int argc, char* argv[], Args* args) {
-    asapo::PrintVersion("Dummy Data Producer");
+    asapo::ExitAfterPrintVersionIfNeeded("Dummy Data Producer", argc, argv);
     if (argc != 8) {
         std::cout <<
                   "Usage: " << argv[0] <<
diff --git a/examples/worker/getnext_broker/getnext_broker.cpp b/examples/worker/getnext_broker/getnext_broker.cpp
index 0a08959dc2946e03c5621ee1326873aa9d209c99..84cbe726fd0d444d3ab1c76d14b830eab050767b 100644
--- a/examples/worker/getnext_broker/getnext_broker.cpp
+++ b/examples/worker/getnext_broker/getnext_broker.cpp
@@ -79,7 +79,7 @@ int ReadAllData(const Params& params, uint64_t* duration_ms) {
 }
 
 int main(int argc, char* argv[]) {
-    asapo::PrintVersion("GetNext Broker Example");
+    asapo::ExitAfterPrintVersionIfNeeded("GetNext Broker Example", argc, argv);
     if (argc != 6) {
         std::cout << "Usage: " + std::string{argv[0]} +" <server> <run_name> <nthreads> <token> <timeout ms>" << std::endl;
         exit(EXIT_FAILURE);
diff --git a/examples/worker/process_folder/process_folder.cpp b/examples/worker/process_folder/process_folder.cpp
index 5adb1bc1fa331ad374f0eed169e0ffc4a29b9645..63a6955dd066b4c616e3b054c5aea1551b6dae54 100644
--- a/examples/worker/process_folder/process_folder.cpp
+++ b/examples/worker/process_folder/process_folder.cpp
@@ -84,7 +84,7 @@ void PrintStatistics(const Statistics& statistics) {
 
 
 int main(int argc, char* argv[]) {
-    asapo::PrintVersion("Process Folder Broker Example");
+    asapo::ExitAfterPrintVersionIfNeeded("Process Folder Broker Example", argc, argv);
 
     std::string folder = ProcessCommandArguments(argc, argv);
     auto broker = CreateBroker(folder);
diff --git a/producer/event_monitor_producer/src/main_eventmon.cpp b/producer/event_monitor_producer/src/main_eventmon.cpp
index 3e4d677f7d342ac5a6069454d0ccbdb48c5911ad..4191bfbd4648f0642a825a839fdb33a93156d2ac 100644
--- a/producer/event_monitor_producer/src/main_eventmon.cpp
+++ b/producer/event_monitor_producer/src/main_eventmon.cpp
@@ -74,7 +74,7 @@ void SignalHandler(int signal) {
 
 
 int main (int argc, char* argv[]) {
-    asapo::PrintVersion("ASAPO Event Monitor");
+    asapo::ExitAfterPrintVersionIfNeeded("ASAPO Event Monitor", argc, argv);
 
     auto err = ReadConfigFile(argc, argv);
     if (err) {
@@ -96,7 +96,7 @@ int main (int argc, char* argv[]) {
     auto producer = CreateProducer();
     asapo::EventDetectorFactory factory;
     auto event_detector = factory.CreateEventDetector();
-
+    logger->Info(std::string("starting ASAPO Event Monitor, version ") + asapo::kVersion);
     err = event_detector->StartMonitoring();
     if (err) {
         logger->Error(err->Explain());
diff --git a/receiver/src/main.cpp b/receiver/src/main.cpp
index c0e6af486dfbb2eac2a37dd60862002a62a403e0..72d45a960aeb3ff907b929fcf52c4f581e18d910 100644
--- a/receiver/src/main.cpp
+++ b/receiver/src/main.cpp
@@ -17,7 +17,7 @@ asapo::Error ReadConfigFile(int argc, char* argv[]) {
 }
 
 int main (int argc, char* argv[]) {
-    asapo::PrintVersion("ASAPO Receiver");
+    asapo::ExitAfterPrintVersionIfNeeded("ASAPO Receiver", argc, argv);
 
     auto err = ReadConfigFile(argc, argv);
     const auto& logger = asapo::GetDefaultReceiverLogger();
@@ -35,6 +35,7 @@ int main (int argc, char* argv[]) {
 
     auto* receiver = new asapo::Receiver();
 
+    logger->Info(std::string("starting receiver, version ") + asapo::kVersion);
     logger->Info("listening on " + address);
     receiver->Listen(address, &err);
     if(err) {
diff --git a/receiver/src/request_handler_authorize.cpp b/receiver/src/request_handler_authorize.cpp
index 597584601c01f0646920239b85a55574c2418418..00f932b8270983e447636d5a6071168ea6b96726 100644
--- a/receiver/src/request_handler_authorize.cpp
+++ b/receiver/src/request_handler_authorize.cpp
@@ -48,6 +48,9 @@ Error RequestHandlerAuthorize::Authorize(Request* request, const char* beamtime_
     (err = parser.GetString("Beamline", &beamline_));
     if (err) {
         return ErrorFromServerResponse(err, code);
+    } else {
+        log__->Debug(std::string("authorized connection from ") + request->GetOriginUri() + " beamline: " +
+                     beamline_ + ", beamtime id: " + beamtime_id_);
     }
 
     return nullptr;
diff --git a/receiver/unittests/test_request_handler_authorizer.cpp b/receiver/unittests/test_request_handler_authorizer.cpp
index 3fabc8000510bdcf6a569771144b35a612e29231..f6523f2815639fb68b8c12f85b311904ef18f1fe 100644
--- a/receiver/unittests/test_request_handler_authorizer.cpp
+++ b/receiver/unittests/test_request_handler_authorizer.cpp
@@ -110,8 +110,12 @@ class AuthorizerHandlerTests : public Test {
                                                      HasSubstr(expected_beamtime_id),
                                                      HasSubstr(expected_producer_uri),
                                                      HasSubstr(expected_authorization_server))));
+            } else {
+                EXPECT_CALL(mock_logger, Debug(AllOf(HasSubstr("authorized"),
+                                                     HasSubstr(expected_beamtime_id),
+                                                     HasSubstr(expected_beamline),
+                                                     HasSubstr(expected_producer_uri))));
             }
-
         }