diff --git a/doc/sphinx/lfun/AddExtraLook.rst b/doc/sphinx/lfun/AddExtraLook.rst
index 30b255a..2e90879 100644
--- a/doc/sphinx/lfun/AddExtraLook.rst
+++ b/doc/sphinx/lfun/AddExtraLook.rst
@@ -1,131 +1,169 @@
 AddExtraLook()
 ==============
 
-AddExtraLook()
-varargs int AddExtraLook(string look, [int duration, string key,
-                         string lookende, object ob]);
---------------------------------------------------------------------------------------------------------------------------------------
-::
+FUNKTION
+--------
+
+    varargs int AddExtraLook(string look, [int duration, string key, string lookende, object ob]);
 
 DEFINIERT IN
 ------------
-::
-
-   /std/living/description.c
-
-BESCHREIBUNG
-------------
-::
-
-   Der Extralook erscheint in der Langbeschreibung des Lebewesens.
-   Eintraege koennen mit dieser Funktion hinzugefuegt werden. Dies ist der
-   bevorzugte Weg, wenn ansonsten extra ein Objekt im Spielerinventar abgelegt
-   werden muesste.
-
-   
-
-   Alle Parameter bis auf <look> sind optional.
+    /std/living/description.c
 
 ARGUMENTE
 ---------
-::
+    string look:
 
-  - string look:
-    String, der in der Langbeschreibung des Lebewesens zusaetzlich ausgegeben
-    wird.
-    Kann auch ein Funktionsname sein, wenn <ob> angegeben wird (s.u.).
-  - int duration:
-    > 0: Wie lang bleibt der Extralook gueltig (in Sekunden)? Anschliessend 
-         wird er automatisch geloescht.
-    0:   Dieser Eintrag bleibt unbegrenzt gueltig.
-    < 0: Dieser Eintrag bleibt bis zum Ende/Reboot bestehen.
-  - string key:
-    Schluesselwort, unter dem der Eintrag registriert wird und mit dem man ihn
-    auch mittels RemoveExtraLook() entfernen kann. Sollte natuerlich
-    moeglichst eindeutig sein. ;-) Wenn <key> nicht angeben wird, wird der 
-    Objektname (object_name()) benutzt.
-  - string lookende:
-    String, der an das Lebewesen (nur bei Spielern) ausgegeben wird, wenn der
-    eingetragene Extralook abgelaufen ist.
-    Kann auch ein Funktionsname sein, wenn <ob> angegeben wird.
-  - object ob:
-    Wenn hier ein Objekt angegeben wird, werden <look> und <lookende> als
-    Funktonsnamen aufgefasst. Diese Funktionen werden in <ob> aufgerufen, wenn
-    der Extralook des Lebewesen angezeigt wird bzw. der eingetragene Extralook
-    abgelaufen ist. Diese Funktionen bekommen das jeweilige Lebenwesen als
-    Objekt uebergeben. Sie muessen einen String zurueckliefern, der ausgegeben
-    wird. Dieser String wird direkt so ausgeben, also selber fuer Zeilenumbruch
-    etc. sorgen!
-    WICHTIG: Das Objekt sollte nach Moeglichkeit eine Blueprint sein, da das
-    ganze nix mehr ausgibt, sobald der Clone zerstoert wird, falls hier 
-    einer angeben wird. Wenn ihr keine BP uebergebt: Wisst, was ihr tut. ;-)
+      - String, der in der Langbeschreibung des Lebewesens zusaetzlich
+        ausgegeben wird.
+      - zu rufender Funktionsname, wenn 'ob' angegeben ist
 
-RUECKGABEWERTE
---------------
-::
+    int duration:
 
