DumbTOD::DumbTOD(Params *p)
     : BasicPioDevice(p)
 {
+    struct tm tm;
+    char *tz;
+
     pioSize = 0x08;
 
-    struct tm tm;
     parseTime(p->init_time, &tm);
-    todTime = timegm(&tm);
+    tz = getenv("TZ");
+    setenv("TZ", "", 1);
+    tzset();
+    todTime = mktime(&tm);
+    if (tz)
+        setenv("TZ", tz, 1);
+    else
+        unsetenv("TZ");
+    tzset();
 
     DPRINTFN("Real-time clock set to %s\n", asctime(&tm));
     DPRINTFN("Real-time clock set to %d\n", todTime);
     panic("Dumb tod device doesn't support writes\n");
 }
 
+void
+DumbTOD::serialize(std::ostream &os)
+{
+    SERIALIZE_SCALAR(todTime);
+}
+
+void
+DumbTOD::unserialize(Checkpoint *cp, const std::string §ion)
+{
+    UNSERIALIZE_SCALAR(todTime);
+}
+
+
 BEGIN_DECLARE_SIM_OBJECT_PARAMS(DumbTOD)
 
     Param<Addr> pio_addr;
 
 
     virtual Tick read(PacketPtr pkt);
     virtual Tick write(PacketPtr pkt);
+
+    /**
+     * Serialize this object to the given output stream.
+     * @param os The stream to serialize to.
+     */
+    virtual void serialize(std::ostream &os);
+
+    /**
+     * Reconstruct the state of this object from a checkpoint.
+     * @param cp The checkpoint use.
+     * @param section The section name of this object
+     */
+    virtual void unserialize(Checkpoint *cp, const std::string §ion);
+
+
 };
 
 #endif // __DEV_BADDEV_HH__