diff --git a/src/object.c b/src/object.c
index 41af09bbb0835646e6f555b51fa7f842aa646fab..87e73b7289ef12f199ce797c06a4447b10bbf124 100644
--- a/src/object.c
+++ b/src/object.c
@@ -103,9 +103,9 @@ struct object *clone(struct program *p, int args)
     o->refs++;
   }
 
-  apply(o,"__INIT",0);
+  apply_lfun(o,LFUN___INIT,0);
   pop_stack();
-  apply(o,"create",args);
+  apply_lfun(o,LFUN_CREATE,args);
   pop_stack();
 
   return o;
@@ -163,8 +163,11 @@ void destruct(struct object *o)
 
   o->refs++;
 
-  safe_apply(o, "destroy", 0);
-  pop_stack();
+  if(o->prog->lfuns[LFUN_DESTROY] != -1)
+  {
+    safe_apply_low(o, o->prog->lfuns[LFUN_DESTROY], 0);
+    pop_stack();
+  }
 
   /* destructed in destroy() */
   if(!o->prog)
diff --git a/src/object.h b/src/object.h
index e4bb8cd0dd2360cfa1c55991163221e03b387bde..5b8d7283734b6c1c7888cc41f24d6bda25179cdc 100644
--- a/src/object.h
+++ b/src/object.h
@@ -29,6 +29,8 @@ extern struct object *first_object;
 #define GET_GLOBAL(O,I) LOW_GET_GLOBAL(O,I,ID_FROM_INT((O)->prog,I))
 #define GLOBAL_FROM_INT(I) GET_GLOBAL(fp->current_object, I)
 
+#define this_object() (fp->current_object->refs++,fp->current_object)
+
 /* Prototypes begin here */
 void setup_fake_object();
 struct object *clone(struct program *p, int args);