diff --git a/installers/charm/bundles/osm-ha/bundle.yaml b/installers/charm/bundles/osm-ha/bundle.yaml
index 36d1b37dc764d820f2c3e167a6d54b5d95aff3d4..752cf567cb3ca8017adbd12454e6e05134b654b0 100644
--- a/installers/charm/bundles/osm-ha/bundle.yaml
+++ b/installers/charm/bundles/osm-ha/bundle.yaml
@@ -29,7 +29,7 @@ description: |
 bundle: kubernetes
 applications:
   zookeeper:
-    charm: "cs:~charmed-osm/zookeeper-0"
+    charm: "cs:~charmed-osm/zookeeper-1"
     channel: "stable"
     scale: 3
     series: kubernetes
@@ -56,7 +56,7 @@ applications:
       gui-x: -300
       gui-y: -250
   kafka:
-    charm: "cs:~charmed-osm/kafka-0"
+    charm: "cs:~charmed-osm/kafka-1"
     channel: "stable"
     scale: 3
     series: kubernetes
@@ -78,7 +78,7 @@ applications:
       gui-x: 0
       gui-y: 0
   nbi:
-    charm: "cs:~charmed-osm/nbi-17"
+    charm: "cs:~charmed-osm/nbi-18"
     scale: 3
     series: kubernetes
     options:
@@ -89,7 +89,7 @@ applications:
       gui-x: 0
       gui-y: -250
   ro:
-    charm: "cs:~charmed-osm/ro-9"
+    charm: "cs:~charmed-osm/ro-10"
     scale: 3
     series: kubernetes
     options:
@@ -98,14 +98,14 @@ applications:
       gui-x: -300
       gui-y: 250
   ng-ui:
-    charm: "cs:~charmed-osm/ng-ui-24"
+    charm: "cs:~charmed-osm/ng-ui-25"
     scale: 3
     series: kubernetes
     annotations:
       gui-x: 600
       gui-y: 0
   lcm:
-    charm: "cs:~charmed-osm/lcm-14"
+    charm: "cs:~charmed-osm/lcm-15"
     scale: 3
     series: kubernetes
     options:
@@ -115,7 +115,7 @@ applications:
       gui-x: -300
       gui-y: 0
   mon:
-    charm: "cs:~charmed-osm/mon-11"
+    charm: "cs:~charmed-osm/mon-12"
     scale: 1
     series: kubernetes
     options:
@@ -126,7 +126,7 @@ applications:
       gui-x: 300
       gui-y: 0
   pol:
-    charm: "cs:~charmed-osm/pol-9"
+    charm: "cs:~charmed-osm/pol-10"
     scale: 3
     series: kubernetes
     options:
@@ -135,7 +135,7 @@ applications:
       gui-x: -300
       gui-y: 500
   pla:
-    charm: "cs:~charmed-osm/pla-12"
+    charm: "cs:~charmed-osm/pla-13"
     scale: 3
     series: kubernetes
     options:
@@ -144,7 +144,7 @@ applications:
       gui-x: 600
       gui-y: -250
   prometheus:
-    charm: "cs:~charmed-osm/prometheus-8"
+    charm: "cs:~charmed-osm/prometheus-9"
     scale: 1
     series: kubernetes
     storage:
@@ -155,14 +155,14 @@ applications:
       gui-x: 300
       gui-y: 250
   grafana:
-    charm: "cs:~charmed-osm/grafana-9"
+    charm: "cs:~charmed-osm/grafana-10"
     scale: 3
     series: kubernetes
     annotations:
       gui-x: 300
       gui-y: 500
   keystone:
-    charm: "cs:~charmed-osm/keystone-15"
+    charm: "cs:~charmed-osm/keystone-16"
     scale: 1
     series: kubernetes
     annotations:
diff --git a/installers/charm/bundles/osm/bundle.yaml b/installers/charm/bundles/osm/bundle.yaml
index 132595110f6c087673ba1debd46c18ab961af4c1..9031388a281b4ad7ac4924960b141ffa84d8bd8f 100644
--- a/installers/charm/bundles/osm/bundle.yaml
+++ b/installers/charm/bundles/osm/bundle.yaml
@@ -28,7 +28,7 @@ description: |
 bundle: kubernetes
 applications:
   zookeeper:
