diff --git a/chart/charts.py b/chart/charts.py
index 1263a64..d1c7142 100644
--- a/chart/charts.py
+++ b/chart/charts.py
@@ -19,7 +19,7 @@
 
 
 def render_vertical_bar(title, legend, bars_data, bars_dev_top,
-                        bars_dev_bottom,
+                        bars_dev_bottom, file_name,
                         width=700, height=400,
                         scale_x=None, scale_y=None, label_x=None,
                         label_y=None, lines=()):
@@ -110,7 +110,7 @@
 
     bar.legend(*legend)
     bar.scale(*scale)
-    img_name = hashlib.md5(str(bar)).hexdigest() + ".png"
+    img_name = file_name + ".png"
     img_path = os.path.join(cfg_dict['charts_img_path'], img_name)
 
     if not os.path.exists(img_path):
diff --git a/report.py b/report.py
index c451010..aa1c356 100644
--- a/report.py
+++ b/report.py
@@ -4,7 +4,7 @@
 
 import formatters
 from chart import charts
-from utils import ssize_to_b
+from utils import ssize_to_b, parse_creds
 from statistic import med_dev
 from io_results_loader import filter_data
 from meta_info import total_lab_info, collect_lab_data
@@ -134,31 +134,36 @@
     return charts_url
 
 
-def render_html(charts_urls, dest, lab_description):
+def render_html(charts_urls, dest, lab_description, info):
     templ = open("report.html", 'r').read()
     body = "<a href='#lab_desc'>Lab description</a>" \
-           "<div><ol>{0}</ol></div>" \
+           "<ol>{0}</ol>" \
+           "<div>{1}</div>" \
            '<a name="lab_desc"></a>' \
-           "<div><ul>{1}</ul></div>"
-    li = "<li><img src='%s'></li>"
-    ol = []
+           "<div><ul>{2}</ul></div>"
+    table = "<table><tr><td>{0}</td><td>{1}</td></tr>" \
+            "<tr><td>{2}</td><td>{3}</td></tr></table>"
     ul = []
+    ol = []
+    li = '<li>{0} : {1}</li>'
+
+    for elem in info:
+        ol.append(li.format(elem.keys(), elem.values()))
 
     for key in lab_description:
         value = lab_description[key]
         ul.append("<li>{0} : {1}</li>".
                   format(key, value))
 
-    for chart in charts_urls:
-        ol.append(li % chart)
-
-    html = templ % {'body': body.format('\n'.join(ol),
-                                        '\n'.join(ul))}
+    charts_urls = ['<img src="{0}">'.format(url) for url in charts_urls]
+    html = templ % {'body':  body.format('\n'.join(ol), table.format(*charts_urls),
+                    '\n'.join(ul))
+    }
     open(dest, 'w').write(html)
 
 
 def io_chart(title, concurence, latv, iops_or_bw, iops_or_bw_dev,
-             legend):
+             legend, fname):
     bar_data, bar_dev = iops_or_bw, iops_or_bw_dev
     legend = [legend]
 
