diff --git a/doc/mcmd/upd b/doc/mcmd/upd
index d66236a..4ca4c97 100644
--- a/doc/mcmd/upd
+++ b/doc/mcmd/upd
@@ -3,7 +3,7 @@
 ---
 
  MAGIERKOMMANDO:
-    upd [ -abcdhfilmrv ] <datei> [...]
+    upd [ -abdhfilmrv ] <datei> [...]
 
  ARGUMENTE:
 
@@ -32,9 +32,6 @@
      -C  Die Nutzung von Configure() wird erzwungen, d.h. Objekte, die kein
          oeffentliches Configure() haben, werden nicht zerstoert/ersetzt.
          (im Zusammenspiel mit -l oder -r, inkompatibel mit -c)
-     -c  Die Properties des Originalobjektes werden kopiert. In diesem Fall
-         wird Configure() _nicht_ benutzt (im Zusammenspiel mit -l und -r,
-         inkompatibel mit -C)
      -d  Beim Zerstoeren der Instanzen werden auch evtl. in ihnen vorhandene
          Objekte zerstoert. Nuetzlich, um z.B. NPCs samt ihrer Ausruestung zu
          entsorgen.
@@ -75,5 +72,5 @@
     destruct, load
     Configure()
 
- LETZTE AENDERUNG:
-    Tue, Oct 10 18:50:00 2000 von Mandragon
+Letzte Aenderung: 03.07.2025, Bugfix
+
diff --git a/std/shells/magier/upd.c b/std/shells/magier/upd.c
index ebee975..7482156 100644
--- a/std/shells/magier/upd.c
+++ b/std/shells/magier/upd.c
@@ -260,37 +260,6 @@
   return ret;
 }
 
-
-//
-// _illegal_closure(): ist closure in arg an objekt gebunden?
-// arg: closure(-array/mapping)
-// Rueckgabe: 0 wenn alles okay
-//            1 wenn closure geloescht werden muss
-//
-
-private int _illegal_closure( mixed arg )
-{
-  int i, j;
-  string *indices;
-  
-  if ( closurep(arg) && !objectp(query_closure_object(arg)) )
-    return 1;
-  
-  if ( pointerp(arg) ){
-    for ( i = sizeof(arg); i--; )
-      if ( _illegal_closure(arg[i]) )
-        return 1;
-  }
-  else if ( mappingp(arg) ){
-    indices = m_indices(arg);
-    for ( i = sizeof(indices); i--; )
-      for ( j = get_type_info( arg, 1 ); j--; )
-        if ( _illegal_closure(arg[indices[i], j]) )
-          return 1;
-  }
-  return 0;
-}
-
 //
 // _make(): Update file
 // file:  Filename
@@ -361,24 +330,18 @@
     mixed configdata;
     int restore_config;
 
