diff --git a/doc/lfun/GiveQuest b/doc/lfun/GiveQuest
index 613a501..daedc6c 100644
--- a/doc/lfun/GiveQuest
+++ b/doc/lfun/GiveQuest
@@ -1,63 +1,86 @@
+
 GiveQuest()
+***********
 
-FUNKTION:
-        varargs int GiveQuest(string questname, string message)
 
-DEFINIERT IN:
-        /std/player/quests.c
+FUNKTION
+========
 
-ARGUMENTE:
-        questname
-          Questname, wie er im Questmaster eingetragen wurde.
-        message 
-          Optionale Meldung, die auf dem Abenteuer-Kanal statt der 
-          Standardmeldung gesendet wird.
-          Dabei wird @@name@@ durch den Spielernamen ersetzt.
+   varargs int GiveQuest(string questname, string message)
 
-RUeCKGABEWERT:
-        (Die Defines fuer den Rueckgabewert finden sich in 
-         /secure/questmaster.h)
-         1 : Hat geklappt                           (OK)
-        -1 : Spieler hat die Quest bereits geloest  (GQ_ALREADY_SET)
-        -2 : Ungueltiger Questname                  (GQ_KEY_INVALID)
-        -3 : Unbefugter Zugriff                     (GQ_ILLEGAL_OBJ)
-        -4 : Quest zur Zeit inaktiv                 (GQ_IS_INACTIVE)
 
-BESCHREIBUNG:
-        Mit dieser Funktion wird nach dem erfolgreichen Loesen einer 
-        Quest die Quest im Spieler eingetragen. Dabei muss der Aufruf 
-        in dem Objekt erfolgen, welches im Questmaster eingetragen ist.
-        Zusaetzlich wird der Zeitpunkt eingetragen, an dem die Quest
-        bestanden wurde.
-        
-        Wer sich da nicht sicher ist, kann mit dem Questtool 
-        (/obj/tools/questtool) nachsehen. 
+DEFINIERT IN
+============
 
-        Nachdem eine Quest als geloest markiert wurde, ist dies in einem 
-        Logfile fuer die Quest im Verzeichnis /log/quest einzutragen. Dazu
-        wird write_file verwendet.
+   /std/player/quests.c
 
-BEISPIEL:
 
-        int quest;
+ARGUMENTE
+=========
 
-        quest = this_player()->GiveQuest("Zacharias Eispalast");
+   questname
+     Questname, wie er im Questmaster eingetragen wurde.
+   message
+     Optionale Meldung, die auf dem Abenteuer-Kanal statt der
+     Standardmeldung gesendet wird.
+     Dabei wird @@name@@ durch den Spielernamen ersetzt.
 
-        if (quest == 1)
-        {
-          write("Du fuehlst, wie Deine Erfahrung ansteigt.\n");
-          write_file("/log/quest/eispalast", 
-                     dtime(time())+"   Aufgabe geloest von "
-                     +this_player()->name()+"\n");
-        } 
-        else if (quest != -1)
-          write( "Die Weltenmaschine will Dir Deine Arbeit "
-                 +"nicht anerkennen.\n"
-                 +"Frage einen Erzmagier um Hilfe.\n" );
 
-SIEHE AUCH:
-        /secure/questmaster.h, /obj/tools/questtool
-        QueryQuest(), write_file(), ModifyQuestTime()
+RUeCKGABEWERT
+=============
 
-----------------------------------------------------------------------------
+   (Die Defines fuer den Rueckgabewert finden sich in
+    /secure/questmaster.h)
+    1 : Hat geklappt                           (OK)
+   -1 : Spieler hat die Quest bereits geloest  (GQ_ALREADY_SET)
+   -2 : Ungueltiger Questname                  (GQ_KEY_INVALID)
+   -3 : Unbefugter Zugriff                     (GQ_ILLEGAL_OBJ)
+   -4 : Quest zur Zeit inaktiv                 (GQ_IS_INACTIVE)
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion wird nach dem erfolgreichen Loesen einer
+   Quest die Quest im Spieler eingetragen. Dabei muss der Aufruf
+   in dem Objekt erfolgen, welches im Questmaster eingetragen ist.
+   Zusaetzlich wird der Zeitpunkt eingetragen, an dem die Quest
+   bestanden wurde.
+
+
+
+   Wer sich da nicht sicher ist, kann mit dem Questtool
+   (/obj/tools/questtool) nachsehen.
+
+   Nachdem eine Quest als geloest markiert wurde, ist dies in einem
+   Logfile fuer die Quest im Verzeichnis /log/quest einzutragen. Dazu
+   wird write_file verwendet.
+
+
+BEISPIEL
+========
+
+   int quest;
+
+   quest = this_player()->GiveQuest("Zacharias Eispalast");
+
+   if (quest == 1)
+   {
+     write("Du fuehlst, wie Deine Erfahrung ansteigt.\n");
+     write_file("/log/quest/eispalast",
+                dtime(time())+"   Aufgabe geloest von "
+                +this_player()->name()+"\n");
+   }
+   else if (quest != -1)
+     write( "Die Weltenmaschine will Dir Deine Arbeit "
+            +"nicht anerkennen.\n"
+            +"Frage einen Erzmagier um Hilfe.\n" );
+
+
+SIEHE AUCH
+==========
+
+   /secure/questmaster.h, /obj/tools/questtool
+   QueryQuest(), write_file(), ModifyQuestTime()
+
 Zuletzt geaendert: Son, 27. Apr 2014, Arathorn
