diff --git a/config.yaml b/config.yaml
index 040c49e..1715dfa 100644
--- a/config.yaml
+++ b/config.yaml
@@ -51,22 +51,38 @@
 #         test-vm: system-cpu
 
 # # tests to run
-# tests: #$include(tests.yaml)
-#     # - with_test_nodes:
-#     #     openstack:
-#     #         vm_params:
-#     #             count: x1
-#     #             img_name: disk_io_perf
-#     #             flavor_name: disk_io_perf.256
-#     #             keypair_name: disk_io_perf
-#     #             network_zone_name: novanetwork
-#     #             flt_ip_pool: nova
-#     #             creds: "ssh://ubuntu@{0}::disk_io_perf.pem"
-#     #     tests:
-#             # - pgbench:
-#             #     opts:
-#             #         num_clients: [4, 8, 12]
-#             #         transactions: [1, 2, 3]
+tests: # $include(tests.yaml)
+      start_test_nodes:
+         openstack:
+             vm_params:
+                 count: x1
+                 img_name: disk_io_perf
+                 flavor_name: disk_io_perf.256
+                 keypair_name: disk_io_perf
+                 network_zone_name: novanetwork
+                 flt_ip_pool: nova
+                 creds: "ssh://ubuntu@{0}::disk_io_perf.pem"
+         internal_tests:
+             - pgbench:
+                  opts:
+                      num_clients: [4, 8, 12]
+                      transactions: [1, 2, 3]
+
+      with_test_nodes:
+         openstack:
+             vm_params:
+                 count: x1
+                 img_name: disk_io_perf
+                 flavor_name: disk_io_perf.256
+                 keypair_name: disk_io_perf
+                 network_zone_name: novanetwork
+                 flt_ip_pool: nova
+                 creds: "ssh://ubuntu@{0}::disk_io_perf.pem"
+         internal_tests:
+             - pgbench:
+                  opts:
+                      num_clients: [4, 8, 12]
+                      transactions: [1, 2, 3]
 #     - io: tests/io_task_test.cfg
 
 #             # - vm_count: 
diff --git a/run_test.py b/run_test.py
index afd8bca..89b793f 100755
--- a/run_test.py
+++ b/run_test.py
@@ -1,3 +1,5 @@
+import os
+import pickle
 import sys
 import json
 import Queue
@@ -16,7 +18,6 @@
 from nodes.node import Node
 from config import cfg_dict, parse_config
 from tests.itest import IOPerfTest, PgBenchTest
-
 from sensors.api import start_monitoring
 
 
@@ -97,29 +98,30 @@
     res_q = Queue.Queue()
 
     for test in config['tests']:
-        for name, params in test.items():
-            logger.info("Starting {0} tests".format(name))
+        for test in config['tests'][test]['internal_tests']:
+            for name, params in test.items():
+                logger.info("Starting {0} tests".format(name))
 
-            threads = []
-            barrier = utils.Barrier(len(test_nodes))
-            for node in test_nodes:
-                msg = "Starting {0} test on {1} node"
-                logger.debug(msg.format(name, node.conn_url))
-                test = tool_type_mapper[name](params, res_q.put)
-                th = threading.Thread(None, test_thread, None,
-                                      (test, node, barrier))
-                threads.append(th)
-                th.daemon = True
-                th.start()
+                threads = []
+                barrier = utils.Barrier(len(test_nodes))
+                for node in test_nodes:
+                    msg = "Starting {0} test on {1} node"
+                    logger.debug(msg.format(name, node.conn_url))
+                    test = tool_type_mapper[name](params, res_q.put)
+                    th = threading.Thread(None, test_thread, None,
+                                          (test, node, barrier))
+                    threads.append(th)
+                    th.daemon = True
+                    th.start()
 
-            for th in threads:
-                th.join()
+                for th in threads:
+                    th.join()
 
-            results = []
-            while not res_q.empty():
-                results.append(res_q.get())
-                # logger.info("Get test result {0!r}".format(results[-1]))
-            yield name, results
+                results = []
+                while not res_q.empty():
+                    results.append(res_q.get())
+                    # logger.info("Get test result {0!r}".format(results[-1]))
+                yield name, results
 
 
 def parse_args(argv):
