diff --git a/std/thing/properties.c b/std/thing/properties.c
index 45f520a..102e883 100644
--- a/std/thing/properties.c
+++ b/std/thing/properties.c
@@ -37,12 +37,6 @@
 // This is empty outside of a save_object() or restore_object() call!
 private mapping properties;
 
-// security-flag: wenn gesetzt und es gleich der aktuellen DI_EVAL_NUMBER ist,
-// ist dieser Ausfuehrungsthread in einer Auswertung von F_QUERY/SET_METHOD
-// (ggf. rekursiv) und es wird jeder Aufruf als extern gewertet bzgl.
-// PROTECTED/SECURED.
-private nosave int closure_call;
-
 
 // Z.Zt. nur Abschalten des Resets noetig.
 protected void create() {
@@ -67,14 +61,10 @@
 nomask private int prop_check_privilege(int drop_priv, int mode,
           int op=PROP_SET)
 {
-  // Wenn closure_call in diesem Ausfuehrungsthread (Top-Level-Call) gesetzt
-  // wurde, zaehlt der Aufruf immer als drop_priv, auch wenn drop_priv 0 sein
-  // sollte.
-  drop_priv ||= (closure_call == driver_info(DI_EVAL_NUMBER));
-
   // Interne Calls oder eigenes Objekt (als letzter 'externer' Aufrufer via
   // Callother) darf alles
   if (!drop_priv || previous_object() == this_object())
+
     return 1;
 
   // Ab hier nur noch fremde Objekte
@@ -213,11 +203,6 @@
     // Lambdas bindet, kann es auch nur eine gebundene Closure sein und das
     // Objekt existiert auch noch (sonst waere func == 0).
 
-    // closure_call setzen, falls noch nicht gesetzt
-    int set_closure_call = closure_call != driver_info(DI_EVAL_NUMBER);
-    if (set_closure_call)
-      closure_call = driver_info(DI_EVAL_NUMBER);
-
     // Dann mal die Closure aufrufen. Bei Fehler selbige loeschen
     if (catch(result=funcall(func, Value, name);publish))
     {
@@ -229,11 +214,6 @@
         result = Set( name, result, F_VALUE, drop_priv||extern_call() );
     }
 
-    // Wenn dieser Aufruf closure_call gesetzt hat, wieder loeschen.
-    // Da 0 ein gueltiger Wert ist, wird um eins dekrementiert, damit das Flag
-    // fuer diese Top-Level-Ausfuehrung wieder freigegeben.
-    if (set_closure_call) --closure_call;
-
     // Und zurueckgeben
     return result;
   }
@@ -268,20 +248,11 @@
     // Lambdas bindet, kann es auch nur eine gebundene Closure sein und das
     // Objekt existiert auch noch (sonst waere func == 0).
    
-    // closure_call setzen, falls noch nicht gesetzt
-    int set_closure_call = closure_call != driver_info(DI_EVAL_NUMBER);
-    if (set_closure_call)
-      closure_call = driver_info(DI_EVAL_NUMBER);
-
     // Dann Mal die Closure aufrufen. Bei Fehler selbige loeschen
     if (catch(result=funcall(func, prop[F_VALUE][name]);publish))
     {
       prop[F_QUERY_METHOD]-=([name]);
     }
-    // Wenn dieser Aufruf closure_call gesetzt hat, wieder loeschen.
-    // Da 0 ein gueltiger Wert ist, wird um eins dekrementiert, damit das Flag
-    // fuer diese Top-Level-Ausfuehrung wieder freigegeben.
-    if (set_closure_call) --closure_call;
     
     // Und zurueckgeben
     return result;
