diff --git a/scripts/run.sh b/scripts/run.sh
index 342356e..b5bc41c 100644
--- a/scripts/run.sh
+++ b/scripts/run.sh
@@ -7,12 +7,12 @@
 bsizes="1k 4k 64k 256k 1m"
 ops="write randwrite"
 osync="s a"
-three_times="1 2 3"
+num_times=3
 
 for bsize in $bsizes ; do
 	for op in $ops ; do 
 		for sync in $osync ; do 
-			for xxx in $three_times ; do
+			for counter in $(seq 1 $num_times) ; do
 				if [[ "$ops" == "write" && "$osync" == "s" ]] ; then
 					continue
 				fi
@@ -30,7 +30,7 @@
 				fi
 
 				io_opts="--type $type -a $op --iodepth 16 --blocksize $bsize --iosize $factor $ssync"
-				python run_rally_test.py -l -o "$io_opts" -t io-scenario $type --rally-extra-opts="--deployment $1"
+				python run_test.py --runner rally -l -o "$io_opts" -t io-scenario $type --runner-extra-opts="--deployment $1"
 			done
 		done
 	done
diff --git a/scripts/run_2.sh b/scripts/run_2.sh
index 7bd92fb..2265176 100644
--- a/scripts/run_2.sh
+++ b/scripts/run_2.sh
@@ -1,8 +1,33 @@
 #!/bin/bash
 set -x
-set -e
 
 type="iozone"
 
+# nova image-list | grep ' ubuntu ' >/dev/null
+# if [ $? -ne 0 ] ; then
+# 	url="https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img"
+# 	glance image-create --name 'ubuntu' --disk-format qcow2 --container-format bare --is-public true --copy-from $url
+# fi
+
+# nova flavor-list | grep ' ceph.512 ' >/dev/null
+# if [ $? -ne 0 ] ; then
+# 	nova flavor-create ceph.512 ceph.512 512 50 1
+# fi
+
+# nova server-group-list | grep ' ceph ' >/dev/null
+# if [ $? -ne 0 ] ; then
+# 	nova server-group-create --policy anti-affinity ceph
+# fi
+
+# nova keypair-list | grep ' ceph ' >/dev/null
+# if [ $? -ne 0 ] ; then
+# 	nova keypair-add ceph > ceph.pem
+# fi
+
+set -e
+
 io_opts="--type $type -a write --iodepth 16 --blocksize 1m --iosize x20"
