diff --git a/fix_rally.py b/fix_rally.py
index e3b7bcf..1f02e8d 100644
--- a/fix_rally.py
+++ b/fix_rally.py
@@ -47,6 +47,9 @@
     return closure
 
 
+# should actually use mock module for this,
+# but don't wanna to add new dependency
+
 @contextlib.contextmanager
 def patch_VMScenario_run_command_over_ssh(paths,
                                           on_result_cb,
@@ -74,7 +77,7 @@
                         put_dir_recursively(sftp, src, dst)
                     else:
                         templ = "Can't copy {0!r} - " + \
-                                "it neither file or directory"
+                                "it neither a file not a directory"
                         msg = templ.format(src)
                         log(msg)
                         raise exceptions.ScriptError(msg)
@@ -121,8 +124,8 @@
                 except:
                     pass
                 else:
+                    on_result_cb(result)
                     if '__meta__' in result:
-                        on_result_cb(result)
                         result.pop('__meta__')
                     out = json.dumps(result)
             except Exception as err:
@@ -157,8 +160,9 @@
 
     if py_dst_cont == args_repl_rr:
         templ = "Can't find replace marker in file {0}"
-        log(templ.format(testtool_py_inp_path))
-        exit(1)
+        msg = templ.format(testtool_py_inp_path)
+        log(msg)
+        raise ValueError(msg)
 
     yaml_src_cont = open(os.path.join(files_dir, "io.yaml")).read()
     task_params = yaml.load(yaml_src_cont)
@@ -172,7 +176,9 @@
     return yaml_file, py_file
 
 
-def run_test(tool, testtool_py_argv, dst_testtool_path, files_dir):
+def run_test(tool, testtool_py_argv, dst_testtool_path, files_dir,
+             rally_extra_opts, max_preparation_time=300):
+
     path = 'iozone' if 'iozone' == tool else 'fio'
     testtool_local = os.path.join(files_dir, path)
 
@@ -185,8 +191,6 @@
     vm_sec = 'VMTasks.boot_runcommand_delete'
     concurrency = config[vm_sec][0]['runner']['concurrency']
 
-    max_preparation_time = 300
-
     try:
         copy_files = {testtool_local: dst_testtool_path}
 
@@ -199,11 +203,13 @@
         max_release_time = time.time() + max_preparation_time
 
         with do_patch(copy_files, results_cb, barrier, max_release_time):
-            log("Start rally with 'task start {0}'".format(yaml_file))
-            rally_result = run_rally(['task', 'start', yaml_file])
+            opts = ['task', 'start', yaml_file] + list(rally_extra_opts)
+            log("Start rally with opts '{0}'".format(" ".join(opts)))
+            run_rally(opts)
 
-        # while not result_queue.empty():
-        #     log("meta = {0!r}\n".format(result_queue.get()))
+        rally_result = []
+        while not result_queue.empty():
+            rally_result.append(result_queue.get())
 
         return rally_result
 
@@ -217,12 +223,17 @@
         description="Run rally disk io performance test")
     parser.add_argument("tool_type", help="test tool type",
                         choices=['iozone', 'fio'])
-    parser.add_argument("test_directory", help="directory with test")
     parser.add_argument("-l", dest='extra_logs',
                         action='store_true', default=False,
                         help="print some extra log info")
     parser.add_argument("-o", "--io-opts", dest='io_opts',
                         default=None, help="cmd line options for io.py")
+    parser.add_argument("--test-directory", help="directory with test",
+                        dest="test_directory", required=True)
+    parser.add_argument("rally_extra_opts", nargs="*",
+                        default=[], help="rally extra options")
+    parser.add_argument("--max-preparation-time", default=300,
+                        type=int, dest="max_preparation_time")
     return parser.parse_args(argv)
 
 
@@ -249,10 +260,13 @@
     else:
         testtool_py_argv = opts.io_opts.split(" ")
 
-    run_test(opts.tool_type,
-             testtool_py_argv,
-             dst_testtool_path,
-             opts.test_directory)
+    res = run_test(opts.tool_type,
+                   testtool_py_argv,
+                   dst_testtool_path,
+                   files_dir=opts.test_directory,
+                   rally_extra_opts=opts.rally_extra_opts,
+                   max_preparation_time=opts.max_preparation_time)
+    res
     return 0
 
 # ubuntu cloud image
diff --git a/io-scenario/io.yaml b/io-scenario/io.yaml
index 6f71007..d9c7ad4 100644
--- a/io-scenario/io.yaml
+++ b/io-scenario/io.yaml
@@ -13,8 +13,8 @@
         username: "ubuntu"
       runner:
         type: "constant"
-        times: 4
-        concurrency: 4
+        times: 3
+        concurrency: 3
       context:
         users:
           tenants: 3
diff --git a/make_report.py b/make_report.py
index eb99ae8..e7bc946 100644
--- a/make_report.py
+++ b/make_report.py
@@ -1,10 +1,15 @@
-import gspread
-import argparse
+import sys
 import json
+import argparse
+
+
+import gspread
+
 
 from config import DEFAULT_FILE_PATH, \
-    WORK_SHEET, DOCUMENT_ID, ROW_COUNT, OUTPUT_FILE
-from storage_api import DiskStorage, GoogleDocsStorage, get_work_sheet, append_row
+    WORK_SHEET, DOCUMENT_ID, OUTPUT_FILE
+from storage_api import DiskStorage, GoogleDocsStorage, \
+    get_work_sheet, append_row
 
 
 def load_data(file_name):
@@ -13,7 +18,8 @@
         return json.loads(data)
 
 
-#getting worksheet from sheet or create it with specified column names.
+# getting worksheet from sheet or create it with specified column names.
+
 
 def make_report(email, password, data):
     gc = gspread.login(email, password)
@@ -23,7 +29,20 @@
     append_row(work_sheet, data)
 
 
-def main(file_name, email, password, mode):
+def parse_args(argv):
+    parser = argparse.ArgumentParser()
+    parser.add_argument('-n', '--name', help='data file path',
+                        default=DEFAULT_FILE_PATH)
+    parser.add_argument('-e', '--email', help='user email',
+                        default="aaa@gmail.com")
+    parser.add_argument('-p', '--password', help='user password',
+                        default="1234")
+    parser.add_argument('-m', '--mode', help='mode type local or global',
+                        default='local')
+    return parser.parse_args(argv)
+
+
+def process_results(file_name, email, password, mode):
     data = load_data(file_name)
 
     if mode == 'local':
@@ -34,16 +53,15 @@
     storage.store(data)
 
 
-if __name__ == '__main__':
-    parser = argparse.ArgumentParser()
-    parser.add_argument('-n', '--name', help='data file path',
-                        default=DEFAULT_FILE_PATH)
-    parser.add_argument('-e', '--email', help='user email',
-                        default="aaa@gmail.com")
-    parser.add_argument('-p', '--password', help='user password',
-                        default="1234")
-    parser.add_argument('-m', '--mode', help='mode type local or global',
-                        default='local')
-    results = parser.parse_args()
-    main(results.name, results.email, results.password, results.mode)
+def main(argv):
+    opts = parse_args(argv)
 
+    process_results(opts.name,
+                    opts.email,
+                    opts.password,
+                    opts.mode)
+    return 0
+
+
+if __name__ == '__main__':
+    exit(main(sys.argv[1:]))
