diff --git a/compiler/pdecobj.pas b/compiler/pdecobj.pas
index 4302c62e15..2caec216fc 100644
--- a/compiler/pdecobj.pas
+++ b/compiler/pdecobj.pas
@@ -1217,6 +1217,8 @@ implementation
         old_current_structdef: tabstractrecorddef;
         old_current_genericdef,
         old_current_specializedef: tstoreddef;
+        hrecst: trecordsymtable;
+        fsym: tfieldvarsym;
         old_parse_generic: boolean;
         list: TFPObjectList;
         s: String;
@@ -1279,7 +1281,18 @@ implementation
                       if (current_structdef.objname^='TOBJECT') then
                         class_tobject:=current_objectdef;
                       if (current_objectdef.objname^='JLOBJECT') then
-                        java_jlobject:=current_objectdef;
+                        begin
+                          java_jlobject:=current_objectdef;
+                          { the methodpointer type is normally created in
+                            psystem, but java_jlobject is not yet available
+                            there... }
+                          hrecst:=trecordsymtable.create('',1);
+                          fsym:=tfieldvarsym.create('$proc',vs_value,java_jlobject,[]);
+                          hrecst.insert(fsym);
+                          hrecst.addfield(fsym,vis_hidden);
+                          methodpointertype:=trecorddef.create('',hrecst);
+                          systemunit.insert(ttypesym.create('$methodpointer',methodpointertype));
+                        end;
                       if (current_objectdef.objname^='JLTHROWABLE') then
                         java_jlthrowable:=current_objectdef;
                       if (current_objectdef.objname^='FPCBASERECORDTYPE') then
diff --git a/compiler/psystem.pas b/compiler/psystem.pas
index 3ffb95fa2c..3e2ed606f7 100644
--- a/compiler/psystem.pas
+++ b/compiler/psystem.pas
@@ -401,15 +401,6 @@ implementation
             addfield(hrecst,tfieldvarsym.create('$self',vs_value,voidpointertype,[]));
             methodpointertype:=trecorddef.create('',hrecst);
             addtype('$methodpointer',methodpointertype);
-          end
-        else
-          begin
-{$if defined(jvm) and not defined(nounsupported)}
-            hrecst:=trecordsymtable.create('',1);
-            addfield(hrecst,tfieldvarsym.create('$proc',vs_value,voidpointertype,[]));
-            methodpointertype:=trecorddef.create('',hrecst);
-            addtype('$methodpointer',methodpointertype);
-{$endif}
           end;
         symtablestack.pop(systemunit);
       end;