-  > 0, falls der Eintrag erfolgreich registriert wurde.
-  < 0 sonst.
-    -1: <key> war nicht gueltig und es konnte keiner ermittelt werden.
-    -2: <look> war kein gueltiger String.
-    -3: <duration> war kein Integer.
-    -4: unter <key> gibt es schon einen Eintrag.
+      - > 0: Dauer der Gueltigkeit des Extralooks in Sekunden.
+      - 0:   Unbegrenzt gueltiger Eintrag. Rebootfest.
+      - < 0: Bis Ende/Reboot bestehender Eintrag.
+
+    string key:
+      Schluesselwort, unter dem der Eintrag registriert wird und mit dem man
+      diesen auch mittels RemoveExtraLook() entfernen kann. Sollte eindeutig
+      sein!
+      Ist 'key' nicht angeben, wird der Objektname (object_name()) des
+      setzenden Objekts benutzt.
+
+    string lookende:
+
+      - String, der an das Lebewesen (nur bei Spielern) ausgegeben wird,
+	wenn der eingetragene Extralook abgelaufen ist.
+      - zu rufender Funktionsname, wenn 'ob' angegeben ist
+
+    object ob:
+      Ein Objekt, an dem die in 'look' und 'lookende' abgelegten Methoden
+      bei Abfrage oder Ablauf aufgerufen werden.
+      Die Methoden bekommen das Living uebergeben und muessen selbst
+      umgebrochene Strings zurueckgeben.
+
+BESCHREIBUNG
+------------
+    Der Extralook erscheint in der Langbeschreibung des Lebewesens.
+
+    Texte dafuer koennen mit dieser Funktion hinzugefuegt und verwaltet werden.
+    Wenn ihr nicht ohnehin unbedingt ein Objekt IM Spieler ablegt (wie zB
+    eine Ruestung mit einem Extralook) (1), dann ist diese Methode bevorzugt zu
+    verwenden.
+
+    Ueber die Angabe eines 'ob' koennen Looks auch dynamisch erstellt werden,
+    dabei werden dann 'look' bzw. 'lookende' als Methoden am Objekt gerufen.
+    (1) Ein so fuer AddExtraLook verwendetes Objekt 'ob' muss nicht wie bisher
+    ueblich im Inv des Spieler liegen!
+
+    Direkt angegebene Texte (also nicht von einem Objekt 'ob' bezogen) werden
+    durch replace_personal() gefiltert und unter Beibehaltung existierender
+    Umbrueche auf 78 Zeichen umgebrochen.
 
 BEMERKUNGEN
 -----------
-::
+    - Die Meldung von <lookende> bzw. der Funktionsaufruf erfolgt, wenn der
+      Extralook der Lebewesen das erste Mal nach Ablauf der Gueltigkeit
+      aufgerufen wird.
+    - Das uebergbene Objekt sollte fuer permanente Eintraege eine Blueprint
+      sein, da Clones irgendwann (spaetestens mit Reboot) zerstoert werden
+      und der Eintrag dann bei Abfrage automatisch geloescht wird.
+    - Folgerung: Clone-Objekte koennen fuer selbst beschraenkt temporaere
+      Extralooks benutzt werden.
 
-  Die Strings <look> und <lookende> werden vor Ausgabe durch
-  replace_personal() geschickt, daher ist die Verwendung von @WER1, @WESSEN1
-  usw. moeglich (s. replace_personal). Dies gilt aber _nicht_ fuer den Fall,
-  dass die entsprechenden Funktionen in <ob> gerufen werden, dann muessen die
-  Funktionen selber umbrechen, etc.
-  Nach replace_personal() werden die Strings noch von break_string() auf 78
-  Zeilen umgebrochen, allerdings bleiben dabei vorhandene Umbrueche erhalten.
-  Die Meldung von <lookende> bzw. der Funktionsaufruf erfolgt, wenn der
-  Extralook der Lebewesen das erste Mal nach Ablauf der Gueltigkeit aufgerufen
-  wird.
+RUECKGABEWERTE
+--------------
+    Siehe auch /sys/living/description.h fuer Konstanten.
+
+    - 1, falls der Eintrag erfolgreich registriert wurde.
+    - < 0 sonst.
+
+      - -1: <key> war nicht gueltig und es konnte keiner ermittelt werden.
+      - -2: <look> war kein gueltiger String.
+      - -3: <duration> war kein Integer.
+      - -4: unter <key> gibt es schon einen Eintrag.
 
 BEISPIELE
 ---------
-::
 
-  # einfacher Eintrag, "fuer die Ewigkeit"
-  living->AddExtraLook("@WER1 hat den Drachengott der SSP besiegt.");
+.. code-block:: pike
 
-  # Eintrag der nach 1h automatisch weg ist.
-  living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600);
+    // (1) einfacher Eintrag, "fuer die Ewigkeit"
+    living->AddExtraLook("@WER1 hat den Drachengott der SSP besiegt.");
 