-    charm: "cs:~charmed-osm/zookeeper-0"
+    charm: "cs:~charmed-osm/zookeeper-1"
     scale: 1
     series: kubernetes
     storage:
@@ -51,7 +51,7 @@ applications:
       gui-x: -300
       gui-y: -250
   kafka:
-    charm: "cs:~charmed-osm/kafka-0"
+    charm: "cs:~charmed-osm/kafka-1"
     scale: 1
     series: kubernetes
     storage:
@@ -69,7 +69,7 @@ applications:
       gui-x: 0
       gui-y: 0
   nbi:
-    charm: "cs:~charmed-osm/nbi-17"
+    charm: "cs:~charmed-osm/nbi-18"
     scale: 1
     series: kubernetes
     options:
@@ -80,7 +80,7 @@ applications:
       gui-x: 0
       gui-y: -250
   ro:
-    charm: "cs:~charmed-osm/ro-9"
+    charm: "cs:~charmed-osm/ro-10"
     scale: 1
     series: kubernetes
     options:
@@ -89,14 +89,14 @@ applications:
       gui-x: -300
       gui-y: 250
   ng-ui:
-    charm: "cs:~charmed-osm/ng-ui-24"
+    charm: "cs:~charmed-osm/ng-ui-25"
     scale: 1
     series: kubernetes
     annotations:
       gui-x: 600
       gui-y: 0
   lcm:
-    charm: "cs:~charmed-osm/lcm-14"
+    charm: "cs:~charmed-osm/lcm-15"
     scale: 1
     series: kubernetes
     options:
@@ -106,7 +106,7 @@ applications:
       gui-x: -300
       gui-y: 0
   mon:
-    charm: "cs:~charmed-osm/mon-11"
+    charm: "cs:~charmed-osm/mon-12"
     scale: 1
     series: kubernetes
     options:
@@ -117,7 +117,7 @@ applications:
       gui-x: 300
       gui-y: 0
   pol:
-    charm: "cs:~charmed-osm/pol-9"
+    charm: "cs:~charmed-osm/pol-10"
     scale: 1
     series: kubernetes
     options:
@@ -126,7 +126,7 @@ applications:
       gui-x: -300
       gui-y: 500
   pla:
-    charm: "cs:~charmed-osm/pla-12"
+    charm: "cs:~charmed-osm/pla-13"
     scale: 1
     series: kubernetes
     options:
@@ -135,7 +135,7 @@ applications:
       gui-x: 600
       gui-y: -250
   prometheus:
-    charm: "cs:~charmed-osm/prometheus-8"
+    charm: "cs:~charmed-osm/prometheus-9"
     scale: 1
     series: kubernetes
     storage:
@@ -146,14 +146,14 @@ applications:
       gui-x: 300
       gui-y: 250
   grafana:
-    charm: "cs:~charmed-osm/grafana-9"
+    charm: "cs:~charmed-osm/grafana-10"
     scale: 1
     series: kubernetes
     annotations:
       gui-x: 300
       gui-y: 500
   keystone:
-    charm: "cs:~charmed-osm/keystone-15"
+    charm: "cs:~charmed-osm/keystone-16"
     scale: 1
     series: kubernetes
     annotations:
diff --git a/installers/charm/lcm/config.yaml b/installers/charm/lcm/config.yaml
index 0f218ea9890969c379c06f1c5e5f9be1e3d627b5..709a8ca63691132ffb835f391d77ec6833d8f009 100644
--- a/installers/charm/lcm/config.yaml
+++ b/installers/charm/lcm/config.yaml
@@ -291,6 +291,27 @@ options:
     description: |
       Public SSH key that will be injected to the application pod.
     type: string
