diff --git a/doc/lfun/AddFun b/doc/lfun/AddFun
index 925b5ac..5ba6cf1 100644
--- a/doc/lfun/AddFun
+++ b/doc/lfun/AddFun
@@ -1,63 +1,85 @@
+
 AddFun()
+********
 
-FUNKTION:
-     void AddFun(string fun, int next);
 
-DEFINIERT IN:
-     /std/transport.c
+FUNKTION
+========
 
-ARGUMENTE:
-     fun
-          Name der Funktion.
-     next
-          Zeit bis zur naechsten Fahrplanstation.
+   void AddFun(string fun, int next);
 
-BESCHREIBUNG:
-     Dem Fahrplan wird der Aufruf der Funktion fun, die im Transporter
-     definiert sein muss, hinzugefuegt. Nach Aufruf der Funktion vergehen
-     next Sekunden, bis die naechste Station angefahren wird.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-BEISPIELE:
-     Wenn ein zufaellig ausgewaehlter Passagier eines Schiffes unterwegs
-     seekrank werden soll, koennte man das wie folgt realisieren:
+   /std/transport.c
 
-     create()
-     {
-       ...
 
-       AddFun("seekrank", 5);
-       ...
-     }
+ARGUMENTE
+=========
 
-     seekrank()
-     {
-       object *passagiere, opfer;
+   fun
+        Name der Funktion.
+   next
+        Zeit bis zur naechsten Fahrplanstation.
 
-       // soll nicht immer passieren
-       if (random(5))
-         return;
 
-       // Opfer auswaehlen
-       passagiere = QueryPassengers();
-       if (sizeof(passagiere))
-         opfer = passagiere[random(sizeof(passagiere))];
+BESCHREIBUNG
+============
 
-       // Und viel Spass...
-       tell_object(opfer,
-         "Du wirst seekrank! Schnell stuerzt Du zur Reling um  Dich zu\n"
-        +"uebergeben.\n");
-       tell_room(this_object(),
-         sprintf("%s ueberkommt die Seekrankheit!\n%s stuerzt an die Reling, "
-                +"um sich zu uebergeben.\n",
-                 capitalize(opfer->name(WEN)),
-                 capitalize(opfer->QueryPronoun(WER))), ({ opfer }) );
-     }
+   Dem Fahrplan wird der Aufruf der Funktion fun, die im Transporter
+   definiert sein muss, hinzugefuegt. Nach Aufruf der Funktion vergehen
+   next Sekunden, bis die naechste Station angefahren wird.
 
-SIEHE AUCH:
-     AddRoute(), AddMsg(), /std/transport.c
 
-----------------------------------------------------------------------------
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEISPIELE
+=========
+
+   Wenn ein zufaellig ausgewaehlter Passagier eines Schiffes unterwegs
+   seekrank werden soll, koennte man das wie folgt realisieren:
+
+   create()
+   {
+     ...
+
+     AddFun("seekrank", 5);
+     ...
+   }
+
+   seekrank()
+   {
+     object *passagiere, opfer;
+
+     // soll nicht immer passieren
+     if (random(5))
+       return;
+
+     // Opfer auswaehlen
+     passagiere = QueryPassengers();
+     if (sizeof(passagiere))
+       opfer = passagiere[random(sizeof(passagiere))];
+
+     // Und viel Spass...
+     tell_object(opfer,
+       "Du wirst seekrank! Schnell stuerzt Du zur Reling um  Dich zu\n"
+      +"uebergeben.\n");
+     tell_room(this_object(),
+       sprintf("%s ueberkommt die Seekrankheit!\n%s stuerzt an die Reling, "
+              +"um sich zu uebergeben.\n",
+               capitalize(opfer->name(WEN)),
+               capitalize(opfer->QueryPronoun(WER))), ({ opfer }) );
+   }
+
+
+SIEHE AUCH
+==========
+
+   AddRoute(), AddMsg(), /std/transport.c
+
 Last modified: Wed May 8 10:16:46 1996 by Wargon
