diff --git a/doc/lfun/drink_soft b/doc/lfun/drink_soft
index 4ab6e07..0f030f6 100644
--- a/doc/lfun/drink_soft
+++ b/doc/lfun/drink_soft
@@ -1,83 +1,111 @@
-FUNKTION:
-    public varargs int drink_soft(int strength, int testonly, string mytext)
 
-DEFINIERT IN:
-    /std/living/life.c
+drink_soft()
+************
 
-ARGUMENTE:
-    strength: Wird zu dem augenblicklichen Saettigungsgrad (P_DRINK) addiert.
-    testonly: Ist das Flag gesetzt, wird dem Spieler kein DRINK zugefuehrt.
-              Darf nur zum Testen der Heilstelle verwendet werden und muss
-              im normalen Betrieb auf '0' stehen!
-    mytext: Wer selber einen Text bei Misserfolg ausgeben lassen moechte,
-            darf sich hier was nettes ausdenken.
-            Achtung: Das unterdrueckt nicht die "Durst"-Meldung, die bei
-            negativem strength auftritt, wenn P_DRINK wieder 0 ist.
 
-BESCHREIBUNG:
-    Es wird geprueft, ob dem Spieler der angebene Wert "strength" auf
-    aktuelle P_DRINK addiert werden kann oder nicht. Ist dies moeglich,
-    wird es gemacht, es sei denn das testonly != 0.
+FUNKTION
+========
 
-    Sollen neben P_DRINK noch weitere Props manipuliert werden - bspw. zur
-    Heilung eines Lebewesens - bietet sich die Funktion consume() an.
+   public varargs int drink_soft(int strength, int testonly, string mytext)
 
-RUECKGABEWERT:
-     0, wenn strength + P_DRINK > P_MAX_DRINK
-    >0, wenn Erfolg
 
-BEMERKUNG:
-    drink_soft() bitte anstatt eigener Manipulationen von P_DRINK und
-    P_MAX_DRINK verwenden.
+DEFINIERT IN
+============
 
-    Achtung: Immer erst VOR einer Heilung ausfuehren und bei Erfolg heilen.
+   /std/living/life.c
 
-    Bei Heilstellen sollte eine evtl. Heilung des Spielers mit der eigens
-    dafuer eingerichteten Funktion check_and_update_timed_key realisiert
-    werden.
 
