diff --git a/cfg_checker/agent/fio_runner.py b/cfg_checker/agent/fio_runner.py
index 50afeca..c8488af 100644
--- a/cfg_checker/agent/fio_runner.py
+++ b/cfg_checker/agent/fio_runner.py
@@ -6,7 +6,7 @@
 
 
 from copy import deepcopy
-from datetime import datetime, timedelta
+from datetime import datetime, timezone
 from platform import system, release, node
 from threading import Thread
 import threading
@@ -18,7 +18,7 @@
 from cfg_checker.common.log import logger
 
 
-_datetime_fmt = "%m/%d/%Y, %H:%M:%S"
+_datetime_fmt = "%m/%d/%Y, %H:%M:%S%z"
 fio_options_common = {
     "name": "agent_run",
     "filename": "/cephvol/testfile",
@@ -64,7 +64,7 @@
 
 def get_time(timestamp=None):
     if not timestamp:
-        _t = datetime.now()
+        _t = datetime.now(timezone.utc)
     else:
         _t = datetime.fromtimestamp(timestamp)
     return _t.strftime(_datetime_fmt)
@@ -85,7 +85,7 @@
 
 def wait_until(end_datetime):
     while True:
-        diff = (end_datetime - datetime.now()).total_seconds()
+        diff = (end_datetime - datetime.now(timezone.utc)).total_seconds()
         # In case end_datetime was in past to begin with
         if diff < 0:
             return
@@ -297,11 +297,12 @@
         self.fiorun = ShellThread(_cmd, _q)
         # Check if schedule is set
         if self.scheduled_datetime:
+            _now = datetime.now(timezone.utc)
             logger.debug(
                 "waiting for '{}', now is '{}', total of {} sec left".format(
                     self.scheduled_datetime.strftime(_datetime_fmt),
-                    datetime.now().strftime(_datetime_fmt),
-                    (self.scheduled_datetime - datetime.now()).total_seconds()
+                    _now.strftime(_datetime_fmt),
+                    (self.scheduled_datetime - _now).total_seconds()
                 )
             )
             wait_until(self.scheduled_datetime)
@@ -392,7 +393,8 @@
         _scheduled = False
         _diff = -1
         if self.scheduled_datetime:
-            _diff = (self.scheduled_datetime - datetime.now()).total_seconds()
+            _now = datetime.now(timezone.utc)
+            _diff = (self.scheduled_datetime - _now).total_seconds()
             if _diff > 0:
                 _scheduled = True
         _s = "running" if _running else "idle"
@@ -575,10 +577,11 @@
             _s = self.fio.status()
             if _s["status"] == "scheduled":
                 _t = self.fio.scheduled_datetime
-                _n = datetime.now()
+                _n = datetime.now(timezone.utc)
                 _delta = (_t - _n).total_seconds()
                 print(
-                    "waiting for '{}'; now '{}'; {} sec left".format(
+                    "{}: waiting for '{}'; now '{}'; {} sec left".format(
+                        _s["status"],
                         _t.strftime(_datetime_fmt),
                         _n.strftime(_datetime_fmt),
                         _delta
@@ -609,7 +612,8 @@
     _opts["readwrite"] = "read"
     _opts["ramp_time"] = "1s"
     _opts["runtime"] = "5s"
-    _shell.do_singlerun(_opts)
+    _opts["scheduled_to"] = "11/13/2021, 23:03:30+0000"
+    _shell.do_scheduledrun(_opts)
     _shell()
     _times = _shell.get_resultlist()
     print("# results:\n{}".format("\n".join(_times)))
@@ -623,9 +627,7 @@
     _opts["readwrite"] = "read"
     _opts["ramp_time"] = "1s"
     _opts["runtime"] = "10s"
-    _opts["scheduled_to"] = (datetime.now() + timedelta(seconds=12)).strftime(
-        _datetime_fmt
-    )
+    _opts["scheduled_to"] = "11/13/2021, 23:04:20+0000"
     _shell.do_scheduledrun(_opts)
     _shell()
     _times = _shell.get_resultlist()
