diff --git a/src/charm.py b/src/charm.py
index fa22157..6e4fb2e 100755
--- a/src/charm.py
+++ b/src/charm.py
@@ -63,30 +63,6 @@
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
 
-    def _check_for_config_errors(self, config):
-        missing = []
-        for mandatory in self.MANDATORY_CONFIG:
-            if mandatory not in config:
-                missing.append(mandatory)
-
-        if missing:
-            return f"Mandatory options are missing: {', '.join(missing)}"
-
-        if config["protocol"] not in ["block", "iscsi"]:
-            return (
-                f"""Invalid 'protocol' option provided: '{config["protocol"]}';"""
-                "valid are 'block' and 'iscsi'"
-            )
-
-        if config["protocol"] == "block":
-            return "'protocol' value 'block' not yet supported"
-
-        if not (0 < config["sp-api-http-port"] < 65536):
-            return (
-                f"""'sp-api-http-port' ('{config["sp-api-http-port"]}')"""
-                "is not a valid port (0-65535)"
-            )
-
     def on_config(self, event):
         config = dict(self.framework.model.config)
         conf_error = self._check_for_config_errors(config)
@@ -97,7 +73,7 @@
 
             return
 
-        self.create_storpool_conf(StorPoolConfItems.from_config(config))
+        create_storpool_conf(StorPoolConfItems.from_config(config))
 
         super().on_config(event)
 
@@ -134,19 +110,35 @@
                 ]
             )
 
-        self.create_storpool_conf(StorPoolConfItems.from_config(config))
+        create_storpool_conf(StorPoolConfItems.from_config(config))
 
         self._stored.is_started = True
 
         return options
 
-    @staticmethod
-    def create_storpool_conf(sp_conf_items: StorPoolConfItems):
-        pathlib.Path("/etc/storpool.conf").write_text(
-            "# Do not edit; this file is generated by the cinder-storpool charm.\n"
-            + sp_conf_items.to_ini_key_value_pairs(),
-            encoding="UTF-8",
-        )
+    def _check_for_config_errors(self, config):
+        missing = []
+        for mandatory in self.MANDATORY_CONFIG:
+            if mandatory not in config:
+                missing.append(mandatory)
+
+        if missing:
+            return f"Mandatory options are missing: {', '.join(missing)}"
+
+        if config["protocol"] not in ["block", "iscsi"]:
+            return (
+                f"""Invalid 'protocol' option provided: '{config["protocol"]}';"""
+                "valid are 'block' and 'iscsi'"
+            )
+
+        if config["protocol"] == "block":
+            return "'protocol' value 'block' not yet supported"
+
+        if not (0 < config["sp-api-http-port"] < 65536):
+            return (
+                f"""'sp-api-http-port' ('{config["sp-api-http-port"]}')"""
+                "is not a valid port (0-65535)"
+            )
 
 
 @charm_class
@@ -154,6 +146,14 @@
     release = "yoga"
 
 
+def create_storpool_conf(sp_conf_items: StorPoolConfItems):
+    pathlib.Path("/etc/storpool.conf").write_text(
+        "# Do not edit; this file is generated by the cinder-storpool charm.\n"
+        + sp_conf_items.to_ini_key_value_pairs(),
+        encoding="UTF-8",
+    )
+
+
 if __name__ == "__main__":
     # main(get_charm_class_for_release())
     # main(CinderStorPoolCharm)