-BEISPIEL:
-    int heilstelle() {
-      if(this_player()->drink_soft(10, 0, "Du blubberst nicht ueberzeugt "
-                                   "in der Limonade. Das ist zu viel.\n")) {
-        // Platz fuer 10 "Trinken" war noch, diese sind jetzt bereits addiert
-        // Nachricht an den Spieler:
-        tell_object(this_player(), break_string("Du nimmst einen grossen "
-                    "Schluck zuckersuesse Limonade.", 78));
+ARGUMENTE
+=========
 
-        // alle anderen im Raum bekommen es ggf auch mit:
-        // 1) filter(..., #'living) ergibt die Lebewesen im Raum
-        // 2) filter_objects(..., "ReceiveMsg") ruft ReceiveMsg an jedem
-        // 3) ReceiveMsg(...) bekommt die Folgeparameter
-        filter_objects(filter(all_inventory(environment(this_player())),
-                              #'living) - ({this_player()}),
-                       "ReceiveMsg",
-                       this_player()->Name()+
-                         " trinkt einen Schluck Limonade.",
-                       MT_LOOK|MT_LISTEN,
-                       MA_DRINK);
+   strength: Wird zu dem augenblicklichen Saettigungsgrad (P_DRINK) addiert.
+   testonly: Ist das Flag gesetzt, wird dem Spieler kein DRINK zugefuehrt.
+             Darf nur zum Testen der Heilstelle verwendet werden und muss
+             im normalen Betrieb auf '0' stehen!
+   mytext: Wer selber einen Text bei Misserfolg ausgeben lassen moechte,
+           darf sich hier was nettes ausdenken.
+           Achtung: Das unterdrueckt nicht die "Durst"-Meldung, die bei
+           negativem strength auftritt, wenn P_DRINK wieder 0 ist.
 
-        // Rassenabhaengige Heilung: Sofort oder in Schritten
-        // Tragbare Heilungen sollten auch eher buffer_hp/_sp benutzen.
-        if(this_player()->QueryProp(P_REAL_RACE)=="Saufziege")
-          this_player()->heal_self(30);
-        else {
-          this_player()->buffer_hp(30,5);
-          this_player()->buffer_sp(30,5);
-        }
-      }
 
-      return 1;
+BESCHREIBUNG
+============
+
+   Es wird geprueft, ob dem Spieler der angebene Wert "strength" auf
+   aktuelle P_DRINK addiert werden kann oder nicht. Ist dies moeglich,
+   wird es gemacht, es sei denn das testonly != 0.
+
+   Sollen neben P_DRINK noch weitere Props manipuliert werden - bspw. zur
+   Heilung eines Lebewesens - bietet sich die Funktion consume() an.
+
+
+RUECKGABEWERT
+=============
+
+    0, wenn strength + P_DRINK > P_MAX_DRINK
+   >0, wenn Erfolg
+
+
+BEMERKUNG
+=========
+
+   drink_soft() bitte anstatt eigener Manipulationen von P_DRINK und
+   P_MAX_DRINK verwenden.
+
+   Achtung: Immer erst VOR einer Heilung ausfuehren und bei Erfolg heilen.
+
+   Bei Heilstellen sollte eine evtl. Heilung des Spielers mit der eigens
+   dafuer eingerichteten Funktion check_and_update_timed_key realisiert
+   werden.
+
+
+BEISPIEL
+========
+
+   int heilstelle() {
+     if(this_player()->drink_soft(10, 0, "Du blubberst nicht ueberzeugt "
+                                  "in der Limonade. Das ist zu viel.\n")) {
+       // Platz fuer 10 "Trinken" war noch, diese sind jetzt bereits addiert
+       // Nachricht an den Spieler:
+       tell_object(this_player(), break_string("Du nimmst einen grossen "
+                   "Schluck zuckersuesse Limonade.", 78));
+
+       // alle anderen im Raum bekommen es ggf auch mit:
+       // 1) filter(..., #'living) ergibt die Lebewesen im Raum
+       // 2) filter_objects(..., "ReceiveMsg") ruft ReceiveMsg an jedem
+       // 3) ReceiveMsg(...) bekommt die Folgeparameter
+       filter_objects(filter(all_inventory(environment(this_player())),
+                             #'living) - ({this_player()}),
+                      "ReceiveMsg",
+                      this_player()->Name()+
+                        " trinkt einen Schluck Limonade.",
+                      MT_LOOK|MT_LISTEN,
+                      MA_DRINK);
+
+       // Rassenabhaengige Heilung: Sofort oder in Schritten
+       // Tragbare Heilungen sollten auch eher buffer_hp/_sp benutzen.
+       if(this_player()->QueryProp(P_REAL_RACE)=="Saufziege")
+         this_player()->heal_self(30);
+       else {
+         this_player()->buffer_hp(30,5);
+         this_player()->buffer_sp(30,5);
+       }
      }
 
-SIEHE AUCH:
-     Aehnlich:  consume, drink_alcohol, eat_food
-     Heilung:   heal_self, restore_spell_points, restore_hit_points, 
-                buffer_hp, buffer_sp
-     Timing:    check_and_update_timed_key
-     Enttanken: defuel_drink, defuel_food
-     Props:     P_DRINK, P_FOOD, P_ALCOHOL, P_SP, P_HP,
-                P_DEFUEL_TIME_DRINK
-     Konzepte:  heilung, enttanken, food
+     return 1;
+    }
+
+
+SIEHE AUCH
+==========
+
+   Aehnlich:  consume, drink_alcohol, eat_food
+   Heilung:   heal_self, restore_spell_points, restore_hit_points,
+              buffer_hp, buffer_sp
+   Timing:    check_and_update_timed_key
+   Enttanken: defuel_drink, defuel_food
+   Props:     P_DRINK, P_FOOD, P_ALCOHOL, P_SP, P_HP,
+              P_DEFUEL_TIME_DRINK
+   Konzepte:  heilung, enttanken, food
 
 9. August 2015 Gloinson
