diff --git a/docker/Airflow/Dockerfile b/docker/Airflow/Dockerfile
index 2727977..bf72444 100644
--- a/docker/Airflow/Dockerfile
+++ b/docker/Airflow/Dockerfile
@@ -15,7 +15,7 @@
 # limitations under the License.
 #######################################################################################
 
-FROM apache/airflow:2.3.0-python3.8
+FROM apache/airflow:2.5.2-python3.10
 USER root
 RUN DEBIAN_FRONTEND=noninteractive apt-get --yes update && \
     DEBIAN_FRONTEND=noninteractive apt-get --yes install \
@@ -33,14 +33,10 @@
 RUN dpkg-deb -x osm_common.deb /tmp/osm
 RUN dpkg-deb -x osm_ngsa.deb /tmp/osm
 
-RUN mv /tmp/osm/usr/lib/python3/dist-packages/* /home/airflow/.local/lib/python3.8/site-packages/
+RUN mv /tmp/osm/usr/lib/python3/dist-packages/* /home/airflow/.local/lib/python3.10/site-packages/
 RUN rm -rf /tmp/osm
 
 RUN pip3 install \
-    -r /home/airflow/.local/lib/python3.8/site-packages/osm_common/requirements.txt \
-    -r /home/airflow/.local/lib/python3.8/site-packages/osm_ngsa/requirements.txt
-
-RUN pip3 install \
-    -r /home/airflow/.local/lib/python3.8/site-packages/osm_common/requirements.txt \
-    -r /home/airflow/.local/lib/python3.8/site-packages/osm_ngsa/requirements.txt
+    -r /home/airflow/.local/lib/python3.10/site-packages/osm_common/requirements.txt \
+    -r /home/airflow/.local/lib/python3.10/site-packages/osm_ngsa/requirements.txt
 
diff --git a/docker/MON/scripts/dashboarder-start.sh b/docker/MON/scripts/dashboarder-start.sh
new file mode 100644
index 0000000..171f75d
--- /dev/null
+++ b/docker/MON/scripts/dashboarder-start.sh
@@ -0,0 +1,18 @@
+#######################################################################################
+# Copyright ETSI Contributors and Others.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#######################################################################################
+
+osm-mon-dashboarder
diff --git a/docker/Prometheus/Dockerfile b/docker/Prometheus/Dockerfile
index 228f597..1bdbaf9 100644
--- a/docker/Prometheus/Dockerfile
+++ b/docker/Prometheus/Dockerfile
@@ -22,6 +22,8 @@
 ENV MONGODB_URL mongodb://mongo:27017
 ENV PROMETHEUS_CONFIG_FILE /etc/prometheus/prometheus.yml
 ENV PROMETHEUS_BASE_CONFIG_FILE /etc/prometheus_base/prometheus.yml
+ENV PROMETHEUS_ALERTS_FILE /etc/prometheus/osm_alert_rules.yml
+ENV PROMETHEUS_BASE_ALERTS_FILE /etc/prometheus_base/osm_alert_rules.yml
 ENV TARGET_DATABASE osm
 
 WORKDIR /code
diff --git a/docker/Prometheus/src/app.py b/docker/Prometheus/src/app.py
index b06f448..36b7b52 100755
--- a/docker/Prometheus/src/app.py
+++ b/docker/Prometheus/src/app.py
@@ -22,22 +22,26 @@
 # contact: fbravo@whitestack.com
 ##
 
-import os
-import pymongo
-import yaml
 import aiohttp
 import asyncio
-import copy
-import json
-import time
 from bson.json_util import dumps
 from bson import ObjectId
+import copy
+from datetime import datetime
+import json
+import os
+import pymongo
+import time
+import yaml
 
 # Env variables
 mongodb_url = os.environ["MONGODB_URL"]
 target_database = os.environ["TARGET_DATABASE"]
 prometheus_config_file = os.environ["PROMETHEUS_CONFIG_FILE"]
 prometheus_base_config_file = os.environ["PROMETHEUS_BASE_CONFIG_FILE"]
+prometheus_alerts_file = os.environ["PROMETHEUS_ALERTS_FILE"]
+prometheus_base_alerts_file = os.environ["PROMETHEUS_BASE_ALERTS_FILE"]
+
 prometheus_url = os.environ["PROMETHEUS_URL"]
 
 
@@ -45,6 +49,10 @@
     return json.loads(dumps(client[target_database].prometheus_jobs.find({})))
 
 
+def get_alerts(client):
+    return json.loads(dumps(client[target_database].alerts.find({"prometheus_config": {"$exists": True}})))
+
+
 def save_successful_jobs(client, jobs):
     for job in jobs:
         client[target_database].prometheus_jobs.update_one(
@@ -88,6 +96,29 @@
     return config_file_yaml
 
 
+def generate_prometheus_alerts(prometheus_alerts, config_file_path):
+    with open(config_file_path, encoding="utf-8", mode="r") as config_file:
+        config_file_yaml = yaml.safe_load(config_file)
+    if config_file_yaml is None:
+        config_file_yaml = {}
+    if "groups" not in config_file_yaml:
+        config_file_yaml["groups"] = []
+
+    timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
+    group = {
+        "name": f"_osm_alert_rules_{timestamp}_",
+        "rules": [],
+    }
+    for alert in prometheus_alerts:
+        if "prometheus_config" in alert:
+            group["rules"].append(alert["prometheus_config"])
+
+    if group["rules"]:
+        config_file_yaml["groups"].append(group)
+
+    return config_file_yaml
+
+
 async def reload_prometheus_config(prom_url):
     async with aiohttp.ClientSession() as session:
         async with session.post(prom_url + "/-/reload") as resp:
@@ -131,7 +162,7 @@
 
 async def main_task(client):
     stored_jobs = get_jobs(client)
-    print(f"Jobs detected : {len(stored_jobs):d}")
+    print(f"Jobs detected: {len(stored_jobs):d}")
     generated_prometheus_config = generate_prometheus_config(
         stored_jobs, prometheus_base_config_file
     )
@@ -141,6 +172,20 @@
     print(yaml.safe_dump(generated_prometheus_config))
     config_file.write(yaml.safe_dump(generated_prometheus_config))
     config_file.close()
+
+    if os.path.isfile(prometheus_base_alerts_file):
+        stored_alerts = get_alerts(client)
+        print(f"Alerts read: {len(stored_alerts):d}")
+        generated_prometheus_alerts = generate_prometheus_alerts(
+            stored_alerts, prometheus_base_alerts_file
+        )
+        print(f"Writing new alerts file to {prometheus_alerts_file}")
+        config_file = open(prometheus_alerts_file, "w")
+        config_file.truncate(0)
+        print(yaml.safe_dump(generated_prometheus_alerts))
+        config_file.write(yaml.safe_dump(generated_prometheus_alerts))
+        config_file.close()
+
     print("New config written, updating prometheus")
     update_resp = await reload_prometheus_config(prometheus_url)
     is_valid = await validate_configuration(prometheus_url, generated_prometheus_config)
@@ -161,9 +206,9 @@
     # Initial loop. First refresh of prometheus config file
     first_refresh_completed = False
     tries = 1
-    while tries <= 3:
+    while tries <= 3 and first_refresh_completed == False:
         try:
-            print("Refreshing prometheus config file for first time")
+            print("Generating prometheus config files")
             await main_task(client)
             first_refresh_completed = True
         except Exception as error:
@@ -179,23 +224,21 @@
     while True:
         try:
             # Needs mongodb in replica mode as this feature relies in OpLog
-            change_stream = client[target_database].prometheus_jobs.watch(
+            change_stream = client[target_database].watch(
                 [
                     {
                         "$match": {
-                            # If you want to modify a particular job,
-                            # delete and insert it again
-                            "operationType": {"$in": ["insert", "delete"]}
+                            "operationType": {"$in": ["insert", "delete"]},
+                            "ns.coll": { "$in": ["prometheus_jobs", "alerts"]},
                         }
                     }
                 ]
             )
 
             # Single thread, no race conditions and ops are queued up in order
-            print("Listening to changes in prometheus jobs collection")
+            print("Listening to changes in prometheus jobs and alerts collections")
             for change in change_stream:
-                print("Change detected, updating prometheus config")
-                print(f"{change}")
+                print("Changes detected, updating prometheus config")
                 await main_task(client)
                 print()
         except Exception as error:
diff --git a/docker/Webhook/Dockerfile b/docker/Webhook/Dockerfile
new file mode 100644
index 0000000..73e1bd0
--- /dev/null
+++ b/docker/Webhook/Dockerfile
@@ -0,0 +1,78 @@
+#######################################################################################
+# Copyright ETSI Contributors and Others.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#######################################################################################
+
+FROM ubuntu:20.04 as INSTALL
+
+ARG APT_PROXY
+RUN if [ ! -z $APT_PROXY ] ; then \
+    echo "Acquire::http::Proxy \"$APT_PROXY\";" > /etc/apt/apt.conf.d/proxy.conf ;\
+    echo "Acquire::https::Proxy \"$APT_PROXY\";" >> /etc/apt/apt.conf.d/proxy.conf ;\
+    fi
+
+RUN DEBIAN_FRONTEND=noninteractive apt-get --yes update && \
+    DEBIAN_FRONTEND=noninteractive apt-get --yes install \
+    gcc=4:9.3.* \
+    python3=3.8.* \
+    python3-dev=3.8.* \
+    python3-pip=20.0.2* \
+    python3-setuptools=45.2.* \
+    curl=7.68.*
+
+ARG PYTHON3_OSM_WEBHOOK_TRANSLATOR_URL
+
+RUN curl $PYTHON3_OSM_WEBHOOK_TRANSLATOR_URL -o osm_webhook_translator.deb
+RUN dpkg -i ./osm_webhook_translator.deb
+
+RUN pip3 install \
+    -r /usr/lib/python3/dist-packages/osm_webhook_translator/requirements.txt
+
+#######################################################################################
+FROM ubuntu:20.04 as FINAL
+
+ARG APT_PROXY
+RUN if [ ! -z $APT_PROXY ] ; then \
+    echo "Acquire::http::Proxy \"$APT_PROXY\";" > /etc/apt/apt.conf.d/proxy.conf ;\
+    echo "Acquire::https::Proxy \"$APT_PROXY\";" >> /etc/apt/apt.conf.d/proxy.conf ;\
+    fi
+
+RUN DEBIAN_FRONTEND=noninteractive apt-get --yes update && \
+    DEBIAN_FRONTEND=noninteractive apt-get --yes install \
+    python3-minimal=3.8.* \
+    && rm -rf /var/lib/apt/lists/*
+
+RUN rm -f /etc/apt/apt.conf.d/proxy.conf
+
+COPY --from=INSTALL /usr/lib/python3/dist-packages /usr/lib/python3/dist-packages
+COPY --from=INSTALL /usr/local/lib/python3.8/dist-packages /usr/local/lib/python3.8/dist-packages
+COPY --from=INSTALL /usr/local/bin/uvicorn /usr/local/bin/uvicorn
+
+# Creating the user for the app
+RUN groupadd -g 1000 appuser && \
+    useradd -u 1000 -g 1000 -d /app appuser && \
+    mkdir -p /app/osm_webhook_translator && \
+    chown -R appuser:appuser /app
+
+WORKDIR /app/osm_webhook_translator
+
+# Changing the security context
+USER appuser
+
+EXPOSE 9998
+
+CMD ["uvicorn", "osm_webhook_translator.main:app", "--host", "0.0.0.0", "--port", "80"]
+
+
diff --git a/docker/mk/Makefile.include b/docker/mk/Makefile.include
deleted file mode 100644
index 1fd6dcd..0000000
--- a/docker/mk/Makefile.include
+++ /dev/null
@@ -1,89 +0,0 @@
-#
-#   Copyright 2020 ETSI
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-TOPDIR=$(shell readlink -f .|sed -e 's/\/docker\/.*//')
-MKINCLUDE=$(TOPDIR)/docker/mk
-MKBUILD=$(TOPDIR)/docker/build
-
-all: build
-
-TAG ?= 6
-
-REPOSITORY_BASE ?= http://osm-download.etsi.org/repository/osm/debian
-RELEASE         ?= ReleaseNINE-daily
-REPOSITORY_KEY  ?= OSM%20ETSI%20Release%20Key.gpg
-REPOSITORY      ?= testing
-NO_CACHE        ?= --no-cache
-DOCKER_REGISTRY     ?= ""
-
-LOWER_MDG = $(shell echo $(MDG) | tr '[:upper:]' '[:lower:]')
-
-CONTAINER_NAME ?= $(LOWER_MDG)
-
-CMD_DOCKER_ARGS ?= -q
-DOCKER_ARGS     = $(CMD_DOCKER_ARGS)
-
-DEPS := MON IM LCM RO common osmclient devops NBI policy-module Keystone N2VC lightui ngui PLA tests Prometheus
-
-DEPS_TARGETS = $(addprefix $(MKBUILD)/.dep_, $(DEPS))
-
-Q=@
-
-$(MKBUILD):
-	$Qmkdir -p $(MKBUILD)
-
-$(MKBUILD)/.dep_policy-module:
-	$Q$(MKINCLUDE)/get_version.sh -r $(REPOSITORY) -R $(RELEASE) -k $(REPOSITORY_KEY) -u $(REPOSITORY_BASE) -m POL -p policy-module > $@
-
-$(MKBUILD)/.dep_lightui:
-	$Q$(MKINCLUDE)/get_version.sh -r $(REPOSITORY) -R $(RELEASE) -k $(REPOSITORY_KEY) -u $(REPOSITORY_BASE) -m LW-UI -p lightui > $@
-
-$(MKBUILD)/.dep_ngui:
-	$Q$(MKINCLUDE)/get_version.sh -r $(REPOSITORY) -R $(RELEASE) -k $(REPOSITORY_KEY) -u $(REPOSITORY_BASE) -m NG-UI -p ngui > $@
-
-$(MKBUILD)/.dep_%:
-	$Q$(MKINCLUDE)/get_version.sh -r $(REPOSITORY) -R $(RELEASE) -k $(REPOSITORY_KEY) -u $(REPOSITORY_BASE) -m $* > $@
-
-build: $(MKBUILD) $(DEPS_TARGETS)
-	$Qdocker build -t opensourcemano/$(LOWER_MDG):$(TAG) \
-                   --build-arg RELEASE=$(RELEASE) \
-                   --build-arg REPOSITORY=$(REPOSITORY) \
-                   --build-arg REPOSITORY_KEY=$(REPOSITORY_KEY) \
-                   --build-arg REPOSITORY_BASE=$(REPOSITORY_BASE) \
-                   --build-arg MON_VERSION==$(shell cat $(MKBUILD)/.dep_MON) \
-                   --build-arg IM_VERSION==$(shell cat $(MKBUILD)/.dep_IM) \
-                   --build-arg RO_VERSION==$(shell cat $(MKBUILD)/.dep_RO) \
-                   --build-arg LCM_VERSION==$(shell cat $(MKBUILD)/.dep_LCM) \
-                   --build-arg COMMON_VERSION==$(shell cat $(MKBUILD)/.dep_common) \
-                   --build-arg OSMCLIENT_VERSION==$(shell cat $(MKBUILD)/.dep_osmclient) \
-                   --build-arg NBI_VERSION==$(shell cat $(MKBUILD)/.dep_NBI) \
-                   --build-arg POL_VERSION==$(shell cat $(MKBUILD)/.dep_policy-module) \
-                   --build-arg PLA_VERSION==$(shell cat $(MKBUILD)/.dep_PLA) \
-                   --build-arg DEVOPS_VERSION==$(shell cat $(MKBUILD)/.dep_devops) \
-                   --build-arg N2VC_VERSION==$(shell cat $(MKBUILD)/.dep_N2VC) \
-                   --build-arg NGUI_VERSION==$(shell cat $(MKBUILD)/.dep_ngui) \
-                   --build-arg NGSA_VERSION==$(shell cat $(MKBUILD)/.dep_ngsa) \
-                   --build-arg TESTS_VERSION==$(shell cat $(MKBUILD)/.dep_tests) \
-                   --build-arg CACHE_DATE==$(shell date -uI) \
-                   $(DOCKER_ARGS) .
-
-clean:
-	rm -f $(MKBUILD)/.dep*
-
-tag:
-	docker tag opensourcemano/$(CONTAINER_NAME):$(INPUT_TAG) $(DOCKER_REGISTRY)opensourcemano/$(LOWER_MDG):$(TAG)
-
-push: tag
-	docker push $(DOCKER_REGISTRY)opensourcemano/$(LOWER_MDG):$(TAG)
