diff --git a/CHANGELOG.md b/CHANGELOG.md
index 58f0ff61e9bd0c5021246d6efce70eb5bc4320ab..7930a24ac24281d27d5902da7a2c2bb5ddbe32e3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,8 @@
 ### Bug fixes
 - Locality hints ending with a pipe symbol (|) could subsequently trigger an
 assertion and crash when encountered during ``LHSCAN``, due to faulty key parsing code.
+The pipe symbol (|) has special meaning inside internal QuarkDB keys, and is used
+to escape field separators (#).
 
 ### New features
 - Addition of ``quarkdb-server`` binary to allow running QDB without XRootD.
diff --git a/genversion.py b/genversion.py
index 873f1535bceb6d6bdc904ca393433137f5523315..44273ad34902f1f687fe505a5fdb091d4336f59b 100755
--- a/genversion.py
+++ b/genversion.py
@@ -45,10 +45,7 @@ class SoftwareVersion:
         if self.patch == None: assert self.miniPatch == None
 
     def toString(self):
-        ret = "{0}.{1}".format(self.major, self.minor)
-
-        if self.patch or self.miniPatch:
-            ret += ".{0}".format(self.patch)
+        ret = "{0}.{1}.{2}".format(self.major, self.minor, self.patch)
 
         if self.miniPatch:
             ret += ".{0}".format(self.miniPatch)