diff --git a/packages/fcl-report/src/fpreport.pp b/packages/fcl-report/src/fpreport.pp
index 51a427a60d..ef32a5c665 100644
--- a/packages/fcl-report/src/fpreport.pp
+++ b/packages/fcl-report/src/fpreport.pp
@@ -2147,19 +2147,26 @@ type
   TFPReportClassMapping = class(TObject)
   private
     FEditorClass: TFPReportElementEditorClass;
+    FIConData: TBytes;
     FImageRenderCallBack: TFPReportImageRenderCallBack;
     FMappingName: string;
     FReportElementClass: TFPReportElementClass;
     FRenderers : TFPReportElementRendererArray;
+    FStandard: Boolean;
   public
-    Function IndexOfExportRenderer(AClass : TFPReportExporterClass) : Integer;
     constructor Create(const AMappingName: string; AElementClass: TFPReportElementClass);
+    Procedure SetIconFromBytes(B : Array of Byte);
+    Function IndexOfExportRenderer(AClass : TFPReportExporterClass) : Integer;
     Function AddRenderer(aExporterClass : TFPReportExporterClass; aCallback : TFPReportElementExporterCallBack) : TFPReportElementExporterCallBack;
     Function FindRenderer(aClass : TFPReportExporterClass) : TFPReportElementExporterCallBack;
     property MappingName: string read FMappingName;
     Property ImageRenderCallback : TFPReportImageRenderCallBack Read FImageRenderCallBack Write FImageRenderCallBack;
     property ReportElementClass: TFPReportElementClass read FReportElementClass;
+    // Class to edit the element visually
     property EditorClass : TFPReportElementEditorClass Read FEditorClass Write FEditorClass;
+    // element Icon data in PNG format, will be shown in menu editor.
+    property IconData : TBytes Read FIConData Write FIconData;
+    Property Standard : Boolean Read FStandard;
   end;
 
 
@@ -2171,10 +2178,10 @@ type
   private
     FList: TFPObjectList;
     function GetM(Aindex : integer): TFPReportClassMapping;
+    function GetMappingCount: Integer;
   Protected
     function IndexOfElementClass(const AElementClass: TFPReportElementClass): Integer;
     Function IndexOfElementName(const AElementName: string) : Integer;
-    Property Mappings[Aindex : integer] : TFPReportClassMapping read GetM;
   public
     constructor Create;
     destructor  Destroy; override;
@@ -2186,12 +2193,14 @@ type
     procedure   RegisterEditorClass(AReportElementClass: TFPReportElementClass; AEditorClass: TFPReportElementEditorClass);
     procedure   UnRegisterEditorClass(const AElementName: string; AEditorClass: TFPReportElementEditorClass);
     procedure   UnRegisterEditorClass(AReportElementClass: TFPReportElementClass; AEditorClass: TFPReportElementEditorClass);
-    procedure   RegisterClass(const AElementName: string; AReportElementClass: TFPReportElementClass);
+    Function    RegisterClass(const AElementName: string; AReportElementClass: TFPReportElementClass) : TFPReportClassMapping;
     procedure   RemoveClass(const AElementName: string);
     function    CreateInstance(const AElementName: string; AOwner: TComponent): TFPReportElement; overload;
     Function    FindEditorClassForInstance(AInstance : TFPReportElement) : TFPReportElementEditorClass;
     Function    FindEditorClassForInstance(AClass : TFPReportElementClass) : TFPReportElementEditorClass ;
     procedure   AssignReportElementTypes(AStrings: TStrings);
+    Property  Mappings[Aindex : integer] : TFPReportClassMapping read GetM;
+    Property  MappingCount : Integer Read GetMappingCount;
   end;
 
   { TFPReportBandFactory }
@@ -9993,8 +10002,12 @@ Var
   Img : TFPCustomImage;
   H,W : Integer;
   R : TFPReportRect;
+  L : TFPReportLayout;
 
 begin
+  L:=aElement.RTLayout;
+  if (L=Nil) then
+    L:=aElement.Layout;
   // Actually, this could be cached using propertyhash...
   C:=gElementFactory.FindRenderer(TFPReportExporterClass(self.ClassType),TFPReportElementClass(aElement.ClassType));
   if (C<>Nil) then
