diff --git a/src/charm.py b/src/charm.py
index d40d3b3..7c260c7 100755
--- a/src/charm.py
+++ b/src/charm.py
@@ -14,10 +14,14 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import logging
 
 from ops_openstack.plugins.classes import CinderStoragePluginCharm
 from ops_openstack.core import charm_class, get_charm_class
 from ops.main import main
+from ops.model import BlockedStatus
+
+logger = logging.getLogger(__name__)
 
 
 class CinderCharmBase(CinderStoragePluginCharm):
@@ -31,10 +35,44 @@
     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"
+
+    def on_config(self, event):
+        config = dict(self.framework.model.config)
+        conf_error = self._check_for_config_errors(config)
+        if conf_error is not None:
+            logger.error(conf_error)
+            self.unit.status = BlockedStatus(conf_error)
+            return
+
+        super().on_config(event)
+
     def cinder_configuration(self, config):
+        conf_error = self._check_for_config_errors(config)
+        if conf_error is not None:
+            logger.error(conf_error)
+            return []
+
         # Return the configuration to be set by the principal.
         backend_name = config.get("volume-backend-name", self.framework.model.app.name)
         volume_driver = "cinder.volume.drivers.storpool.StorPoolDriver"
+
         options = [
             ("volume_driver", volume_driver),
             ("volume_backend_name", backend_name),
