diff --git a/p/daemon/uptime_master.c b/p/daemon/uptime_master.c
new file mode 100644
index 0000000..84a7124
--- /dev/null
+++ b/p/daemon/uptime_master.c
@@ -0,0 +1,110 @@
+#pragma strong_types, save_types
+#pragma no_clone, no_shadow
+
+#include "/p/daemon/ch.h"
+#include "/p/daemon/uptime_master.h"
+
+/// Prototypen ///
+
+void create();
+void reset(); 
+
+void SaveMaxUptime();
+mapping QuerMaxUptime();
+
+/// Globale Variablen ///
+static int next_save_uptime;
+static int max_uptime_reached;
+static int last_record_boot;
+
+/// Funktionen ///
+
+void create()
+{
+  seteuid(getuid(this_object()));
+  reset();
+}
+
+void reset()
+{
+  call_out("SaveMaxUptime",1);
+  set_next_reset(300);
+}
+
+// Ist eine Rekord-Uptime erreicht, wird diese hier gespeichert.
+void SaveMaxUptime()
+{
+  int max_shut, max_boot;
+  
+  // Lohnt es, schon wieder zu pruefen?
+  if (time()>next_save_uptime)
+  {
+    // Initialisieren
+    if (next_save_uptime==0)
+    {
+      DEBUG("Masterinit");
+      
+      // Zeit berechnen, ab der ein Rekord aufgestellt ist.
+      // Vorher braucht nixhts mehr geprueft werden
+      sscanf(read_file(MAX_UPTIME)||"0 0","%d %d",last_record_boot, max_shut);
+      next_save_uptime=last_reboot_time()+(max_shut-last_record_boot)+1; 
+      
+    } else {
+      DEBUG("Rekord neu speichern.");
+	    
+      // Neuen Rekord in Datei schreiben.
+      catch(rm(MAX_UPTIME);publish);
+      write_file(MAX_UPTIME, last_reboot_time()+" "+time());
+      
+      // Jetzt checken, ob die Uptime grade geknackt wurde ...
+      // Wenn ja, dann eine Meldung an den Master
+      if(last_reboot_time()!=last_record_boot)
+      {
+	DEBUG("Rekordmeldung. MB:"+last_record_boot+" LU:"+last_reboot_time());
+
+	// Nur einmal pro Rekord Uptime melden ...
+	last_record_boot=last_reboot_time();
+
+	// Hurraaah :)
+        CHMASTER->join(RECORD_CHANNEL,this_object());
+	CHMASTER->send(RECORD_CHANNEL,this_object(),
+	"[<MasteR>:Lars] Wow, eine Rekord-Uptime.\n"
+	"[<MasteR>:Merlin] Das erlebt man auch nicht alle Tage ...\n"
+	"[<MasteR>:Der GameDriver] Dann wird es wohl Zeit fuer einen Reboot, oder?\n"
+	"[<MasteR>:Merlin] Faules Stueck, arbeite weiter!\n"
+	"[<MasteR>:Der GameDriver] Och menno!",
+	  MSG_EMPTY);
+	CHMASTER->leave(RECORD_CHANNEL,this_object());
+      }
+    }
+  }
+}
+
+// Gibt Daten zur bisher maximalen Uptime zurueck: (299 Ticks)
+// 1.) Wann wurde gebootet
+// 2.) Wann endete die Uptime
+// 3.) Wann wird dieser Rekord gebrochen?
+// 4.) Dauer der Uptime als lesbarer String.
+mapping QueryMaxUptime()
+{
+  int t, tmp, max_boot, max_shut;
+  string s;
+
+  sscanf(read_file(MAX_UPTIME)||"0 0","%d %d",max_boot, max_shut);
+
+  t=max_shut-max_boot;
+
+  s="";
+  if (t>=86400)
+    s+=sprintf("%d Tag%s, ",tmp=t/86400,(tmp==1?"":"e"));
+  if (t>=3600)
+    s+=sprintf("%d Stunde%s, ",tmp=(t=t%86400)/3600,(tmp==1?"":"n"));
+  if (t>60)
+    s+=sprintf("%d Minute%s und ",tmp=(t=t%3600)/60,(tmp==1?"":"n"));
+  s+=sprintf("%d Sekunde%s",t=t%60,(t==1?"":"n"));
+
+  return (["beginn":max_boot, 
+           "ende":max_shut, 
+	   "naechster rekord":last_reboot_time()+(max_shut-max_boot), 
+	   "rekord als string":s]);
+}
