diff --git a/Demos/Reports/Barcode.frx b/Demos/Reports/Barcode.frx
index 22f87dc6..a2387a00 100644
--- a/Demos/Reports/Barcode.frx
+++ b/Demos/Reports/Barcode.frx
@@ -1,71 +1,74 @@
 ﻿<?xml version="1.0" encoding="utf-8"?>
-<Report ScriptLanguage="CSharp" TextQuality="Regular" ReportInfo.Description="This report demonstrates different barcode types:&#13;&#10;2/5 barcodes (Interleaved, Industrial, Matrix, ITF-14), Codabar, Code39 (Regular, Extended), Code93 (Regular, Extended), Code128 (A, B, C charsets with autoencoding feature), EAN8, EAN13, UPC-A, UPC-E (E0, E1 codes), MSI, PostNet, 2 or 5 digit supplement code for EAN/UPC barcodes, PDF417, Datamatrix, QR Code, Aztec, Plessey, GS1-128 (UCC/EAN-128), Pharmacode, Intelligent Mail (USPS), MaxiCode, Swiss QR Code." ReportInfo.Created="02/21/2008 20:44:59" ReportInfo.Modified="08/19/2020 17:43:53" ReportInfo.CreatorVersion="1.0.0.0">
+<Report ScriptLanguage="CSharp" TextQuality="Regular" ReportInfo.Description="This report demonstrates different barcode types:&#13;&#10;2/5 barcodes (Interleaved, Industrial, Matrix, ITF-14), Codabar, Code39 (Regular, Extended), Code93 (Regular, Extended), Code128 (A, B, C charsets with autoencoding feature), EAN8, EAN13, UPC-A, UPC-E (E0, E1 codes), MSI, PostNet, 2 or 5 digit supplement code for EAN/UPC barcodes, PDF417, Datamatrix, QR Code, Aztec, Plessey, GS1-128 (UCC/EAN-128), Pharmacode, Intelligent Mail (USPS), MaxiCode, Swiss QR Code." ReportInfo.Created="02/21/2008 20:44:59" ReportInfo.Modified="08/26/2020 17:30:54" ReportInfo.CreatorVersion="1.0.0.0">
   <Dictionary/>
   <ReportPage Name="Page1" RawPaperSize="9" Watermark.Font="Arial, 60pt" UnlimitedHeight="true">
     <ReportTitleBand Name="ReportTitle1" Width="718.2" Height="85.05" CanGrow="true">
       <TextObject Name="Text29" Width="718.2" Height="28.35" Anchor="Top, Left, Right" Fill.Color="WhiteSmoke" CanGrow="true" Text="[Report.ReportInfo.Description]" Padding="4, 4, 4, 4" VertAlign="Center" Font="Tahoma, 8pt"/>
       <TextObject Name="Text30" Top="47.25" Width="718.2" Height="37.8" Text="BarcodeObject" HorzAlign="Center" VertAlign="Center" Font="Tahoma, 14pt, style=Bold"/>
     </ReportTitleBand>
-    <DataBand Name="Data1" Top="87.34" Width="718.2" Height="1420.4">
-      <TextObject Name="Text63" Left="519.75" Top="37.8" Width="189" Height="132.3" Border.Lines="Left, Right, Bottom" Border.Color="Silver" Text="ITF-14" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
+    <DataBand Name="Data1" Top="87.72" Width="718.2" Height="1420.4">
+      <TextObject Name="Text63" Left="519.75" Top="37.8" Width="189" Height="132.3" Border.Lines="Left, Right, Bottom" Border.Color="Silver" Text="Codabar" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
       <TextObject Name="Text61" Left="236.25" Top="1105.65" Width="226.8" Height="226.8" Border.Lines="Left, Right, Bottom" Border.Color="Silver" Text="MaxiCode" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
       <TextObject Name="Text32" Left="9.45" Top="37.8" Width="170.1" Height="132.3" Border.Lines="Left, Right, Bottom" Border.Color="Silver" Text="2/5 Interleaved" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
       <TextObject Name="Text33" Left="179.55" Top="37.8" Width="170.1" Height="132.3" Border.Lines="Left, Right, Bottom" Border.Color="Silver" Text="2/5 Industrial" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
       <TextObject Name="Text34" Left="349.65" Top="37.8" Width="170.1" Height="132.3" Border.Lines="Left, Right, Bottom" Border.Color="Silver" Text="2/5 Matrix" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
-      <TextObject Name="Text35" Left="9.45" Top="170.1" Width="170.1" Height="132.3" Border.Lines="Left, Right, Bottom" Border.Color="Silver" Text="Codabar" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
-      <TextObject Name="Text36" Left="179.55" Top="170.1" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="Code39" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
-      <TextObject Name="Text37" Left="519.75" Top="170.1" Width="189" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="Code93" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
-      <TextObject Name="Text38" Left="179.55" Top="302.4" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="Code128 (A, B, C), autoencode" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
+      <TextObject Name="Text35" Left="9.45" Top="170.1" Width="170.1" Height="132.3" Border.Lines="Left, Right, Bottom" Border.Color="Silver" Text="Code39" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
+      <TextObject Name="Text36" Left="179.55" Top="170.1" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="Code39 Extended" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
+      <TextObject Name="Text37" Left="519.75" Top="170.1" Width="189" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="Code93 Extended" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
+      <TextObject Name="Text38" Left="179.55" Top="302.4" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="Deutsche Post Identcode" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
       <TextObject Name="Text39" Left="349.65" Top="302.4" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="EAN8" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
       <TextObject Name="Text40" Left="519.75" Top="302.4" Width="189" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="EAN13" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
-      <TextObject Name="Text41" Left="9.45" Top="434.7" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="UPC-A" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
-      <TextObject Name="Text42" Left="179.55" Top="434.7" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="UPC-E (E0, E1)" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
-      <TextObject Name="Text43" Left="349.65" Top="434.7" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="Supplement code (2 or 5 digits)" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
-      <TextObject Name="Text44" Left="519.75" Top="434.7" Width="189" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="MSI" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
-      <TextObject Name="Text45" Left="9.45" Top="567" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="PostNet" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
-      <BarcodeObject Name="Barcode19" Left="47.25" Top="75.6" Width="80" Height="85.05" Barcode="2/5 Interleaved" Barcode.CalcCheckSum="false"/>
-      <BarcodeObject Name="Barcode20" Left="198.45" Top="75.6" Width="140" Height="85.05" Fill.Color="White" Barcode="2/5 Industrial" Barcode.CalcCheckSum="false"/>
-      <BarcodeObject Name="Barcode21" Left="387.45" Top="75.6" Width="104.69" Height="85.05" Fill.Color="White" Barcode="2/5 Matrix" Barcode.WideBarRatio="2.25" Barcode.CalcCheckSum="false"/>
-      <BarcodeObject Name="Barcode22" Left="28.35" Top="207.9" Width="126.25" Height="85.05" Fill.Color="White" Barcode="Codabar"/>
-      <BarcodeObject Name="Barcode23" Left="189" Top="207.9" Width="145" Height="85.05" Fill.Color="White" Text="123456"/>
-      <BarcodeObject Name="Barcode24" Left="548.1" Top="207.9" Width="136.25" Height="85.05" Fill.Color="White" Barcode="Code93"/>
-      <BarcodeObject Name="Barcode25" Left="217.35" Top="339.2" Width="98.75" Height="85.05" Fill.Color="White" Barcode="Code128" Barcode.AutoEncode="true"/>
-      <BarcodeObject Name="Barcode26" Left="396.9" Top="339.2" Width="83.75" Height="85.05" Fill.Color="White" Barcode="EAN8"/>
-      <BarcodeObject Name="Barcode27" Left="548.1" Top="339.2" Width="128.75" Height="85.05" Fill.Color="White" Text="1234567890123" Barcode="EAN13"/>
-      <BarcodeObject Name="Barcode28" Left="28.35" Top="472.5" Width="138.75" Height="85.05" Fill.Color="White" Text="123456789012" Barcode="UPC-A"/>
-      <TextObject Name="Text49" Left="9.45" Top="302.4" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="Code93 Extended" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
-      <BarcodeObject Name="Barcode36" Left="28.35" Top="340.2" Width="136.25" Height="85.05" Fill.Color="White" Barcode="Code93 Extended"/>
-      <TextObject Name="Text50" Left="349.65" Top="170.1" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="Code39 Extended" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
-      <BarcodeObject Name="Barcode37" Left="359.1" Top="207.9" Width="145" Height="85.05" Fill.Color="White" Text="123456" Barcode="Code39 Extended"/>
-      <BarcodeObject Name="Barcode29" Left="226.8" Top="472.5" Width="83.75" Height="85.05" Fill.Color="White" Text="1234567" Barcode="UPC-E0"/>
-      <BarcodeObject Name="Barcode30" Left="378" Top="472.5" Width="25" Height="56.7" Fill.Color="White" Barcode="Supplement 2"/>
-      <BarcodeObject Name="Barcode31" Left="434.7" Top="472.5" Width="58.75" Height="56.7" Fill.Color="White" Barcode="Supplement 5"/>
-      <BarcodeObject Name="Barcode32" Left="548.1" Top="472.5" Width="143.75" Height="85.05" Fill.Color="White" Barcode="MSI"/>
-      <BarcodeObject Name="Barcode33" Left="18.9" Top="604.8" Width="155" Height="85.05" Fill.Color="White" Barcode="PostNet"/>
-      <TextObject Name="Text53" Left="179.55" Top="567" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="Plessey" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
-      <TextObject Name="Text54" Left="349.65" Top="567" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="GS1-128 (UCC/EAN-128)" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
+      <TextObject Name="Text41" Left="9.45" Top="434.7" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="GS1-128 (UCC/EAN-128)" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
+      <TextObject Name="Text42" Left="179.55" Top="434.7" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="ITF-14" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
+      <TextObject Name="Text43" Left="349.65" Top="434.7" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="MSI" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
+      <TextObject Name="Text44" Left="519.75" Top="434.7" Width="189" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="Pharmacode" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
+      <TextObject Name="Text45" Left="9.45" Top="567" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="Plessey" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
+      <TextObject Name="Text49" Left="9.45" Top="302.4" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="Code128 (A, B, C), autoencode" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
+      <TextObject Name="Text50" Left="349.65" Top="170.1" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="Code93" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
+      <TextObject Name="Text53" Left="179.55" Top="567" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="PostNet" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
+      <TextObject Name="Text54" Left="349.65" Top="567" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="Supplement (2 and 5 digits)" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
       <TextObject Name="Text1" Left="9.45" Width="699.3" Height="37.8" Fill.Color="Orange" Text="LINEAR BARCODES" VertAlign="Center" Font="Tahoma, 16pt"/>