@@ -10006,15 +10019,15 @@ begin
     IC:=gElementFactory.FindImageRenderer(TFPReportElementClass(aElement.ClassType));
     if Assigned(IC) then
       begin
-      H := Round(aElement.RTLayout.Height * (aDPI / cMMperInch));
-      W := Round(aElement.RTLayout.Width * (aDPI / cMMperInch));
+      H := Round(L.Height * (aDPI / cMMperInch));
+      W := Round(L.Width * (aDPI / cMMperInch));
       Img:=TFPCompactImgRGBA8Bit.Create(W,H);
       try
         IC(aElement,Img);
-        R.Left:=aBasePos.Left+AElement.RTLayout.Left;
-        R.Top:=aBasePos.Top+AElement.RTLayout.Top;
-        R.Width:=AElement.RTLayout.Width;
-        R.Height:=AElement.RTLayout.Height;
+        R.Left:=aBasePos.Left+L.Left;
+        R.Top:=aBasePos.Top+L.Top;
+        R.Width:=L.Width;
+        R.Height:=L.Height;
         RenderImage(R,Img);
       finally
         Img.Free;
@@ -10635,6 +10648,12 @@ begin
   FReportElementClass := AElementClass;
 end;
 
+procedure TFPReportClassMapping.SetIconFromBytes(B: array of Byte);
+begin
+  SetLength(FIConData,Length(B));
+  Move(B[0],FIconData[0],Length(B));
+end;
+
 function TFPReportClassMapping.AddRenderer(aExporterClass: TFPReportExporterClass; aCallback: TFPReportElementExporterCallBack ): TFPReportElementExporterCallBack;
 
 Var
@@ -10674,6 +10693,11 @@ begin
   Result:=TFPReportClassMapping(FList[AIndex]);
 end;
 
+function TFPReportElementFactory.GetMappingCount: Integer;
+begin
+  Result:=FList.Count;
+end;
+
 function TFPReportElementFactory.IndexOfElementName(const AElementName: string): Integer;
 
 begin
@@ -10805,13 +10829,16 @@ begin
       Mappings[i].EditorClass:=nil;
 end;
 
-procedure TFPReportElementFactory.RegisterClass(const AElementName: string; AReportElementClass: TFPReportElementClass);
+function TFPReportElementFactory.RegisterClass(const AElementName: string; AReportElementClass: TFPReportElementClass
+  ): TFPReportClassMapping;
 var
   i: integer;
 begin
   I:=IndexOfElementName(AElementName);
-  if I<>-1 then exit;
-  FList.Add(TFPReportClassMapping.Create(AElementName, AReportElementClass));
+  if I<>-1 then
+    exit;
+  Result:=TFPReportClassMapping.Create(AElementName, AReportElementClass);
+  FList.Add(Result);
 end;
 
 procedure TFPReportElementFactory.RemoveClass(const AElementName: string);
@@ -12214,25 +12241,36 @@ begin
     DefaultBandRectangleColors[i] := fpgDarker(DefaultBandColors[i], 70);
 end;
 
+Procedure RegisterStandardReportClasses;
+
+  Procedure DoReg(N : String; C : TFPReportElementClass);
+
+  begin
+    gElementFactory.RegisterClass(N,C).FStandard:=true;
+  end;
+
+begin
+  DoReg('ReportTitleBand', TFPReportTitleBand);
+  DoReg('ReportSummaryBand', TFPReportSummaryBand);
+  DoReg('GroupHeaderBand', TFPReportGroupHeaderBand);
+  DoReg('GroupFooterBand', TFPReportGroupFooterBand);
+  DoReg('DataBand', TFPReportDataBand);
+  DoReg('ChildBand', TFPReportChildBand);
+  DoReg('PageHeaderBand', TFPReportPageHeaderBand);
+  DoReg('PageFooterBand', TFPReportPageFooterBand);
+  DoReg('DataHeaderBand', TFPReportDataHeaderBand);
+  DoReg('DataFooterBand', TFPReportDataFooterBand);
+  DoReg('ColumnHeaderBand', TFPReportColumnHeaderBand);
+  DoReg('ColumnFooterBand', TFPReportColumnFooterBand);
+  DoReg('Memo', TFPReportMemo);
+  DoReg('Image', TFPReportImage);
+  DoReg('Checkbox', TFPReportCheckbox);
+  DoReg('Shape', TFPReportShape);
+end;
 
 initialization
   uElementFactory := nil;
