diff --git a/installers/charm/mon/requirements.txt b/installers/charm/mon/requirements.txt
index 24f1672..a26601f 100644
--- a/installers/charm/mon/requirements.txt
+++ b/installers/charm/mon/requirements.txt
@@ -20,5 +20,4 @@
 ##
 
 ops
-pydantic
 git+https://github.com/juju-solutions/resource-oci-image/@c5778285d332edf3d9a538f9d0c06154b7ec1b0b#egg=oci-image
diff --git a/installers/charm/mon/src/charm.py b/installers/charm/mon/src/charm.py
index a6f405f..f51213d 100755
--- a/installers/charm/mon/src/charm.py
+++ b/installers/charm/mon/src/charm.py
@@ -21,7 +21,6 @@
 ##
 
 import logging
-from pydantic import ValidationError
 from typing import Any, Dict, NoReturn
 
 from ops.charm import CharmBase, CharmEvents
@@ -112,10 +111,8 @@
         Args:
             event (EventBase): Kafka relation event.
         """
-        data_loc = event.unit if event.unit else event.app
-
-        message_host = event.relation.data[data_loc].get("host")
-        message_port = event.relation.data[data_loc].get("port")
+        message_host = event.relation.data[event.unit].get("host")
+        message_port = event.relation.data[event.unit].get("port")
 
         if (
             message_host
@@ -145,9 +142,7 @@
         Args:
             event (EventBase): DB relation event.
         """
-        data_loc = event.unit if event.unit else event.app
-
-        database_uri = event.relation.data[data_loc].get("connection_string")
+        database_uri = event.relation.data[event.unit].get("connection_string")
 
         if database_uri and self.state.database_uri != database_uri:
             self.state.database_uri = database_uri
@@ -168,10 +163,8 @@
         Args:
             event (EventBase): Prometheus relation event.
         """
-        data_loc = event.unit if event.unit else event.app
-
-        prometheus_host = event.relation.data[data_loc].get("hostname")
-        prometheus_port = event.relation.data[data_loc].get("port")
+        prometheus_host = event.relation.data[event.unit].get("hostname")
+        prometheus_port = event.relation.data[event.unit].get("port")
 
         if (
             prometheus_host
@@ -265,7 +258,7 @@
                 self.model.app.name,
                 self.port,
             )
-        except ValidationError as exc:
+        except ValueError as exc:
             LOGGER.exception("Config/Relation data validation error")
             self.unit.status = BlockedStatus(str(exc))
             return
diff --git a/installers/charm/mon/src/pod_spec.py b/installers/charm/mon/src/pod_spec.py
index 5c9182a..1c50565 100644
--- a/installers/charm/mon/src/pod_spec.py
+++ b/installers/charm/mon/src/pod_spec.py
@@ -21,35 +21,59 @@
 ##
 
 import logging
-from pydantic import BaseModel, constr, PositiveInt
-from typing import Any, Dict, List
+from typing import Any, Dict, List, NoReturn
 
 logger = logging.getLogger(__name__)
 
 
-class ConfigData(BaseModel):
-    """Configuration data model."""
+def _validate_data(
+    config_data: Dict[str, Any], relation_data: Dict[str, Any]
+) -> NoReturn:
+    """Validate input data.
 