-      <BarcodeObject Name="Barcode40" Left="189" Top="604.8" Width="153.75" Height="85.05" Fill.Color="White" Text="123456" AllowExpressions="true" Barcode="Plessey"/>
-      <BarcodeObject Name="Barcode1" Left="368.55" Top="604.8" Width="126.25" Height="85.05" Text="(10)123456" AllowExpressions="true" Barcode="GS1-128 (UCC/EAN-128)" Barcode.AutoEncode="true"/>
       <TextObject Name="Text48" Left="9.45" Top="841.05" Width="680.4" Height="37.8" Fill.Color="Orange" Text="2D BARCODES" VertAlign="Center" Font="Tahoma, 16pt"/>
-      <TextObject Name="Text55" Left="519.75" Top="567" Width="189" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="Pharmacode" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
-      <BarcodeObject Name="Barcode2" Left="567" Top="604.8" Width="98.75" Height="85.05" Text="123456" AllowExpressions="true" Barcode="Pharmacode" Barcode.QuietZone="true"/>
-      <TextObject Name="Text56" Left="9.45" Top="699.3" Width="510.3" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="Intelligent Mail (USPS)" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
-      <BarcodeObject Name="Barcode3" Left="66.15" Top="746.55" Width="402.5" Height="56.7" Text="12345678901234567890" AllowExpressions="true" Barcode="Intelligent Mail (USPS)" Barcode.QuietZone="false"/>
+      <TextObject Name="Text55" Left="519.75" Top="567" Width="189" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="UPC-A" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
+      <TextObject Name="Text56" Left="179.6" Top="699.3" Width="529.15" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="Intelligent Mail (USPS)" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
       <TextObject Name="Text57" Left="9.45" Top="1105.65" Width="226.8" Height="226.8" Border.Lines="Left, Right, Bottom" Border.Color="Silver" Text="PDF417 (text/numeric/binary)" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
       <TextObject Name="Text58" Left="463.05" Top="878.85" Width="226.8" Height="226.8" Border.Lines="Left, Right, Bottom" Border.Color="Silver" Text="Datamatrix" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
       <TextObject Name="Text59" Left="9.45" Top="878.85" Width="226.8" Height="226.8" Border.Lines="Left, Right, Bottom" Border.Color="Silver" Text="QR Code" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
       <TextObject Name="Text60" Left="236.25" Top="878.85" Width="226.8" Height="226.8" Border.Lines="Left, Right, Bottom" Border.Color="Silver" Text="Aztec Code" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
