diff --git a/README b/README
index f196e14..9f4cdba 100644
--- a/README
+++ b/README
@@ -56,6 +56,10 @@
 7. Ein Raum mit einem NPC, der ueber Spells und Resistenzen verfuegt.
   room/huette7.c, npc/zwerg3.c
 8. Ein Raum mit einem NPC, der ein eigenes Defend() definiert.
+  room/huette8.c, npc/zwerg4.c
+9. Ein Raum mit einem NPC, der eine persoenliche Waffe und einen
+   Spezialangriff nutzt.
+  room/huette9.c, npc/zwerg5.c
 
 
 B. Unser erster eigener NPC
@@ -69,6 +73,8 @@
   npc/zwerg3.c
 4. Ein Zwerg mit eigenem Defend().
   npc/zwerg4.c
+5. Ein Zwerg mit eigenem Attack().
+  npc/zwerg5.c
 
 
 C. Unsere ersten eigenen Gegenstaende
@@ -80,3 +86,6 @@
   obj/schild.c
 3. Ein Gegenstand, der weder Waffe noch Ruestung ist.
   obj/krempel.c
+4. Eine Waffe, die ihren Besitzer mehr Schaden macht. Ausserdem ein Beispiel
+   fuer eine Prop, die per Inline-Closure gesetzt wird.
+
diff --git a/npc/zwerg5.c b/npc/zwerg5.c
new file mode 100644
index 0000000..4f69f87
--- /dev/null
+++ b/npc/zwerg5.c
@@ -0,0 +1,67 @@
+inherit "/std/npc";
+
+#include <new_skills.h>
+#include __PATH__(1)"defs.h"
+
+
+private int ausholen;
+
+protected void create() {
+  if (!clonep()) {
+    set_next_reset(-1);
+    return;
+  }
+  ::create();
+
+  create_default_npc(20, 600);
+
+  SetProp(P_SHORT, "Ein angriffslustiger Zwerg");
+  SetProp(P_LONG, BSLF(
+    "Diesmal hat Kawumm eine spezielle Axt, und er greift ab und zu staerker "
+    "an."));
+  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);
+
+  SetProp(P_MURDER_MSG,
+    "He! Ich gehoere doch zu Notstroms Magiertutorial, %s.");
+  /* Wir setzen hier auch mal eine Kill-Message, dieser Zwerg koennte ja
+     sogar mal wen erwischen: */
+  SetProp(P_KILL_MSG,
+    "Kommt davon, wenn man sich an einem Magiertutorial vergreift, %s!");
+  SetProp(P_DIE_MSG, " kippt um wie eine leere Bierflasche.\n");
+
+  AddItem(__PATH__(1)"obj/axt2", REFRESH_NONE|CLONE_WIELD);
+}
+
+/* Ab und zu (20% Chance) startet Kawumm eine starke Attacke, die braucht
+   dann aber ein paar Runden: */
+void Attack() {
+  if (ausholen) {
+    if (ausholen == 1) {
+      mixed waffe = QueryProp(P_WEAPON);
+      string* damtype = ({DT_BLUDGEON});
+      if (waffe) damtype = waffe->QueryProp(P_DAM_TYPE);
+
+      tell_room(ENV(), BSLF(
+        "Kawumm semmelt so richtig feste zu."));
+      enemy->Defend(300, damtype, 0, TO);
+    }
+    --ausholen;
+    return;
+  }
+
+  if (!random(5)) {
+    ausholen = 3;
+    tell_room(ENV(), BSLF(
+      "Kawumm holt mal so richtig weit aus, um dann um so fester "
+      "zuzuschlagen."));
+    return;
+  }
+  ::Attack();
+}
diff --git a/obj/axt2.c b/obj/axt2.c
new file mode 100644
index 0000000..ebfeef2
--- /dev/null
+++ b/obj/axt2.c
@@ -0,0 +1,46 @@
+// Fuer Waffen allgemein bitte "man waffen" lesen!
+inherit "/std/weapon";
+
+#include __PATH__(1)"defs.h"
+
+
+protected void create() {
+  if (!clonep()) {
+    set_next_reset(-1);
+    return;
+  }
+  ::create();
+
+  SetProp(P_SHORT, "Eine besondere Axt");
+  SetProp(P_LONG, BSLF(
+    "Dies ist die Axt von Kawumm, dem Zwerg. Niemand kann so damit zuhauen "
+    "wie er."));
+
+  SetProp(P_NAME, "Axt");
+  SetProp(P_GENDER, FEMALE);
+  AddId(({"axt"}));
+
+  /* Dies ist Kawumms persoenliche Axt, und mit der macht er mehr Schaden als
+     jeder andere. Gleichzeitig ist dies ein Beispiel dafuer, wie man eine
+     Prop mit einer Closure setzt. Da F_QUERY_METHOD angegeben ist, wird die
+     eingebundene Inline-Function jedesmal ausgefuehrt, wenn der Wert von P_WC
+     abgefragt wird, also z.B.  auch bei jedem Attack(). Der umgekehrte Fall
+     waere, wenn wir F_SET_METHOD verwenden, dann wuerde die Inline-Function
+     ausgefuehrt, wenn jemand SetProp(P_WC) aufruft. */
+  Set(P_WC, function int() {
+    if (load_name(ENV()) == __PATH__(1)"npc/zwerg5")
+      return 180;
+    return 100;
+  }, F_QUERY_METHOD);
+
+  SetProp(P_WEAPON_TYPE, WT_AXE);
+  SetProp(P_DAM_TYPE, DT_SLASH);
+  SetProp(P_NR_HANDS, 1);
+
+  SetProp(P_VALUE, 200);
+  SetProp(P_WEIGHT, 3250);
+  SetProp(P_SIZE, 90);
+
+  SetProp(P_MATERIAL, ([MAT_STEEL:100]));
+}
+
diff --git a/room/huette9.c b/room/huette9.c
new file mode 100644
index 0000000..9c3db3a
--- /dev/null
+++ b/room/huette9.c
@@ -0,0 +1,18 @@
+inherit "/std/room";
+
+#include __PATH__(1)"defs.h"
+
+
+protected void create() {
+  ::create();
+
+  SetProp(P_INT_SHORT, "Eine schummrige Huette");
+  SetProp(P_INT_LONG, BSLF(
+    "Und wieder ist der Raum nicht sonderlich interessant."));
+
+  SetProp(P_LIGHT, 1);
+  SetProp(P_INDOORS, 1);
+  SetProp(P_LIGHT_TYPE, LT_GLOWING);
+
+  AddItem(__PATH__(1)"npc/zwerg5", REFRESH_DESTRUCT);
+}
