diff --git a/Control/AthenaMonitoring/share/hist_file_dump.py b/Control/AthenaMonitoring/share/hist_file_dump.py
index 19ca96707f4d88ca7d7d23727740db3a502bcd40..0ab7bcaaa5e6fbdc5fec09af8f275f4f9c9c48f1 100755
--- a/Control/AthenaMonitoring/share/hist_file_dump.py
+++ b/Control/AthenaMonitoring/share/hist_file_dump.py
@@ -8,6 +8,14 @@ import argparse
 import zlib
 import json
 
+def fixprecision(x):
+    import math
+    if not isinstance(x, float):
+        return x
+    else:
+        mantissa, exponent = math.frexp(x)
+        return float(str(mantissa)[:16]) * 2**exponent
+
 def jsonfixup(instr):
     instr = instr.Data()
     j=json.loads(instr)
@@ -15,9 +23,11 @@ def jsonfixup(instr):
     for badkey in ('fTsumw', 'fTsumwx', 'fTsumw2', 'fTsumwx2', 'fTsumwy', 'fTsumwy2', 'fTsumwxy',
                    'fTsumwz', 'fTsumwz2', 'fTsumwxz', 'fTsumwyz' ):
         if badkey in j:
-            if isinstance(j[badkey], float):
-                j[badkey] = float(str(j[badkey])[:8])
+            j[badkey] = fixprecision(j[badkey])
             #print(type(j["fTsumwx"]))
+    for badkey in ('fSumw2',):
+        if badkey in j:
+            j[badkey] = [fixprecision(_) for _ in j[badkey]]
     # the following ignores small layout fluctuations in TTrees
     if 'fBranches' in j:
         for branch in j['fBranches']['arr']: