diff --git a/packages/fcl-image/src/fpcanvas.inc b/packages/fcl-image/src/fpcanvas.inc
index 9586656dd1..4e23a0c89a 100644
--- a/packages/fcl-image/src/fpcanvas.inc
+++ b/packages/fcl-image/src/fpcanvas.inc
@@ -268,6 +268,13 @@ begin
   FPenPos:=AValue;
 end;
 
+procedure TFPCustomCanvas.SetClipRegion(const AValue: TFPCustomRegion);
+begin
+  if AValue = FClipRegion then exit;
+  FClipRegion.Free;
+  FClipRegion := AValue;
+end;
+
 function TFPCustomCanvas.DoAllowPen (APen : TFPCustomPen) : boolean;
 begin
   result := false;
diff --git a/packages/fcl-image/src/fpcanvas.pp b/packages/fcl-image/src/fpcanvas.pp
index b42ea02b05..a109f9ca21 100644
--- a/packages/fcl-image/src/fpcanvas.pp
+++ b/packages/fcl-image/src/fpcanvas.pp
@@ -284,6 +284,7 @@ type
     function  GetClipping: boolean; virtual;
     procedure SetClipping(const AValue: boolean); virtual;
     procedure SetPenPos(const AValue: TPoint); virtual;
+    procedure SetClipRegion(const AValue: TFPCustomRegion);
     procedure DoLockCanvas; virtual;
     procedure DoUnlockCanvas; virtual;
     procedure DoTextOut (x,y:integer;text:string); virtual; abstract;
@@ -384,7 +385,7 @@ type
     property Interpolation : TFPCustomInterpolation read FInterpolation write FInterpolation;
     property Colors [x,y:integer] : TFPColor read GetColor write SetColor;
     property ClipRect : TRect read GetClipRect write SetClipRect;
-    property ClipRegion : TFPCustomRegion read FClipRegion write FClipRegion;
+    property ClipRegion : TFPCustomRegion read FClipRegion write SetClipRegion;
     property Clipping : boolean read GetClipping write SetClipping;
     property PenPos : TPoint read FPenPos write SetPenPos;
     property Height : integer read GetHeight write SetHeight;