+      <TextObject Name="Text62" Left="462.72" Top="1105.65" Width="226.8" Height="226.8" Border.Lines="Right, Bottom" Border.Color="Silver" Text="Swiss QR Code" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
+      <TextObject Name="Text64" Left="9.45" Top="699.3" Width="170.1" Height="132.3" Border.Lines="All" Border.Color="Silver" Text="USP E (0 and 1)" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
+      <BarcodeObject Name="Barcode49" Left="192" Top="336" Width="146.25" Height="86.4" Text="12345123456" Barcode="Deutsche Identcode" Barcode.WideBarRatio="3" Barcode.DrawVerticalBearerBars="True"/>
+      <BarcodeObject Name="Barcode48" Left="185.6" Top="471.3" Width="157.66" Height="85.05" AutoSize="false" Barcode="ITF-14" Barcode.WideBarRatio="2.25" Barcode.DrawVerticalBearerBars="True"/>
+	  <BarcodeObject Name="Barcode19" Left="47.25" Top="75.6" Width="80" Height="85.05" Barcode="2/5 Interleaved" Barcode.CalcCheckSum="false"/>
+      <BarcodeObject Name="Barcode20" Left="198.45" Top="75.6" Width="140" Height="85.05" Fill.Color="White" Barcode="2/5 Industrial" Barcode.CalcCheckSum="false"/>
+      <BarcodeObject Name="Barcode21" Left="387.45" Top="75.6" Width="104.69" Height="85.05" Fill.Color="White" Barcode="2/5 Matrix" Barcode.WideBarRatio="2.25" Barcode.CalcCheckSum="false"/>
+      <BarcodeObject Name="Barcode22" Left="550.67" Top="73.5" Width="126.25" Height="85.05" Fill.Color="White" Barcode="Codabar"/>
+      <BarcodeObject Name="Barcode23" Left="21.92" Top="207.9" Width="145" Height="85.05" Fill.Color="White" Text="123456"/>
+      <BarcodeObject Name="Barcode24" Left="365.7" Top="207.9" Width="136.25" Height="85.05" Fill.Color="White" Barcode="Code93"/>
+      <BarcodeObject Name="Barcode25" Left="44.55" Top="339.2" Width="98.75" Height="85.05" Fill.Color="White" Barcode="Code128" Barcode.AutoEncode="true"/>
+      <BarcodeObject Name="Barcode26" Left="393.12" Top="339.2" Width="83.75" Height="85.05" Fill.Color="White" Barcode="EAN8"/>
+      <BarcodeObject Name="Barcode27" Left="548.1" Top="339.2" Width="128.75" Height="85.05" Fill.Color="White" Text="1234567890123" Barcode="EAN13"/>
+      <BarcodeObject Name="Barcode28" Left="548.1" Top="604.8" Width="138.75" Height="85.05" Fill.Color="White" Text="123456789012" Barcode="UPC-A"/>
+	  <BarcodeObject Name="Barcode36" Left="546.75" Top="205.8" Width="136.25" Height="85.05" Fill.Color="White" Barcode="Code93 Extended"/>      
+      <BarcodeObject Name="Barcode37" Left="195.9" Top="207.9" Width="145" Height="85.05" Fill.Color="White" Text="123456" Barcode="Code39 Extended"/>
+      <BarcodeObject Name="Barcode29" Left="47.25" Top="737.1" Width="83.75" Height="85.05" Fill.Color="White" Text="1234567" Barcode="UPC-E0"/>
+      <BarcodeObject Name="Barcode30" Left="378" Top="604.8" Width="25" Height="56.7" Fill.Color="White" Barcode="Supplement 2"/>
+      <BarcodeObject Name="Barcode31" Left="434.7" Top="604.8" Width="58.75" Height="56.7" Fill.Color="White" Barcode="Supplement 5"/>
+      <BarcodeObject Name="Barcode32" Left="362.88" Top="472.5" Width="143.75" Height="85.05" Fill.Color="White" Barcode="MSI"/>
+      <BarcodeObject Name="Barcode33" Left="189" Top="604.8" Width="155" Height="85.05" Fill.Color="White" Barcode="PostNet"/>
+      <BarcodeObject Name="Barcode40" Left="18.9" Top="604.8" Width="153.75" Height="85.05" Fill.Color="White" Text="123456" AllowExpressions="true" Barcode="Plessey"/>
+      <BarcodeObject Name="Barcode1" Left="37.8" Top="472.5" Width="126.25" Height="85.05" Text="(10)123456" AllowExpressions="true" Barcode="GS1-128 (UCC/EAN-128)" Barcode.AutoEncode="true"/>
+      <BarcodeObject Name="Barcode2" Left="567" Top="472.5" Width="98.75" Height="85.05" Text="123456" AllowExpressions="true" Barcode="Pharmacode" Barcode.QuietZone="true"/>
+      <BarcodeObject Name="Barcode3" Left="248.55" Top="746.55" Width="402.5" Height="56.7" Text="12345678901234567890" AllowExpressions="true" Barcode="Intelligent Mail (USPS)" Barcode.QuietZone="false"/>
       <BarcodeObject Name="Barcode42" Left="274.05" Top="1152.9" Width="154.5" Height="154.5" AutoSize="false" Text="http://fast-report.com" ShowText="false" AllowExpressions="true" Barcode="MaxiCode" Barcode.Mode="4"/>
       <BarcodeObject Name="Barcode43" Left="37.8" Top="1171.8" Width="171.05" Height="111.35" AutoSize="false" ShowText="false" Barcode="PDF417" Barcode.AspectRatio="0.5" Barcode.Columns="0" Barcode.Rows="0" Barcode.CodePage="437" Barcode.CompactionMode="Auto" Barcode.ErrorCorrection="Auto" Barcode.PixelSize="1, 5"/>
       <BarcodeObject Name="Barcode44" Left="510.3" Top="926.1" Width="128.7" Height="128.7" AutoSize="false" ShowText="false" AllowExpressions="true" Barcode="Datamatrix" Barcode.SymbolSize="Size24x24" Barcode.Encoding="Auto" Barcode.CodePage="1252" Barcode.PixelSize="3" Barcode.AutoEncode="true"/>
       <BarcodeObject Name="Barcode45" Left="56.7" Top="926.1" Width="132.3" Height="132.3" AutoSize="false" Text="http://fast-report.com" ShowText="false" AllowExpressions="true" Barcode="QR Code" Barcode.ErrorCorrection="L" Barcode.Encoding="UTF8" Barcode.QuietZone="false"/>
       <BarcodeObject Name="Barcode46" Left="283.5" Top="926.1" Width="135.6" Height="135.6" AutoSize="false" Text="http://fast-report.com" ShowText="false" AllowExpressions="true" Barcode="Aztec" Barcode.ErrorCorrection="33"/>
-      <TextObject Name="Text62" Left="462.72" Top="1105.65" Width="226.8" Height="226.8" Border.Lines="Right, Bottom" Border.Color="Silver" Text="Swiss QR Code" Padding="2, 10, 2, 0" HorzAlign="Center" Font="Tahoma, 8pt"/>
-      <BarcodeObject Name="Barcode47" Left="499.2" Top="1152" Width="154.4" Height="154.4" AutoSize="false" Text="SPC&#13;&#10;0200&#13;&#10;1&#13;&#10;CH4431999123000889012&#13;&#10;S&#13;&#10;FastReports&#13;&#10;North Pitt Str&#13;&#10;901&#13;&#10;123456&#13;&#10;Alexandria&#13;&#10;US&#13;&#10;&#13;&#10;&#13;&#10;&#13;&#10;&#13;&#10;&#13;&#10;&#13;&#10;&#13;&#10;1000&#13;&#10;EUR&#13;&#10;S&#13;&#10;Debitor&#13;&#10;Street&#13;&#10;1&#13;&#10;1234&#13;&#10;City&#13;&#10;AG&#13;&#10;QRR&#13;&#10;210000000003139471430009017&#13;&#10;Unstructured message&#13;&#10;EPD&#13;&#10;Bill information&#13;&#10;Alt 1&#13;&#10;Alt 2" ShowText="false" AllowExpressions="true" Barcode="QR Code" Barcode.ErrorCorrection="M" Barcode.Encoding="UTF8" Barcode.QuietZone="false"/>
-      <BarcodeObject Name="Barcode48" Left="529.2" Top="75.6" Width="176.56" Height="85.05" Barcode="ITF-14" Barcode.WideBarRatio="2.25" Barcode.DrawVerticalBearerBars="True"/>
-    </DataBand>
-    <PageFooterBand Name="PageFooter1" Top="1510.02" Width="718.2" Height="28.35" Fill.Color="WhiteSmoke">
+	  <BarcodeObject Name="Barcode47" Left="499.2" Top="1152" Width="154.4" Height="154.4" AutoSize="false" Text="SPC&#13;&#10;0200&#13;&#10;1&#13;&#10;CH4431999123000889012&#13;&#10;S&#13;&#10;FastReports&#13;&#10;North Pitt Str&#13;&#10;901&#13;&#10;123456&#13;&#10;Alexandria&#13;&#10;US&#13;&#10;&#13;&#10;&#13;&#10;&#13;&#10;&#13;&#10;&#13;&#10;&#13;&#10;&#13;&#10;1000&#13;&#10;EUR&#13;&#10;S&#13;&#10;Debitor&#13;&#10;Street&#13;&#10;1&#13;&#10;1234&#13;&#10;City&#13;&#10;AG&#13;&#10;QRR&#13;&#10;210000000003139471430009017&#13;&#10;Unstructured message&#13;&#10;EPD&#13;&#10;Bill information&#13;&#10;Alt 1&#13;&#10;Alt 2" ShowText="false" AllowExpressions="true" Barcode="QR Code" Barcode.ErrorCorrection="M" Barcode.Encoding="UTF8" Barcode.QuietZone="false"/>      
+	  <BarcodeObject Name="Barcode47" Left="499.2" Top="1152" Width="154.4" Height="154.4" AutoSize="false" Text="SPC&#13;&#10;0200&#13;&#10;1&#13;&#10;CH4431999123000889012&#13;&#10;S&#13;&#10;FastReports&#13;&#10;North Pitt Str&#13;&#10;901&#13;&#10;123456&#13;&#10;Alexandria&#13;&#10;US&#13;&#10;&#13;&#10;&#13;&#10;&#13;&#10;&#13;&#10;&#13;&#10;&#13;&#10;&#13;&#10;1000&#13;&#10;EUR&#13;&#10;S&#13;&#10;Debitor&#13;&#10;Street&#13;&#10;1&#13;&#10;1234&#13;&#10;City&#13;&#10;AG&#13;&#10;QRR&#13;&#10;210000000003139471430009017&#13;&#10;Unstructured message&#13;&#10;EPD&#13;&#10;Bill information&#13;&#10;Alt 1&#13;&#10;Alt 2" ShowText="false" AllowExpressions="true" Barcode="QR Code" Barcode.ErrorCorrection="M" Barcode.Encoding="UTF8" Barcode.QuietZone="false"/> 
+	</DataBand>
+    <PageFooterBand Name="PageFooter1" Top="1510.78" Width="718.2" Height="28.35" Fill.Color="WhiteSmoke">
       <TextObject Name="Text31" Left="9.45" Width="217.35" Height="28.35" Cursor="Hand" Hyperlink.Value="https://www.fast-report.com/en/product/fast-report-net/" Text="Generated by FastReport .NET" VertAlign="Center" Font="Tahoma, 8pt, style=Underline" TextFill.Color="Blue"/>
     </PageFooterBand>
   </ReportPage>
