diff --git a/doc/lfun/AddToMenu b/doc/lfun/AddToMenu
index 01d46b6..c983647 100644
--- a/doc/lfun/AddToMenu
+++ b/doc/lfun/AddToMenu
@@ -249,7 +249,11 @@
       "Der unsichtbare Kneipier schneidet einem hilflosen Opa ein "
       "Stueck aus dessen Keule und braet diese fuer @WEN1."}));
 
+
 LISTE DER ALTEN PLATZHALTER (DEPRECATED):
+=========================================
+
+::
    &&  - pl->name(WER,2) &1& - pl->name(WER,2) &2& -
    pl->name(WESSEN,2) &3& - pl->name(WEM,2) &4& - pl->name(WEN,2) &1#
    - capitalize(pl->name(WER,2)) &2# - capitalize(pl->name(WESSEN,2))
diff --git a/doc/lfun/buffer_hp b/doc/lfun/buffer_hp
index 181751c..db9ba79 100644
--- a/doc/lfun/buffer_hp
+++ b/doc/lfun/buffer_hp
@@ -49,47 +49,44 @@
 ========
 
    #define TP this_player()
-   ...
+   #define BS(x) break_string(x, 78)
 
    int heilung=1;
-   ...
 
-   create()
+   protected void create()
    {
-    ::create();
-    SetProp(P_NAME,"Heilpflanze");
-    ...
+     ::create();
+     SetProp(P_NAME,"Heilpflanze");
+     ...
 
-    AddCmd("iss","eat");
+     AddCmd("iss&@ID", "eat", "WAS willst Du essen?");
    }
 
    int eat(string str)
    {
-     notify_fail("WAS willst Du essen?\n");
-     if ( !str || !id(str) )
-      return 0;
-     ...
-
-     if ( !TP->eat_food(25) )
-      return 1;
-
-     TP->buffer_hp(20,5);
-     TP->buffer_sp(80,10);
-     heilung--;
-     write(BS("Du fuehlst langsam, wie Deine Kraefte zurueckkehren."));
-
+     if ( TP->eat_food(25) )
+     {
+       TP->buffer_hp(20,5);
+       TP->buffer_sp(80,10);
+       heilung--;
+       tell_object(this_player(), BS("Du fuehlst langsam, wie Deine Kraefte "
+           "zurueckkehren."));
+     }
+     // Wenn der Spieler nichts mehr essen kann, wird die Meldung von
+     // eat_food() erzeugt.
      return 1;
    }
 
-   reset()
+   void reset()
    {
      heilung=1;
      ::reset();
    }
 
-   Es wird durch eat_food getestet, ob der Spieler noch genuegend essen kann.
-   Wenn ja, kriegt unser Held die 25 automatisch oben drauf und ausserdem
-   20 LP in 5-LP-Schritten und 80 KP in 10-LP-Schritten gutgeschrieben.
+   Es wird durch eat_food() getestet, ob der Spieler noch genuegend essen
+   kann. Wenn ja, kriegt unser Held die 25 automatisch oben drauf und
+   ausserdem 20 LP in 5-LP-Schritten und 80 KP in 10-KP-Schritten
+   gutgeschrieben.
 
 
 SIEHE AUCH
diff --git a/doc/lfun/eat_food b/doc/lfun/eat_food
index 32327e2..9cf54b3 100644
--- a/doc/lfun/eat_food
+++ b/doc/lfun/eat_food
@@ -79,12 +79,9 @@
                  "dem Keks herum und fuehlst Dich gleich viel besser.", 78));
 
      // alle Lebewesen im Raum bekommen das auch mit
-     foreach(object ob:
-             (filter(all_inventory(environment(this_player())), #'living) -
-              ({this_player()})))
-       ob->ReceiveMsg(this_player()->Name()+" knuspert einen Keks weg.",
-                      MT_LOOK|MT_LISTEN,
-                      MA_EAT);
+     tell_room(environment(this_player()),
+         this_player()->Name()+" knuspert einen Keks weg.\n",
+         ({this_player()}));
 
      // Rassenabhaengige Heilung: Sofort oder in Schritten
      // Tragbare Heilungen sollten auch eher buffer_hp/_sp benutzen.
diff --git a/doc/sphinx/lfun/AddToMenu.rst b/doc/sphinx/lfun/AddToMenu.rst
index 29824f6..d2ae21f 100644
--- a/doc/sphinx/lfun/AddToMenu.rst
+++ b/doc/sphinx/lfun/AddToMenu.rst
@@ -251,6 +251,8 @@
            "Stueck aus dessen Keule und braet diese fuer @WEN1."}));
 
 LISTE DER ALTEN PLATZHALTER (DEPRECATED):
