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)
