diff --git a/src/program.c b/src/program.c
index f62216bf7ee34c1380fc8278d0fbda0f82812ef1..dbe26b9bbab683523dc0421499eb9619f5b5e41e 100644
--- a/src/program.c
+++ b/src/program.c
@@ -5468,6 +5468,7 @@ int define_variable(struct pike_string *name,
 		    INT32 flags)
 {
   int n, run_time_type;
+  int no_this = 0;
 
 #ifdef PIKE_DEBUG
   if(name!=debug_findstring(name))
@@ -5597,10 +5598,11 @@ int define_variable(struct pike_string *name,
 
     switch(run_time_type)
     {
-    case T_INT:
     case T_OBJECT:
       /* Make place for the object subtype. */
     case T_FUNCTION:
+      no_this = 1;
+    case T_INT:
     case T_PROGRAM:
       run_time_type = T_MIXED;
     }
@@ -5611,7 +5613,8 @@ int define_variable(struct pike_string *name,
 					alignof_variable(run_time_type),0),
 			run_time_type);
 
-  ID_FROM_INT(Pike_compiler->new_program, n)->identifier_flags |= IDENTIFIER_NO_THIS_REF;
+  if( no_this )
+    ID_FROM_INT(Pike_compiler->new_program, n)->identifier_flags |= IDENTIFIER_NO_THIS_REF;
 
   return n;
 }