diff --git a/doc/beispiele/AddInfo/goldklumpen.c b/doc/beispiele/AddInfo/goldklumpen.c
new file mode 100644
index 0000000..a1319e1
--- /dev/null
+++ b/doc/beispiele/AddInfo/goldklumpen.c
@@ -0,0 +1,22 @@
+#pragma strong_types, save_types, rtt_checks, pedantic
+inherit "/std/thing";
+
+#include <properties.h>
+
+protected void create() {
+  if(!clonep(this_object())) return;
+  ::create();
+
+  AddId(({"klumpen", "goldklumpen"}));
+
+  SetProp(P_NAME, "Goldklumpen");
+  SetProp(P_SHORT, "Ein Goldklumpen");
+  SetProp(P_LONG, break_string(
+    "Ein Klumpen Gold. Heb ihn doch auf und frage ein Monster "
+    "nach Gold.", 78));
+
+  SetProp(P_GENDER, MALE);
+  SetProp(P_WEIGHT, 200);
+  SetProp(P_VALUE, 0);
+  SetProp(P_MATERIAL, MAT_GOLD);
+}
diff --git a/doc/beispiele/AddInfo/keks.c b/doc/beispiele/AddInfo/keks.c
new file mode 100644
index 0000000..d0f2ea1
--- /dev/null
+++ b/doc/beispiele/AddInfo/keks.c
@@ -0,0 +1,24 @@
+#pragma strong_types, save_types, rtt_checks, pedantic
+inherit "/std/thing";
+
+#include <properties.h>
+
+protected void create() {
+  if(!clonep(this_object())) return;
+  ::create();
+
+  AddId(({"keks"}));
+
+  SetProp(P_NAME, "Keks");
+  SetProp(P_SHORT, "Ein Keks");
+  SetProp(P_LONG, break_string(
+    "Ein leckerer Keks. Gib ihn doch einem Monster.",78));
+
+  SetProp(P_GENDER, MALE);
+  SetProp(P_WEIGHT, 20);
+  SetProp(P_VALUE, 0);
+  SetProp(P_MATERIAL, MAT_MISC_PLANT);
+
+  AddCmd("iss|mampf|friss&@ID&\n", 0,
+         "Was willst du essen?|Sieht nicht lecker genug aus.^");
+}
diff --git a/doc/beispiele/AddInfo/monster.c b/doc/beispiele/AddInfo/monster.c
new file mode 100644
index 0000000..5ffe117
--- /dev/null
+++ b/doc/beispiele/AddInfo/monster.c
@@ -0,0 +1,99 @@
+#pragma strong_types, save_types, rtt_checks, pedantic
+inherit "std/npc";
+
+#include <properties.h>
+
+protected string query_kekse();
+protected string question_gold();
+
+protected void create() {
+  if (!clonep(this_object())) return;
+  ::create();
+
+  SetProp(P_SHORT, "Ein Monster");
+  SetProp(P_LONG, break_string(
+    "Das Monster sieht dich hungrig an. "
+    "Wahrscheinlich will es Geld oder Kekse.", 78));
+  SetProp(P_NAME, "Monster");
+  SetProp(P_GENDER, NEUTER);
+  AddId("monster");
+
+  SetProp(P_RACE, "Monster");
+  SetProp(P_XP, 0);
+  SetProp(P_BODY, 50);
+  SetProp(P_SIZE, random(20)+110);
+
+  // Beispiel 1
+  AddInfo(DEFAULT_INFO, "starrt Dir boese in die Augen.\n");
+
+  // Beispiel 2
+  AddInfo(({"knete","kohle"}),
+    "sagt: ich habe so etwas nicht.");
+  AddInfo("geld",
+    "Ich habe zwar kein Geld, aber [...] blablabla [...] blub muh quak "
+    "lorem blupsum Umbruch now!",
+    "sagt: ");
+  AddInfo("muenzen",
+    "fluestert: Du willst Geld?",
+    0,
+    "fluestert @WEM etwas zu.");
+
+  // Beispiel 3
+  AddInfo(({"keks","kekse"}),
+    #'query_kekse,        // ein Verweis auf die Funktion
+    "sagt: ");
+
+  // Beispiel 5
+  AddInfo("gold", #'question_gold, "murmelt: ", 1);
+}
+
+protected string query_kekse() {
+  if(present("keks", this_object()))
+    return("Ich hab noch welche. Aetsch!");
+  else if(present("keks", environment()))
+    return("Da liegt einer!");
+  return("Menno. Keine mehr da!");
+}
+
+protected string question_gold() {
+  // wieviel Kohle hat der Spieler
+  int money = this_player()->QueryMoney();
+  string *y = map(deep_inventory(this_player()),
+                function string(object o) {
+                  if(o->QueryMaterial(MAT_GOLD)>0 &&
+                     strstr(object_name(o),"/items/money")<0 &&
+                     o->QueryProp(P_NAME))
+                    return o->name(WER,1);
+                })-({0});
+
+  // das geht an alle anderen im Raum, silent bietet sich hier
+  // nicht an, weil es mehrere Moeglichkeiten gibt
+  send_room(environment(),
+    (Name(WER,1)+" murmelt "+
+     this_player()->name(WEM,1)+
+     " etwas zu"+
+     ((money || sizeof(y))?
+       " und glotzt "+this_player()->QueryPronoun(WEN)+" gierig an.":
+       ".")),
+    MT_LOOK|MT_LISTEN,
+    MA_EMOTE, 0, ({this_player()}));
+
+  // und hier die Antwort an den Spieler selbst, mit vielen
+  // Verzweigungen fuer dessen Besitztum
+  return("Ich hab kein Gold bei mir."+
+    ((money || sizeof(y))?
+      " Aber du "+
+      (money?
+        "hast ja jede Menge Kohle bei dir, so etwa "+money+
+        " Muenzen."+
+        (sizeof(y)?
+          " Ausserdem "+
+          ((sizeof(y)==1)?"ist":"sind")+
+          " auch noch "+CountUp(y)+" aus Gold.":
+          ""):
+        (sizeof(y)?"hast ja ein paar Wertsachen dabei: "+
+        CountUp(y)+
+        (sizeof(y)==1?" ist":" sind")+
+        " aus Gold.":"")):
+      ""));
+}
\ No newline at end of file
diff --git a/doc/beispiele/AddInfo/raum.c b/doc/beispiele/AddInfo/raum.c
new file mode 100644
index 0000000..e1570c5
--- /dev/null
+++ b/doc/beispiele/AddInfo/raum.c
@@ -0,0 +1,20 @@
+#pragma strong_types, save_types, rtt_checks, pedantic, no_clone
+inherit "/std/room";
+
+#include <config.h>
+#include <properties.h>
+
+protected void create() {
+  ::create();
+
+  SetProp(P_INT_LONG, "Ein leerer Raum.\n");
+  SetProp(P_INT_SHORT, "Im leeren Raum");
+  SetProp(P_LIGHT, 1);
+
+  AddItem(__PATH__(0)"monster", REFRESH_REMOVE);
+  AddItem(__PATH__(0)"keks", REFRESH_REMOVE);
+  AddItem(__PATH__(0)"goldklumpen", REFRESH_REMOVE);
+  AddItem(__PATH__(0)"zuhoerer", REFRESH_REMOVE);
+
+  AddExit("gilde", "/gilden/abenteurer");
+}
diff --git a/doc/beispiele/AddInfo/zuhoerer.c b/doc/beispiele/AddInfo/zuhoerer.c
new file mode 100644
index 0000000..b46a59c
--- /dev/null
+++ b/doc/beispiele/AddInfo/zuhoerer.c
@@ -0,0 +1,47 @@
+#pragma strong_types, save_types, rtt_checks, pedantic
+inherit "std/npc";
+
+#include <properties.h>
+
+protected void create() {
+  if (!clonep(this_object())) return;
+  ::create();
+
+  SetProp(P_SHORT, "Ein Beobachter");
+  SetProp(P_LONG, break_string(
+    "Der Beobachter hoert und sieht zu.", 78));
+  SetProp(P_NAME, "Beobachter");
+  SetProp(P_GENDER, MALE);
+  AddId("beobachter");
+
+  SetProp(P_RACE, "Beobachter");
+  SetProp(P_XP, 0);
+  SetProp(P_BODY, 50);
+}
+
+private string buf = "";
+
+void empty_buffer() {
+  tell_room(environment(),
+    "\nDer Zuhoerer murmelt: 'Folgendes habe ich gesehen'\n***\n"+
+    buf+
+    "***\n",
+    ({this_object()}));
+  buf = "";
+}
+
+public varargs int ReceiveMsg(string msg, int msg_typ, string msg_action,
+  string msg_prefix, mixed origin) {
+  if (msg_typ & MSG_DONT_WRAP)
+    buf+=sprintf("%s%s", msg_prefix||"", msg);
+  else
+    buf+=sprintf("%s%s\n", msg_prefix||"", msg);
+  if(find_call_out("empty_buffer")<0)
+    call_out("empty_buffer", 1);
+}
+
+void catch_tell(string msg) {
+  buf+=msg;
+  if(find_call_out("empty_buffer")<0)
+    call_out("empty_buffer", 1);
+}
