diff --git a/meta_info.py b/meta_info.py
index c2470df..1f95b34 100644
--- a/meta_info.py
+++ b/meta_info.py
@@ -3,24 +3,23 @@
 
 
 def total_lab_info(data):
-    # <koder>: give 'd' meaningful name
-    d = {}
-    d['nodes_count'] = len(data['nodes'])
-    d['total_memory'] = 0
-    d['total_disk'] = 0
-    d['processor_count'] = 0
+    lab_data = {}
+    lab_data['nodes_count'] = len(data['nodes'])
+    lab_data['total_memory'] = 0
+    lab_data['total_disk'] = 0
+    lab_data['processor_count'] = 0
 
     for node in data['nodes']:
-        d['total_memory'] += node['memory']['total']
-        d['processor_count'] += len(node['processors'])
+        lab_data['total_memory'] += node['memory']['total']
+        lab_data['processor_count'] += len(node['processors'])
 
         for disk in node['disks']:
-            d['total_disk'] += disk['size']
+            lab_data['total_disk'] += disk['size']
 
     to_gb = lambda x: x / (1024 ** 3)
-    d['total_memory'] = format(to_gb(d['total_memory']), ',d')
-    d['total_disk'] = format(to_gb(d['total_disk']), ',d')
-    return d
+    lab_data['total_memory'] = format(to_gb(lab_data['total_memory']), ',d')
+    lab_data['total_disk'] = format(to_gb(lab_data['total_disk']), ',d')
+    return lab_data
 
 
 def collect_lab_data(url, cred):
diff --git a/report.py b/report.py
index 32f9d6f..f609805 100644
--- a/report.py
+++ b/report.py
@@ -1,14 +1,14 @@
+import os
 import sys
 from collections import OrderedDict
 
-
 import formatters
 from chart import charts
+from io_results_loader import filter_data, load_files
+from meta_info import total_lab_info, collect_lab_data
 from utils import ssize_to_b
 from statistic import med_dev, approximate_curve
 
-from disk_perf_test_tool.io_results_loader import (load_files, filter_data)
-
 
 OPERATIONS = (('async', ('randwrite asynchronous', 'randread asynchronous',
                          'write asynchronous', 'read asynchronous')),
@@ -134,14 +134,26 @@
     return charts_url
 
 
-def render_html(charts_urls, dest):
+def render_html(charts_urls, dest, lab_description):
     templ = open("report.html", 'r').read()
-    body = "<div><ol>%s</ol></div>"
+    body = "<a href='#lab_desc'>Lab description</a>" \
+           "<div><ol>{0}</ol></div>" \
+           '<a name="lab_desc"></a>' \
+           "<div><ul>{1}</ul></div>"
     li = "<li><img src='%s'></li>"
     ol = []
+    ul = []
+
+    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 % '\n'.join(ol)}
+
+    html = templ % {'body': body.format('\n'.join(ol),
+                                        '\n'.join(ul))}
     open(dest, 'w').write(html)
 
 
@@ -176,7 +188,10 @@
     return str(ch)
 
 
-def make_io_report(results, path):
+def make_io_report(results, path, lab_url, creds):
+    data = collect_lab_data(lab_url, creds)
+    lab_info = total_lab_info(data)
+
     for suite_type, test_suite_data in results:
         if suite_type != 'io':
             continue
@@ -204,6 +219,7 @@
             url = io_chart(name_filter, concurence, latv, iops_or_bw_v,
                            iops_or_bw_dev_v,
                            fields[2])
+
             charts_url.append(url)
             # _, ax1 = plt.subplots()
             #
@@ -242,11 +258,14 @@
 
             # charts_url.append(str(chart_url))
 
-        render_html(charts_url, path)
+        render_html(charts_url, path, lab_info)
 
 
 def main(args):
-    make_io_report(load_files(args[1:]))
+    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'})
     return 0
 
 
diff --git a/scripts/connector.py b/scripts/connector.py
index 28a4a40..3cf40cc 100644
--- a/scripts/connector.py
+++ b/scripts/connector.py
@@ -1,7 +1,5 @@
 import argparse
 import logging
-import re
-import string
 import sys
 import tempfile
 import os
@@ -171,7 +169,7 @@
 def main(argv):
     args = parse_command_line(argv)
 
-    nodes, to_clean = discover_fuel_nodes(args.fuel_url,
+    nodes, to_clean, _ = discover_fuel_nodes(args.fuel_url,
                                           args.creds, args.cluster_name)
     discover_fuel_nodes_clean(args.fuel_url, {"username": "root",
                                               "password": "test37",