+  debug_lcm_local_path:
+    description: |
+      Local full path to the LCM project.
+
+      The path will be mounted to the docker image,
+      which means changes during the debugging will be saved in your local path.
+    type: string
+  debug_n2vc_local_path:
+    description: |
+      Local full path to the N2VC project.
+
+      The path will be mounted to the docker image,
+      which means changes during the debugging will be saved in your local path.
+    type: string
+  debug_common_local_path:
+    description: |
+      Local full path to the COMMON project.
+
+      The path will be mounted to the docker image,
+      which means changes during the debugging will be saved in your local path.
+    type: string
   security_context:
     description: Enables the security context of the pods
     type: boolean
diff --git a/installers/charm/lcm/src/charm.py b/installers/charm/lcm/src/charm.py
index aac1813a9bc4eb4ca26738145318c8351009325c..4a10f5c7d9df968561155d9c45ce7911228f9eb6 100755
--- a/installers/charm/lcm/src/charm.py
+++ b/installers/charm/lcm/src/charm.py
@@ -144,10 +144,26 @@ class LcmCharm(CharmedOsmBase):
         super().__init__(
             *args,
             oci_image="image",
-            debug_mode_config_key="debug_mode",
-            debug_pubkey_config_key="debug_pubkey",
             vscode_workspace=VSCODE_WORKSPACE,
         )
+        if self.config.get("debug_mode"):
+            self.enable_debug_mode(
+                pubkey=self.config.get("debug_pubkey"),
+                hostpaths={
+                    "LCM": {
+                        "hostpath": self.config.get("debug_lcm_local_path"),
+                        "container-path": "/usr/lib/python3/dist-packages/osm_lcm",
+                    },
+                    "N2VC": {
+                        "hostpath": self.config.get("debug_n2vc_local_path"),
+                        "container-path": "/usr/lib/python3/dist-packages/n2vc",
+                    },
+                    "osm_common": {
+                        "hostpath": self.config.get("debug_common_local_path"),
+                        "container-path": "/usr/lib/python3/dist-packages/osm_common",
+                    },
+                },
+            )
         self.kafka_client = KafkaClient(self, "kafka")
         self.framework.observe(self.on["kafka"].relation_changed, self.configure_pod)
         self.framework.observe(self.on["kafka"].relation_broken, self.configure_pod)
diff --git a/installers/charm/mon/config.yaml b/installers/charm/mon/config.yaml
index a3394ffaf42ff19b50fa26a3731681e75af9cff7..3d90286536f3b94ac10f4ffd39fa9a17ffe27541 100644
--- a/installers/charm/mon/config.yaml
+++ b/installers/charm/mon/config.yaml
@@ -104,6 +104,27 @@ options:
     description: |
       Public SSH key that will be injected to the application pod.
     type: string
+  debug_mon_local_path:
+    description: |
+      Local full path to the MON project.
+
+      The path will be mounted to the docker image,
+      which means changes during the debugging will be saved in your local path.
+    type: string
+  debug_n2vc_local_path:
+    description: |
+      Local full path to the N2VC project.
+
+      The path will be mounted to the docker image,
+      which means changes during the debugging will be saved in your local path.
+    type: string
+  debug_common_local_path:
+    description: |
+      Local full path to the COMMON project.
+
+      The path will be mounted to the docker image,
+      which means changes during the debugging will be saved in your local path.
+    type: string
   security_context:
     description: Enables the security context of the pods
     type: boolean
diff --git a/installers/charm/mon/src/charm.py b/installers/charm/mon/src/charm.py
index 85d1fa4ecacaaa97ba40356dd0ad217bcd1b1f84..7833deb00f444687d2f9e861bf0f73929aa4a016 100755
--- a/installers/charm/mon/src/charm.py
+++ b/installers/charm/mon/src/charm.py
@@ -129,11 +129,26 @@ class MonCharm(CharmedOsmBase):
         super().__init__(
             *args,
             oci_image="image",
-            debug_mode_config_key="debug_mode",
-            debug_pubkey_config_key="debug_pubkey",
             vscode_workspace=VSCODE_WORKSPACE,
         )