-  
+.. code-block:: pike
 
-  # Eintrag mit bestimmten Schluessel, damit man ihn wieder entfernen kann.
-  living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600,
-                       "humni_marmeladen_look");
+    // (2) Eintrag der nach 1h automatisch weg ist.
+    living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600);
 
-  
+.. code-block:: pike
 
-  # Mit "Ende"-Meldung, aber kein eigener Schluessel.
-  living->AddExtraLook("@WER1 ist patschnass.", 1200, 0,
-                       "Du bist endlich wieder trocken. Puuh.");
+    // (3) Eintrag mit bestimmten Schluessel, damit man ihn wieder entfernen kann
+    living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600,
+                         "humni_marmeladen_look");
 
-  
+.. code-block:: pike
 
-  # Mit Objekt, was den Extralook dynamisch erzeugt
-  living->AddExtraLook("get_my_special_extralook", 3600, 0, 0, this_object());
-    In diesem Fall muss this_object() natuerlich die Funktion
-    "get_my_special_extralook()" definieren, die einen String zurueckgibt.
+    // (4) Mit "Ende"-Meldung, aber kein eigener Schluessel
+    living->AddExtraLook("@WER1 ist patschnass.", 1200, 0,
+                         "Du bist endlich wieder trocken. Puuh.");
 
-  # Mit Objekt, was den Extralook und die Endemeldung dynamisch erzeugt
-  living->AddExtraLook("get_my_special_extralook", 3600, 0,
-                       "extralookende", this_object());
+.. code-block:: pike
+
+    // (5) Mit Objekt, welches den Extralook dynamisch erzeugt
+    living->AddExtraLook("get_my_special_extralook", 3600, 0, 0,
+                         this_object());
+    // In diesem Fall muss this_object() natuerlich die Funktion
+    // "get_my_special_extralook()" definieren, die einen String zurueckgibt
+
+.. code-block:: pike
+
+    // (6) Mit Objekt, welches den Extralook dynamisch erzeugt
+    // Hier wird explizit die Blueprint uebergeben, der Extralook ist also
+    // rebootfest.
+    living->AddExtraLook("get_my_special_extralook", 3600, 0,
+                         "extralookende", blueprint(this_object()));
+
+.. code-block:: pike
+
+    // Mit Objekt, was den Extralook und die Endemeldung dynamisch erzeugt
+    // und keine festgelegte Existenzdauer hat, sondern sich aufgrund
+    // eigener Konditionen entsorgt
+    void set_extra_look(object living) {
+      object dyntemplook = clone_object("/path/to/some/object");
+      if(living->AddExtraLook("get_my_special_extralook", 0,
+                              object_name(dyntemplook),
+                              0, dyntemplook) == XL_OK)
+        dyntemplook->SetProp(P_INTERNAL_EXTRA_LOOK, living);
+      else
+        dyntemplook->remove();
+    }
+
+    // entsprechendes Objekt:
+    varargs int remove(int silent) {
+      object ob = QueryProp(P_INTERNAL_EXTRA_LOOK);
+      // wenn der Spieler da ist, entfernen wir den Look regulaer
+      if(objectp(ob))
+        ob->RemoveExtraLook(object_name(this_object()));
+      return ::remove(silent);
+    }
+
+    void reset() {
+      if(!random(10))
+        remove();
+      else
+        ::reset();
+    }
 
 SIEHE AUCH
 ----------
-::
 
-   RemoveExtraLook(),
-   replace_personal(), break_string()
-   P_INTERNAL_EXTRA_LOOK
+   Verwandt:
+     :doc:`RemoveExtraLook`, :doc:`../props/P_INTERNAL_EXTRA_LOOK`
+   Sonstiges:
+     :doc:`../sefun/replace_personal`, :doc:`../sefun/break_string`
+   Fuer Spielerobjekte:
+     :doc:`../props/P_EXTRA_LOOK`
 
-14.05.2007, Zesstra
-
+5. Juni 2017 Gloinson
diff --git a/doc/sphinx/lfun/RemoveExtraLook.rst b/doc/sphinx/lfun/RemoveExtraLook.rst
index 3a81693..ed2c04b 100644
--- a/doc/sphinx/lfun/RemoveExtraLook.rst
+++ b/doc/sphinx/lfun/RemoveExtraLook.rst
@@ -1,66 +1,81 @@
 RemoveExtraLook()
 =================
 