@@ -207,17 +209,51 @@
     ctx.sensor_data = ctx.sensors_control_queue.get()
 
 
-def run_tests_stage(cfg, ctx):
+def run_all_test(cfg, ctx, store_nodes):
     ctx.results = []
 
+    if 'start_test_nodes' in cfg['tests']:
+        params = cfg['tests']['start_test_nodes']['openstack']
+    for new_node in start_vms.launch_vms(params):
+        new_node.roles.append('testnode')
+        ctx.nodes.append(new_node)
+
     if 'tests' in cfg:
+        store_nodes(ctx.nodes)
         ctx.results.extend(run_tests(cfg_dict, ctx.nodes))
 
-    # if 'start_test_nodes' in opts.stages:
-    #     params = cfg_dict['start_test_nodes']['openstack']
-    #     for new_node in start_vms.launch_vms(params):
-    #         new_node.roles.append('testnode')
-    #         nodes.append(new_node)
+
+def shut_down_vms(cfg, ctx):
+    with open('vm_journal.log') as f:
+        data = str(f.read())
+        nodes = pickle.loads(data)
+
+        for node in nodes:
+            logger.info("Node " + str(node) + " has been loaded")
+
+        logger.info("Removing nodes")
+        start_vms.clear_nodes()
+        logger.info("Nodes has been removed")
+
+
+def store_nodes(nodes):
+    with open('vm_journal.log', 'w+') as f:
+        f.write(pickle.dumps([nodes]))
+        for node in nodes:
+            logger.info("Node " + str(node) + " has been stored")
+
+
+def clear_enviroment(cfg, ctx):
+    if os.path.exists('vm_journal.log'):
+        shut_down_vms(cfg, ctx)
+        os.remove('vm_journal.log')
+
+
+def run_tests_stage(cfg, ctx):
+    # clear nodes that possible were created on previous test running
+    clear_enviroment(cfg, ctx)
+    ctx.clear_calls_stack.append(shut_down_vms)
+    run_all_test(cfg, ctx, store_nodes)
 
 
 def disconnect_stage(cfg, ctx):
@@ -279,10 +315,12 @@
     ctx.build_meta['build_descrption'] = opts.build_description
     ctx.build_meta['build_type'] = opts.build_type
     ctx.build_meta['username'] = opts.username
-
+    logger.setLevel(logging.INFO)
+    logger.addHandler(logging.FileHandler('log.txt'))
     try:
         for stage in stages:
             logger.info("Start {0.__name__} stage".format(stage))
+            print "Start {0.__name__} stage".format(stage)
             stage(cfg_dict, ctx)
     finally:
         exc, cls, tb = sys.exc_info()
diff --git a/start_vms.py b/start_vms.py
index 81f3e81..f7cb09f 100644
--- a/start_vms.py
+++ b/start_vms.py
@@ -10,6 +10,7 @@
 
 from nodes.node import Node
 from nodes.openstack import get_floating_ip
+from utils import parse_creds
 
 logger = logging.getLogger("io-perf-tool")
 
@@ -20,11 +21,13 @@
     passwd = env('OS_PASSWORD')
     tenant = env('OS_TENANT_NAME')
     auth_url = env('OS_AUTH_URL')
+
     return name, passwd, tenant, auth_url
 
 
 def nova_connect():
-    return n_client('1.1', *ostack_get_creds())
+    return n_client('1.1', *ostack_get_creds()
+                    )
 
 
 def create_keypair(nova, name, key_path):
@@ -84,9 +87,9 @@
 
 
 def launch_vms(config):
-    creds = config['creds']
-    if creds != 'ENV':
-        raise ValueError("Only 'ENV' creds are supported")
+    creds = config['vm_params']['creds']
+    # if creds != 'ENV':
+    #     raise ValueError("Only 'ENV' creds are supported")
 
     logger.debug("Starting new nodes on openstack")
     conn = nova_connect()
@@ -197,6 +200,11 @@
     return flt_ip.ip, nova.servers.get(srv.id)
 
 
+def clear_nodes():
+    nova = nova_connect()
+    clear_all(nova)
+
+
 def clear_all(nova, name_templ="ceph-test-{0}"):
     deleted_srvs = set()
     for srv in nova.servers.list():
