diff --git a/tests/tbs/tb0485.pp b/tests/tbs/tb0485.pp
new file mode 100644
index 0000000000..223aa882b6
--- /dev/null
+++ b/tests/tbs/tb0485.pp
@@ -0,0 +1,156 @@
+{$mode objfpc}
+program test05;
+
+uses
+  SysUtils;
+
+
+type
+         QObjectH = class(TObject) end;
+                QWidgetH = class(QObjectH) end;
+
+
+IQbase = interface(IUnknown)
+end;
+
+TQBase = class(TInterfacedObject,IQBase)
+protected
+  fQHandle : TObject;
+  function GetQHandle : TObject;
+  procedure SetQHandle(Value : TObject);
+public
+  property QHandle : TObject read GetQHandle write SetQHandle;
+end;
+
+
+
+IQObject = interface(IQBase)
+  function GetQHandle : QObjectH;
+  property QHandle : QObjectH read GetQHandle;
+end;
+
+
+TQObject = class(TQBase, IQObject)
+protected
+  function GetQHandle : QObjectH; overload;
+  procedure SetQHandle(Value:QObjectH);
+
+public
+  property QHandle : QObjectH read GetQHandle write SetQHandle;
+  constructor CreateWrapper;
+  Constructor Create(name: PAnsiChar); overload;
+end;
+
+
+IQWidget = interface(IQObject)
+  function GetQHandle : QWidgetH;
+  property QHandle : QWidgetH read GetQHandle;
+  function Width: Integer;
+end;
+
+
+TQWidget = class(TQObject, IQWidget)
+protected
+  function GetQHandle : QWidgetH; overload;
+  procedure SetQHandle(Value:QWidgetH);
+public
+  property QHandle : QWidgetH read GetQHandle write SetQHandle;
+  constructor CreateWrapper;
+  Constructor Create(name: PAnsiChar); overload;
+  function Width: Integer;
+end;
+
+
+function TQObject.GetQHandle : QObjectH;
+begin
+  if Self <> nil then Result := QObjectH(fQHandle)
+  else Result := nil;
+end;
+
+procedure TQObject.SetQHandle(Value : QObjectH);
+begin
+  fQHandle := TObject(Value);
+end;
+
+constructor TQObject.CreateWrapper;
+begin
+  inherited Create;
+end;
+
+
+
+Constructor TQObject.Create(name: PAnsiChar);
+begin
+   CreateWrapper;
+end;
+
+
+
+function TQBase.GetQHandle : TObject;
+begin
+  Result := fQHandle
+end;
+
+
+procedure TQBase.SetQHandle(Value : TObject);
+begin
+  fQHandle:=Value;
+end;
+
+
+
+function TQWidget.GetQHandle : QWidgetH;
+begin
+  write('    entering TQWidget.GetQHandle ...');
+  if Self <> nil then Result := QWidgetH(fQHandle)
+  else Result := nil;
+  writeln('...leaving entering TQWidget.GetQHandle');
+end;
+
+procedure TQWidget.SetQHandle(Value : QWidgetH);
+begin
+  fQHandle := TObject(Value);
+end;
+
+constructor TQWidget.CreateWrapper;
+begin
+  write('    entering TQWidget.CreateWrapper ...');
+  inherited Create;
+  writeln('...leaving TQWidget.CreateWrapper');
+end;
+
+
+
+Constructor TQWidget.Create(name: PAnsiChar);
+begin
+  write('entering TQWidget.Create ...');
+  CreateWrapper;
+  writeln('... leaving TQWidget.Create');
+end;
+
+
+
+function TQWidget.Width: Integer;
+begin
+  write('    entering TQWidget.Width...');
+  Result:=123;
+  writeln('...leaving TQWidget.Width');
+end;
+
+
+
+function GetWidget : IQWidget;
+begin
+Result := TQWidget.CreateWrapper;
+end;
+
+
+begin
+writeln('GetWidget.Width (123)?:',GetWidget.Width);
+if GetWidget.Width<>123 then
+  begin
+  	writeln('error');
+  	halt(1);
+  end;
+end.
+