diff --git a/secure/testmud.c b/secure/testmud.c
index 2cdf469..c9e2e7b 100644
--- a/secure/testmud.c
+++ b/secure/testmud.c
@@ -5,6 +5,7 @@
 
 #include <files.h>
 #include <config.h>
+#include <new_skills.h>
 
 // Variablen fuer das Savefile von Jof, was dieses Objekt schreibt.
 string name = "jof";
@@ -12,6 +13,8 @@
 int level = 100;
 string shell = "/std/shells/magier";
 
+private void generiere_gilden();
+
 public varargs int remove(int s)
 {
   destruct(this_object());
@@ -42,6 +45,91 @@
   {
     load_object("/room/konstrukt");
   }
+  generiere_gilden();
   master()->clear_cache();
   remove();
 }
+
+// Files zum Inherit aus Gilden- bzw. Spellbook-Repositories automatisch 
+// erzeugen.
+private void generiere_gilden()
+{
+  string* dir = get_dir("/gilden/",GETDIR_NAMES);
+  string* search = ({
+    "/gilden/files.%s/%s.c",
+    "/gilden/files.%s/gilde.c",
+    "/gilden/files.%s/room/%s.c",
+    "/gilden/files.%s/room/gilde.c"});
+
+  foreach(string entry : dir)
+  {
+    if(entry[0..4] != "files" || file_size("/gilden/"+entry[6..]+".c") > 0)
+      continue;
+
+    string file = entry[6..];
+    // Zielpfad nullen, damit auffaellt, wenn kein Ziel gefunden wird.
+    string path;
+    foreach(string s : search)
+    {
+      if(file_size(sprintf(s, file, file)) > 0)
+      {
+        path = sprintf(s, file, file);
+        break;
+      }
+    }
+
+    if(sizeof(path))
+    {
+      write_file("/gilden/"+file+".c",
+        "// Automatisch generierter Gilden-Inherit\n"
+        "inherit \""+path+"\";\n\n"
+        "protected void create()\n"
+        "{\n"
+        "  replace_program();\n"
+        "}\n");
+    }
+  }
+
+  // Bei Spellbooks sieht das leider etwas anders aus, daher ist hier eine
+  // Codedoppelung der uebersichtlichere Weg.
+  dir = get_dir("/spellbooks/", GETDIR_NAMES);
+  search = ({
+    "/spellbooks/%s/%s.c",
+    "/spellbooks/%s/spellbook.c"});
+
+  foreach(string entry : dir)
+  {
+    // Die Spellbooks heissen zwar alle unterschiedlich ... aber die Ordner
+    // heissen wie die Gilde. Und die Gilde kennt ihr Spellbook.
+    if(file_size("/spellbooks/"+entry) != FSIZE_DIR || 
+      file_size("/gilden/"+entry+".c") == FSIZE_NOFILE)
+    {
+      continue;
+    }
+
+    string file;
+    catch(file = ("/gilden/"+entry)->QueryProp(P_GUILD_DEFAULT_SPELLBOOK));
+    if(!sizeof(file) || file_size("/spellbooks/"+file+".c") > 0) continue;
+
+    string path;
+    foreach(string s : search)
+    {
+      if(file_size(sprintf(s, entry, file)) > 0)
+      {
+        path = sprintf(s, entry, file);
+        break;
+      }
+    }
+
+    if(sizeof(path))
+    {
+      write_file("/spellbooks/"+file+".c",
+        "// Automatisch generierter Spellbook-Inherit\n"
+        "inherit \""+path+"\";\n\n"
+        "protected void create()\n"
+        "{\n"
+        "  replace_program();\n"
+        "}\n");
+    }
+  }
+}
