diff --git a/doc/lfun/RemoveSounds b/doc/lfun/RemoveSounds
index 50d900a..4ef4263 100644
--- a/doc/lfun/RemoveSounds
+++ b/doc/lfun/RemoveSounds
@@ -1,46 +1,66 @@
+
 RemoveSounds()
+**************
 
-FUNKTION:
-    void RemoveSounds(string|string* keys);
 
-DEFINIERT IN:
-    /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-    keys
-      String oder Array von Strings mit den zu entfernenden Details.
+   void RemoveSounds(string|string* keys);
 
-BESCHREIBUNG:
-    Diese Funktion entspricht dem RemoveDetail() fuer Standarddetails,   
-    nur koennen hiermit Gerauesche entfernt werden:
-    Entfernt die in <keys> angegebenen Details aus der Liste der
-    vorhandenen Details. Uebergibt man fuer <keys> eine 0, so werden
-    saemtliche Details entfernt!
 
-BEISPIEL:
-    Wir lassen etwas Musik spielen und wenn wir den Plattenspieler
-    ausmachen, dann endet sie und man hoert auch nichts mehr:
+DEFINIERT IN
+============
 
-      int ausmachen(string str);
-      ...
-      AddSounds(({"musik","hip-hop"}) ,"Klingt nach Hip-Hop...\n");
-      AddCmd("mach|mache&plattenspieler&aus", #'ausmachen,
-             "Was willst du (aus)machen?|Willst du den ausmachen?^");
-      ...
-      int ausmachen(string str) {
-        if(!GetDetail("musik", 0, SENSE_SOUND)) // existiert Musikdetail ?
-          return("Der Plattenspieler laeuft doch gar nicht!\n", 1);
-        RemoveSounds(0);
-         return 1;
-      }
+   /std/thing/description.c
 
-SIEHE AUCH:
-    Setzen:    AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
-               AddTouchDetail()
-    Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
-               RemoveTouchDetail()
-    Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
-    Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
-    Sonstiges: GetDetail(), break_string()
+
+ARGUMENTE
+=========
+
+   keys
+     String oder Array von Strings mit den zu entfernenden Details.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion entspricht dem RemoveDetail() fuer Standarddetails,
+   nur koennen hiermit Gerauesche entfernt werden:
+   Entfernt die in <keys> angegebenen Details aus der Liste der
+   vorhandenen Details. Uebergibt man fuer <keys> eine 0, so werden
+   saemtliche Details entfernt!
+
+
+BEISPIEL
+========
+
+   Wir lassen etwas Musik spielen und wenn wir den Plattenspieler
+   ausmachen, dann endet sie und man hoert auch nichts mehr:
+
+     int ausmachen(string str);
+     ...
+     AddSounds(({"musik","hip-hop"}) ,"Klingt nach Hip-Hop...\n");
+     AddCmd("mach|mache&plattenspieler&aus", #'ausmachen,
+            "Was willst du (aus)machen?|Willst du den ausmachen?^");
+     ...
+     int ausmachen(string str) {
+       if(!GetDetail("musik", 0, SENSE_SOUND)) // existiert Musikdetail ?
+         return("Der Plattenspieler laeuft doch gar nicht!\n", 1);
+       RemoveSounds(0);
+        return 1;
+     }
+
+
+SIEHE AUCH
+==========
+
+   Setzen:    AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
+              AddTouchDetail()
+   Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
+              RemoveTouchDetail()
+   Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
+   Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
+   Sonstiges: GetDetail(), break_string()
 
 8. Juli 2011 Gloinson
