diff --git a/doc/sphinx/props/P_EXTRA_LOOK_OBS.rst b/doc/sphinx/props/P_EXTRA_LOOK_OBS.rst
new file mode 100644
index 0000000..86fdd4a
--- /dev/null
+++ b/doc/sphinx/props/P_EXTRA_LOOK_OBS.rst
@@ -0,0 +1,39 @@
+P_EXTRA_LOOK_OBS
+================
+
+NAME
+----
+::
+
+    P_EXTRA_LOOK_OBS                "p_lib_extralook_obs"
+
+DEFINIERT IN
+------------
+::
+
+    /sys/living/description.h
+
+BESCHREIBUNG
+------------
+::
+
+    Array mit den im Lebewesen enthaltenen Objekten, die P_EXTRA_LOOK gesetzt
+    haben.
+
+BEMERKUNG
+---------
+::
+
+    Bitte nicht von Hand manipulieren.
+
+  
+
+SIEHE AUCH
+----------
+::
+
+    :doc:`../long`, :doc:`../AddExtraLook`, :doc:`../RemoveExtraLook`
+    :doc:`P_EXTRA_LOOK`
+    /std/living/description.c, /std/player/base.c
+
+
diff --git a/std/living/description.c b/std/living/description.c
index 6353ca9..f512e9c 100644
--- a/std/living/description.c
+++ b/std/living/description.c
@@ -187,6 +187,8 @@
   // Extralook-Property speichern und vor manueller Aenderung schuetzen
   // EMs duerfen, die wissen hoffentlich, was sie tun.
   Set(P_INTERNAL_EXTRA_LOOK, SAVE|PROTECTED, F_MODE_AS);
+  SetProp(P_EXTRA_LOOK_OBS,({}));
+  Set(P_EXTRA_LOOK, PROTECTED, F_MODE_AS);
   SetProp(P_CLOTHING,({}));
   AddId("Living");
 }
@@ -242,12 +244,25 @@
     str += tmp;
   if (stringp(tmp = QueryProp(P_INTERNAL_EXTRA_LOOK)))
     str += tmp;
-  for(ob = first_inventory(ME); ob; ob = next_inventory(ob))
-    if(exl = ob->QueryProp(P_EXTRA_LOOK)) 
-      str += exl;
-    else if(exl = ob->extra_look()) 
-      str += exl; // TO BE REMOVED
-
+  foreach(ob : QueryProp(P_EXTRA_LOOK_OBS))
+  {
+    if(objectp(ob) && environment(ob)==ME)
+    {
+      if((stringp(exl = ob->QueryProp(P_EXTRA_LOOK)))
+      {
+        str += exl;
+      }
+      else if(stringp(exl = ob->extra_look()))
+      {
+        str += exl; // TO BE REMOVED
+      }
+    }
+    else
+    {
+      // Bereinigen
+      SetProp(P_EXTRA_LOOK_OBS,QueryProp(P_EXTRA_LOOK_OBS)-({ob}));
+    }
+  }
   
   if(filter_ldfied = QueryProp(P_TRANSPARENT))
   {
@@ -330,3 +345,30 @@
   return ([MAT_MISC_LIVING:100]);
 }
 
+public void NotifyInsert(object ob, object oldenv)
+{
+  // Wenn ob mal einen Extralook hat und mal nicht, muss Magier sich was
+  // ueberlegen.
+  if(stringp(ob->QueryProp(P_EXTRA_LOOK)))
+  {
+    SetProp(P_EXTRA_LOOK_OBS,QueryProp(P_EXTRA_LOOK_OBS)+({ob}));
+  }
+  
+  // Muss leider auch beachtet werden, sollte aber mal raus fliegen ...
+  if(function_exists("extra_look",ob))
+  {
+    SetProp(P_EXTRA_LOOK_OBS,QueryProp(P_EXTRA_LOOK_OBS)+({ob}));
+    catch(raise_error(
+      "Obsolete lfun extra_look() in "+load_name(ob));
+      publish);
+  }
+}
+
+public void NotifyLeave(object ob, object dest)
+{
+  object *els=QueryProp(P_EXTRA_LOOK_OBS);
+  if(member(els,ob)!=-1)
+  {
+    SetProp(P_EXTRA_LOOK_OBS,QueryProp(els-({ob}));
+  }
+}
diff --git a/std/npc.c b/std/npc.c
index f612f1e..a6d9ce6 100644
--- a/std/npc.c
+++ b/std/npc.c
@@ -169,6 +169,19 @@
       _clone_items();
 }
 
+public void NotifyInsert(object ob, object oldenv)
+{
+  restrictions::NotifyInsert(ob,oldenv);
+  description::NotifyInsert(ob,oldenv);
+}
+  
+public void NotifyLeave(object ob, object dest)
+{
+  restrictions::NotifyLeave(ob,dest);
+  description::NotifyLeave(ob,dest);
+}
+  
+
 string _query_race()
 {
    if (stringp(Query(P_RACE))) return capitalize(Query(P_RACE));
diff --git a/std/player/base.c b/std/player/base.c
index ecc0a84..9d78006 100644
--- a/std/player/base.c
+++ b/std/player/base.c
@@ -282,6 +282,18 @@
     GMCP_Room();
 }
 
+public void NotifyInsert(object ob, object oldenv)
+{
+  restrictions::NotifyInsert(ob,oldenv);
+  description::NotifyInsert(ob,oldenv);
+}
+  
+public void NotifyLeave(object ob, object dest)
+{
+  restrictions::NotifyLeave(ob,dest);
+  description::NotifyLeave(ob,dest);
+}
+
 string Forschung()
 {
   return LEPMASTER->QueryForschung();
diff --git a/sys/living/description.h b/sys/living/description.h
index dc07fbf..def9d28 100644
--- a/sys/living/description.h
+++ b/sys/living/description.h
@@ -7,6 +7,7 @@
 #define P_VISIBLE_GUILD           "visible_guild"
 
 #define P_EXTRA_LOOK              "extralook"
+#define P_EXTRA_LOOK_OBS          "p_lib_extralook_obs"
 #define P_INTERNAL_EXTRA_LOOK     "internal_extralook"
 
 #define P_PLAYER_LIGHT            "player_light"
