diff --git a/wally/console_report.py b/wally/console_report.py
index ac54965..1528089 100644
--- a/wally/console_report.py
+++ b/wally/console_report.py
@@ -4,13 +4,13 @@
 import numpy
 
 from cephlib.common import float2str
+from cephlib import texttable
+from cephlib.statistic import calc_norm_stat_props, calc_histo_stat_props
 
-from . import texttable
-from .hlstorage import ResultStorage
+from .result_classes import IResultStorage
 from .stage import Stage, StepOrder
 from .test_run_class import TestRun
 from .suits.io.fio import FioTest
-from .statistic import calc_norm_stat_props, calc_histo_stat_props
 from .suits.io.fio_hist import get_lat_vals
 from .data_selectors import get_aggregated
 
@@ -23,22 +23,23 @@
     priority = StepOrder.REPORT
 
     def run(self, ctx: TestRun) -> None:
-        rstorage = ResultStorage(ctx.storage)
-        for suite in rstorage.iter_suite(FioTest.name):
+        for suite in ctx.rstorage.iter_suite(FioTest.name):
             table = texttable.Texttable(max_width=200)
 
-            tbl = rstorage.get_txt_report(suite)
+            tbl = ctx.rstorage.get_txt_report(suite)
             if tbl is None:
                 table.header(["Description", "IOPS ~ Dev", "BW, MiBps", 'Skew/Kurt', 'lat med, ms', 'lat 95, ms'])
                 table.set_cols_align(('l', 'r', 'r', 'r', 'r', 'r'))
 
-                for job in sorted(rstorage.iter_job(suite), key=lambda job: job.params):
-                    bw_ts = get_aggregated(rstorage, suite, job, metric='bw')
+                for job in sorted(ctx.rstorage.iter_job(suite), key=lambda job: job.params):
+                    bw_ts = get_aggregated(ctx.rstorage, suite.storage_id, job.storage_id, metric='bw',
+                                           trange=job.reliable_info_range_s)
                     props = calc_norm_stat_props(bw_ts)
                     avg_iops = props.average // job.params.params['bsize']
                     iops_dev = props.deviation // job.params.params['bsize']
 
-                    lat_ts = get_aggregated(rstorage, suite, job, metric='lat')
+                    lat_ts = get_aggregated(ctx.rstorage, suite.storage_id, job.storage_id, metric='lat',
+                                            trange=job.reliable_info_range_s)
                     bins_edges = numpy.array(get_lat_vals(lat_ts.data.shape[1]), dtype='float32') / 1000  # convert us to ms
                     lat_props = calc_histo_stat_props(lat_ts, bins_edges)
                     table.add_row([job.params.summary,
@@ -48,5 +49,5 @@
                                    float2str(lat_props.perc_50), float2str(lat_props.perc_95)])
 
                 tbl = table.draw()
-                rstorage.put_txt_report(suite, tbl)
+                ctx.rstorage.put_txt_report(suite, tbl)
             print(tbl)
