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