diff --git a/generator/generate b/generator/generate
index 30dc3505c141f832675b4dc2b843d7de70a772cf..9e39283b1c8f572dff0fd8e48cf4ae48d593cdca 100755
Binary files a/generator/generate and b/generator/generate differ
diff --git a/generator/lexer.mll b/generator/lexer.mll
index 0f5bebb53d54958c765d5bab029487576e72732c..9b9a8273fec202c59ede3178be3e9c0844d46a63 100755
--- a/generator/lexer.mll
+++ b/generator/lexer.mll
@@ -254,13 +254,18 @@ and text e = parse
     { major; minor; patch }
 
   (* compares both old-style (YYYYMMDD) and new-style numbering (MAJOR.MINOR)
-     note: codenames are only used in case of equality
+     note: codenames are only used for old versions or in case of equality
    *)
   let compare_version v1 v2 cn1 cn2 =
-    let re_old_numbering = Str.regexp "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].*" in
+    let re_old_numbering = Str.regexp ".*\\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\\)" in
     let is_old_numbering v = Str.string_match re_old_numbering v 0 in
-    match is_old_numbering v1, is_old_numbering v2 with
-    | true, true -> String.compare v2 v1
+    let get_old_version v =
+      let v = String.map (fun c -> if c = '_' then '-' else c) v in
+      assert(Str.string_match re_old_numbering v 0) ;
+      Str.matched_group 1 v
+    in
+    match is_old_numbering cn1, is_old_numbering cn2 with
+    | true, true -> String.compare (get_old_version cn2) (get_old_version cn1)
     | false, true -> (* new numbering is always newer *) -1
     | true, false -> (* old numbering is always older *) 1
     | false, false -> (* compare new-style versions *)