diff --git a/deploy/asapo_helm_chart/asapo/configs/asapo-receiver.json b/deploy/asapo_helm_chart/asapo/configs/asapo-receiver.json
index 990fe7465ecb306a6da25b76e7f57474456ccc3f..4e13a308baf6e4a731e66ac3dc7f5a82128f42b6 100644
--- a/deploy/asapo_helm_chart/asapo/configs/asapo-receiver.json
+++ b/deploy/asapo_helm_chart/asapo/configs/asapo-receiver.json
@@ -1,5 +1,4 @@
 {
-  "AdvertiseIP": "auto",
   "PerformanceDbServer": "{{ .Chart.Name }}-influxdb:{{ .Values.influxdb.influxdb.service.port }}",
   "PerformanceDbName": "asapo_receivers",
   "DatabaseServer": "asapo-mongodb:{{ .Values.ownServices.mongodb.port }}",
@@ -7,7 +6,9 @@
   "AuthorizationServer": "asapo-authorizer:{{ .Values.ownServices.authorizer.port }}",
   "AuthorizationInterval": 10000,
   "ListenPort": {{ .Values.ownServices.receiver.port }},
+  "AdvertiseIP": "auto",
   "DataServer": {
+    "AdvertiseURI": "auto",
     "NThreads": {{ .Values.ownServices.receiver.dataServer.nThreads }},
     "ListenPort": {{ .Values.ownServices.receiver.dataServer.port }}
   },
diff --git a/deploy/asapo_helm_chart/asapo/templates/receiver-deployment.yaml b/deploy/asapo_helm_chart/asapo/templates/receiver-deployment.yaml
index bcf8c2e10b4d3b619576a8d3057c6879e84c21b3..144feeaf716a103185f46ca85274e28384463fd6 100644
--- a/deploy/asapo_helm_chart/asapo/templates/receiver-deployment.yaml
+++ b/deploy/asapo_helm_chart/asapo/templates/receiver-deployment.yaml
@@ -1,3 +1,15 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: config-script
+data:
+  entrypoint.sh: |-
+    #!/bin/bash
+    export TOKEN=`cat /var/run/secrets/kubernetes.io/serviceaccount/token`
+    export NODE_PORT=`curl https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_SERVICE_PORT/api/v1/namespaces/{{ .Release.Namespace }}/services/asapo-receiver-dataserver --insecure --header "Authorization: Bearer $TOKEN" --silent | jq .spec.ports[0].nodePort`
+    jq ".DataServer.AdvertiseURI = \"$NODE_IP:$NODE_PORT\"" /etc/receiver/init/asapo-receiver.json > /etc/receiver/asapo-receiver.json
+---
+
 apiVersion: apps/v1
 kind: Deployment
 metadata:
@@ -18,7 +30,13 @@ spec:
         checksum/fluentd-config: {{ .Files.Get "configs/asapo-fluentd.conf" | sha256sum  }}
     spec:
       volumes:
+        - name: config-script
+          configMap:
+            defaultMode: 0700
+            name: config-script
         - name: asapo-receiver-config
+          emptyDir: {}
+        - name: asapo-receiver-config-init
           configMap:
             name: asapo-receiver-config
         - name: shared-volume-offline
@@ -28,6 +46,25 @@ spec:
           persistentVolumeClaim:
             claimName: asapo-online-pv
         {{- include "asapo.fluentd.volumes" .Values.ownServices.receiver | indent 8 }}
+      initContainers:
+        - name: prepare-config
+          image: yakser/alpine_curl_jq
+          command: ['/bin/entrypoint.sh']
+          env:
+            - name: NODE_IP
+              valueFrom:
+                fieldRef:
+                  fieldPath: status.hostIP
+          volumeMounts:
+            - mountPath: "/etc/receiver"
+              name: asapo-receiver-config
+            - mountPath: "/etc/receiver/init"
+              name: asapo-receiver-config-init
+            - mountPath: /bin/entrypoint.sh
+              name: config-script
+              readOnly: true
+              subPath: entrypoint.sh
+
       containers:
         - name: asapo-receiver
           image: "yakser/asapo-receiver-dev:{{ .Values.common.asapoVersionTag }}"
@@ -45,4 +82,5 @@ spec:
               name: shared-volume-offline
             - mountPath: {{ .Values.common.onlineDir }}
               name: shared-volume-online
+
       {{- include "asapo.fluentd.container" . | indent 8 }}
\ No newline at end of file
diff --git a/deploy/asapo_helm_chart/asapo/templates/roles.yaml b/deploy/asapo_helm_chart/asapo/templates/roles.yaml
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e412266d9c9c20f74bf7dd1cbe84d139fd3e3f5f 100644
--- a/deploy/asapo_helm_chart/asapo/templates/roles.yaml
+++ b/deploy/asapo_helm_chart/asapo/templates/roles.yaml
@@ -0,0 +1,26 @@
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+  creationTimestamp: null
+  name: role
+rules:
+  - apiGroups:
+      - ""
+    resources:
+      - services
+    verbs:
+      - get
+      - list
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+  creationTimestamp: null
+  name: role-bind
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: Role
+  name: role
+subjects:
+  - kind: ServiceAccount
+    name: default
diff --git a/deploy/asapo_helm_chart/asapo/values.yaml b/deploy/asapo_helm_chart/asapo/values.yaml
index 8e6d175642f594a43d283f1691481987a0b10a1b..1729e975aac926df7276ae560030b349e7da1c52 100644
--- a/deploy/asapo_helm_chart/asapo/values.yaml
+++ b/deploy/asapo_helm_chart/asapo/values.yaml
@@ -30,7 +30,7 @@ ownServices:
       nThreads: 1
       _exposeServiceExtrernally: true
     dataCache:
-      enable: false
+      enable: true
       sizeGb: 1
     receiveToDiskThresholdMB: 200
   fileTransfer:
diff --git a/deploy/asapo_services/scripts/receiver.json.tpl b/deploy/asapo_services/scripts/receiver.json.tpl
index ace0671e86648b9ad8e2f3a3efc00cafa72c949a..a5f8192358812e3af2b281e48db0f2cdef0becb8 100644
--- a/deploy/asapo_services/scripts/receiver.json.tpl
+++ b/deploy/asapo_services/scripts/receiver.json.tpl
@@ -1,5 +1,4 @@
 {
-  "AdvertiseIP": "{{ if or (env "meta.ib_address") "none" | regexMatch "none" }}{{ env "NOMAD_IP_recv" }}{{ else }}{{ env "meta.ib_address" }}{{ end }}",
   "PerformanceDbServer":"localhost:8400/influxdb",
   "PerformanceDbName": "asapo_receivers",
   "DatabaseServer":"auto",
@@ -8,6 +7,7 @@
   "AuthorizationInterval": 10000,
   "ListenPort": {{ env "NOMAD_PORT_recv" }},
   "DataServer": {
+    "AdvertiseURI": "{{ if or (env "meta.ib_address") "none" | regexMatch "none" }}{{ env "NOMAD_IP_recv" }}{{ else }}{{ env "meta.ib_address" }}{{ end }}:{{ env "NOMAD_PORT_recv_ds" }}",
     "NThreads": {{ env "NOMAD_META_receiver_dataserver_nthreads" }},
     "ListenPort": {{ env "NOMAD_PORT_recv_ds" }}
   },
diff --git a/receiver/src/receiver_config.cpp b/receiver/src/receiver_config.cpp
index f82f44afe1edcd0cd5c493a178affb3127d8c690..d919cfd0eea6616b6eeb35cf9408d6657e6b2c2d 100644
--- a/receiver/src/receiver_config.cpp
+++ b/receiver/src/receiver_config.cpp
@@ -34,7 +34,7 @@ Error ReceiverConfigFactory::SetConfig(std::string file_name) {
     (err = parser.GetString("AuthorizationServer", &config.authorization_server)) ||
     (err = parser.GetUInt64("AuthorizationInterval", &config.authorization_interval_ms)) ||
     (err = parser.GetString("PerformanceDbName", &config.performance_db_name)) ||
-    (err = parser.GetString("AdvertiseIP", &config.advertise_ip)) ||
+    (err = parser.Embedded("DataServer").GetString("AdvertiseURI", &config.dataserver.advertise_uri)) ||
     (err = parser.GetString("LogLevel", &log_level));
 
     if (err) {
diff --git a/receiver/src/receiver_config.h b/receiver/src/receiver_config.h
index c69ff7990d88bec1b8db6f65194d00c25e045cbe..514905eac527d7d29ea57ca3448c533f92ca9ecc 100644
--- a/receiver/src/receiver_config.h
+++ b/receiver/src/receiver_config.h
@@ -23,7 +23,6 @@ struct ReceiverConfig {
     uint64_t receive_to_disk_threshold_mb = 0;
     LogLevel log_level = LogLevel::Info;
     std::string tag;
-    std::string advertise_ip;
     ReceiverDataCenterConfig dataserver;
     std::string discovery_server;
 };
diff --git a/receiver/src/receiver_data_server/receiver_datacenter_config.h b/receiver/src/receiver_data_server/receiver_datacenter_config.h
index ddef216fd26d56db398be4889d95a636da3ec5a2..27b4c401cddab0948dbe6a9dfc4c512e64d4221f 100644
--- a/receiver/src/receiver_data_server/receiver_datacenter_config.h
+++ b/receiver/src/receiver_data_server/receiver_datacenter_config.h
@@ -9,6 +9,7 @@ struct ReceiverDataCenterConfig {
     uint64_t listen_port = 0;
     uint64_t nthreads = 0;
     std::string tag;
+    std::string advertise_uri;
 };
 
 }
diff --git a/receiver/src/request_handler_db_write.cpp b/receiver/src/request_handler_db_write.cpp
index 6a0e31bcb708d899b38acb7650b1f763ad0488b8..ad0dbf902199ced9911254e16f62c1726b22d537 100644
--- a/receiver/src/request_handler_db_write.cpp
+++ b/receiver/src/request_handler_db_write.cpp
@@ -80,8 +80,7 @@ FileInfo RequestHandlerDbWrite::PrepareFileInfo(const Request* request) const {
     file_info.size = request->GetDataSize();
     file_info.id = request->GetDataID();
     file_info.buf_id = request->GetSlotId();
-    file_info.source = GetReceiverConfig()->advertise_ip + ":" + string_format("%ld",
-                       GetReceiverConfig()->dataserver.listen_port);
+    file_info.source = GetReceiverConfig()->dataserver.advertise_uri;
     file_info.metadata = request->GetMetaData();
     return file_info;
 }
diff --git a/receiver/unittests/mock_receiver_config.cpp b/receiver/unittests/mock_receiver_config.cpp
index 99d2873cea0722cb1f865a7cf06c05c149ffbddb..aacffd49cda8d9559c164a9ac35bb81f45f876e6 100644
--- a/receiver/unittests/mock_receiver_config.cpp
+++ b/receiver/unittests/mock_receiver_config.cpp
@@ -49,6 +49,7 @@ Error SetReceiverConfig (const ReceiverConfig& config, std::string error_field)
     config_string += "," + Key("ListenPort", error_field) + std::to_string(config.listen_port);
     config_string += "," + Key("DataServer", error_field) + "{";
     config_string += Key("ListenPort", error_field) + std::to_string(config.dataserver.listen_port);
+    config_string += "," +  Key("AdvertiseURI", error_field) + "\"" + config.dataserver.advertise_uri + "\"";
     config_string += "," + Key("NThreads", error_field) + std::to_string(config.dataserver.nthreads);
     config_string += "}";
     config_string += "," + Key("DataCache", error_field) + "{";
@@ -63,7 +64,6 @@ Error SetReceiverConfig (const ReceiverConfig& config, std::string error_field)
     config_string += "," +  Key("WriteToDisk", error_field) + (config.write_to_disk ? "true" : "false");
     config_string += "," +  Key("WriteToDb", error_field) + (config.write_to_db ? "true" : "false");
     config_string += "," +  Key("LogLevel", error_field) + "\"" + log_level + "\"";
-    config_string += "," +  Key("AdvertiseIP", error_field) + "\"" + config.advertise_ip + "\"";
     config_string += "," +  Key("Tag", error_field) + "\"" + config.tag + "\"";
     config_string += "}";
 
diff --git a/receiver/unittests/test_config.cpp b/receiver/unittests/test_config.cpp
index 538f6f9dc03ac6791a26df9ae239c62d7c5a6010..d3c81a5003b8203c3c94d9fc9a6b6310b12b929e 100644
--- a/receiver/unittests/test_config.cpp
+++ b/receiver/unittests/test_config.cpp
@@ -58,10 +58,9 @@ class ConfigTests : public Test {
         test_config.use_datacache = false;
         test_config.datacache_reserved_share = 10;
         test_config.datacache_size_gb = 2;
-        test_config.advertise_ip = "host";
         test_config.dataserver.nthreads = 5;
         test_config.discovery_server = "discovery";
-        test_config.advertise_ip = "0.0.0.1";
+        test_config.dataserver.advertise_uri = "0.0.0.1:4201";
         test_config.receive_to_disk_threshold_mb = 50;
 
     }
@@ -94,7 +93,7 @@ TEST_F(ConfigTests, ReadSettings) {
     ASSERT_THAT(config->dataserver.nthreads, Eq(5));
     ASSERT_THAT(config->dataserver.tag, Eq("receiver1_ds"));
     ASSERT_THAT(config->discovery_server, Eq("discovery"));
-    ASSERT_THAT(config->advertise_ip, Eq("0.0.0.1"));
+    ASSERT_THAT(config->dataserver.advertise_uri, Eq("0.0.0.1:4201"));
     ASSERT_THAT(config->receive_to_disk_threshold_mb, Eq(50));
 }
 
@@ -105,7 +104,7 @@ TEST_F(ConfigTests, ErrorReadSettings) {
     std::vector<std::string>fields {"PerformanceDbServer", "ListenPort", "DataServer", "ListenPort", "WriteToDisk",
                                     "WriteToDb", "DataCache", "Use", "SizeGB", "ReservedShare", "DatabaseServer", "Tag",
                                     "AuthorizationServer", "AuthorizationInterval", "PerformanceDbName", "LogLevel",
-                                    "NThreads", "DiscoveryServer", "AdvertiseIP", "ReceiveToDiskThresholdMB"};
+                                    "NThreads", "DiscoveryServer", "AdvertiseURI", "ReceiveToDiskThresholdMB"};
     for (const auto& field : fields) {
         auto err = asapo::SetReceiverConfig(test_config, field);
         ASSERT_THAT(err, Ne(nullptr));
diff --git a/receiver/unittests/test_request_handler_db_check_request.cpp b/receiver/unittests/test_request_handler_db_check_request.cpp
index e40cbfbb4cfe1091924edbc317db2d71f6f06619..4675c3fdd4bb23ce7df028c2ff9bddd271fb285a 100644
--- a/receiver/unittests/test_request_handler_db_check_request.cpp
+++ b/receiver/unittests/test_request_handler_db_check_request.cpp
@@ -75,7 +75,7 @@ class DbCheckRequestHandlerTests : public Test {
     std::string expected_beamtime_id = "beamtime_id";
     std::string expected_default_stream = "detector";
     std::string expected_stream = "stream";
-    std::string expected_host_ip = "127.0.0.1";
+    std::string expected_host_uri = "127.0.0.1:1234";
     uint64_t expected_port = 1234;
     uint64_t expected_buf_id = 18446744073709551615ull;
     std::string expected_file_name = "2";
@@ -96,7 +96,7 @@ class DbCheckRequestHandlerTests : public Test {
         handler.log__ = &mock_logger;
         mock_request.reset(new NiceMock<MockRequest> {request_header, 1, "", nullptr});
         config.database_uri = "127.0.0.1:27017";
-        config.advertise_ip = expected_host_ip;
+        config.dataserver.advertise_uri = expected_host_uri;
         config.dataserver.listen_port = expected_port;
         SetReceiverConfig(config, "none");
         expected_file_info =  PrepareFileInfo();
@@ -196,7 +196,7 @@ FileInfo DbCheckRequestHandlerTests::PrepareFileInfo() {
     file_info.name = expected_file_name;
     file_info.id = expected_id;
     file_info.buf_id = expected_buf_id;
-    file_info.source = expected_host_ip + ":" + std::to_string(expected_port);
+    file_info.source = expected_host_uri;
     file_info.metadata = expected_metadata;
     return file_info;
 }
diff --git a/receiver/unittests/test_request_handler_db_writer.cpp b/receiver/unittests/test_request_handler_db_writer.cpp
index 4f82656c72d3a2b067cc171f85182f1cd4be7bc7..ec2c75ae355104365ccf372d4363e768ddc3eba8 100644
--- a/receiver/unittests/test_request_handler_db_writer.cpp
+++ b/receiver/unittests/test_request_handler_db_writer.cpp
@@ -94,7 +94,7 @@ class DbWriterHandlerTests : public Test {
         handler.log__ = &mock_logger;
         mock_request.reset(new NiceMock<MockRequest> {request_header, 1, "", &mock_db_check_handler});
         config.database_uri = "127.0.0.1:27017";
-        config.advertise_ip = expected_host_ip;
+        config.dataserver.advertise_uri = expected_host_ip+":"+std::to_string(expected_port);
         config.dataserver.listen_port = expected_port;
         SetReceiverConfig(config, "none");
 
diff --git a/tests/automatic/settings/receiver.json.tpl.lin.in b/tests/automatic/settings/receiver.json.tpl.lin.in
index baa9b4b6c0014ee2c7d62045011e0e1787e45a18..1177861e12ba54dcf0e0a0e0c4c21cb30a079283 100644
--- a/tests/automatic/settings/receiver.json.tpl.lin.in
+++ b/tests/automatic/settings/receiver.json.tpl.lin.in
@@ -1,10 +1,10 @@
 {
-  "AdvertiseIP": "127.0.0.1",
   "PerformanceDbServer":"localhost:8086",
   "PerformanceDbName": "db_test",
   "DatabaseServer":"auto",
   "DiscoveryServer": "localhost:8400/asapo-discovery",
   "DataServer": {
+    "AdvertiseURI": "127.0.0.1:{{ env "NOMAD_PORT_recv_ds" }}",
     "NThreads": 2,
     "ListenPort": {{ env "NOMAD_PORT_recv_ds" }}
   },
diff --git a/tests/automatic/settings/receiver.json.tpl.win.in b/tests/automatic/settings/receiver.json.tpl.win.in
index d18f3b98dae872062c717357040db0969196a8ed..02fdd657bff47c4f8988b677e57092917e5db1e9 100644
--- a/tests/automatic/settings/receiver.json.tpl.win.in
+++ b/tests/automatic/settings/receiver.json.tpl.win.in
@@ -1,5 +1,4 @@
 {
-  "AdvertiseIP": "127.0.0.1",
   "PerformanceDbServer":"localhost:8086",
   "PerformanceDbName": "db_test",
   "DatabaseServer":"auto",
@@ -8,6 +7,7 @@
   "AuthorizationInterval": 1000,
   "ListenPort": {{ env "NOMAD_PORT_recv" }},
   "DataServer": {
+    "AdvertiseURI": "127.0.0.1:{{ env "NOMAD_PORT_recv_ds" }}",
     "NThreads": 2,
     "ListenPort": {{ env "NOMAD_PORT_recv_ds" }}
   },
diff --git a/tests/manual/broker_debug_local/receiver.json b/tests/manual/broker_debug_local/receiver.json
index 6a5d12f59d24f354bfba8354a61341fcafbad518..5567105bf672adfedefa41bacd655e2c24d20351 100644
--- a/tests/manual/broker_debug_local/receiver.json
+++ b/tests/manual/broker_debug_local/receiver.json
@@ -3,8 +3,8 @@
   "PerformanceDbName": "db_test",
   "DatabaseServer":"localhost:27017",
   "DiscoveryServer": "localhost:8400/discovery",
-  "AdvertiseIP":"127.0.0.1",
   "DataServer": {
+    "AdvertiseURI":"127.0.0.1",
     "NThreads": 2,
     "ListenPort": 22000
   },
diff --git a/tests/manual/broker_debug_local/receiver.json.tpl b/tests/manual/broker_debug_local/receiver.json.tpl
index 1f7cbc7c1b75af4b38c23fc7fdba9f158c145b8e..a6c0887d9c96c0f22c59808f7c438009704f7896 100644
--- a/tests/manual/broker_debug_local/receiver.json.tpl
+++ b/tests/manual/broker_debug_local/receiver.json.tpl
@@ -1,10 +1,10 @@
 {
-  "AdvertiseIP": "127.0.0.1",
   "PerformanceDbServer":"localhost:8086",
   "PerformanceDbName": "db_test",
   "DatabaseServer":"auto",
   "DiscoveryServer": "localhost:8400/discovery",
   "DataServer": {
+    "AdvertiseURI": "127.0.0.1",
     "NThreads": 2,
     "ListenPort": {{ env "NOMAD_PORT_recv_ds" }}
   },
diff --git a/tests/manual/python_tests/producer/receiver.json.tpl b/tests/manual/python_tests/producer/receiver.json.tpl
index a235fec0d273fea59a9e8537f5f65324c38498a8..6f80d44bbde2b6531ff5c05406b0a9ded02e11a5 100644
--- a/tests/manual/python_tests/producer/receiver.json.tpl
+++ b/tests/manual/python_tests/producer/receiver.json.tpl
@@ -1,10 +1,10 @@
 {
-  "AdvertiseIP": "127.0.0.1",
   "PerformanceDbServer":"localhost:8086",
   "PerformanceDbName": "db_test",
   "DatabaseServer":"localhost:27017",
   "DiscoveryServer": "localhost:8400/discovery",
   "DataServer": {
+    "AdvertiseURI": "127.0.0.1",
     "NThreads": 2,
     "ListenPort": {{ env "NOMAD_PORT_recv_ds" }}
   },
diff --git a/tests/manual/python_tests/producer_wait_bug_mongo/receiver.json.tpl b/tests/manual/python_tests/producer_wait_bug_mongo/receiver.json.tpl
index a235fec0d273fea59a9e8537f5f65324c38498a8..6f80d44bbde2b6531ff5c05406b0a9ded02e11a5 100644
--- a/tests/manual/python_tests/producer_wait_bug_mongo/receiver.json.tpl
+++ b/tests/manual/python_tests/producer_wait_bug_mongo/receiver.json.tpl
@@ -1,10 +1,10 @@
 {
-  "AdvertiseIP": "127.0.0.1",
   "PerformanceDbServer":"localhost:8086",
   "PerformanceDbName": "db_test",
   "DatabaseServer":"localhost:27017",
   "DiscoveryServer": "localhost:8400/discovery",
   "DataServer": {
+    "AdvertiseURI": "127.0.0.1",
     "NThreads": 2,
     "ListenPort": {{ env "NOMAD_PORT_recv_ds" }}
   },
diff --git a/tests/manual/receiver_debug_local/receiver.json b/tests/manual/receiver_debug_local/receiver.json
index 6a5d12f59d24f354bfba8354a61341fcafbad518..5567105bf672adfedefa41bacd655e2c24d20351 100644
--- a/tests/manual/receiver_debug_local/receiver.json
+++ b/tests/manual/receiver_debug_local/receiver.json
@@ -3,8 +3,8 @@
   "PerformanceDbName": "db_test",
   "DatabaseServer":"localhost:27017",
   "DiscoveryServer": "localhost:8400/discovery",
-  "AdvertiseIP":"127.0.0.1",
   "DataServer": {
+    "AdvertiseURI":"127.0.0.1",
     "NThreads": 2,
     "ListenPort": 22000
   },