diff --git a/defs.h b/defs.h
new file mode 100644
index 0000000..1cbc466
--- /dev/null
+++ b/defs.h
@@ -0,0 +1,66 @@
+#ifndef __TUTORIAL_DEFS_H__
+#define __TUTORIAL_DEFS_H__
+
+/* Diese Pragmas sollten heutzutage Pflicht sein. Der Compiler wird durch
+   sie angewiesen, strenger auf korrekte Typisierung etc. zu achten. Siehe
+   "man pragma". */
+#pragma strong_types
+#pragma save_types
+#pragma rtt_checks
+
+
+// Diese Includes braucht man so oft, die kann man eigentlich immer nehmen:
+#include <properties.h>
+#include <language.h>
+#include <moving.h>
+
+
+// Diese Defines brauchen wir auch nahezu staendig:
+#ifdef ENV
+#undef ENV
+#endif
+#define ENV environment
+#ifdef TO
+#undef TO
+#endif
+#define TO this_object()
+#ifdef TP
+#undef TP
+#endif
+#define TP this_player()
+#ifdef TPN
+#undef TPN
+#endif
+#define TPN this_player()->name()
+#ifdef TPNC
+#undef TPNC
+#endif
+#define TPNC this_player()->Name()
+#ifdef BSLF
+#undef BSLF
+#endif
+#define BSLF(x) break_string(x, 78, 0, BS_LEAVE_MY_LFS)
+#ifdef BSPS
+#undef BSPS
+#endif
+#define BSPS(x, y) break_string(x, 78, y, BS_LEAVE_MY_LFS)
+#ifdef BSPN
+#undef BSPN
+#endif
+#define BSPN(x, y) break_string(x, 78, y, BS_LEAVE_MY_LFS|BS_PREPEND_INDENT)
+
+// Fuer Verwendung in Defend():
+#define NO_AC AT_HELMET:0,\
+              AT_AMULET:0,\
+              AT_GLOVE:0,\
+              AT_RING:0,\
+              AT_SHIELD:0,\
+              AT_CLOAK:0,\
+              AT_ARMOUR:0,\
+              AT_BELT:0,\
+              AT_TROUSERS:0,\
+              AT_BOOT:0,\
+              P_BODY:0
+
+
+#endif // __FADEN_DEFS_H__
diff --git a/room/huette1.c b/room/huette1.c
new file mode 100644
index 0000000..6e76e1c
--- /dev/null
+++ b/room/huette1.c
@@ -0,0 +1,24 @@
+// Wir erben vom Standard-Raum der Mudlib:
+inherit "/std/room";
+
+/* Und wir holen uns einige Defines, die wir oefter verwenden und deswegen
+   nicht in jedem Raum erneut schreiben wollen: */
+#include __PATH__(1)"defs.h"
+
+
+protected void create() {
+  ::create();
+
+  SetProp(P_INT_SHORT, "Eine schummrige Huette");
+  SetProp(P_INT_LONG, BSLF(
+    "Viel erkennen kannst Du hier nicht, es gibt naemlich noch keine "
+    "Details. Die lernen wir spaeter. Dies ist nur ein nackter Raum, "
+    "keine Details, keine Ausgaenge, nichts drin. Aber Licht ist schon "
+    "an."));
+
+  // Die Props kann man in den betreffenden Manpages nachlesen.
+  SetProp(P_LIGHT, 1);
+  SetProp(P_INDOORS, 1);
+  SetProp(P_LIGHT_TYPE, LT_GLOWING);
+}
+
diff --git a/room/huette2.c b/room/huette2.c
new file mode 100644
index 0000000..4326acb
--- /dev/null
+++ b/room/huette2.c
@@ -0,0 +1,38 @@
+inherit "/std/room";
+
+#include __PATH__(1)"defs.h"
+
+
+string sonderfall();
+
+protected void create() {
+  ::create();
+
+  SetProp(P_INT_SHORT, "Eine schummrige Huette");
+  SetProp(P_INT_LONG, BSLF(
+    "Nun gibt es hier einige Details. Du kannst sie untersuchen."));
+
+  SetProp(P_LIGHT, 1);
+  SetProp(P_INDOORS, 1);
+  SetProp(P_LIGHT_TYPE, LT_GLOWING);
+
+  AddDetail("detail", BSLF(
+    "Dieses ist ein statisches Detail (der Normalfall). Es funktioniert "
+    "nur fuer den Plural, den Singular haben wir ja nirgends erwaehnt."));
+  AddDetail(({"plural", "singular"}), BSLF(
+    "Wenn Du nicht gerade Ark heisst, musst Du nicht fuer ALLES etwas "
+    "aushecken, gerade wenn Dein Raum sonst so mit unsinnigen Details "
+    "zugepflastert wird, dass man Tage braucht, um den abzuforschen - das "
+    "frustriert naemlich Spieler auch.\n"
+    "Allerdings sollte ein gut beschriebener Raum die allermeisten Details "
+    "beschreiben. Aus Gruenden der Uebersichtlichkeit verzichte ich hier "
+    "allerdings mal darauf, der Lerneffekt wird dadurch ja nicht groesser."));
+  AddDetail("normalfall", #'sonderfall);
+}
+
+string sonderfall() {
+  return BSLF(
+    "Ja, "+TP->name()+", man kann Details auch dynamisch erzeugen, indem man "
+    "den Rueckgabewert einer Function oder auch einer Inline-Closure zurueck"
+    "gibt. Letzteres handeln wir aber spaeter ab.");
+}
diff --git a/room/huette3a.c b/room/huette3a.c
new file mode 100644
index 0000000..bcf9daf
--- /dev/null
+++ b/room/huette3a.c
@@ -0,0 +1,22 @@
+inherit "/std/room";
+
+#include __PATH__(1)"defs.h"
+
+
+protected void create() {
+  ::create();
+
+  SetProp(P_INT_SHORT, "Eine schummrige Huette");
+  SetProp(P_INT_LONG, BSLF(
+    "Viel erkennen kannst Du hier nicht, es gibt naemlich schon wieder "
+    "keine Details. Dafuer aber einen Durchgang nach Osten, durch den "
+    "Du ins grelle Sonnenlicht rausgehen kannst. Falls Du Dich traust ..."));
+
+  SetProp(P_LIGHT, 1);
+  SetProp(P_INDOORS, 1);
+  SetProp(P_LIGHT_TYPE, LT_GLOWING);
+
+  // Dies ist ein einfacher, statischer Ausgang
+  AddExit("osten", __DIR__"huette3b");
+}
+
diff --git a/room/huette3b.c b/room/huette3b.c
new file mode 100644
index 0000000..47c1eff
--- /dev/null
+++ b/room/huette3b.c
@@ -0,0 +1,31 @@
+inherit "/std/room";
+
+#include __PATH__(1)"defs.h"
+
+
+protected void create() {
+  ::create();
+
+  SetProp(P_INT_SHORT, "Vor der Huette");
+  SetProp(P_INT_LONG, BSLF(
+    "Blinzelnd stehst Du im grellen, boesen Sonnenlicht. Es blendet Deine "
+    "Augen und verbrennt Deine Haut. Du kannst schnell nach Westen zurueck "
+    "in die Huette fliehen."));
+
+  SetProp(P_LIGHT, 1);
+  SetProp(P_INDOORS, 1);
+  SetProp(P_LIGHT_TYPE, LT_SUN);
+
+  // Ein Beispiel mit einem dynamischen Ausgang:
+  AddExit("westen", #'westen);
+}
+
+/* ... in dem wir eine zusaetzliche Meldung ausgeben, weil man den Ausgang
+   sonst ja auch haette statisch schreiben koennen.
+   Wenn ein Ausgang statisch geschrieben werden kann, sollte man das
+   auch tun, das liest sich leichter. */
+int westen() {
+  tell_room(TO, BSLF(
+    "Ein Sack Reis kippt um."));
+  return TP->move(__DIR__"huette3b", M_GO);
+}
