diff --git a/.gitignore b/.gitignore
index 1e78577332eab730f22156280545fc4f0484928f..005f5fbce704c564ffd17f71971fd02faa6a99e1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -132,3 +132,7 @@ asapo_tools/pkg
 #
 *.rpm
 
+#version files
+
+common/cpp/include/common/version.h
+common/go/src/asapo_common/version/version_lib.go
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 65114f8c551b076b82f027d86194aecb8166e56c..b1159c604495f220217409423392ef2491c4fd8c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -10,6 +10,7 @@ ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
     SET(BUILD_SHARED_LIBS OFF)
 ENDIF(WIN32)
 
+
 #TODO: Better way then GLOBAL PROPERTY
 IF(WIN32)
     find_package(Threads REQUIRED)
@@ -88,3 +89,4 @@ if(BUILD_DOCS)
     include(doxygen)
 endif()
 
+include(prepare_version)
\ No newline at end of file
diff --git a/CMakeModules/prepare_version.cmake b/CMakeModules/prepare_version.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..f0704fcada9cd6576d8e187d6ddb3cd39f852c2a
--- /dev/null
+++ b/CMakeModules/prepare_version.cmake
@@ -0,0 +1,7 @@
+execute_process(COMMAND git describe --tags --dirty OUTPUT_VARIABLE VERSION)
+string(STRIP ${VERSION} VERSION)
+
+string(TIMESTAMP TIMESTAMP "%H:%M:%S %d.%m.%Y UTC" UTC)
+
+configure_file(${PROJECT_SOURCE_DIR}/common/cpp/include/common/version.h.in ${PROJECT_SOURCE_DIR}/common/cpp/include/common/version.h @ONLY)
+configure_file(${PROJECT_SOURCE_DIR}/common/go/src/asapo_common/version/version_lib.go.in ${PROJECT_SOURCE_DIR}/common/go/src/asapo_common/version/version_lib.go @ONLY)
diff --git a/asapo_tools/src/asapo_tools/main/asapo.go b/asapo_tools/src/asapo_tools/main/asapo.go
index e326889315ffd4f4c324a83bc646b79aa09acb92..66d5829ec67bd6b966a938b7940b3119505e9539 100644
--- a/asapo_tools/src/asapo_tools/main/asapo.go
+++ b/asapo_tools/src/asapo_tools/main/asapo.go
@@ -4,7 +4,7 @@ import (
 	"flag"
 	"fmt"
 	"os"
-	"asapo_tools/version"
+	"asapo_common/version"
 	"asapo_tools/cli"
 )
 
