diff --git a/src/scripts/monitors/alsa.lua b/src/scripts/monitors/alsa.lua
index a81d7693714af930e8b630ad411ef4722b06ea47..a417cb4d89ab46c21d2e93949162ab7677ad7817 100644
--- a/src/scripts/monitors/alsa.lua
+++ b/src/scripts/monitors/alsa.lua
@@ -134,8 +134,8 @@ function createNode(parent, id, type, factory, properties)
       or dev_props["device.nick"]
       or dev_props["api.alsa.card.name"]
       or dev_props["alsa.card_name"]
-  -- also sanitize nick, but allow all characters except :
-  properties["node.nick"] = nick:gsub("(:)", "_")
+  -- also sanitize nick, replace ':' with ' '
+  properties["node.nick"] = nick:gsub("(:)", " ")
 
   -- ensure the node has a description
   if not properties["node.description"] then
@@ -143,14 +143,15 @@ function createNode(parent, id, type, factory, properties)
     local name = properties["api.alsa.pcm.name"] or properties["api.alsa.pcm.id"] or dev
 
     if profile_desc then
-      properties["node.description"] = desc .. " " .. profile_desc
+      desc = desc .. " " .. profile_desc
     elseif subdev == "0" then
-      properties["node.description"] = desc .. " (" .. name .. " " .. subdev .. ")"
+      desc = desc .. " (" .. name .. " " .. subdev .. ")"
     elseif dev == "0" then
-      properties["node.description"] = desc .. " (" .. name .. ")"
-    else
-      properties["node.description"] = desc
+      desc = desc .. " (" .. name .. ")"
     end
+
+    -- also sanitize description, replace ':' with ' '
+    properties["node.description"] = desc:gsub("(:)", " ")
   end
 
   -- apply properties from config.rules
diff --git a/src/scripts/monitors/bluez.lua b/src/scripts/monitors/bluez.lua
index c6c1f00b0384d7b4db51a0eb30e27f9ef576ac18..9adb869380647b7d10c33144f1247b1939eda91b 100644
--- a/src/scripts/monitors/bluez.lua
+++ b/src/scripts/monitors/bluez.lua
@@ -48,12 +48,14 @@ function createNode(parent, id, type, factory, properties)
   properties["node.pause-on-idle"] = false
 
   -- set the node description
-  properties["node.description"] =
+  local desc =
       dev_props["device.description"]
       or dev_props["device.name"]
       or dev_props["device.nick"]
       or dev_props["device.alias"]
       or "bluetooth-device"
+  -- sanitize description, replace ':' with ' '
+  properties["node.description"] = desc:gsub("(:)", " ")
 
   -- set the node name
   local name =
diff --git a/src/scripts/monitors/v4l2.lua b/src/scripts/monitors/v4l2.lua
index cfc4d230dfc1a90a0ee1ba70e1336cff408cbcbb..84578fa82557f0d3b12fcfde9db0f47ae4bfd0f8 100644
--- a/src/scripts/monitors/v4l2.lua
+++ b/src/scripts/monitors/v4l2.lua
@@ -67,7 +67,6 @@ function createNode(parent, id, type, factory, properties)
        dev_props["device.nick"] or
        dev_props["device.alias"] or
        "v4l2-device")
-
   -- sanitize name
   name = name:gsub("([^%w_%-%.])", "_")
 
@@ -83,7 +82,9 @@ function createNode(parent, id, type, factory, properties)
   end
 
   -- set the node description
-  properties["node.description"] = dev_props["device.description"] or "v4l2-device"
+  local desc = dev_props["device.description"] or "v4l2-device"
+  -- sanitize description, replace ':' with ' '
+  properties["node.description"] = desc:gsub("(:)", " ")
 
   -- apply properties from config.rules
   rulesApplyProperties(properties)