diff --git a/java/res/xml-sw600dp/rowkeys_pcqwerty1.xml b/java/res/xml-sw600dp/rowkeys_pcqwerty1.xml
index d486b9d..b11bbba 100644
--- a/java/res/xml-sw600dp/rowkeys_pcqwerty1.xml
+++ b/java/res/xml-sw600dp/rowkeys_pcqwerty1.xml
@@ -52,8 +52,8 @@
                 latin:keyStyle="hasShiftedLetterHintStyle" />
             <Key
                 latin:keyLabel="3"
-                latin:keyHintLabel="#"
-                latin:additionalMoreKeys="#"
+                latin:keyHintLabel="\#"
+                latin:additionalMoreKeys="\#"
                 latin:moreKeys="!text/more_keys_for_symbols_3"
                 latin:keyStyle="hasShiftedLetterHintStyle" />
             <Key
diff --git a/java/res/xml-sw600dp/rowkeys_symbols2.xml b/java/res/xml-sw600dp/rowkeys_symbols2.xml
index d7067e0..7d7dcfe 100644
--- a/java/res/xml-sw600dp/rowkeys_symbols2.xml
+++ b/java/res/xml-sw600dp/rowkeys_symbols2.xml
@@ -34,7 +34,7 @@
         </case>
         <default>
             <Key
-                latin:keyLabel="#" />
+                latin:keyLabel="\#" />
         </default>
     </switch>
     <Key
@@ -49,9 +49,9 @@
             <!-- U+066B: "٫" ARABIC DECIMAL SEPARATOR -->
             <Key
                 latin:keyLabel="&#x066B;"
-                latin:keyHintLabel="#"
+                latin:keyHintLabel="\#"
                 latin:keyLabelFlags="hasPopupHint|hasShiftedLetterHint"
-                latin:moreKeys="#" />
+                latin:moreKeys="\#" />
         </case>
         <default>
             <Key
diff --git a/java/res/xml-sw600dp/rows_number_normal.xml b/java/res/xml-sw600dp/rows_number_normal.xml
index f692394..37bf2e8 100644
--- a/java/res/xml-sw600dp/rows_number_normal.xml
+++ b/java/res/xml-sw600dp/rows_number_normal.xml
@@ -151,7 +151,7 @@
             latin:keyLabel="0"
             latin:keyStyle="numKeyStyle" />
         <Key
-            latin:keyLabel="#"
+            latin:keyLabel="\#"
             latin:keyStyle="numKeyStyle" />
         <!-- Note: This Spacer prevents the above key from being marked as a right edge key. -->
         <Spacer
diff --git a/java/res/xml-sw600dp/rows_phone.xml b/java/res/xml-sw600dp/rows_phone.xml
index dcc4fde..c4799bb 100644
--- a/java/res/xml-sw600dp/rows_phone.xml
+++ b/java/res/xml-sw600dp/rows_phone.xml
@@ -116,7 +116,7 @@
         <Key
             latin:keyStyle="num0KeyStyle" />
         <Key
-            latin:keyLabel="#"
+            latin:keyLabel="\#"
             latin:keyStyle="numKeyStyle" />
     </Row>
 </merge>
diff --git a/java/res/xml-sw768dp/rows_number_normal.xml b/java/res/xml-sw768dp/rows_number_normal.xml
index d4d7c72..de49aba 100644
--- a/java/res/xml-sw768dp/rows_number_normal.xml
+++ b/java/res/xml-sw768dp/rows_number_normal.xml
@@ -166,7 +166,7 @@
             latin:keyLabel="0"
             latin:keyStyle="numKeyStyle" />
         <Key
-            latin:keyLabel="#"
+            latin:keyLabel="\#"
             latin:keyStyle="numKeyStyle" />
         <!-- Note: This Spacer prevents the above key from being marked as a right edge key. -->
         <Spacer
diff --git a/java/res/xml-sw768dp/rows_phone.xml b/java/res/xml-sw768dp/rows_phone.xml
index 2f718db..d06a63b 100644
--- a/java/res/xml-sw768dp/rows_phone.xml
+++ b/java/res/xml-sw768dp/rows_phone.xml
@@ -132,7 +132,7 @@
         <Key
             latin:keyStyle="num0KeyStyle" />
         <Key