-    openstack_default_granularity: PositiveInt
-    global_request_timeout: PositiveInt
-    log_level: constr(regex=r"^(INFO|DEBUG)$")
-    collector_interval: PositiveInt
-    evaluator_interval: PositiveInt
-    database_commonkey: constr(min_length=1)
-    vca_host: constr(min_length=1)
-    vca_user: constr(min_length=1)
-    vca_password: constr(min_length=1)
-    vca_cacert: str
+    Args:
+        config_data (Dict[str, Any]): configuration data.
+        relation_data (Dict[str, Any]): relation data.
+    """
+    config_validators = {
+        "openstack_default_granularity": lambda value, _: isinstance(value, int)
+        and value > 0,
+        "global_request_timeout": lambda value, _: isinstance(value, int) and value > 0,
+        "log_level": lambda value, _: isinstance(value, str)
+        and value in ("INFO", "DEBUG"),
+        "collector_interval": lambda value, _: isinstance(value, int) and value > 0,
+        "evaluator_interval": lambda value, _: isinstance(value, int) and value > 0,
+        "database_commonkey": lambda value, _: isinstance(value, str)
+        and len(value) > 0,
+        "vca_host": lambda value, _: isinstance(value, str) and len(value) > 0,
+        "vca_user": lambda value, _: isinstance(value, str) and len(value) > 0,
+        "vca_password": lambda value, _: isinstance(value, str) and len(value) > 0,
+        "vca_cacert": lambda value, _: isinstance(value, str),
+    }
+    relation_validators = {
+        "message_host": lambda value, _: isinstance(value, str) and len(value) > 0,
+        "message_port": lambda value, _: isinstance(value, int) and value > 0,
+        "database_uri": lambda value, _: isinstance(value, str)
+        and value.startswith("mongodb://"),
+        "prometheus_host": lambda value, _: isinstance(value, str) and len(value) > 0,
+        "prometheus_port": lambda value, _: isinstance(value, int) and value > 0,
+    }
+    problems = []
 
+    for key, validator in config_validators.items():
+        valid = validator(config_data.get(key), config_data)
 
-class RelationData(BaseModel):
-    """Relation data model."""
+        if not valid:
+            problems.append(key)
 
-    message_host: constr(min_length=1)
-    message_port: PositiveInt
-    database_uri: constr(regex=r"^(mongodb://)")
-    prometheus_host: constr(min_length=1)
-    prometheus_port: PositiveInt
+    for key, validator in relation_validators.items():
+        valid = validator(relation_data.get(key), relation_data)
+
+        if not valid:
+            problems.append(key)
+
+    if len(problems) > 0:
+        raise ValueError("Errors found in: {}".format(", ".join(problems)))
 
 
 def _make_pod_ports(port: int) -> List[Dict[str, Any]]:
@@ -181,8 +205,7 @@
     if not image_info:
         return None
 
-    ConfigData(**(config))
-    RelationData(**(relation_state))
+    _validate_data(config, relation_state)
 
     ports = _make_pod_ports(port)
     env_config = _make_pod_envconfig(config, relation_state)
diff --git a/installers/charm/mon/tests/test_charm.py b/installers/charm/mon/tests/test_charm.py
index 5ea4efa..010262f 100644
--- a/installers/charm/mon/tests/test_charm.py
+++ b/installers/charm/mon/tests/test_charm.py
@@ -151,35 +151,6 @@
 
         self.assertDictEqual(expected_result, pod_spec)
 
-    def test_on_kafka_app_relation_changed(self) -> NoReturn:
-        """Test to see if kafka relation is updated."""
-        self.harness.charm.on.start.emit()
-
-        self.assertIsNone(self.harness.charm.state.message_host)
-        self.assertIsNone(self.harness.charm.state.message_port)
-
-        relation_id = self.harness.add_relation("kafka", "kafka")
-        self.harness.add_relation_unit(relation_id, "kafka/0")
-        self.harness.update_relation_data(
-            relation_id, "kafka", {"host": "kafka", "port": 9092}
-        )
-
-        self.assertEqual(self.harness.charm.state.message_host, "kafka")
-        self.assertEqual(self.harness.charm.state.message_port, 9092)
-
-        # Verifying status
-        self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
-
-        # Verifying status message
-        self.assertGreater(len(self.harness.charm.unit.status.message), 0)
-        self.assertTrue(
-            self.harness.charm.unit.status.message.startswith("Waiting for ")
-        )
-        self.assertNotIn("kafka", self.harness.charm.unit.status.message)
-        self.assertIn("mongodb", self.harness.charm.unit.status.message)
-        self.assertIn("prometheus", self.harness.charm.unit.status.message)
-        self.assertTrue(self.harness.charm.unit.status.message.endswith(" relations"))
-
     def test_on_kafka_unit_relation_changed(self) -> NoReturn:
         """Test to see if kafka relation is updated."""
         self.harness.charm.on.start.emit()
@@ -209,33 +180,6 @@
         self.assertIn("prometheus", self.harness.charm.unit.status.message)
         self.assertTrue(self.harness.charm.unit.status.message.endswith(" relations"))
 
-    def test_on_mongodb_app_relation_changed(self) -> NoReturn:
-        """Test to see if mongodb relation is updated."""
-        self.harness.charm.on.start.emit()
-
-        self.assertIsNone(self.harness.charm.state.database_uri)
-
-        relation_id = self.harness.add_relation("mongodb", "mongodb")
-        self.harness.add_relation_unit(relation_id, "mongodb/0")
-        self.harness.update_relation_data(
-            relation_id, "mongodb", {"connection_string": "mongodb://mongo:27017"}
-        )
-
-        self.assertEqual(self.harness.charm.state.database_uri, "mongodb://mongo:27017")
-
-        # Verifying status
-        self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
-
-        # Verifying status message
-        self.assertGreater(len(self.harness.charm.unit.status.message), 0)
-        self.assertTrue(
-            self.harness.charm.unit.status.message.startswith("Waiting for ")
-        )
-        self.assertIn("kafka", self.harness.charm.unit.status.message)
-        self.assertNotIn("mongodb", self.harness.charm.unit.status.message)
-        self.assertIn("prometheus", self.harness.charm.unit.status.message)
-        self.assertTrue(self.harness.charm.unit.status.message.endswith(" relations"))
-
     def test_on_mongodb_unit_relation_changed(self) -> NoReturn:
         """Test to see if mongodb relation is updated."""
         self.harness.charm.on.start.emit()
@@ -263,35 +207,6 @@
         self.assertIn("prometheus", self.harness.charm.unit.status.message)
         self.assertTrue(self.harness.charm.unit.status.message.endswith(" relations"))
 
-    def test_on_prometheus_app_relation_changed(self) -> NoReturn:
-        """Test to see if prometheus relation is updated."""
-        self.harness.charm.on.start.emit()
-
-        self.assertIsNone(self.harness.charm.state.prometheus_host)
-        self.assertIsNone(self.harness.charm.state.prometheus_port)
-
-        relation_id = self.harness.add_relation("prometheus", "prometheus")
-        self.harness.add_relation_unit(relation_id, "prometheus/0")
-        self.harness.update_relation_data(
-            relation_id, "prometheus", {"hostname": "prometheus", "port": 9090}
-        )
-
-        self.assertEqual(self.harness.charm.state.prometheus_host, "prometheus")
-        self.assertEqual(self.harness.charm.state.prometheus_port, 9090)
-
-        # Verifying status
-        self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
-
-        # Verifying status message
-        self.assertGreater(len(self.harness.charm.unit.status.message), 0)
-        self.assertTrue(
-            self.harness.charm.unit.status.message.startswith("Waiting for ")
-        )
-        self.assertIn("kafka", self.harness.charm.unit.status.message)
-        self.assertIn("mongodb", self.harness.charm.unit.status.message)
-        self.assertNotIn("prometheus", self.harness.charm.unit.status.message)
-        self.assertTrue(self.harness.charm.unit.status.message.endswith(" relations"))
-
     def test_on_prometheus_unit_relation_changed(self) -> NoReturn:
         """Test to see if prometheus relation is updated."""
         self.harness.charm.on.start.emit()
diff --git a/installers/charm/mon/tests/test_pod_spec.py b/installers/charm/mon/tests/test_pod_spec.py
index eff2713..777c18e 100644
--- a/installers/charm/mon/tests/test_pod_spec.py
+++ b/installers/charm/mon/tests/test_pod_spec.py
@@ -20,7 +20,6 @@
 # osm-charmers@lists.launchpad.net
 ##
 
-from pydantic import ValidationError
 from typing import NoReturn
 import unittest
 
@@ -263,7 +262,7 @@
         app_name = "mon"
         port = 8000
 
-        with self.assertRaises(ValidationError):
+        with self.assertRaises(ValueError):
             pod_spec.make_pod_spec(image_info, config, relation_state, app_name, port)
 
     def test_make_pod_spec_without_relation_state(self) -> NoReturn:
@@ -286,7 +285,7 @@
         app_name = "mon"
         port = 8000
 
-        with self.assertRaises(ValidationError):
+        with self.assertRaises(ValueError):
             pod_spec.make_pod_spec(image_info, config, relation_state, app_name, port)
 
 
diff --git a/installers/charm/mon/tox.ini b/installers/charm/mon/tox.ini
index 7ab02dd..0b1ab82 100644
--- a/installers/charm/mon/tox.ini
+++ b/installers/charm/mon/tox.ini
@@ -56,7 +56,6 @@
   stestr
   mock
   ops
-  pydantic
 setenv =
   {[testenv]setenv}
   PYTHON=coverage run
