diff --git a/src/mission.c b/src/mission.c
index 8166917..5292572 100644
--- a/src/mission.c
+++ b/src/mission.c
@@ -681,11 +681,27 @@ int missions_saveActive(xmlTextWriterPtr writer) {
       if(player_missions[i].sys_marker != NULL)
         xmlw_elem(writer, "marked", player_missions[i].sys_marker);
 
+      /* Cargo. */
       xmlw_startElem(writer, "cargos");
       for(j = 0; j < player_missions[i].ncargo; j++)
         xmlw_elem(writer, "cargo", "%u", player_missions[i].cargo[j]);
       xmlw_endElem(writer); /* Cargo. */
 
+      /* Timers. */
+      xmlw_startElem(writer, "timers");
+      for(j = 0; j < MISSION_TIMER_MAX; j++) {
+        if(player_missions[i].timer[j] > 0.) {
+          xmlw_startElem(writer, "timer");
+
+          xmlw_attr(writer, "id", "%d", j);
+          xmlw_attr(writer, "func", "%s", player_missions[i].tfunc[j]);
+          xmlw_str(writer, "%f", player_missions[i].timer[j]);
+
+          xmlw_endElem(writer); /* "timers". */
+        }
+      }
+      xmlw_endElem(writer); /* "timers". */
+
       /* Write lua magic. */
       xmlw_startElem(writer, "lua");
 
@@ -719,7 +735,7 @@ int missions_loadActive(xmlNodePtr parent) {
 
 static int missions_parseActive(xmlNodePtr parent) {
   Mission* misn;
-  int m;
+  int m, i;
   char* buf;
 
   xmlNodePtr node, cur, nest;
@@ -747,6 +763,7 @@ static int missions_parseActive(xmlNodePtr parent) {
         xmlr_strd(cur, "reward", misn->reward);
         xmlr_strd(cur, "marker", misn->sys_marker);
 
+        /* Cargo. */
         if(xml_isNode(cur, "cargos")) {
           nest = cur->xmlChildrenNode;
           do {
@@ -755,6 +772,23 @@ static int missions_parseActive(xmlNodePtr parent) {
           } while(xml_nextNode(nest));
         }
 
+        /* Timers. */
+        if(xml_isNode(cur, "timers")) {
+          nest = cur->xmlChildrenNode;
+          do {
+            if(xml_isNode(nest, "timer")) {
+              xmlr_attr(nest, "id", buf);
+              i = atoi(buf);
+              free(buf);
+              xmlr_attr(nest, "func", buf);
+
+              /* Set the timer. */
+              misn->timer[i] = xml_getFloat(nest);
+              misn->tfunc[i] = buf;
+            }
+          } while(xml_nextNode(nest));
+        }
+
         if(xml_isNode(cur, "lua"))
           /* Start the unpersist routine. */
           mission_unpersistData(misn->L, cur);