diff --git a/src/scripts/monitors/monitor-alsa.lua b/src/scripts/monitors/monitor-alsa.lua
index 9153b6f9a845377c5580feaa84dae0cb3d00cdcf..4ab7f55832b17eb7c48c1837ca5190916590e536 100644
--- a/src/scripts/monitors/monitor-alsa.lua
+++ b/src/scripts/monitors/monitor-alsa.lua
@@ -114,6 +114,9 @@ function createNode(parent, id, type, factory, properties)
          .. "." ..
          profile
 
+    -- sanitize name
+    name = name:gsub("([^%w_%-%.])", "_")
+
     properties["node.name"] = name
 
     -- deduplicate nodes with the same name
@@ -127,10 +130,12 @@ function createNode(parent, id, type, factory, properties)
   end
 
   -- and a nick
-  properties["node.nick"] = properties["node.nick"]
+  local nick = properties["node.nick"]
       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("(:)", "_")
 
   -- ensure the node has a description
   if not properties["node.description"] then
diff --git a/src/scripts/monitors/monitor-bluez5.lua b/src/scripts/monitors/monitor-bluez5.lua
index 2a57899cbc390d78ddab07a98a3a892cf02380c1..0f08ccdd7950d34afda507d81cb6240d4e2ceb34 100644
--- a/src/scripts/monitors/monitor-bluez5.lua
+++ b/src/scripts/monitors/monitor-bluez5.lua
@@ -56,11 +56,13 @@ function createNode(parent, id, type, factory, properties)
       or "bluetooth-device"
 
   -- set the node name
-  properties["node.name"] =
+  local name =
       ((factory:find("sink") and "bluez_output") or
        (factory:find("source") and "bluez_input" or factory)) .. "." ..
       (properties["api.bluez5.address"] or dev_props["device.name"]) .. "." ..
       (properties["api.bluez5.profile"] or "unknown")
+  -- sanitize name
+  properties["node.name"] = name:gsub("([^%w_%-%.])", "_")
 
   -- set priority
   if not properties["priority.driver"] then
diff --git a/src/scripts/monitors/monitor-v4l2.lua b/src/scripts/monitors/monitor-v4l2.lua
index 8540167192929ccde27c4316ad3bf2c981b28cf7..cfc4d230dfc1a90a0ee1ba70e1336cff408cbcbb 100644
--- a/src/scripts/monitors/monitor-v4l2.lua
+++ b/src/scripts/monitors/monitor-v4l2.lua
@@ -68,6 +68,9 @@ function createNode(parent, id, type, factory, properties)
        dev_props["device.alias"] or
        "v4l2-device")
 
+  -- sanitize name
+  name = name:gsub("([^%w_%-%.])", "_")
+
   properties["node.name"] = name
 
   -- deduplicate nodes with the same name