-RemoveExtraLook()
+FUNKTION
+--------
 
 int RemoveExtraLook(string key);
-----------------------------------------------------
-::
 
 DEFINIERT IN
 ------------
-::
-
-  /std/living/description.c
-
-BESCHREIBUNG
-------------
-::
-
-  Der Extralook erscheint in der Langbeschreibung des Lebewesens.
-  Eintraege koennen mit dieser Funktion (vorzeitig) wieder entfernt werden.
+    /std/living/description.c
 
 ARGUMENTE
 ---------
-::
+    - string key:
+      Schluessel, unter dem der Extralook registriert wurde ODER
+      Objektname des registrierenden Objektes
 
-  - string key:
-    Schluesselwort, unter dem der Eintrag, den man entfernen moechte, von
-    AddExtraLook() registriert wurde.
+BESCHREIBUNG
+------------
+    Der Extralook erscheint in der Langbeschreibung des Lebewesens.
 
-RUECKGABEWERTE
---------------
-::
-
-  > 0, falls der Eintrag erfolgreich entfernt wurde.
-  < 0 sonst.
-    -1: keinen (gueltigen) <key> uebergeben.
-    -2: kein Eintrag fuer <key> gefunden.
+    Eintraege koennen mit dieser Funktion (vorzeitig) wieder entfernt
+    werden. Dazu wird entweder der selbst festgelegte Schluessel oder
+    der implizite Schluessel `object_name()` des setzenden Objekts
+    benoetigt.
 
 BEMERKUNGEN
 -----------
-::
+    Beim Entfernen mit dieser Funktion wird die "Endemeldung" des entfernten
+    Eintrages nicht ausgegeben.
 
-  Beim Entfernen mit dieser Funktion wird die "Endemeldung" des entfernten
-  Eintrages nicht ausgegeben.
+RUECKGABEWERTE
+--------------
+    Siehe auch /sys/living/description.h fuer Konstanten.
+
+    - 1, falls der Eintrag erfolgreich entfernt wurde.
+    - < 0 sonst.
+
+      - -1: keinen (gueltigen) <key> uebergeben.
+      - -2: kein Eintrag fuer <key> gefunden.
 
 BEISPIELE
 ---------
-::
 
-  // Extralook registrieren.
-  living->AddExtraLook(
-    "@WER1 wird von einer Horde Daemonen verfolgt.",
-    1800,
-    // Ohne das gehts nicht, sonst gibt es keine ID, die man zum Loeschen
-    // verwenden koennte.
-    "ennox_daemonenhordenverfolgerlook");
-  // Nun kann der Eintrag auch wieder entfernt werden:
-  living->RemoveExtraLook("ennox_daemonenhordenverfolgerlook");
+.. code-block:: pike
+
+    // (1) Loeschen ueber expliziten Key
+    living->AddExtraLook(
+      "@WER1 wird von einer Horde Daemonen verfolgt.",
+      1800, "ennox_daemonenhordenverfolgerlook");
+
+    // Nun kann der Eintrag auch wieder entfernt werden:
+    living->RemoveExtraLook("ennox_daemonenhordenverfolgerlook");
+
+.. code-block:: pike
+
+    // (2) Loeschen ueber impliziten Objektnamen-Schluessel
+    living->AddExtraLook("Eine Sonnenblume ragt aus dem Ohr.")
+    // das ist nur aus dem gleichen Objekt heraus moeglich:
+    living->RemoveExtraLook(0);
+
+.. code-block:: pike
+
+    // (3) Loeschen ueber impliziten Objektnamen-Schluessel
+    string implizite_id = object_name(this_object());
+    living->AddExtraLook("Eine Sonnenblume ragt aus dem Ohr.")
+    // diese ID kann man natuerlich durch die Gegend schicken
+    living->RemoveExtraLook(implizite_id);
 
 SIEHE AUCH
 ----------
 
