Neues Beispiel.
diff --git a/README b/README
index 86cfb7b..fe59064 100644
--- a/README
+++ b/README
@@ -86,6 +86,10 @@
   room/huette17.c
 18. Ein Beispiel fuer eine einfache, kleine Miniquest.
   room/huette18.c
+19. Ein Beispiel fuer einen Gegenstand, den man beim Forschen "findet",
+    und der dann - unter den ueblichen Checks - in das Inventory des
+    Spielers bewegt wird.
+  room/huette19.c obj/schoki.c
 
 
 B. Unser erster eigener NPC
@@ -124,5 +128,7 @@
   obj/axt3.c
 7. Ein grosser, nicht bewegbarer Behaelter.
   obj/kiste.c
-
+8. Ein weiteres Beispiel fuer ein Gegenstand, der weder Waffe noch Ruestung
+   ist.
+  obj/schoki.c
 
diff --git a/obj/schoki.c b/obj/schoki.c
new file mode 100644
index 0000000..cb936b5
--- /dev/null
+++ b/obj/schoki.c
@@ -0,0 +1,51 @@
+inherit "/std/thing" ;
+
+#include __PATH__(1)"defs.h"
+
+int cmd_essen();
+
+
+protected void create() {
+  if (!clonep()) {
+    set_next_reset(-1);
+    return;
+  }
+  ::create();
+
+  SetProp(P_SHORT, "Ein kleines Stueck Schokolade");
+  SetProp(P_LONG, BSLF(
+    "Das Stueck Schokolade ist nicht sehr gross, sieht aber sehr lecker "
+    "aus."));
+  SetProp(P_INFO, BSLF(
+    "Dieses kleine Schokoladenstueck ist essbar und macht dabei nichtmal "+
+    "satt. Allerdings heilt sie Dich auch nicht."));
+  SetProp(P_NAME, "Schokoladenstueck");
+
+  SetProp(P_GENDER, NEUTER);
+  SetProp(P_WEIGHT, 10);
+  SetProp(P_VALUE, 0);
+  SetProp(P_MATERIAL, ([MAT_CHOCOLATE:100]));
+  AddId(({"schoki", "schoko", "schokolade",
+          "schokoladenstueck", "schokostueck", "stueck"});
+
+  AddCmd("iss|ess|esse&@ID", #'cmd_essen,
+    "Was willst Du essen?|");
+}
+
+
+int cmd_essen() {
+  if (ENV()!=TP) {
+    tell_object(TP, BSLF(
+      "Dazu solltest Du das Schokoladenstueck schon dabeihaben."));
+    return 1;
+  }
+
+  tell_object(TP, BSLF(
+    "Du steckst die Schokolade in den Mund und laesst sie Dir auf der "
+    "Zunge foermlich zergehen. Lecker!"));
+  tell_room(ENV(TP), BSLF(
+    TPNC+" steckt sich ein Stueck Schokolade in den Mund."), ({TP}));
+  remove(1);
+  return 1;
+}
+
diff --git a/room/huette19.c b/room/huette19.c
new file mode 100644
index 0000000..ad2423d
--- /dev/null
+++ b/room/huette19.c
@@ -0,0 +1,105 @@
+inherit "/std/room";
+
+#include __PATH__(1)"defs.h"
+
+int cmd_knopf();
+
+int schoki_da = 1; // 1 wenn Schoki vorhanden ist, 0 wenn nicht
+
+protected void create() {
+  ::create();
+
+  SetProp(P_INT_SHORT, "Eine Huette mit verstecktem Gegenstand");
+  SetProp(P_INT_LONG, BSLF(
+    "Diese Huette sieht auf den ersten Blick recht leer aus."));
+
+  SetProp(P_LIGHT, 1);
+  SetProp(P_INDOORS, 1);
+  SetProp(P_LIGHT_TYPE, LT_GLOWING);
+
+  AddDetail("blick", BSLF(
+    "Dein Blick faellt auf die kahle Wand, hier ist echt nichts los."));
+  AddDetail("wand", BSLF(
+    "An der Wand ist nichts zu finden, nur ein kleiner Knopf ist da "
+    "angebracht."));
+  AddDetail("knopf", BSLF(
+    "Der Knopf ist so klein und niedlich, Du moechtest ihn doch bestimmt "
+    "gern mal druecken, oder?"));
+
+  AddCmd("drueck|druecke&knopf", #'cmd_knopf,
+    "Wen oder was willst Du druecken?^");
+}
+
+void reset() {
+  ::reset();
+  if (!schoki_da) {
+    // Einmal pro Reset gibts neue Schoki:
+    tell_room(TO, BSLF(
+      "Der Knopf an der Wand knirscht leise."));
+    schoki_da = 1;
+  }
+}
+
+int cmd_knopf() {
+  if (!schoki_da) {
+    // Diesen Reset wurde die Schoki schon abgeholt:
+    tell_object(TP, BSLF(
+      "Du drueckst den Knopf, aber nichts passiert. Gedulde Dich ein wenig "
+      "und probiere es spaeter nochmal."));
+    tell_room(TO, BSLF(
+      TPNC+" macht sich an der Wand zu schaffen. Nichts passiert."), ({TP}));
+    return 1;
+  }
+
+  /* Das Objekt wird geclont ... */
+  object ob = clone_object(__PATH__(1)"obj/schoki");
+  if (!objectp(ob)) {
+    /* ... aber es gab dabei einen Fehler, das Objekt konnte nicht erzeugt
+       werden: */
+    tell_object(TP, BSLF(
+      "Da ist wohl etwas schiefgegangen, Du hoerst von weiter oben nur "
+      "ein resigniertes Jammern."));
+    tell_room(TO, BSLF(
+      TPNC+" macht sich an der Wand zu schaffen. Von oben hoerst Du "
+      "Gejammer."), ({TP}));
+  } else if (ob->move(TP, M_GET) == MOVE_OK) {
+    /* Beim Bewegen eines Gegenstandes in den Spieler ist eine Pruefung auf
+       den Erfolg des Aufrufes Pflicht. Fuer moegliche Gruende, dass move()
+       fehlschlaegt, lies Dir bitte die Manpage zu move() durch.
+
+       Das Objekt wurde erfolgreich erzeugt, und es wurde erfolgreich in den
+       Spieler bewegt, der die Aktion ausgeloest hat: */
+    tell_object(TP, BSLF(
+      "Eine Klappe oeffnet sich an der Decke, und etwas faellt von oben "
+      "herab. Geschickt faengst Du es auf."));
+    tell_room(TO, BSLF(
+      "Etwas faellt von oben herab und wird geschickt von "+TPN+
+      " aufgefangen."), ({TP}));
+    schoki_da = 0;
+  } else {
+    /* Das Objekt wurde erfolgreich erzeugt, aber es konnte nicht in den
+       Spieler bewegt werden. Da das Objekt in diesem Fall sehr einfach
+       gebaut ist und keine Sonderbehandlung dafuer beinhaltet, bewegt
+       zu werden, ist der Spieler offensichtlich ueberladen. Wir muessen
+       also in diesem Fall nicht pruefen, welchen Fehlerwert move()
+       zurueckgeliefert hat. */
+    tell_object(TP, BSLF(
+      "Eine klappe oeffnet sich an der Decke, und etwas faellt von oben "
+      "herab. Du bist aber schon zu vollgeladen, um es noch halten zu "
+      "koennen. Es faellt zu Boden."));
+    tell_room(TO, BSLF(
+      "Etwas faellt von oben herab, aber "+TPN+" stellt sich zu dusslig "
+      "an. Schnell, hebe es auf, bevor "+TP->QueryPronoun(WER)+" sich "
+      "besinnt!"), ({TP}));
+    schoki_da = 0;
+    /* Beim Bewegen des Objektes in den Raum kann auch etwas schiefgehen,
+       aber ueblicherweise passiert das nur in seltenen Ausnahmefaellen.
+       Normalerweise prueft man den Rueckgabewert von move() beim Bewegen
+       von Gegenstaenden oder Spielern in einen Raum nicht, denn wenn das
+       nicht klappt, WILL man Debug-Output auf den entsprechenden Magier-
+       Ebenen und im Fehlerteufel haben: */
+    ob->move(TO, M_PUT);
+  }
+  return 1;
+}
+