-  gElementFactory.RegisterClass('ReportTitleBand', TFPReportTitleBand);
-  gElementFactory.RegisterClass('ReportSummaryBand', TFPReportSummaryBand);
-  gElementFactory.RegisterClass('GroupHeaderBand', TFPReportGroupHeaderBand);
-  gElementFactory.RegisterClass('GroupFooterBand', TFPReportGroupFooterBand);
-  gElementFactory.RegisterClass('DataBand', TFPReportDataBand);
-  gElementFactory.RegisterClass('ChildBand', TFPReportChildBand);
-  gElementFactory.RegisterClass('PageHeaderBand', TFPReportPageHeaderBand);
-  gElementFactory.RegisterClass('PageFooterBand', TFPReportPageFooterBand);
-  gElementFactory.RegisterClass('DataHeaderBand', TFPReportDataHeaderBand);
-  gElementFactory.RegisterClass('DataFooterBand', TFPReportDataFooterBand);
-  gElementFactory.RegisterClass('ColumnHeaderBand', TFPReportColumnHeaderBand);
-  gElementFactory.RegisterClass('ColumnFooterBand', TFPReportColumnFooterBand);
-  gElementFactory.RegisterClass('Memo', TFPReportMemo);
-  gElementFactory.RegisterClass('Image', TFPReportImage);
-  gElementFactory.RegisterClass('Checkbox', TFPReportCheckbox);
-  gElementFactory.RegisterClass('Shape', TFPReportShape);
+  RegisterStandardReportClasses;
   SetupBandRectColors;
 
 finalization
diff --git a/packages/fcl-report/src/fpreportbarcode.pp b/packages/fcl-report/src/fpreportbarcode.pp
index 4d8ff6cbbf..2b166cb132 100644
--- a/packages/fcl-report/src/fpreportbarcode.pp
+++ b/packages/fcl-report/src/fpreportbarcode.pp
@@ -175,8 +175,53 @@ end;
 
 Procedure RegisterReportBarcode;
 
