diff --git a/doc/lfun/ResizeRingBuffer b/doc/lfun/ResizeRingBuffer
index c5a6c08..17c3332 100644
--- a/doc/lfun/ResizeRingBuffer
+++ b/doc/lfun/ResizeRingBuffer
@@ -1,44 +1,66 @@
+
 ResizeRingBuffer()
+******************
 
-FUNKTION:
-    protected struct std_ringbuffer buf RingBufferPut(
-                                                   struct std_ringbuffer buf, 
-                                                   int size);
 
-DEFINIERT IN:
-    /std/util/ringbuffer.c
-    /sys/util/ringbuffer.h
-    
-ARGUMENTE:
-    buf  - Ringpuffer, dessen Groesse geaendert werden soll
-    size - neue Groesse (int) 
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Diese Funktion erstellt einen neuen Ringpuffer der Groesse <size>, welcher
-    den gleichen Modus hat wie <buf> und die gleichen Daten enthaelt.
-    Ist der neue Puffer kleiner als <buf>, so kommt es hierbei zu
-    Datenverlust.
-    <buf> wird nicht veraendert. Ist die Groesse von <buf> gleich der
-    neuen gewuenschten Groesse, wird letztendlich der Ringpuffer kopiert. 
-    Je nach Groesse von <buf> und Wert von <size> kann dies eine teure
-    Angelegenheit sein.
+   protected struct std_ringbuffer buf RingBufferPut(
+                                                  struct std_ringbuffer buf,
+                                                  int size);
 
-RUeCKGABEWERT:
-    Der neue Ringpuffer mit Groesse <size>.
 
-BEISPIELE:
-    // Ringpuffer anlegen:
-    struct std_ringbuffer buffer = CreateRingBuffer(5, MODE_FIFO);
-    // 5 Werte reinschreiben:
-    foreach(int i: 5) RingBufferPut(buffer, i);
-    // Groesse aendern
-    buffer = ResizeRingBuffer(buffer, 10);
-    // Daten als Array ermitteln:
-    mixed array = RingBufferGet(buffer);
-    // array enthaelt: ({0,0,0,0,0,0,1,2,3,4})
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-    RingBufferGet(), RingBufferPut(), CreateRingBuffer()
+   /std/util/ringbuffer.c
+   /sys/util/ringbuffer.h
+
+
+ARGUMENTE
+=========
+
+   buf  - Ringpuffer, dessen Groesse geaendert werden soll
+   size - neue Groesse (int)
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion erstellt einen neuen Ringpuffer der Groesse <size>, welcher
+   den gleichen Modus hat wie <buf> und die gleichen Daten enthaelt.
+   Ist der neue Puffer kleiner als <buf>, so kommt es hierbei zu
+   Datenverlust.
+   <buf> wird nicht veraendert. Ist die Groesse von <buf> gleich der
+   neuen gewuenschten Groesse, wird letztendlich der Ringpuffer kopiert.
+   Je nach Groesse von <buf> und Wert von <size> kann dies eine teure
+   Angelegenheit sein.
+
+
+RUeCKGABEWERT
+=============
+
+   Der neue Ringpuffer mit Groesse <size>.
+
+
+BEISPIELE
+=========
+
+   // Ringpuffer anlegen:
+   struct std_ringbuffer buffer = CreateRingBuffer(5, MODE_FIFO);
+   // 5 Werte reinschreiben:
+   foreach(int i: 5) RingBufferPut(buffer, i);
+   // Groesse aendern
+   buffer = ResizeRingBuffer(buffer, 10);
+   // Daten als Array ermitteln:
+   mixed array = RingBufferGet(buffer);
+   // array enthaelt: ({0,0,0,0,0,0,1,2,3,4})
+
+
+SIEHE AUCH
+==========
+
+   RingBufferGet(), RingBufferPut(), CreateRingBuffer()
 
 23.05.2008, Zesstra
-