diff --git a/Demos/Reports/reports.xml b/Demos/Reports/reports.xml
index e7d10cd3..4609b58f 100644
--- a/Demos/Reports/reports.xml
+++ b/Demos/Reports/reports.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Reports>
-  <Folder Name="General">
+  <Folder Name="General" Description="Reports containing simple objects and demonstrating primitive work with data connection and display.">
     <Report File="Simple List.frx"/>
     <Report File="Groups.frx"/>
     <Report File="Master-Detail.frx"/>
@@ -15,7 +15,7 @@
     <Report File="Inherited Report.frx"  WebDemo="false"/>
     <Report File="Badges.frx" WebDemo="false"/>
   </Folder>
-  <Folder Name="Report Objects">
+  <Folder Name="Report Objects" Description="Reports that superficially show complex objects.">
     <Report File="Text.frx"/>
     <Report File="Image.frx"/>
     <Report File="Lines and Shapes.frx"  WebDemo="false"/>
@@ -35,7 +35,7 @@
     <Report File="Gauge.frx" Basic="false"/>
     <Report File="SVG.frx" Basic="false"/>
   </Folder>
-  <Folder Name="Interactive Reports">
+  <Folder Name="Interactive Reports" Description="Reports showing interactivity capabilities.">
     <Report File="Interactive Report.frx"/>
     <Report File="Interactive Report, 2-in-1.frx"/>
     <Report File="Interactive Matrix.frx" Basic="false"/>
@@ -47,7 +47,7 @@
     <Report File="Handle Preview Clicks.frx" Basic="false" WebDemo="false"/>
     <Report File="Interactive Forms.frx"/>
   </Folder>
-  <Folder Name="Table" Basic="false">
+  <Folder Name="Table" Basic="false" Description="Reports that demonstrate various scenarios for working with a table object.">
     <Report File="Labels.frx"  WebDemo="false"/>
     <Report File="Row Datasource.frx"/>
     <Report File="Column Datasource.frx"  WebDemo="false"/>
@@ -60,7 +60,7 @@
     <Report File="Row Datasource, Master-Detail.frx"  WebDemo="false"/>
     <Report File="Fit Dynamic Table To Page.frx"  WebDemo="false"/>
   </Folder>
-  <Folder Name="Matrix" Basic="false">
+  <Folder Name="Matrix" Basic="false" Description="Reports showing the various capabilities of the matrix.">
     <Report File="Simple Matrix.frx"  WebDemo="false"/>
     <Report File="Matrix With Rows Only.frx"  WebDemo="false"/>
     <Report File="Matrix With Columns Only.frx"  WebDemo="false"/>
@@ -77,7 +77,7 @@
     <Report File="Pictures Inside The Matrix.frx"/>
     <Report File="Two Matrices.frx"  WebDemo="false"/>
   </Folder>
-  <Folder Name="Dialogs" Core="false" Basic="false">
+  <Folder Name="Dialogs" Core="false" Basic="false" Description="Reports that demonstrate how dialog boxes work.">
     <Report File="Hello, FastReport!.frx"/>
     <Report File="Print Entered Value.frx"/>
     <Report File="Filtering with CheckedListBox.frx"  WebDemo="false"/>
@@ -87,20 +87,20 @@
     <Report File="Cascaded Data Filtering.frx"/>
     <Report File="Labels With Dialog.frx"  WebDemo="false"/>
   </Folder>
-  <Folder Name="Script" WebDemo="false" Basic="false">
+  <Folder Name="Script" WebDemo="false" Basic="false" Description="Reports showing how scripts work.">
     <Report File="Print Total in The Group Header.frx"/>
     <Report File="Sort Group By Total.frx"/>
     <Report File="Shift Object Position.frx"/>
     <Report File="Dialog Events.frx"/>
     <Report File="Handle Dialog Forms.frx"/>
   </Folder>
-  <Folder Name="Charts" Core="false" Basic="false">
+  <Folder Name="Charts" Core="false" Basic="false" Description="Reports with sample charts, and their combination with other features.">
     <Report File="About Microsoft Chart.frx" WebDemo="false"/>
     <Report File="Microsoft Chart Sample.frx"/>
     <Report File="Interactive Chart.frx"  WebDemo="false"/>
     <Report File="Sparkline.frx" />
   </Folder>
-  <Folder Name="Maps" Core="false" Basic="false">
+  <Folder Name="Maps" Core="false" Basic="false" Description="Reports with sample maps, and their combination with other features.">
     <Report File="World Map.frx"/>
     <Report File="USA Map.frx"/>
     <Report File="World Sales.frx"/>
@@ -109,7 +109,7 @@
     <Report File="World Sales, Interactive.frx"/>
     <Report File="World Sales by City.frx"/>
   </Folder>
-  <Folder Name="Features">
+  <Folder Name="Features" Description="Reports that demonstrate interesting and unusual features.">
     <Report File="Double Pass, Total Pages.frx"  WebDemo="false"/>
     <Report File="Odd-Even Rows.frx"/>
     <Report File="Odd-Even Pages, Mirror Margins.frx"  WebDemo="false"/>
@@ -126,7 +126,7 @@
     <Report File="Print Copy Names.frx"  WebDemo="false"/>
     <Report File="Box.frx" Basic="false" WebDemo="false"/>
     <Report File="Unicode.frx" />
-	<Report File="TextureFill.frx" />
+	  <Report File="TextureFill.frx" />
     <Report File="Purchase Order.frx" Basic="false"  WebDemo="false"/>
   </Folder>
 </Reports>
diff --git a/Extras/Core/FastReport.Data/FastReport.Data.MySql/FastReport.Data.MySql.csproj b/Extras/Core/FastReport.Data/FastReport.Data.MySql/FastReport.Data.MySql.csproj
index ce985946..b826cb3f 100644
--- a/Extras/Core/FastReport.Data/FastReport.Data.MySql/FastReport.Data.MySql.csproj
+++ b/Extras/Core/FastReport.Data/FastReport.Data.MySql/FastReport.Data.MySql.csproj
@@ -25,10 +25,10 @@
             <PrivateAssets>all</PrivateAssets>
         </ProjectReference>
     </ItemGroup>
-    <ItemGroup >
+    <ItemGroup>
         <PackageReference Include="MySql.Data" Version="[6.7.9,)" />
     </ItemGroup>
-    <ItemGroup >
+    <ItemGroup>
         <Reference Include="System" />
         <Reference Include="System.Data" />
         <Reference Include="System.Design" />
@@ -38,14 +38,12 @@
         <Reference Include="System.Xml" />
     </ItemGroup>
     <ItemGroup>
-        <Compile Update="MySqlConnectionEditor.cs">
-            <SubType>UserControl</SubType>
-        </Compile>
+        <Compile Update="MySqlConnectionEditor.cs" />
         <Compile Update="MySqlConnectionEditor.Designer.cs">
             <DependentUpon>MySqlConnectionEditor.cs</DependentUpon>
         </Compile>
     </ItemGroup>
-    <ItemGroup >
+    <ItemGroup>
         <EmbeddedResource Update="MySqlConnectionEditor.resx">
             <DependentUpon>MySqlConnectionEditor.cs</DependentUpon>
             <SubType>Designer</SubType>
diff --git a/Extras/Core/FastReport.Data/FastReport.Data.OracleODPCore/FastReport.Data.OracleODPCore.csproj b/Extras/Core/FastReport.Data/FastReport.Data.OracleODPCore/FastReport.Data.OracleODPCore.csproj
index 41563cfb..84a78239 100644
--- a/Extras/Core/FastReport.Data/FastReport.Data.OracleODPCore/FastReport.Data.OracleODPCore.csproj
+++ b/Extras/Core/FastReport.Data/FastReport.Data.OracleODPCore/FastReport.Data.OracleODPCore.csproj
@@ -48,8 +48,6 @@
         </EmbeddedResource>
     </ItemGroup>
     <ItemGroup>
-        <Compile Update="OracleConnectionEditor.cs">
-            <SubType>UserControl</SubType>
-        </Compile>
+        <Compile Update="OracleConnectionEditor.cs" />
     </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/FastReport.Base/Barcode/Barcode2of5.cs b/FastReport.Base/Barcode/Barcode2of5.cs
