diff --git a/doc/lfun/defuel_food b/doc/lfun/defuel_food
index 1e89110..380c2bc 100644
--- a/doc/lfun/defuel_food
+++ b/doc/lfun/defuel_food
@@ -1,85 +1,113 @@
-FUNKTION:
-    int defuel_food();
 
-DEFINIERT IN:
-    /std/living/life.c
+defuel_food()
+*************
 
-ARGUMENTE:
-    Keine.
 
-BESCHREIBUNG:
-    Enttankt den Spieler automatisch um einen gewissen Essens-Wert,
-    sofern der Spieler ueber einer bestimmten Enttank-Grenze liegt und seit
-    seinem letzten Enttanken eine gewisse Zeit vergangen ist.
-    Alle diese Werte sind rassenabhaengig.
+FUNKTION
+========
 
-    Es ist also NICHT moeglich, Einfluss auf die Menge des Enttankens
-    zu nehmen. Das ist hier so gewollt.
+   int defuel_food();
 
-    Hat der Spieler mindestens 
-    * P_DEFUEL_LIMIT_FOOD in P_FOOD
-    kann er alle
-    * P_DEFUEL_TIME_FOOD
-    um
-    * (x=P_DRINK*P_DEFUEL_AMOUNT_FOOD/2) + random(x)
-      (also um (50 bis 100 * P_FOOD) Prozent)
-    enttanken.
 
-RUECKGABEWERTE:
-    DEFUEL_TOO_SOON: -2, wenn Enttankintervallzeiten zu kurz.
-    DEFUEL_TOO_LOW:  -1, wenn Enttankgrenze noch nicht erreicht.
-    NO_DEFUEL:        0, wenn Enttanken nicht noetig war (Spieler war leer)
-    >0, wenn Erfolg (enttankte Wert wird zurueckgegeben).
+DEFINIERT IN
+============
 
-    (Konstanten kommen aus /sys/defuel.h)
+   /std/living/life.c
 
-BEMERKUNG:
-    Bitte defuel_food() benutzen und nicht P_FOOD oder P_MAX_FOOD des
-    Spielers manipulieren!
 
-    Achtung: Nur Toiletten sollten diese Funktion im Spieler aufrufen!
+ARGUMENTE
+=========
 
-BEISPIEL:
-    int action_enttanken() {
-      string msg;
-      int val = this_player()->defuel_food();
+   Keine.
 
-      switch (val) {
-        case DEFUEL_TOO_SOON:
-          msg = "Du warst doch erst vor kurzem auf Toilette...";
-          break;
-        case DEFUEL_TOO_LOW:
-          msg = "Du versuchst Dich zu entleeren, aber irgendwie will "
-                "das nicht so recht klappen.";
-          break;
-        case NO_DEFUEL:
-          msg = "Du hast seit langem nichts gegessen, wie willst Du dann "
-                "was loswerden koennen?";
-          break;
-        default:
-          string qualifier;
-          int fuzzypercent = (90+random(20)) *
-                             val/this_player()->QueryProp(P_MAX_FOOD);
-          switch(fuzzypercent) {
-            case 0..50:  qualifier = "etwas"; break;
-            case 51..75: qualifier = "enorm"; break;
-            default:     qualifier = "unglaublich"; break;
-          }
-          msg = "Du entleerst Dich "+qualifier"+. Puh, das tat gut!";
-          break;
-      }
-      tell_object(this_player(), break_string(msg, 78));
-      return 1;
-    }
 
-SIEHE AUCH:
-     Aehnlich:  defuel_drink
-     Tanken:    consume, drink_alcohol, drink_soft, eat_food
-     Heilung:   heal_self, restore_spell_points, restore_hit_points, 
-                buffer_hp, buffer_sp
-     Timing:    check_and_update_timed_key
-     Props:     P_DRINK, P_FOOD, P_ALCOHOL, P_SP, P_HP,
-                P_DEFUEL_TIME_FOOD, P_DEFUEL_TIME_DRINK
-     Konzepte:  heilung, enttanken, food
+BESCHREIBUNG
+============
+
+   Enttankt den Spieler automatisch um einen gewissen Essens-Wert,
+   sofern der Spieler ueber einer bestimmten Enttank-Grenze liegt und seit
+   seinem letzten Enttanken eine gewisse Zeit vergangen ist.
+   Alle diese Werte sind rassenabhaengig.
+
+   Es ist also NICHT moeglich, Einfluss auf die Menge des Enttankens
+   zu nehmen. Das ist hier so gewollt.
+
+   Hat der Spieler mindestens
+   * P_DEFUEL_LIMIT_FOOD in P_FOOD
+   kann er alle
+   * P_DEFUEL_TIME_FOOD
+   um
+   * (x=P_DRINK*P_DEFUEL_AMOUNT_FOOD/2) + random(x)
+     (also um (50 bis 100 * P_FOOD) Prozent)
+   enttanken.
+
+
+RUECKGABEWERTE
+==============
+
+   DEFUEL_TOO_SOON: -2, wenn Enttankintervallzeiten zu kurz.
+   DEFUEL_TOO_LOW:  -1, wenn Enttankgrenze noch nicht erreicht.
+   NO_DEFUEL:        0, wenn Enttanken nicht noetig war (Spieler war leer)
+   >0, wenn Erfolg (enttankte Wert wird zurueckgegeben).
+
+   (Konstanten kommen aus /sys/defuel.h)
+
+
+BEMERKUNG
+=========
+
+   Bitte defuel_food() benutzen und nicht P_FOOD oder P_MAX_FOOD des
+   Spielers manipulieren!
+
+   Achtung: Nur Toiletten sollten diese Funktion im Spieler aufrufen!
+
+
+BEISPIEL
+========
+
+   int action_enttanken() {
+     string msg;
+     int val = this_player()->defuel_food();
+
+     switch (val) {
+       case DEFUEL_TOO_SOON:
+         msg = "Du warst doch erst vor kurzem auf Toilette...";
+         break;
+       case DEFUEL_TOO_LOW:
+         msg = "Du versuchst Dich zu entleeren, aber irgendwie will "
+               "das nicht so recht klappen.";
+         break;
+       case NO_DEFUEL:
+         msg = "Du hast seit langem nichts gegessen, wie willst Du dann "
+               "was loswerden koennen?";
+         break;
+       default:
+         string qualifier;
+         int fuzzypercent = (90+random(20)) *
+                            val/this_player()->QueryProp(P_MAX_FOOD);
+         switch(fuzzypercent) {
+           case 0..50:  qualifier = "etwas"; break;
+           case 51..75: qualifier = "enorm"; break;
+           default:     qualifier = "unglaublich"; break;
+         }
+         msg = "Du entleerst Dich "+qualifier"+. Puh, das tat gut!";
+         break;
+     }
+     tell_object(this_player(), break_string(msg, 78));
+     return 1;
+   }
+
+
+SIEHE AUCH
+==========
+
+   Aehnlich:  defuel_drink
+   Tanken:    consume, drink_alcohol, drink_soft, eat_food
+   Heilung:   heal_self, restore_spell_points, restore_hit_points,
+              buffer_hp, buffer_sp
+   Timing:    check_and_update_timed_key
+   Props:     P_DRINK, P_FOOD, P_ALCOHOL, P_SP, P_HP,
+              P_DEFUEL_TIME_FOOD, P_DEFUEL_TIME_DRINK
+   Konzepte:  heilung, enttanken, food
 
 9. August 2015 Gloinson