-            latin:keyLabel="#"
+            latin:keyLabel="\#"
             latin:keyStyle="numKeyStyle" />
    </Row>
 </merge>
diff --git a/java/res/xml/keys_pcqwerty_symbols1.xml b/java/res/xml/keys_pcqwerty_symbols1.xml
index bf48b1f..2364e10 100644
--- a/java/res/xml/keys_pcqwerty_symbols1.xml
+++ b/java/res/xml/keys_pcqwerty_symbols1.xml
@@ -32,7 +32,7 @@
     <Key
         latin:keyLabel="\@" />
     <Key
-        latin:keyLabel="#" />
+        latin:keyLabel="\#" />
     <Key
         latin:keyLabel="$" />
     <!-- U+2030: "‰" PER MILLE SIGN -->
diff --git a/java/res/xml/rowkeys_pcqwerty1.xml b/java/res/xml/rowkeys_pcqwerty1.xml
index 0ecda35..b2d1d37 100644
--- a/java/res/xml/rowkeys_pcqwerty1.xml
+++ b/java/res/xml/rowkeys_pcqwerty1.xml
@@ -41,7 +41,7 @@
                 latin:moreKeys="!text/more_keys_for_symbols_2" />
             <Key
                 latin:keyLabel="3"
-                latin:additionalMoreKeys="#"
+                latin:additionalMoreKeys="\#"
                 latin:moreKeys="!text/more_keys_for_symbols_3" />
             <Key
                 latin:keyLabel="4"
diff --git a/java/res/xml/rowkeys_symbols2.xml b/java/res/xml/rowkeys_symbols2.xml
index 425e204..d3c1278 100644
--- a/java/res/xml/rowkeys_symbols2.xml
+++ b/java/res/xml/rowkeys_symbols2.xml
@@ -33,14 +33,14 @@
                 latin:moreKeys="\@" />
             <Key
                 latin:keyLabel="&#x066B;"
-                latin:keyHintLabel="#"
-                latin:moreKeys="#" />
+                latin:keyHintLabel="\#"
+                latin:moreKeys="\#" />
         </case>
         <default>
             <Key
                 latin:keyLabel="\@" />
             <Key
-                latin:keyLabel="#" />
+                latin:keyLabel="\#" />
         </default>
     </switch>
     <Key
diff --git a/java/res/xml/rows_phone_symbols.xml b/java/res/xml/rows_phone_symbols.xml
index c13018e..8c10a2d 100644
--- a/java/res/xml/rows_phone_symbols.xml
+++ b/java/res/xml/rows_phone_symbols.xml
@@ -65,7 +65,7 @@
         <Key
             latin:keyStyle="numWaitKeyStyle" />
         <Key
-            latin:keyLabel="#"
+            latin:keyLabel="\#"
             latin:keyStyle="numKeyStyle" />
         <Key
             latin:keyStyle="deleteKeyStyle"
diff --git a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java
index c588824..b0b3777 100644
--- a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java
+++ b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java
@@ -290,19 +290,23 @@
         }
         @Override
         public String toString() { // Convenience method
-            return toString(0);
+            return toString(0, false);
         }