index be7024aa..e18ee9d9 100644
--- a/FastReport.Base/Barcode/Barcode2of5.cs
+++ b/FastReport.Base/Barcode/Barcode2of5.cs
@@ -6,12 +6,12 @@
 
 namespace FastReport.Barcode
 {
-  /// <summary>
-  /// Generates the "2/5 Interleaved" barcode.
-  /// </summary>
-  public class Barcode2of5Interleaved : LinearBarcodeBase
-  {
-    internal static int[,] tabelle_2_5 = {
+    /// <summary>
+    /// Generates the "2/5 Interleaved" barcode.
+    /// </summary>
+    public class Barcode2of5Interleaved : LinearBarcodeBase
+    {
+        internal static int[,] tabelle_2_5 = {
       {0, 0, 1, 1, 0},    // 0
       {1, 0, 0, 0, 1},    // 1
       {0, 1, 0, 0, 1},    // 2
@@ -24,55 +24,152 @@ public class Barcode2of5Interleaved : LinearBarcodeBase
       {0, 1, 0, 1, 0}     // 9
     };
 
-    internal override string GetPattern()
-    {
-      string text = base.text;
-      string result = "5050";   //Startcode
-      string c;
-
-      if (CalcCheckSum)
-      {
-        if (text.Length % 2 == 0)
-          text = text.Substring(1, text.Length - 1);
-        text = DoCheckSumming(text);
-      }
-      else
-      {
-        if (text.Length % 2 != 0)
-          text = "0" + text;
-      }
-
-      for (int i = 0; i < (text.Length / 2); i++)
-      {
-        for (int j = 0; j <= 4; j++)
+        internal override string GetPattern()
         {
-          if (tabelle_2_5[CharToInt(text[i * 2]), j] == 1)
-            c = "6";
-          else
-            c = "5";
-          result += c;
-
-          if (tabelle_2_5[CharToInt(text[i * 2 + 1]), j] == 1)
-            c = "1";
-          else
-            c = "0";
-          result += c;
+            string text = base.text;
+            string result = "5050";   //Startcode
+            string c;
+
+            if (CalcCheckSum)
+            {
+                if (text.Length % 2 == 0)
+                    text = text.Substring(1, text.Length - 1);
+                text = DoCheckSumming(text);
+            }
+            else
+            {
+                if (text.Length % 2 != 0)
+                    text = "0" + text;
+            }
+
+            for (int i = 0; i < (text.Length / 2); i++)
+            {
+                for (int j = 0; j <= 4; j++)
+                {
+                    if (tabelle_2_5[CharToInt(text[i * 2]), j] == 1)
+                        c = "6";
+                    else
+                        c = "5";
+                    result += c;
+
+                    if (tabelle_2_5[CharToInt(text[i * 2 + 1]), j] == 1)
+                        c = "1";
+                    else
+                        c = "0";
+                    result += c;
+                }
+            }
+
+            result += "605";    // Stopcode
+            return result;
         }
-      }
 
-      result += "605";    // Stopcode
-      return result;
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Barcode2of5Interleaved"/> class with default settings.
+        /// </summary>
+        public Barcode2of5Interleaved()
+        {
+            ratioMin = 2;
+            ratioMax = 3;
+        }
     }
-
     /// <summary>
-    /// Initializes a new instance of the <see cref="Barcode2of5Interleaved"/> class with default settings.
+    /// Generates the "Deutsche Identcode" barcode.
     /// </summary>
-    public Barcode2of5Interleaved()
+    public class BarcodeDeutscheIdentcode : Barcode2of5Interleaved
     {
-      ratioMin = 2;
-      ratioMax = 3;
+        #region Properties
+        /// <summary>
+        /// Gets or sets a value that indicates that CheckSum should be printed.
+        /// </summary>
+        [System.ComponentModel.DefaultValue(true)]
+        [System.ComponentModel.Category("Appearance")]
+        public bool PrintCheckSum { get; set; }
+
+        #endregion 
+
+        internal override string GetPattern()
+        {
+            string result = "5050";   //Startcode
+            string c;
+            string text = base.text.Replace(".", "").Replace(" ", "");
+
+            if(CalcCheckSum)
+            {
+                if (text.Length == 11)
+                    text = DoCheckSumming(text);
+                else if (text.Length != 12)
+                    throw new Exception(Res.Get("Messages,BarcodeLengthMismatch"));
+
+            }
+            else
+            {
+                if(text.Length != 12)
+                    throw new Exception(Res.Get("Messages,BarcodeLengthMismatch"));
+            }
+
+            for (int i = 0; i < (text.Length / 2); i++)
+            {
+                for (int j = 0; j <= 4; j++)
+                {
+                    if (tabelle_2_5[CharToInt(text[i * 2]), j] == 1)
+                        c = "6";
+                    else
+                        c = "5";
+                    result += c;
+
+                    if (tabelle_2_5[CharToInt(text[i * 2 + 1]), j] == 1)
+                        c = "1";
+                    else
+                        c = "0";
+                    result += c;
+                }
+            }
+
+            result += "605";    // Stopcode
+
+            base.text = text.Insert(2, ".").Insert(6, " ").Insert(10, ".");
+
+            if(!PrintCheckSum)
+            {
+                base.text = base.text.Substring(0, base.text.Length - 1);
+            }
+            else
+                base.text = base.text.Insert(14, " ");           
+
+
+            return result;
+        }
+
+        /// <inheritdoc/>
+        public override void Assign(BarcodeBase source)
+        {
+            base.Assign(source);
+
+            BarcodeDeutscheIdentcode src = source as BarcodeDeutscheIdentcode;
+            PrintCheckSum = src.PrintCheckSum;
+        }
+        internal override void Serialize(FRWriter writer, string prefix, BarcodeBase diff)
+        {
+            base.Serialize(writer, prefix, diff);
+            BarcodeDeutscheIdentcode c = diff as BarcodeDeutscheIdentcode;
+
+            if (c == null || PrintCheckSum != c.PrintCheckSum)
+                writer.WriteValue(prefix + "DrawVerticalBearerBars", PrintCheckSum);
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="BarcodeDeutscheIdentcode"/> class with default settings.
+        /// </summary>
+        public BarcodeDeutscheIdentcode()
+        {
+            ratioMin = 2.25F;
+            ratioMax = 3.5F;
+            WideBarRatio = 3F;
+            PrintCheckSum = true;
+        }
     }
-  }
+
 
     /// <summary>
     /// Generates the "ITF-14" barcode.
@@ -108,7 +205,7 @@ public bool DrawVerticalBearerBars
         internal override string GetPattern()
         {
             string result = "";   // Startcode
-            for(int i = 0; i < 14; i++)//10 for light margin and 4 for vertical bearer bar
+            for (int i = 0; i < 14; i++)//10 for light margin and 4 for vertical bearer bar
             {
                 result += "0";
             }
@@ -175,7 +272,7 @@ public override void Assign(BarcodeBase source)
         }
 
         public override void DrawBarcode(IGraphicsRenderer g, RectangleF displayRect)
-        {          
+        {
             base.DrawBarcode(g, displayRect);
             float bearerWidth = WideBarRatio * 2 * zoom;
             using (Pen pen = new Pen(Color, bearerWidth))
@@ -216,78 +313,78 @@ public BarcodeITF14()
     /// Generates the "2/5 Industrial" barcode.
     /// </summary>
     public class Barcode2of5Industrial : Barcode2of5Interleaved
-  {
-    internal override string GetPattern()
     {
-      string text = base.text;
-      string result = "606050";   // Startcode
-
-      if (CalcCheckSum)
-      {
-        text = DoCheckSumming(text);
-      }
-
-      for (int i = 0; i < text.Length; i++)
-      {
-        for (int j = 0; j <= 4; j++)
+        internal override string GetPattern()
         {
-          if (tabelle_2_5[CharToInt(text[i]), j] == 1)
-            result += "60";
-          else
-            result += "50";
-        }
-      }
+            string text = base.text;
+            string result = "606050";   // Startcode
 
-      result += "605060";   //Stopcode 
-      return result;
-    }
-  }
-
-  /// <summary>
-  /// Generates the "2/5 Matrix" barcode.
-  /// </summary>
-  public class Barcode2of5Matrix : Barcode2of5Interleaved
-  {
-    internal override string GetPattern()
-    {
-      string text = base.text;
-      string result = "705050";   // Startcode
-      char c;
-
-      if (CalcCheckSum)
-      {
-        text = DoCheckSumming(text);
-      }
-
-      for (int i = 0; i < text.Length; i++)
-      {
-        for (int j = 0; j <= 4; j++)
-        {
-          if (tabelle_2_5[CharToInt(text[i]), j] == 1)
-            c = '1';
-          else
-            c = '0';
-
-          if ((j % 2) == 0)
-            c = (char)((int)c + 5);
-          result += c;
-        }
-        result += '0';
-      }
+            if (CalcCheckSum)
+            {
+                text = DoCheckSumming(text);
+            }
 
-      result = result + "70505";   // Stopcode
+            for (int i = 0; i < text.Length; i++)
+            {
+                for (int j = 0; j <= 4; j++)
+                {
+                    if (tabelle_2_5[CharToInt(text[i]), j] == 1)
+                        result += "60";
+                    else
+                        result += "50";
+                }
+            }
 
-      return result;
+            result += "605060";   //Stopcode 
+            return result;
+        }
     }
 
     /// <summary>
-    /// Initializes a new instance of the <see cref="Barcode2of5Matrix"/> class with default settings.
+    /// Generates the "2/5 Matrix" barcode.
     /// </summary>
-    public Barcode2of5Matrix()
+    public class Barcode2of5Matrix : Barcode2of5Interleaved
     {
-      ratioMin = 2.25f;
-      ratioMax = 3;
-      WideBarRatio = 2.25f;
+        internal override string GetPattern()
+        {
+            string text = base.text;
+            string result = "705050";   // Startcode
+            char c;
+
+            if (CalcCheckSum)
+            {
+                text = DoCheckSumming(text);
+            }
+
+            for (int i = 0; i < text.Length; i++)
+            {
+                for (int j = 0; j <= 4; j++)
+                {
+                    if (tabelle_2_5[CharToInt(text[i]), j] == 1)
+                        c = '1';
+                    else
+                        c = '0';
+
+                    if ((j % 2) == 0)
+                        c = (char)((int)c + 5);
+                    result += c;
+                }
+                result += '0';
+            }
+
+            result = result + "70505";   // Stopcode
+
+            return result;
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Barcode2of5Matrix"/> class with default settings.
+        /// </summary>
+        public Barcode2of5Matrix()
+        {
+            ratioMin = 2.25f;
+            ratioMax = 3;
+            WideBarRatio = 2.25f;
+        }
     }
-  }
 }
diff --git a/FastReport.Base/Barcode/BarcodeObject.cs b/FastReport.Base/Barcode/BarcodeObject.cs
index 11f8c81b..830de168 100644
--- a/FastReport.Base/Barcode/BarcodeObject.cs
+++ b/FastReport.Base/Barcode/BarcodeObject.cs
@@ -656,6 +656,7 @@ public BarcodeItem(Type objType, string barcodeName)
             new BarcodeItem(typeof(Barcode2of5Interleaved), "2/5 Interleaved"),
             new BarcodeItem(typeof(Barcode2of5Industrial), "2/5 Industrial"),
             new BarcodeItem(typeof(Barcode2of5Matrix), "2/5 Matrix"),
+            new BarcodeItem(typeof(BarcodeDeutscheIdentcode), "Deutsche Identcode"),
             new BarcodeItem(typeof(BarcodeITF14), "ITF-14"),
             new BarcodeItem(typeof(BarcodeCodabar), "Codabar"),
             new BarcodeItem(typeof(Barcode128), "Code128"),
diff --git a/FastReport.Base/Code/AssemblyDescriptor.cs b/FastReport.Base/Code/AssemblyDescriptor.cs
index d90ff99e..3e18f37d 100644
--- a/FastReport.Base/Code/AssemblyDescriptor.cs
+++ b/FastReport.Base/Code/AssemblyDescriptor.cs
@@ -477,6 +477,57 @@ private bool HandleCompileErrors(CompilerParameters cp, CompilerResults cr, out
         {
             errors = string.Empty;
             List<string> assemblyList = new List<string>(4);
+            Regex regex;
+            
+            if (Config.WebMode && Config.EnableScriptSecurity)
+            {
+                for (int i=0; i < cr.Errors.Count; )
+                {
+                    CompilerError ce = cr.Errors[i];
+                    if (ce.ErrorNumber == "CS1685") // duplicate class
+                    {
+                        cr.Errors.Remove(ce);
+                        continue;
+                    }
+                    else if (ce.ErrorNumber == "CS0436") // user using a forbidden type 
+                    {
+                        const string pattern = "[\"'](\\S+)[\"']";
+                        regex = new Regex(pattern, RegexOptions.Compiled);
+                        string typeName = regex.Match(ce.ErrorText).Value;
+
+                        const string res = "Web,ScriptSecurity,ForbiddenType";
+                        string message = Res.TryGet(res);
+                        if(string.Equals(res, message))
+                            message = "Please, don't use the type " + typeName;
+                        else
+                            message = message.Replace("{typeName}", typeName); //$"Please, don't use the type {typeName}";
+
+                        ce.ErrorText = message;
+                        
+                    }
+                    else if (ce.ErrorNumber == "CS0117") // user using a forbidden method
+                    {
+                        const string pattern = "[\"'](\\S+)[\"']";
+                        regex = new Regex(pattern, RegexOptions.Compiled);
+                        MatchCollection mathes = regex.Matches(ce.ErrorText);
+                        if(mathes.Count > 1)
+                        {
+                            string methodName = mathes[1].Value;
+
+                            const string res = "Web,ScriptSecurity,ForbiddenMethod";
+                            string message = Res.TryGet(res);
+                            if (string.Equals(res, message))
+                                message = "Please, don't use the method " + methodName;
+                            else 
+                                message = message.Replace("{methodName}", methodName); //$"Please, don't use the method {methodName}";
+
+                            ce.ErrorText = message;
+                        }
+                    }
+
+                    i++;
+                }
+            }
 
             foreach (CompilerError ce in cr.Errors)
             {
@@ -486,7 +537,7 @@ private bool HandleCompileErrors(CompilerParameters cp, CompilerResults cr, out
                     try
                     {
                         const string pattern = @"'(\S{1,}),";
-                        Regex regex = new Regex(pattern);
+                        regex = new Regex(pattern, RegexOptions.Compiled);
                         string assemblyName = regex.Match(ce.ErrorText).Groups[1].Value;   // Groups[1] include string without ' and , symbols
                         if (!assemblyList.Contains(assemblyName))
                             assemblyList.Add(assemblyName);
diff --git a/FastReport.Base/Data/JsonConnection/JsonDataSourceConnection.cs b/FastReport.Base/Data/JsonConnection/JsonDataSourceConnection.cs
index 28d28bfe..21374a96 100644
--- a/FastReport.Base/Data/JsonConnection/JsonDataSourceConnection.cs
+++ b/FastReport.Base/Data/JsonConnection/JsonDataSourceConnection.cs
@@ -208,11 +208,13 @@ private void InitConnection(bool rebuildSchema)
                         req.Headers.Add(header.Key, header.Value);
                     }
 
-                    using (var response = req.GetResponse())
+                    using (var response = req.GetResponse() as HttpWebResponse)
                     {
-                        byte[] data = new byte[2048];
-                        response.GetResponseStream().Read(data, 0, data.Length);
-                        jsonText = Encoding.UTF8.GetString(data);
+                        var encoding = Encoding.GetEncoding(response.CharacterSet);
+
+                        using (var responseStream = response.GetResponseStream())
+                        using (var reader = new System.IO.StreamReader(responseStream, encoding))
+                            jsonText = reader.ReadToEnd();
                     }
 
                 }
diff --git a/FastReport.Base/PictureObject.cs b/FastReport.Base/PictureObject.cs
index fc8754b4..d45c0d0d 100644
--- a/FastReport.Base/PictureObject.cs
+++ b/FastReport.Base/PictureObject.cs
@@ -56,7 +56,7 @@ public partial class PictureObject : PictureObjectBase
         private bool shouldDisposeImage;
         private Bitmap grayscaleBitmap;
         private int grayscaleHash;
-
+        private ImageFormat imageFormat;
         #endregion
 
         #region Properties
@@ -84,10 +84,35 @@ public virtual Image Image
                 UpdateAutoSize();
                 UpdateTransparentImage();
                 ResetImageIndex();
+                imageFormat = CheckImageFormat();
                 ShouldDisposeImage = false;
             }
         }
 
+        /// <summary>
+        /// Gets or sets the expansion of image.
+        /// </summary>
+        [Category("Data")]
+        public virtual ImageFormat ImageFormat
+        {
+            get { return imageFormat; }
+            set
+            {
+                if (image == null)
+                    return;
+                bool wasC = false;
+                using (MemoryStream stream = new MemoryStream())
+                {
+                    wasC = ImageHelper.SaveAndConvert(Image, stream, value);
+                    imageData = stream.ToArray();
+                }
+                if (!wasC)
+                    return;
+                ForceLoadImage();
+                imageFormat = CheckImageFormat();
+            }
+        }
+
         /// <summary>
         /// Gets or sets a value indicating that the image should be displayed in grayscale mode.
         /// </summary>
@@ -229,7 +254,47 @@ protected override float ImageHeight
         #endregion
 
         #region Private Methods
-
+        private ImageFormat CheckImageFormat()
+        {
+            if (Image == null || Image.RawFormat == null)
+                return null;
+            ImageFormat format = null;
+            if (ImageFormat.Jpeg.Equals(image.RawFormat))
+            {
+                format = ImageFormat.Jpeg;
+            }
+            else if (ImageFormat.Gif.Equals(image.RawFormat))
+            {
+                format = ImageFormat.Gif;
+            }
+            else if (ImageFormat.Png.Equals(image.RawFormat))
+            {
+                format = ImageFormat.Png;
+            }
+            else if (ImageFormat.Emf.Equals(image.RawFormat))
+            {
+                format = ImageFormat.Emf;
+            }
+            else if (ImageFormat.Icon.Equals(image.RawFormat))
+            {
+                format = ImageFormat.Icon;
+            }
+            else if (ImageFormat.Tiff.Equals(image.RawFormat))
+            {
+                format = ImageFormat.Tiff;
+            }
+            else if (ImageFormat.Bmp.Equals(image.RawFormat) || ImageFormat.MemoryBmp.Equals(image.RawFormat))
+            {
+                format = ImageFormat.Bmp;
+            }
+            else if (ImageFormat.Wmf.Equals(image.RawFormat))
+            {
+                format = ImageFormat.Wmf;
+            }
+            if (format != null)
+                return format;
+            return ImageFormat.Bmp;
+        }
 
         private void UpdateTransparentImage()
         {
@@ -277,6 +342,7 @@ public override void Assign(Base source)
                 if (src.Image == null && src.imageData != null)
                     imageData = src.imageData;
                 ShouldDisposeImage = true;
+                ImageFormat = src.ImageFormat;
             }
         }
 
@@ -399,6 +465,8 @@ public override void Serialize(FRWriter writer)
                 writer.WriteFloat("Transparency", Transparency);
             if (Tile != c.Tile)
                 writer.WriteBool("Tile", Tile);
+            if (ImageFormat != c.ImageFormat)
+                writer.WriteValue("ImageFormat", ImageFormat);
             // store image data
             if (writer.SerializeTo != SerializeTo.SourcePages)
             {
@@ -417,7 +485,7 @@ public override void Serialize(FRWriter writer)
                             {
                                 using (MemoryStream stream = new MemoryStream())
                                 {
-                                    ImageHelper.Save(Image, stream, ImageFormat.Png);
+                                    ImageHelper.Save(Image, stream, imageFormat);
                                     bytes = stream.ToArray();
                                 }
                             }
@@ -589,5 +657,6 @@ public PictureObject()
             SetFlags(Flags.HasSmartTag, true);
             ResetImageIndex();
         }
+        
     }
 }
\ No newline at end of file
diff --git a/FastReport.Base/Utils/ImageHelper.cs b/FastReport.Base/Utils/ImageHelper.cs
index e5c86c54..6da565c9 100644
--- a/FastReport.Base/Utils/ImageHelper.cs
+++ b/FastReport.Base/Utils/ImageHelper.cs
@@ -27,7 +27,7 @@ public static Bitmap CloneBitmap(Image source)
 
         public static void Save(Image image, Stream stream)
         {
-            Save(image, stream, ImageFormat.Png);
+            Save(image, stream, image.GetImageFormat());
         }
 
         public static void Save(Image image, string fileName, ImageFormat format)
@@ -43,7 +43,12 @@ public static void Save(Image image, Stream stream, ImageFormat format)
             if (image == null)
                 return;
             if (image is Bitmap)
-                image.Save(stream, format);
+            {
+                if (format == ImageFormat.Icon)
+                    SaveAsIcon(image, stream, true);
+                else
+                    image.Save(stream, format);
+            }
             else if (image is Metafile)
             {
                 Metafile emf = null;
@@ -61,6 +66,65 @@ public static void Save(Image image, Stream stream, ImageFormat format)
             }
         }
 
+        public static bool SaveAndConvert(Image image, Stream stream, ImageFormat format)
+        {
+            if (image == null)
+                return false;
+            if(format == ImageFormat.Jpeg || format == ImageFormat.Gif 
+                || format == ImageFormat.Tiff || format == ImageFormat.Bmp 
+                || format == ImageFormat.Png 
+                || format == ImageFormat.MemoryBmp)
+            {
+                if(image is Bitmap)
+                {
+                    if (format == ImageFormat.MemoryBmp)
+                        throw new Exception(Res.Get("Export,Image,ImageParceFormatException")); 
+                    image.Save(stream, format);
+                    return true;
+                }
+                //from mf to bitmap
+                using (Metafile metafile = image as Metafile)
+                using (Bitmap bitmap = new Bitmap(image.Width, image.Height))
+                {
+                    bitmap.SetResolution(96F, 96F);
+                    using (Graphics g = Graphics.FromImage(bitmap))
+                    {
+                        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
+                        g.DrawImage(metafile, 0, 0, (float)image.Width, (float)image.Height);
+                        g.Dispose();
+                    }
+                    bitmap.Save(stream, format);
+                }
+                return true;
+
+            }   
+            else if(format == ImageFormat.Icon)
+            {
+                return SaveAsIcon(image, stream, true);
+            }
+            else if(format == ImageFormat.Wmf || format == ImageFormat.Emf)
+            {
+                if (image is Metafile)
+                {
+                    Metafile emf = null;
+                    using (Bitmap bmp = new Bitmap(1, 1))
+                    using (Graphics g = Graphics.FromImage(bmp))
+                    {
+                        IntPtr hdc = g.GetHdc();
+                        emf = new Metafile(stream, hdc);
+                        g.ReleaseHdc(hdc);
+                    }
+                    using (Graphics g = Graphics.FromImage(emf))
+                    {
+                        g.DrawImage(image, 0, 0);
+                    }
+                    return true;
+                 }
+            }
+            //throw new Exception(Res.Get("Export,Image,ImageParceFormatException")); // we cant convert image to exif or from bitmap to mf 
+            return false;
+        }
+
         public static byte[] Load(string fileName)
         {
             if (!String.IsNullOrEmpty(fileName))
@@ -169,5 +233,131 @@ public static Bitmap GetGrayscaleBitmap(Image source)
 
             return grayscaleBitmap;
         }
+
+        /// <summary>
+        /// Converts a PNG image to a icon (ico)
+        /// </summary>
+        /// <param name="image">The input image</param>
+        /// <param name="output">The output stream</param>
+        /// <param name="preserveAspectRatio">Preserve the aspect ratio</param>
+        /// <returns>Wether or not the icon was succesfully generated</returns>
+        public static bool SaveAsIcon(Image image, Stream output, bool preserveAspectRatio = false)
+        {
+            int size = 256;
+            float width = size, height = size;
+            if (preserveAspectRatio)
+            {
+                if (image.Width > image.Height)
+                    height = ((float)image.Height / image.Width) * size;
+                else
+                    width = ((float)image.Width / image.Height) * size;
+            }
+
+            var newBitmap = new Bitmap(image, new Size((int)width, (int)height));
+            if (newBitmap == null)
+                return false;
+
+            // save the resized png into a memory stream for future use
+            using (MemoryStream memoryStream = new MemoryStream())
+            {
+                newBitmap.Save(memoryStream, ImageFormat.Png);
+
+                var iconWriter = new BinaryWriter(output);
+                if (output == null || iconWriter == null)
+                    return false;
+
+                // 0-1 reserved, 0
+                iconWriter.Write((byte)0);
+                iconWriter.Write((byte)0);
+
+                // 2-3 image type, 1 = icon, 2 = cursor
+                iconWriter.Write((short)1);
+
+                // 4-5 number of images
+                iconWriter.Write((short)1);
+
+                // image entry 1
+                // 0 image width
+                iconWriter.Write((byte)width);
+                // 1 image height
+                iconWriter.Write((byte)height);
+
+                // 2 number of colors
+                iconWriter.Write((byte)0);
+
+                // 3 reserved
+                iconWriter.Write((byte)0);
+
+                // 4-5 color planes
+                iconWriter.Write((short)0);
+
+                // 6-7 bits per pixel
+                iconWriter.Write((short)32);
+
+                // 8-11 size of image data
+                iconWriter.Write((int)memoryStream.Length);
+
+                // 12-15 offset of image data
+                iconWriter.Write((int)(6 + 16));
+
+                // write image data
+                // png data must contain the whole png data file
+                iconWriter.Write(memoryStream.ToArray());
+
+                iconWriter.Flush();
+            }
+
+            return true;
+        }
+
+
+    }
+
+    public static class ImageExtension
+    {
+        /// <summary>
+        /// Returns an Image format.
+        /// </summary>
+        public static ImageFormat GetImageFormat(this Image bitmap)
+        {
+            if (bitmap == null || bitmap.RawFormat == null)
+                return null;
+            ImageFormat format = null;
+            if (ImageFormat.Jpeg.Equals(bitmap.RawFormat))
+            {
+                format = ImageFormat.Jpeg;
+            }
+            else if (ImageFormat.Gif.Equals(bitmap.RawFormat))
+            {
+                format = ImageFormat.Gif;
+            }
+            else if (ImageFormat.Png.Equals(bitmap.RawFormat))
+            {
+                format = ImageFormat.Png;
+            }
+            else if (ImageFormat.Emf.Equals(bitmap.RawFormat))
+            {
+                format = ImageFormat.Emf;
+            }
+            else if (ImageFormat.Icon.Equals(bitmap.RawFormat))
+            {
+                format = ImageFormat.Icon;
+            }
+            else if (ImageFormat.Tiff.Equals(bitmap.RawFormat))
+            {
+                format = ImageFormat.Tiff;
+            }
+            else if (ImageFormat.Bmp.Equals(bitmap.RawFormat) || ImageFormat.MemoryBmp.Equals(bitmap.RawFormat)) // MemoryBmp format raises a GDI exception
+            {
+                format = ImageFormat.Bmp;
+            }
+            else if (ImageFormat.Wmf.Equals(bitmap.RawFormat)) 
+            {
+                format = ImageFormat.Wmf;
+            }
+            if (format != null)
+                return format;
+            return ImageFormat.Bmp;
+        }
     }
 }
