diff --git a/src/proto/vim9instr.pro b/src/proto/vim9instr.pro
index ff13283..9372b1f 100644
--- a/src/proto/vim9instr.pro
+++ b/src/proto/vim9instr.pro
@@ -44,7 +44,7 @@
 int generate_VIM9SCRIPT(cctx_T *cctx, isntype_T isn_type, int sid, int idx, type_T *type);
 int generate_NEWLIST(cctx_T *cctx, int count, int use_null);
 int generate_NEWDICT(cctx_T *cctx, int count, int use_null);
-int generate_FUNCREF(cctx_T *cctx, ufunc_T *ufunc, isn_T **isnp);
+int generate_FUNCREF(cctx_T *cctx, ufunc_T *ufunc, class_T *cl, int fi, isn_T **isnp);
 int generate_NEWFUNC(cctx_T *cctx, char_u *lambda_name, char_u *func_name);
 int generate_DEF(cctx_T *cctx, char_u *name, size_t len);
 int generate_JUMP(cctx_T *cctx, jumpwhen_T when, int where);
diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim
index 184a61f..0f812f1 100644
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -1480,6 +1480,43 @@
   END
   v9.CheckScriptSuccess(lines)
   unlet g:result
+
+  lines =<< trim END
+      vim9script
+
+      class BaseWithEE
+        def Enter()
+          g:result ..= "entered-base/"
+        enddef
+        def Exit()
+          g:result ..= "exited-base"
+        enddef
+      endclass
+
+      class CWithEE extends BaseWithEE
+        def Enter()
+          g:result ..= "entered-child/"
+        enddef
+        def Exit()
+          g:result ..= "exited-child"
+        enddef
+      endclass
+
+      def With(ee: BaseWithEE, F: func)
+        ee.Enter()
+        defer ee.Exit()
+        F()
+      enddef
+
+      g:result = ''
+      var obj = CWithEE.new()
+      obj->With(() => {
+        g:result ..= "called/"
+      })
+      assert_equal('entered-child/called/exited-child', g:result)
+  END
+  v9.CheckScriptSuccess(lines)
+  unlet g:result
 enddef
 
 
diff --git a/src/version.c b/src/version.c
index a98d4c3..2c86c48 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1292,
+/**/
     1291,
 /**/
     1290,
diff --git a/src/vim9.h b/src/vim9.h
index fd98bb5..4df97c6 100644
--- a/src/vim9.h
+++ b/src/vim9.h
@@ -380,6 +380,8 @@
 typedef struct {
     char_u	  *fre_func_name;	// function name for legacy function
     loopvarinfo_T fre_loopvar_info;	// info about variables inside loops
+    class_T	  *fre_class;		// class for a method
+    int		  fre_method_idx;	// method index on "fre_class"
 } funcref_extra_T;
 
 // arguments to ISN_FUNCREF
diff --git a/src/vim9compile.c b/src/vim9compile.c
index a3bb411..0f002f9 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -1068,7 +1068,7 @@
 					    ASSIGN_CONST, ufunc->uf_func_type);
 	if (lvar == NULL)
 	    goto theend;
-	if (generate_FUNCREF(cctx, ufunc, &funcref_isn) == FAIL)
+	if (generate_FUNCREF(cctx, ufunc, NULL, 0, &funcref_isn) == FAIL)
 	    goto theend;
 	r = generate_STORE(cctx, ISN_STORE, lvar->lv_idx, NULL);
     }
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 3498e54..605cfb2 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -4291,7 +4291,24 @@
 			vim_free(pt);
 			goto theend;
 		    }
-		    if (extra == NULL || extra->fre_func_name == NULL)
+		    if (extra != NULL && extra->fre_class != NULL)
+		    {
+			tv = STACK_TV_BOT(-1);
+			if (tv->v_type != VAR_OBJECT)
+			{
+			    object_required_error(tv);
+			    vim_free(pt);
+			    goto on_error;
+			}
+			object_T *obj = tv->vval.v_object;
+			class_T *cl = obj->obj_class;
+
+			// convert the interface index to the object index
+			int idx = object_index_from_itf_index(extra->fre_class,
+					      TRUE, extra->fre_method_idx, cl);
+			ufunc = cl->class_obj_methods[idx];
+		    }
+		    else if (extra == NULL || extra->fre_func_name == NULL)
 		    {
 			dfunc_T	*pt_dfunc = ((dfunc_T *)def_functions.ga_data)
 						       + funcref->fr_dfunc_idx;
@@ -4299,7 +4316,9 @@
 			ufunc = pt_dfunc->df_ufunc;
 		    }
 		    else
