diff --git a/python-libs/poulpe_process_result.py b/python-libs/poulpe_process_result.py
index c77efbb06e052f10aa7a596acd55e2bd1cdb56d1_cHl0aG9uLWxpYnMvcG91bHBlX3Byb2Nlc3NfcmVzdWx0LnB5..a9698da553f0f61c3cd443f47866be9816fbfa3d_cHl0aG9uLWxpYnMvcG91bHBlX3Byb2Nlc3NfcmVzdWx0LnB5 100644
--- a/python-libs/poulpe_process_result.py
+++ b/python-libs/poulpe_process_result.py
@@ -22,10 +22,11 @@
         benchmark -> hg-variant -> repo
     """
     repo_func = partial(defaultdict, list)
-    hg_variant_func = partial(defaultdict, repo_func)
+    hg_branch_func = partial(defaultdict, repo_func)
+    hg_variant_func = partial(defaultdict, hg_branch_func)
     benchmark_func = partial(defaultdict, hg_variant_func)
 
     benchmarks = benchmark_func()
     for r in results:
         b_name = r["benchmark"]["name"]
         flavor = r["bin-env-vars"]["hg"]["flavor"]
@@ -26,7 +27,8 @@
     benchmark_func = partial(defaultdict, hg_variant_func)
 
     benchmarks = benchmark_func()
     for r in results:
         b_name = r["benchmark"]["name"]
         flavor = r["bin-env-vars"]["hg"]["flavor"]
+        branch = r["bin-env-vars"]["hg"]["changeset"]["branch"]
         repo = r["data-env-vars"]["name"]
@@ -32,5 +34,11 @@
         repo = r["data-env-vars"]["name"]
-        benchmarks[b_name][flavor][repo].append(r)
+        benchmarks[b_name][flavor][branch][repo].append(r)
+    for w in benchmarks.values():
+        for x in w.values():
+            for y in x.values():
+                for z in y.values():
+                    z.sort(key=result_sort_key)
+
     return benchmarks
 
 
@@ -34,6 +42,38 @@
     return benchmarks
 
 
+def result_sort_key(result):
+    return parse_version(result["bin-env-vars"]["hg"]["version"])
+
+
+def parse_version(version):
+    """return a sortable key for a given hg_version"""
+    if "+" in version:
+        v_parts, rank_s = version.split(sep="+", maxsplit=1)
+    else:
+        v_parts = version
+        rank_s = "0"
+
+    rc = 100
+    pieces = []
+    if "rc" in v_parts:
+        v_parts, rc = v_parts.split(sep="rc", maxsplit=1)
+
+    v = v_parts.split(sep=".")
+    pieces.extend(int(x) for x in v)
+    while len(pieces) < 3:
+        pieces.append(0)
+    pieces.append(int(rc))
+
+    rank_s = rank_s.split(sep=".")[0]
+    rank_s = rank_s.split(sep="-")[0]
+
+    if "hg" in rank_s:
+        rank_s = rank_s.split(sep="hg", maxsplit=1)[1]
+    pieces.append(int(rank_s))
+    return tuple(pieces)
+
+
 if __name__ == "__main__":
     import json