changeState(SimObject::Running);
         if (thread->status() == ThreadContext::Active) {
-            if (!tickEvent.scheduled())
-                tickEvent.schedule(curTick);
+            if (!tickEvent.scheduled()) {
+                Tick nextTick = curTick + cycles(1) - 1;
+                nextTick -= (nextTick % (cycles(1)));
+                tickEvent.schedule(nextTick);
+            }
         }
     }
 }
         ThreadContext *tc = threadContexts[i];
         if (tc->status() == ThreadContext::Active && _status != Running) {
             _status = Running;
-            tickEvent.schedule(curTick);
+            Tick nextTick = curTick + cycles(1) - 1;
+            nextTick -= (nextTick % (cycles(1)));
+            tickEvent.schedule(nextTick);
             break;
         }
     }
     //Make sure ticks are still on multiples of cycles
     Tick nextTick = curTick + cycles(1) - 1;
     nextTick -= (nextTick % (cycles(1)));
-    tickEvent.schedule(curTick + cycles(delay));
+    tickEvent.schedule(nextTick);
     _status = Running;
 }