diff --git a/config.py b/config.py
index cfe5438..e5962da 100644
--- a/config.py
+++ b/config.py
@@ -39,3 +39,4 @@
     cfg_dict['html_report_file'] = in_var_dir('report.html')
     cfg_dict['text_report_file'] = in_var_dir('report.txt')
     cfg_dict['log_file'] = in_var_dir('log.txt')
+    cfg_dict['sensor_storage'] = in_var_dir('sensor_storage.txt')
diff --git a/report.py b/report.py
index ec42035..b2cc1a2 100644
--- a/report.py
+++ b/report.py
@@ -176,9 +176,12 @@
     return str(ch)
 
 
-def make_io_report(results, path, lab_url, creds):
-    data = collect_lab_data(lab_url, creds)
-    lab_info = total_lab_info(data)
+def make_io_report(results, path, lab_url=None, creds=None):
+    if lab_url is not None:
+        data = collect_lab_data(lab_url, creds)
+        lab_info = total_lab_info(data)
+    else:
+        lab_info = ""
 
     for suite_type, test_suite_data in results:
         if suite_type != 'io':
diff --git a/run_test.py b/run_test.py
index b424b76..8086308 100755
--- a/run_test.py
+++ b/run_test.py
@@ -1,5 +1,6 @@
 import os
 import sys
+import time
 import Queue
 import pprint
 import logging
@@ -18,9 +19,9 @@
 from nodes import discover
 from nodes.node import Node
 from config import cfg_dict, load_config
-from sensors.api import start_monitoring
 from tests.itest import IOPerfTest, PgBenchTest
 from formatters import format_results_for_console
+from sensors.api import start_monitoring, deploy_and_start_sensors
 
 
 logger = logging.getLogger("io-perf-tool")
@@ -124,15 +125,15 @@
     logger.info("All nodes connected successfully")
 
 
-def save_sensors_data(q):
+def save_sensors_data(q, fd):
     logger.info("Start receiving sensors data")
-    sensor_data = []
     while True:
         val = q.get()
         if val is None:
-            q.put(sensor_data)
+            q.put([])
             break
-        sensor_data.append(val)
+        fd.write("\n" + str(time.time()) + " : ")
+        fd.write(repr(val))
     logger.info("Sensors thread exits")
 
 
@@ -245,14 +246,16 @@
 
     ctx.sensors_control_queue = ctx.sensor_cm.__enter__()
 
+    fd = open(cfg_dict['sensor_storage'], "w")
     th = threading.Thread(None, save_sensors_data, None,
-                          (ctx.sensors_control_queue,))
+                          (ctx.sensors_control_queue, fd))
     th.daemon = True
     th.start()
     ctx.sensor_listen_thread = th
 
 
 def remove_sensors_stage(cfg, ctx):
+    ctx.sensor_cm.__exit__(None, None, None)
     ctx.sensors_control_queue.put(None)
     ctx.sensor_listen_thread.join()
     ctx.sensor_data = ctx.sensors_control_queue.get()
@@ -327,12 +330,26 @@
 
                 connect_all(new_nodes)
 
+                # deploy sensors on new nodes
+                # unify this code
+                if 'sensors' in cfg:
+                    sens_cfg = []
+                    sensors_str = cfg["sensors"]["roles_mapping"]['testnode']
+                    sensors = [sens.strip() for sens in sensors_str.split(",")]
+
+                    collect_cfg = dict((sensor, {}) for sensor in sensors)
+                    for node in new_nodes:
+                        sens_cfg.append((node.connection, collect_cfg))
+
+                    uri = cfg["sensors"]["receiver_uri"]
+                    deploy_and_start_sensors(uri, None,
+                                             connected_config=sens_cfg)
+
                 for test_group in config.get('tests', []):
                     ctx.results.extend(run_tests(test_group, ctx.nodes))
 
             finally:
-                # shut_down_vms_stage(cfg, ctx)
-                pass
+                shut_down_vms_stage(cfg, ctx)
 
         elif 'tests' in key:
             ctx.results.extend(run_tests(config, ctx.nodes))
diff --git a/sensors/deploy_sensors.py b/sensors/deploy_sensors.py
index 3c715ef..feb8bcb 100644
--- a/sensors/deploy_sensors.py
+++ b/sensors/deploy_sensors.py
@@ -17,6 +17,7 @@
 def deploy_and_start_sensors(monitor_uri, config,
                              remote_path='/tmp/sensors',
                              connected_config=None):
+
     paths = {os.path.dirname(__file__): remote_path}
     with ThreadPoolExecutor(max_workers=32) as executor:
         futures = []
diff --git a/tests/itest.py b/tests/itest.py
index ad76b9e..975499b 100644
--- a/tests/itest.py
+++ b/tests/itest.py
@@ -160,6 +160,7 @@
             out_err = run_over_ssh(conn, cmd,
                                    stdin_data=self.raw_cfg,
                                    timeout=int(exec_time * 1.1 + 300))
+            logger.info("Done")
         finally:
             barrier.exit()
 
