diff --git a/doc/lfun/PreventMove b/doc/lfun/PreventMove
index 798ee0b..920372d 100644
--- a/doc/lfun/PreventMove
+++ b/doc/lfun/PreventMove
@@ -1,81 +1,109 @@
+
+PreventMove()
+*************
+
+
 PreventInsert()
+===============
 
-FUNKTION:
-     protected int PreventMove(object dest, object oldenv, int method);
 
-DEFINIERT IN:
-     /std/thing/moving.c
-     /std/living/moving.c
-     /std/player/moving.c
+FUNKTION
+========
 
-ARGUMENTE:
-     dest
-          Das Ziel des Moves
-     oldenv
-          Das (Noch-)Environment des Objekts
-     method
-          Die Move-Methode(n), mit der/denen bewegt werden soll
+   protected int PreventMove(object dest, object oldenv, int method);
 
-BESCHREIBUNG:
-     Mit dieser Funktion prueft ein Objekt, ob es von 'oldenv' nach 'dest'
-     bewegt werden mag. Dabei wird 'method' beruecksichtigt (z.B. schaltet
-     M_NOCHECK die meisten Pruefungen ab).
-     Bei Gegenstaenden wird z.B. P_NODROP, P_NOGET, das Gewicht, ob das Ziel
-     das Objekt aufnehmen will (MayAddWeight(), PreventInsert) oder auch
-     PreventLeave() geprueft.
-     Bei Lebewesen wird z.B. P_NO_TPORT in 'dest' und 'oldenv' und
-     PreventLeaveLiving/PreventInsertLiving() ausgewertet.
-     Bei Spielern wird auch noch getestet, ob method M_GO oder M_TPORT
-     enthaelt und ob das Ziel nur von Testspielern betreten werden kann.
 
-RUeCKGABEWERT:
-     0, wenn das Objekt bewegt werden darf.
-     Wenn es nicht bewegt werden darf, sind als Rueckgabewerte die in
-     /sys/moving.h definierten Move-Fehlerwerte zulaessig (s. move()). Sollte
-     hier ein ungueltiger Fehlerwert zurueckgegeben werden, wird das move()
-     ebenfalls abgebrochen und ME_DONT_WANT_TO_BE_MOVED zurueckgeben.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Diese Funktion kann ueberschrieben, um feinere Kontrolle ueber die
-     Bewegungen des Objekt zu haben. Dabei aber bitte einige Dinge beachten:
-     1. Denkt daran, ggf. M_NOCHECK zu beruecksichtigen und und eure
-     Pruefungen nur zu machen, wenn es nicht in method vorkommt.
-     2. GANZ WICHTIG: Wenn ihr mit euren Pruefungen fertig sein und das Objekt
-     bewegt werden duerfte, die geerbten Pruefungen noch testen, also _IMMER_
-     das geerbte PreventMove() noch aufrufen und dessen Wert
-     zurueckgeben/beruecksichtigen, da sonst Pruefungen des Gewichts etc. 
-     nicht funktionieren oder bei Lebewesen die Prevent*() im Environment 
-     nicht gerufen werden!
-     3. Die Funktion ist nur objektintern zu verwenden, Call-Other von aussen
-     sind nicht moeglich, beim Ueberschreiben 'protected' nicht vergessen.
-     4. Nochmal: Geerbtes PreventMove() _NICHT VERGESSEN_!
+   /std/thing/moving.c
+   /std/living/moving.c
+   /std/player/moving.c
 
-BEISPIELE:
-     Ein Objekt, was nur im Sternenlicht aufgenommen werden kann (warum
-     auch immer):
 
