diff --git a/doc/lfun/int_long b/doc/lfun/int_long
index 7513e87..931e132 100644
--- a/doc/lfun/int_long
+++ b/doc/lfun/int_long
@@ -1,64 +1,91 @@
+
 int_long()
-FUNKTION:
-     varargs string int_long(mixed viewer, mixed viewpoint, int flags)
+**********
 
-DEFINIERT IN:
-     /std/room/description.c
 
-ARGUMENTE:
-     mixed viewer	- der Betrachter des Raumes
-     mixed viewpoint	- 0/Objekt/Array der/die Ausgangspunkt(e) des
-			  Betrachtens (und damit nicht sichtbar!)
-     int flags		- Modifikatoren fuer die Anzeige
-			  (siehe "man make_invlist", wird mit 3 verUNDet!)
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Es wird die Beschreibung des Rauminneren erstellt. Dabei wird die
-     Langbeschreibung des Raumes, die enthaltenen Objekte (exklusive
-     aller viewpoints (normalerweise nur der Betrachter)) und Ausgaenge,
-     wenn vom Viewer eingeschaltet dargestellt.
-     Falls der Raum innerhalb eines anderen Raumes liegt und selbst
-     transparent ist, wie zusaetzlich die Kurzbeschreibung des Aussen-
-     raumes angezeigt.
+   varargs string int_long(mixed viewer, mixed viewpoint, int flags)
 
-     Ist Viewer ein Magier mit eingeschaltetem Magiermodus, so wird der
-     Beschreibung der Dateiname des Raumes vorangestellt.
 
-RUeCKGABEWERT:
-     Die Langbeschreibung des Raumes von innen.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Die Trennung von viewer und viewpoint hat durchaus ihren Sinn. So ist
-     es zum Beispiel moeglich, einen Raum "mit den Augen eines Anderen" zu
-     betrachten. Dabei saehe man sich selbst, wenn man im Raum waere.
+   /std/room/description.c
 
-BEISPIELE:
-     // in diesem Raum sieht man keine Mitspieler im "schau" oder beim
-     // Betreten (vielleicht ist es zu neblig)
-     // dazu werden einfach alle Interactives zu den viewpoints addiert
-     string int_long(object viewer, mixed viewpoints, int flags) {
-      if(!pointerp(viewpoints)) viewpoints=({viewpoints});
-      return ::int_long(&viewer,
-			viewpoints+
-			filter(all_inventory(this_object()),
-				     #'interactive),
-			&flags);
-     }
 
-     string int_short(object viewer, mixed viewpoints) {
-      if(!pointerp(viewpoints)) viewpoints=({viewpoints});
-      return ::int_short(&viewer,
-			 viewpoints+
-			 filter(all_inventory(this_object()),
-				      #'interactive));
-     }
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     Aehnliches:	int_short()
-     Properties:	P_INT_LONG, P_SHORT
-			P_HIDE_EXITS, P_SHOW_EXITS
-			P_TRANSPARENT
-     Kommandokette:	make_invlist(), short()
-     Sonstiges:		P_REFERENCE_OBJECT, P_WANTS_TO_LEARN
+   mixed viewer       - der Betrachter des Raumes
+   mixed viewpoint    - 0/Objekt/Array der/die Ausgangspunkt(e) des
+                        Betrachtens (und damit nicht sichtbar!)
+   int flags          - Modifikatoren fuer die Anzeige
+                        (siehe "man make_invlist", wird mit 3 verUNDet!)
+
+
+BESCHREIBUNG
+============
+
+   Es wird die Beschreibung des Rauminneren erstellt. Dabei wird die
+   Langbeschreibung des Raumes, die enthaltenen Objekte (exklusive
+   aller viewpoints (normalerweise nur der Betrachter)) und Ausgaenge,
+   wenn vom Viewer eingeschaltet dargestellt.
+   Falls der Raum innerhalb eines anderen Raumes liegt und selbst
+   transparent ist, wie zusaetzlich die Kurzbeschreibung des Aussen-
+   raumes angezeigt.
+
+   Ist Viewer ein Magier mit eingeschaltetem Magiermodus, so wird der
+   Beschreibung der Dateiname des Raumes vorangestellt.
+
+
+RUeCKGABEWERT
+=============
+
+   Die Langbeschreibung des Raumes von innen.
+
+
+BEMERKUNGEN
+===========
+
+   Die Trennung von viewer und viewpoint hat durchaus ihren Sinn. So ist
+   es zum Beispiel moeglich, einen Raum "mit den Augen eines Anderen" zu
+   betrachten. Dabei saehe man sich selbst, wenn man im Raum waere.
+
+
+BEISPIELE
+=========
+
+   // in diesem Raum sieht man keine Mitspieler im "schau" oder beim
+   // Betreten (vielleicht ist es zu neblig)
+   // dazu werden einfach alle Interactives zu den viewpoints addiert
+   string int_long(object viewer, mixed viewpoints, int flags) {
+    if(!pointerp(viewpoints)) viewpoints=({viewpoints});
+    return ::int_long(&viewer,
+                      viewpoints+
+                      filter(all_inventory(this_object()),
+                                   #'interactive),
+                      &flags);
+   }
+
+   string int_short(object viewer, mixed viewpoints) {
+    if(!pointerp(viewpoints)) viewpoints=({viewpoints});
+    return ::int_short(&viewer,
+                       viewpoints+
+                       filter(all_inventory(this_object()),
+                                    #'interactive));
+   }
+
+
+SIEHE AUCH
+==========
+
+   Aehnliches:        int_short()
+   Properties:        P_INT_LONG, P_SHORT
+                      P_HIDE_EXITS, P_SHOW_EXITS
+                      P_TRANSPARENT
+   Kommandokette:     make_invlist(), short()
+   Sonstiges:         P_REFERENCE_OBJECT, P_WANTS_TO_LEARN
 
 11. Mai 2004 Gloinson
