diff --git a/kadmos/external/XDSM_writer/XDSM.py b/kadmos/external/XDSM_writer/XDSM.py
index 0143928869a818553e94d1c7cd2350dd3fccb9f2..9834cc9932d839f6f849fa010bfe89e34e76abfe 100644
--- a/kadmos/external/XDSM_writer/XDSM.py
+++ b/kadmos/external/XDSM_writer/XDSM.py
@@ -53,7 +53,8 @@ class XDSM(object):
         """
         if name[0:5] != 'EMPTY':
             name = unicodedata.normalize('NFKD', name.decode('unicode-escape')).encode('hex')
-        string = string.encode('unicode-escape').replace('_', '\_')
+        string = string.encode('unicode-escape').replace('_', '\_').replace('&','\&').replace('%','\%')\
+            .replace('$','\$').replace('#','\#').replace('{','\{').replace('}','\}')
         self.inds[name] = len(self.comps)
         self.comps.append([name, style, string, stack])
 
@@ -75,7 +76,8 @@ class XDSM(object):
             out = unicodedata.normalize('NFKD', out.decode('unicode-escape')).encode('hex')
         if inp[0:5] != 'EMPTY':
             inp = unicodedata.normalize('NFKD', inp.decode('unicode-escape')).encode('hex')
-        string = string.encode('unicode-escape').replace('_', '\_')
+        string = string.encode('unicode-escape').replace('_', '\_').replace('&','\&').replace('%','\%')\
+            .replace('$','\$').replace('#','\#').replace('{','\{').replace('}','\}')
         self.deps.append([out, inp, style, string, stack])
 
     def addChain(self, chain_list):