diff --git a/doc/sphinx/man/lfun/int_long b/doc/sphinx/man/lfun/int_long
new file mode 100644
index 0000000..931e132
--- /dev/null
+++ b/doc/sphinx/man/lfun/int_long
@@ -0,0 +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!)
+
+
+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