diff --git a/FastReport/Resources/en.xml b/FastReport/Resources/en.xml
index 96f28b48..b3727b78 100644
--- a/FastReport/Resources/en.xml
+++ b/FastReport/Resources/en.xml
@@ -21,6 +21,7 @@
     <Attention Text="Attention"/>
 	  <BarcodeFewError Text="The number of digits is less than the permissible minimum."/>
 	  <BarcodeManyError Text="The number of digits is greater than the allowable maximum."/>
+	  <BarcodeLengthMismatch Text="Number of characters mismatch."/>
     <CantFindObject Text="Can't find object"/>
     <CantLoadReport Text="Can't load the report {0}"/>
     <CantSaveReport Text="Can't save the report. The file may be write-protected."/>
@@ -2130,31 +2131,32 @@
         <Barcode0 Text="2/5 Interleaved"/>
         <Barcode1 Text="2/5 Industrial"/>
         <Barcode2 Text="2/5 Matrix"/>
-        <Barcode3 Text="ITF-14"/>
-        <Barcode4 Text="Codabar"/>
-        <Barcode5 Text="Code128"/>
-        <Barcode6 Text="Code39"/>
-        <Barcode7 Text="Code39 Extended"/>
-        <Barcode8 Text="Code93"/>
-        <Barcode9 Text="Code93 Extended"/>
-        <Barcode10 Text="EAN8"/>
-        <Barcode11 Text="EAN13"/>
-        <Barcode12 Text="MSI"/>
-        <Barcode13 Text="PostNet"/>
-        <Barcode14 Text="UPC-A"/>
-        <Barcode15 Text="UPC-E0"/>
-        <Barcode16 Text="UPC-E1"/>
-        <Barcode17 Text="Supplement 2"/>
-        <Barcode18 Text="Supplement 5"/>
-        <Barcode19 Text="PDF417"/>
-        <Barcode20 Text="Datamatrix"/>
-        <Barcode21 Text="QR Code"/>
-        <Barcode22 Text="Aztec"/>
-        <Barcode23 Text="Plessey"/>
-        <Barcode24 Text="GS1-128 (UCC/EAN-128)"/>
-        <Barcode25 Text="Pharmacode"/>
-        <Barcode26 Text="Intelligent Mail (USPS)"/>
-        <Barcode27 Text="MaxiCode"/>
+        <Barcode3 Text="Deutsche Identcode"/>
+        <Barcode4 Text="ITF-14"/>
+        <Barcode5 Text="Codabar"/>
+        <Barcode6 Text="Code128"/>
+        <Barcode7 Text="Code39"/>
+        <Barcode8 Text="Code39 Extended"/>
+        <Barcode9 Text="Code93"/>
+        <Barcode10 Text="Code93 Extended"/>
+        <Barcode11 Text="EAN8"/>
+        <Barcode12 Text="EAN13"/>
+        <Barcode13 Text="MSI"/>
+        <Barcode14 Text="PostNet"/>
+        <Barcode15 Text="UPC-A"/>
+        <Barcode16 Text="UPC-E0"/>
+        <Barcode17 Text="UPC-E1"/>
+        <Barcode18 Text="Supplement 2"/>
+        <Barcode19 Text="Supplement 5"/>
+        <Barcode20 Text="PDF417"/>
+        <Barcode21 Text="Datamatrix"/>
+        <Barcode22 Text="QR Code"/>
+        <Barcode23 Text="Aztec"/>
+        <Barcode24 Text="Plessey"/>
+        <Barcode25 Text="GS1-128 (UCC/EAN-128)"/>
+        <Barcode26 Text="Pharmacode"/>
+        <Barcode27 Text="Intelligent Mail (USPS)"/>
+        <Barcode28 Text="MaxiCode"/>
       </Barcodes>
     </Barcode>
     <ZipCodeObject>
