diff --git a/doc/sphinx/lfun/create.rst b/doc/sphinx/lfun/create.rst
index c89fa17..7de3019 100644
--- a/doc/sphinx/lfun/create.rst
+++ b/doc/sphinx/lfun/create.rst
@@ -3,102 +3,96 @@
 
 FUNKTION
 --------
-::
 
-     protected void create();
-     void create();
+  protected void create();
+  void create();
 
 DEFINIERT IN
 ------------
-::
 
-     allen Standardobjekten
+  allen Standardobjekten
 
 ARGUMENTE
 ---------
-::
 
-     keine
+  keine
 
 BESCHREIBUNG
 ------------
-::
 
-     Diese Funktion wird aufgerufen, wenn ein Objekt geladen oder geclont
-     wird.
-     In dieser Funktion wird das Objekt initialisiert und konfiguriert.
-     Waehrend des create() kann es einen this_player()/this_interactive()
-     geben, muss aber nicht!
-     Im create() hat das Objekt noch kein environment().
-     create() wird nur gerufen, wenn das Objekte geclont oder explizit geladen
-     wird. Wenn es aufgrund eines inherit in einem anderen Objekt vom Driver
-     geladen wird, wird das create() nicht ausgefuehrt (s. create_super()).
+  Diese Funktion wird aufgerufen, wenn ein Objekt geladen oder geclont
+  wird.
+  In dieser Funktion wird das Objekt initialisiert und konfiguriert.
+  Waehrend des create() kann es einen this_player()/this_interactive()
+  geben, muss aber nicht!
+  Im create() hat das Objekt noch kein environment().
+  create() wird nur gerufen, wenn das Objekte geclont oder explizit geladen
+  wird. Wenn es aufgrund eines inherit in einem anderen Objekt vom Driver
+  geladen wird, wird das create() nicht ausgefuehrt (s. create_super()).
 
 RUeCKGABEWERT
 -------------
-::
 
-     keiner
+  keiner
 
 BEMERKUNGEN
 -----------
-::
 
-     Erbt man von anderen Objekten, so besteht die erste Aktion innerhalb
-     von create() normalerweise darin, in diesen Objekten create()
-     aufzurufen.
-     Die Funktion kann protected oder static sein (aber nicht private). Es
-     duerfte fuer die meisten Objekte sinnvoll sein, create() protected zu
-     deklarieren.
+  Erbt man von anderen Objekten, so besteht die erste Aktion innerhalb
+  von create() normalerweise darin, in diesen Objekten create()
+  aufzurufen.
+  Die Funktion kann protected oder static sein (aber nicht private). Es
+  duerfte fuer die meisten Objekte sinnvoll sein, create() protected zu
+  deklarieren.
 
-     Um Speicher zu sparen, kann man bei Blueprints von der Konfigurierung
-     absehen (siehe Beispiel). Dies sollte man allerdings nicht bei Objekten
-     machen, von denen keine Clones erzeugt werden sollen (zB. bei Raeumen). 
+  Um Speicher zu sparen, kann man bei Blueprints von der Konfigurierung
+  absehen (siehe Beispiel). Dies sollte man allerdings nicht bei Objekten
+  machen, von denen keine Clones erzeugt werden sollen (zB. bei Raeumen). 
 
-     Man sollte bei Abbruch des create() in BP unbedingt set_next_reset(-1);
-     rufen, da sonst die (nicht konfigurierte) BP resetten kann und dann
-     buggt.
+  Man sollte bei Abbruch des create() in BP unbedingt set_next_reset(-1);
+  rufen, da sonst die (nicht konfigurierte) BP resetten kann und dann
+  buggt.
 
 BEISPIELE
 ---------
-::
 
-     Ein Gegenstand wuerde wie folgt konfiguriert:
+  Ein Gegenstand wuerde wie folgt konfiguriert:
 
-     inherit "std/thing";
+.. code-block:: pike
 
-     #include <properties.h>
+  inherit "std/thing";
 
-     create()
-     {
-       // Wenn wir die Blueprint sind: NICHT konfigurieren!
-       // Bei normalen Raeumen oder Transportern sind diese beiden
-       // Zeilen wegzulassen!!!
-       if (!clonep(this_object())) {
-           set_next_reset(-1);    // wichtig, damit die BP nicht resettet.
-           return;
-       }
+  #include <properties.h>
 
-       // Ansonsten die allgemeinen Eigenschaften von /std/thing
-       // konfigurieren...
-       ::create();
+  create()
+  {
+    // Wenn wir die Blueprint sind: NICHT konfigurieren!
+    // Bei normalen Raeumen oder Transportern sind diese beiden
+    // Zeilen wegzulassen!!!
+    if (!clonep(this_object())) {
+      set_next_reset(-1);    // wichtig, damit die BP nicht resettet.
+      return;
+    }
 
-       // ...und nun unsere speziellen Eigenschaften:
-       SetProp(P_NAME, "Muell");
-       SetProp(P_SHORT, "Muell");
-       SetProp(P_LONG, "Voellig unnuetzer Muell!\n");
-       SetProp(P_ARTICLE, 0);
-       SetProp(P_VALUE, 0);
-       SetProp(P_GENDER, MALE);
-     }
+    // Ansonsten die allgemeinen Eigenschaften von /std/thing
+    // konfigurieren...
+    ::create();
+
+    // ...und nun unsere speziellen Eigenschaften:
+    SetProp(P_NAME, "Muell");
+    SetProp(P_SHORT, "Muell");
+    SetProp(P_LONG, "Voellig unnuetzer Muell!\n");
+    SetProp(P_ARTICLE, 0);
+    SetProp(P_VALUE, 0);
+    SetProp(P_GENDER, MALE);
+  }
 
 SIEHE AUCH
 ----------
-::
 
-     create(L), reset(L)
-     hook(C), create(H), create_ob(H), create_super(H, reset(H)
-     create(A), reset(A)
+  :doc:`create`, :doc:`reset`
+  hook(C), create(H), create_ob(H), create_super(H, reset(H)
+  create(A), reset(A)
 
 22.10.2007, Zesstra
 