-  :doc:`AddExtraLook`
-  :doc:`../props/P_INTERNAL_EXTRA_LOOK`
-  :doc:`../props/P_EXTRA_LOOK`
+   Verwandt:
+     :doc:`AddExtraLook`, :doc:`../props/P_INTERNAL_EXTRA_LOOK`
+   Sonstiges:
+     :doc:`../sefun/replace_personal`, :doc:`../sefun/break_string`
+   Fuer Spielerobjekte:
+     :doc:`../props/P_EXTRA_LOOK`
+
+15. Jun 2017 Gloinson
diff --git a/doc/sphinx/props/P_INTERNAL_EXTRA_LOOK.rst b/doc/sphinx/props/P_INTERNAL_EXTRA_LOOK.rst
index bff5353..dd95176 100644
--- a/doc/sphinx/props/P_INTERNAL_EXTRA_LOOK.rst
+++ b/doc/sphinx/props/P_INTERNAL_EXTRA_LOOK.rst
@@ -15,44 +15,55 @@
 BESCHREIBUNG
 ------------
 
-  Diese Property enthaelt ein Mapping, in dem alle einzelnen
-  Extra-Look-Eintraege des Livings enthalten sind. Dabei weden die Daten von
-  AddExtraLook() und RemoveExtraLook() verwaltet. Fragt man diese Prop mit
-  QueryProp() ab, erhaelt man die Ausgabe der gueltigen Extralooks des
-  Livings. Bei Abfrage per Query() erhaelt man ein Mapping mit allen
-  Eintraegen und deren Daten.
-  Der Key ist jeweils die ID des Extralooks, der Value ist erneut ein 
-  Mapping, welches folgende Keys enthalten kann:
-  
-  "xllook":
-    String, der im Extralook des Living angezeigt wird.
-  "xlduration":
-    Zeitstempel (int), der angibt, wie lang der Eintrag gueltig
-    ist. 0 == "Unendlich", negative Zahlen besagen, dass der Eintrag nur 
-    bis Reboot/Ende gueltig sein soll und abs(xlduration) ist der Zeitpunkt
-    des Eintrages dieses Extralooks.
-  "xlende":
-    String, der nach Ablaufen an das Living ausgegeben wird.
-  "xlfun":
-    Funktion, die gerufen wird und den String zurueckliefern muss, der
-    ausgegeben werden soll.
-  "xlendefun":
-    Funktion, die gerufen wird, wenn der Eintrag abgelaufen ist und den
-    String zurueckliefern muss, der dann ans Living ausgegeben wird.
-  "xlobjectname":
-    Objekt, in dem die o.a. Funktionen gerufen werden.
+    Diese Property enthaelt ein Mapping, in dem alle einzelnen
+    Extra-Look-Eintraege des Livings enthalten sind. Dabei weden die Daten von
+    AddExtraLook() und RemoveExtraLook() verwaltet. Fragt man diese Prop mit
+    QueryProp() ab, erhaelt man die Ausgabe der gueltigen Extralooks des
+    Livings. Bei Abfrage per Query() erhaelt man ein Mapping mit allen
+    Eintraegen und deren Daten.
 
-  .. warning::
+    Der Key ist jeweils die ID des Extralooks, der Value ist erneut ein 
+    Mapping, welches folgende Keys enthalten kann:
+
+    - "xllook":
+      String, der im Extralook des Living angezeigt wird.
+    - "xlduration":
+      Zeitstempel (int), der angibt, wie lang der Eintrag gueltig
+      ist.
+
+      - 0  ewig gueltig
+      - <0 gueltig bis Ende/Reboot
+      - >0 Gueltig in Sekunden
+
+    - "xlende":
+      String, der nach Ablaufen an das Living ausgegeben wird.
+    - "xlfun":
+      Funktion, die gerufen wird und den String zurueckliefern muss, der
+      ausgegeben werden soll.
+    - "xlendefun":
+      Funktion, die gerufen wird, wenn der Eintrag abgelaufen ist und den
+      String zurueckliefern muss, der dann ans Living ausgegeben wird.
+    - "xlobjectname":
+      Objekt, in dem die o.a. Funktionen gerufen werden.
+
+BEMERKUNGEN:
+------------
+
+    .. warning::
   