-     protected int PreventMove(object dest, object oldenv, int method) {
-       if ( (method & M_NOCHECK) ) {
-           // wenn mit M_NOCHECK bewegt, ist das Sternenlicht egal, nur
-           // geerbtes PreventMove() beruecksichten:
-           return ::PreventMove(dest, oldenv, method);
-       }
-       else if ( method & M_GET) {
-           // wenn es aufgenommen werden soll: nach Sternenlicht im Raum
-           // gucken:
-           if (objectp(dest) && 
-               (dest->QueryProp(P_LIGHT_TYPE) != LT_STARS))
-               return ME_CANT_BE_TAKEN;
-       }
-       // Fall-through:
-       return ::PreventMove(dest, oldenv, method);
+ARGUMENTE
+=========
+
+   dest
+        Das Ziel des Moves
+   oldenv
+        Das (Noch-)Environment des Objekts
+   method
+        Die Move-Methode(n), mit der/denen bewegt werden soll
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion prueft ein Objekt, ob es von 'oldenv' nach 'dest'
+   bewegt werden mag. Dabei wird 'method' beruecksichtigt (z.B. schaltet
+   M_NOCHECK die meisten Pruefungen ab).
+   Bei Gegenstaenden wird z.B. P_NODROP, P_NOGET, das Gewicht, ob das Ziel
+   das Objekt aufnehmen will (MayAddWeight(), PreventInsert) oder auch
+   PreventLeave() geprueft.
+   Bei Lebewesen wird z.B. P_NO_TPORT in 'dest' und 'oldenv' und
+   PreventLeaveLiving/PreventInsertLiving() ausgewertet.
+   Bei Spielern wird auch noch getestet, ob method M_GO oder M_TPORT
+   enthaelt und ob das Ziel nur von Testspielern betreten werden kann.
+
+
+RUeCKGABEWERT
+=============
+
+   0, wenn das Objekt bewegt werden darf.
+   Wenn es nicht bewegt werden darf, sind als Rueckgabewerte die in
+   /sys/moving.h definierten Move-Fehlerwerte zulaessig (s. move()). Sollte
+   hier ein ungueltiger Fehlerwert zurueckgegeben werden, wird das move()
+   ebenfalls abgebrochen und ME_DONT_WANT_TO_BE_MOVED zurueckgeben.
+
+
+BEMERKUNGEN
+===========
+
+   Diese Funktion kann ueberschrieben, um feinere Kontrolle ueber die
+   Bewegungen des Objekt zu haben. Dabei aber bitte einige Dinge beachten:
+   1. Denkt daran, ggf. M_NOCHECK zu beruecksichtigen und und eure
+   Pruefungen nur zu machen, wenn es nicht in method vorkommt.
+   2. GANZ WICHTIG: Wenn ihr mit euren Pruefungen fertig sein und das Objekt
+   bewegt werden duerfte, die geerbten Pruefungen noch testen, also _IMMER_
+   das geerbte PreventMove() noch aufrufen und dessen Wert
+   zurueckgeben/beruecksichtigen, da sonst Pruefungen des Gewichts etc.
+   nicht funktionieren oder bei Lebewesen die Prevent*() im Environment
+   nicht gerufen werden!
+   3. Die Funktion ist nur objektintern zu verwenden, Call-Other von aussen
+   sind nicht moeglich, beim Ueberschreiben 'protected' nicht vergessen.
+   4. Nochmal: Geerbtes PreventMove() _NICHT VERGESSEN_!
+
+
+BEISPIELE
+=========
+
+   Ein Objekt, was nur im Sternenlicht aufgenommen werden kann (warum
+   auch immer):
+
+   protected int PreventMove(object dest, object oldenv, int method) {
+     if ( (method & M_NOCHECK) ) {
+         // wenn mit M_NOCHECK bewegt, ist das Sternenlicht egal, nur
+         // geerbtes PreventMove() beruecksichten:
+         return ::PreventMove(dest, oldenv, method);
      }
+     else if ( method & M_GET) {
+         // wenn es aufgenommen werden soll: nach Sternenlicht im Raum
+         // gucken:
+         if (objectp(dest) &&
+             (dest->QueryProp(P_LIGHT_TYPE) != LT_STARS))
+             return ME_CANT_BE_TAKEN;
+     }
+     // Fall-through:
+     return ::PreventMove(dest, oldenv, method);
+   }
 
 
-SIEHE AUCH:
-     PreventLeave(), NotifyInsert(), NotifyLeave(), MayAddObject(),
-     PreventInsertLiving(), PreventLeaveLiving(), NotifyMove(),
-     PreventMove(), MayAddWeight(), move(), /std/container/restrictions.c
+SIEHE AUCH
+==========
 
-----------------------------------------------------------------------------
+   PreventLeave(), NotifyInsert(), NotifyLeave(), MayAddObject(),
+   PreventInsertLiving(), PreventLeaveLiving(), NotifyMove(),
+   PreventMove(), MayAddWeight(), move(), /std/container/restrictions.c
+
 Last modified: 04.08.2007, Zesstra
