diff --git a/p/service/loco/obj/fwsaveserv.c b/p/service/loco/obj/fwsaveserv.c
new file mode 100644
index 0000000..a228994
--- /dev/null
+++ b/p/service/loco/obj/fwsaveserv.c
@@ -0,0 +1,35 @@
+/***************************************************************************
+
+ Forward-Server: Lade-/Speicherserver.
+  Dieser Teilserver hat die Aufgabe, einzelne Teile der forwardliste 
+  auf Anfrage zu laden und 
+
+ Teil des MG-Mailsystems
+ (C) 1996 Loco@Morgengrauen
+
+ Es gilt dasselbe Copyright wie fuer mailer.c, bitte dort nachlesen.
+
+***************************************************************************/
+
+#include "/mail/post.h"
+
+mixed data;
+
+create() {
+  seteuid(getuid());
+}
+
+mapping LoadData(string file) {
+  if (!stringp(file)||sizeof(file)>1||file>"z"||file<"a")
+    return 0;
+  restore_object(FWSAVEFILE(file));
+  return data;
+}
+
+int SaveData(string file, mapping what) {
+//  if (geteuid(previous_object())!=geteuid()) return 0;
+  data=what;
+  save_object(FWSAVEFILE(file));
+  data=0;
+  return 1;
+}
diff --git a/p/service/loco/obj/fwserv.c b/p/service/loco/obj/fwserv.c
new file mode 100644
index 0000000..7f27d3d
--- /dev/null
+++ b/p/service/loco/obj/fwserv.c
@@ -0,0 +1,152 @@
+/***************************************************************************
+
+ Forward-Server
+ Teil des MG-Mailsystems
+ (C) 1996 Loco@Morgengrauen
+
+ Es gilt dasselbe Copyright wie fuer mailer.c, bitte dort nachlesen.
+
+***************************************************************************/
+/* 24.03.2008, Arathorn
+   - Auch Erzmagier duerfen jetzt Eintraege aendern (Aenderung an Security())
+ */
+
+#include <properties.h>
+#include "/secure/config.h"
+#include "/mail/post.h"
+#include <wizlevels.h>
+
+#define LOG "/p/service/loco/save/FWLOG"
+
+static int Security(string name);
+
+static mixed forwarddata;
+mixed properties;
+
+
+create() {
+  seteuid(getuid());
+  forwarddata=([]);
+}
+
+
+LoadFile(s) {
+  if (!forwarddata[s])
+    forwarddata[s]=FWSAVESERV->LoadData(s);
+  if (!forwarddata[s])
+    forwarddata[s]=([]);
+}
+
+
+string QueryForward(string adr) {
+/* Setze eine Adresse um. Rueckgabe: Forwardadresse oder Name, wenn keine
+   gesetzt ist. Externe Adressen werden nicht umgesetzt. */
+  string s, res;
+  object player;
+  int i;
+
+  if (member(adr, '@')>=0) return adr; /* Externe Adresse */
+
+  for (i=sizeof(adr)-1;i>=1;i--) {
+    if (adr[i]>'z'||adr[i]<'a')
+      return "*UNGUELTIGER NAME: "+adr+" *";
+  }
+  if (adr[0]=='\\')
+    return adr;
+  
+  if (adr[0]>'z'||adr[0]<'a') 
+    return "*UNGUELTIGER NAME: "+adr+" *";
+
+
+  s=adr[0..0];
+  LoadFile(s);
+  
+  if (!member(forwarddata[s],adr)) return adr;
+
+  /* Achtung, ab hier wechselt Variable s z.T. ihre Bedeutung */
+
+  if (player=find_player(adr)) 
+    s=player->QueryProp(P_MAILADDR);
+  else {
+    /* Gibts den Spieler? */
+    if (!master()->find_userinfo(adr))
+        return 0;
+    /* hol die Daten */
+    restore_object(SAVEPATH+s+"/"+adr);
+    s=properties[P_MAILADDR];
+    properties=0;
+  }    
+
+  s=lower_case(s);
+  if (!s || !sizeof(s) ||
+      s=="none")
+    return adr;  /* keine sinnvolle Zieladresse: nicht umsetzen */
+
+  // jetzt noch pruefen, ob s eine fuer den MAILDEMON gueltige adresse ist.
+  if (MAILDEMON->query_recipient_ok(s))
+    return s;
+
+  return adr; // offenbar keine gueltige Adresse.
+}
+
+
+string AddForward(string name) {
+  string s;
+
+  name=lower_case(name);
+  s=name[0..0];
+
+  if (!Security(name)) 
+    return "Nachsendeauftrag abgelehnt, bitte EM oder Loco benachrichtigen.";
+
+  LoadFile(s);
+  
+  if (member(forwarddata[s],name))
+    return "Nachsendeauftrag war bereits gestellt worden.";
+
+  forwarddata[s]+=([name]);
+  FWSAVESERV->SaveData(s,forwarddata[s]);
+
+  write_file(LOG,ctime()+": ADD "+name+"\n");
+  
+  return "Nachsendeauftrag angenommen. Die Adresse lautet:\n  "+
+    QueryForward(name)+
+      "\nFalls diese falsch ist, bitte augenblicklich die email aendern!\n";
+
+}
+
+
+string DeleteForward(string name) {
+  string s;
+
+  name=lower_case(name);
+  s=name[0..0];
+
+  if (!Security(name)) 
+    return "Loeschen des Nachsendeauftrags ist nicht erlaubt,\n  bitte EM oder Loco benachrichtigen.";
+
+  LoadFile(s);
+  
+  if (!member(forwarddata[s],name))
+    return "Es war kein Nachsendeauftrag gestellt worden.";
+
+  forwarddata[s]-=([name]);
+  FWSAVESERV->SaveData(s,forwarddata[s]);
+  
+  write_file(LOG,ctime()+": DEL "+name+"\n");
+
+  return "Nachsendeauftrag geloescht, Post wird wieder direkt ausgeliefert.\n";
+}
+
+
+
+static int Security(string name) {
+  if (geteuid(this_interactive())==name) return 1;
+  if (geteuid()==geteuid(previous_object())) return 2;
+  if (member( ({ROOTID,MAILID}), geteuid(previous_object())) >=0 ) return 3;
+  if ( this_interactive() && IS_ARCH(this_interactive()) ) return 4;
+  return 0;
+}
+
+
+QueryForwards() { if (Security(" N I X ")) return forwarddata; }
diff --git a/p/service/loco/std/mailcabin.c b/p/service/loco/std/mailcabin.c
new file mode 100644
index 0000000..bd91261
--- /dev/null
+++ b/p/service/loco/std/mailcabin.c
@@ -0,0 +1,105 @@
+/* Eine Schreibkabine, in der man einigermassen ungestoert seine Post
+   lesen und schreiben kann.
+
+   (C) 1993/94 by Loco@Morgengrauen
+
+   Verwendung ausserhalb von Morgengrauen ist gestattet unter folgenden
+   Bedingungen:
+   - Benutzung erfolgt auf eigene Gefahr. Jegliche Verantwortung wird
+     abgelehnt.
+   - Auch in veraenderten oder abgeleiteten Objekten muss ein Hinweis auf
+     die Herkunft erhalten bleiben.
+   Ein Update-Service besteht nicht.
+
+   Fuer Fragen, Hinweise und Vorschlaege bitte mich in Morgengrauen oder 
+   Nightfall ansprechen.
+*/
+
+#pragma strong_types,save_types
+
+#include "/mail/post.h"
+#include <config.h>
+#include <properties.h>
+#include <language.h>
+#include <moving.h>
+
+inherit STDPOST;
+inherit "/std/thing/moving";
+inherit "/std/thing/commands";
+
+protected void create() {
+  post::create();
+  commands::create();
+  SetProp(P_NAME,"Schreibkabine");
+  SetProp(P_GENDER,FEMALE);
+  SetProp(P_SHORT,"Eine Schreibkabine");
+  SetProp(P_INT_LONG,"\
+In dieser Kabine kannst Du ungestoert Post lesen und schreiben. Niemand anders\n\
+kann hier rein, solange Du drin bist, dafuer waere die Kabine auch viel zu eng.\n\
+Tippe einfach 'post' oder 'mail', bzw 'mail <spieler>' zum Schreiben.\n\
+Mit 'raus' kommst Du wieder raus.\n");
+  SetProp(P_NOGET,"Versuch mal, eine festmontierte Kabine auszubauen!\n");
+  AddId("kabine");
+  AddId("schreibkabine");
+  AddId("postkabine");
+
+}
+
+int besetzt() {
+  mixed in,i;
+  in=all_inventory(this_object());
+  for (i=0;i<sizeof(in);i++) if (living(in[i]) && in[i]!=this_player()) return 1;
+  return 0;
+}
+
+public varargs string long() {
+  return "\
+Eine kleine Ein-Personen-Kabine, in der Du ungestoert Deine Post lesen und\n\
+schreiben kannst. Du kannst sie betreten. \n\
+"+( besetzt() ? "Diese Kabine ist allerdings besetzt.\n" : "");
+}
+
+string int_short(mixed viewer, mixed viewpoint) {
+  return (environment()->QueryProp(P_INT_SHORT))+" (Kabine)\n";
+}
+
+public varargs int move(mixed dest, int method, string dir, string textout, string textin) 
+{
+  int r;
+  r=(::move(dest,method));
+  AddExit("raus",object_name(environment()));
+  return r;
+}
+
+void init() {
+  (commands::init());
+  if (environment(this_player())==environment(this_object())) {
+    add_action("rein","betrete");
+    add_action("rein","betritt");
+    return;
+  }
+  if (besetzt()) {
+    this_player()->move(environment(this_object()),M_GO,0,"passt hier nicht mehr rein","macht die Tuer einer Kabine auf, aber die ist schon besetzt");
+    return;
+  }
+  if (environment(this_player())==this_object()) {
+    (post::init());
+    add_action("do_mail","mail");
+    add_action("do_mail","post");
+    return;
+  } 
+}
+
+int rein(string str) {
+  if (!str || !id(str)) {
+    notify_fail("Wo willst Du denn rein?\n");
+    return 0;
+  }
+  if (besetzt()) {
+    notify_fail("BESETZT!\n");
+    return 0;
+  }
+  this_player()->move(this_object(),M_GO,0,"betritt eine Schreibkabine","betritt die Kabine");
+  return 1;
+}
+
diff --git a/p/service/loco/std/post.c b/p/service/loco/std/post.c
new file mode 100644
index 0000000..47d0c43
--- /dev/null
+++ b/p/service/loco/std/post.c
@@ -0,0 +1,40 @@
+/* Neue std/post
+   (C) 1993 by Loco
+*/
+
+inherit "/std/room";
+
+#include "/mail/post.h"
+#include <properties.h>
+#include <rooms.h>
+
+void create() {
+  int i;
+  (::create());
+  SetProp(P_INT_SHORT,"Postamt");
+  SetProp(P_INT_LONG,"\
+Dies ist ein Testpostamt.\n\
+Von hier aus kannst Du Briefe an Deine Mitspieler schicken und Briefe von\n\
+ihnen lesen. Wenn Du das willst, tippe 'post' oder 'mail',\n\
+bzw. 'mail <spieler>'.\n");
+  SetProp( P_LIGHT, 1 );
+  AddCmd("post","do_mail");
+  AddCmd("mail","do_mail");
+  SetProp(P_INDOORS,1);
+  //  if (!argh) {
+  //   for (i=0;i<NRCABINS;++i) AddItem(MAILCABIN,REFRESH_REMOVE);
+  //  AddItem(COUNTER,REFRESH_REMOVE);
+  //  SetProp(P_POST,PP_ALLOWED);
+    //  }
+}
+
+int do_mail(string str) {
+  object mailer;
+  if (this_interactive()!=this_player()) return 0;
+  mailer=clone_object(MAILER);
+  mailer->SetOfficeName(short());
+  mailer->do_mail(str);
+  return 1;
+}
+
+
