diff --git a/wally/suits/io/fio.py b/wally/suits/io/fio.py
index a57faff..f9f1d1b 100644
--- a/wally/suits/io/fio.py
+++ b/wally/suits/io/fio.py
@@ -146,6 +146,7 @@
         self.lat = None
         self.lat_50 = None
         self.lat_95 = None
+        self.lat_avg = None
 
         self.raw_bw = []
         self.raw_iops = []
@@ -202,7 +203,7 @@
     """
     def __init__(self, config, fio_task, ts_results, raw_result, run_interval):
 
-        self.name = fio_task.name.split("_")[0]
+        self.name = fio_task.name.rsplit("_", 1)[0]
         self.fio_task = fio_task
 
         self.bw = ts_results.get('bw')
@@ -310,10 +311,11 @@
                 res.append(sum(dt[idx] for dt in arr))
             return res
 
-        # pinfo.raw_lat = map(prepare, self.lat.per_vm())
-        # num_th = sum(map(len, pinfo.raw_lat))
-        # avg_lat = [val / num_th for val in agg_data(pinfo.raw_lat)]
-        # pinfo.lat = data_property(avg_lat)
+        pinfo.raw_lat = map(prepare, self.lat.per_vm())
+        num_th = sum(map(len, pinfo.raw_lat))
+        lat_avg = [val / num_th for val in agg_data(pinfo.raw_lat)]
+        pinfo.lat_avg = data_property(lat_avg).average / 1000  # us to ms
+
         pinfo.lat_50, pinfo.lat_95 = self.get_lat_perc_50_95_multy()
         pinfo.lat = pinfo.lat_50
 
@@ -353,8 +355,10 @@
         bw_per_th = sum(sum(pinfo.raw_bw, []), [])
         if average(bw_per_th) > 10:
             pinfo.bw = bw_log
-        else:
             pinfo.bw2 = bw_report
+        else:
+            pinfo.bw = bw_report
+            pinfo.bw2 = bw_log
 
         self._pinfo = pinfo
 
@@ -421,10 +425,13 @@
 
     # size is megabytes
     def check_prefill_required(self, rossh, fname, size, num_blocks=16):
-        with rossh.connection.open_sftp() as sftp:
-            fstats = sftp.stat(fname)
+        try:
+            with rossh.connection.open_sftp() as sftp:
+                fstats = sftp.stat(fname)
 
-        if stat.S_ISREG(fstats) and fstats.st_size < size * 1024 ** 2:
+            if stat.S_ISREG(fstats.st_mode) and fstats.st_size < size * 1024 ** 2:
+                return True
+        except EnvironmentError:
             return True
 
         cmd = 'python -c "' + \
@@ -624,8 +631,6 @@
         lat_bw_limit_reached = set()
 
         with ThreadPoolExecutor(len(self.config.nodes)) as pool:
-            self.fio_configs.sort(key=lambda x: int(x.vals.get('numjobs', 1)))
-
             for pos, fio_cfg in enumerate(self.fio_configs):
                 test_descr = get_test_summary(fio_cfg.vals).split("th")[0]
                 if test_descr in lat_bw_limit_reached:
@@ -859,10 +864,10 @@
 
         def key_func(data):
             tpl = data.summary_tpl()
-            return (data.name.rsplit("_", 1)[0],
+            return (data.name,
                     tpl.oper,
                     tpl.mode,
-                    tpl.bsize,
+                    ssize2b(tpl.bsize),
                     int(tpl.th_count) * int(tpl.vm_count))
         res = []
 
@@ -878,6 +883,7 @@
 
             lat_50 = round_3_digit(int(test_dinfo.lat_50))
             lat_95 = round_3_digit(int(test_dinfo.lat_95))
+            lat_avg = round_3_digit(int(test_dinfo.lat_avg))
 
             testnodes_count = len(item.config.nodes)
             iops_per_vm = round_3_digit(iops / testnodes_count)
@@ -898,7 +904,8 @@
                         "iops_per_vm": int(iops_per_vm),
                         "bw_per_vm": int(bw_per_vm),
                         "lat_50": lat_50,
-                        "lat_95": lat_95})
+                        "lat_95": lat_95,
+                        "lat_avg": lat_avg})
 
         return res
 
@@ -913,7 +920,8 @@
         Field("iops\n/vm",      "iops_per_vm", "r",  3),
         Field("KiBps\n/vm",     "bw_per_vm",   "r",  6),
         Field("lat ms\nmedian", "lat_50",      "r",  3),
-        Field("lat ms\n95%",    "lat_95",      "r",  3)
+        Field("lat ms\n95%",    "lat_95",      "r",  3),
+        Field("lat\navg",       "lat_avg",     "r",  3),
     ]
 
     fiels_and_header_dct = dict((item.attr, item) for item in fiels_and_header)
