diff --git a/doc/lfun/TestIgnoreSimple b/doc/lfun/TestIgnoreSimple
index 542632e..c0ec76e 100644
--- a/doc/lfun/TestIgnoreSimple
+++ b/doc/lfun/TestIgnoreSimple
@@ -1,55 +1,77 @@
+
 TestIgnoreSimple()
+******************
 
-FUNKTION:
-     public int TestIgnoreSimple(string *arg)
 
-DEFINIERT IN:
-     /std/player/comm.c
+FUNKTION
+========
 
-ARGUMENTE:
-     arg
-         Liste von Strings, die getestet werden sollen
+   public int TestIgnoreSimple(string *arg)
 
-BESCHREIBUNG:
-     TestIgnoreSimple() prueft, ob der Spieler min. einen der uebergebenen
-     Eintraege auf seiner Ignoriereliste hat.
-     Falls man mehrere Eintraege pruefen muss/moechte, ist es schneller, alle
-     Eintraege in einem zu uebergeben anstatt fuer jeden einzeln 
-     TestIgnoreSimple() aufzurufen.
 
-RUeCKGABEWERT:
-     1, falls es mindestens eine Uebereinstimmungen von arg und der
-     Ignoriere-Liste des Spielers gibt.
-     0, sonst.
+DEFINIERT IN
+============
 
-BEISPIEL:
-     if (!this_player()->TestIgnoreSimple(({"andy"})))
-       tell_object(this_player(), "Andy teilt Dir mit: Hallo!\n");
+   /std/player/comm.c
 
-     // Beispiel fuer eine Ignore-Check fuer Aktion (kratzen) fuer einen
-     // Spieler (this_player()) an einem anderen Spieler (target)
-     if (!target->TestIgnoreSimple(getuid(this_player()),
-                             getuid(this_player())+".kratz",
-                             getuid(this_player())+".kratze",
-                             ".kratz", ".kratze"}))) {
-       tell_object(target, this_player()->Name()+" kratzt dich.\n");
-       tell_object(this_player(), "Du kratzt "+target->Name()+".\n");
-     } else
-       tell_object(this_player(), target->Name()+" ignoriert dich.\n");
 
-     // allumfassender Ignorier-Check in einer Gilde (Klerus) auf
-     // eine Aktion (kurieren) fuer einen bestimmten Spieler (den caster)
-     // an einem zu kurierenden Spieler (target)
-     if (target->TestIgnoreSimple(({getuid(caster),
-                              getuid(caster)+".kuriere",
-                              getuid(caster)+".kuriere.klerus",
-                              ".kuriere",
-                              ".kuriere.klerus"})))
-       tell_object(caster, break_string(
-         target->Name()+" ignoriert deinen Versuch.", 78));
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     P_IGNORE, AddIgnore, RemoveIgnore, TestIgnore, /std/player/comm.c
+   arg
+       Liste von Strings, die getestet werden sollen
+
+
+BESCHREIBUNG
+============
+
+   TestIgnoreSimple() prueft, ob der Spieler min. einen der uebergebenen
+   Eintraege auf seiner Ignoriereliste hat.
+   Falls man mehrere Eintraege pruefen muss/moechte, ist es schneller, alle
+   Eintraege in einem zu uebergeben anstatt fuer jeden einzeln
+   TestIgnoreSimple() aufzurufen.
+
+
+RUeCKGABEWERT
+=============
+
+   1, falls es mindestens eine Uebereinstimmungen von arg und der
+   Ignoriere-Liste des Spielers gibt.
+   0, sonst.
+
+
+BEISPIEL
+========
+
+   if (!this_player()->TestIgnoreSimple(({"andy"})))
+     tell_object(this_player(), "Andy teilt Dir mit: Hallo!\n");
+
+   // Beispiel fuer eine Ignore-Check fuer Aktion (kratzen) fuer einen
+   // Spieler (this_player()) an einem anderen Spieler (target)
+   if (!target->TestIgnoreSimple(getuid(this_player()),
+                           getuid(this_player())+".kratz",
+                           getuid(this_player())+".kratze",
+                           ".kratz", ".kratze"}))) {
+     tell_object(target, this_player()->Name()+" kratzt dich.\n");
+     tell_object(this_player(), "Du kratzt "+target->Name()+".\n");
+   } else
+     tell_object(this_player(), target->Name()+" ignoriert dich.\n");
+
+   // allumfassender Ignorier-Check in einer Gilde (Klerus) auf
+   // eine Aktion (kurieren) fuer einen bestimmten Spieler (den caster)
+   // an einem zu kurierenden Spieler (target)
+   if (target->TestIgnoreSimple(({getuid(caster),
+                            getuid(caster)+".kuriere",
+                            getuid(caster)+".kuriere.klerus",
+                            ".kuriere",
+                            ".kuriere.klerus"})))
+     tell_object(caster, break_string(
+       target->Name()+" ignoriert deinen Versuch.", 78));
+
+
+SIEHE AUCH
+==========
+
+   P_IGNORE, AddIgnore, RemoveIgnore, TestIgnore, /std/player/comm.c
 
 26.04.2014 Zesstra
-