+-----------------------------------------
+::
            &&  - pl->name(WER,2)
            &1& - pl->name(WER,2)
            &2& - pl->name(WESSEN,2)
diff --git a/doc/sphinx/lfun/buffer_hp.rst b/doc/sphinx/lfun/buffer_hp.rst
index db0555c..d3ec7f2 100644
--- a/doc/sphinx/lfun/buffer_hp.rst
+++ b/doc/sphinx/lfun/buffer_hp.rst
@@ -50,47 +50,44 @@
 ::
 
     #define TP this_player()
-    ...
+    #define BS(x) break_string(x, 78)
 
     int heilung=1;
-    ...
 
-    create()
+    protected void create()
     {
-     ::create();
-     SetProp(P_NAME,"Heilpflanze");
-     ...
+      ::create();
+      SetProp(P_NAME,"Heilpflanze");
+      ...
 
-     AddCmd("iss","eat");
+      AddCmd("iss&@ID", "eat", "WAS willst Du essen?");
     }
 
     int eat(string str)
     {
-      notify_fail("WAS willst Du essen?\n");
-      if ( !str || !id(str) )
-       return 0;
-      ...
-
-      if ( !TP->eat_food(25) )
-       return 1;
-
-      TP->buffer_hp(20,5);
-      TP->buffer_sp(80,10);
-      heilung--;
-      write(BS("Du fuehlst langsam, wie Deine Kraefte zurueckkehren."));
-
+      if ( TP->eat_food(25) )
+      {
+        TP->buffer_hp(20,5);
+        TP->buffer_sp(80,10);
+        heilung--;
+        tell_object(this_player(), BS("Du fuehlst langsam, wie Deine Kraefte "
+            "zurueckkehren."));
+      }
+      // Wenn der Spieler nichts mehr essen kann, wird die Meldung von 
+      // eat_food() erzeugt.
       return 1;
     }
 
-    reset()
+    void reset()
     {
       heilung=1;
       ::reset();
     }
 
-    Es wird durch eat_food getestet, ob der Spieler noch genuegend essen kann.
-    Wenn ja, kriegt unser Held die 25 automatisch oben drauf und ausserdem
-    20 LP in 5-LP-Schritten und 80 KP in 10-LP-Schritten gutgeschrieben.
+    Es wird durch eat_food() getestet, ob der Spieler noch genuegend essen 
+    kann. Wenn ja, kriegt unser Held die 25 automatisch oben drauf und 
+    ausserdem 20 LP in 5-LP-Schritten und 80 KP in 10-KP-Schritten 
+    gutgeschrieben.
 
 SIEHE AUCH
 ----------
diff --git a/doc/sphinx/lfun/eat_food.rst b/doc/sphinx/lfun/eat_food.rst
index 1b967ef..7613f93 100644
--- a/doc/sphinx/lfun/eat_food.rst
+++ b/doc/sphinx/lfun/eat_food.rst
@@ -78,12 +78,9 @@
                   "dem Keks herum und fuehlst Dich gleich viel besser.", 78));
 
       // alle Lebewesen im Raum bekommen das auch mit
-      foreach(object ob:
-              (filter(all_inventory(environment(this_player())), #'living) -
-               ({this_player()})))
-        ob->ReceiveMsg(this_player()->Name()+" knuspert einen Keks weg.",
-                       MT_LOOK|MT_LISTEN,
-                       MA_EAT);
+      tell_room(environment(this_player()), 
+          this_player()->Name()+" knuspert einen Keks weg.\n", 
+          ({this_player()}));
 
       // Rassenabhaengige Heilung: Sofort oder in Schritten
       // Tragbare Heilungen sollten auch eher buffer_hp/_sp benutzen.
