diff --git a/obj/vertrag.c b/obj/vertrag.c
new file mode 100644
index 0000000..570990e
--- /dev/null
+++ b/obj/vertrag.c
@@ -0,0 +1,115 @@
+#pragma strict_types
+#pragma combine_strings
+#pragma no_shadow
+#pragma no_inherit
+
+inherit "std/thing";
+
+#include <properties.h>
+#include <language.h>
+#include <wizlevels.h>
+
+private int gelesen;
+private string unterschrieben;
+
+static string text();
+
+public void create()
+{
+   if ( !geteuid(this_object()) )
+      call_out( "remove", 0 );
+   
+   if ( !IS_WIZARD(geteuid(this_object())) )
+      call_out( "remove", 0 );
+   
+   if ( !clonep(this_object()) )
+      return;
+   
+   thing::create();
+   SetProp( P_SHORT, "Ein Vertrag" );
+   SetProp( P_LONG, "@@unterschrieben@@" );
+   SetProp( P_NAME, "Vertrag" );
+   Set(P_READ_MSG, #'text, F_QUERY_METHOD); 
+   SetProp( P_GENDER, MALE );
+   SetProp( P_ARTICLE, 1 );
+   AddId("vertrag");
+   SetProp(P_NEVERDROP, 1);
+   AddCmd(({"unterschreibe","unterschreib","unterzeichne"}),"unterschreibe");
+   AddCmd(({"zerreisse", "zerreiss"}),"zerreisse");
+   
+   gelesen = 0;
+   unterschrieben = "";
+}
+
+static string _query_nodrop()
+{
+   if (this_player() && IS_WIZARD(this_player())) return 0;
+   return "Nein Nein! Dies ist dein Vertrag!\n";
+}
+
+static string unterschrieben()
+{
+   string s;
+   
+   s = "Dies ist Dein Magier-Vertrag. Du solltest ihn vielleicht ";
+   if ( gelesen )
+      s += "noch";
+   s += "mal lesen.\nEr wurde Dir von " + capitalize(geteuid(this_object()))
+      +" ueberreicht.\nWenn Du ihn unterschreibst, wirst Du von "
+      + capitalize(geteuid(this_object())) + " gesponsort.\n";
+   
+   if (this_player() && (unterschrieben == getuid(this_player())) )
+      s += "Du hast ihn unterschrieben.\n";
+   
+   return s;
+}
+
+
+static string text()
+{
+   gelesen = 1;
+   this_player()->More("/etc/WIZRULES",1);
+   return "";
+}
+
+
+static int unterschreibe( string str )
+{
+   notify_fail("Was willst Du denn unterschreiben?\n");
+   if ( !id(str) )
+      return 0;
+   
+   if ( !this_player() || this_player() != this_interactive()
+        || this_player() != environment() )
+      return 0;
+   
+   if ( !gelesen ){
+      write( "Du hast ihn noch nicht gelesen. ERST lesen, DANN schreiben!\n");
+      return 1;
+   }
+   
+   write( "Du unterschreibst den Vertrag. Wenn das ein Versehen war, "
+          + "zerreiss ihn sofort.\n" );
+   unterschrieben = getuid( this_interactive() );
+   SetProp( P_NODROP, "Nein, der ist unterschrieben. Du kannst ihn hoechstens"
+            + " zerreissen.\n" );
+   SetProp( P_NEVERDROP, 1 );
+   return 1;
+}
+
+
+static int zerreisse( string str )
+{
+   notify_fail("Was willst Du denn zerreissen?\n");
+   if ( !id(str) ) return 0;
+   write( "Du zerreisst den Vertrag.\n" );
+   return remove();
+}
+
+
+public int is_unterschrieben()
+{
+   return environment() && query_once_interactive(environment())
+      && getuid(environment()) == unterschrieben;
+}
+
