diff --git a/doc/lfun/QuerySellValue b/doc/lfun/QuerySellValue
index 544cb29..4d5a518 100644
--- a/doc/lfun/QuerySellValue
+++ b/doc/lfun/QuerySellValue
@@ -1,43 +1,54 @@
-FUNKTION:
 
-      varargs int QuerySellValue(object ob, object client);
+QuerySellValue()
+****************
 
-DEFINIERT IN:
 
-      /std/trading_price.c
+FUNKTION
+========
 
-BESCHREIBUNG:
+   varargs int QuerySellValue(object ob, object client);
 
-      Diese Funktion kann dazu genutzt werden, den Verkaufspreis in einem 
-      Laden global zu veraendern. Sofern dies zugunsten der Spieler geschieht,
-      muss dafuer die Zustimmung des zustaendigen Regionsmagiers und der
-      Balance eingeholt werden. Zudem sollte es nicht in jedem x-beliebigen 
-      Laden genutzt werden, sondern nur in recht abgelegenen Gebieten, in
-      die man nicht einfach skripten kann.
 
-      Ein Beispiel ist der Laden auf dem Kutter in Port Vain, der nur in
-      laengeren Intervallen mal zugaenglich ist.
+DEFINIERT IN
+============
 
-BEISPIEL:
+   /std/trading_price.c
 
-      Ein Laden zahlt 10% ueber dem normalen Verkaufspreis:
 
-      private int sell_factor = 110;
+BESCHREIBUNG
+============
 
-      varargs int QuerySellValue(object ob, object client) {
-        // Es wird nicht naeher geprueft, ob <ob> ein gueltiger Objektpointer
-        // ist, da der Laden selbst sicherstellt, dass das so ist. Wenn 
-        // das doch einmal nicht der Fall sein sollte, liegt der Fehler
-        // woanders. Einen Bug auszuloesen ist dann sinnvoll.
+   Diese Funktion kann dazu genutzt werden, den Verkaufspreis in einem
+   Laden global zu veraendern. Sofern dies zugunsten der Spieler geschieht,
+   muss dafuer die Zustimmung des zustaendigen Regionsmagiers und der
+   Balance eingeholt werden. Zudem sollte es nicht in jedem x-beliebigen
+   Laden genutzt werden, sondern nur in recht abgelegenen Gebieten, in
+   die man nicht einfach skripten kann.
 
-        // Basispreis ermitteln 
-        int preis = ::QuerySellValue(ob, client);
-        // und den Bonus aufschlagen.
-        preis = (sell_factor * preis)/100; 
+   Ein Beispiel ist der Laden auf dem Kutter in Port Vain, der nur in
+   laengeren Intervallen mal zugaenglich ist.
 
-        // Nicht mehr auszahlen, als das Objekt an sich wert ist.
-        return min(preis, ob->QueryProp(P_VALUE));
-      }
 
-----------------------------------------------------------------------------
+BEISPIEL
+========
+
+   Ein Laden zahlt 10% ueber dem normalen Verkaufspreis:
+
+   private int sell_factor = 110;
+
+   varargs int QuerySellValue(object ob, object client) {
+     // Es wird nicht naeher geprueft, ob <ob> ein gueltiger Objektpointer
+     // ist, da der Laden selbst sicherstellt, dass das so ist. Wenn
+     // das doch einmal nicht der Fall sein sollte, liegt der Fehler
+     // woanders. Einen Bug auszuloesen ist dann sinnvoll.
+
+     // Basispreis ermitteln
+     int preis = ::QuerySellValue(ob, client);
+     // und den Bonus aufschlagen.
+     preis = (sell_factor * preis)/100;
+
+     // Nicht mehr auszahlen, als das Objekt an sich wert ist.
+     return min(preis, ob->QueryProp(P_VALUE));
+   }
+
 LETZTE AENDERUNG: 18-Jun-2015, Arathorn
