diff --git a/doc/lfun/GetPhiolenInfos b/doc/lfun/GetPhiolenInfos
index 604d697..ccd0f68 100644
--- a/doc/lfun/GetPhiolenInfos
+++ b/doc/lfun/GetPhiolenInfos
@@ -1,97 +1,122 @@
+
+GetPhiolenInfos()
+*****************
+
+
 GetPhiolenInfos(L)
+==================
 
-FUNKTION:
-     mixed *GetPhiolenInfos();
 
-BESCHREIBUNG:
+FUNKTION
+========
 
-     Wird von der Phiole aufgerufen:
-     /d/inseln/miril/sternquest/obj/phiole.c
-     Der Raum muss /p/service/miril/phiole.h includen.     
-     Mit der Phiole kann ein Spieler durch Tueren schauen. Bei Tueren, die
-     vom Doormaster (/obj/doormaster.c) verwaltet werden, klappt dies auto-
-     matisch. Moechte man das verbieten, so muss die Funktion 
-     GetPhiolenInfos() im entsprechenden Raum definiert sein.
-     Befinden sich Tueren im Raum, die nicht vom Doormaster verwaltet werden,
-     aber bei denen die Phiole funktionieren soll, so kann dies ebenfalls
-     mittels GetPhiolenInfos() geschehen.
-     
-     Funktion der Phiole:
-     Sie projiziert ein Bild dessen, was hinter der Tuer liegt auf die Tuer.
-     Steht die Tuer offen, so sieht der Spieler nur eine Wand, denn es wird
-     gezeigt, was hinter dieser Tuer ist.
-     
-     Ist die Tuer jedoch ge- oder verschlossen, so sieht er auf der Tuer
-     die Langbeschreibung des Raumes, der hinter der Tuer liegt, sowie das
-     Inventar dieses Raumes. 
+   mixed *GetPhiolenInfos();
 
-     Aufbau der Funktion:
-     mixed *GetPhiolenInfos() {
-       return ({
-                ([
-                  PHIOLE_DEST:     string,       
-                  PHIOLE_IDS:      *string,             
-                  PHIOLE_GENDER:   int,           
-                  PHIOLE_STATUS:   int,     (optional)
-                  PHIOLE_LONG:     string,  (optional)
-                  PHIOLE_VERBOTEN: int      (optional)
-                ]),
-                ([
-                  ... Naechste Tuer
-                ])
-              });
-     }
-     
-     PHIOLE_DEST      Dateiname des Zielraums
-     PHIOLE_IDS	      Array der Strings, mit denen sich die Tuer 
-                      ansprechen laesst
-     PHIOLE_GENDER    Geschlecht der Tuer
-     PHIOLE_STATUS    aktueller Status der Tuer:
-                      0 geschlossen/verschlossen, 1 offen
-                      Bei Tueren, die mit NewDoor erzeugt wurden
-                      nicht setzen
-     PHIOLE_LONG      Beschreibung des Zielraums (z.B. bei einer 
-                      Faketuer)
-     PHIOLE_VERBOTEN  0 erlaubt, 1 verboten
 
