diff --git a/config.schema.yml b/config.schema.yml
index 6fa3531c2da5d4992dbba4505742a41f06924bbd..133374eff92e996e7ae65f3de7f4696ad834aa8f 100644
--- a/config.schema.yml
+++ b/config.schema.yml
@@ -148,10 +148,11 @@ digital_inputs:
         required: yes
         empty: no
       pin:
-        type: string
+        type:
+          - string
+          - integer
         required: yes
         empty: no
-        coerce: int_if_possible
       on_payload:
         type: string
         required: yes
@@ -187,10 +188,11 @@ digital_outputs:
         type: string
         required: yes
       pin:
-        type: string
+        type:
+          - string
+          - integer
         required: yes
         empty: no
-        coerce: int_if_possible
       on_payload:
         type: string
         required: no
diff --git a/pi_mqtt_gpio/__init__.py b/pi_mqtt_gpio/__init__.py
index d3a4def93e22171da2bc229e98ad43d377940212..65cc2cbf8f5334e15d69afbc22a1d5295d3f0564 100644
--- a/pi_mqtt_gpio/__init__.py
+++ b/pi_mqtt_gpio/__init__.py
@@ -151,10 +151,11 @@ digital_inputs:
         required: yes
         empty: no
       pin:
-        type: string
+        type:
+          - string
+          - integer
         required: yes
         empty: no
-        coerce: int_if_possible
       on_payload:
         type: string
         required: yes
@@ -190,10 +191,11 @@ digital_outputs:
         type: string
         required: yes
       pin:
-        type: string
+        type:
+          - string
+          - integer
         required: yes
         empty: no
-        coerce: int_if_possible
       on_payload:
         type: string
         required: no
diff --git a/pi_mqtt_gpio/server.py b/pi_mqtt_gpio/server.py
index e3777f92f0cabea355efe4e4c7fd85f4828e2e2a..37dc1666cfe2cc6425f084055333c895789f52c0 100644
--- a/pi_mqtt_gpio/server.py
+++ b/pi_mqtt_gpio/server.py
@@ -87,19 +87,6 @@ class ConfigValidator(cerberus.Validator):
         """
         return str(value)
 
-    @staticmethod
-    def _normalize_coerce_int_if_possible(value):
-        """
-        Convert value to integer if possible.
-        :param value: Value to convert
-        :return: Value represented as an int if possible, else string.
-        :rtype: str or int
-        """
-        try:
-            return int(value)
-        except ValueError:
-            return value
-
 
 def on_log(client, userdata, level, buf):
     """