+Const
+  icon : Array[0..687] of byte = (
+     137, 80, 78, 71, 13, 10, 26, 10,  0,  0,  0, 13, 73, 72, 68, 82,  0,
+       0,  0, 16,  0,  0,  0, 16,  8,  6,  0,  0,  0, 31,243,255, 97,  0,
+       0,  2,119, 73, 68, 65, 84,120,156,141,147,189, 74, 92, 81, 20,133,
+     191,243,115,255,207,140,137,131, 78, 52, 97, 16, 11, 13, 72, 82, 72,
+       8, 24, 27, 11,155,188,131,149,181,146,202,135,  8, 41,132,188,129,
+      32,216,  8,118,226,  3,164, 21,196, 46, 54,153, 66, 13, 99, 38,113,
+     254,238,157,153,123,199,123, 82, 56,115, 73, 37, 89,176,224,176, 89,
+     103,237,195,222,103,  9,198, 56, 56, 56, 88, 95, 92, 92,124, 45,165,
+      20, 60,  1,107,173,173,215,235,223,183,182,182,190, 21,197,163,163,
+     163,207, 73,146,228, 73,146,216,255,100,126,120,120,248,  5, 64,108,
+     111,111,191, 92, 93, 93,173,135, 97,168,141, 49, 52, 26, 13,142,143,
+     143, 57, 61, 61,101,125,125,157, 82,169,196,206,206, 14,215,215,215,
+     156,156,156,176,187,187,203,205,205, 13,211,211,211, 15,151,151,151,
+      11,186, 82,169, 84,227, 56,214,214, 90,164,148,116,187, 93,126,253,
+     106,  2,112,119,119,199,112, 56, 36, 73, 18,226, 56,166,217,108,210,
+     235,245,136,227, 24,223,247, 85,181, 90,125, 33,133, 16, 76, 40,165,
+      68,107,141,235,186, 40,165,240, 60, 15,207,243, 80, 74,161,181,198,
+     113,156, 66,  7, 32,165, 20, 18, 40,138, 82,170,177,129, 83, 24,185,
+     174,139,214,186, 48,208, 90, 35,165, 66, 74,137,181, 22, 41, 30,157,
+     198, 93, 84,209, 77,  8, 81, 92, 82,106, 82,159,156,229,248, 21, 22,
+     141, 16,204,164, 41,230,247,111, 76,154,162, 90, 45,222,102, 25,226,
+     231, 79,222,141, 70,148, 71, 35,102, 91, 45,242, 78,135, 55, 89, 74,
+     165,217,100,116,127,143,137, 34,218,  8,180, 16,130, 56,138, 40, 55,
+     155, 68, 74, 97,  7,  3, 94,229, 57,162,223,103,193, 90, 76,158, 83,
+      74, 83,134, 89,198,124,158, 19,245,251,136, 52, 37, 14, 67, 72,146,
+      71,  3,171, 53,237, 90,141, 40,203,200,178,140,196,243,160, 82,161,
+     231,121,  8,207, 99, 84, 46,147,117,187,244, 93,151,254,212, 51,254,
+     184, 46,211, 74, 33,192, 74, 38, 51,240,125,226,106,149, 81,185, 76,
+      26,134, 48, 53,197, 32,  8, 24,134, 33,185, 49, 60, 24, 67, 28, 69,
+     244,102,103,208,227, 45, 33,  4, 18, 40,134,164, 28,135,158, 49, 12,
+     130,  0,164,100, 16,  4,164, 97,200,131,235, 50,116, 93, 26,229, 50,
+      74,235, 66,111,173, 69,118, 58,157,252,113,133,143,204,181,166, 21,
+      69,  0,164, 65, 64, 26,  4,228,142, 67,223,247, 17,142,195,191,218,
+     118,187,253,160, 47, 46, 46,126,172,172,172, 52,150,151,151,171, 65,
+      16, 96,140,225,253,135, 15,  0,172,110,108, 96, 74, 37,158,207,207,
+      99,125,159,181,181, 53,230,230,230,240, 60,143,219,219,219,198,249,
+     249,249, 15,  1,176,185,185,249,113,111,111,239,235,210,210,210,252,
+      83, 73,156,224,234,234,234,118,127,127,255,211,217,217,217,105, 17,
+     221, 90,173, 22,229,121,254,124,242, 77,159,136, 51, 74,169,251,122,
+     189, 30,  3,252,  5,131, 89, 18, 55,201,190,160,207,  0,  0,  0,  0,
+      73, 69, 78, 68,174, 66, 96,130);
+
+
 begin
-  gElementFactory.RegisterClass('Barcode',TFPReportBarcode);
+  gElementFactory.RegisterClass('Barcode',TFPReportBarcode).SetIconFromBytes(Icon);
   // Fallback renderer
   gElementFactory.RegisterImageRenderer(TFPReportBarcode,@RenderBarcode);
 end;
diff --git a/packages/fcl-report/src/fpreportqrcode.pp b/packages/fcl-report/src/fpreportqrcode.pp
index d96ef8ea05..fab1cb973d 100644
--- a/packages/fcl-report/src/fpreportqrcode.pp
+++ b/packages/fcl-report/src/fpreportqrcode.pp
@@ -197,9 +197,19 @@ end;
 
 
 Procedure RegisterReportQRCode;
+Const
+  icon : Array[0..123] of byte = (
+     137, 80, 78, 71, 13, 10, 26, 10,  0,  0,  0, 13, 73, 72, 68, 82,  0,
+       0,  0, 16,  0,  0,  0, 16,  1,  3,  0,  0,  0, 37, 61,109, 34,  0,
+       0,  0,  6, 80, 76, 84, 69,  0,  0,  0,255,255,255,165,217,159,221,
+       0,  0,  0, 49, 73, 68, 65, 84,  8,215, 99, 96,108, 96,168,221,199,
+     224,186,  8,138,128,108,160,200,255,255, 12,255,101, 24, 24, 69, 24,
+     106,191, 48,184,178, 48,184,202, 48,184, 62, 97,168,149, 96, 96,148,
+       0,  0, 95, 30, 13, 78,141,201,223,244,  0,  0,  0,  0, 73, 69, 78,
+      68,174, 66, 96,130);
 
 begin
-  gElementFactory.RegisterClass('QRCode',TFPReportQRCode);
+  gElementFactory.RegisterClass('QRCode',TFPReportQRCode).SetIconFromBytes(Icon);
   // Fallback renderer
   gElementFactory.RegisterImageRenderer(TFPReportQRCode,@RenderQRCode);
 end;