diff --git a/README b/README
index 6197f15..0f43112 100644
--- a/README
+++ b/README
@@ -92,13 +92,10 @@
   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.
-  obj/axt2.c
 5. Eine Waffe, die nur fuer einen bestimmten NPC zu zuecken ist, nicht fuer
    Spieler.
-  obj/axt3.c
+  obj/axt2.c
 6. Eine Waffe, die nur fuer beliebige NPCs zu zuecken ist, nicht fuer
    Spieler.
-  obj/axt3b.c
+  obj/axt3.c
 
diff --git a/obj/axt2.c b/obj/axt2.c
index a8eb3aa..83937d9 100644
--- a/obj/axt2.c
+++ b/obj/axt2.c
@@ -1,11 +1,13 @@
 /*
-  Manchmal moechte man ja einem NPC eine ordentliche Waffe geben, die dann
-  aber fuer Spieler nicht so geeignet oder schlicht zu gut waere. In diesem
-  Fall ist eine Moeglichkeit, die Waffenwerte abhaengig von demjenigen zu
-  setzen, der sie gerade dabeihat.
+  Eine andere Moeglichkeit, eine Waffe nur fuer einen NPC zur Verfuegung zu
+  stellen ist ein wenig frustrierender fuer Spieler. Man sollte Beispiele
+  wie dieses nicht ungeprueft uebernehmen. Waffen, die kein Spieler zuecken
+  kann, stossen meist nicht auf sehr hohen Enthusiasmus beim Spieler, die
+  betreffende Gegend mehrmals zu aufzusuchen.
 */
 inherit "/std/weapon";
 
+#include <new_skills.h>
 #include __PATH__(1)"defs.h"
 
 
@@ -25,23 +27,16 @@
   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_WC, 180);
   SetProp(P_WEAPON_TYPE, WT_AXE);
   SetProp(P_DAM_TYPE, DT_SLASH);
   SetProp(P_NR_HANDS, 1);
 
+  /* "Restriktionen" bezieht sich hier konkret auf das Zuecken der Waffe.
+     In diesem Beispiel wird das anhand der Function wield_check()
+     ueberprueft, die sich in DIESEM Objekt befinden muss: */
+  SetProp(P_RESTRICTIONS, ([SR_FUN: "wield_check"]));
+
   SetProp(P_VALUE, 200);
   SetProp(P_WEIGHT, 3250);
   SetProp(P_SIZE, 90);
@@ -49,3 +44,13 @@
   SetProp(P_MATERIAL, ([MAT_STEEL:100]));
 }
 
+public string wield_check() {
+  /* Wir pruefen direkt, ob derjenige, der die Axt im Inventory hat, der
+     legale Besitzer ist. Diese Axt funktioniert also z.B. nicht mehr,
+     wenn man einen anderen NPC damit ausruesten moechte. */
+  if (load_name(ENV()) != __PATH__(1)"npc/zwerg4")
+    return BSLF(
+      "Dies ist Kawumms persoenliche Axt. Sie ist so dermassen unhandlich, "
+      "dass Du sie nicht zuecken kannst.");
+  return 0;
+}
diff --git a/obj/axt3.c b/obj/axt3.c
index 83937d9..a2fbf7f 100644
--- a/obj/axt3.c
+++ b/obj/axt3.c
@@ -1,10 +1,3 @@
-/*
-  Eine andere Moeglichkeit, eine Waffe nur fuer einen NPC zur Verfuegung zu
-  stellen ist ein wenig frustrierender fuer Spieler. Man sollte Beispiele
-  wie dieses nicht ungeprueft uebernehmen. Waffen, die kein Spieler zuecken
-  kann, stossen meist nicht auf sehr hohen Enthusiasmus beim Spieler, die
-  betreffende Gegend mehrmals zu aufzusuchen.
-*/
 inherit "/std/weapon";
 
 #include <new_skills.h>
@@ -20,8 +13,8 @@
 
   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."));
+    "Dies ist die Axt von Kawumm, dem Zwerg. Sie ist allerdings nicht fuer "
+    "Spielerhaende gedacht."));
 
   SetProp(P_NAME, "Axt");
   SetProp(P_GENDER, FEMALE);
@@ -32,10 +25,9 @@
   SetProp(P_DAM_TYPE, DT_SLASH);
   SetProp(P_NR_HANDS, 1);
 
-  /* "Restriktionen" bezieht sich hier konkret auf das Zuecken der Waffe.
-     In diesem Beispiel wird das anhand der Function wield_check()
-     ueberprueft, die sich in DIESEM Objekt befinden muss: */
-  SetProp(P_RESTRICTIONS, ([SR_FUN: "wield_check"]));
+  /* Als Variante des letzten Beispieles: Wenn es egal ist, welcher NPC
+     die Axt zuecken darf, dann geht es auch ohne zusaetzliche Function: */
+  SetProp(P_RESTRICTIONS, ([SR_PROP: ([P_NPC:1])]));
 
   SetProp(P_VALUE, 200);
   SetProp(P_WEIGHT, 3250);
@@ -44,13 +36,3 @@
   SetProp(P_MATERIAL, ([MAT_STEEL:100]));
 }
 
-public string wield_check() {
-  /* Wir pruefen direkt, ob derjenige, der die Axt im Inventory hat, der
-     legale Besitzer ist. Diese Axt funktioniert also z.B. nicht mehr,
-     wenn man einen anderen NPC damit ausruesten moechte. */
-  if (load_name(ENV()) != __PATH__(1)"npc/zwerg4")
-    return BSLF(
-      "Dies ist Kawumms persoenliche Axt. Sie ist so dermassen unhandlich, "
-      "dass Du sie nicht zuecken kannst.");
-  return 0;
-}
diff --git a/obj/axt3b.c b/obj/axt3b.c
deleted file mode 100644
index a2fbf7f..0000000
--- a/obj/axt3b.c
+++ /dev/null
@@ -1,38 +0,0 @@
-inherit "/std/weapon";
-
-#include <new_skills.h>
-#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. Sie ist allerdings nicht fuer "
-    "Spielerhaende gedacht."));
-
-  SetProp(P_NAME, "Axt");
-  SetProp(P_GENDER, FEMALE);
-  AddId(({"axt"}));
-
-  SetProp(P_WC, 180);
-  SetProp(P_WEAPON_TYPE, WT_AXE);
-  SetProp(P_DAM_TYPE, DT_SLASH);
-  SetProp(P_NR_HANDS, 1);
-
-  /* Als Variante des letzten Beispieles: Wenn es egal ist, welcher NPC
-     die Axt zuecken darf, dann geht es auch ohne zusaetzliche Function: */
-  SetProp(P_RESTRICTIONS, ([SR_PROP: ([P_NPC:1])]));
-
-  SetProp(P_VALUE, 200);
-  SetProp(P_WEIGHT, 3250);
-  SetProp(P_SIZE, 90);
-
-  SetProp(P_MATERIAL, ([MAT_STEEL:100]));
-}
-
