diff --git a/doc/lfun/QueryBuyValue b/doc/lfun/QueryBuyValue
index 261a435..cecc57c 100644
--- a/doc/lfun/QueryBuyValue
+++ b/doc/lfun/QueryBuyValue
@@ -1,52 +1,56 @@
-QueryBuyValue()
-
-Funktion:
-    static varargs int QueryBuyValue(mixed ob, object client)
-
-Definiert in:
-    /std/room/shop
-
-Argumente:
-    ob: 
-      Das zu kaufende Objekt (String oder object).
-      Im Normalfall handelt es sich um ein Objekt. Ausnahme sind 
-      Gegenstaende, die mit AddFixedObject() hinzugefuegt wurden.
-    client: 
-      Der Kaeufer.
-
-Beschreibung:
-    Ermittelt den Preis, den <client> fuer <ob> zu bezahlen hat.
-
-Rueckgabewert:
-    Der Preis als Integer.
-
-Beispiel:
-    Ein Haendler, der Spielern die ihm geholfen haben einen Rabatt von 10% 
-    gewaehrt:
-    
-    object *helpers;
-    protected void create()
-    {
-      ::create();
-      helpers=({});
-      ...
-    }
-    
-    static varargs int QueryBuyValue(mixed ob, object client)
-    {
-      if(member(helpers,client)!=-1)
-      {
-        return ::QueryBuyValue(ob,client)*9/10;
-      }
-      return ::QueryBuyValue(ob,client);
-    }
-
-Siehe auch:
-    Funktionen:
-      AddFixedObject(), RemoveFixedObject(), SetStorageRoom(), 
-      QueryStorageRoom(), QueryBuyFact(), sell_obj(), buy_obj()
-    Properties:
-      P_KEEPER, P_MIN_STOCK, P_STORE_CONSUME
-
-------------------------------------------------------------------------------
-Letzte Aenderung: 21.05.2014, Bugfix
\ No newline at end of file
+
+QueryBuyValue()
+***************
+
+QueryBuyValue()
+
+Funktion
+   static varargs int QueryBuyValue(mixed ob, object client)
+
+Definiert in
+   /std/room/shop
+
+Argumente
+   ob
+      Das zu kaufende Objekt (String oder object). Im Normalfall
+      handelt es sich um ein Objekt. Ausnahme sind Gegenstaende, die
+      mit AddFixedObject() hinzugefuegt wurden.
+
+   client
+      Der Kaeufer.
+
+Beschreibung
+   Ermittelt den Preis, den <client> fuer <ob> zu bezahlen hat.
+
+Rueckgabewert
+   Der Preis als Integer.
+
+Beispiel
+   Ein Haendler, der Spielern die ihm geholfen haben einen Rabatt von
+   10% gewaehrt
+
+   object >>*<<helpers; protected void create() {
+
+      ::create(); helpers=({}); ...
+
+   }
+
+   static varargs int QueryBuyValue(mixed ob, object client) {
+
+      if(member(helpers,client)!=-1) {
+
+         return ::QueryBuyValue(ob,client)*9/10;
+
+      } return ::QueryBuyValue(ob,client);
+
+   }
+
+Siehe auch:
+   Funktionen:
+      AddFixedObject(), RemoveFixedObject(), SetStorageRoom(),
+      QueryStorageRoom(), QueryBuyFact(), sell_obj(), buy_obj()
+
+   Properties:
+      P_KEEPER, P_MIN_STOCK, P_STORE_CONSUME
+
+Letzte Aenderung: 21.05.2014, Bugfix
