diff --git a/doc/lfun/PresentRows b/doc/lfun/PresentRows
index e8c854a..37e3ab8 100644
--- a/doc/lfun/PresentRows
+++ b/doc/lfun/PresentRows
@@ -1,88 +1,120 @@
 
 PresentRows()
+*************
 
 
-FUNKTION:
-    mixed *PresentRows(object env);
+FUNKTION
+========
 
-DEFINIERT IN:
-    TEAM_OBJECT (s. <living/team.h>)
+   mixed *PresentRows(object env);
 
-ARGUMENTE:
-    object env
-        Das Environment des gewuenschten Objektes.
 
-BESCHREIBUNG:
-    Mit dieser Funktion bekommt man die aktuellen Teamreihen, die im Argument
-    env anwesend sind, des Teams zurueckgegeben. Ist env kein Objekt, so
-    wird environment(this_player()) als solches angenommen.
+DEFINIERT IN
+============
 
-RUECKGABEWERT:
-    Es wird ein mixed-Array zurueckgegeben, dabei sind die einzelnen Reihen
-    selbst wiederum Arrays mit den Spielerobjekten.
+   TEAM_OBJECT (s. <living/team.h>)
 
-BEISPIEL:
 
-    Ein NPC im Kampf laesst eine Feuerwalze auf ein Team los, welche aber nur
-    Spieler in der ersten und zweiten Teamreihe Schaden zufuegen soll.
+ARGUMENTE
+=========
 
-    void Attack( object enemy )
-    {
-     ...
+   object env
+       Das Environment des gewuenschten Objektes.
 
-     object team = enemy->QueryProp(P_TEAM);
 
-     if ( objectp(team) )
-      {
-       mixed teamrows = team->PresentRows(enemy);
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion bekommt man die aktuellen Teamreihen, die im Argument
+   env anwesend sind, des Teams zurueckgegeben. Ist env kein Objekt, so
+   wird environment(this_player()) als solches angenommen.
+
+
+RUECKGABEWERT
+=============
+
+   Es wird ein mixed-Array zurueckgegeben, dabei sind die einzelnen Reihen
+   selbst wiederum Arrays mit den Spielerobjekten.
+
+
+BEISPIEL
+========
+
+   Ein NPC im Kampf laesst eine Feuerwalze auf ein Team los, welche aber nur
+   Spieler in der ersten und zweiten Teamreihe Schaden zufuegen soll.
+
+   void Attack( object enemy )
+   {
+    ...
+
+    object team = enemy->QueryProp(P_TEAM);
+
+    if ( objectp(team) )
+     {
+      mixed teamrows = team->PresentRows(enemy);
 
 //  Inhalt von "teamrows" zu diesem Zeitpunkt:
 
 //  ({ ({[/dwarf:hauweg]}),({}),({[/elf:spitzohr]}),({}),({}),({}) })
 
-//  In der Umgebung von Zwerg Hauweg steht also noch Elf Spitzohr, und zwar
-//  in der dritten Teamreihe (der hat Glueck gehabt).
-//  Wenn dem Team noch mehr Spieler angehoeren, befinden sie sich gerade
-//  nicht in der Umgebung (sprich im selben Raum) wie Hauweg.
+//  In der Umgebung von Zwerg Hauweg steht also noch Elf Spitzohr, und
+zwar //  in der dritten Teamreihe (der hat Glueck gehabt). //  Wenn
+dem Team noch mehr Spieler angehoeren, befinden sie sich gerade //
+nicht in der Umgebung (sprich im selben Raum) wie Hauweg.
 
-       foreach ( i : 2 )
-        {
-         foreach ( object pl : teamrows[i] )
-          {
-           tell_object(pl,"Der Feuerteufel laesst eine Feuerwalze auf Dich "
-               "und Dein Team los.\n");
+            foreach ( i : 2 )
+               {
+                  foreach ( object pl : teamrows[i] )
+                     {
+                        tell_object(pl,"Der Feuerteufel laesst eine
+                        Feuerwalze auf Dich "
+                           "und Dein Team los.n");
 
-           pl->Defend(200+random(200),({DT_FIRE}),([SP_SHOW_DAMAGE:1]),TO);
-          }
-        }
-      }
-     else
-      {
-       tell_object(enemy,"Der Feuerteufel laesst eine Feuerwalze auf Dich "
-           "los.\n");
+                        pl->Defend(200+random(200),({DT_FIRE}),([SP_S
+                        HOW_DAMAGE:1]),TO);
 
-       enemy->Defend(200+random(200),({DT_FIRE}),([SP_SHOW_DAMAGE:1]),TO);
-      }
+                     }
 
-     ...
-    }
+               }
 
-BEMERKUNG:
-    Man beachte, dass das erste Argument (also Argument 0) die erste
-    Teamreihe ist.
+         }
 
-SIEHE AUCH:
-        Uebersicht: teamkampf
-        Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
-                    P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
-                    P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
-        Bewegung:   IsTeamMove, TeamFlee
-        Mitglieder: IsTeamLeader, TeamMembers
-        Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
-                    SelectNearEnemy, SelectFarEnemy
-        Positionen: PresentPosition, PresentEnemyRows, PresentTeamPosition,
-                    SwapRows
-        Sonstiges:  TeamPrefix, teamkampf_intern
+      else
+         {
+            tell_object(enemy,"Der Feuerteufel laesst eine Feuerwalze
+            auf Dich "
+               "los.n");
 
-----------------------------------------------------------------------------
+            enemy->Defend(200+random(200),({DT_FIRE}),([SP_SHOW_DAMAG
+            E:1]),TO);
+
+         }
+
+      ...
+
+   }
+
+
+BEMERKUNG
+=========
+
+   Man beachte, dass das erste Argument (also Argument 0) die erste
+   Teamreihe ist.
+
+
+SIEHE AUCH
+==========
+
+   Uebersicht: teamkampf
+   Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
+               P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
+               P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
+   Bewegung:   IsTeamMove, TeamFlee
+   Mitglieder: IsTeamLeader, TeamMembers
+   Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
+               SelectNearEnemy, SelectFarEnemy
+   Positionen: PresentPosition, PresentEnemyRows, PresentTeamPosition,
+               SwapRows
+   Sonstiges:  TeamPrefix, teamkampf_intern
+
 Last modified: 16-08-2010, Gabylon