-
+        if self.config.get("debug_mode"):
+            self.enable_debug_mode(
+                pubkey=self.config.get("debug_pubkey"),
+                hostpaths={
+                    "MON": {
+                        "hostpath": self.config.get("debug_mon_local_path"),
+                        "container-path": "/usr/lib/python3/dist-packages/osm_mon",
+                    },
+                    "N2VC": {
+                        "hostpath": self.config.get("debug_n2vc_local_path"),
+                        "container-path": "/usr/lib/python3/dist-packages/n2vc",
+                    },
+                    "osm_common": {
+                        "hostpath": self.config.get("debug_common_local_path"),
+                        "container-path": "/usr/lib/python3/dist-packages/osm_common",
+                    },
+                },
+            )
         self.kafka_client = KafkaClient(self, "kafka")
         self.framework.observe(self.on["kafka"].relation_changed, self.configure_pod)
         self.framework.observe(self.on["kafka"].relation_broken, self.configure_pod)
diff --git a/installers/charm/nbi/config.yaml b/installers/charm/nbi/config.yaml
index a85aa70dcf0ee80d609816175318631df1730f7e..f10304fedb0cbd487547d7951d11a03efd3cb734 100644
--- a/installers/charm/nbi/config.yaml
+++ b/installers/charm/nbi/config.yaml
@@ -89,6 +89,20 @@ options:
     description: |
       Public SSH key that will be injected to the application pod.
     type: string
+  debug_nbi_local_path:
+    description: |
+      Local full path to the NBI project.
+
+      The path will be mounted to the docker image,
+      which means changes during the debugging will be saved in your local path.
+    type: string
+  debug_common_local_path:
+    description: |
+      Local full path to the COMMON project.
+
+      The path will be mounted to the docker image,
+      which means changes during the debugging will be saved in your local path.
+    type: string
   security_context:
     description: Enables the security context of the pods
     type: boolean
diff --git a/installers/charm/nbi/src/charm.py b/installers/charm/nbi/src/charm.py
index c6a7c1eab9e5eaf51418d9457a7d4c16f67e4c61..faba78ab2993089d33af9a6f16fbe4212ff7a3f8 100755
--- a/installers/charm/nbi/src/charm.py
+++ b/installers/charm/nbi/src/charm.py
@@ -122,10 +122,22 @@ class NbiCharm(CharmedOsmBase):
         super().__init__(
             *args,
             oci_image="image",
-            debug_mode_config_key="debug_mode",
-            debug_pubkey_config_key="debug_pubkey",
             vscode_workspace=VSCODE_WORKSPACE,
         )
+        if self.config.get("debug_mode"):
+            self.enable_debug_mode(
+                pubkey=self.config.get("debug_pubkey"),
+                hostpaths={
+                    "NBI": {
+                        "hostpath": self.config.get("debug_nbi_local_path"),
+                        "container-path": "/usr/lib/python3/dist-packages/osm_nbi",
+                    },
+                    "osm_common": {
+                        "hostpath": self.config.get("debug_common_local_path"),
+                        "container-path": "/usr/lib/python3/dist-packages/osm_common",
+                    },
+                },
+            )
 
         self.kafka_client = KafkaClient(self, "kafka")
         self.framework.observe(self.on["kafka"].relation_changed, self.configure_pod)
diff --git a/installers/charm/pol/config.yaml b/installers/charm/pol/config.yaml
index 0279bd5e23639b0ea4cb9c2684bdf4bb1e939328..a2eef474a72cecbfdf68d82adcd6342880a5503f 100644
--- a/installers/charm/pol/config.yaml
+++ b/installers/charm/pol/config.yaml
@@ -49,6 +49,20 @@ options:
     description: |
       Public SSH key that will be injected to the application pod.
     type: string
+  debug_pol_local_path:
+    description: |
+      Local full path to the POL project.
+
+      The path will be mounted to the docker image,
+      which means changes during the debugging will be saved in your local path.
+    type: string
+  debug_common_local_path:
+    description: |
+      Local full path to the COMMON project.
+
+      The path will be mounted to the docker image,
+      which means changes during the debugging will be saved in your local path.
+    type: string
   security_context:
     description: Enables the security context of the pods
     type: boolean