-    // Wenn Objekt existiert, dann Inhalt und ggf. Daten aus Configure() oder
-    // Props sichern:
+    // Wenn Objekt existiert, dann Inhalt und ggf. Daten aus Configure() sichern
     if (obj)
     {
-      // im Fall UPD_C erfolgt _kein_ Auslesen und _keine_ Restauration
-      // mittels Configure()
-      if ( ! (flags & UPD_C ) )
+      catch(restore_config=call_resolved(&configdata,obj,
+                                                "Configure",0);
+            publish);
+      // Wenn UPD_CONF gesetzt wird, _muss_ das Objekt ein oeffentliches
+      // Configure() definieren, sonst erfolgt Abbruch.
+      if ((flags & UPD_CONF) && !restore_config)
       {
-        catch(restore_config=call_resolved(&configdata,obj,
-                                                  "Configure",0);
-              publish);
-        // Wenn UPD_CONF gesetzt wird, _muss_ das Objekt ein oeffentliches
-        // Configure() definieren, sonst erfolgt Abbruch.
-        if ((flags & UPD_CONF) && !restore_config)
-        {
-          printf("upd: %s: hat kein Configure(), Zerstoerung abgebrochen.\n",file);
-          return RET_FAIL;
-        }
+        printf("upd: %s: hat kein Configure(), Zerstoerung abgebrochen.\n",file);
+        return RET_FAIL;
       }
       if (!(flags&UPD_D)&&(flags&(UPD_L|UPD_R)))
       {
@@ -404,10 +367,6 @@
         inv=map( deep_inventory(obj), #'_save/*'*/, inv_saver )-({0});
       }
       env = environment(obj);
-      if ( flags & UPD_C )
-      {
-        pro = ({mapping})(obj->QueryProperties());
-      }
     }
     else inv = ({});
 
@@ -431,33 +390,12 @@
       if ( obj = _reload( blue,inst,flags, &err ) )
         msg += ", " + (inst ? "neu geclont" : "neu geladen");
      
-// Neu geladen: Properties wiederherstellen, Closures filtern 
+// Neu geladen: Konfiguration wiederherstellen
       if (!err)
       {
         if (!obj) obj = find_object(file);
-        // Wenn gewuenscht, Props zurueckschreiben (hat Prioritaet vor
-        // Configure(), weil explizit vom Magier angefordert).
-        if ( pro && (flags & UPD_C) )
-        {
-          string *names;
-          
-          names = m_indices(pro);
-          
-          // Closures in (mittlerweile) zerstoerten Objekten
-          // rausfiltern, damit die (hoffentlich korrekten) Closures
-          // im neu geclonten Objekt erhalten bleiben
-          for ( i = sizeof(names); i--; )
-            if ( _illegal_closure(pro[names[i], F_VALUE]) ||
-                 _illegal_closure(pro[names[i], F_QUERY_METHOD]) ||
-                 _illegal_closure(pro[names[i], F_SET_METHOD]) )
-              m_delete( pro, names[i] );
-          
-          ({mapping})obj->SetProperties(pro);
-          msg += ", Properties gesetzt";
-        }
-        // Wenn kein UPD_C, wird ggf. das Ergebnis von Configure() wieder
-        // uebergeben.
-        else if (restore_config)
+        // Ggf. Ergebnis von Configure() uebergeben
+        if (restore_config)
         {
           int conf_res;
           if (!catch(conf_res=({int})obj->Configure(configdata); publish)
@@ -517,11 +455,6 @@
   args=parseargs(cmdline,&flags,UPD_OPTS,1);
   if(flags==-1||!sizeof(args))
     return USAGE("upd [-"+UPD_OPTS+"] <datei> [<datei> ..]");
-  if ((flags & UPD_C) && (flags & UPD_CONF))
-  {
-    printf("upd: -c und -C gleichzeitig werden nicht unterstuetzt.\n");
-    return 1;
-  }
   args=file_list(args,MODE_UPD,0,"/");
   if(!sizeof(args)) return printf("upd: Keine passende Datei gefunden!\n"),1;
 
diff --git a/sys/magier.h b/sys/magier.h
index 0f51d1d..820d960 100644
--- a/sys/magier.h
+++ b/sys/magier.h
@@ -56,7 +56,7 @@
 #define RM_M            4            // DateiMASKE beachten
 #define RM_I            8            // Interaktiv loeschen (immer fragen)
 
-#define UPD_OPTS  "afilrmbvcdhsC"
+#define UPD_OPTS  "afilrmbvdhsC"
 #define UPD_A            1           // Alle Instanzen bearbeiten
 #define UPD_F            2           // Alle Instanzen finden und anzeigen
 #define UPD_I            4           // Geerbte Klassen aktualisieren
@@ -67,13 +67,12 @@
                                      // ggf. aktualisieren
 #define UPD_B           64           // Backtrace bei Fehlern
 #define UPD_V          128           // Erbschaftslisten mit ausgeben
-#define UPD_C          256           // Properties erhalten
-#define UPD_D          512           // Objektinhalt komplett destructen
-#define UPD_H         1024           // Hard-Destruct (kein remove())
-#define UPD_S         2048           // Silent
-#define UPD_CONF      4096           // Configure() erzwingen (d.h. kein Update,
+#define UPD_D          256           // Objektinhalt komplett destructen
+#define UPD_H          512           // Hard-Destruct (kein remove())
+#define UPD_S         1024           // Silent
+#define UPD_CONF      2048           // Configure() erzwingen (d.h. kein Update,
                                      // wenn Configure() nicht definiert ist)
-#define UPD_LOAD      8192           // laden, falls nicht geladen (nur
+#define UPD_LOAD      4096           // laden, falls nicht geladen (nur
                                      // intern fuer 'load)
 
 #define CP_OPTS         "vrfmi"
