diff --git a/src/modules/Java/jvm.c b/src/modules/Java/jvm.c
index 39412d0679a56ac88c5b28a68b811c800af93c80..49c4f9a943d18909a343aea826e86c5db1359582 100644
--- a/src/modules/Java/jvm.c
+++ b/src/modules/Java/jvm.c
@@ -1,5 +1,5 @@
 /*
- * $Id: jvm.c,v 1.17 2000/05/17 17:55:37 mast Exp $
+ * $Id: jvm.c,v 1.18 2000/06/09 22:48:33 mast Exp $
  *
  * Pike interface to Java Virtual Machine
  *
@@ -16,7 +16,7 @@
 #endif /* HAVE_CONFIG_H */
 
 #include "global.h"
-RCSID("$Id: jvm.c,v 1.17 2000/05/17 17:55:37 mast Exp $");
+RCSID("$Id: jvm.c,v 1.18 2000/06/09 22:48:33 mast Exp $");
 #include "program.h"
 #include "interpret.h"
 #include "stralloc.h"
@@ -334,7 +334,7 @@ static void jobj_gc_mark(struct object *o)
   struct jobj_storage *j = THIS_JOBJ;
 
   if(j->jvm)
-    gc_mark_object_as_referenced(j->jvm);
+    gc_recurse_object(j->jvm);
 }
 
 static void f_jobj_cast(INT32 args)
@@ -512,7 +512,7 @@ static void method_gc_mark(struct object *o)
   struct method_storage *m = THIS_METHOD;
 
   if(m->class)
-    gc_mark_object_as_referenced(m->class);
+    gc_recurse_object(m->class);
 }
 
 static void f_method_create(INT32 args)
@@ -1104,7 +1104,7 @@ static void field_gc_mark(struct object *o)
   struct field_storage *f = THIS_FIELD;
 
   if(f->class)
-    gc_mark_object_as_referenced(f->class);
+    gc_recurse_object(f->class);
 }
 
 static void f_field_create(INT32 args)
@@ -1905,13 +1905,13 @@ static void natives_gc_mark(struct object *o)
   struct natives_storage *n = THIS_NATIVES;
 
   if(n->jvm)
-    gc_mark_object_as_referenced(n->jvm);
+    gc_recurse_object(n->jvm);
   if(n->cls)
-    gc_mark_object_as_referenced(n->cls);
+    gc_recurse_object(n->cls);
   if(n->cons) {
     int i;
     for(i=0; i<n->num_methods; i++)
-      gc_mark_svalues(&n->cons[i].callback, 1);
+      gc_recurse_svalues(&n->cons[i].callback, 1);
   }
 }
 
@@ -2606,8 +2606,8 @@ static void att_gc_mark(struct object *o)
   struct att_storage *att = THIS_ATT;
 
   if(att->jvm)
-    gc_mark_object_as_referenced(att->jvm);
-  gc_mark_svalues(&att->thr, 1);
+    gc_recurse_object(att->jvm);
+  gc_recurse_svalues(&att->thr, 1);
 }
 
 static void f_att_create(INT32 args)
@@ -2683,7 +2683,7 @@ static void monitor_gc_mark(struct object *o)
   struct monitor_storage *m = THIS_MONITOR;
 
   if(m->obj)
-    gc_mark_object_as_referenced(m->obj);
+    gc_recurse_object(m->obj);
 }
 
 static void f_monitor_create(INT32 args)
@@ -2904,7 +2904,7 @@ static void jvm_gc_mark(struct object *o)
   struct jvm_storage *j = THIS_JVM;
 
   if(j->tl_env)
-    gc_mark_object_as_referenced(j->tl_env);
+    gc_recurse_object(j->tl_env);
 }
 #endif /* _REENTRANT */
 
diff --git a/src/security.c b/src/security.c
index 9cb98e0895726697de4707449636c8857422ff59..d126d1551306b9a2e7135810c26bb4f6936af763 100644
--- a/src/security.c
+++ b/src/security.c
@@ -348,10 +348,10 @@ static void creds_gc_check(struct object *o)
   if(THIS->default_creds) debug_gc_check(THIS->default_creds,T_OBJECT,o);
 }
 
-static void creds_gc_mark(struct object *o)
+static void creds_gc_recurse(struct object *o)
 {
-  if(THIS->user) gc_mark_object_as_referenced(THIS->user);
-  if(THIS->default_creds) gc_mark_object_as_referenced(THIS->default_creds);
+  if(THIS->user) gc_recurse_object(THIS->user);
+  if(THIS->default_creds) gc_recurse_object(THIS->default_creds);
 }
 
 static void exit_creds_object(struct object *o)
@@ -395,7 +395,7 @@ void init_pike_security(void)
   set_init_callback(init_creds_object);
   set_exit_callback(exit_creds_object);
   set_gc_check_callback(creds_gc_check);
-  set_gc_mark_callback(creds_gc_mark);
+  set_gc_recurse_callback(creds_gc_recurse);
   creds_program=end_program();
   add_program_constant("Creds",creds_program, 0);
 
diff --git a/src/threads.c b/src/threads.c
index 71e3f90ab21cc3d1ca4258dfade2986ab125a237..ac2ac3cf594aa9227c8700a77e8f8e4877aa584e 100644
--- a/src/threads.c
+++ b/src/threads.c
@@ -1,5 +1,5 @@
 #include "global.h"
-RCSID("$Id: threads.c,v 1.127 2000/05/22 19:50:29 grubba Exp $");
+RCSID("$Id: threads.c,v 1.128 2000/06/09 22:48:31 mast Exp $");
 
 int num_threads = 1;
 int threads_disabled = 0;
@@ -1095,14 +1095,14 @@ static void thread_was_marked(struct object *o)
 {
   struct thread_state *tmp=THIS_THREAD;
   if(tmp->thread_local != NULL)
-    gc_mark_mapping_as_referenced(tmp->thread_local);
+    gc_recurse_mapping(tmp->thread_local);
 }
 
 static void thread_was_checked(struct object *o)
 {
   struct thread_state *tmp=THIS_THREAD;
   if(tmp->thread_local != NULL)
-    gc_check(tmp->thread_local);  
+    debug_gc_check(tmp->thread_local, T_OBJECT, o);
 
 #ifdef PIKE_DEBUG
   if(tmp->swapped)