diff --git a/installers/charm/pol/src/charm.py b/installers/charm/pol/src/charm.py
index 1ac1aa8456cbcb637edae0bf0c279dc65d3efdd8..e2fcdb3eb95d0dd11bcb388a9cc7fb293281e85b 100755
--- a/installers/charm/pol/src/charm.py
+++ b/installers/charm/pol/src/charm.py
@@ -91,11 +91,22 @@ class PolCharm(CharmedOsmBase):
         super().__init__(
             *args,
             oci_image="image",
-            debug_mode_config_key="debug_mode",
-            debug_pubkey_config_key="debug_pubkey",
             vscode_workspace=VSCODE_WORKSPACE,
         )
-
+        if self.config.get("debug_mode"):
+            self.enable_debug_mode(
+                pubkey=self.config.get("debug_pubkey"),
+                hostpaths={
+                    "POL": {
+                        "hostpath": self.config.get("debug_pol_local_path"),
+                        "container-path": "/usr/lib/python3/dist-packages/osm_policy_module",
+                    },
+                    "osm_common": {
+                        "hostpath": self.config.get("debug_common_local_path"),
+                        "container-path": "/usr/lib/python3/dist-packages/osm_common",
+                    },
+                },
+            )
         self.kafka_client = KafkaClient(self, "kafka")
         self.framework.observe(self.on["kafka"].relation_changed, self.configure_pod)
         self.framework.observe(self.on["kafka"].relation_broken, self.configure_pod)
diff --git a/installers/charm/ro/config.yaml b/installers/charm/ro/config.yaml
index ab4cd5d8c559648319cfb6718b462d267db57106..8c5740a65f479678a3d89ed1c83d5d63df1edb30 100644
--- a/installers/charm/ro/config.yaml
+++ b/installers/charm/ro/config.yaml
@@ -87,6 +87,20 @@ options:
     description: |
       Public SSH key that will be injected to the application pod.
     type: string
+  debug_ro_local_path:
+    description: |
+      Local full path to the RO project.
+
+      The path will be mounted to the docker image,
+      which means changes during the debugging will be saved in your local path.
+    type: string
+  debug_common_local_path:
+    description: |
+      Local full path to the COMMON project.
+
+      The path will be mounted to the docker image,
+      which means changes during the debugging will be saved in your local path.
+    type: string
   security_context:
     description: Enables the security context of the pods
     type: boolean
diff --git a/installers/charm/ro/src/charm.py b/installers/charm/ro/src/charm.py
index e9642d3919edf42e5ab6ca9145489b56c6b27da4..099c55921368def3e1be0e20aa17d3a4c929c065 100755
--- a/installers/charm/ro/src/charm.py
+++ b/installers/charm/ro/src/charm.py
@@ -24,7 +24,7 @@
 
 import base64
 import logging
-from typing import NoReturn, Optional
+from typing import Dict, NoReturn, Optional
 
 from ops.main import main
 from opslib.osm.charm import CharmedOsmBase, RelationsMissing
@@ -131,11 +131,19 @@ class RoCharm(CharmedOsmBase):
         super().__init__(
             *args,
             oci_image="image",
-            debug_mode_config_key="debug_mode",
-            debug_pubkey_config_key="debug_pubkey",
             vscode_workspace=VSCODE_WORKSPACE,
         )
-
+        if self.config.get("debug_mode"):
+            self.enable_debug_mode(
+                pubkey=self.config.get("debug_pubkey"),
+                hostpaths={
+                    "osm_common": {
+                        "hostpath": self.config.get("debug_common_local_path"),
+                        "container-path": "/usr/lib/python3/dist-packages/osm_common",
+                    },
+                    **_get_ro_host_paths(self.config.get("debug_ro_local_path")),
+                },
+            )
         self.kafka_client = KafkaClient(self, "kafka")
         self.framework.observe(self.on["kafka"].relation_changed, self.configure_pod)
         self.framework.observe(self.on["kafka"].relation_broken, self.configure_pod)
