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;
+}
+