@@ -174,7 +179,7 @@
 
     latv = [lat / 1000 for lat in latv]
     ch = charts.render_vertical_bar(title, legend, [bar_data], [bar_dev_top],
-                                    [bar_dev_bottom],
+                                    [bar_dev_bottom], file_name=fname,
                                     scale_x=concurence,
                                     lines=[
                                         (latv, "msec", "rr", "lat"),
@@ -186,6 +191,9 @@
 
 def make_io_report(results, path, lab_url=None, creds=None):
     if lab_url is not None:
+        username, password, tenant_name = parse_creds(creds)
+        creds = {'username': username, 'password': password,
+                          "tenant_name": tenant_name}
         data = collect_lab_data(lab_url, creds)
         lab_info = total_lab_info(data)
     else:
@@ -198,16 +206,16 @@
         io_test_suite_res = test_suite_data['res']
 
         charts_url = []
+        info = []
 
         name_filters = [
-            # ('hdd_test_rws4k', ('concurence', 'lat', 'iops')),
-            # ('hdd_test_rrs4k', ('concurence', 'lat', 'iops')),
-            ('hdd_test_rrd4k', ('concurence', 'lat', 'iops')),
-            ('hdd_test_swd1m', ('concurence', 'lat', 'bw')),
-            ('hdd_test_srd1m', ('concurence', 'lat', 'bw')),
+            ('hdd_test_rrd4k', ('concurence', 'lat', 'iops'), 'rand_read_4k'),
+            ('hdd_test_swd1m', ('concurence', 'lat', 'bw'), 'seq_write_1m'),
+            ('hdd_test_srd1m', ('concurence', 'lat', 'bw'), 'seq_read_1m'),
+            ('hdd_test_rws4k', ('concurence', 'lat', 'bw'), 'rand_write_1m')
         ]
 
-        for name_filter, fields in name_filters:
+        for name_filter, fields, fname in name_filters:
             th_filter = filter_data(name_filter, fields)
 
             data = sorted(th_filter(io_test_suite_res.values()))
@@ -220,20 +228,19 @@
 
             url = io_chart(name_filter, concurence, latv, iops_or_bw_v,
                            iops_or_bw_dev_v,
-                           fields[2])
-
+                           fields[2], fname)
+            info.append(dict(zip(fields, (concurence, latv, iops_or_bw_v))))
             charts_url.append(url)
 
         if len(charts_url) != 0:
-            render_html(charts_url, path, lab_info)
+            render_html(charts_url, path, lab_info, info)
 
 
 def main(args):
     make_io_report(results=[('a', 'b')],
                    path=os.path.dirname(args[0]),
                    lab_url='http://172.16.52.112:8000',
-                   creds={'username': 'admin', 'password': 'admin',
-                          "tenant_name": 'admin'})
+                   creds='admin:admin@admin')
     return 0
 
 
diff --git a/results/perf-1-compute-hdd/charts/6fa7da0da5f789f40c0adc40fb125521.png b/results/perf-1-compute-hdd/charts/rand_read_4k.png
similarity index 100%
rename from results/perf-1-compute-hdd/charts/6fa7da0da5f789f40c0adc40fb125521.png
rename to results/perf-1-compute-hdd/charts/rand_read_4k.png
Binary files differ
diff --git a/results/perf-1-compute-hdd/charts/9cfbfff2077f35018f164fa9cb4cc9f7.png b/results/perf-1-compute-hdd/charts/seq_write_1m.png
similarity index 100%
rename from results/perf-1-compute-hdd/charts/9cfbfff2077f35018f164fa9cb4cc9f7.png
rename to results/perf-1-compute-hdd/charts/seq_write_1m.png
Binary files differ
diff --git a/run_test.py b/run_test.py
index 8086308..6465760 100755
--- a/run_test.py
+++ b/run_test.py
@@ -306,10 +306,10 @@
         key, config = group.items()[0]
 
         if 'start_test_nodes' == key:
-            params = config['vm_params']
+            params = config['openstack']['vm_params']
             os_nodes_ids = []
 
-            os_creds_type = config['creds']
+            os_creds_type = config['openstack']['creds']
             os_creds = get_os_credentials(cfg, ctx, os_creds_type)
 
             start_vms.nova_connect(**os_creds)
@@ -430,7 +430,9 @@
 def report_stage(cfg, ctx):
 
     html_rep_fname = cfg['html_report_file']
-    report.make_io_report(ctx.results, html_rep_fname)
+    fuel_url = cfg['clouds']['fuel']['url']
+    creds = cfg['clouds']['fuel']['creds']
+    report.make_io_report(ctx.results, html_rep_fname, fuel_url, creds=creds)
 
     logger.info("Html report were stored in " + html_rep_fname)
 
@@ -491,7 +493,7 @@
         stages = [
             discover_stage,
             log_nodes_statistic,
-            connect_stage,
+            # connect_stage,
             deploy_sensors_stage,
             run_tests_stage,
             store_raw_results_stage,