@@ -363,5 +371,92 @@ VSCODE_WORKSPACE = {
     "settings": {},
 }
 
+
+def _get_ro_host_paths(ro_host_path: str) -> Dict:
+    """Get RO host paths"""
+    return (
+        {
+            "NG-RO": {
+                "hostpath": f"{ro_host_path}/NG-RO",
+                "container-path": "/usr/lib/python3/dist-packages/osm_ng_ro",
+            },
+            "RO-plugin": {
+                "hostpath": f"{ro_host_path}/RO-plugin",
+                "container-path": "/usr/lib/python3/dist-packages/osm_ro_plugin",
+            },
+            "RO-SDN-arista_cloudvision": {
+                "hostpath": f"{ro_host_path}/RO-SDN-arista_cloudvision",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_arista_cloudvision",
+            },
+            "RO-SDN-dpb": {
+                "hostpath": f"{ro_host_path}/RO-SDN-dpb",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_dpb",
+            },
+            "RO-SDN-dynpac": {
+                "hostpath": f"{ro_host_path}/RO-SDN-dynpac",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_dynpac",
+            },
+            "RO-SDN-floodlight_openflow": {
+                "hostpath": f"{ro_host_path}/RO-SDN-floodlight_openflow",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_floodlightof",
+            },
+            "RO-SDN-ietfl2vpn": {
+                "hostpath": f"{ro_host_path}/RO-SDN-ietfl2vpn",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_ietfl2vpn",
+            },
+            "RO-SDN-juniper_contrail": {
+                "hostpath": f"{ro_host_path}/RO-SDN-juniper_contrail",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_juniper_contrail",
+            },
+            "RO-SDN-odl_openflow": {
+                "hostpath": f"{ro_host_path}/RO-SDN-odl_openflow",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_odlof",
+            },
+            "RO-SDN-onos_openflow": {
+                "hostpath": f"{ro_host_path}/RO-SDN-onos_openflow",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_onosof",
+            },
+            "RO-SDN-onos_vpls": {
+                "hostpath": f"{ro_host_path}/RO-SDN-onos_vpls",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_onos_vpls",
+            },
+            "RO-VIM-aws": {
+                "hostpath": f"{ro_host_path}/RO-VIM-aws",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rovim_aws",
+            },
+            "RO-VIM-azure": {
+                "hostpath": f"{ro_host_path}/RO-VIM-azure",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rovim_azure",
+            },
+            "RO-VIM-gcp": {
+                "hostpath": f"{ro_host_path}/RO-VIM-gcp",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rovim_gcp",
+            },
+            "RO-VIM-fos": {
+                "hostpath": f"{ro_host_path}/RO-VIM-fos",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rovim_fos",
+            },
+            "RO-VIM-opennebula": {
+                "hostpath": f"{ro_host_path}/RO-VIM-opennebula",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rovim_opennebula",
+            },
+            "RO-VIM-openstack": {
+                "hostpath": f"{ro_host_path}/RO-VIM-openstack",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rovim_openstack",
+            },
+            "RO-VIM-openvim": {
+                "hostpath": f"{ro_host_path}/RO-VIM-openvim",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rovim_openvim",
+            },
+            "RO-VIM-vmware": {
+                "hostpath": f"{ro_host_path}/RO-VIM-vmware",
+                "container-path": "/usr/lib/python3/dist-packages/osm_rovim_vmware",
+            },
+        }
+        if ro_host_path
+        else {}
+    )
+
+
 if __name__ == "__main__":
     main(RoCharm)