-  DIESE PROPERTY BITTE **NIEMALS** PER HAND MIT Set()/SetProp() AENDERN!
-  Die Daten in dieser Prop werden vom Living selber verwaltet. Extralooks
-  koennen mittel AddExtraLook() eingetragen und mit RemoveExtraLook() entfernt
-  werden.
+      Keine echte Property. Die Methode _query_internal_extralook() in /std/living/description.c stellt die Daten zusammen.
+
+    .. warning::
+
+       ACHTUNG: Bitte nur die bereitgestellten Methoden zur Manipulation benutzen! Setzen als Property hat keinen Effekt.
 
 SIEHE AUCH
 ----------
 
-  - :doc:`../lfun/long`
-  - /std/living/description.c, /std/player/base.c
-  - :doc:`../lfun/AddExtraLook`, :doc:`../lfun/RemoveExtraLook`
+   Verwandt:
+     :doc:`../lfun/AddExtraLook`, :doc:`../lfun/RemoveExtraLook`
+     :doc:`../lfun/long`
+   Fuer Spielerobjekte:
+     :doc:`../props/P_EXTRA_LOOK`
 
+15. Juni 2017 Gloinson
diff --git a/std/living/description.c b/std/living/description.c
index b6f63c2..af3bd94 100644
--- a/std/living/description.c
+++ b/std/living/description.c
@@ -24,6 +24,13 @@
 #include <class.h>
 #include <sys_debug.h>
 