-        public String toString(final int indentCount) {
+        public String toString(final int indentCount, final boolean plumbing) {
             final StringBuilder indent = new StringBuilder();
-            for (int i = 0; i < indentCount; ++i) {
-                indent.append(" ");
+            if (plumbing) {
+                indent.append("H:");
+            } else {
+                for (int i = 0; i < indentCount; ++i) {
+                    indent.append(" ");
+                }
             }
             final StringBuilder s = new StringBuilder();
             for (final String optionKey : mAttributes.keySet()) {
                 s.append(indent);
                 s.append(optionKey);
                 s.append(" = ");
-                if ("date".equals(optionKey)) {
+                if ("date".equals(optionKey) && !plumbing) {
                     // Date needs a number of milliseconds, but the dictionary contains seconds
                     s.append(new Date(
                             1000 * Long.parseLong(mAttributes.get(optionKey))).toString());
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Diff.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Diff.java
index 9548f25..855c026 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Diff.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Diff.java
@@ -34,7 +34,7 @@
     @Override
     public String getHelp() {
         return COMMAND + " [-p] <dict> <dict> : shows differences between two dictionaries.\n"
-                + "  If -p (porcelain) option is given, produce output suitable for a script";
+                + "  If -p (plumbing) option is given, produce output suitable for a script";
     }
 
     @Override
@@ -42,15 +42,15 @@
         if (mArgs.length < 2) {
             throw new RuntimeException("Not enough arguments for command " + COMMAND);
         }
-        final boolean porcelain;
+        final boolean plumbing;
         if ("-p".equals(mArgs[0])) {
-            porcelain = true;
+            plumbing = true;
             mArgs = Arrays.copyOfRange(mArgs, 1, mArgs.length);
             if (mArgs.length != 2) { // There should be only 2 arguments left
                 throw new RuntimeException("Wrong number of arguments for command " + COMMAND);
             }
         } else {
-            porcelain = false;
+            plumbing = false;
         }
         final FusionDictionary dict0 =
                 BinaryDictOffdeviceUtils.getDictionary(mArgs[0], false /* report */);
@@ -58,7 +58,7 @@
         final FusionDictionary dict1 =
                 BinaryDictOffdeviceUtils.getDictionary(mArgs[1], false /* report */);
         if (null == dict1) throw new RuntimeException("Can't read dictionary " + mArgs[1]);
-        if (!porcelain) {
+        if (!plumbing) {
             System.out.println("Header :");
             diffHeaders(dict0, dict1);
             if (languageDiffers(dict0, dict1)) {
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java
index d91a409..f289454 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java
@@ -22,6 +22,7 @@
 import com.android.inputmethod.latin.makedict.FusionDictionary.WeightedString;
 import com.android.inputmethod.latin.makedict.Word;
 
+import java.util.Arrays;
 import java.util.ArrayList;
 
 public class Info extends Dicttool.Command {
@@ -35,9 +36,9 @@
         return COMMAND + " <filename>: prints various information about a dictionary file";
     }
 
-    private static void showInfo(final FusionDictionary dict) {
+    private static void showInfo(final FusionDictionary dict, final boolean plumbing) {
         System.out.println("Header attributes :");
-        System.out.print(dict.mOptions.toString(2));
+        System.out.print(dict.mOptions.toString(2, plumbing));
         int wordCount = 0;
         int bigramCount = 0;
         int shortcutCount = 0;
@@ -62,7 +63,8 @@
                 + " whitelist entries)");
     }
 
-    private static void showWordInfo(final FusionDictionary dict, final String word) {
+    private static void showWordInfo(final FusionDictionary dict, final String word,
+            final boolean plumbing) {
         final CharGroup group = FusionDictionary.findWordInTree(dict.mRoot, word);
         if (null == group) {
             System.out.println(word + " is not in the dictionary");
@@ -101,15 +103,25 @@
         if (mArgs.length < 1) {
             throw new RuntimeException("Not enough arguments for command " + COMMAND);
         }
+        final boolean plumbing;
+        if ("-p".equals(mArgs[0])) {
+            plumbing = true;
+            mArgs = Arrays.copyOfRange(mArgs, 1, mArgs.length);
+            if (mArgs.length != 1) { // There should be only 1 argument left
+                throw new RuntimeException("Wrong number of arguments for command " + COMMAND);
+            }
+        } else {
+            plumbing = false;
+        }
         final String filename = mArgs[0];
         final boolean hasWordArguments = (1 == mArgs.length);
         final FusionDictionary dict = BinaryDictOffdeviceUtils.getDictionary(filename,
                 hasWordArguments /* report */);
         if (hasWordArguments) {
-            showInfo(dict);
+            showInfo(dict, plumbing);
         } else {
             for (int i = 1; i < mArgs.length; ++i) {
-                showWordInfo(dict, mArgs[i]);
+                showWordInfo(dict, mArgs[i], plumbing);
             }
         }
     }
