diff --git a/doc/lfun/NotifyMove b/doc/lfun/NotifyMove
index 9fe1861..18261f8 100644
--- a/doc/lfun/NotifyMove
+++ b/doc/lfun/NotifyMove
@@ -1,58 +1,83 @@
 
-FUNKTION:
-     protected void NotifyMove(object dest, object oldenv, int method);
-
-DEFINIERT IN:
-     /std/thing/moving.c
-     /std/living/moving.c
-     /std/player/moving.c
-
-ARGUMENTE:
-     dest
-          Das Ziel des Moves bzw. das jetzt aktuelle Environment
-     oldenv
-          Das alte Environment des Objekts
-     method
-          Die Move-Methode(n), mit der/denen bewegt wurde.
-
-BESCHREIBUNG:
-     Diese Funktion wird vom move() im Objekt gerufen, sobald die Bewegung im
-     wesentlichen abgeschlossen ist. Sie soll einerseits das Objekt ueber eine
-     stattgefundene Bewegung informieren, aber auch einige Dinge erledigen,
-     die bei der Bewegung stattfinden muessen (bei Livings z.B. das Team
-     nachholen).
-
-RUeCKGABEWERT:
-     keiner
-
-BEMERKUNGEN:
-     Diese Funktion kann ueberschrieben werden, damit das Objekt Bewegungen
-     mitgekommt, ohne das move() selber zu ueberschreiben oder einen Move-Hook
-     zu setzen. Dabei aber bitte unbedingt beachten:
-     Das geerbte NotifyMove() _MUSS IN JEDEM FALL_ mit aufgerufen werden!
-     Solltet ihr das vergessen, werden eure Objekte buggen. ;-)
-     Die Funktion darf nur objektintern verwendet werden. Beim Ueberschreiben
-     das 'protected' nicht vergessen!
-
-BEISPIELE:
-     Eine Bombe, die in Seherhaustruhen explodiert:
-
-     protected void NotifyMove(object dest, object oldenv, int method) {
-         ::NotifyMove(dest, oldenv, method); // WICHTIG!
-         if (objectp(dest) &&
-             load_name(dest) == "/d/seher/haeuser/truhe") {
-             if (find_call_out("explodiere")==-1)
-                 call_out("explodiere",900);
-         }
-         else
-             remove_call_out("explodiere");
-     }
+NotifyMove()
+************
 
 
-SIEHE AUCH:
-     PreventLeave(), NotifyInsert(), NotifyLeave(), MayAddObject(),
-     PreventInsertLiving(), PreventLeaveLiving(), NotifyMove(),
-     PreventMove(), MayAddWeight(), move(), /std/container/restrictions.c
+FUNKTION
+========
 
-----------------------------------------------------------------------------
+   protected void NotifyMove(object dest, object oldenv, int method);
+
+
+DEFINIERT IN
+============
+
+   /std/thing/moving.c
+   /std/living/moving.c
+   /std/player/moving.c
+
+
+ARGUMENTE
+=========
+
+   dest
+        Das Ziel des Moves bzw. das jetzt aktuelle Environment
+   oldenv
+        Das alte Environment des Objekts
+   method
+        Die Move-Methode(n), mit der/denen bewegt wurde.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird vom move() im Objekt gerufen, sobald die Bewegung im
+   wesentlichen abgeschlossen ist. Sie soll einerseits das Objekt ueber eine
+   stattgefundene Bewegung informieren, aber auch einige Dinge erledigen,
+   die bei der Bewegung stattfinden muessen (bei Livings z.B. das Team
+   nachholen).
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Diese Funktion kann ueberschrieben werden, damit das Objekt Bewegungen
+   mitgekommt, ohne das move() selber zu ueberschreiben oder einen Move-Hook
+   zu setzen. Dabei aber bitte unbedingt beachten:
+   Das geerbte NotifyMove() _MUSS IN JEDEM FALL_ mit aufgerufen werden!
+   Solltet ihr das vergessen, werden eure Objekte buggen. ;-)
+   Die Funktion darf nur objektintern verwendet werden. Beim Ueberschreiben
+   das 'protected' nicht vergessen!
+
+
+BEISPIELE
+=========
+
+   Eine Bombe, die in Seherhaustruhen explodiert:
+
+   protected void NotifyMove(object dest, object oldenv, int method) {
+       ::NotifyMove(dest, oldenv, method); // WICHTIG!
+       if (objectp(dest) &&
+           load_name(dest) == "/d/seher/haeuser/truhe") {
+           if (find_call_out("explodiere")==-1)
+               call_out("explodiere",900);
+       }
+       else
+           remove_call_out("explodiere");
+   }
+
+
+SIEHE AUCH
+==========
+
+   PreventLeave(), NotifyInsert(), NotifyLeave(), MayAddObject(),
+   PreventInsertLiving(), PreventLeaveLiving(), NotifyMove(),
+   PreventMove(), MayAddWeight(), move(), /std/container/restrictions.c
+
 Last modified: 04.08.2007, Zesstra
