diff --git a/doc/lfun/RemoveSensitiveObject b/doc/lfun/RemoveSensitiveObject
index 5f6e0dc..0678e70 100644
--- a/doc/lfun/RemoveSensitiveObject
+++ b/doc/lfun/RemoveSensitiveObject
@@ -1,56 +1,79 @@
+
 RemoveSensitiveObject()
-FUNKTION:
-     void RemoveSensitiveObject(object ob)
+***********************
 
-DEFINIERT IN:
-     /std/container/inventory.c
-     generalizes /std/living/inventory.c
 
-ARGUMENTE:
-     ob - zu entfernendes Objekt
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Entfernt ob aus den Benachrichtigungslisten des Containers.
-     Wird von thing/moving.c im alten Environment gerufen, wenn
-     P_SENSITIVE gesetzt ist.
-     Ruft dazu RemoveSensitiveObjectFromList().
+   void RemoveSensitiveObject(object ob)
 
-BEMERKUNGEN:
-     Setzt man P_SENSITIVE nicht als Default sondern situationsabhaengig,
-     dann muss man auch RemoveSensitiveObject im Environment
-     auch selbst rufen!
 
-BEISPIEL:
-     // Fackel (inheriting lightsource)
-     void create() {
-     ...
-       SetProp(P_SENSITIVE,
-        ({({SENSITIVE_INVENTORY_TRIGGER,DT_FIRE,120})}));
-     ...
-     }
+DEFINIERT IN
+============
 
-     // wenn die Fackel geloescht wird, verliert sie ihre aktive
-     // Eigenschaft und muss das dem environment() mitteilen
-     static int extinguish(string str) {
-      int i;
-      i=::extinguish(str);
-      if(i && QueryProp(P_LIGHT)<=0) {
-       SetProp(P_SENSITIVE,0);
-       if(environment())
-        environment()->RemoveSensitiveObject(this_object());
-      }
-      return i;
-     }
+   /std/container/inventory.c
+   generalizes /std/living/inventory.c
 
-     - empfindliche Objekte wie Eiszapfen koennen jetzt wieder gefahrlos
-       in das selbe environment() bewegt werden
 
-SIEHE AUCH:
-     P_SENSITIVE
-     InsertSensitiveObject
-     insert_sensitive_inv_trigger, insert_sensitive_inv
-     P_SENSITIVE_ATTACK, P_SENSITIVE_INVENTORY, P_SENSITIVE_INVENTORY_TRIGGER
-     CheckSensitiveAttack
+ARGUMENTE
+=========
+
+   ob - zu entfernendes Objekt
+
+
+BESCHREIBUNG
+============
+
+   Entfernt ob aus den Benachrichtigungslisten des Containers.
+   Wird von thing/moving.c im alten Environment gerufen, wenn
+   P_SENSITIVE gesetzt ist.
+   Ruft dazu RemoveSensitiveObjectFromList().
+
+
+BEMERKUNGEN
+===========
+
+   Setzt man P_SENSITIVE nicht als Default sondern situationsabhaengig,
+   dann muss man auch RemoveSensitiveObject im Environment
+   auch selbst rufen!
+
+
+BEISPIEL
+========
+
+   // Fackel (inheriting lightsource)
+   void create() {
+   ...
+     SetProp(P_SENSITIVE,
+      ({({SENSITIVE_INVENTORY_TRIGGER,DT_FIRE,120})}));
+   ...
+   }
+
+   // wenn die Fackel geloescht wird, verliert sie ihre aktive
+   // Eigenschaft und muss das dem environment() mitteilen
+   static int extinguish(string str) {
+    int i;
+    i=::extinguish(str);
+    if(i && QueryProp(P_LIGHT)<=0) {
+     SetProp(P_SENSITIVE,0);
+     if(environment())
+      environment()->RemoveSensitiveObject(this_object());
+    }
+    return i;
+   }
+
+   - empfindliche Objekte wie Eiszapfen koennen jetzt wieder gefahrlos
+     in das selbe environment() bewegt werden
+
+
+SIEHE AUCH
+==========
+
+   P_SENSITIVE
+   InsertSensitiveObject
+   insert_sensitive_inv_trigger, insert_sensitive_inv
+   P_SENSITIVE_ATTACK, P_SENSITIVE_INVENTORY, P_SENSITIVE_INVENTORY_TRIGGER
+   CheckSensitiveAttack
 
 25.Apr.2001, Gloinson@MG
-
