diff --git a/src/builtin.cmod b/src/builtin.cmod
index 9ad0711571f3911c2e6d62604caa7f691459118c..20d63b7c10a2e5008f2666ab4ba1b191e73759e6 100644
--- a/src/builtin.cmod
+++ b/src/builtin.cmod
@@ -3661,13 +3661,17 @@ PMOD_EXPORT struct object *get_setter(struct object *o, int f)
 PIKEFUN function(mixed:void) _get_setter(object o, string s)
 {
   struct program *p;
+  struct inherit *inh;
   int f;
   if (!(p = o->prog)) {
     Pike_error("Indexing a destructed object.\n");
   }
+  inh = p->inherits + Pike_sp[-args].subtype;
+  p = inh->prog;
   f = find_shared_string_identifier(s, p);
   if ((f >= 0) &&
       IDENTIFIER_IS_VARIABLE(ID_FROM_INT(p, f)->identifier_flags)) {
+    f += inh->identifier_level;
     push_function(get_setter(o, f), f_Setter_cq__backtick_28_29_fun_num);
   } else {
     push_undefined();