diff --git a/secure/simul_efun/simul_efun.c b/secure/simul_efun/simul_efun.c
index aa1f706..2b1c18c 100644
--- a/secure/simul_efun/simul_efun.c
+++ b/secure/simul_efun/simul_efun.c
@@ -902,29 +902,10 @@
     }
   }
 
-  save = m_allocate(0, 2);
-  properties = previous_object()->QueryProperties();
+  // prepare properties
+  previous_object()->_prop_prepare_save();
 
-  if(mappingp(properties))
-  {
-    // delete all entries in mapping properties without SAVE flag!
-    index = m_indices(properties);
-    for(i = sizeof(index)-1; i>=0;i--)
-    {
-      if(properties[index[i], F_MODE] & SAVE)
-      {
-       save[index[i]] = properties[index[i]];
-       save[index[i], F_MODE] =
-       properties[index[i], F_MODE] &
-                    (~(SETMNOTFOUND|QUERYMNOTFOUND|QUERYCACHED|SETCACHED));
-      }
-    }
-  }
-  else save = ([]);
-
-  // save object!
-  previous_object()->_set_save_data(save);
-  // format: wie definiert in config.h
+  // actual save object (format version: wie definiert in config.h)
   if (stringp(name)) {
     res = funcall(bind_lambda(#'efun::save_object, previous_object()), name,
        __LIB__SAVE_FORMAT_VERSION__);
@@ -938,7 +919,7 @@
     res = funcall(bind_lambda(#'efun::save_object, previous_object()),
        __LIB__SAVE_FORMAT_VERSION__);
 
-  previous_object()->_set_save_data(0);
+  previous_object()->_prop_finalize_save();
 
 #ifdef IOSTATS
   // Stats...
@@ -1002,36 +983,12 @@
     }
   }
 
-  // get actual property settings (by create())
-  properties = previous_object()->QueryProperties();
-
-//  DEBUG(sprintf("RESTORE %O\n",name));
+  //  DEBUG(sprintf("RESTORE %O\n",name));
   // restore object
   result=funcall(bind_lambda(#'efun::restore_object, previous_object()), name);
   //'))
-  //_get_save_data liefert tatsaechlich mixed zurueck, wenn das auch immer ein 
-  //mapping sein sollte.
-  save = previous_object()->_get_save_data();
-  if((save))
-  {
-    index = m_indices(save);
-    for(i = sizeof(index)-1; i>=0; i--)
-    {
-      properties[index[i]] = save[index[i]];
-      properties[index[i], F_MODE] = save[index[i], F_MODE]
-                            &~(SETCACHED|QUERYCACHED);
-    }
-  }
-  else properties = ([]);
 
-  // restore properties
-  funcall(
-          bind_lambda(
-                     unbound_lambda(({'arg}), //'})
-                                  ({#'call_other,({#'this_object}),
-                                  "SetProperties",'arg})),//')
-                     previous_object()),properties);
-  previous_object()->_set_save_data(0);
+  previous_object()->_prop_finalize_restore();
 
 #ifdef IOSTATS
   // Stats...
