diff --git a/p/daemon/traveld.c b/p/daemon/traveld.c
index e7464ec..aff17c8 100644
--- a/p/daemon/traveld.c
+++ b/p/daemon/traveld.c
@@ -70,6 +70,9 @@
 
 #define MEMORY "/secure/memory"
 
+// Propertyname zum Speichern der Reloadversuchszaehler
+#define RELOAD_TRIES "p_lib_reload_try_counter"
+
 // Key: string Schiff.
 // Value0: string* Haefen, die von <Schiff> angefahren werden.
 mapping transporters = ([]);
@@ -103,25 +106,72 @@
     if (MEMORY->Save("transporters",transporters) != 1)
       raise_error("Could not save memory to /secure/memory.");
   }
-  set_next_reset(10800);
+  set_next_reset(86400);
+}
+
+protected void reload_transporters(object *ships)
+{
+  if (!sizeof(ships))
+    return;
+  else if (sizeof(ships) > 1)
+    call_out(#'reload_transporters, 45, ships[1..]);
+
+  object s = ships[0];
+  if (s)
+  {
+    object *inv = all_inventory(s);
+    if (sizeof(inv))
+    {
+      // Wenn Spieler drin sind, muss auf jeden Fall gewartet werden.
+      // Bei sonstigem Krempel nur dann, wenn wir das noch nicht oft genug
+      // erfolglos versucht haben.
+      // Bemerkung: eigentlich muesste man hier pruefen, was davon per
+      // AddItem() erzeugt wurde. Das ist mir gerade aber zu aufwendig.
+      if (sizeof(filter(inv, #'query_once_interactive))
+          || s->QueryProp(RELOAD_TRIES) < 3)
+      {
+        s->SetProp(RELOAD_TRIES, s->QueryProp(RELOAD_TRIES) + 1);
+        // naechsten reset vorziehen
+        set_next_reset(10800);
+        return;
+      }
+      // ansonsten ist uns das Inventar jetzt egal und bald Schrott...
+    }
+    string sname = object_name(s);
+    s->remove(1);
+    load_object(sname);
+    // Und hoffentlich starten Transporter selber. Wenn nicht, muss hier evtl.
+    // noch nen Continue hin.
+  }
 }
 
 public void reset()
 {
-  set_next_reset(10800);
-  // Als Wuergaround fuer das Problem, dass selten genutzte Transporter in
-  // spielerunzugaenglichen Raeumen stehen bleiben und der spielerzugaengliche Raum
-  // mangels Benutzung ausgeswappt wird, lassen wir hier alle paar Stunden mal
-  // alle bekannten Transporter loslaufen. Ohne Spielerkontakt bleiben sie
-  // nach einem Routenumlauf wieder stehen.
-  // TODO: Problem "richtig" loesen.
-  foreach(string ship: transporters)
-  {
-    // ja, geht nur fuer Blueprints. BTW: hart zerstoerte Transporter, die
-    // sich nicht abgemeldet haben, werden jetzt neugeladen. Das muss nicht
-    // immer gut sein, ist momentan aber sogar willkommen.
-    ship->Continue();
-  }
+  set_next_reset(86400);
+  // Zeit des Programms vom Standardtransporter herausfinden. Wenn der nicht
+  // geladen ist, muss nix gemacht werden.
+  object std_transport = find_object("/std/transport");
+  if (!std_transport)
+    return;
+  int std_time = program_time(std_transport);
+
+  // ueber alle Transporter laufen. Wenn der Transport aelter ist als
+  // /std/transport, wird er neu gelauden.
+  // Das kann Nebenwirkungen haben. Aber in diesem Fall sollte man besser
+  // den Transporter so bauen, dass es OK ist.
+  // Aber speziell bei VC-Transportern ist fraglich, wie gut das
+  // funktioniert...
+  // Und es funktioniert nur fuer Blueprints.
+  object *old_ships = map(transporters, function object (string sname)
+      {
+        object ship = find_object(sname);
+        if (ship && !clonep(ship) && program_time(ship) < std_time)
+          return ship;
+        return 0;
+      } );
+  old_ships -= ({0});
+  if (sizeof(old_ships))
+    reload_transporters(old_ships);
 }
 
 varargs int remove(int s)
