class X86RTC : public MC146818
     {
       public:
-        X86RTC(const std::string &n, const struct tm time,
-                bool bcd, Tick frequency) : MC146818(n, time, bcd, frequency)
+        X86RTC(EventManager *em, const std::string &n, const struct tm time,
+                bool bcd, Tick frequency) :
+            MC146818(em, n, time, bcd, frequency)
         {
         }
       protected:
 
   public:
 
-    Cmos() : rtc("rtc", foo_time, true, ULL(5000000000))
+    Cmos(EventManager *em) : rtc(em, "rtc", foo_time, true, ULL(5000000000))
     {
         memset(regs, 0, numRegs * sizeof(uint8_t));
         address = 0;
     }
 
-    Cmos(Tick _latency) : SubDevice(_latency),
-        rtc("rtc", foo_time, true, ULL(5000000000))
+    Cmos(EventManager *em, Tick _latency) : SubDevice(_latency),
+        rtc(em, "rtc", foo_time, true, ULL(5000000000))
     {
         memset(regs, 0, numRegs * sizeof(uint8_t));
         address = 0;
     }
 
-    Cmos(Addr start, Addr size, Tick _latency) :
+    Cmos(EventManager *em, Addr start, Addr size, Tick _latency) :
         SubDevice(start, size, _latency),
-        rtc("rtc", foo_time, true, ULL(5000000000))
+        rtc(em, "rtc", foo_time, true, ULL(5000000000))
     {
         memset(regs, 0, numRegs * sizeof(uint8_t));
         address = 0;
 
   public:
     Intel8254Timer pit;
 
-    I8254(const std::string &name) : pit(name)
+    I8254(EventManager *em, const std::string &name) : pit(em, name)
     {}
-    I8254(const std::string &name, Tick _latency) :
-        SubDevice(_latency), pit(name)
+    I8254(EventManager *em, const std::string &name, Tick _latency) :
+        SubDevice(_latency), pit(em, name)
     {}
-    I8254(const std::string &name, Addr start, Addr size, Tick _latency) :
-        SubDevice(start, size, _latency), pit(name)
+    I8254(EventManager *em, const std::string &name,
+            Addr start, Addr size, Tick _latency) :
+        SubDevice(start, size, _latency), pit(em, name)
     {}
 
     Tick read(PacketPtr pkt);
 
 SouthBridge::SouthBridge(const Params *p) : PioDevice(p),
     pic1(0x20, 2, p->pio_latency),
     pic2(0xA0, 2, p->pio_latency),
-    pit(p->name + ".pit", 0x40, 4, p->pio_latency),
-    cmos(0x70, 2, p->pio_latency),
+    pit(this, p->name + ".pit", 0x40, 4, p->pio_latency),
+    cmos(this, 0x70, 2, p->pio_latency),
     speaker(&pit, 0x61, 1, p->pio_latency)
 {
     addDevice(pic1);