diff --git a/d/seher/haeuser/sb_ausgabe.c b/d/seher/haeuser/sb_ausgabe.c
new file mode 100644
index 0000000..9fed219
--- /dev/null
+++ b/d/seher/haeuser/sb_ausgabe.c
@@ -0,0 +1,115 @@
+#include <properties.h>
+#include <wizlevels.h>
+#include <moving.h>
+#include <bank.h>
+#include "haus.h"
+
+inherit "std/room";
+
+create()
+{
+  ::create();
+
+  SetProp(P_INDOORS, 1);
+  SetProp(P_LIGHT, 1);
+  SetProp(P_INT_SHORT, "Am Ausgabeschalter" );
+  SetProp(P_INT_LONG,
+     "Am Ausgabeschalter. Wenn Du alle Raten fuer Deinen Vertrag eingezahlt hast,\n"
+    +"kannst Du nun Dein Haus abholen. Dazu musst Du einfach nur Deinen Vertrag\n"
+    +"vorlegen (mit 'lege vertrag vor').\n"
+    +"Der Schemen am Schalter koennte ein Beamter sein, aber auch etwas viel, viel\n"
+    +"Schlimmeres...\n" );
+
+  AddDetail( ({ "boden" }),
+     "Der tiefschwarze Boden gibt Dir das Gefuehl, im absoluten Nichts zu stehen.\n" );
+  AddDetail( ({ "wand", "waende" }),
+     "Dunkle Schatten tanzen ueber die Waende.\n" );
+  AddDetail( ({ "decke" }),
+     "Sie scheint Dir in dieser unheimlichen Umgebung auf den Kopf fallen zu\n"
+    +"wollen.\n" );
+  AddDetail( ({ "nichts" }),
+     "Du siehst nichts.\n" );
+  AddDetail( ({ "schatten" }),
+     "Die Schatten irritieren Dich sehr.\n" );
+  AddDetail( ({ "schalter", "ausgabeschalter" }),
+     "Du stehst direkt vor dem Ausgabeschalter.\n" );
+  AddDetail( ({ "beamte", "beamter", "beamten", "schalterbeamter", "schalterbeamte", "schalterbeamten", "schemen", "schlimmeres" }),
+     "Der Schalterbeamte schaut Dich mit aufgesetztem Laecheln an.\n" );
+
+  AddCmd( ({ "leg", "lege" }), "legen" );
+  AddExit( "raus", PATH+"seherbank" );
+}
+
+void
+BecomesNetDead(object pl)
+{
+  pl->move(PATH+"seherbank", M_GO, 0, "wird rausgeworfen", "schlafwandelt herein");
+}
+
+int
+legen(string str)
+{
+  object vertrag, tp;
+
+  tp = this_player();
+  vertrag = present("sehe\rvertrag", tp);
+
+  if (!str || str != "vertrag vor")
+    return 0;
+
+  if (!IS_SEER(tp)) {
+    write( "Der Schalterbeamte blickt Dich scharf an. Er sagt: Nur SeherInnen\n"
+	  +"koennen hier ein Haus abholen!\n" );
+    HLOG( "BANK.LOG", "Ausgabe: "+getuid(tp)+" ist kein Seher.\n" );
+  }
+  else if (tp->QueryProp(P_KILLS))
+    write( "Der Schemen faucht: Verbrecher werden hier nicht bedient!\n" );
+  else if (!vertrag) {
+    write( "Der Schemen bemerkt: Sie haben doch gar keinen Vertrag!\n" );
+    HLOG( "BANK.LOG", "Ausgabe: "+getuid(tp)+" hatte keinen Vetrag.\n" );
+  }
+  else if (old_explode(object_name(vertrag),"#")[0] != PATH+"bausparvertrag") {
+    HLOG( "BANK.LOG", "Ausgabe: "+getuid(tp)+" Falscher Vertrag!\n");
+    HLOG( "SCHUMMEL", sprintf("Ausgabe: TP: %O, V: %O\n",
+		      this_player(),
+		      vertrag->QueryProp(P_CLONER)));
+  }
+  else if (!(vertrag->QueryProp(P_AUTOLOADOBJ)[1] & V_COMPL)) {
+    write( "Der Schalterbeamte weist Dich darauf hin, dass Du noch nicht genug\n"
+	  +"auf den Vertrag eingezahlt hast!\n" );
+    HLOG( "BANK.LOG", "Ausgabe: "+getuid(tp)+" hatte zu wenig eingezahlt.\n" );
+  }
+  else if (ZENTRALBANK->_query_current_money() < 30000) {
+    write( "Der Schalterbeamte weist Dich darauf hin, dass die Zentralbank im\n"
+	  +"Moment leider nicht ueber genug Bargeldreserven verfuegt, um ihren\n"
+	  +"Teil der Abmachung zu erfuellen. Er vertroestet Dich auf spaeter.\n" );
+  }
+  else if (vertrag->QueryProp(P_AUTOLOADOBJ)[1] & V_RAUM) {
+    VERWALTER->NeuerRaum(getuid(this_player()));
+    write( "Der Schemen hinter dem Schalter streckt einen langen, schattigen Finger\n"
+	  +"nach Deinem Vertrag aus. Wie von Geisterhand bewegt gleitet der Vertrag\n"
+	  +"hinueber. Der Schemen scheint den Vertrag ausgiebig zu pruefen, dann\n"
+	  +"zerreisst er ihn, wedelt einmal mit seinen schattenhaften Haenden und\n"
+	  +"beginnt mit Grabesstimme zu sprechen:\n"
+	  +"Der neue Raum ist in ihrem Haus installiert! Hinfort mit Ihnen!\n" );
+    HLOG( "BANK.LOG", "Ausgabe: "+getuid(tp)+" bekam einen neuen Raum.\n" );
+    HLOG( getuid(tp), "Ausgabe: "+getuid(tp)+" bekam einen neuen Raum.\n" );
+    "/p/daemon/zentralbank"->WithDraw(30000);
+    vertrag->remove();
+  }
+  else {
+    write( "Der Schemen hinter dem Schalter streckt einen langen, schattigen Finger\n"
+	  +"nach Deinem Vertrag aus. Wie von Geisterhand bewegt gleitet der Vertrag\n"
+	  +"hinueber. Der Schemen scheint den Vertrag ausgiebig zu pruefen, dann\n"
+	  +"zerreisst er ihn, wedelt einmal mit seinen schattenhaften Haenden und\n"
+	  +"vor Dir erscheint ein kleines, tragbares Haus. Zoegernd nimmst Du es in\n"
+	  +"Deine Haende, da erschallt eine grollende Stimme:\n"
+	  +"Das Haus gehoert Ihnen. Beehren sie uns bald wieder! Har, har, har!!!\n" );
+    clone_object(PATH+"traghaus")->move(tp, M_NOCHECK);
+    HLOG( "BANK.LOG", "Ausgabe: "+getuid(tp)+" bekam das Haus.\n" );
+    HLOG( getuid(tp), "Ausgabe: "+getuid(tp)+" bekam das Haus.\n" );
+    "/p/daemon/zentralbank"->WithDraw(30000);
+    vertrag->remove();
+  }
+  return 1;
+}