diff --git a/installers/charm/update-bundle-revisions.sh b/installers/charm/update-bundle-revisions.sh
new file mode 100755
index 0000000000000000000000000000000000000000..1a8d8cb2820ec043a62aeb8017cd348c41e2b3e2
--- /dev/null
+++ b/installers/charm/update-bundle-revisions.sh
@@ -0,0 +1,35 @@
+##
+# Copyright 2019 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.
+##
+
+charms=`cat bundles/osm/bundle.yaml  | grep cs | grep -v k8s | awk '{print $2}' | tr -d \"`
+for charm_uri in $charms; do
+    charm_without_rev=`echo $charm_uri| rev | cut -d "-" -f 2-5 | rev`
+    latest_revision=`charm show --channel edge $charm_without_rev | grep Revision | awk '{print $2}'`
+    new_charm_uri=$charm_without_rev-$latest_revision
+    old_uri=`echo $charm_uri | sed 's/\//\\\\\//g'`
+    new_uri=`echo $new_charm_uri | sed 's/\//\\\\\//g'`
+    sed -i "s/"$old_uri"/"$new_uri"/g" bundles/osm/bundle.yaml
+done
+
+charms=`cat bundles/osm-ha/bundle.yaml  | grep cs | grep -v k8s | awk '{print $2}' | tr -d \"`
+for charm_uri in $charms; do
+    charm_without_rev=`echo $charm_uri| rev | cut -d "-" -f 2-5 | rev`
+    latest_revision=`charm show --channel edge $charm_without_rev | grep Revision | awk '{print $2}'`
+    new_charm_uri=$charm_without_rev-$latest_revision
+    old_uri=`echo $charm_uri | sed 's/\//\\\\\//g'`
+    new_uri=`echo $new_charm_uri | sed 's/\//\\\\\//g'`
+    sed -i "s/"$old_uri"/"$new_uri"/g" bundles/osm-ha/bundle.yaml
+done
\ No newline at end of file
diff --git a/tools/debug/charmed/README.md b/tools/debug/charmed/README.md
index 1330454f19a6290db0e1c5c81b0fb34040f6ddfd..93bf7ee63b5a833bf5395b6b48151df3a50cc0cd 100644
--- a/tools/debug/charmed/README.md
+++ b/tools/debug/charmed/README.md
@@ -30,6 +30,7 @@ Benefits:
 - Easily configure modules for debugging_mode: `juju config <module> debug_mode=True debug_pubkey="ssh-rsa ..."`.
 - Debug in K8s: All pods (the debugged ones and the rest) will be running always in K8s.
 - Seemless setup: VSCode will connect through SSH to the pods.
+- Keep your changes save: Possibility to mount local module to the container; all the changes will be saved automatically to your local filesystem.
 
 ## Install OSM
 
@@ -56,25 +57,64 @@ Install OSM from a specific tag:
 
 Once the Charmed OSM installation has finished, you can select which applications you want to run with the debug mode.
 
-- lcm: `juju config lcm debug_mode=True  debug_pubkey="ssh-rsa ..."`
-- mon: `juju config mon debug_mode=True debug_pubkey="ssh-rsa ..."`
-- nbi: `juju config nbi debug_mode=True debug_pubkey="ssh-rsa ..."`
-- ro: `juju config ro debug_mode=True debug_pubkey="ssh-rsa ..."`
-- pol: `juju config pol debug_mode=True debug_pubkey="ssh-rsa ..."`
+```bash
+# LCM
+juju config lcm debug_mode=True  debug_pubkey="`cat ~/.ssh/id_rsa.pub`"
+# MON
+juju config mon debug_mode=True  debug_pubkey="`cat ~/.ssh/id_rsa.pub`"
+# NBI
+juju config nbi debug_mode=True  debug_pubkey="`cat ~/.ssh/id_rsa.pub`"
+# RO
+juju config ro debug_mode=True  debug_pubkey="`cat ~/.ssh/id_rsa.pub`"
+# POL
+juju config pol debug_mode=True  debug_pubkey="`cat ~/.ssh/id_rsa.pub`"
+```
 
 Enabling the debug_mode will put a `sleep infinity` as the entrypoint of the container. That way, we can later connect to the pod through SSH in VSCode, and run the entrypoint of the application from the debugger.
 
