diff --git a/README b/README
index b476014..baf40e3 100644
--- a/README
+++ b/README
@@ -70,6 +70,9 @@
 12. Ein Raum, wo man etwas anfassen kann. Ausserdem enthaelt er Geruch und
    Geraeusch.
   room/huette12.c
+13. Ein weiteres Beispiel fuer eine dynamische Langbeschreibung, dynamisches
+    Detail. Ausserdem ein NPC, der eine selbstdefinierte Prop benutzt.
+  room/huette13.c
 
 
 B. Unser erster eigener NPC
@@ -87,6 +90,8 @@
   npc/zwerg5.c
 6. Ein Zwerg mit einer speziellen Waffe.
   npc/zwerg6.c
+7. Ein Zwerg, der eine selbstdefinierte Prop verwendet.
+  npc/zwerg7.c
 
 
 C. Unsere ersten eigenen Gegenstaende
diff --git a/npc/zwerg7.c b/npc/zwerg7.c
new file mode 100644
index 0000000..4290a3b
--- /dev/null
+++ b/npc/zwerg7.c
@@ -0,0 +1,80 @@
+inherit "/std/npc";
+
+#include <new_skills.h>
+#include __PATH__(1)"defs.h"
+
+#define MYPROP notstrom_tutorial2018_beispiel1
+
+private string look();
+private int hauen();
+
+private mapping hauer = ([]);
+
+protected void create() {
+  if (!clonep()) {
+    set_next_reset(-1);
+    return;
+  }
+  ::create();
+
+  create_default_npc(20, 600);
+
+  SetProp(P_SHORT, "Ein Zwerg");
+  Set(P_LONG, #'look, F_QUERY_METHOD);
+  SetProp(P_NAME, "Kawumm");
+  SetProp(P_ARTICLE, 0);
+  SetProp(P_GENDER, MALE);
+
+  AddId(({"zwerg", "kawumm"}));
+  SetProp(P_ALIGN, 100);
+  SetProp(P_RACE, "Zwerg");
+  SetProp(P_SIZE, 102);
+
+  AddCmd("hau|haue&@ID", #'hauen,
+    "Wen willst Du hauen?");
+}
+
+void reset() {
+  ::reset();
+
+  if (sizeof(hauer)) {
+    tell_room(ENV(), BSLF(
+      "Krawumm vergisst, von wem er schon alles gehauen wurde. Seine "
+      "Blessuren verschwinden wie von Magierhand."));
+    hauer = ([]);
+  }
+}
+
+private string look() {
+  string msg = "Dies ist Krawumm, der Zwerg. ";
+  if (!sizeof(hauer)) {
+    msg += "Niemand hat ihm bisher eins auf die Omme gehauen, obwohl er so "
+      "verfuehrerisch herumsteht.\n";
+  } else {
+    msg += "Er hat schon durchaus was auf die Omme bekommen, und zwar von "+
+      CountUp(hauer)+"\n";
+  }
+  msg += "Wenn Du ihm was draufsemmeln willst, dann versuche einfach:\n"
+    "  haue krawumm";
+  return BSLF(msg);
+}
+
+private int hauen() {
+  if (TP->QueryProp(MYPROP)) {
+    tell_object(TP, BSLF(
+      "Aber nicht doch. Du hast Krawumm bereits gehauen."));
+  } else {
+    tell_object(TP, BSLF(
+      "Gut, Du haust also Krawumm welche auf die Omme. Krawumm zuckt kurz, "
+      "steht dann aber unbewegt weiter rum. Er hat sich das aber bestimmt "
+      "gemerkt ..."));
+    tell_room(ENV(), BSLF(
+      TPN+" haut Krawumm eins auf die Omme. Dem scheint das aber nicht viel "
+      "auszumachen. Typisch Zwerg, solange er Alk kriegt, ist er zufrieden."),
+      ({TP}));
+    TP->SetProp(MYPROP, 1);
+    m_add(hauer, getuuid(TP), 1);
+  }
+  return 1;
+}
+
diff --git a/room/huette13.c b/room/huette13.c
new file mode 100644
index 0000000..fde36e4
--- /dev/null
+++ b/room/huette13.c
@@ -0,0 +1,40 @@
+inherit "/std/room";
+
+#include __PATH__(1)"defs.h"
+
+private string look();
+
+
+protected void create() {
+  ::create();
+
+  SetProp(P_INT_SHORT, "Eine schummrige Huette");
+  Set(P_INT_LONG, #'look, F_QUERY_METHOD);
+
+  SetProp(P_LIGHT, 1);
+  SetProp(P_INDOORS, 1);
+  SetProp(P_LIGHT_TYPE, LT_GLOWING);
+
+  AddDetail("spieler", function string() {
+    return TP->long();
+  });
+
+  AddItem(__PATH__(1)"npc/zwerg7", REFRESH_DESTRUCT);
+}
+
+string look() {
+  string msg = "Dies scheint eine Kampfarena zu sein. "
+  object o = present_clone(__PATH__(1)"npc/zwerg7");
+  if (objectp(o)) {
+    string s = o->get_gehauen();
+    if (stringp(s) && s!="")
+      return BSLF(
+        msg + "Der Zwerg, der hier rumsteht, hat von " + s +
+        " auch schon was auf die Omme bekommen.");
+    return BSLF(
+      msg + "Du kannst dem Zwerg, der hier steht, sicher was auf die Omme "
+      "geben.");
+  } else
+    return BSLF(
+      msg + "Es ist aber gerade niemand da.");
+}