-python run_rally_test.py -l -o "$io_opts" -t io-scenario $type --rally-extra-opts="--deployment $1"
+python run_test.py --runner ssh -l -o "$io_opts" -t io-scenario $type --runner-extra-opts="ubuntu ceph.pem"
+
+# io_opts="--type $type -a write --iodepth 16 --blocksize 1m --iosize x20"
+# python run_test.py --runner rally -l -o "$io_opts" -t io-scenario $type --runner-extra-opts="--deployment perf-1"
diff --git a/scripts/starts_vms.py b/scripts/starts_vms.py
deleted file mode 100644
index b52c2d5..0000000
--- a/scripts/starts_vms.py
+++ /dev/null
@@ -1,240 +0,0 @@
-import re
-import os
-import time
-
-import paramiko
-from novaclient.client import Client as n_client
-from cinderclient.v1.client import Client as c_client
-
-
-def ostack_get_creds():
-    env = os.environ.get
-    name = env('OS_USERNAME')
-    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())
-
-
-def create_keypair(nova, name, key_path):
-    with open(key_path) as key:
-        return nova.keypairs.create(name, key.read())
-
-
-def create_volume(size, name=None, volid=[0]):
-    cinder = c_client(*ostack_get_creds())
-    name = 'ceph-test-{0}'.format(volid[0])
-    volid[0] = volid[0] + 1
-    vol = cinder.volumes.create(size=size, display_name=name)
-    err_count = 0
-    while vol.status != 'available':
-        if vol.status == 'error':
-            if err_count == 3:
-                print "Fail to create volume"
-                raise RuntimeError("Fail to create volume")
-            else:
-                err_count += 1
-                cinder.volumes.delete(vol)
-                time.sleep(1)
-                vol = cinder.volumes.create(size=size, display_name=name)
-                continue
-        time.sleep(1)
-        vol = cinder.volumes.get(vol.id)
-    return vol
-
-
-def wait_for_server_active(nova, server, timeout=240):
-    t = time.time()
-    while True:
-        time.sleep(5)
-        sstate = getattr(server, 'OS-EXT-STS:vm_state').lower()
-
-        if sstate == 'active':
-            return True
-
-        print "Curr state is", sstate, "waiting for active"
-
-        if sstate == 'error':
-            return False
-
-        if time.time() - t > timeout:
-            return False
-
-        server = nova.servers.get(server)
-
-
-def get_or_create_floating_ip(nova, pool, used_ip):
-    ip_list = nova.floating_ips.list()
-
-    if pool is not None:
-        ip_list = [ip for ip in ip_list if ip.pool == pool]
-
-    ip_list = [ip for ip in ip_list if ip.instance_id is None]
-    ip_list = [ip for ip in ip_list if ip.ip not in used_ip]
-
-    if len(ip_list) > 0:
-        return ip_list[0]
-    else:
-        return nova.floating_ips.create(pool)
-
-
-def create_vms(nova, amount, keypair_name, img_name,
-               flavor_name, vol_sz, network_zone_name=None):
-
-    network = nova.networks.find(label=network_zone_name)
-    nics = [{'net-id': network.id}]
-    fl = nova.flavors.find(name=flavor_name)
-    img = nova.images.find(name=img_name)
-    srvs = []
-    counter = 0
-
-    for i in range(3):
-        amount_left = amount - len(srvs)
-
-        new_srvs = []
-        for i in range(amount_left):
-            print "creating server"
-            srv = nova.servers.create("ceph-test-{0}".format(counter),
-                                      flavor=fl, image=img, nics=nics,
-                                      key_name=keypair_name)
-            counter += 1
-            new_srvs.append(srv)
-            print srv
-
-        deleted_servers = []
-        for srv in new_srvs:
-            if not wait_for_server_active(nova, srv):
-                print "Server", srv.name, "fails to start. Kill it and",
-                print " try again"
-
-                nova.servers.delete(srv)
-                deleted_servers.append(srv)
-            else:
-                srvs.append(srv)
-
-        if len(deleted_servers) != 0:
-            time.sleep(5)
-
-    if len(srvs) != amount:
-        print "ERROR: can't start required amount of servers. Exit"
-        raise RuntimeError("Fail to create {0} servers".format(amount))
-
-    result = {}
-    for srv in srvs:
-        print "wait till server be ready"
-        wait_for_server_active(nova, srv)
-        print "creating volume"
-        vol = create_volume(vol_sz)
-        print "attach volume to server"
-        nova.volumes.create_server_volume(srv.id, vol.id, None)
-        print "create floating ip"
-        flt_ip = get_or_create_floating_ip(nova, 'net04_ext', result.keys())
-        print "attaching ip to server"
-        srv.add_floating_ip(flt_ip)
-        result[flt_ip.ip] = srv
-
-    return result
-
-
-def clear_all(nova):
-    deleted_srvs = set()
-    for srv in nova.servers.list():
-        if re.match(r"ceph-test-\d+", srv.name):
-            print "Deleting server", srv.name
-            nova.servers.delete(srv)
-            deleted_srvs.add(srv.id)
-
-    while deleted_srvs != set():
-        print "Waiting till all servers are actually deleted"
-        all_id = set(srv.id for srv in nova.servers.list())
-        if all_id.intersection(deleted_srvs) == set():
-            print "Done, deleting volumes"
-            break
-        time.sleep(1)
-
-    # wait till vm actually deleted
-
-    cinder = c_client(*ostack_get_creds())
-    for vol in cinder.volumes.list():
-        if isinstance(vol.display_name, basestring):
-            if re.match(r'ceph-test-\d+', vol.display_name):
-                if vol.status in ('available', 'error'):
-                    print "Deleting volume", vol.display_name
-                    cinder.volumes.delete(vol)
-
-    print "Clearing done (yet some volumes may still deleting)"
-
-
-def wait_ssh_ready(host, user, key_file, retry_count=10, timeout=5):
-    ssh = paramiko.SSHClient()
-    ssh.load_host_keys('/dev/null')
-    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
-    ssh.known_hosts = None
-
-    for i in range(retry_count):
-        try:
-            ssh.connect(host, username=user, key_filename=key_file,
-                        look_for_keys=False)
-            break
-        except:
-            if i == retry_count - 1:
-                raise
-            time.sleep(timeout)
-
-
-# def prepare_host(key_file, ip, fio_path, dst_fio_path, user='cirros'):
-#     print "Wait till ssh ready...."
-#     wait_ssh_ready(ip, user, key_file)
-
-#     print "Preparing host >"
-#     print "    Coping fio"
-#     copy_fio(key_file, ip, fio_path, user, dst_fio_path)
-
-#     key_opts = '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
-#     args = (key_file, user, ip, key_opts)
-#     cmd_format = "ssh {3} -i {0} {1}@{2} '{{0}}'".format(*args).format
-
-#     def exec_on_host(cmd):
-#         print "    " + cmd
-#         subprocess.check_call(cmd_format(cmd), shell=True)
-
-#     exec_on_host("sudo /usr/sbin/mkfs.ext4 /dev/vdb")
-#     exec_on_host("sudo /bin/mkdir /media/ceph")
-#     exec_on_host("sudo /bin/mount /dev/vdb /media/ceph")
-#     exec_on_host("sudo /bin/chmod a+rwx /media/ceph")
-
-
-def main():
-    image_name = 'TestVM'
-    flavor_name = 'ceph'
-    vol_sz = 50
-    network_zone_name = 'net04'
-    amount = 10
-    keypair_name = 'ceph-test'
-
-    nova = nova_connect()
-    clear_all(nova)
-
-    try:
-        ips = []
-        params = dict(vol_sz=vol_sz)
-        params['image_name'] = image_name
-        params['flavor_name'] = flavor_name
-        params['network_zone_name'] = network_zone_name
-        params['amount'] = amount
-        params['keypair_name'] = keypair_name
-
-        for ip, host in create_vms(nova, **params).items():
-            ips.append(ip)
-
-        print "All setup done! Ips =", " ".join(ips)
-        print "Starting tests"
-    finally:
-        clear_all(nova)
-
-if __name__ == "__main__":
-    exit(main())
