diff --git a/src/pike_types.c b/src/pike_types.c
index 5330f68c0e52a5d94102c78d220b7f041bc46f8d..aa8d5f5f1dd660b68b949f10eac8433df6716e6c 100644
--- a/src/pike_types.c
+++ b/src/pike_types.c
@@ -8802,32 +8802,6 @@ void cleanup_pike_type_table(void)
 #endif /* DO_PIKE_CLEANUP */
 }
 
-PMOD_EXPORT struct pike_type *find_object_type(struct pike_type *t)
-{
-  struct pike_type *res;
-
-  if (!t) return NULL;
-
-  switch(t->type) {
-  case T_OBJECT:
-    if (t->cdr) return t;
-    break;
-  case T_TUPLE:
-  case T_OR:
-  case T_AND:
-  case PIKE_T_RING:
-    res = find_object_type(t->car);
-    if (res) return res;
-    /* FALL_THROUGH */
-  case T_SCOPE:
-  case T_ASSIGN:
-  case PIKE_T_ATTRIBUTE:
-  case PIKE_T_NAME:
-    return find_object_type(t->cdr);
-  }
-  return NULL;
-}
-
 PMOD_EXPORT void *find_type(struct pike_type *t,
 			    void *(*cb)(struct pike_type *))
 {
diff --git a/src/pike_types.h b/src/pike_types.h
index d912d9a93b3fc6653b65aa78d887e8cb330db39a..0f029d7071d9f28fe768fb10f35c90977e8c2d6e 100644
--- a/src/pike_types.h
+++ b/src/pike_types.h
@@ -298,7 +298,6 @@ struct pike_type *object_type_to_program_type(struct pike_type *obj_t);
 PMOD_EXPORT char *get_name_of_type(TYPE_T t);
 void cleanup_pike_types(void);
 void cleanup_pike_type_table(void);
-PMOD_EXPORT struct pike_type *find_object_type(struct pike_type *t);
 PMOD_EXPORT void *find_type(struct pike_type *t,
 			    void *(*cb)(struct pike_type *));
 PMOD_EXPORT void visit_type (struct pike_type *t, int action);
diff --git a/src/program.c b/src/program.c
index bfe4d78deda944affc6e7efe00f3dfaf9134e8fb..b06860527a8695a688759bd8c8c8de8200bf3524 100644
--- a/src/program.c
+++ b/src/program.c
@@ -11484,7 +11484,32 @@ PMOD_EXPORT struct program *program_from_function(const struct svalue *f)
 
 PMOD_EXPORT struct program *program_from_type(const struct pike_type *t)
 {
-  t = find_object_type(t);
+  if (!t) return NULL;
+
+  switch(t->type) {
+  case T_OBJECT:
+    if (t->cdr) break;
+    return NULL;
+  case T_TUPLE:
+  case T_OR:
+  case T_AND:
+  case PIKE_T_RING:
+    {
+      struct program *res;
+      res = program_from_type(t->car);
+      if (res) return res;
+    }
+    /* FALL_THROUGH */
+  case T_SCOPE:
+  case T_ASSIGN:
+  case PIKE_T_ATTRIBUTE:
+  case PIKE_T_NAME:
+    return program_from_type(t->cdr);
+    break;
+  default:
+    return NULL;
+  }
+
   if (!t) return NULL;
   return id_to_program((int)(ptrdiff_t)t->cdr);
 }