@@ -14,7 +14,7 @@ var (
 
 func main() {
 
-	if ret := version.ShowVersion(os.Stdout, "asapo"); ret {
+	if ret := version.ShowVersion(os.Stdout, "ASAPO"); ret {
 		return
 	}
 
diff --git a/asapo_tools/src/asapo_tools/version/version.go b/asapo_tools/src/asapo_tools/version/version.go
deleted file mode 100644
index e2427a17c6038e422fb6c7b102562dd254043f33..0000000000000000000000000000000000000000
--- a/asapo_tools/src/asapo_tools/version/version.go
+++ /dev/null
@@ -1,23 +0,0 @@
-package version
-
-import (
-	"flag"
-	"fmt"
-	"io"
-	"os"
-)
-
-var version, buildTime, gitCommit, shortVersion string
-
-func ShowVersion(w io.Writer, name string) bool {
-	flags := flag.NewFlagSet("version", flag.ExitOnError)
-	flag.Bool("version", false, "Print version information") // to have it in main help
-	flVersion := flags.Bool("version", false, "Print version information")
-	flags.Bool("help", false, "Print usage") // define help flag but ignore it
-	flags.Parse(os.Args[1:])
-	if *flVersion {
-		fmt.Fprintf(w, "%s version %s, build time %s\n", name, version, buildTime)
-		return true
-	}
-	return false
-}
diff --git a/authorizer/src/asapo_authorizer/main/authorizer.go b/authorizer/src/asapo_authorizer/main/authorizer.go
index 0916ddbed565ec670066af8df0720a69e413a414..9f4329909333d6dac5c88966ccbc398497856941 100644
--- a/authorizer/src/asapo_authorizer/main/authorizer.go
+++ b/authorizer/src/asapo_authorizer/main/authorizer.go
@@ -5,6 +5,7 @@ package main
 import (
 	log "asapo_common/logger"
 	"asapo_authorizer/server"
+	"asapo_common/version"
 	"flag"
 	"os"
 )
@@ -16,6 +17,10 @@ func PrintUsage() {
 func main() {
 	var fname = flag.String("config", "", "config file path")
 
+	if ret := version.ShowVersion(os.Stdout, "ASAPO Authorizer"); ret {
+		return
+	}
+
 	log.SetSoucre("authorizer")
 
 	flag.Parse()
diff --git a/authorizer/src/asapo_authorizer/server/server_nottested.go b/authorizer/src/asapo_authorizer/server/server_nottested.go
index 6ad0c98f35e819a7c6d4f491dff4829702fcc5d1..54c2fb20a31cc7b455a9f6a0b4247a0184192ebc 100644
--- a/authorizer/src/asapo_authorizer/server/server_nottested.go
+++ b/authorizer/src/asapo_authorizer/server/server_nottested.go
@@ -5,6 +5,7 @@ package server
 import (
 	log "asapo_common/logger"
 	"asapo_common/utils"
+	"asapo_common/version"
 	"errors"
 	"net/http"
 	"strconv"
@@ -12,6 +13,7 @@ import (
 
 func Start() {
 	mux := utils.NewRouter(listRoutes)
+	log.Info("Starting ASAPO Authorizer, version " + version.GetVersion())
 	log.Info("Listening on port: " + strconv.Itoa(settings.Port))
 	log.Fatal(http.ListenAndServe(":"+strconv.Itoa(settings.Port), http.HandlerFunc(mux.ServeHTTP)))
 }
diff --git a/broker/src/asapo_broker/main/broker.go b/broker/src/asapo_broker/main/broker.go
index e4b9c6e742c5d1f865c8b3c204aedc438926ed85..f9a41942ccc4a60893202d9e319ed066c73b6aca 100644
--- a/broker/src/asapo_broker/main/broker.go
+++ b/broker/src/asapo_broker/main/broker.go
@@ -6,6 +6,7 @@ import (
 	"asapo_broker/database"
 	"asapo_broker/server"
 	log "asapo_common/logger"
+	"asapo_common/version"
 	"flag"
 	"os"
 )
@@ -21,6 +22,10 @@ func PrintUsage() {
 func main() {
 	var fname = flag.String("config", "", "config file path")
 
+	if ret := version.ShowVersion(os.Stdout, "ASAPO Broker"); ret {
+		return
+	}
+
 	log.SetSoucre("broker")
 	flag.Parse()
 	if *fname == "" {
diff --git a/broker/src/asapo_broker/server/server_nottested.go b/broker/src/asapo_broker/server/server_nottested.go
index c9febf74b9fe37065d7f49387c912f67cf5f786e..943277aa75da290758fc6124952a806c8a18e4b1 100644
--- a/broker/src/asapo_broker/server/server_nottested.go
+++ b/broker/src/asapo_broker/server/server_nottested.go
@@ -5,6 +5,7 @@ package server
 import (
 	log "asapo_common/logger"
 	"asapo_common/utils"
+	"asapo_common/version"
 	"errors"
 	"net/http"
 	"strconv"
@@ -19,6 +20,7 @@ func StartStatistics() {
 func Start() {
 	StartStatistics()
 	mux := utils.NewRouter(listRoutes)
+	log.Info("Starting Asapo Broker, version " + version.GetVersion())
 	log.Info("Listening on port: " + strconv.Itoa(settings.Port))
 	log.Fatal(http.ListenAndServe(":"+strconv.Itoa(settings.Port), http.HandlerFunc(mux.ServeHTTP)))
 }
diff --git a/common/cpp/CMakeLists.txt b/common/cpp/CMakeLists.txt
index 6f1350d101ddf101d72672d30c0a3b7ffa0e2f0b..05ba02232fe27e9483cb7b705636d5ab3418f3de 100644
--- a/common/cpp/CMakeLists.txt
+++ b/common/cpp/CMakeLists.txt
@@ -16,7 +16,8 @@ if(BUILD_MONGODB_CLIENTLIB)
 endif()
 
 install(DIRECTORY ${ASAPO_CXX_COMMON_INCLUDE_DIR}/common
-        DESTINATION ${CMAKE_INSTALL_PREFIX}/include )
+        DESTINATION ${CMAKE_INSTALL_PREFIX}/include
+        PATTERN "*.h.in" EXCLUDE)
 
 install(DIRECTORY ${ASAPO_CXX_COMMON_INCLUDE_DIR}/logger
         DESTINATION ${CMAKE_INSTALL_PREFIX}/include )
diff --git a/common/cpp/include/common/version.h.in b/common/cpp/include/common/version.h.in
new file mode 100644
index 0000000000000000000000000000000000000000..1ca92fd870aeecf79f17f29907c7b3d452cee070
--- /dev/null
+++ b/common/cpp/include/common/version.h.in
@@ -0,0 +1,21 @@
+#ifndef ASAPO_VERSION_H
+#define ASAPO_VERSION_H
+
+#include <iostream>
+#include "string.h"
+
+namespace asapo {
+
+const char kVersion[] = "@VERSION@";
+
+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);
+    }
+}
+
+}
+
+
+#endif //ASAPO_VERSION_H
diff --git a/common/cpp/src/system_io/system_io.h b/common/cpp/src/system_io/system_io.h
index 00ff32d82a051055fee93afb1d0832c4df7a5439..48c614927db890d3ece91b0b2ad97b7e4a7b9468 100644
--- a/common/cpp/src/system_io/system_io.h
+++ b/common/cpp/src/system_io/system_io.h
@@ -15,6 +15,11 @@ typedef SSIZE_T ssize_t;
 #include "../../../../../../../../usr/include/netinet/in.h"
 #endif
 
+#ifdef __APPLE__
+#	define MSG_NOSIGNAL 0
+#endif
+
+
 namespace asapo {
 
 class SystemIO final : public IO {
diff --git a/common/go/src/asapo_common/version/version.go b/common/go/src/asapo_common/version/version.go
new file mode 100644
index 0000000000000000000000000000000000000000..d4674f37bddf4e84eaaec6cde2686ed6e68f306a
--- /dev/null
+++ b/common/go/src/asapo_common/version/version.go
@@ -0,0 +1,24 @@
+package version
+
+import (
+	"flag"
+	"fmt"
+	"io"
+)
+
+var version string
+
+func GetVersion() string {
+    return version
+}
+
+func ShowVersion(w io.Writer, name string) bool {
+
+	flVersion := flag.Bool("v", false, "Print version information")
+	flag.Parse()
+	if *flVersion {
+		fmt.Fprintf(w, "%s, version %s\n", name, version)
+		return true
+	}
+	return false
+}
diff --git a/asapo_tools/src/asapo_tools/version/version_lib.go.in b/common/go/src/asapo_common/version/version_lib.go.in
similarity index 65%
rename from asapo_tools/src/asapo_tools/version/version_lib.go.in
rename to common/go/src/asapo_common/version/version_lib.go.in
index 3fe1989dbbc62d3515284e43bd2c3e415e874471..2dcfeaeeeccfd566d7bbf1bb69bacead466ab5e1 100644
--- a/asapo_tools/src/asapo_tools/version/version_lib.go.in
+++ b/common/go/src/asapo_common/version/version_lib.go.in
@@ -3,8 +3,5 @@ package version
 // Default build-time variable for library-import.
 // This file is overridden on build with build-time informations.
 func init(){
-	gitCommit = "@VERSION_SHA1@"
 	version   = "@VERSION@"
-	shortVersion   = "@VERSION_SHORT@"
-	buildTime = "@TIMESTAMP@"
 }
diff --git a/deploy/nomad_jobs/asapo-brokers.nmd.in b/deploy/nomad_jobs/asapo-brokers.nmd.in
index e601184374f7d8a1085bfdc7800cddfc2a1c3d0d..4c5a3040dc85a96f250cc2c9c35306421ae2f51b 100644
--- a/deploy/nomad_jobs/asapo-brokers.nmd.in
+++ b/deploy/nomad_jobs/asapo-brokers.nmd.in
@@ -24,7 +24,7 @@ job "asapo-brokers" {
       config {
         network_mode = "host"
         dns_servers = ["127.0.0.1"]
-        image = "yakser/asapo-broker:feature_ha"
+        image = "yakser/asapo-broker:develop"
 	    force_pull = true
         volumes = ["local/config.json:/var/lib/broker/config.json"]
         logging {
diff --git a/deploy/nomad_jobs/asapo-receivers.nmd.in b/deploy/nomad_jobs/asapo-receivers.nmd.in
index 8d58581771321d3fe839dcc85f417ec0800e0378..4159d9791a33a9d9b7aa89997bb4606aeed315e1 100644
--- a/deploy/nomad_jobs/asapo-receivers.nmd.in
+++ b/deploy/nomad_jobs/asapo-receivers.nmd.in
@@ -24,7 +24,7 @@ job "asapo-receivers" {
       config {
         network_mode = "host"
         dns_servers = ["127.0.0.1"]
-        image = "yakser/asapo-receiver:feature_ha"
+        image = "yakser/asapo-receiver:develop"
 	    force_pull = true
         volumes = ["local/config.json:/var/lib/receiver/config.json",
                    "/bldocuments/support/asapo/data:/var/lib/receiver/data"]
diff --git a/deploy/nomad_jobs/asapo-services.nmd.in b/deploy/nomad_jobs/asapo-services.nmd.in
index 3e31d425cfd06563a69c4f73a6e64805dbef9f52..3be75045c272db6d04878040082d464f557d4581 100644
--- a/deploy/nomad_jobs/asapo-services.nmd.in
+++ b/deploy/nomad_jobs/asapo-services.nmd.in
@@ -12,7 +12,7 @@ job "asapo-services" {
       config {
         network_mode = "host"
         dns_servers = ["127.0.0.1"]
-        image = "yakser/asapo-authorizer:feature_ha"
+        image = "yakser/asapo-authorizer:develop"
 	    force_pull = true
         volumes = ["local/config.json:/var/lib/authorizer/config.json",
                    "/bldocuments/support/asapo/beamtime_beamline_mapping.txt:/var/lib/authorizer/beamtime_beamline_mapping.txt",
@@ -71,7 +71,7 @@ job "asapo-services" {
       config {
         network_mode = "host"
         dns_servers = ["127.0.0.1"]
-        image = "yakser/asapo-discovery:feature_ha"
+        image = "yakser/asapo-discovery:develop"
 	    force_pull = true
         volumes = ["local/config.json:/var/lib/discovery/config.json"]
         logging {
diff --git a/discovery/src/asapo_discovery/main/discovery.go b/discovery/src/asapo_discovery/main/discovery.go
index d78d64898b6203fe7d4bab24e8303eb2a384187a..e4bd21e4a37f6a11be84fa447dfa9d97ea6b3993 100644
--- a/discovery/src/asapo_discovery/main/discovery.go
+++ b/discovery/src/asapo_discovery/main/discovery.go
@@ -5,6 +5,7 @@ package main
 import (
 	"flag"
 	log "asapo_common/logger"
+    "asapo_common/version"
 	"asapo_discovery/server"
 	"os"
 	"asapo_discovery/request_handler"
@@ -29,6 +30,11 @@ func PrintUsage() {
 func main() {
 	var fname = flag.String("config", "", "config file path")
 
+	if ret := version.ShowVersion(os.Stdout, "ASAPO Discovery"); ret {
+		return
+	}
+
+
     log.SetSoucre("discovery")
 	flag.Parse()
 	if *fname == "" {
diff --git a/discovery/src/asapo_discovery/server/server_nottested.go b/discovery/src/asapo_discovery/server/server_nottested.go
index 3b98cf5ea9b77caef8853d806fa5a7d40539198a..091db8e202b96c25b357139a147c236b1a3a3493 100644
--- a/discovery/src/asapo_discovery/server/server_nottested.go
+++ b/discovery/src/asapo_discovery/server/server_nottested.go
@@ -5,12 +5,14 @@ package server
 import (
 	log "asapo_common/logger"
 	"asapo_common/utils"
+    "asapo_common/version"
 	"net/http"
 	"strconv"
 )
 
 func Start() {
 	mux := utils.NewRouter(listRoutes)
+	log.Info("Starting ASAPO Discovery, version " + version.GetVersion())
 	log.Info("Listening on port: " + strconv.Itoa(settings.Port))
 	log.Fatal(http.ListenAndServe(":"+strconv.Itoa(settings.Port), http.HandlerFunc(mux.ServeHTTP)))
 }
diff --git a/examples/producer/dummy-data-producer/dummy_data_producer.cpp b/examples/producer/dummy-data-producer/dummy_data_producer.cpp
index aec527a91d55bdb13f0d55e3f02b604e891fed3e..80b010f4c242bf0fd14a3906e3e127e3a082c1d2 100644
--- a/examples/producer/dummy-data-producer/dummy_data_producer.cpp
+++ b/examples/producer/dummy-data-producer/dummy_data_producer.cpp
@@ -35,6 +35,7 @@ void PrintCommandArguments(const Args& args) {
 
 
 void ProcessCommandArguments(int argc, char* argv[], Args* args) {
+    asapo::ExitAfterPrintVersionIfNeeded("Dummy Data Producer", argc, argv);
     if (argc != 8) {
         std::cout <<
                   "Usage: " << argv[0] <<
diff --git a/examples/worker/getnext_broker/check_linux.sh b/examples/worker/getnext_broker/check_linux.sh
index ed90a1acba61ea67c9c6034145cf38b10fee0ca5..04ee45752f3f75bc95434575d6a680f8cb1346f9 100644
--- a/examples/worker/getnext_broker/check_linux.sh
+++ b/examples/worker/getnext_broker/check_linux.sh
@@ -24,6 +24,8 @@ do
 	echo 'db.data.insert({"_id":'$i',"size":100,"name":"'$i'","lastchange":1})' | mongo ${database_name}
 done
 
+sleep 1
+
 $@ 127.0.0.1:8400 $database_name 2 $token_test_run 1000 | grep "Processed 3 file(s)"
 
 
diff --git a/examples/worker/getnext_broker/getnext_broker.cpp b/examples/worker/getnext_broker/getnext_broker.cpp
index 51484cf7f6b8cff4b4516c21f2d912423fc263bd..84cbe726fd0d444d3ab1c76d14b830eab050767b 100644
--- a/examples/worker/getnext_broker/getnext_broker.cpp
+++ b/examples/worker/getnext_broker/getnext_broker.cpp
@@ -79,6 +79,7 @@ int ReadAllData(const Params& params, uint64_t* duration_ms) {
 }
 
 int main(int argc, char* argv[]) {
+    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 2e8f7da92f92f6410573c31c22a0f9787a074b1f..63a6955dd066b4c616e3b054c5aea1551b6dae54 100644
--- a/examples/worker/process_folder/process_folder.cpp
+++ b/examples/worker/process_folder/process_folder.cpp
@@ -8,6 +8,7 @@
 
 #include "asapo_worker.h"
 
+
 using std::chrono::high_resolution_clock;
 using asapo::Error;
 
@@ -83,6 +84,8 @@ void PrintStatistics(const Statistics& statistics) {
 
 
 int main(int argc, char* argv[]) {
+    asapo::ExitAfterPrintVersionIfNeeded("Process Folder Broker Example", argc, argv);
+
     std::string folder = ProcessCommandArguments(argc, argv);
     auto broker = CreateBroker(folder);
 
diff --git a/producer/api/include/asapo_producer.h b/producer/api/include/asapo_producer.h
index 84309f32bc72456d26342c0d50b7798a9a7a46e9..1d9ea25d79275075942ec2ba0184be24d6335691 100644
--- a/producer/api/include/asapo_producer.h
+++ b/producer/api/include/asapo_producer.h
@@ -2,6 +2,8 @@
 #define ASAPO_ASAPO_PRODUCER_H
 
 #include "common/io_error.h"
+#include "common/version.h"
+
 #include "producer/producer.h"
 
 
diff --git a/producer/event_monitor_producer/CMakeLists.txt b/producer/event_monitor_producer/CMakeLists.txt
index fb44c774f3654b14d4dda1d2b7da2c14c966f7a0..cebdbdb98a1791deb97476b9d0d3e59fb8e11da7 100644
--- a/producer/event_monitor_producer/CMakeLists.txt
+++ b/producer/event_monitor_producer/CMakeLists.txt
@@ -5,8 +5,9 @@ set(SOURCE_FILES
         src/event_detector_factory.cpp
         src/folder_event_detector.cpp
 )
-
-IF(WIN32)
+IF (APPLE)
+    #do nothing
+ELSEIF(WIN32)
     set(SOURCE_FILES ${SOURCE_FILES} src/system_folder_watch_windows.cpp
             src/single_folder_watch_windows.cpp
             src/watch_io.cpp
@@ -15,7 +16,7 @@ IF(WIN32)
             )
 ELSEIF(UNIX)
     set(SOURCE_FILES ${SOURCE_FILES} src/system_folder_watch_linux.cpp src/inotify_event.cpp src/inotify_linux.cpp)
-ENDIF(WIN32)
+ENDIF(APPLE)
 
 
 
@@ -55,13 +56,14 @@ set(TEST_SOURCE_FILES
         unittests/test_event_detector_factory.cpp
         unittests/test_folder_event_detector.cpp
    )
-
-IF(UNIX)
+IF (APPLE)
+    #do nothing
+ELSEIF(UNIX)
 set(TEST_SOURCE_FILES ${TEST_SOURCE_FILES} unittests/test_system_folder_watch_linux.cpp)
 ELSE()
 set(TEST_SOURCE_FILES ${TEST_SOURCE_FILES} unittests/test_system_folder_watch_windows.cpp
         unittests/test_single_folder_watch_windows.cpp)
-ENDIF(UNIX)
+ENDIF(APPLE)
 
 
 set(TEST_LIBRARIES "${TARGET_NAME}")
diff --git a/producer/event_monitor_producer/src/main_eventmon.cpp b/producer/event_monitor_producer/src/main_eventmon.cpp
index 18d23aa95bc38c0a6935f3e3f55804a10c36179e..4191bfbd4648f0642a825a839fdb33a93156d2ac 100644
--- a/producer/event_monitor_producer/src/main_eventmon.cpp
+++ b/producer/event_monitor_producer/src/main_eventmon.cpp
@@ -15,6 +15,7 @@
 #include "preprocessor/definitions.h"
 
 #include "io/io_factory.h"
+#include "common/version.h"
 
 using asapo::Producer;
 using asapo::EventMonConfigFactory;
@@ -73,6 +74,8 @@ void SignalHandler(int signal) {
 
 
 int main (int argc, char* argv[]) {
+    asapo::ExitAfterPrintVersionIfNeeded("ASAPO Event Monitor", argc, argv);
+
     auto err = ReadConfigFile(argc, argv);
     if (err) {
         std::cerr << "cannot read config file: " << err->Explain() << std::endl;
@@ -93,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/producer/event_monitor_producer/src/system_folder_watch.h b/producer/event_monitor_producer/src/system_folder_watch.h
index e81687f5cccaeb10620a61514c10d8af734385af..2dcf28a595c7882bb48d80f09a69c677de10a12e 100644
--- a/producer/event_monitor_producer/src/system_folder_watch.h
+++ b/producer/event_monitor_producer/src/system_folder_watch.h
@@ -5,9 +5,14 @@
 #include "system_folder_watch_windows.h"
 #endif
 
-#if defined(__linux__) || defined (__APPLE__)
+#if defined(__linux__)
 #include "system_folder_watch_linux.h"
 #endif
 
 
+#if defined(__APPLE__)
+#include "system_folder_watch_macos_dummy.h"
+#endif
+
+
 #endif //ASAPO_SYSTEM_FODLER_WATCH_H
diff --git a/producer/event_monitor_producer/src/system_folder_watch_macos_dummy.h b/producer/event_monitor_producer/src/system_folder_watch_macos_dummy.h
new file mode 100644
index 0000000000000000000000000000000000000000..d644b7c9c6ab8474029f4ec6cd27aee748ea012d
--- /dev/null
+++ b/producer/event_monitor_producer/src/system_folder_watch_macos_dummy.h
@@ -0,0 +1,24 @@
+#ifndef ASAPO_SYSTEM_FOLDER_WATCH_MACOS_DUMMY_H
+#define ASAPO_SYSTEM_FOLDER_WATCH_MACOS_DUMMY_H
+
+#include "common.h"
+#include "preprocessor/definitions.h"
+
+
+// dummy file to make it compile on macos
+
+
+namespace asapo {
+
+class SystemFolderWatch {
+  public:
+    VIRTUAL Error StartFolderMonitor(const std::string& root_folder, const std::vector<std::string>& monitored_folders) {
+        return nullptr;
+    };
+    VIRTUAL FilesToSend GetFileList(Error* err) {
+        return {};
+    };
+};
+
+}
+#endif //ASAPO_SYSTEM_FOLDER_WATCH_MACOS_DUMMY_H
diff --git a/receiver/src/main.cpp b/receiver/src/main.cpp
index f40dc1e2f606b2c2063398f8cdb06ebf0da7006f..72d45a960aeb3ff907b929fcf52c4f581e18d910 100644
--- a/receiver/src/main.cpp
+++ b/receiver/src/main.cpp
@@ -5,6 +5,7 @@
 #include "receiver_config.h"
 
 #include "receiver_logger.h"
+#include "common/version.h"
 
 asapo::Error ReadConfigFile(int argc, char* argv[]) {
     if (argc != 2) {
@@ -16,6 +17,7 @@ asapo::Error ReadConfigFile(int argc, char* argv[]) {
 }
 
 int main (int argc, char* argv[]) {
+    asapo::ExitAfterPrintVersionIfNeeded("ASAPO Receiver", argc, argv);
 
     auto err = ReadConfigFile(argc, argv);
     const auto& logger = asapo::GetDefaultReceiverLogger();
@@ -33,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.cpp b/receiver/unittests/test_request.cpp
index c0bf0497cf8c31a45a468a2dc70f59ff6fb978cb..8224ea20743a2d250c2c711a09171ffb96a4bbd4 100644
--- a/receiver/unittests/test_request.cpp
+++ b/receiver/unittests/test_request.cpp
@@ -162,8 +162,7 @@ TEST_F(RequestTests, HandleProcessesRequests) {
 
 TEST_F(RequestTests, DataIsNullAtInit) {
     auto& data = request->GetData();
-
-    ASSERT_THAT(data, Eq(nullptr));
+    ASSERT_THAT(data.get(), Eq(nullptr));
 }
 
 TEST_F(RequestTests, GetDataIsNotNullptr) {
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))));
             }
-
         }
 
 
diff --git a/tests/automatic/bug_fixes/producer_send_after_restart/check_windows.bat b/tests/automatic/bug_fixes/producer_send_after_restart/check_windows.bat
index 162097f75524e5e86f98dfd5296e7eea57c08362..05389ce825258b4ef30726fa9e0bbc6b147e255f 100644
--- a/tests/automatic/bug_fixes/producer_send_after_restart/check_windows.bat
+++ b/tests/automatic/bug_fixes/producer_send_after_restart/check_windows.bat
@@ -41,6 +41,8 @@ c:\opt\consul\nomad stop receiver
 c:\opt\consul\nomad run receiver.nmd
 
 ping 1.0.0.0 -n 3 -w 100 > nul
+ping 1.0.0.0 -n 3 -w 100 > nul
+ping 1.0.0.0 -n 3 -w 100 > nul
 
 
 echo hello > c:\tmp\asapo\test_in\test1\file3
diff --git a/tests/manual/tests_via_nomad/asapo-test_dummy_producer.nomad b/tests/manual/tests_via_nomad/asapo-test_dummy_producer.nomad
index 26a71f6fa974bfa8d180b5d79b829d003c8dca60..2a4f017ee69708a5a50ff91daf1c86f01058fce9 100644
--- a/tests/manual/tests_via_nomad/asapo-test_dummy_producer.nomad
+++ b/tests/manual/tests_via_nomad/asapo-test_dummy_producer.nomad
@@ -90,92 +90,92 @@ job "asapo-test" {
 
   }
   #linux
-}
 
+  group "worker-linux1" {
+
+    constraint {
+      attribute = "${attr.kernel.name}"
+      value = "linux"
+    }
 
-group "worker-linux1" {
+    #    constraint {
+    #      attribute = "${meta.location}"
+    #      operator = "!="
+    #      value = "petra3"
+    #    }
 
-  constraint {
-    attribute = "${attr.kernel.name}"
-    value = "linux"
-  }
+    count = 1
 
-  #    constraint {
-  #      attribute = "${meta.location}"
-  #      operator = "!="
-  #      value = "petra3"
-  #    }
-
-  count = 1
-
-  task "worker-linux" {
-    driver = "raw_exec"
-
-    config {
-      command = "local/getnext_broker"
-      args = [
-        "psana002:8400",
-        "asapo_test1",
-        "16",
-        "oTsKsj8i6WcW_gVzeIFvZCtSfMErjDELJEyAI23n7Ik=",
-        "30000"]
-    }
+    task "worker-linux" {
+      driver = "raw_exec"
 
-    resources {
-      cpu = 5000
-      memory = 128
-      network {
-        mbits = 10000
+      config {
+        command = "local/getnext_broker"
+        args = [
+          "psana002:8400",
+          "asapo_test1",
+          "16",
+          "oTsKsj8i6WcW_gVzeIFvZCtSfMErjDELJEyAI23n7Ik=",
+          "30000"]
       }
-    }
 
-    artifact {
-      source = "http://nims.desy.de/extra/asapo/getnext_broker"
+      resources {
+        cpu = 5000
+        memory = 128
+        network {
+          mbits = 10000
+        }
+      }
+
+      artifact {
+        source = "http://nims.desy.de/extra/asapo/getnext_broker"
+      }
     }
+
   }
+  # worker-linux1
 
-}
-# worker-linux1
 
+  group "worker-linux2" {
+
+    constraint {
+      attribute = "${attr.kernel.name}"
+      value = "linux"
+    }
 
-group "worker-linux2" {
+    #    constraint {
+    #      attribute = "${meta.location}"
+    #      operator = "!="
+    #      value = "petra3"
+    #    }
 
-  constraint {
-    attribute = "${attr.kernel.name}"
-    value = "linux"
-  }
+    count = 1
 
-  #    constraint {
-  #      attribute = "${meta.location}"
-  #      operator = "!="
-  #      value = "petra3"
-  #    }
-
-  count = 1
-
-  task "worker-linux" {
-    driver = "raw_exec"
-
-    config {
-      command = "local/getnext_broker"
-      args = [
-        "psana002:8400",
-        "asapo_test2",
-        "16",
-        "yzgAcLmijSLWIm8dBiGNCbc0i42u5HSm-zR6FRqo__Y=",
-        "30000"]
-    }
-    resources {
-      cpu = 5000
-      memory = 128
-      network {
-        mbits = 10000
+    task "worker-linux" {
+      driver = "raw_exec"
+
+      config {
+        command = "local/getnext_broker"
+        args = [
+          "psana002:8400",
+          "asapo_test2",
+          "16",
+          "yzgAcLmijSLWIm8dBiGNCbc0i42u5HSm-zR6FRqo__Y=",
+          "30000"]
+      }
+      resources {
+        cpu = 5000
+        memory = 128
+        network {
+          mbits = 10000
+        }
       }
-    }
 
-    artifact {
-      source = "http://nims.desy.de/extra/asapo/getnext_broker"
+      artifact {
+        source = "http://nims.desy.de/extra/asapo/getnext_broker"
+      }
     }
+
   }
 
 }
diff --git a/tests/manual/tests_via_nomad/asapo-test_filegen_filemon.nomad b/tests/manual/tests_via_nomad/asapo-test_filegen_filemon.nomad
index 6ea2313dc6130d8462d884828da7454757ab72c8..00dedc361778932f6023a90bac315cfc7e7f9a9a 100644
--- a/tests/manual/tests_via_nomad/asapo-test_filegen_filemon.nomad
+++ b/tests/manual/tests_via_nomad/asapo-test_filegen_filemon.nomad
@@ -61,7 +61,7 @@ job "asapo-test" {
           "10M",
           "10000",
           "120",
-          "/tmp/asapo/test_in/test_folder/file_lin"]
+          "/run/user/data/file_lin"]
       }
 
       artifact {
diff --git a/tests/manual/tests_via_nomad/asapo-test_filemon_producer_toreceiver.nomad b/tests/manual/tests_via_nomad/asapo-test_filemon_producer_toreceiver.nomad
index fcde0f3442f59396c0bd793f89dec6ac922f8d1d..b4356226dc48cf81b8ef4711adf60d52be010def 100644
--- a/tests/manual/tests_via_nomad/asapo-test_filemon_producer_toreceiver.nomad
+++ b/tests/manual/tests_via_nomad/asapo-test_filemon_producer_toreceiver.nomad
@@ -92,8 +92,8 @@ job "asapo-filemon-producer" {
  "Mode":"tcp",
  "NThreads":8,
  "LogLevel":"debug",
- "RootMonitoredFolder":"/tmp/asapo/test_in",
- "MonitoredSubFolders":["test_folder"],
+ "RootMonitoredFolder":"/run/user",
+ "MonitoredSubFolders":["data"],
  "IgnoreExtentions":["tmp"],
  "RemoveAfterSend":true
 }
diff --git a/worker/api/cpp/include/asapo_worker.h b/worker/api/cpp/include/asapo_worker.h
index d07b021b3fa39687022e3a4514613fa31f538636..f00cdaeaf2b2245249a649fbe1e6d125db6e0fbb 100644
--- a/worker/api/cpp/include/asapo_worker.h
+++ b/worker/api/cpp/include/asapo_worker.h
@@ -2,5 +2,6 @@
 #define ASAPO_ASAPO_WORKER_H
 
 #include "worker/data_broker.h"
+#include "common/version.h"
 
 #endif //ASAPO_ASAPO_WORKER_H