-BEISPIEL:
-     Ein Raum enthaelt eine Holztuer und ein Portal. Erstere ist mittels 
-     NewDoor(...) gebaut, soll aber nicht zu durchschauen sein, letztere ist 
-     selbstgestrickt. Die erste fuehrt in den Workroom von Jof, die zweite
-     ist nur ein Fake und immer geschlossen. Bei vom Doormaster erzeugten 
-     Tueren sollte PHIOLE_STATUS nicht gesetzt werden, da dies automatisch
-     abgefragt wird.
-     
-     #include "/p/service/miril/phiole.h"
-     ...
-     mixed *GetPhiolenInfos(){
-       return ({
-                ([
-                  PHIOLE_DEST:"/players/jof/workroom",
-                  PHIOLE_IDS:({"holztuer"}),           
-                  PHIOLE_GENDER:FEMALE,                    
-                  PHIOLE_VERBOTEN:1          
-                ]),
-                ([
-                  PHIOLE_DEST:0,
-                  PHIOLE_IDS:({"portal"}),           
-                  PHIOLE_GENDER:NEUTER, 
-                  PHIOLE_STATUS:0,
-                  PHIOLE_LONG:"Du stehst in einer riesigen Schatzkammer und "
-                              "kannst Dein Glueck kaum fassen. Nun brauchst "
-                              "Du nur noch zuzugreifen und bist der reichste "
-                              "Bewohner des MorgenGrauen.",
-                  PHIOLE_VERBOTEN:0
-                ])
-              });
-      }
-      Mittels PHIOLE_LONG laesst sich auch bei erlaubten und verbotenen Tueren 
-      einstellen, was der Spieler statt der normalen Raumbeschreibung und den 
-      im Raum befindlichen Objekten sehen soll. Das koennte z.B. sinnvoll 
-      sein, falls der Spieler zwar die Raumbeschreibung, aber nicht den fiesen 
-      Drachen sehen soll, der sich ebenfalls im Raum befindet.
-      
-SIEHE AUCH:
-      NewDoor(), QueryDoorStatus(), SetDoorStatus(), QueryAllDoors()
------------------------------------------------------------------------------
+BESCHREIBUNG
+============
+
+   Wird von der Phiole aufgerufen:
+   /d/inseln/miril/sternquest/obj/phiole.c
+   Der Raum muss /p/service/miril/phiole.h includen.
+   Mit der Phiole kann ein Spieler durch Tueren schauen. Bei Tueren, die
+   vom Doormaster (/obj/doormaster.c) verwaltet werden, klappt dies auto-
+   matisch. Moechte man das verbieten, so muss die Funktion
+   GetPhiolenInfos() im entsprechenden Raum definiert sein.
+   Befinden sich Tueren im Raum, die nicht vom Doormaster verwaltet werden,
+   aber bei denen die Phiole funktionieren soll, so kann dies ebenfalls
+   mittels GetPhiolenInfos() geschehen.
+
+
+
+   Funktion der Phiole:
+   Sie projiziert ein Bild dessen, was hinter der Tuer liegt auf die Tuer.
+   Steht die Tuer offen, so sieht der Spieler nur eine Wand, denn es wird
+   gezeigt, was hinter dieser Tuer ist.
+
+
+
+   Ist die Tuer jedoch ge- oder verschlossen, so sieht er auf der Tuer
+   die Langbeschreibung des Raumes, der hinter der Tuer liegt, sowie das
+   Inventar dieses Raumes.
+
+   Aufbau der Funktion:
+   mixed *GetPhiolenInfos() {
+     return ({
+              ([
+                PHIOLE_DEST:     string,
+                PHIOLE_IDS:      *string,
+                PHIOLE_GENDER:   int,
+                PHIOLE_STATUS:   int,     (optional)
+                PHIOLE_LONG:     string,  (optional)
+                PHIOLE_VERBOTEN: int      (optional)
+              ]),
+              ([
+                ... Naechste Tuer
+              ])
+            });
+   }
+
+
+
+   PHIOLE_DEST      Dateiname des Zielraums
+   PHIOLE_IDS       Array der Strings, mit denen sich die Tuer
+                    ansprechen laesst
+   PHIOLE_GENDER    Geschlecht der Tuer
+   PHIOLE_STATUS    aktueller Status der Tuer:
+                    0 geschlossen/verschlossen, 1 offen
+                    Bei Tueren, die mit NewDoor erzeugt wurden
+                    nicht setzen
+   PHIOLE_LONG      Beschreibung des Zielraums (z.B. bei einer
+                    Faketuer)
+   PHIOLE_VERBOTEN  0 erlaubt, 1 verboten
+
+
+BEISPIEL
+========
+
+   Ein Raum enthaelt eine Holztuer und ein Portal. Erstere ist mittels
+   NewDoor(...) gebaut, soll aber nicht zu durchschauen sein, letztere ist
+   selbstgestrickt. Die erste fuehrt in den Workroom von Jof, die zweite
+   ist nur ein Fake und immer geschlossen. Bei vom Doormaster erzeugten
+   Tueren sollte PHIOLE_STATUS nicht gesetzt werden, da dies automatisch
+   abgefragt wird.
+
+
+
+   #include "/p/service/miril/phiole.h"
+   ...
+   mixed *GetPhiolenInfos(){
+     return ({
+              ([
+                PHIOLE_DEST:"/players/jof/workroom",
+                PHIOLE_IDS:({"holztuer"}),
+                PHIOLE_GENDER:FEMALE,
+                PHIOLE_VERBOTEN:1
+              ]),
+              ([
+                PHIOLE_DEST:0,
+                PHIOLE_IDS:({"portal"}),
+                PHIOLE_GENDER:NEUTER,
+                PHIOLE_STATUS:0,
+                PHIOLE_LONG:"Du stehst in einer riesigen Schatzkammer und "
+                            "kannst Dein Glueck kaum fassen. Nun brauchst "
+                            "Du nur noch zuzugreifen und bist der reichste "
+                            "Bewohner des MorgenGrauen.",
+                PHIOLE_VERBOTEN:0
+              ])
+            });
+    }
+    Mittels PHIOLE_LONG laesst sich auch bei erlaubten und verbotenen Tueren
+    einstellen, was der Spieler statt der normalen Raumbeschreibung und den
+    im Raum befindlichen Objekten sehen soll. Das koennte z.B. sinnvoll
+    sein, falls der Spieler zwar die Raumbeschreibung, aber nicht den fiesen
+    Drachen sehen soll, der sich ebenfalls im Raum befindet.
+
+
+SIEHE AUCH
+==========
+
+   NewDoor(), QueryDoorStatus(), SetDoorStatus(), QueryAllDoors()
+
 Letzte Aenderung: Sam, 14. Jan 2006, 12:21, Miril
