diff --git a/BarcodeStandard/BarcodeCommon.cs b/BarcodeStandard/BarcodeCommon.cs
index 235d4ed..485460e 100644
--- a/BarcodeStandard/BarcodeCommon.cs
+++ b/BarcodeStandard/BarcodeCommon.cs
@@ -14,12 +14,13 @@ protected void Error(string errorMessage)
             throw new Exception(errorMessage);
         }
 
-        internal static bool CheckNumericOnly(string data)
+        internal static bool IsNumericOnly(string s)
         {
-            foreach (var c in data)
-            {
-                if (c < '0' && c > '9') return false;
-            }
+            if (s == null || s == "") return false;
+
+            for (int i = 0; i < s.Length; i++)
+                if ((s[i] ^ '0') > 9)
+                    return false;
 
             return true;
         }
diff --git a/BarcodeStandard/BarcodeLib.cs b/BarcodeStandard/BarcodeLib.cs
index e7de2e9..4670c7f 100644
--- a/BarcodeStandard/BarcodeLib.cs
+++ b/BarcodeStandard/BarcodeLib.cs
@@ -9,6 +9,7 @@
 using System.Xml.Serialization;
 using BarcodeLib;
 using BarcodeLib.Symbologies;
+using BarcodeStandard.Symbologies;
 using SkiaSharp;
 
 /* 
@@ -27,7 +28,7 @@ namespace BarcodeStandard
 {
     #region Enums
     public enum Type
-    { Unspecified, UpcA, UpcE, UpcSupplemental2Digit, UpcSupplemental5Digit, Ean13, Ean8, Interleaved2Of5, Interleaved2Of5Mod10, Standard2Of5, Standard2Of5Mod10, Industrial2Of5, Industrial2Of5Mod10, Code39, Code39Extended, Code39Mod43, Codabar, PostNet, Bookland, Isbn, Jan13, MsiMod10, Msi2Mod10, MsiMod11, MsiMod11Mod10, ModifiedPlessey, Code11, Usd8, Ucc12, Ucc13, Logmars, Code128, Code128A, Code128B, Code128C, Itf14, Code93, Telepen, Fim, Pharmacode }
+    { Unspecified, UpcA, UpcE, UpcSupplemental2Digit, UpcSupplemental5Digit, Ean13, Ean8, Interleaved2Of5, Interleaved2Of5Mod10, Standard2Of5, Standard2Of5Mod10, Industrial2Of5, Industrial2Of5Mod10, Code39, Code39Extended, Code39Mod43, Codabar, PostNet, Bookland, Isbn, Jan13, MsiMod10, Msi2Mod10, MsiMod11, MsiMod11Mod10, ModifiedPlessey, Code11, Usd8, Ucc12, Ucc13, Logmars, Code128, Code128A, Code128B, Code128C, Itf14, Code93, Telepen, Fim, Pharmacode, IATA2of5 }
     public enum SaveTypes
     { Jpg, Png, Webp, Unspecified }
     public enum AlignmentPositions
@@ -331,6 +332,9 @@ public string GenerateBarcode(string rawData = "")
                 case Type.Standard2Of5: //Encode_Standard2of5();
                     _iBarcode = new Standard2of5(RawData, EncodedType);
                     break;
+                case Type.IATA2of5: //Encode_IATA2of5();
+                    _iBarcode = new IATA2of5(RawData);
+                    break;
                 case Type.Logmars:
                 case Type.Code39: //Encode_Code39();
                     _iBarcode = new Code39(RawData);
diff --git a/BarcodeStandard/Symbologies/Blank.cs b/BarcodeStandard/Symbologies/Blank.cs
index 7daed42..ae6d40f 100644
--- a/BarcodeStandard/Symbologies/Blank.cs
+++ b/BarcodeStandard/Symbologies/Blank.cs
@@ -7,7 +7,7 @@ namespace BarcodeLib.Symbologies
     ///  Blank encoding template
     ///  Written by: Brad Barnhill
     /// </summary>
-    class Blank: BarcodeCommon, IBarcode
+    internal class Blank: BarcodeCommon, IBarcode
     {
         
         #region IBarcode Members
diff --git a/BarcodeStandard/Symbologies/Codabar.cs b/BarcodeStandard/Symbologies/Codabar.cs
index 3884a4c..6691250 100644
--- a/BarcodeStandard/Symbologies/Codabar.cs
+++ b/BarcodeStandard/Symbologies/Codabar.cs
@@ -6,7 +6,7 @@ namespace BarcodeLib.Symbologies
     ///  Codabar encoding
     ///  Written by: Brad Barnhill
     /// </summary>
-    class Codabar: BarcodeCommon, IBarcode
+    internal class Codabar : BarcodeCommon, IBarcode
     {
         private readonly System.Collections.Hashtable Codabar_Code = new System.Collections.Hashtable(); //is initialized by init_Codabar()
         
@@ -52,14 +52,14 @@ private string Encode_Codabar()
 
             foreach (char c in Codabar_Code.Keys)
             {
-                if (!CheckNumericOnly(c.ToString()))
+                if (!IsNumericOnly(c.ToString()))
                 {
                     temp = temp.Replace(c, '1');
                 }//if
             }//if
 
             //now that all the valid non-numeric chars have been replaced with a number check if all numeric exist
-            if (!CheckNumericOnly(temp))
+            if (!IsNumericOnly(temp))
                 Error("ECODABAR-4: Data contains invalid  characters.");
 
             var result = "";
diff --git a/BarcodeStandard/Symbologies/Code11.cs b/BarcodeStandard/Symbologies/Code11.cs
index 5b760d9..6973019 100644
--- a/BarcodeStandard/Symbologies/Code11.cs
+++ b/BarcodeStandard/Symbologies/Code11.cs
@@ -7,7 +7,7 @@ namespace BarcodeLib.Symbologies
     ///  Code 11 encoding
     ///  Written by: Brad Barnhill
     /// </summary>
-    class Code11 : BarcodeCommon, IBarcode
+    internal class Code11 : BarcodeCommon, IBarcode
     {
         private readonly string[] C11_Code = { "101011", "1101011", "1001011", "1100101", "1011011", "1101101", "1001101", "1010011", "1101001", "110101", "101101", "1011001" };
 
@@ -20,7 +20,7 @@ public Code11(string input)
         /// </summary>
         private string Encode_Code11()
         {
-            if (!CheckNumericOnly(RawData.Replace("-", "")))
+            if (!IsNumericOnly(RawData.Replace("-", "")))
                 Error("EC11-1: Numeric data and '-' Only");
 
             //calculate the checksums
diff --git a/BarcodeStandard/Symbologies/Code128.cs b/BarcodeStandard/Symbologies/Code128.cs
index 3a61ea5..ceb4bea 100644
--- a/BarcodeStandard/Symbologies/Code128.cs
+++ b/BarcodeStandard/Symbologies/Code128.cs
@@ -8,7 +8,7 @@ namespace BarcodeLib.Symbologies
     ///  Code 128 encoding
     ///  Written by: Brad Barnhill
     /// </summary>
-    class Code128 : BarcodeCommon, IBarcode
+    internal class Code128 : BarcodeCommon, IBarcode
     {
         public static readonly char FNC1 = Convert.ToChar(200);
         public static readonly char FNC2 = Convert.ToChar(201);
diff --git a/BarcodeStandard/Symbologies/Code39.cs b/BarcodeStandard/Symbologies/Code39.cs
index 5163cf3..b96e01c 100644
--- a/BarcodeStandard/Symbologies/Code39.cs
+++ b/BarcodeStandard/Symbologies/Code39.cs
@@ -7,7 +7,7 @@ namespace BarcodeLib.Symbologies
     ///  Code 39 encoding
     ///  Written by: Brad Barnhill
     /// </summary>
-    class Code39 : BarcodeCommon, IBarcode
+    internal class Code39 : BarcodeCommon, IBarcode
     {
         private readonly System.Collections.Hashtable C39_Code = new System.Collections.Hashtable(); //is initialized by init_Code39()
         private readonly System.Collections.Hashtable ExtC39_Translation = new System.Collections.Hashtable();
diff --git a/BarcodeStandard/Symbologies/Code93.cs b/BarcodeStandard/Symbologies/Code93.cs
index 9f33ece..3402c83 100644
--- a/BarcodeStandard/Symbologies/Code93.cs
+++ b/BarcodeStandard/Symbologies/Code93.cs
@@ -7,7 +7,7 @@ namespace BarcodeLib.Symbologies
     ///  Code 93 encoding
     ///  Written by: Brad Barnhill
     /// </summary>
-    class Code93 : BarcodeCommon, IBarcode
+    internal class Code93 : BarcodeCommon, IBarcode
     {
         private readonly System.Data.DataTable C93_Code = new System.Data.DataTable("C93_Code");
 
diff --git a/BarcodeStandard/Symbologies/EAN13.cs b/BarcodeStandard/Symbologies/EAN13.cs
index c323c8e..e83ac3c 100644
--- a/BarcodeStandard/Symbologies/EAN13.cs
+++ b/BarcodeStandard/Symbologies/EAN13.cs
@@ -8,7 +8,7 @@ namespace BarcodeLib.Symbologies
     ///  EAN-13 encoding
     ///  Written by: Brad Barnhill
     /// </summary>
-    class EAN13 : BarcodeCommon, IBarcode
+    internal class EAN13 : BarcodeCommon, IBarcode
     {
         private readonly string[] EAN_CodeA = { "0001101", "0011001", "0010011", "0111101", "0100011", "0110001", "0101111", "0111011", "0110111", "0001011" };
         private readonly string[] EAN_CodeB = { "0100111", "0110011", "0011011", "0100001", "0011101", "0111001", "0000101", "0010001", "0001001", "0010111" };
@@ -41,7 +41,7 @@ private string Encode_EAN13()
             if (RawData.Length < 12 || RawData.Length > 13)
                 Error("EEAN13-1: Data length invalid. (Length must be 12 or 13)");
 
-            if (!CheckNumericOnly(RawData))
+            if (!IsNumericOnly(RawData))
                 Error("EEAN13-2: Numeric Data Only");
 
             var patterncode = EAN_Pattern[Int32.Parse(RawData[0].ToString())];
diff --git a/BarcodeStandard/Symbologies/EAN8.cs b/BarcodeStandard/Symbologies/EAN8.cs
index d05022e..31e69f5 100644
--- a/BarcodeStandard/Symbologies/EAN8.cs
+++ b/BarcodeStandard/Symbologies/EAN8.cs
@@ -7,7 +7,7 @@ namespace BarcodeLib.Symbologies
     ///  EAN-8 encoding
     ///  Written by: Brad Barnhill
     /// </summary>
-    class EAN8 : BarcodeCommon, IBarcode
+    internal class EAN8 : BarcodeCommon, IBarcode
     {
         private readonly string[] EAN_CodeA = { "0001101", "0011001", "0010011", "0111101", "0100011", "0110001", "0101111", "0111011", "0110111", "0001011" };
         private readonly string[] EAN_CodeC = { "1110010", "1100110", "1101100", "1000010", "1011100", "1001110", "1010000", "1000100", "1001000", "1110100" };
@@ -17,7 +17,8 @@ public EAN8(string input)
             RawData = input;
 
             //check numeric only
-            if (!CheckNumericOnly(RawData)) Error("EEAN8-2: Numeric only.");
+            if (!IsNumericOnly(RawData)) 
+                Error("EEAN8-2: Numeric only.");
 
             CheckDigit();
         }
diff --git a/BarcodeStandard/Symbologies/FIM.cs b/BarcodeStandard/Symbologies/FIM.cs
index 772f61d..9ad23aa 100644
--- a/BarcodeStandard/Symbologies/FIM.cs
+++ b/BarcodeStandard/Symbologies/FIM.cs
@@ -6,7 +6,7 @@ namespace BarcodeLib.Symbologies
     ///  FIM encoding
     ///  Written by: Brad Barnhill
     /// </summary>
-    class FIM: BarcodeCommon, IBarcode
+    internal class FIM : BarcodeCommon, IBarcode
     {
         private readonly string[] FIM_Codes = { "110010011", "101101101", "110101011", "111010111", "101000101" };
         public enum FIMTypes {FIM_A = 0, FIM_B, FIM_C, FIM_D, FIM_E};
diff --git a/BarcodeStandard/Symbologies/IATA2of5.cs b/BarcodeStandard/Symbologies/IATA2of5.cs
new file mode 100644
index 0000000..6f6f3a0
--- /dev/null
+++ b/BarcodeStandard/Symbologies/IATA2of5.cs
@@ -0,0 +1,74 @@
+using BarcodeLib;
+using BarcodeLib.Symbologies;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace BarcodeStandard.Symbologies
+{
+    internal class IATA2of5 : BarcodeCommon, IBarcode
+    {
+        private readonly string[] IATA2of5_Code = { "10101110111010", "11101010101110", "10111010101110", "11101110101010", "10101110101110", "11101011101010", "10111011101010", "10101011101110", "11101010111010", "10111010111010" };
+
+        public IATA2of5(string input)
+        {
+            RawData = input;
+        }//Standard2of5
+
+        /// <summary>
+        /// Encode the raw data using the IATA 2 of 5 algorithm.
+        /// </summary>
+        private string Encode_IATA2of5()
+        {
+            //check length of input
+            if (RawData.Length > 17 || RawData.Length < 16)
+                Error("EIATA25-1: Data length invalid. (Length must be 16 or 17)");
+
+            if (!IsNumericOnly(RawData))
+                Error("EIATA25-2: Numeric Data Only");
+
+            //strip check digit if provided so it can be recalculated
+            RawData = RawData.Length == 17 ? RawData.Substring(0, 16) : RawData;
+
+            //calculate check digit
+            var checkdigit = CalculateMod10CheckDigit();
+            RawData += checkdigit.ToString();
+
+            var result = "1010";
+
+            for (int i = 0; i < RawData.Length; i++)
+            {
+                result += IATA2of5_Code[(int)char.GetNumericValue(RawData, i)];
+            }
+
+            //add check digit
+            result += IATA2of5_Code[checkdigit];
+
+            //add ending bars
+            result += "01101";
+            return result;
+        }//Encode_Standard2of5
+
+        private int CalculateMod10CheckDigit()
+        {
+            var sum = 0;
+            var even = true;
+
+            for (var i = RawData.Length - 1; i >= 0; --i)
+            {
+                //convert numeric in char format to integer and
+                //multiply by 3 or 1 based on if an even index from the end
+                sum += (RawData[i] - '0') * (even ? 3 : 1);
+                even = !even;
+            }
+
+            return (10 - sum % 10) % 10;
+        }
+
+        #region IBarcode Members
+
+        public string Encoded_Value => Encode_IATA2of5();
+
+        #endregion
+    }
+}
diff --git a/BarcodeStandard/Symbologies/ISBN.cs b/BarcodeStandard/Symbologies/ISBN.cs
index 5910680..9e87d7a 100644
--- a/BarcodeStandard/Symbologies/ISBN.cs
+++ b/BarcodeStandard/Symbologies/ISBN.cs
@@ -6,7 +6,7 @@ namespace BarcodeLib.Symbologies
     ///  ISBN encoding
     ///  Written by: Brad Barnhill
     /// </summary>
-    class ISBN : BarcodeCommon, IBarcode
+    internal class ISBN : BarcodeCommon, IBarcode
     {
         public ISBN(string input)
         {
@@ -17,7 +17,7 @@ public ISBN(string input)
         /// </summary>
         private string Encode_ISBN_Bookland()
         {
-            if (!CheckNumericOnly(RawData))
+            if (!IsNumericOnly(RawData))
                 Error("EBOOKLANDISBN-1: Numeric Data Only");
 
             var type = "UNKNOWN";
diff --git a/BarcodeStandard/Symbologies/ITF14.cs b/BarcodeStandard/Symbologies/ITF14.cs
index aae2edf..e24c602 100644
--- a/BarcodeStandard/Symbologies/ITF14.cs
+++ b/BarcodeStandard/Symbologies/ITF14.cs
@@ -7,7 +7,7 @@ namespace BarcodeLib.Symbologies
     ///  ITF-14 encoding
     ///  Written by: Brad Barnhill
     /// </summary>
-    class ITF14 : BarcodeCommon, IBarcode
+    internal class ITF14 : BarcodeCommon, IBarcode
     {
         private readonly string[] ITF14_Code = { "NNWWN", "WNNNW", "NWNNW", "WWNNN", "NNWNW", "WNWNN", "NWWNN", "NNNWW", "WNNWN", "NWNWN" };
 
@@ -26,7 +26,7 @@ private string Encode_ITF14()
             if (RawData.Length > 14 || RawData.Length < 13)
                 Error("EITF14-1: Data length invalid. (Length must be 13 or 14)");
 
-            if (!CheckNumericOnly(RawData))
+            if (!IsNumericOnly(RawData))
                 Error("EITF14-2: Numeric data only.");
 
             var result = "1010";
diff --git a/BarcodeStandard/Symbologies/Interleaved2of5.cs b/BarcodeStandard/Symbologies/Interleaved2of5.cs
index a187c3a..055e376 100644
--- a/BarcodeStandard/Symbologies/Interleaved2of5.cs
+++ b/BarcodeStandard/Symbologies/Interleaved2of5.cs
@@ -8,7 +8,7 @@ namespace BarcodeLib.Symbologies
     ///  Interleaved 2 of 5 encoding
     ///  Written by: Brad Barnhill
     /// </summary>
-    class Interleaved2of5 : BarcodeCommon, IBarcode
+    internal class Interleaved2of5 : BarcodeCommon, IBarcode
     {
         private readonly string[] _i25Code = { "NNWWN", "WNNNW", "NWNNW", "WWNNN", "NNWNW", "WNWNN", "NWWNN", "NNNWW", "WNNWN", "NWNWN" };
         private readonly Type _encodedType;
@@ -27,7 +27,7 @@ private string Encode_Interleaved2of5()
             if (RawData.Length % 2 != (_encodedType == Type.Interleaved2Of5Mod10 ? 1 : 0))
                 Error("EI25-1: Data length invalid.");
 
-            if (!CheckNumericOnly(RawData))
+            if (!IsNumericOnly(RawData))
                 Error("EI25-2: Numeric Data Only");
             
             var result = "1010";
diff --git a/BarcodeStandard/Symbologies/JAN13.cs b/BarcodeStandard/Symbologies/JAN13.cs
index 05557fc..843ad6a 100644
--- a/BarcodeStandard/Symbologies/JAN13.cs
+++ b/BarcodeStandard/Symbologies/JAN13.cs
@@ -6,7 +6,7 @@ namespace BarcodeLib.Symbologies
     ///  JAN-13 encoding
     ///  Written by: Brad Barnhill
     /// </summary>
-    class JAN13 : BarcodeCommon, IBarcode
+    internal class JAN13 : BarcodeCommon, IBarcode
     {
         public JAN13(string input)
         {
@@ -18,7 +18,7 @@ public JAN13(string input)
         private string Encode_JAN13()
         {
             if (!RawData.StartsWith("49")) Error("EJAN13-1: Invalid Country Code for JAN13 (49 required)");
-            if (!CheckNumericOnly(RawData))
+            if (!IsNumericOnly(RawData))
                 Error("EJAN13-2: Numeric Data Only");
 
             EAN13 ean13 = new EAN13(RawData);
diff --git a/BarcodeStandard/Symbologies/MSI.cs b/BarcodeStandard/Symbologies/MSI.cs
index 237e2fe..0fd8b95 100644
--- a/BarcodeStandard/Symbologies/MSI.cs
+++ b/BarcodeStandard/Symbologies/MSI.cs
@@ -4,7 +4,7 @@
 
 namespace BarcodeLib.Symbologies
 {
-    class MSI : BarcodeCommon, IBarcode
+    internal class MSI : BarcodeCommon, IBarcode
     {
         /// <summary>
         ///  MSI encoding
@@ -25,7 +25,7 @@ public MSI(string input, Type encodedType)
         private string Encode_MSI()
         {
             //check for non-numeric chars
-            if (!CheckNumericOnly(RawData))
+            if (!IsNumericOnly(RawData))
                 Error("EMSI-1: Numeric Data Only");
 
             //get checksum
diff --git a/BarcodeStandard/Symbologies/Pharmacode.cs b/BarcodeStandard/Symbologies/Pharmacode.cs
index 90dd467..edc43af 100644
--- a/BarcodeStandard/Symbologies/Pharmacode.cs
+++ b/BarcodeStandard/Symbologies/Pharmacode.cs
@@ -7,7 +7,7 @@ namespace BarcodeLib.Symbologies
     ///  Pharmacode encoding
     ///  Written by: Brad Barnhill
     /// </summary>
-    class Pharmacode: BarcodeCommon, IBarcode
+    internal class Pharmacode : BarcodeCommon, IBarcode
     {
         string _thinBar = "1";
         string _gap = "00";
@@ -21,7 +21,7 @@ public Pharmacode(string input)
         {
             RawData = input;
 
-            if (!CheckNumericOnly(RawData))
+            if (!IsNumericOnly(RawData))
             {
                 Error("EPHARM-1: Data contains invalid  characters (non-numeric).");
             }//if
diff --git a/BarcodeStandard/Symbologies/Postnet.cs b/BarcodeStandard/Symbologies/Postnet.cs
index 82b374e..aff3c4b 100644
--- a/BarcodeStandard/Symbologies/Postnet.cs
+++ b/BarcodeStandard/Symbologies/Postnet.cs
@@ -7,7 +7,7 @@ namespace BarcodeLib.Symbologies
     ///  Postnet encoding
     ///  Written by: Brad Barnhill
     /// </summary>
-    class Postnet : BarcodeCommon, IBarcode
+    internal class Postnet : BarcodeCommon, IBarcode
     {
         private readonly string[] POSTNET_Code = { "11000", "00011", "00101", "00110", "01001", "01010", "01100", "10001", "10010", "10100" };
 
diff --git a/BarcodeStandard/Symbologies/Standard2of5.cs b/BarcodeStandard/Symbologies/Standard2of5.cs
index 1250fd2..77a3503 100644
--- a/BarcodeStandard/Symbologies/Standard2of5.cs
+++ b/BarcodeStandard/Symbologies/Standard2of5.cs
@@ -8,7 +8,7 @@ namespace BarcodeLib.Symbologies
     ///  Standard 2 of 5 encoding
     ///  Written by: Brad Barnhill
     /// </summary>
-    class Standard2of5 : BarcodeCommon, IBarcode
+    internal class Standard2of5 : BarcodeCommon, IBarcode
     {
         private readonly string[] S25_Code = { "10101110111010", "11101010101110", "10111010101110", "11101110101010", "10101110101110", "11101011101010", "10111011101010", "10101011101110", "11101010111010", "10111010111010" };
         private readonly Type _encodedType = Type.Unspecified;
@@ -24,7 +24,7 @@ public Standard2of5(string input, Type encodedType)
         /// </summary>
         private string Encode_Standard2of5()
         {
-            if (!CheckNumericOnly(RawData))
+            if (!IsNumericOnly(RawData))
                 Error("ES25-1: Numeric Data Only");
 
             var result = "11011010";
diff --git a/BarcodeStandard/Symbologies/Telepen.cs b/BarcodeStandard/Symbologies/Telepen.cs
index 0ad42ef..5c47d8c 100644
--- a/BarcodeStandard/Symbologies/Telepen.cs
+++ b/BarcodeStandard/Symbologies/Telepen.cs
@@ -8,7 +8,7 @@ namespace BarcodeLib.Symbologies
     ///  Telepen encoding
     ///  Written by: Brad Barnhill
     /// </summary>
-    class Telepen: BarcodeCommon, IBarcode
+    internal class Telepen : BarcodeCommon, IBarcode
     {
         private static readonly Hashtable Telepen_Code = new Hashtable();
         private enum StartStopCode : int { START1, STOP1, START2, STOP2, START3, STOP3 };
diff --git a/BarcodeStandard/Symbologies/UPCA.cs b/BarcodeStandard/Symbologies/UPCA.cs
index a193d96..48d045e 100644
--- a/BarcodeStandard/Symbologies/UPCA.cs
+++ b/BarcodeStandard/Symbologies/UPCA.cs
@@ -8,7 +8,7 @@ namespace BarcodeLib.Symbologies
     ///  UPC-A encoding
     ///  Written by: Brad Barnhill
     /// </summary>
-    class UPCA : BarcodeCommon, IBarcode
+    internal class UPCA : BarcodeCommon, IBarcode
     {
         private readonly string[] UPC_Code_A = { "0001101", "0011001", "0010011", "0111101", "0100011", "0110001", "0101111", "0111011", "0110111", "0001011" };
         private readonly string[] UPC_Code_B = { "1110010", "1100110", "1101100", "1000010", "1011100", "1001110", "1010000", "1000100", "1001000", "1110100" };
@@ -28,7 +28,7 @@ private string Encode_UPCA()
             if (RawData.Length != 11 && RawData.Length != 12)
                 Error("EUPCA-1: Data length invalid. (Length must be 11 or 12)");
 
-            if (!CheckNumericOnly(RawData))
+            if (!IsNumericOnly(RawData))
                 Error("EUPCA-2: Numeric Data Only");
 
             CheckDigit();
diff --git a/BarcodeStandard/Symbologies/UPCE.cs b/BarcodeStandard/Symbologies/UPCE.cs
index c2a70f2..cf5403c 100644
--- a/BarcodeStandard/Symbologies/UPCE.cs
+++ b/BarcodeStandard/Symbologies/UPCE.cs
@@ -7,7 +7,7 @@ namespace BarcodeLib.Symbologies
     ///  UPC-E encoding
     ///  Written by: Brad Barnhill
     /// </summary>
-    class UPCE : BarcodeCommon, IBarcode
+    internal class UPCE : BarcodeCommon, IBarcode
     {
         private readonly string[] EAN_Code_A = { "0001101", "0011001", "0010011", "0111101", "0100011", "0110001", "0101111", "0111011", "0110111", "0001011" };
         private readonly string[] EAN_Code_B = { "0100111", "0110011", "0011011", "0100001", "0011101", "0111001", "0000101", "0010001", "0001001", "0010111" };
@@ -31,7 +31,7 @@ private string Encode_UPCE()
             if (RawData.Length != 6 && RawData.Length != 8 && RawData.Length != 12) 
                 Error("EUPCE-1: Invalid data length. (8 or 12 numbers only)");
 
-            if (!CheckNumericOnly(RawData)) 
+            if (!IsNumericOnly(RawData)) 
                 Error("EUPCE-2: Numeric only.");
 
             //check for a valid number system
diff --git a/BarcodeStandard/Symbologies/UPCSupplement2.cs b/BarcodeStandard/Symbologies/UPCSupplement2.cs
index b9baa60..e8c07ec 100644
--- a/BarcodeStandard/Symbologies/UPCSupplement2.cs
+++ b/BarcodeStandard/Symbologies/UPCSupplement2.cs
@@ -7,7 +7,7 @@ namespace BarcodeLib.Symbologies
     ///  UPC Supplement-2 encoding
     ///  Written by: Brad Barnhill
     /// </summary>
-    class UPCSupplement2 : BarcodeCommon, IBarcode
+    internal class UPCSupplement2 : BarcodeCommon, IBarcode
     {
         private readonly string [] EAN_CodeA    = { "0001101", "0011001", "0010011", "0111101", "0100011", "0110001", "0101111", "0111011", "0110111", "0001011" };
         private readonly string [] EAN_CodeB    = { "0100111", "0110011", "0011011", "0100001", "0011101", "0111001", "0000101", "0010001", "0001001", "0010111" };
@@ -25,7 +25,7 @@ private string Encode_UPCSupplemental_2()
         {
             if (RawData.Length != 2) Error("EUPC-SUP2-1: Invalid data length. (Length = 2 required)");
 
-            if (!CheckNumericOnly(RawData))
+            if (!IsNumericOnly(RawData))
                 Error("EUPC-SUP2-2: Numeric Data Only");
 
             string pattern = "";
diff --git a/BarcodeStandard/Symbologies/UPCSupplement5.cs b/BarcodeStandard/Symbologies/UPCSupplement5.cs
index df8c382..9515a49 100644
--- a/BarcodeStandard/Symbologies/UPCSupplement5.cs
+++ b/BarcodeStandard/Symbologies/UPCSupplement5.cs
@@ -7,7 +7,7 @@ namespace BarcodeLib.Symbologies
     ///  UPC Supplement-5 encoding
     ///  Written by: Brad Barnhill
     /// </summary>
-    class UPCSupplement5 : BarcodeCommon, IBarcode
+    internal class UPCSupplement5 : BarcodeCommon, IBarcode
     {
         private readonly string[] EAN_CodeA = { "0001101", "0011001", "0010011", "0111101", "0100011", "0110001", "0101111", "0111011", "0110111", "0001011" };
         private readonly string[] EAN_CodeB = { "0100111", "0110011", "0011011", "0100001", "0011101", "0111001", "0000101", "0010001", "0001001", "0010111" };
@@ -25,7 +25,7 @@ private string Encode_UPCSupplemental_5()
         {
             if (RawData.Length != 5) Error("EUPC-SUP5-1: Invalid data length. (Length = 5 required)");
 
-            if (!CheckNumericOnly(RawData))
+            if (!IsNumericOnly(RawData))
                 Error("EUPCA-2: Numeric Data Only");
 
             //calculate the checksum digit
diff --git a/BarcodeStandardExample/TestApp.Designer.cs b/BarcodeStandardExample/TestApp.Designer.cs
index ce07620..b6b098e 100644
--- a/BarcodeStandardExample/TestApp.Designer.cs
+++ b/BarcodeStandardExample/TestApp.Designer.cs
@@ -96,10 +96,10 @@ private void InitializeComponent()
             this.tsslEncodedType,
             this.tslblLibraryVersion,
             this.tslblCredits});
-            this.statusStrip1.Location = new System.Drawing.Point(0, 550);
+            this.statusStrip1.Location = new System.Drawing.Point(0, 556);
             this.statusStrip1.Name = "statusStrip1";
             this.statusStrip1.Padding = new System.Windows.Forms.Padding(2, 0, 14, 0);
-            this.statusStrip1.Size = new System.Drawing.Size(1015, 30);
+            this.statusStrip1.Size = new System.Drawing.Size(1015, 24);
             this.statusStrip1.SizingGrip = false;
             this.statusStrip1.TabIndex = 30;
             this.statusStrip1.Text = "statusStrip1";
@@ -108,20 +108,20 @@ private void InitializeComponent()
             // 
             this.tsslEncodedType.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Right;
             this.tsslEncodedType.Name = "tsslEncodedType";
-            this.tsslEncodedType.Size = new System.Drawing.Size(4, 24);
+            this.tsslEncodedType.Size = new System.Drawing.Size(4, 19);
             // 
             // tslblLibraryVersion
             // 
             this.tslblLibraryVersion.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Right;
             this.tslblLibraryVersion.Name = "tslblLibraryVersion";
-            this.tslblLibraryVersion.Size = new System.Drawing.Size(825, 24);
+            this.tslblLibraryVersion.Size = new System.Drawing.Size(860, 19);
             this.tslblLibraryVersion.Spring = true;
             this.tslblLibraryVersion.Text = "LibVersion";
             // 
             // tslblCredits
             // 
             this.tslblCredits.Name = "tslblCredits";
-            this.tslblCredits.Size = new System.Drawing.Size(170, 24);
+            this.tslblCredits.Size = new System.Drawing.Size(135, 19);
             this.tslblCredits.Text = "Written by: Brad Barnhill";
             this.tslblCredits.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
             // 
@@ -131,7 +131,7 @@ private void InitializeComponent()
             this.barcode.Dock = System.Windows.Forms.DockStyle.Fill;
             this.barcode.Location = new System.Drawing.Point(0, 0);
             this.barcode.Name = "barcode";
-            this.barcode.Size = new System.Drawing.Size(711, 550);
+            this.barcode.Size = new System.Drawing.Size(711, 556);
             this.barcode.TabIndex = 36;
             this.barcode.TabStop = false;
             this.barcode.Text = "Barcode Image";
@@ -139,7 +139,7 @@ private void InitializeComponent()
             // btnMassGeneration
             // 
             this.btnMassGeneration.Location = new System.Drawing.Point(4, 16);
-            this.btnMassGeneration.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.btnMassGeneration.Margin = new System.Windows.Forms.Padding(2);
             this.btnMassGeneration.Name = "btnMassGeneration";
             this.btnMassGeneration.Size = new System.Drawing.Size(121, 33);
             this.btnMassGeneration.TabIndex = 0;
@@ -179,7 +179,7 @@ private void InitializeComponent()
             // splitContainer1.Panel2
             // 
             this.splitContainer1.Panel2.Controls.Add(this.barcode);
-            this.splitContainer1.Size = new System.Drawing.Size(1015, 550);
+            this.splitContainer1.Size = new System.Drawing.Size(1015, 556);
             this.splitContainer1.SplitterDistance = 300;
             this.splitContainer1.TabIndex = 37;
             this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);
@@ -191,9 +191,9 @@ private void InitializeComponent()
             this.groupBox2.Controls.Add(this.lblAverageGenerationTime);
             this.groupBox2.Controls.Add(this.label14);
             this.groupBox2.Location = new System.Drawing.Point(8, 472);
-            this.groupBox2.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.groupBox2.Margin = new System.Windows.Forms.Padding(2);
             this.groupBox2.Name = "groupBox2";
-            this.groupBox2.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.groupBox2.Padding = new System.Windows.Forms.Padding(2);
             this.groupBox2.Size = new System.Drawing.Size(290, 80);
             this.groupBox2.TabIndex = 85;
             this.groupBox2.TabStop = false;
@@ -211,7 +211,7 @@ private void InitializeComponent()
             this.lblAverageGenerationTime.AutoSize = true;
             this.lblAverageGenerationTime.Location = new System.Drawing.Point(136, 63);
             this.lblAverageGenerationTime.Name = "lblAverageGenerationTime";
-            this.lblAverageGenerationTime.Size = new System.Drawing.Size(0, 15);
+            this.lblAverageGenerationTime.Size = new System.Drawing.Size(0, 13);
             this.lblAverageGenerationTime.TabIndex = 81;
             // 
             // label14
@@ -219,7 +219,7 @@ private void InitializeComponent()
             this.label14.AutoSize = true;
             this.label14.Location = new System.Drawing.Point(3, 63);
             this.label14.Name = "label14";
-            this.label14.Size = new System.Drawing.Size(152, 15);
+            this.label14.Size = new System.Drawing.Size(134, 13);
             this.label14.TabIndex = 80;
             this.label14.Text = "Average Generation Time: ";
             // 
@@ -233,9 +233,9 @@ private void InitializeComponent()
             this.groupBox1.Controls.Add(this.btnSave);
             this.groupBox1.Controls.Add(this.btnEncode);
             this.groupBox1.Location = new System.Drawing.Point(8, 378);
-            this.groupBox1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.groupBox1.Margin = new System.Windows.Forms.Padding(2);
             this.groupBox1.Name = "groupBox1";
-            this.groupBox1.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.groupBox1.Padding = new System.Windows.Forms.Padding(2);
             this.groupBox1.Size = new System.Drawing.Size(282, 90);
             this.groupBox1.TabIndex = 84;
             this.groupBox1.TabStop = false;
@@ -244,9 +244,9 @@ private void InitializeComponent()
             // 
             this.chkIncludeImageInSavedData.AutoSize = true;
             this.chkIncludeImageInSavedData.Location = new System.Drawing.Point(186, 70);
-            this.chkIncludeImageInSavedData.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.chkIncludeImageInSavedData.Margin = new System.Windows.Forms.Padding(2);
             this.chkIncludeImageInSavedData.Name = "chkIncludeImageInSavedData";
-            this.chkIncludeImageInSavedData.Size = new System.Drawing.Size(107, 19);
+            this.chkIncludeImageInSavedData.Size = new System.Drawing.Size(93, 17);
             this.chkIncludeImageInSavedData.TabIndex = 0;
             this.chkIncludeImageInSavedData.Text = "Include Image";
             this.chkIncludeImageInSavedData.UseVisualStyleBackColor = true;
@@ -347,7 +347,7 @@ private void InitializeComponent()
             this.label13.AutoSize = true;
             this.label13.Location = new System.Drawing.Point(58, 50);
             this.label13.Name = "label13";
-            this.label13.Size = new System.Drawing.Size(72, 15);
+            this.label13.Size = new System.Drawing.Size(65, 13);
             this.label13.TabIndex = 53;
             this.label13.Text = "AspectRatio";
             // 
@@ -356,7 +356,7 @@ private void InitializeComponent()
             this.label12.AutoSize = true;
             this.label12.Location = new System.Drawing.Point(8, 50);
             this.label12.Name = "label12";
-            this.label12.Size = new System.Drawing.Size(57, 15);
+            this.label12.Size = new System.Drawing.Size(51, 13);
             this.label12.TabIndex = 52;
             this.label12.Text = "BarWidth";
             // 
@@ -373,7 +373,7 @@ private void InitializeComponent()
             this.label7.AutoSize = true;
             this.label7.Location = new System.Drawing.Point(16, 8);
             this.label7.Name = "label7";
-            this.label7.Size = new System.Drawing.Size(38, 15);
+            this.label7.Size = new System.Drawing.Size(35, 13);
             this.label7.TabIndex = 41;
             this.label7.Text = "Width";
             // 
@@ -382,7 +382,7 @@ private void InitializeComponent()
             this.label6.AutoSize = true;
             this.label6.Location = new System.Drawing.Point(62, 8);
             this.label6.Name = "label6";
-            this.label6.Size = new System.Drawing.Size(43, 15);
+            this.label6.Size = new System.Drawing.Size(38, 13);
             this.label6.TabIndex = 42;
             this.label6.Text = "Height";
             // 
@@ -399,7 +399,7 @@ private void InitializeComponent()
             this.label9.AutoSize = true;
             this.label9.Location = new System.Drawing.Point(53, 28);
             this.label9.Name = "label9";
-            this.label9.Size = new System.Drawing.Size(13, 15);
+            this.label9.Size = new System.Drawing.Size(12, 13);
             this.label9.TabIndex = 51;
             this.label9.Text = "x";
             // 
@@ -426,7 +426,7 @@ private void InitializeComponent()
             this.chkGenerateLabel.AutoSize = true;
             this.chkGenerateLabel.Location = new System.Drawing.Point(6, 15);
             this.chkGenerateLabel.Name = "chkGenerateLabel";
-            this.chkGenerateLabel.Size = new System.Drawing.Size(110, 19);
+            this.chkGenerateLabel.Size = new System.Drawing.Size(95, 17);
             this.chkGenerateLabel.TabIndex = 40;
             this.chkGenerateLabel.Text = "Generate label";
             this.chkGenerateLabel.UseVisualStyleBackColor = true;
@@ -436,7 +436,7 @@ private void InitializeComponent()
             this.label11.AutoSize = true;
             this.label11.Location = new System.Drawing.Point(3, 39);
             this.label11.Name = "label11";
-            this.label11.Size = new System.Drawing.Size(115, 15);
+            this.label11.Size = new System.Drawing.Size(102, 13);
             this.label11.TabIndex = 55;
             this.label11.Text = "Alternate Label Text";
             // 
@@ -445,7 +445,7 @@ private void InitializeComponent()
             this.label8.AutoSize = true;
             this.label8.Location = new System.Drawing.Point(6, 93);
             this.label8.Name = "label8";
-            this.label8.Size = new System.Drawing.Size(62, 15);
+            this.label8.Size = new System.Drawing.Size(53, 13);
             this.label8.TabIndex = 74;
             this.label8.Text = "Alignment";
             // 
@@ -454,7 +454,7 @@ private void InitializeComponent()
             this.label4.AutoSize = true;
             this.label4.Location = new System.Drawing.Point(7, 141);
             this.label4.Name = "label4";
-            this.label4.Size = new System.Drawing.Size(71, 15);
+            this.label4.Size = new System.Drawing.Size(61, 13);
             this.label4.TabIndex = 68;
             this.label4.Text = "Foreground";
             // 
@@ -474,7 +474,7 @@ private void InitializeComponent()
             this.label5.AutoSize = true;
             this.label5.Location = new System.Drawing.Point(70, 141);
             this.label5.Name = "label5";
-            this.label5.Size = new System.Drawing.Size(73, 15);
+            this.label5.Size = new System.Drawing.Size(65, 13);
             this.label5.TabIndex = 69;
             this.label5.Text = "Background";
             // 
@@ -516,7 +516,7 @@ private void InitializeComponent()
             this.label2.AutoSize = true;
             this.label2.Location = new System.Drawing.Point(5, 209);
             this.label2.Name = "label2";
-            this.label2.Size = new System.Drawing.Size(90, 15);
+            this.label2.Size = new System.Drawing.Size(80, 13);
             this.label2.TabIndex = 64;
             this.label2.Text = "Encoded Value";
             // 
@@ -525,7 +525,7 @@ private void InitializeComponent()
             this.lblEncodingTime.AutoSize = true;
             this.lblEncodingTime.Location = new System.Drawing.Point(89, 207);
             this.lblEncodingTime.Name = "lblEncodingTime";
-            this.lblEncodingTime.Size = new System.Drawing.Size(0, 15);
+            this.lblEncodingTime.Size = new System.Drawing.Size(0, 13);
             this.lblEncodingTime.TabIndex = 70;
             // 
             // label3
@@ -533,7 +533,7 @@ private void InitializeComponent()
             this.label3.AutoSize = true;
             this.label3.Location = new System.Drawing.Point(6, 48);
             this.label3.Name = "label3";
-            this.label3.Size = new System.Drawing.Size(59, 15);
+            this.label3.Size = new System.Drawing.Size(52, 13);
             this.label3.TabIndex = 65;
             this.label3.Text = "Encoding";
             // 
@@ -555,6 +555,7 @@ private void InitializeComponent()
             "Interleaved 2 of 5 Mod 10",
             "Standard 2 of 5",
             "Standard 2 of 5 Mod 10",
+            "IATA2of5",
             "Codabar",
             "PostNet",
             "Bookland/ISBN",
@@ -593,7 +594,7 @@ private void InitializeComponent()
             this.label1.AutoSize = true;
             this.label1.Location = new System.Drawing.Point(5, 8);
             this.label1.Name = "label1";
-            this.label1.Size = new System.Drawing.Size(96, 15);
+            this.label1.Size = new System.Drawing.Size(86, 13);
             this.label1.TabIndex = 63;
             this.label1.Text = "Value to Encode";
             // 
diff --git a/BarcodeStandardExample/TestApp.cs b/BarcodeStandardExample/TestApp.cs
index 3bbb4e8..5059806 100644
--- a/BarcodeStandardExample/TestApp.cs
+++ b/BarcodeStandardExample/TestApp.cs
@@ -82,10 +82,10 @@ private void btnEncode_Click(object sender, EventArgs e)
                     //===== Encoding performed here =====
                     barcode.BackgroundImage = Image.FromStream(_b.Encode(type, txtData.Text.Trim(), _b.ForeColor, _b.BackColor, w, h).Encode().AsStream());
                     //===================================
-                    
+
                     //show the encoding time
                     lblEncodingTime.Text = @"(" + Math.Round(_b.EncodingTime, 0, MidpointRounding.AwayFromZero) + @"ms)";
-                    
+
                     txtEncoded.Text = _b.EncodedValue;
 
                     tsslEncodedType.Text = @"Encoding Type: " + _b.EncodedType;
@@ -160,6 +160,7 @@ private Type GetTypeSelected()
                 case "Telepen": type = Type.Telepen; break;
                 case "FIM": type = Type.Fim; break;
                 case "Pharmacode": type = Type.Pharmacode; break;
+                case "IATA2of5": type = Type.IATA2of5; break;
                 default: MessageBox.Show(@"Please specify the encoding type."); break;
             }//switch
 
@@ -386,6 +387,9 @@ private void LoadFromSaveData(SaveData saveData)
                 case "Pharmacode":
                     cbEncodeType.SelectedIndex = cbEncodeType.FindString("Pharmacode");
                     break;
+                case "IATA2of5":
+                    cbEncodeType.SelectedIndex = cbEncodeType.FindString("IATA2of5");
+                    break;
 
                 default: throw new Exception("ELOADXML-1: Unsupported encoding type in XML.");
             }//switch
diff --git a/BarcodeStandardTests/Symbologies/IATA2of5Tests.cs b/BarcodeStandardTests/Symbologies/IATA2of5Tests.cs
new file mode 100644
index 0000000..80d36a3
--- /dev/null
+++ b/BarcodeStandardTests/Symbologies/IATA2of5Tests.cs
@@ -0,0 +1,24 @@
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using BarcodeStandard;
+
+namespace BarcodeStandardTests.Symbologies
+{
+    [TestClass]
+    public class IATA2of5Tests
+    {
+        private readonly Barcode _barcode = new()
+        {
+            EncodedType = Type.IATA2of5,
+        };
+
+        [DataTestMethod]
+        [DataRow("0380003562164928", "101010101110111010111011101010101110101011101010101110111010101011101110101010111011101011101110101010111010111010101011101110101010111010101110111010101011101011101110101010101110101110101110101110101011101010111011101010111010101010111011101010101110111001101")]
+        [DataRow("12345678901234567", "101011101010101110101110101011101110111010101010101110101110111010111010101011101110101010101011101110111010101110101011101011101010101110111010111010101011101011101010111011101110101010101011101011101110101110101010111011101010101011101110101010111011101001101")]
+        [DataRow("19279472947891274", "101011101010101110101110101110101011101010111010101011101110101110101110101010111010111010101011101110101110101011101011101011101010101110101110101010111011101110101011101010111010111010111010101011101011101010111010101011101110111010101110101110101011101001101")]
+        public void EncodeBarcode(string data, string expected)
+        {
+            _barcode.Encode(data);
+            Assert.AreEqual(expected, _barcode.EncodedValue, $"{_barcode.EncodedType}");
+        }
+    }
+}
diff --git a/README.md b/README.md
index 267b444..f193679 100644
--- a/README.md
+++ b/README.md
@@ -13,6 +13,7 @@ This library was designed to give an easy class for developers to use when they
 | ISBN          | Codabar       | Interleaved 2 of 5 |
 | ITF-14        | Telepen       | UPC Supplemental 2 |
 | JAN-13        | EAN-13        | UPC Supplemental 5 |
+| IATA2of5      |               |                    |
 
 ## Usage
 
@@ -42,4 +43,4 @@ If you find this or any of my software useful and decide its worth supporting.
 
 ## Copyright and license
 
-Copyright 2007-2023 Brad Barnhill. Code released under the [Apache License, Version 2.0](https://github.com/bbarnhill/barcodelib/blob/master/LICENSE).
+Copyright 2007-2024 Brad Barnhill. Code released under the [Apache License, Version 2.0](https://github.com/bbarnhill/barcodelib/blob/master/LICENSE).