diff --git a/utils/hp2ps/Key.c b/utils/hp2ps/Key.c
index 5fa76ab6d7fdcbab49dc5b745ac912135e0c423b..eda839597ad5e06e2a3fee707d582a47bbfaa878 100644
--- a/utils/hp2ps/Key.c
+++ b/utils/hp2ps/Key.c
@@ -1,11 +1,14 @@
 #include "Main.h"
 #include <stdio.h>
 #include <math.h>
+#include <string.h>
+#include <stdlib.h>
 #include "Defines.h"
 #include "Dimensions.h"
 #include "HpFile.h"
 #include "Shade.h"
 #include "PsFile.h"
+#include "Utilities.h"
 
 /* own stuff */
 #include "Key.h"
@@ -36,7 +39,18 @@ void Key(void)
     }
 }
 
-
+static void
+escape(char *result, const char *name)
+{
+    while (*name != '\0')
+    {
+        if (*name == '\\')
+        {
+            *result++ = '\\';
+        }
+        *result++ = *name++;
+    }
+}
 
 static void
 KeyEntry(floatish centreline, char *name, floatish colour)
@@ -65,5 +79,9 @@ KeyEntry(floatish centreline, char *name, floatish colour)
     fprintf(psfp, "HE%d setfont\n", NORMAL_FONT);
     fprintf(psfp, "%f %f moveto\n", kstart + (floatish) KEY_BOX_WIDTH + 2 * borderspace, namebase);
 
-    fprintf(psfp, "(%s) show\n", name); 
+    // escape backslashes in 'name'
+    char *escaped_name = (char*) xmalloc(strlen(name) * 2 + 1);
+    escape(escaped_name, name);
+    fprintf(psfp, "(%s) show\n", escaped_name);
+    free(escaped_name);
 }