diff --git a/asapo_tools/CMakeLists.txt b/asapo_tools/CMakeLists.txt
index 2a517df18b3ffb1417721dd797003b0fabb53fbf..de647a4f819390df275048a7adcec7a0e3ecbc53 100644
--- a/asapo_tools/CMakeLists.txt
+++ b/asapo_tools/CMakeLists.txt
@@ -16,13 +16,14 @@ IF(WIN32)
 ELSE()
     set (gopath ${GOPATH}:${CMAKE_CURRENT_SOURCE_DIR}:${CMAKE_SOURCE_DIR}/common/go)
     set (exe_name "${TARGET_NAME}")
+#    set (GO_OPTS "GOOS=linux;CGO_ENABLED=0")
 ENDIF()
 
 include(testing_go)
 
 add_custom_target(asapo ALL
     COMMAND  ${CMAKE_COMMAND} -E env GOPATH=${gopath}
-    go build ${GO_OPTS} -o ${exe_name} asapo_tools/main
+        ${GO_OPTS} go build -o ${exe_name} asapo_tools/main
     VERBATIM)
 define_property(TARGET PROPERTY EXENAME
         BRIEF_DOCS <executable name>
diff --git a/authorizer/CMakeLists.txt b/authorizer/CMakeLists.txt
index 1b4b8165a9541757d1087ae9a41b2f4ea205d2b8..a6cd2b3c79b20c30b09bf6af01b206e5999d2276 100644
--- a/authorizer/CMakeLists.txt
+++ b/authorizer/CMakeLists.txt
@@ -20,6 +20,8 @@ ENDIF()
 
 include(testing_go)
 
+configure_file(docker/Dockerfile . COPYONLY)
+
 add_custom_target(asapo-authorizer ALL
     COMMAND  ${CMAKE_COMMAND} -E env GOPATH=${gopath}
     go build ${GO_OPTS} -o ${exe_name} asapo_authorizer/main
diff --git a/authorizer/docker/Dockerfile b/authorizer/docker/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..6b182a10254e736e71c7d8d07cda92800b469ba3
--- /dev/null
+++ b/authorizer/docker/Dockerfile
@@ -0,0 +1,3 @@
+FROM busybox:glibc
+ADD asapo-authorizer /
+CMD ["/asapo-authorizer","-config","/var/lib/authorizer/config.json"]
diff --git a/authorizer/src/asapo_authorizer/main/authorizer.go b/authorizer/src/asapo_authorizer/main/authorizer.go
index 1a0f39f42406a0412735911b9a717d01fba70bd6..0916ddbed565ec670066af8df0720a69e413a414 100644
--- a/authorizer/src/asapo_authorizer/main/authorizer.go
+++ b/authorizer/src/asapo_authorizer/main/authorizer.go
@@ -16,6 +16,8 @@ func PrintUsage() {
 func main() {
 	var fname = flag.String("config", "", "config file path")
 
+	log.SetSoucre("authorizer")
+
 	flag.Parse()
 	if *fname == "" {
 		PrintUsage()
diff --git a/broker/CMakeLists.txt b/broker/CMakeLists.txt
index 49014ff5d141594888f0e713310d1b6ece1942fe..c010ae09f84a4e794ebe0524c29b56e3b20b730a 100644
--- a/broker/CMakeLists.txt
+++ b/broker/CMakeLists.txt
@@ -20,6 +20,8 @@ ENDIF()
 
 include(testing_go)
 
+configure_file(docker/Dockerfile . COPYONLY)
+
 add_custom_target(asapo-broker ALL
     COMMAND  ${CMAKE_COMMAND} -E env GOPATH=${gopath}
     go build ${GO_OPTS} -o ${exe_name} asapo_broker/main
diff --git a/broker/docker/Dockerfile b/broker/docker/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..9efde1c7775936b4f74e9ba858895a6369558188
--- /dev/null
+++ b/broker/docker/Dockerfile
@@ -0,0 +1,3 @@
+FROM busybox:glibc
+ADD asapo-broker /
+CMD ["/asapo-broker","-config","/var/lib/broker/config.json"]
diff --git a/broker/src/asapo_broker/main/broker.go b/broker/src/asapo_broker/main/broker.go
index 30a017728a8aaeede6519cdd6b525e5de47e1f7f..e4b9c6e742c5d1f865c8b3c204aedc438926ed85 100644
--- a/broker/src/asapo_broker/main/broker.go
+++ b/broker/src/asapo_broker/main/broker.go
@@ -21,6 +21,7 @@ func PrintUsage() {
 func main() {
 	var fname = flag.String("config", "", "config file path")
 
+	log.SetSoucre("broker")
 	flag.Parse()
 	if *fname == "" {
 		PrintUsage()
diff --git a/broker/src/asapo_broker/server/get_next_test.go b/broker/src/asapo_broker/server/get_next_test.go
index 268390973765572c78bcc5dd1de4c2b7a7b87f36..72693797db667131bbd22b823e38b6a4b56d4e3c 100644
--- a/broker/src/asapo_broker/server/get_next_test.go
+++ b/broker/src/asapo_broker/server/get_next_test.go
@@ -35,8 +35,15 @@ type request struct {
 	message string
 }
 
-func containsMatcher(substr string) func(str string) bool {
-	return func(str string) bool { return strings.Contains(str, substr) }
+func containsMatcher(substrings ...string) func(str string) bool {
+	return func(str string) bool {
+		for _, substr := range substrings {
+			if !strings.Contains(str, substr) {
+				return false
+			}
+		}
+		return true
+	}
 }
 
 func doRequest(path string) *httptest.ResponseRecorder {
diff --git a/common/go/src/asapo_common/logger/logger.go b/common/go/src/asapo_common/logger/logger.go
index e198cd23d555819c34ddb9da020909e987653bc0..0f026aa18b9e777a1b72089ca32d3685b97cf6f0 100644
--- a/common/go/src/asapo_common/logger/logger.go
+++ b/common/go/src/asapo_common/logger/logger.go
@@ -23,6 +23,7 @@ type Logger interface {
 	Warning(args ...interface{})
 	Error(args ...interface{})
 	SetLevel(level Level)
+	SetSource(source string)
 }
 
 var my_logger Logger = &logRusLogger{}
@@ -51,6 +52,10 @@ func SetLevel(level Level) {
 	my_logger.SetLevel(level)
 }
 
+func SetSoucre(source string ){
+	my_logger.SetSource(source)
+}
+
 func LevelFromString(str string) (Level, error) {
 	switch strings.ToLower(str) {
 	case "debug":
diff --git a/common/go/src/asapo_common/logger/logrus_logger.go b/common/go/src/asapo_common/logger/logrus_logger.go
index 750c37e9c134850ad80caf324283854c3ca0af86..4625f27492f47efe5d14ed1a1032b4810c418572 100644
--- a/common/go/src/asapo_common/logger/logrus_logger.go
+++ b/common/go/src/asapo_common/logger/logrus_logger.go
@@ -6,6 +6,11 @@ import (
 
 type logRusLogger struct {
 	logger_entry *log.Entry
+	source string
+}
+
+func (l *logRusLogger) SetSource(source string) {
+	l.source = source
 }
 
 func (l *logRusLogger) entry() *log.Entry {
@@ -23,7 +28,7 @@ func (l *logRusLogger) entry() *log.Entry {
 	log.SetFormatter(formatter)
 
 	l.logger_entry = log.WithFields(log.Fields{
-		"source": "discovery",
+		"source": l.source,
 	})
 
 	return l.logger_entry
diff --git a/common/go/src/asapo_common/logger/mock_logger.go b/common/go/src/asapo_common/logger/mock_logger.go
index 0e597978bcb3be1739f6beb7eb9620e3d636b9a5..484b86cb0175db0e801cc3e11cf42592ecef123a 100644
--- a/common/go/src/asapo_common/logger/mock_logger.go
+++ b/common/go/src/asapo_common/logger/mock_logger.go
@@ -20,6 +20,11 @@ func UnsetMockLog() {
 	my_logger = &logRusLogger{}
 }
 
+func (l *MockLogger) SetSource(source string) {
+	l.Called(source)
+	return
+}
+
 func (l *MockLogger) Info(args ...interface{}) {
 	l.Called(args...)
 	return
diff --git a/discovery/CMakeLists.txt b/discovery/CMakeLists.txt
index 871e6e93faf61f313071790d6c72d206d756cdf6..2c863597936d4ba34e5dd0434f913989e14908a7 100644
--- a/discovery/CMakeLists.txt
+++ b/discovery/CMakeLists.txt
@@ -20,6 +20,8 @@ ENDIF()
 
 include(testing_go)
 
+configure_file(docker/Dockerfile . COPYONLY)
+
 add_custom_target(${TARGET_NAME} ALL
     COMMAND  ${CMAKE_COMMAND} -E env GOPATH=${gopath}
     go build ${GO_OPTS} -o ${exe_name} asapo_discovery/main
diff --git a/discovery/docker/Dockerfile b/discovery/docker/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..e2e745708cad2b5c28cda18f98230e209aaf306f
--- /dev/null
+++ b/discovery/docker/Dockerfile
@@ -0,0 +1,3 @@
+FROM busybox:glibc
+ADD asapo-discovery /
+CMD ["/asapo-discovery","-config","/var/lib/discovery/config.json"]
diff --git a/discovery/src/asapo_discovery/main/discovery.go b/discovery/src/asapo_discovery/main/discovery.go
index 683b80472cd936661dee73b890952db860be7bcb..d78d64898b6203fe7d4bab24e8303eb2a384187a 100644
--- a/discovery/src/asapo_discovery/main/discovery.go
+++ b/discovery/src/asapo_discovery/main/discovery.go
@@ -29,6 +29,7 @@ func PrintUsage() {
 func main() {
 	var fname = flag.String("config", "", "config file path")
 
+    log.SetSoucre("discovery")
 	flag.Parse()
 	if *fname == "" {
 		PrintUsage()