-### Prepare pods
+### Mounting local modules
+
+The Charmed OSM Debugging mode allows you to mount local modules to the desired charms. The following commands show which modules can be mounted in each charm.
+
+```bash
+LCM_LOCAL_PATH="/path/to/LCM"
+N2VC_LOCAL_PATH="/path/to/N2VC"
+NBI_LOCAL_PATH="/path/to/NBI"
+RO_LOCAL_PATH="/path/to/RO"
+MON_LOCAL_PATH="/path/to/MON"
+POL_LOCAL_PATH="/path/to/POL"
+COMMON_LOCAL_PATH="/path/to/common"
+
+# LCM
+juju config lcm debug_lcm_local_path=$LCM_LOCAL_PATH
+juju config lcm debug_n2vc_local_path=$N2VC_LOCAL_PATH
+juju config lcm debug_common_local_path=$COMMON_LOCAL_PATH
+# MON
+juju config mon debug_mon_local_path=$MON_LOCAL_PATH
+juju config mon debug_n2vc_local_path=$N2VC_LOCAL_PATH
+juju config mon debug_common_local_path=$COMMON_LOCAL_PATH
+# NBI
+juju config nbi debug_nbi_local_path=$LCM_LOCAL_PATH
+juju config nbi debug_common_local_path=$COMMON_LOCAL_PATH
+# RO
+juju config ro debug_ro_local_path=$RO_LOCAL_PATH
+juju config ro debug_common_local_path=$COMMON_LOCAL_PATH
+# POL
+juju config pol debug_pol_local_path=$POL_LOCAL_PATH
+juju config pol debug_common_local_path=$COMMON_LOCAL_PATH
+```
 
-Preparing the pods includes setting up the ~/.ssh/config so the VSCode can easily discover which ssh hosts are available
+### Generate SSH config file
+
+Preparing the pods includes setting up the `~/.ssh/config` so the VSCode can easily discover which ssh hosts are available
 
 Just execute:
 
 ```bash
-./prepare_pods.sh
+./generate_ssh_config.sh
 ```
 
-> NOTE: The public key that will be used will be `$HOME/.ssh/id_rsa.pub`. If you want to use a different one, add the absolute path to it as a first argument: `./prepare_pods.sh /path/to/key.pub`.
+> NOTE: The public key that will be used will be `$HOME/.ssh/id_rsa.pub`. If you want to use a different one, add the absolute path to it as a first argument: `./generate_ssh_config.sh /path/to/key.pub`.
 
 ### Connect to Pods
 
@@ -92,22 +132,16 @@ Right click on the host, and "Connect to host in a New Window".
 
 ### Add workspace
 
-The `./prepare_pods.sh` script adds a workspace to the `/root` folder of each pod, with the following name: `<module>.code-workspace`.
+The `./generate_ssh_config.sh` script adds a workspace to the `/root` folder of each pod, with the following name: `debug.code-workspace`.
 
-In the window of the connected host, go to `File/Open Workspace...`. Then select the `<module>.code-workspace` file.
+In the window of the connected host, go to `File/Open Workspace from File...`. Then select the `debug.code-workspace` file.
 
 ### Run and Debug
 
-Go to extensions and install the Python extension. It will be installed in the remote pod.
-
-Now we need to add a [debug configuration](https://code.visualstudio.com/docs/editor/debugging). For that, go to the Run and Debug tab, and click on `create a launch.json file`.
+Open the `Terminal` tab, and the Python extension will be automatically downloaded. It will be installed in the remote pod.
 
-Now you will be asked to select a folder in your workspace. Select the folder of the main component:
+Go to the `Explorer (ctrl + shift + E)` to see the module folders in the charm. You can add breakpoints and start debugging. 
 
-- LCM: select osm_lcm
-- MON: select osm_mon
-- NBI: select osm_nbi
-- RO: select osm_ng_ro
-- POL: select osm_policy_module
+Go to the `Run and Debug (ctrl + shift + D)` and press `F5` to start the main entrypoint of the charm.
 
-Then select `Python` as the environment. And finally, select `Module` and enter the module of the component you are going to test (LCM example: osm_lcm.lcm)
+Happy debugging!
diff --git a/tools/debug/charmed/prepare_pods.sh b/tools/debug/charmed/generate_ssh_config.sh
similarity index 100%
rename from tools/debug/charmed/prepare_pods.sh
rename to tools/debug/charmed/generate_ssh_config.sh