@@ -2250,6 +2252,7 @@
     <Image Text="Export to Image">
       <File Text="Image file"/>
       <ImageFormat Text="Format:"/>
+      <ImageParceFormatException Text="The bitmap cannot be converted to the selected format."/>
       <Resolution Text="Resolution:"/>
       <Quality Text="Jpeg quality:"/>
       <SeparateFiles Text="Separate file for each page"/>
@@ -2621,6 +2624,10 @@
     <EnterPage Text="Enter the page number to jump"/>
     <TotalPages Text="Total pages (read only)"/>
     <Back Text="Back"/>
+	<ScriptSecurity>
+	    <ForbiddenType Text="Please, don't use the type {typeName}"/>
+		<ForbiddenMethod Text="Please, don't use the method {methodName}"/>
+	</ScriptSecurity>
   </Web>
   <Properties>
     <Categories>
diff --git a/UsedPackages.version b/UsedPackages.version
index f5d9f505..08293db0 100644
--- a/UsedPackages.version
+++ b/UsedPackages.version
@@ -3,7 +3,7 @@
 <!-- This group sets version used packages in FastReport.Core, FastReport.OpenSource & FastReport.Core3 -->
     <PropertyGroup>
 
-        <FRCompatVersion>2020.3.7</FRCompatVersion>
+        <FRCompatVersion>2020.3.8</FRCompatVersion>
 
         <FRDataVisualizationVersion>2020.3.8</FRDataVisualizationVersion>
 		