+#define XL_DURATION "xlduration"
+#define XL_LOOKSTR  "xllook"
+#define XL_FUN      "xlfun"
+#define XL_ENDMSG   "xlende"
+#define XL_ENDFUN   "xlendefun"
+#define XL_OBJNAME  "xlobjectname"
+
 public string _query_internal_extralook() {
   mixed xl;
   int zeit;
@@ -34,7 +41,7 @@
     return(0);
 
   foreach(string key, mapping xld: xl) {
-    if (intp(zeit=xld["xlduration"])) {
+    if (intp(zeit=xld[XL_DURATION])) {
       //hat offenbar nen Ablaufdatum
       if ( (zeit > 0 && zeit < time()) ||
            (zeit < 0 && abs(zeit) < object_time(ME)) ) {
@@ -45,12 +52,12 @@
         m_delete(xl,key);
         // ggf. Meldung ausgeben
         if (interactive(ME)) {
-          if (sizeof(xld["xlende"])) {
-            tell_object(ME,xld["xlende"]);
+          if (sizeof(xld[XL_ENDMSG])) {
+            tell_object(ME,xld[XL_ENDMSG]);
           }
           //kein einfacher String, aber Objekt+Funktion gegeben?
-          else if (sizeof(xld["xlendefun"]) && sizeof(xld["xlobjectname"]) &&
-            (!catch(res=call_other(xld["xlobjectname"],xld["xlendefun"],ME)
+          else if (sizeof(xld[XL_ENDFUN]) && sizeof(xld[XL_OBJNAME]) &&
+            (!catch(res=call_other(xld[XL_OBJNAME],xld[XL_ENDFUN],ME)
                     ;publish))) {
               if (stringp(res) && sizeof(res))
                 tell_object(ME,res);
@@ -61,11 +68,11 @@
     }
     // Der Eintrag ist offenbar noch gueltig, Meldung anhaengen, bzw. via
     // Funktionsaufruf beschaffen.
-    if (sizeof(xld["xllook"]))
-      look+=xld["xllook"];
-    else if (sizeof(xld["xlfun"]) && sizeof(xld["xlobjectname"])) {
+    if (sizeof(xld[XL_LOOKSTR]))
+      look+=xld[XL_LOOKSTR];
+    else if (sizeof(xld[XL_FUN]) && sizeof(xld[XL_OBJNAME])) {
       closure cl;
-      if (catch(cl=symbol_function(xld["xlfun"],xld["xlobjectname"]);publish)
+      if (catch(cl=symbol_function(xld[XL_FUN],xld[XL_OBJNAME]);publish)
           || !cl) {
           // wenn Fehler beim Laden/Closure erstellen, dann Eintrag loeschen
           // -> Annahme, dass dieser Fehler permanent sein wird, z.B. Eintrag
@@ -90,6 +97,7 @@
     return(0);
 }
 
+
 public varargs int AddExtraLook(string look, int duration, string key, 
                                 string lookende, object ob) {
   mapping xl;
@@ -98,22 +106,22 @@
     // Automatisch erzeugen, wenn moeglich
     if (!objectp(previous_object()) || 
         !stringp(key=object_name(previous_object())) || !sizeof(key))
-      return(-1);
+      return XL_NOKEY;
   }
 
   if (!stringp(look) || !sizeof(look))
-    return(-2);
+    return XL_INVALIDEXTRALOOK;
   if (!intp(duration))
-    return(-3);
+    return XL_INVALIDDURATION;;
 
   xl=Query(P_INTERNAL_EXTRA_LOOK,F_VALUE); // dran denken: liefert referenz zurueck
   if (!mappingp(xl)) {
-    Set(P_INTERNAL_EXTRA_LOOK, xl=([]) );
+    Set(P_INTERNAL_EXTRA_LOOK, xl=([]));
   }
 
   // kein Automatisches Ueberschreiben.
   if (member(xl,key))
-    return(-4);
+    return XL_KEYEXISTS;
 
   // neg. Werte: "bis Ende/reboot", abs(duration) == Eintragzeit
   // 0: "fuer ewig", >0: Zeitdauer in Sekunden
@@ -135,30 +143,30 @@
            "permanente Extralooks durch Clone (%s) nicht registrierbar.\n",
            duration, object_name(ob)));
 
-    xl[key]=(["xlobjectname":object_name(ob),
-              "xlfun": look,
+    xl[key]=([XL_OBJNAME:object_name(ob),
+              XL_FUN: look,
              ]);
     // ggf. Name der Funktion speichern, die bei Ablauf aufgerufen wird.
     if (stringp(lookende) && sizeof(lookende))
-        xl[key]["xlendefun"]=lookende;
+        xl[key][XL_ENDFUN]=lookende;
   }
   else {
     // Einfacher Eintrag, nur den bearbeiteten String merken. ;-)
-    xl[key]=(["xllook": break_string(replace_personal(look,({ME}),1),78,
+    xl[key]=([XL_LOOKSTR: break_string(replace_personal(look,({ME}),1),78,
                                      "",BS_LEAVE_MY_LFS),
              ]);
     // ggf. Meldung speichern, die bei Ablauf ausgegeben werden soll.
     if (stringp(lookende) && sizeof(lookende)) {
-      xl[key]["xlende"]=break_string(replace_personal(lookende,({ME}),1),78,
+      xl[key][XL_ENDMSG]=break_string(replace_personal(lookende,({ME}),1),78,
                                      "",BS_LEAVE_MY_LFS);
     }
   }
   // Endezeit vermerken.
   if (duration != 0)
-    xl[key]["xlduration"]=duration;
+    xl[key][XL_DURATION]=duration;
 
   // Kein Set noetig, weil Query das Mapping ja als Referenz lieferte.
-  return(1);
+  return XL_OK;
 }
 
 public int RemoveExtraLook(string key) {
@@ -167,17 +175,17 @@
     // Automatisch erzeugen, wenn moeglich
     if (!objectp(previous_object()) ||
         !stringp(key=object_name(previous_object())) || !sizeof(key))
-      return(-1);
+      return XL_NOKEY;
   }
   xl=Query(P_INTERNAL_EXTRA_LOOK,F_VALUE); // dran denken: liefert referenz zurueck
   if (!mappingp(xl))
-    return (-2);
+    return XL_KEYDOESNOTEXIST;
   if (!member(xl,key))
-    return(-2);
+    return XL_KEYDOESNOTEXIST;
 
   m_delete(xl,key);
   // Kein Set noetig, weil Query das Mapping ja als Referenz lieferte.
-  return(1);
+  return XL_OK;
 }
 
 void create()
diff --git a/sys/living/description.h b/sys/living/description.h
index def9d28..9d804f0 100644
--- a/sys/living/description.h
+++ b/sys/living/description.h
@@ -31,6 +31,14 @@
 
 #define P_AVATAR_URI              "p_lib_avataruri"
 
+// Extrallook - Returnkonstanten
+#define XL_OK                1
+#define XL_NOKEY            -1
+#define XL_INVALIDEXTRALOOK -2
+#define XL_KEYDOESNOTEXIST  -2
+#define XL_INVALIDDURATION  -3
+#define XL_KEYEXISTS        -4
+
 #endif // __LIVING_DESCRIPTION_H__
 
 
