diff --git a/installers/charm/osm-mon/src/charm.py b/installers/charm/osm-mon/src/charm.py
index 176f896..db72dfe 100755
--- a/installers/charm/osm-mon/src/charm.py
+++ b/installers/charm/osm-mon/src/charm.py
@@ -22,7 +22,7 @@
 #
 # Learn more at: https://juju.is/docs/sdk
 
-"""OSM NBI charm.
+"""OSM MON charm.
 
 See more: https://charmhub.io/osm
 """
@@ -30,6 +30,7 @@
 import logging
 from typing import Any, Dict
 
+from charms.data_platform_libs.v0.data_interfaces import DatabaseRequires
 from charms.kafka_k8s.v0.kafka import KafkaRequires, _KafkaAvailableEvent
 from charms.observability_libs.v1.kubernetes_service_patch import KubernetesServicePatch
 from charms.osm_libs.v0.utils import (
@@ -46,7 +47,7 @@
 from ops.main import main
 from ops.model import ActiveStatus, Container
 
-from legacy_interfaces import KeystoneClient, MongoClient, PrometheusClient
+from legacy_interfaces import KeystoneClient, PrometheusClient
 
 HOSTPATHS = [
     HostPath(
@@ -85,7 +86,7 @@
     def __init__(self, *args):
         super().__init__(*args)
         self.kafka = KafkaRequires(self)
-        self.mongodb_client = MongoClient(self, "mongodb")
+        self.mongodb_client = DatabaseRequires(self, "mongodb", database_name="osm")
         self.prometheus_client = PrometheusClient(self, "prometheus")
         self.keystone_client = KeystoneClient(self, "keystone")
         self.vca = VcaRequires(self)
@@ -151,9 +152,7 @@
     def _on_get_debug_mode_information_action(self, event: ActionEvent) -> None:
         """Handler for the get-debug-mode-information action event."""
         if not self.debug_mode.started:
-            event.fail(
-                "debug-mode has not started. Hint: juju config mon debug-mode=true"
-            )
+            event.fail("debug-mode has not started. Hint: juju config mon debug-mode=true")
             return
 
         debug_info = {
@@ -176,20 +175,24 @@
             self.on.vca_data_changed: self._on_config_changed,
             self.on.kafka_available: self._on_config_changed,
             self.on["kafka"].relation_broken: self._on_required_relation_broken,
+            self.mongodb_client.on.database_created: self._on_config_changed,
+            self.on["mongodb"].relation_broken: self._on_required_relation_broken,
             # Action events
             self.on.get_debug_mode_information_action: self._on_get_debug_mode_information_action,
         }
-        for relation in [
-            self.on[rel_name] for rel_name in ["mongodb", "prometheus", "keystone"]
-        ]:
+        for relation in [self.on[rel_name] for rel_name in ["prometheus", "keystone"]]:
             event_handler_mapping[relation.relation_changed] = self._on_config_changed
-            event_handler_mapping[
-                relation.relation_broken
-            ] = self._on_required_relation_broken
+            event_handler_mapping[relation.relation_broken] = self._on_required_relation_broken
 
         for event, handler in event_handler_mapping.items():
             self.framework.observe(event, handler)
 
+    def _is_database_available(self) -> bool:
+        try:
+            return self.mongodb_client.is_resource_created()
+        except KeyError:
+            return False
+
     def _validate_config(self) -> None:
         """Validate charm configuration.
 
@@ -209,7 +212,7 @@
 
         if not self.kafka.host or not self.kafka.port:
             missing_relations.append("kafka")
-        if self.mongodb_client.is_missing_data_in_unit():
+        if not self._is_database_available():
             missing_relations.append("mongodb")
         if self.prometheus_client.is_missing_data_in_app():
             missing_relations.append("prometheus")
@@ -219,9 +222,7 @@
         if missing_relations:
             relations_str = ", ".join(missing_relations)
             one_relation_missing = len(missing_relations) == 1
-            error_msg = (
-                f'need {relations_str} relation{"" if one_relation_missing else "s"}'
-            )
+            error_msg = f'need {relations_str} relation{"" if one_relation_missing else "s"}'
             logger.warning(error_msg)
             raise CharmError(error_msg)
 
@@ -236,9 +237,7 @@
         environment = {
             # General configuration
             "OSMMON_GLOBAL_LOGLEVEL": self.config["log-level"],
-            "OSMMON_OPENSTACK_DEFAULT_GRANULARITY": self.config[
-                "openstack-default-granularity"
-            ],
+            "OSMMON_OPENSTACK_DEFAULT_GRANULARITY": self.config["openstack-default-granularity"],
             "OSMMON_GLOBAL_REQUEST_TIMEOUT": self.config["global-request-timeout"],
             "OSMMON_COLLECTOR_INTERVAL": self.config["collector-interval"],
             "OSMMON_EVALUATOR_INTERVAL": self.config["evaluator-interval"],
@@ -249,7 +248,7 @@
             "OSMMON_MESSAGE_PORT": self.kafka.port,
             # Database configuration
             "OSMMON_DATABASE_DRIVER": "mongo",
-            "OSMMON_DATABASE_URI": self.mongodb_client.connection_string,
+            "OSMMON_DATABASE_URI": self._get_mongodb_uri(),
             "OSMMON_DATABASE_COMMONKEY": self.config["database-commonkey"],
             # Prometheus/grafana configuration
             "OSMMON_PROMETHEUS_URL": f"http://{self.prometheus_client.hostname}:{self.prometheus_client.port}",
@@ -288,6 +287,9 @@
             },
         }
 
+    def _get_mongodb_uri(self):
+        return list(self.mongodb_client.fetch_relation_data().values())[0]["uris"]
+
     def _patch_k8s_service(self) -> None:
         port = ServicePort(SERVICE_PORT, name=f"{self.app.name}")
         self.service_patcher = KubernetesServicePatch(self, [port])
