diff --git a/aos/controls/control_loop_test.h b/aos/controls/control_loop_test.h
index a2dbb7b..25e1a45 100644
--- a/aos/controls/control_loop_test.h
+++ b/aos/controls/control_loop_test.h
@@ -102,7 +102,7 @@
   }
 
   ::aos::monotonic_clock::time_point monotonic_now() {
-    return event_loop_factory_.monotonic_now();
+    return robot_status_event_loop_->monotonic_now();
   }
 
   ::std::chrono::nanoseconds dt() const { return dt_; }
diff --git a/aos/events/logging/logger.cc b/aos/events/logging/logger.cc
index d71c2d2..23dc802 100644
--- a/aos/events/logging/logger.cc
+++ b/aos/events/logging/logger.cc
@@ -279,7 +279,7 @@
 
   Register(event_loop_unique_ptr_.get());
   event_loop_factory_->RunFor(monotonic_start_time() -
-                              event_loop_factory_->monotonic_now());
+                              event_loop_->monotonic_now());
 }
 
 void LogReader::Register(EventLoop *event_loop) {
diff --git a/aos/events/simulated_event_loop.cc b/aos/events/simulated_event_loop.cc
index bfe0de7..b49ceb6 100644
--- a/aos/events/simulated_event_loop.cc
+++ b/aos/events/simulated_event_loop.cc
@@ -216,7 +216,7 @@
 
     SetMsg(msgs_.front());
     msgs_.pop_front();
-    return std::make_pair(true, queue_->monotonic_now());
+    return std::make_pair(true, event_loop()->monotonic_now());
   }
 
   std::pair<bool, monotonic_clock::time_point> DoFetch() override {
@@ -225,7 +225,7 @@
       // simpler.  And call clear, obviously.
       if (!msg_ && queue_->latest_message()) {
         SetMsg(queue_->latest_message());
-        return std::make_pair(true, queue_->monotonic_now());
+        return std::make_pair(true, event_loop()->monotonic_now());
       } else {
         return std::make_pair(false, monotonic_clock::min_time);
       }
@@ -235,7 +235,7 @@
     // latest message from before we started.
     SetMsg(msgs_.back());
     msgs_.clear();
-    return std::make_pair(true, queue_->monotonic_now());
+    return std::make_pair(true, event_loop()->monotonic_now());
   }
 
  private:
@@ -282,10 +282,6 @@
 
   void Disable() override;
 
-  ::aos::monotonic_clock::time_point monotonic_now() const {
-    return scheduler_->monotonic_now();
-  }
-
  private:
   SimulatedEventLoop *simulated_event_loop_;
   EventHandler<SimulatedTimerHandler> event_;
@@ -544,7 +540,8 @@
 }
 
 void SimulatedWatcher::Schedule(std::shared_ptr<SimulatedMessage> message) {
-  monotonic_clock::time_point event_time = scheduler_->monotonic_now();
+  monotonic_clock::time_point event_time =
+      simulated_event_loop_->monotonic_now();
 
   // Messages are queued in order.  If we are the first, add ourselves.
   // Otherwise, don't.
@@ -653,7 +650,7 @@
                                   monotonic_clock::duration repeat_offset) {
   Disable();
   const ::aos::monotonic_clock::time_point monotonic_now =
-      scheduler_->monotonic_now();
+      simulated_event_loop_->monotonic_now();
   base_ = base;
   repeat_offset_ = repeat_offset;
   if (base < monotonic_now) {
@@ -669,7 +666,7 @@
 
 void SimulatedTimerHandler::HandleEvent() {
   const ::aos::monotonic_clock::time_point monotonic_now =
-      scheduler_->monotonic_now();
+      simulated_event_loop_->monotonic_now();
   if (repeat_offset_ != ::aos::monotonic_clock::zero()) {
     // Reschedule.
     while (base_ <= monotonic_now) base_ += repeat_offset_;
diff --git a/y2017/control_loops/superstructure/vision_time_adjuster_test.cc b/y2017/control_loops/superstructure/vision_time_adjuster_test.cc
index 9a58049..701f8ed 100644
--- a/y2017/control_loops/superstructure/vision_time_adjuster_test.cc
+++ b/y2017/control_loops/superstructure/vision_time_adjuster_test.cc
@@ -82,7 +82,7 @@
 
   void SendMessages() {
     SendDrivetrainPosition();
-    if (event_loop_factory_.monotonic_now().time_since_epoch() %
+    if (simulation_event_loop_->monotonic_now().time_since_epoch() %
             kVisionTick ==
         kVisionDelay) {
       SendVisionTarget();
