diff --git a/installers/charm/pla/src/charm.py b/installers/charm/pla/src/charm.py
index b94d62b..f90b407 100755
--- a/installers/charm/pla/src/charm.py
+++ b/installers/charm/pla/src/charm.py
@@ -24,6 +24,7 @@
 from ops.model import (
     ActiveStatus,
     MaintenanceStatus,
+    WaitingStatus,
 )
 
 from glob import glob
@@ -39,49 +40,76 @@
     def __init__(self, framework, key):
         super().__init__(framework, key)
         self.state.set_default(spec=None)
+        self.state.set_default(kafka_host=None)
+        self.state.set_default(kafka_port=None)
+        self.state.set_default(mongodb_uri=None)
+        self.state.set_default(mysql_host=None)
+        self.state.set_default(mysql_port=None)
 
         # Observe Charm related events
         self.framework.observe(self.on.config_changed, self.on_config_changed)
         self.framework.observe(self.on.start, self.on_start)
         self.framework.observe(self.on.upgrade_charm, self.on_upgrade_charm)
 
+        # Relations
+        self.framework.observe(
+            self.on.kafka_relation_changed, self.on_kafka_relation_changed
+        )
+        self.framework.observe(
+            self.on.mongo_relation_changed, self.on_mongo_relation_changed
+        )
+        self.framework.observe(
+            self.on.mysql_relation_changed, self.on_mysql_relation_changed
+        )
+
     def _apply_spec(self):
         # Only apply the spec if this unit is a leader.
-        if not self.framework.model.unit.is_leader():
+        unit = self.model.unit
+        if not unit.is_leader():
+            unit.status = ActiveStatus("Ready")
             return
+        if not self.state.kafka_host or not self.state.kafka_port:
+            unit.status = WaitingStatus("Waiting for Kafka")
+            return
+        if not self.state.mongodb_uri:
+            unit.status = WaitingStatus("Waiting for MongoDB")
+            return
+        if not self.state.mysql_host or not self.state.mysql_port:
+            unit.status = WaitingStatus("Waiting for MySQL")
+            return
+
+        unit.status = MaintenanceStatus("Applying new pod spec")
+
         new_spec = self.make_pod_spec()
         if new_spec == self.state.spec:
+            unit.status = ActiveStatus("Ready")
             return
         self.framework.model.pod.set_spec(new_spec)
         self.state.spec = new_spec
+        unit.status = ActiveStatus("Ready")
 
     def make_pod_spec(self):
         config = self.framework.model.config
 
+        mysql_uri = "mysql://root:{}@{}:{}/{}".format(
+            self.state.mysql_root_password,
+            self.state.mysql_host,
+            self.state.mysql_port,
+            self.state.mysql_database,
+        )
         ports = [
             {"name": "port", "containerPort": config["port"], "protocol": "TCP",},
         ]
 
-        kubernetes = {
-            "readinessProbe": {
-                "tcpSocket": {"port": config["port"]},
-                "timeoutSeconds": 5,
-                "periodSeconds": 5,
-                "initialDelaySeconds": 10,
-            },
-            "livenessProbe": {
-                "tcpSocket": {"port": config["port"]},
-                "timeoutSeconds": 5,
-                "initialDelaySeconds": 45,
-            },
-        }
         config_spec = {
             "OSMPLA_MESSAGE_DRIVER": "kafka",
-            "OSMPLA_MESSAGE_HOST": config["kafka_host"],
-            "OSMPLA_MESSAGE_PORT": config["kafka_port"],
+            "OSMPLA_MESSAGE_HOST": self.state.kafka_host,
+            "OSMPLA_MESSAGE_PORT": self.state.kafka_port,
             "OSMPLA_DATABASE_DRIVER": "mongo",
-            "OSMPLA_DATABASE_URI": config["mongo_uri"],
+            "OSMPLA_DATABASE_URI": self.state.mongodb_uri,
             "OSMPLA_GLOBAL_LOG_LEVEL": config["log_level"],
+            "OSMPLA_SQL_DATABASE_URI": mysql_uri,
+            "OSMPLA_DATABASE_COMMONKEY": config["database_common_key"],
         }
 
         spec = {
@@ -89,9 +117,8 @@
             "containers": [
                 {
                     "name": self.framework.model.app.name,
-                    "image": "{}".format(config["image"]),
+                    "image": config["image"],
                     "ports": ports,
-                    "kubernetes": kubernetes,
                     "config": config_spec,
                 }
             ],
@@ -101,17 +128,11 @@
 
     def on_config_changed(self, event):
         """Handle changes in configuration"""
-        unit = self.model.unit
-        unit.status = MaintenanceStatus("Applying new pod spec")
         self._apply_spec()
-        unit.status = ActiveStatus("Ready")
 
     def on_start(self, event):
         """Called when the charm is being installed"""
-        unit = self.model.unit
-        unit.status = MaintenanceStatus("Applying pod spec")
         self._apply_spec()
-        unit.status = ActiveStatus("Ready")
 
     def on_upgrade_charm(self, event):
         """Upgrade the charm."""
@@ -119,6 +140,34 @@
         unit.status = MaintenanceStatus("Upgrading charm")
         self.on_start(event)
 
+    def on_kafka_relation_changed(self, event):
+        unit = self.model.unit
+        if not unit.is_leader():
+            return
+        self.state.kafka_host = event.relation.data[event.unit].get("host")
+        self.state.kafka_port = event.relation.data[event.unit].get("port")
+        self._apply_spec()
+
+    def on_mongo_relation_changed(self, event):
+        unit = self.model.unit
+        if not unit.is_leader():
+            return
+        self.state.mongodb_uri = event.relation.data[event.unit].get(
+            "connection_string"
+        )
+        self._apply_spec()
+
+    def on_mysql_relation_changed(self, event):
+        unit = self.model.unit
+        if not unit.is_leader():
+            return
+        unit_data = event.relation.data[event.unit]
+        self.state.mysql_host = unit_data.get("host")
+        self.state.mysql_port = unit_data.get("port")
+        self.state.mysql_root_password = unit_data.get("root_password")
+        self.state.mysql_database = self.model.config["database"]
+        self._apply_spec()
+
 
 if __name__ == "__main__":
     main(PLACharm)
