diff --git a/devops/gcp/configmap/README.md b/devops/gcp/configmap/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..ce6bc6d029113e3223ba015cbe99f1663f94a295
--- /dev/null
+++ b/devops/gcp/configmap/README.md
@@ -0,0 +1,74 @@
+<!--- Configmap -->
+
+# Configmap helm chart
+
+## Introduction
+
+This chart bootstraps a configmap deployment on a [Kubernetes](https://kubernetes.io) cluster using [Helm](https://helm.sh) package manager.
+
+## Prerequisites
+
+The code was tested on **Kubernetes cluster** (v1.21.11) with **Istio** (1.12.6)
+> It is possible to use other versions, but it hasn't been tested
+
+### Operation system
+
+The code works in Debian-based Linux (Debian 10 and Ubuntu 20.04) and Windows WSL 2. Also, it works but is not guaranteed in Google Cloud Shell. All other operating systems, including macOS, are not verified and supported.
+
+### Packages
+
+Packages are only needed for installation from a local computer.
+
+- **HELM** (version: v3.7.1 or higher) [helm](https://helm.sh/docs/intro/install/)
+- **Kubectl** (version: v1.21.0 or higher) [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl)
+## Installation
+This Helm chart should be installed before [deploy Helm Chart](../deploy)
+First you need to set variables in **values.yaml** file using any code editor. Some of the values are prefilled, but you need to specify some values as well. You can find more information about them below.
+
+### Common variables
+
+| Name | Description | Type | Default |Required |
+|------|-------------|------|---------|---------|
+**logLevel** | logging level | string | INFO | yes
+**springProfilesActive** | active spring profile | string | gcp | yes
+
+### GCP variables
+
+| Name | Description | Type | Default |Required |
+|------|-------------|------|---------|---------|
+**entitlementsHost** | entitlements service host address | string | `http://entitlements` | yes
+**registerHost** | register service host address | string | `http://register` | yes
+**partitionHost** | partition service host address | string | `http://partition` | yes
+**googleAudiences** | your GCP client ID | string | - | yes
+
+> googleAudiences: If you are connected to GCP console with `gcloud auth application-default login --no-browser` from your terminal, you can get your client_id using the command:
+
+```console
+cat ~/.config/gcloud/application_default_credentials.json | grep client_id
+```
+
+### Config variables
+
+| Name | Description | Type | Default |Required |
+|------|-------------|------|---------|---------|
+**configmap** | configmap name | string | notification-config | yes
+**appName** | name of the app | string | notification | yes
+**onPremEnabled** | whether on-prem is enabled | boolean | false | yes
+
+### Install the helm chart
+
+Run this command from within this directory:
+
+```bash
+helm install gcp-notification-configmap .
+```
+
+## Uninstalling the Chart
+
+To uninstall the helm deployment:
+
+```bash
+helm uninstall gcp-notification-configmap
+```
+
+[Move-to-Top](#configmap-helm-chart)
diff --git a/devops/gcp/configmap/templates/configmap.yaml b/devops/gcp/configmap/templates/configmap.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..237389ec3a0003e95d42c09c6559af60f1ef645c
--- /dev/null
+++ b/devops/gcp/configmap/templates/configmap.yaml
@@ -0,0 +1,16 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  labels:
+    app: "{{ .Values.conf.appName }}"
+  name: "{{ .Values.conf.configmap }}"
+  namespace: "{{ .Release.Namespace }}"
+data:
+  LOG_LEVEL: "{{ .Values.data.logLevel }}"
+  SPRING_PROFILES_ACTIVE: "{{ .Values.data.springProfilesActive }}"
+  ENTITLEMENTS_HOST: "{{ .Values.data.entitlementsHost }}"
+  REGISTER_HOST: "{{ .Values.data.registerHost }}"
+  PARTITION_HOST: "{{ .Values.data.partitionHost }}"
+  {{- if not $.Values.conf.onPremEnabled }}
+  GOOGLE_AUDIENCES: "{{ .Values.data.googleAudiences }}"
+  {{- end }}
diff --git a/devops/gcp/configmap/templates/notification-configmap.yaml b/devops/gcp/configmap/templates/notification-configmap.yaml
deleted file mode 100644
index c3c1cbbf874a068170cfaf180253dadb25107764..0000000000000000000000000000000000000000
--- a/devops/gcp/configmap/templates/notification-configmap.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-apiVersion: v1
-kind: ConfigMap
-metadata:
-  labels:
-    app: "{{ .Values.conf.app_name }}"
-  name: "{{ .Values.conf.configmap }}"
-  namespace: "{{ .Release.Namespace }}"
-data:
-  LOG_LEVEL: "{{ .Values.data.log_level }}"
-  SPRING_PROFILES_ACTIVE: "{{ .Values.data.spring_profiles_active }}"
-  APP_ENTITLEMENTS: "{{ .Values.data.app_entitlements }}"
-  APP_REGISTER: "{{ .Values.data.app_register }}"
-  PARTITION_API: "{{ .Values.data.partition_api }}"
-  {{- if not .Values.conf.on_prem_enabled }}
-  GOOGLE_AUDIENCES: "{{ .Values.data.google_audiences }}"
-  {{- end }}
diff --git a/devops/gcp/configmap/values.yaml b/devops/gcp/configmap/values.yaml
index 2316222a005ab8518dfe256132db69cc3d33da5b..38a7b11cde45628d78b2359b84fb618645df0072 100644
--- a/devops/gcp/configmap/values.yaml
+++ b/devops/gcp/configmap/values.yaml
@@ -1,13 +1,13 @@
 data:
   # common
-  log_level: "INFO"
-  spring_profiles_active: "gcp"
-  app_entitlements: "http://entitlements/api/entitlements/v2/"
-  app_register: "http://register/api/register/v1"
-  partition_api: "http://partition/api/partition/v1/"
+  logLevel: "INFO"
+  springProfilesActive: "gcp"
+  entitlementsHost: "http://entitlements"
+  registerHost: "http://register"
+  partitionHost: "http://partition"
   # gcp
-  google_audiences: ""
+  googleAudiences: ""
 conf:
   configmap: "notification-config"
-  app_name: "notification"
-  on_prem_enabled: false
+  appName: "notification"
+  onPremEnabled: false
diff --git a/devops/gcp/deploy/README.md b/devops/gcp/deploy/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..af91d321cfebfadb3d24f187d2106394124f0b11
--- /dev/null
+++ b/devops/gcp/deploy/README.md
@@ -0,0 +1,70 @@
+<!--- Deploy -->
+
+# Deploy helm chart
+
+## Introduction
+
+This chart bootstraps a deployment on a [Kubernetes](https://kubernetes.io) cluster using [Helm](https://helm.sh) package manager.
+
+## Prerequisites
+
+The code was tested on **Kubernetes cluster** (v1.21.11) with **Istio** (1.12.6)
+> It is possible to use other versions, but it hasn't been tested
+
+### Operation system
+
+The code works in Debian-based Linux (Debian 10 and Ubuntu 20.04) and Windows WSL 2. Also, it works but is not guaranteed in Google Cloud Shell. All other operating systems, including macOS, are not verified and supported.
+
+### Packages
+
+Packages are only needed for installation from a local computer.
+
+- **HELM** (version: v3.7.1 or higher) [helm](https://helm.sh/docs/intro/install/)
+- **Kubectl** (version: v1.21.0 or higher) [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl)
+
+## Installation
+
+Before installing deploy Helm chart you need to install [configmap Helm chart](../configmap).
+First you need to set variables in **values.yaml** file using any code editor. Some of the values are prefilled, but you need to specify some values as well. You can find more information about them below.
+
+### Common variables
+
+| Name | Description | Type | Default |Required |
+|------|-------------|------|---------|---------|
+**image** | your image name | string | - | yes
+**requestsCpu** | amount of requested CPU | string | 0.1 | yes
+**requestsMemory** | amount of requested memory| string | 256M | yes
+**limitsCpu** | CPU limit | string | 1 | yes
+**limitsMemory** | memory limit | string | 1G | yes
+**serviceAccountName** | name of your service account | string | notification | yes
+**imagePullPolicy** | when to pull image | string | IfNotPresent | yes
+**image** | service image | string | - | yes
+
+### Config variables
+
+| Name | Description | Type | Default |Required |
+|------|-------------|------|---------|---------|
+**domain** | your domain | string | - | yes
+**appName** | name of the app | string | `notification` | yes
+**configmap** | configmap to be used | string | `notification-config` | yes
+**onPremEnabled** | whether on-prem is enabled | boolean | false | yes
+**rabbitmqSecretName** | secret for rabbitmq | string | `rabbitmq-secret` | yes
+**openidSecretName** | secret for openid client | string | `notification-keycloak-secret` | yes
+
+### Install the helm chart
+
+Run this command from within this directory:
+
+```console
+helm install gcp-notification-deploy .
+```
+
+## Uninstalling the Chart
+
+To uninstall the helm deployment:
+
+```console
+helm uninstall gcp-notification-deploy
+```
+
+[Move-to-Top](#deploy-helm-chart)
diff --git a/devops/gcp/deploy/templates/deployment.yaml b/devops/gcp/deploy/templates/deployment.yaml
index 11d6d40c111ed104a5f638a932fc5442d5dcaa01..af1194fc152690421f5028adbc00bd9148b464ed 100644
--- a/devops/gcp/deploy/templates/deployment.yaml
+++ b/devops/gcp/deploy/templates/deployment.yaml
@@ -2,33 +2,33 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   labels:
-    app: "{{ .Values.conf.app_name }}"
-  name: "{{ .Values.conf.app_name }}"
+    app: "{{ .Values.conf.appName }}"
+  name: "{{ .Values.conf.appName }}"
   namespace: "{{ .Release.Namespace }}"
 spec:
   selector:
     matchLabels:
-      app: "{{ .Values.conf.app_name }}"
+      app: "{{ .Values.conf.appName }}"
   replicas: 1
   template:
     metadata:
       labels:
-        app: "{{ .Values.conf.app_name }}"
+        app: "{{ .Values.conf.appName }}"
       annotations:
         rollme: {{ randAlphaNum 5 | quote }}
     spec:
       containers:
-        - name: "{{ .Values.conf.app_name }}"
+        - name: "{{ .Values.conf.appName }}"
           image: "{{ .Values.data.image }}"
           imagePullPolicy: "{{ .Values.data.imagePullPolicy }}"
           envFrom:
           - configMapRef:
               name: "{{ .Values.conf.configmap }}"
-          {{- if .Values.conf.on_prem_enabled }}
+          {{- if .Values.conf.onPremEnabled }}
           - secretRef:
-              name: "{{ .Values.conf.rabbitmq_secret_name }}"
+              name: "{{ .Values.conf.rabbitmqSecretName }}"
           - secretRef:
-              name: "{{ .Values.conf.openid_secret_name }}"
+              name: "{{ .Values.conf.openidSecretName }}"
           {{- end }}
           securityContext:
             allowPrivilegeEscalation: false
@@ -37,9 +37,9 @@ spec:
             - containerPort: 8080
           resources:
             requests:
-              cpu: "{{ .Values.data.requests_cpu }}"
-              memory: "{{ .Values.data.requests_memory }}"
+              cpu: "{{ .Values.data.requestsCpu }}"
+              memory: "{{ .Values.data.requestsMemory }}"
             limits:
-              cpu: "{{ .Values.data.limits_cpu }}"
-              memory: "{{ .Values.data.limits_memory }}"
+              cpu: "{{ .Values.data.limitsCpu }}"
+              memory: "{{ .Values.data.limitsMemory }}"
       serviceAccountName: "{{ .Values.data.serviceAccountName }}"
diff --git a/devops/gcp/deploy/templates/service-account.yaml b/devops/gcp/deploy/templates/service-account.yaml
index 3fede170cb014a4cfdf8cc99d745a32eb66aeed0..25fd74efbfca059f541af82d98b676cfcb930d64 100644
--- a/devops/gcp/deploy/templates/service-account.yaml
+++ b/devops/gcp/deploy/templates/service-account.yaml
@@ -1,4 +1,4 @@
-{{- if .Values.conf.on_prem_enabled }}
+{{- if .Values.conf.onPremEnabled }}
 apiVersion: v1
 kind: ServiceAccount
 metadata:
diff --git a/devops/gcp/deploy/templates/service.yaml b/devops/gcp/deploy/templates/service.yaml
index 7f88561aad2b46006251e90dc3758e3a7cd0fbc0..49dc28423f0f65a54b786d74eefec4a81f81ea60 100644
--- a/devops/gcp/deploy/templates/service.yaml
+++ b/devops/gcp/deploy/templates/service.yaml
@@ -1,15 +1,15 @@
 apiVersion: v1
 kind: Service
 metadata:
-  name: "{{ .Values.conf.app_name }}"
+  name: "{{ .Values.conf.appName }}"
   annotations:
-  {{- if not .Values.conf.on_prem_enabled }}
+  {{- if not .Values.conf.onPremEnabled }}
     cloud.google.com/neg: '{"ingress": true}'
   {{- end }}
   namespace: "{{ .Release.Namespace }}"
   labels:
-    app: "{{ .Values.conf.app_name }}"
-    service: "{{ .Values.conf.app_name }}"
+    app: "{{ .Values.conf.appName }}"
+    service: "{{ .Values.conf.appName }}"
 spec:
   ports:
     - protocol: TCP
@@ -17,4 +17,4 @@ spec:
       targetPort: 8080
       name: http
   selector:
-    app: "{{ .Values.conf.app_name }}"
+    app: "{{ .Values.conf.appName }}"
diff --git a/devops/gcp/deploy/templates/virtual-service.yaml b/devops/gcp/deploy/templates/virtual-service.yaml
index 176fa89b85c5c0f92d9fd1af6545c0b6025d9853..3a5f6650fa0453f96973ab618a41d099fe301b68 100644
--- a/devops/gcp/deploy/templates/virtual-service.yaml
+++ b/devops/gcp/deploy/templates/virtual-service.yaml
@@ -1,12 +1,14 @@
 apiVersion: networking.istio.io/v1alpha3
 kind: VirtualService
 metadata:
-  name: "{{ .Values.conf.app_name }}"
+  name: "{{ .Values.conf.appName }}"
   namespace: "{{ .Release.Namespace }}"
 spec:
   hosts:
-    {{- if .Values.conf.domain }}
+    {{- if and .Values.conf.domain .Values.conf.onPremEnabled }}
     - {{ printf "osdu.%s" .Values.conf.domain | quote }}
+    {{- else if .Values.conf.domain }}
+    - {{ .Values.conf.domain | quote }}
     {{- else }}
     - "*"
     {{- end }}
@@ -20,4 +22,4 @@ spec:
         - destination:
             port:
               number: 80
-            host: "{{ .Values.conf.app_name }}.{{ .Release.Namespace }}.svc.cluster.local"
+            host: "{{ .Values.conf.appName }}.{{ .Release.Namespace }}.svc.cluster.local"
diff --git a/devops/gcp/deploy/values.yaml b/devops/gcp/deploy/values.yaml
index 83f34fe98e938d083ca02009e157b2d2f13beef4..6904a3b5fae20ecbeb525469e5a26ea68b3730ba 100644
--- a/devops/gcp/deploy/values.yaml
+++ b/devops/gcp/deploy/values.yaml
@@ -1,16 +1,16 @@
 data:
-  requests_cpu: "0.1"
-  requests_memory: "256M"
-  limits_cpu: "1"
-  limits_memory: "1.5G"
+  requestsCpu: "0.1"
+  requestsMemory: "256M"
+  limitsCpu: "1"
+  limitsMemory: "1.5G"
   serviceAccountName: "notification"
   imagePullPolicy: "IfNotPresent"
   image: ""
 
 conf:
   configmap: "notification-config"
-  app_name: "notification"
-  rabbitmq_secret_name: "rabbitmq-secret"
-  openid_secret_name: "notification-keycloak-secret"
-  on_prem_enabled: false
+  appName: "notification"
+  rabbitmqSecretName: "rabbitmq-secret"
+  openidSecretName: "notification-keycloak-secret"
+  onPremEnabled: false
   domain: ""
diff --git a/provider/notification-gcp/src/main/resources/application.properties b/provider/notification-gcp/src/main/resources/application.properties
index 80608c45fc05d2d63dcfd205b997ac768ef0e5de..44979e699f41320200cf5db516d5fe5e38a5cf45 100644
--- a/provider/notification-gcp/src/main/resources/application.properties
+++ b/provider/notification-gcp/src/main/resources/application.properties
@@ -24,11 +24,20 @@ app.maxCacheSize=10
 server.error.whitelabel.enabled=false
 
 # External services
-app.entitlements=http://entitlements/api/entitlements/v2/
-app.register=http://register/api/register/v1
-partition.api=http://partition/api/partition/v1/
+ENTITLEMENTS_PATH=/api/entitlements/v2/
+ENTITLEMENTS_HOST=http://entitlements
+app.entitlements=${ENTITLEMENTS_HOST}${ENTITLEMENTS_PATH}
+
+REGISTER_PATH=/api/register/v1
+REGISTER_HOST=http://register
+app.register=${REGISTER_HOST}${REGISTER_PATH}
+
+PARTITION_PATH=/api/partition/v1/
+PARTITION_HOST=http://partition
+PARTITION_API=${PARTITION_HOST}${PARTITION_PATH}
+partition.api=${PARTITION_API}
 
 # No profile defaults
 service.token.provider=GCP
 partition-auth-enabled=true
-oqmDriver=pubsub
\ No newline at end of file
+oqmDriver=pubsub