+		    {
 			ufunc = find_func(extra->fre_func_name, FALSE);
+		    }
 		    if (ufunc == NULL)
 		    {
 			SOURCING_LNUM = iptr->isn_lnum;
@@ -6727,8 +6746,16 @@
 		    }
 		    else
 			name = extra->fre_func_name;
-		    if (extra == NULL || extra->fre_loopvar_info.lvi_depth == 0)
+		    if (extra != NULL && extra->fre_class != NULL)
+		    {
+			smsg("%s%4d FUNCREF %s.%s", pfx, current,
+					   extra->fre_class->class_name, name);
+		    }
+		    else if (extra == NULL
+				     || extra->fre_loopvar_info.lvi_depth == 0)
+		    {
 			smsg("%s%4d FUNCREF %s", pfx, current, name);
+		    }
 		    else
 		    {
 			char_u	*info = printable_loopvarinfo(
diff --git a/src/vim9expr.c b/src/vim9expr.c
index c65fc79..88d9ec1 100644
--- a/src/vim9expr.c
+++ b/src/vim9expr.c
@@ -383,7 +383,12 @@
 	    // uf_name[] only being 4 characters.
 	    char_u *ufname = (char_u *)fp->uf_name;
 	    if (STRNCMP(name, ufname, len) == 0 && ufname[len] == NUL)
-		return generate_FUNCREF(cctx, fp, NULL);
+	    {
+		if (type->tt_type == VAR_OBJECT
+		     && (cl->class_flags & (CLASS_INTERFACE | CLASS_EXTENDED)))
+		    return generate_FUNCREF(cctx, fp, cl, i, NULL);
+		return generate_FUNCREF(cctx, fp, NULL, 0, NULL);
+	    }
 	}
 
 	semsg(_(e_member_not_found_on_object_str_str), cl->class_name, name);
@@ -1308,7 +1313,7 @@
 	// The function reference count will be 1.  When the ISN_FUNCREF
 	// instruction is deleted the reference count is decremented and the
 	// function is freed.
-	return generate_FUNCREF(cctx, ufunc, NULL);
+	return generate_FUNCREF(cctx, ufunc, NULL, 0, NULL);
     }
 
     func_ptr_unref(ufunc);
diff --git a/src/vim9instr.c b/src/vim9instr.c
index ce7342b..cdf0379 100644
--- a/src/vim9instr.c
+++ b/src/vim9instr.c
@@ -1328,12 +1328,16 @@
 
 /*
  * Generate an ISN_FUNCREF instruction.
+ * For "obj.Method" "cl" is the class of the object (can be an interface or a
+ * base class) and "fi" the index of the method on that class.
  * "isnp" is set to the instruction, so that fr_dfunc_idx can be set later.
  */
     int
 generate_FUNCREF(
 	cctx_T	    *cctx,
 	ufunc_T	    *ufunc,
+	class_T	    *cl,
+	int	    fi,
 	isn_T	    **isnp)
 {
     isn_T	    *isn;
@@ -1349,17 +1353,23 @@
 	*isnp = isn;
 
     has_vars = get_loop_var_info(cctx, &loopinfo);
-    if (ufunc->uf_def_status == UF_NOT_COMPILED || has_vars)
+    if (ufunc->uf_def_status == UF_NOT_COMPILED || has_vars || cl != NULL)
     {
 	extra = ALLOC_CLEAR_ONE(funcref_extra_T);
 	if (extra == NULL)
 	    return FAIL;
 	isn->isn_arg.funcref.fr_extra = extra;
 	extra->fre_loopvar_info = loopinfo;
+	if (cl != NULL)
+	{
+	    extra->fre_class = cl;
+	    ++cl->class_refcount;
+	    extra->fre_method_idx = fi;
+	}
     }
-    if (ufunc->uf_def_status == UF_NOT_COMPILED)
+    if (ufunc->uf_def_status == UF_NOT_COMPILED || cl != NULL)
 	extra->fre_func_name = vim_strsave(ufunc->uf_name);
-    else
+    if (ufunc->uf_def_status != UF_NOT_COMPILED && cl == NULL)
     {
 	if (isnp == NULL && ufunc->uf_def_status == UF_TO_BE_COMPILED)
 	    // compile the function now, we need the uf_dfunc_idx value
@@ -2484,6 +2494,8 @@
 			func_unref(name);
 			vim_free(name);
 		    }
+		    if (extra->fre_class != NULL)
+			class_unref(extra->fre_class);
 		    vim_free(extra);
 		}
 	    }
