Refactor ExifTagConstants into an enum,
uncomment some constants that appear accidentally commented,
protect public fields from changes,
and place constants inside their corresponding enum field.

Jira issue key: SANSELAN-42



git-svn-id: https://svn.apache.org/repos/asf/commons/proper/sanselan/trunk@1241131 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffField.java b/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffField.java
index de5cad2..583a053 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffField.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffField.java
@@ -28,6 +28,7 @@
 
 import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.common.bytesource.ByteSource;
+import org.apache.commons.sanselan.formats.tiff.constants.ExifTagConstants;
 import org.apache.commons.sanselan.formats.tiff.constants.GpsTagConstants;
 import org.apache.commons.sanselan.formats.tiff.constants.TagInfo;
 import org.apache.commons.sanselan.formats.tiff.constants.TiffConstants;
@@ -577,15 +578,15 @@
         return (String) o;
     }
 
-    private static final Map<Object, List<TagInfo>> makeTagMap(TagInfo tags[],
+    private static final Map<Object, List<TagInfo>> makeTagMap(List<TagInfo> tags,
                                                                boolean ignoreDuplicates, String name)
     {
         // make sure to use the thread-safe version; this is shared state.
         Map<Object, List<TagInfo>> map = new Hashtable<Object, List<TagInfo>>();
 
-        for (int i = 0; i < tags.length; i++)
+        for (int i = 0; i < tags.size(); i++)
         {
-            TagInfo tag = tags[i];
+            TagInfo tag = tags.get(i);
             Object key = new Integer(tag.tag);
 
             List<TagInfo> tagList = map.get(key);
@@ -615,7 +616,7 @@
             "GPS");
     private static final Map<Object, List<TagInfo>> TIFF_TAG_MAP = makeTagMap(TiffTagConstants.ALL_TIFF_TAGS, false,
             "TIFF");
-    private static final Map<Object, List<TagInfo>> EXIF_TAG_MAP = makeTagMap(ALL_EXIF_TAGS, true,
+    private static final Map<Object, List<TagInfo>> EXIF_TAG_MAP = makeTagMap(ExifTagConstants.ALL_EXIF_TAGS, true,
             "EXIF");
     private static final Map<Object, List<TagInfo>> ALL_TAG_MAP = makeTagMap(ALL_TAGS, true, "All");
 
diff --git a/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffImageMetadata.java b/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffImageMetadata.java
index 2b9ec87..41e8ff8 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffImageMetadata.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffImageMetadata.java
@@ -49,13 +49,13 @@
         this.contents = contents;
     }
 
-    private static final Map<Object, Integer> countTags(TagInfo tags[])
+    private static final Map<Object, Integer> countTags(List<TagInfo> tags)
     {
         Map<Object, Integer> map = new Hashtable<Object, Integer>();
 
-        for (int i = 0; i < tags.length; i++)
+        for (int i = 0; i < tags.size(); i++)
         {
-            TagInfo tag = tags[i];
+            TagInfo tag = tags.get(i);
             Object key = new Integer(tag.tag);
 
             Integer count = map.get(key);
diff --git a/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffImageParser.java b/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffImageParser.java
index f460a45..d3e77cb 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffImageParser.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffImageParser.java
@@ -36,6 +36,7 @@
 import org.apache.commons.sanselan.common.IImageMetadata;
 import org.apache.commons.sanselan.common.bytesource.ByteSource;
 import org.apache.commons.sanselan.formats.tiff.TiffDirectory.ImageDataElement;
+import org.apache.commons.sanselan.formats.tiff.constants.ExifTagConstants;
 import org.apache.commons.sanselan.formats.tiff.constants.TiffConstants;
 import org.apache.commons.sanselan.formats.tiff.constants.TiffTagConstants;
 import org.apache.commons.sanselan.formats.tiff.datareaders.DataReader;
@@ -89,7 +90,7 @@
                 .readFirstDirectory(byteSource, params, false, formatCompliance);
         TiffDirectory directory = contents.directories.get(0);
 
-        TiffField field = directory.findField(EXIF_TAG_ICC_PROFILE);
+        TiffField field = directory.findField(ExifTagConstants.ICC_PROFILE.tagInfo);
         if (null == field)
             return null;
         return field.oversizeValue;
diff --git a/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffReader.java b/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffReader.java
index 5513080..6ef7091 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffReader.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffReader.java
@@ -27,6 +27,7 @@
 import org.apache.commons.sanselan.common.BinaryFileParser;
 import org.apache.commons.sanselan.common.bytesource.ByteSource;
 import org.apache.commons.sanselan.formats.tiff.TiffDirectory.ImageDataElement;
+import org.apache.commons.sanselan.formats.tiff.constants.ExifTagConstants;
 import org.apache.commons.sanselan.formats.tiff.constants.TiffConstants;
 import org.apache.commons.sanselan.formats.tiff.constants.TiffTagConstants;
 import org.apache.commons.sanselan.util.Debug;
@@ -248,9 +249,9 @@
                 {
                     TiffField entry = fields.get(j);
 
-                    if (entry.tag == TiffConstants.EXIF_TAG_EXIF_OFFSET.tag
-                            || entry.tag == TiffConstants.EXIF_TAG_GPSINFO.tag
-                            || entry.tag == TiffConstants.EXIF_TAG_INTEROP_OFFSET.tag)
+                    if (entry.tag == ExifTagConstants.EXIF_OFFSET.tagInfo.tag
+                            || entry.tag == ExifTagConstants.GPSINFO.tagInfo.tag
+                            || entry.tag == ExifTagConstants.INTEROP_OFFSET.tagInfo.tag)
                     { /* do nothing */ }
                     else
                         continue;
@@ -258,11 +259,11 @@
                     int subDirectoryOffset = ((Number) entry.getValue())
                             .intValue();
                     int subDirectoryType;
-                    if (entry.tag == TiffConstants.EXIF_TAG_EXIF_OFFSET.tag)
+                    if (entry.tag == ExifTagConstants.EXIF_OFFSET.tagInfo.tag)
                         subDirectoryType = TiffDirectory.DIRECTORY_TYPE_EXIF;
-                    else if (entry.tag == TiffConstants.EXIF_TAG_GPSINFO.tag)
+                    else if (entry.tag == ExifTagConstants.GPSINFO.tagInfo.tag)
                         subDirectoryType = TiffDirectory.DIRECTORY_TYPE_GPS;
-                    else if (entry.tag == TiffConstants.EXIF_TAG_INTEROP_OFFSET.tag)
+                    else if (entry.tag == ExifTagConstants.INTEROP_OFFSET.tagInfo.tag)
                         subDirectoryType = TiffDirectory.DIRECTORY_TYPE_INTEROPERABILITY;
                     else
                         throw new ImageReadException(
diff --git a/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/AllTagConstants.java b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/AllTagConstants.java
index 10f1482..1dcf5c7 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/AllTagConstants.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/AllTagConstants.java
@@ -16,15 +16,17 @@
  */
 package org.apache.commons.sanselan.formats.tiff.constants;
 
+import java.util.Collections;
+import java.util.List;
+
 import org.apache.commons.sanselan.SanselanConstants;
 
 public interface AllTagConstants
         extends
-            SanselanConstants,
-            ExifTagConstants
+            SanselanConstants
 {
-    public static final TagInfo ALL_TAGS[] = TagConstantsUtils.mergeTagLists(new TagInfo[][]{
-                TiffTagConstants.ALL_TIFF_TAGS, ALL_EXIF_TAGS, GpsTagConstants.ALL_GPS_TAGS,
-        });
+    public static final List<TagInfo> ALL_TAGS = Collections.unmodifiableList(
+            TagConstantsUtils.mergeTagLists(TiffTagConstants.values(),
+                    GpsTagConstants.values(), ExifTagConstants.values()));
 
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/ExifTagConstants.java b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/ExifTagConstants.java
index c416da9..28bdd5a 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/ExifTagConstants.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/ExifTagConstants.java
@@ -16,1462 +16,1355 @@
  */
 package org.apache.commons.sanselan.formats.tiff.constants;
 
-public interface ExifTagConstants
-        extends
+import java.util.Collections;
+import java.util.List;
+
+public enum ExifTagConstants
+        implements
             TiffDirectoryConstants,
-            TiffFieldTypeConstants
+            TiffFieldTypeConstants,
+            TagHolder
 { /**/
-    public static final TagInfo EXIF_TAG_INTEROP_INDEX = new TagInfo(
+    INTEROP_INDEX(new TagInfo(
             "Interop Index", 0x0001, FIELD_TYPE_ASCII, 1,
-            EXIF_DIRECTORY_INTEROP_IFD);
-    public static final TagInfo EXIF_TAG_INTEROP_VERSION = new TagInfo(
+            EXIF_DIRECTORY_INTEROP_IFD)),
+    INTEROP_VERSION(new TagInfo(
             "Interop Version", 0x0002, FIELD_TYPE_UNDEFINED, 1,
-            EXIF_DIRECTORY_INTEROP_IFD);
-    public static final TagInfo EXIF_TAG_PROCESSING_SOFTWARE = new TagInfo(
+            EXIF_DIRECTORY_INTEROP_IFD)),
+    PROCESSING_SOFTWARE(new TagInfo(
             "Processing Software", 0x000b, FIELD_TYPE_ASCII, 1,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_SUBFILE_TYPE = new TagInfo(
-            "Subfile Type", 0x00fe, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_IFD0);
-    // tag constants public static final int SUBFILE_TYPE_VALUE_FULL_RESOLUTION_IMAGE = 0;
-    public static final int SUBFILE_TYPE_VALUE_REDUCED_RESOLUTION_IMAGE = 1;
-    public static final int SUBFILE_TYPE_VALUE_SINGLE_PAGE_OF_MULTI_PAGE_IMAGE = 2;
-    public static final int SUBFILE_TYPE_VALUE_SINGLE_PAGE_OF_MULTI_PAGE_REDUCED_RESOLUTION_IMAGE = 3;
-    public static final int SUBFILE_TYPE_VALUE_TRANSPARENCY_MASK = 4;
-    public static final int SUBFILE_TYPE_VALUE_TRANSPARENCY_MASK_OF_REDUCED_RESOLUTION_IMAGE = 5;
-    public static final int SUBFILE_TYPE_VALUE_TRANSPARENCY_MASK_OF_MULTI_PAGE_IMAGE = 6;
-    public static final int SUBFILE_TYPE_VALUE_TRANSPARENCY_MASK_OF_REDUCED_RESOLUTION_MULTI_PAGE_IMAGE = 7;
-    public static final TagInfo EXIF_TAG_OLD_SUBFILE_TYPE = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    SUBFILE_TYPE(new TagInfo(
+            "Subfile Type", 0x00fe, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_IFD0)) {
+        public static final int SUBFILE_TYPE_VALUE_FULL_RESOLUTION_IMAGE = 0;
+        public static final int SUBFILE_TYPE_VALUE_REDUCED_RESOLUTION_IMAGE = 1;
+        public static final int SUBFILE_TYPE_VALUE_SINGLE_PAGE_OF_MULTI_PAGE_IMAGE = 2;
+        public static final int SUBFILE_TYPE_VALUE_SINGLE_PAGE_OF_MULTI_PAGE_REDUCED_RESOLUTION_IMAGE = 3;
+        public static final int SUBFILE_TYPE_VALUE_TRANSPARENCY_MASK = 4;
+        public static final int SUBFILE_TYPE_VALUE_TRANSPARENCY_MASK_OF_REDUCED_RESOLUTION_IMAGE = 5;
+        public static final int SUBFILE_TYPE_VALUE_TRANSPARENCY_MASK_OF_MULTI_PAGE_IMAGE = 6;
+        public static final int SUBFILE_TYPE_VALUE_TRANSPARENCY_MASK_OF_REDUCED_RESOLUTION_MULTI_PAGE_IMAGE = 7;
+    },
+    OLD_SUBFILE_TYPE(new TagInfo(
             "Old Subfile Type", 0x00ff, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_IFD0);
-    // tag constants public static final int OLD_SUBFILE_TYPE_VALUE_FULL_RESOLUTION_IMAGE = 1;
-    public static final int OLD_SUBFILE_TYPE_VALUE_REDUCED_RESOLUTION_IMAGE = 2;
-    public static final int OLD_SUBFILE_TYPE_VALUE_SINGLE_PAGE_OF_MULTI_PAGE_IMAGE = 3;
-    public static final TagInfo EXIF_TAG_IMAGE_WIDTH_IFD0 = new TagInfo(
-            "Image Width", 0x0100, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_IMAGE_HEIGHT_IFD0 = new TagInfo(
-            "Image Height", 0x0101, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_BITS_PER_SAMPLE = new TagInfo(
+            EXIF_DIRECTORY_IFD0)) {
+        public static final int OLD_SUBFILE_TYPE_VALUE_FULL_RESOLUTION_IMAGE = 1;
+        public static final int OLD_SUBFILE_TYPE_VALUE_REDUCED_RESOLUTION_IMAGE = 2;
+        public static final int OLD_SUBFILE_TYPE_VALUE_SINGLE_PAGE_OF_MULTI_PAGE_IMAGE = 3;
+    },
+    IMAGE_WIDTH_IFD0(new TagInfo(
+            "Image Width", 0x0100, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_IFD0)),
+    IMAGE_HEIGHT_IFD0(new TagInfo(
+            "Image Height", 0x0101, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_IFD0)),
+    BITS_PER_SAMPLE(new TagInfo(
             "Bits Per Sample", 0x0102, FIELD_TYPE_SHORT, -1,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_COMPRESSION = new TagInfo(
-            "Compression", 0x0103, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0);
-    // tag constants public static final int COMPRESSION_VALUE_UNCOMPRESSED = 1;
-    public static final int COMPRESSION_VALUE_CCITT_1D = 2;
-    public static final int COMPRESSION_VALUE_T4_GROUP_3_FAX = 3;
-    public static final int COMPRESSION_VALUE_T6_GROUP_4_FAX = 4;
-    public static final int COMPRESSION_VALUE_LZW = 5;
-    public static final int COMPRESSION_VALUE_JPEG_OLD_STYLE = 6;
-    public static final int COMPRESSION_VALUE_JPEG = 7;
-    public static final int COMPRESSION_VALUE_ADOBE_DEFLATE = 8;
-    public static final int COMPRESSION_VALUE_JBIG_B_AND_W = 9;
-    public static final int COMPRESSION_VALUE_JBIG_COLOR = 10;
-    public static final int COMPRESSION_VALUE_NEXT = 32766;
-    public static final int COMPRESSION_VALUE_EPSON_ERF_COMPRESSED = 32769;
-    public static final int COMPRESSION_VALUE_CCIRLEW = 32771;
-    public static final int COMPRESSION_VALUE_PACK_BITS = 32773;
-    public static final int COMPRESSION_VALUE_THUNDERSCAN = 32809;
-    public static final int COMPRESSION_VALUE_IT8CTPAD = 32895;
-    public static final int COMPRESSION_VALUE_IT8LW = 32896;
-    public static final int COMPRESSION_VALUE_IT8MP = 32897;
-    public static final int COMPRESSION_VALUE_IT8BL = 32898;
-    public static final int COMPRESSION_VALUE_PIXAR_FILM = 32908;
-    public static final int COMPRESSION_VALUE_PIXAR_LOG = 32909;
-    public static final int COMPRESSION_VALUE_DEFLATE = 32946;
-    public static final int COMPRESSION_VALUE_DCS = 32947;
-    public static final int COMPRESSION_VALUE_JBIG = 34661;
-    public static final int COMPRESSION_VALUE_SGILOG = 34676;
-    public static final int COMPRESSION_VALUE_SGILOG_24 = 34677;
-    public static final int COMPRESSION_VALUE_JPEG_2000 = 34712;
-    public static final int COMPRESSION_VALUE_NIKON_NEF_COMPRESSED = 34713;
-    public static final int COMPRESSION_VALUE_KODAK_DCR_COMPRESSED = 65000;
-    public static final int COMPRESSION_VALUE_PENTAX_PEF_COMPRESSED = 65535;
-    public static final TagInfo EXIF_TAG_PHOTOMETRIC_INTERPRETATION = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    COMPRESSION(new TagInfo(
+            "Compression", 0x0103, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0)) {
+        public static final int COMPRESSION_VALUE_UNCOMPRESSED = 1;
+        public static final int COMPRESSION_VALUE_CCITT_1D = 2;
+        public static final int COMPRESSION_VALUE_T4_GROUP_3_FAX = 3;
+        public static final int COMPRESSION_VALUE_T6_GROUP_4_FAX = 4;
+        public static final int COMPRESSION_VALUE_LZW = 5;
+        public static final int COMPRESSION_VALUE_JPEG_OLD_STYLE = 6;
+        public static final int COMPRESSION_VALUE_JPEG = 7;
+        public static final int COMPRESSION_VALUE_ADOBE_DEFLATE = 8;
+        public static final int COMPRESSION_VALUE_JBIG_B_AND_W = 9;
+        public static final int COMPRESSION_VALUE_JBIG_COLOR = 10;
+        public static final int COMPRESSION_VALUE_NEXT = 32766;
+        public static final int COMPRESSION_VALUE_EPSON_ERF_COMPRESSED = 32769;
+        public static final int COMPRESSION_VALUE_CCIRLEW = 32771;
+        public static final int COMPRESSION_VALUE_PACK_BITS = 32773;
+        public static final int COMPRESSION_VALUE_THUNDERSCAN = 32809;
+        public static final int COMPRESSION_VALUE_IT8CTPAD = 32895;
+        public static final int COMPRESSION_VALUE_IT8LW = 32896;
+        public static final int COMPRESSION_VALUE_IT8MP = 32897;
+        public static final int COMPRESSION_VALUE_IT8BL = 32898;
+        public static final int COMPRESSION_VALUE_PIXAR_FILM = 32908;
+        public static final int COMPRESSION_VALUE_PIXAR_LOG = 32909;
+        public static final int COMPRESSION_VALUE_DEFLATE = 32946;
+        public static final int COMPRESSION_VALUE_DCS = 32947;
+        public static final int COMPRESSION_VALUE_JBIG = 34661;
+        public static final int COMPRESSION_VALUE_SGILOG = 34676;
+        public static final int COMPRESSION_VALUE_SGILOG_24 = 34677;
+        public static final int COMPRESSION_VALUE_JPEG_2000 = 34712;
+        public static final int COMPRESSION_VALUE_NIKON_NEF_COMPRESSED = 34713;
+        public static final int COMPRESSION_VALUE_KODAK_DCR_COMPRESSED = 65000;
+        public static final int COMPRESSION_VALUE_PENTAX_PEF_COMPRESSED = 65535;
+    },
+    PHOTOMETRIC_INTERPRETATION(new TagInfo(
             "Photometric Interpretation", 0x0106, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_IFD0);
-    // tag constants public static final int PHOTOMETRIC_INTERPRETATION_VALUE_WHITE_IS_ZERO = 0;
-    public static final int PHOTOMETRIC_INTERPRETATION_VALUE_BLACK_IS_ZERO = 1;
-    public static final int PHOTOMETRIC_INTERPRETATION_VALUE_RGB = 2;
-    public static final int PHOTOMETRIC_INTERPRETATION_VALUE_RGB_PALETTE = 3;
-    public static final int PHOTOMETRIC_INTERPRETATION_VALUE_TRANSPARENCY_MASK = 4;
-    public static final int PHOTOMETRIC_INTERPRETATION_VALUE_CMYK = 5;
-    public static final int PHOTOMETRIC_INTERPRETATION_VALUE_YCB_CR = 6;
-    public static final int PHOTOMETRIC_INTERPRETATION_VALUE_CIELAB = 8;
-    public static final int PHOTOMETRIC_INTERPRETATION_VALUE_ICCLAB = 9;
-    public static final int PHOTOMETRIC_INTERPRETATION_VALUE_ITULAB = 10;
-    public static final int PHOTOMETRIC_INTERPRETATION_VALUE_COLOR_FILTER_ARRAY = 32803;
-    public static final int PHOTOMETRIC_INTERPRETATION_VALUE_PIXAR_LOG_L = 32844;
-    public static final int PHOTOMETRIC_INTERPRETATION_VALUE_PIXAR_LOG_LUV = 32845;
-    public static final int PHOTOMETRIC_INTERPRETATION_VALUE_LINEAR_RAW = 34892;
-    public static final TagInfo EXIF_TAG_THRESHOLDING = new TagInfo(
-            "Thresholding", 0x0107, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0);
-    // tag constants public static final int THRESHOLDING_VALUE_NO_DITHERING_OR_HALFTONING = 1;
-    public static final int THRESHOLDING_VALUE_ORDERED_DITHER_OR_HALFTONE = 2;
-    public static final int THRESHOLDING_VALUE_RANDOMIZED_DITHER = 3;
-    public static final TagInfo EXIF_TAG_CELL_WIDTH = new TagInfo("Cell Width",
-            0x0108, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_CELL_LENGTH = new TagInfo(
-            "Cell Length", 0x0109, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_FILL_ORDER = new TagInfo("Fill Order",
-            0x010a, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0);
-    // tag constants public static final int FILL_ORDER_VALUE_NORMAL = 1;
-    public static final int FILL_ORDER_VALUE_REVERSED = 2;
-    public static final TagInfo EXIF_TAG_DOCUMENT_NAME = new TagInfo(
-            "Document Name", 0x010d, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_IMAGE_DESCRIPTION = new TagInfo(
+            EXIF_DIRECTORY_IFD0)) {
+        public static final int PHOTOMETRIC_INTERPRETATION_VALUE_WHITE_IS_ZERO = 0;
+        public static final int PHOTOMETRIC_INTERPRETATION_VALUE_BLACK_IS_ZERO = 1;
+        public static final int PHOTOMETRIC_INTERPRETATION_VALUE_RGB = 2;
+        public static final int PHOTOMETRIC_INTERPRETATION_VALUE_RGB_PALETTE = 3;
+        public static final int PHOTOMETRIC_INTERPRETATION_VALUE_TRANSPARENCY_MASK = 4;
+        public static final int PHOTOMETRIC_INTERPRETATION_VALUE_CMYK = 5;
+        public static final int PHOTOMETRIC_INTERPRETATION_VALUE_YCB_CR = 6;
+        public static final int PHOTOMETRIC_INTERPRETATION_VALUE_CIELAB = 8;
+        public static final int PHOTOMETRIC_INTERPRETATION_VALUE_ICCLAB = 9;
+        public static final int PHOTOMETRIC_INTERPRETATION_VALUE_ITULAB = 10;
+        public static final int PHOTOMETRIC_INTERPRETATION_VALUE_COLOR_FILTER_ARRAY = 32803;
+        public static final int PHOTOMETRIC_INTERPRETATION_VALUE_PIXAR_LOG_L = 32844;
+        public static final int PHOTOMETRIC_INTERPRETATION_VALUE_PIXAR_LOG_LUV = 32845;
+        public static final int PHOTOMETRIC_INTERPRETATION_VALUE_LINEAR_RAW = 34892;
+    },
+    THRESHOLDING(new TagInfo(
+            "Thresholding", 0x0107, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0)) {
+        public static final int THRESHOLDING_VALUE_NO_DITHERING_OR_HALFTONING = 1;
+        public static final int THRESHOLDING_VALUE_ORDERED_DITHER_OR_HALFTONE = 2;
+        public static final int THRESHOLDING_VALUE_RANDOMIZED_DITHER = 3;
+    },
+    CELL_WIDTH(new TagInfo("Cell Width",
+            0x0108, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0)),
+    CELL_LENGTH(new TagInfo(
+            "Cell Length", 0x0109, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0)),
+    FILL_ORDER(new TagInfo("Fill Order",
+            0x010a, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0)) {
+        public static final int FILL_ORDER_VALUE_NORMAL = 1;
+        public static final int FILL_ORDER_VALUE_REVERSED = 2;
+    },
+    DOCUMENT_NAME(new TagInfo(
+            "Document Name", 0x010d, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0)),
+    IMAGE_DESCRIPTION(new TagInfo(
             "Image Description", 0x010e, FIELD_TYPE_ASCII, 1,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_MAKE = new TagInfo("Make", 0x010f,
-            FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_MODEL = new TagInfo("Model", 0x0110,
-            FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0);
-    // poly tag public static final TagInfo2 EXIF_TAG_STRIP_OFFSETS = new TagInfo2( "StripOffsets", 0x0111, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_PREVIEW_IMAGE_START_IFD0 = new TagInfo.Offset(
+            EXIF_DIRECTORY_IFD0)),
+    MAKE(new TagInfo("Make", 0x010f,
+            FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0)),
+    MODEL(new TagInfo("Model", 0x0110,
+            FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0)),
+    // poly tag public static final TagInfo2 STRIP_OFFSETS(new TagInfo2( "StripOffsets", 0x0111, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    PREVIEW_IMAGE_START_IFD0(new TagInfo.Offset(
             "Preview Image Start", 0x0111, FIELD_TYPE_LONG, 1,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_PREVIEW_IMAGE_START_SUB_IFD1 = new TagInfo.Offset(
+            EXIF_DIRECTORY_IFD0)),
+    PREVIEW_IMAGE_START_SUB_IFD1(new TagInfo.Offset(
             "Preview Image Start", 0x0111, FIELD_TYPE_LONG, 1,
-            EXIF_DIRECTORY_SUB_IFD1);
-    public static final TagInfo EXIF_TAG_JPG_FROM_RAW_START_SUB_IFD2 = new TagInfo.Offset(
+            EXIF_DIRECTORY_SUB_IFD1)),
+    JPG_FROM_RAW_START_SUB_IFD2(new TagInfo.Offset(
             "Jpg From Raw Start", 0x0111, FIELD_TYPE_LONG, 1,
-            EXIF_DIRECTORY_SUB_IFD2);
-    public static final TagInfo EXIF_TAG_ORIENTATION = new TagInfo(
-            "Orientation", 0x0112, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0);
-    // tag constants public static final int ORIENTATION_VALUE_HORIZONTAL_NORMAL = 1;
-    public static final int ORIENTATION_VALUE_MIRROR_HORIZONTAL = 2;
-    public static final int ORIENTATION_VALUE_ROTATE_180 = 3;
-    public static final int ORIENTATION_VALUE_MIRROR_VERTICAL = 4;
-    public static final int ORIENTATION_VALUE_MIRROR_HORIZONTAL_AND_ROTATE_270_CW = 5;
-    public static final int ORIENTATION_VALUE_ROTATE_90_CW = 6;
-    public static final int ORIENTATION_VALUE_MIRROR_HORIZONTAL_AND_ROTATE_90_CW = 7;
-    public static final int ORIENTATION_VALUE_ROTATE_270_CW = 8;
-    public static final TagInfo EXIF_TAG_SAMPLES_PER_PIXEL = new TagInfo(
+            EXIF_DIRECTORY_SUB_IFD2)),
+    ORIENTATION(new TagInfo(
+            "Orientation", 0x0112, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0)) {
+        public static final int ORIENTATION_VALUE_HORIZONTAL_NORMAL = 1;
+        public static final int ORIENTATION_VALUE_MIRROR_HORIZONTAL = 2;
+        public static final int ORIENTATION_VALUE_ROTATE_180 = 3;
+        public static final int ORIENTATION_VALUE_MIRROR_VERTICAL = 4;
+        public static final int ORIENTATION_VALUE_MIRROR_HORIZONTAL_AND_ROTATE_270_CW = 5;
+        public static final int ORIENTATION_VALUE_ROTATE_90_CW = 6;
+        public static final int ORIENTATION_VALUE_MIRROR_HORIZONTAL_AND_ROTATE_90_CW = 7;
+        public static final int ORIENTATION_VALUE_ROTATE_270_CW = 8;
+    },
+    SAMPLES_PER_PIXEL(new TagInfo(
             "Samples Per Pixel", 0x0115, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_ROWS_PER_STRIP = new TagInfo(
-            "Rows Per Strip", 0x0116, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_IFD0);
-    // poly tag public static final TagInfo2 EXIF_TAG_STRIP_BYTE_COUNTS = new TagInfo2( "StripByteCounts", 0x0117, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_PREVIEW_IMAGE_LENGTH_IFD0 = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    ROWS_PER_STRIP(new TagInfo(
+            "Rows Per Strip", 0x0116, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_IFD0)),
+    // poly tag public static final TagInfo2 STRIP_BYTE_COUNTS(new TagInfo2( "StripByteCounts", 0x0117, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    PREVIEW_IMAGE_LENGTH_IFD0(new TagInfo(
             "Preview Image Length", 0x0117, FIELD_TYPE_LONG, 1,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_PREVIEW_IMAGE_LENGTH_SUB_IFD1 = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    PREVIEW_IMAGE_LENGTH_SUB_IFD1(new TagInfo(
             "Preview Image Length", 0x0117, FIELD_TYPE_LONG, 1,
-            EXIF_DIRECTORY_SUB_IFD1);
-    public static final TagInfo EXIF_TAG_JPG_FROM_RAW_LENGTH_SUB_IFD2 = new TagInfo(
+            EXIF_DIRECTORY_SUB_IFD1)),
+    JPG_FROM_RAW_LENGTH_SUB_IFD2(new TagInfo(
             "Jpg From Raw Length", 0x0117, FIELD_TYPE_LONG, 1,
-            EXIF_DIRECTORY_SUB_IFD2);
-    public static final TagInfo EXIF_TAG_MIN_SAMPLE_VALUE = new TagInfo(
+            EXIF_DIRECTORY_SUB_IFD2)),
+    MIN_SAMPLE_VALUE(new TagInfo(
             "Min Sample Value", 0x0118, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_MAX_SAMPLE_VALUE = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    MAX_SAMPLE_VALUE(new TagInfo(
             "Max Sample Value", 0x0119, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_XRESOLUTION = new TagInfo(
-            "XResolution", 0x011a, FIELD_TYPE_RATIONAL, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_YRESOLUTION = new TagInfo(
-            "YResolution", 0x011b, FIELD_TYPE_RATIONAL, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_PLANAR_CONFIGURATION = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    XRESOLUTION(new TagInfo(
+            "XResolution", 0x011a, FIELD_TYPE_RATIONAL, 1, EXIF_DIRECTORY_IFD0)),
+    YRESOLUTION(new TagInfo(
+            "YResolution", 0x011b, FIELD_TYPE_RATIONAL, 1, EXIF_DIRECTORY_IFD0)),
+    PLANAR_CONFIGURATION(new TagInfo(
             "Planar Configuration", 0x011c, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_IFD0);
-    // tag constants public static final int PLANAR_CONFIGURATION_VALUE_CHUNKY = 1;
-    public static final int PLANAR_CONFIGURATION_VALUE_PLANAR = 2;
-    public static final TagInfo EXIF_TAG_PAGE_NAME = new TagInfo("Page Name",
-            0x011d, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_XPOSITION = new TagInfo("XPosition",
-            0x011e, FIELD_TYPE_RATIONAL, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_YPOSITION = new TagInfo("YPosition",
-            0x011f, FIELD_TYPE_RATIONAL, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_FREE_OFFSETS = new TagInfo(
+            EXIF_DIRECTORY_IFD0)) {
+        public static final int PLANAR_CONFIGURATION_VALUE_CHUNKY = 1;
+        public static final int PLANAR_CONFIGURATION_VALUE_PLANAR = 2;
+    },
+    PAGE_NAME(new TagInfo("Page Name",
+            0x011d, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0)),
+    XPOSITION(new TagInfo("XPosition",
+            0x011e, FIELD_TYPE_RATIONAL, 1, EXIF_DIRECTORY_IFD0)),
+    YPOSITION(new TagInfo("YPosition",
+            0x011f, FIELD_TYPE_RATIONAL, 1, EXIF_DIRECTORY_IFD0)),
+    FREE_OFFSETS(new TagInfo(
             "Free Offsets", 0x0120, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_FREE_BYTE_COUNTS = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    FREE_BYTE_COUNTS(new TagInfo(
             "Free Byte Counts", 0x0121, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_GRAY_RESPONSE_UNIT = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    GRAY_RESPONSE_UNIT(new TagInfo(
             "Gray Response Unit", 0x0122, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_IFD0);
-    // tag constants public static final int GRAY_RESPONSE_UNIT_VALUE_0_1 = 1;
-    public static final int GRAY_RESPONSE_UNIT_VALUE_0_001 = 2;
-    public static final int GRAY_RESPONSE_UNIT_VALUE_0_0001 = 3;
-    public static final int GRAY_RESPONSE_UNIT_VALUE_1E_05 = 4;
-    public static final int GRAY_RESPONSE_UNIT_VALUE_1E_06 = 5;
-    public static final TagInfo EXIF_TAG_GRAY_RESPONSE_CURVE = new TagInfo(
+            EXIF_DIRECTORY_IFD0)) {
+        public static final int GRAY_RESPONSE_UNIT_VALUE_0_1 = 1;
+        public static final int GRAY_RESPONSE_UNIT_VALUE_0_001 = 2;
+        public static final int GRAY_RESPONSE_UNIT_VALUE_0_0001 = 3;
+        public static final int GRAY_RESPONSE_UNIT_VALUE_1E_05 = 4;
+        public static final int GRAY_RESPONSE_UNIT_VALUE_1E_06 = 5;
+    },
+    GRAY_RESPONSE_CURVE(new TagInfo(
             "Gray Response Curve", 0x0123, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_T4OPTIONS = new TagInfo("T4 Options",
-            0x0124, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_T6OPTIONS = new TagInfo("T6 Options",
-            0x0125, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_RESOLUTION_UNIT = new TagInfo(
-            "Resolution Unit", 0x0128, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0);
-    // tag constants public static final int RESOLUTION_UNIT_VALUE_NONE = 1;
-    public static final int RESOLUTION_UNIT_VALUE_INCHES = 2;
-    public static final int RESOLUTION_UNIT_VALUE_CM = 3;
-    public static final TagInfo EXIF_TAG_PAGE_NUMBER = new TagInfo(
-            "Page Number", 0x0129, FIELD_TYPE_SHORT, 2, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_COLOR_RESPONSE_UNIT = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    T4OPTIONS(new TagInfo("T4 Options",
+            0x0124, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    T6OPTIONS(new TagInfo("T6 Options",
+            0x0125, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    RESOLUTION_UNIT(new TagInfo(
+            "Resolution Unit", 0x0128, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0)) {
+        public static final int RESOLUTION_UNIT_VALUE_NONE = 1;
+        public static final int RESOLUTION_UNIT_VALUE_INCHES = 2;
+        public static final int RESOLUTION_UNIT_VALUE_CM = 3;
+    },
+    PAGE_NUMBER(new TagInfo(
+            "Page Number", 0x0129, FIELD_TYPE_SHORT, 2, EXIF_DIRECTORY_IFD0)),
+    COLOR_RESPONSE_UNIT(new TagInfo(
             "Color Response Unit", 0x012c, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_TRANSFER_FUNCTION = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    TRANSFER_FUNCTION(new TagInfo(
             "Transfer Function", 0x012d, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_SOFTWARE = new TagInfo("Software",
-            0x0131, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_MODIFY_DATE = new TagInfo(
-            "Modify Date", 0x0132, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_ARTIST = new TagInfo("Artist", 0x013b,
-            FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_HOST_COMPUTER = new TagInfo(
-            "Host Computer", 0x013c, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_PREDICTOR = new TagInfo("Predictor",
-            0x013d, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0);
-    // tag constants public static final int PREDICTOR_VALUE_NONE = 1;
-    public static final int PREDICTOR_VALUE_HORIZONTAL_DIFFERENCING = 2;
-    public static final TagInfo EXIF_TAG_WHITE_POINT = new TagInfo(
-            "White Point", 0x013e, FIELD_TYPE_RATIONAL, 2, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_PRIMARY_CHROMATICITIES = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    SOFTWARE(new TagInfo("Software",
+            0x0131, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0)),
+    MODIFY_DATE(new TagInfo(
+            "Modify Date", 0x0132, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0)),
+    ARTIST(new TagInfo("Artist", 0x013b,
+            FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0)),
+    HOST_COMPUTER(new TagInfo(
+            "Host Computer", 0x013c, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0)),
+    PREDICTOR(new TagInfo("Predictor",
+            0x013d, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0)) {
+        public static final int PREDICTOR_VALUE_NONE = 1;
+        public static final int PREDICTOR_VALUE_HORIZONTAL_DIFFERENCING = 2;
+    },
+    WHITE_POINT(new TagInfo(
+            "White Point", 0x013e, FIELD_TYPE_RATIONAL, 2, EXIF_DIRECTORY_IFD0)),
+    PRIMARY_CHROMATICITIES(new TagInfo(
             "Primary Chromaticities", 0x013f, FIELD_TYPE_RATIONAL, 6,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_COLOR_MAP = new TagInfo("Color Map",
-            0x0140, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_HALFTONE_HINTS = new TagInfo(
-            "Halftone Hints", 0x0141, FIELD_TYPE_SHORT, 2, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_TILE_WIDTH = new TagInfo("Tile Width",
-            0x0142, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_TILE_LENGTH = new TagInfo(
-            "Tile Length", 0x0143, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_TILE_OFFSETS = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    COLOR_MAP(new TagInfo("Color Map",
+            0x0140, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    HALFTONE_HINTS(new TagInfo(
+            "Halftone Hints", 0x0141, FIELD_TYPE_SHORT, 2, EXIF_DIRECTORY_IFD0)),
+    TILE_WIDTH(new TagInfo("Tile Width",
+            0x0142, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_IFD0)),
+    TILE_LENGTH(new TagInfo(
+            "Tile Length", 0x0143, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_IFD0)),
+    TILE_OFFSETS(new TagInfo(
             "Tile Offsets", 0x0144, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_TILE_BYTE_COUNTS = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    TILE_BYTE_COUNTS(new TagInfo(
             "Tile Byte Counts", 0x0145, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_BAD_FAX_LINES = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    BAD_FAX_LINES(new TagInfo(
             "Bad Fax Lines", 0x0146, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_CLEAN_FAX_DATA = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    CLEAN_FAX_DATA(new TagInfo(
             "Clean Fax Data", 0x0147, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    // tag constants public static final int CLEAN_FAX_DATA_VALUE_CLEAN = 0;
-    public static final int CLEAN_FAX_DATA_VALUE_REGENERATED = 1;
-    public static final int CLEAN_FAX_DATA_VALUE_UNCLEAN = 2;
-    public static final TagInfo EXIF_TAG_CONSECUTIVE_BAD_FAX_LINES = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)) {
+        public static final int CLEAN_FAX_DATA_VALUE_CLEAN = 0;
+        public static final int CLEAN_FAX_DATA_VALUE_REGENERATED = 1;
+        public static final int CLEAN_FAX_DATA_VALUE_UNCLEAN = 2;
+    },
+    CONSECUTIVE_BAD_FAX_LINES(new TagInfo(
             "Consecutive Bad Fax Lines", 0x0148,
-            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_SUB_IFD = new TagInfo("Sub IFD",
-            0x014a, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_INK_SET = new TagInfo("Ink Set",
-            0x014c, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0);
-    // tag constants public static final int INK_SET_VALUE_CMYK = 1;
-    public static final int INK_SET_VALUE_NOT_CMYK = 2;
-    public static final TagInfo EXIF_TAG_INK_NAMES = new TagInfo("Ink Names",
-            0x014d, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_NUMBEROF_INKS = new TagInfo(
+            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    SUB_IFD(new TagInfo("Sub IFD",
+            0x014a, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    INK_SET(new TagInfo("Ink Set",
+            0x014c, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0)) {
+        public static final int INK_SET_VALUE_CMYK = 1;
+        public static final int INK_SET_VALUE_NOT_CMYK = 2;
+    },
+    INK_NAMES(new TagInfo("Ink Names",
+            0x014d, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    NUMBEROF_INKS(new TagInfo(
             "Numberof Inks", 0x014e, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_DOT_RANGE = new TagInfo("Dot Range",
-            0x0150, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_TARGET_PRINTER = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    DOT_RANGE(new TagInfo("Dot Range",
+            0x0150, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0)),
+    TARGET_PRINTER(new TagInfo(
             "Target Printer", 0x0151, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_EXTRA_SAMPLES = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    EXTRA_SAMPLES(new TagInfo(
             "Extra Samples", 0x0152, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_SAMPLE_FORMAT = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    SAMPLE_FORMAT(new TagInfo(
             "Sample Format", 0x0153, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    // tag constants public static final int SAMPLE_FORMAT_VALUE_UNSIGNED_INTEGER = 1;
-    public static final int SAMPLE_FORMAT_VALUE_TWOS_COMPLEMENT_SIGNED_INTEGER = 2;
-    public static final int SAMPLE_FORMAT_VALUE_IEEE_FLOATING_POINT = 3;
-    public static final int SAMPLE_FORMAT_VALUE_UNDEFINED = 4;
-    public static final int SAMPLE_FORMAT_VALUE_COMPLEX_INTEGER = 5;
-    public static final int SAMPLE_FORMAT_VALUE_IEEE_FLOATING_POINT_1 = 6;
-    public static final TagInfo EXIF_TAG_SMIN_SAMPLE_VALUE = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)) {
+        public static final int SAMPLE_FORMAT_VALUE_UNSIGNED_INTEGER = 1;
+        public static final int SAMPLE_FORMAT_VALUE_TWOS_COMPLEMENT_SIGNED_INTEGER = 2;
+        public static final int SAMPLE_FORMAT_VALUE_IEEE_FLOATING_POINT = 3;
+        public static final int SAMPLE_FORMAT_VALUE_UNDEFINED = 4;
+        public static final int SAMPLE_FORMAT_VALUE_COMPLEX_INTEGER = 5;
+        public static final int SAMPLE_FORMAT_VALUE_IEEE_FLOATING_POINT_1 = 6;
+    },
+    SMIN_SAMPLE_VALUE(new TagInfo(
             "SMin Sample Value", 0x0154, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_SMAX_SAMPLE_VALUE = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    SMAX_SAMPLE_VALUE(new TagInfo(
             "SMax Sample Value", 0x0155, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_TRANSFER_RANGE = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    TRANSFER_RANGE(new TagInfo(
             "Transfer Range", 0x0156, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_CLIP_PATH = new TagInfo("Clip Path",
-            0x0157, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_XCLIP_PATH_UNITS = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    CLIP_PATH(new TagInfo("Clip Path",
+            0x0157, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    XCLIP_PATH_UNITS(new TagInfo(
             "XClip Path Units", 0x0158, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_YCLIP_PATH_UNITS = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    YCLIP_PATH_UNITS(new TagInfo(
             "YClip Path Units", 0x0159, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_INDEXED = new TagInfo("Indexed",
-            0x015a, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    // tag constants public static final int INDEXED_VALUE_NOT_INDEXED = 0;
-    public static final int INDEXED_VALUE_INDEXED = 1;
-    public static final TagInfo EXIF_TAG_JPEGTABLES = new TagInfo("JPEGTables",
-            0x015b, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_OPIPROXY = new TagInfo("OPIProxy",
-            0x015f, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    // tag constants public static final int OPIPROXY_VALUE_HIGHER_RESOLUTION_IMAGE_DOES_NOT_EXIST = 0;
-    public static final int OPIPROXY_VALUE_HIGHER_RESOLUTION_IMAGE_EXISTS = 1;
-    public static final TagInfo EXIF_TAG_GLOBAL_PARAMETERS_IFD = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    INDEXED(new TagInfo("Indexed",
+            0x015a, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)) {
+        public static final int INDEXED_VALUE_NOT_INDEXED = 0;
+        public static final int INDEXED_VALUE_INDEXED = 1;
+    },
+    JPEGTABLES(new TagInfo("JPEGTables",
+            0x015b, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    OPIPROXY(new TagInfo("OPIProxy",
+            0x015f, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)) {
+        public static final int OPIPROXY_VALUE_HIGHER_RESOLUTION_IMAGE_DOES_NOT_EXIST = 0;
+        public static final int OPIPROXY_VALUE_HIGHER_RESOLUTION_IMAGE_EXISTS = 1;
+    },
+    GLOBAL_PARAMETERS_IFD(new TagInfo(
             "Global Parameters IFD", 0x0190, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_PROFILE_TYPE = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    PROFILE_TYPE(new TagInfo(
             "Profile Type", 0x0191, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    // tag constants public static final int PROFILE_TYPE_VALUE_UNSPECIFIED = 0;
-    public static final int PROFILE_TYPE_VALUE_GROUP_3_FAX = 1;
-    public static final TagInfo EXIF_TAG_FAX_PROFILE = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)) {
+        public static final int PROFILE_TYPE_VALUE_UNSPECIFIED = 0;
+        public static final int PROFILE_TYPE_VALUE_GROUP_3_FAX = 1;
+    },
+    FAX_PROFILE(new TagInfo(
             "Fax Profile", 0x0192, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    // tag constants public static final int FAX_PROFILE_VALUE_UNKNOWN = 0;
-    public static final int FAX_PROFILE_VALUE_MINIMAL_B_AND_W_LOSSLESS_S = 1;
-    public static final int FAX_PROFILE_VALUE_EXTENDED_B_AND_W_LOSSLESS_F = 2;
-    public static final int FAX_PROFILE_VALUE_LOSSLESS_JBIG_B_AND_W_J = 3;
-    public static final int FAX_PROFILE_VALUE_LOSSY_COLOR_AND_GRAYSCALE_C = 4;
-    public static final int FAX_PROFILE_VALUE_LOSSLESS_COLOR_AND_GRAYSCALE_L = 5;
-    public static final int FAX_PROFILE_VALUE_MIXED_RASTER_CONTENT_M = 6;
-    public static final TagInfo EXIF_TAG_CODING_METHODS = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)) {
+        public static final int FAX_PROFILE_VALUE_UNKNOWN = 0;
+        public static final int FAX_PROFILE_VALUE_MINIMAL_B_AND_W_LOSSLESS_S = 1;
+        public static final int FAX_PROFILE_VALUE_EXTENDED_B_AND_W_LOSSLESS_F = 2;
+        public static final int FAX_PROFILE_VALUE_LOSSLESS_JBIG_B_AND_W_J = 3;
+        public static final int FAX_PROFILE_VALUE_LOSSY_COLOR_AND_GRAYSCALE_C = 4;
+        public static final int FAX_PROFILE_VALUE_LOSSLESS_COLOR_AND_GRAYSCALE_L = 5;
+        public static final int FAX_PROFILE_VALUE_MIXED_RASTER_CONTENT_M = 6;
+    },
+    CODING_METHODS(new TagInfo(
             "Coding Methods", 0x0193, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_VERSION_YEAR = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    VERSION_YEAR(new TagInfo(
             "Version Year", 0x0194, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_MODE_NUMBER = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    MODE_NUMBER(new TagInfo(
             "Mode Number", 0x0195, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_DECODE = new TagInfo("Decode", 0x01b1,
-            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_DEFAULT_IMAGE_COLOR = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    DECODE(new TagInfo("Decode", 0x01b1,
+            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    DEFAULT_IMAGE_COLOR(new TagInfo(
             "Default Image Color", 0x01b2, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_JPEGPROC = new TagInfo("JPEGProc",
-            0x0200, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    // tag constants public static final int JPEGPROC_VALUE_BASELINE = 1;
-    public static final int JPEGPROC_VALUE_LOSSLESS = 14;
-    // poly tag public static final TagInfo2 EXIF_TAG_THUMBNAIL_OFFSET = new TagInfo2( "ThumbnailOffset", 0x0201, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_IFD1);
-    public static final TagInfo EXIF_TAG_PREVIEW_IMAGE_START_MAKER_NOTES = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    JPEGPROC(new TagInfo("JPEGProc",
+            0x0200, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)) {
+        public static final int JPEGPROC_VALUE_BASELINE = 1;
+        public static final int JPEGPROC_VALUE_LOSSLESS = 14;
+    },
+    // poly tag public static final TagInfo2 THUMBNAIL_OFFSET(new TagInfo2( "ThumbnailOffset", 0x0201, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_IFD1)),
+    PREVIEW_IMAGE_START_MAKER_NOTES(new TagInfo(
             "Preview Image Start", 0x0201, FIELD_TYPE_LONG, 1,
-            EXIF_DIRECTORY_MAKER_NOTES);
-    public static final TagInfo EXIF_TAG_JPG_FROM_RAW_START_SUB_IFD = new TagInfo.Offset(
+            EXIF_DIRECTORY_MAKER_NOTES)),
+    JPG_FROM_RAW_START_SUB_IFD(new TagInfo.Offset(
             "Jpg From Raw Start", 0x0201, FIELD_TYPE_LONG, 1,
-            EXIF_DIRECTORY_SUB_IFD);
-    public static final TagInfo EXIF_TAG_JPG_FROM_RAW_START_IFD2 = new TagInfo.Offset(
+            EXIF_DIRECTORY_SUB_IFD)),
+    JPG_FROM_RAW_START_IFD2(new TagInfo.Offset(
             "Jpg From Raw Start", 0x0201, FIELD_TYPE_LONG, 1,
-            EXIF_DIRECTORY_IFD2);
-    public static final TagInfo EXIF_TAG_OTHER_IMAGE_START = new TagInfo.Offset(
+            EXIF_DIRECTORY_IFD2)),
+    OTHER_IMAGE_START(new TagInfo.Offset(
             "Other Image Start", 0x0201, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    // poly tag public static final TagInfo2 EXIF_TAG_THUMBNAIL_LENGTH = new TagInfo2( "ThumbnailLength", 0x0202, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_IFD1);
-    public static final TagInfo EXIF_TAG_PREVIEW_IMAGE_LENGTH_MAKER_NOTES = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    // poly tag public static final TagInfo2 THUMBNAIL_LENGTH(new TagInfo2( "ThumbnailLength", 0x0202, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_IFD1)),
+    PREVIEW_IMAGE_LENGTH_MAKER_NOTES(new TagInfo(
             "Preview Image Length", 0x0202, FIELD_TYPE_LONG, 1,
-            EXIF_DIRECTORY_MAKER_NOTES);
-    public static final TagInfo EXIF_TAG_JPG_FROM_RAW_LENGTH_SUB_IFD = new TagInfo(
+            EXIF_DIRECTORY_MAKER_NOTES)),
+    JPG_FROM_RAW_LENGTH_SUB_IFD(new TagInfo(
             "Jpg From Raw Length", 0x0202, FIELD_TYPE_LONG, 1,
-            EXIF_DIRECTORY_SUB_IFD);
-    public static final TagInfo EXIF_TAG_JPG_FROM_RAW_LENGTH_IFD2 = new TagInfo(
+            EXIF_DIRECTORY_SUB_IFD)),
+    JPG_FROM_RAW_LENGTH_IFD2(new TagInfo(
             "Jpg From Raw Length", 0x0202, FIELD_TYPE_LONG, 1,
-            EXIF_DIRECTORY_IFD2);
-    public static final TagInfo EXIF_TAG_OTHER_IMAGE_LENGTH = new TagInfo(
+            EXIF_DIRECTORY_IFD2)),
+    OTHER_IMAGE_LENGTH(new TagInfo(
             "Other Image Length", 0x0202, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_JPEGRESTART_INTERVAL = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    JPEGRESTART_INTERVAL(new TagInfo(
             "JPEGRestart Interval", 0x0203, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_JPEGLOSSLESS_PREDICTORS = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    JPEGLOSSLESS_PREDICTORS(new TagInfo(
             "JPEGLossless Predictors", 0x0205, FIELD_TYPE_DESCRIPTION_UNKNOWN,
-            1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_JPEGPOINT_TRANSFORMS = new TagInfo(
+            1, EXIF_DIRECTORY_UNKNOWN)),
+    JPEGPOINT_TRANSFORMS(new TagInfo(
             "JPEGPoint Transforms", 0x0206, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_JPEGQTABLES = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    JPEGQTABLES(new TagInfo(
             "JPEGQTables", 0x0207, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_JPEGDCTABLES = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    JPEGDCTABLES(new TagInfo(
             "JPEGDCTables", 0x0208, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_JPEGACTABLES = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    JPEGACTABLES(new TagInfo(
             "JPEGACTables", 0x0209, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_YCBCR_COEFFICIENTS = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    YCBCR_COEFFICIENTS(new TagInfo(
             "YCbCr Coefficients", 0x0211, FIELD_TYPE_RATIONAL, 3,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_YCBCR_SUB_SAMPLING = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    YCBCR_SUB_SAMPLING(new TagInfo(
             "YCbCr Sub Sampling", 0x0212, FIELD_TYPE_SHORT, 2,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_YCBCR_POSITIONING = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    YCBCR_POSITIONING(new TagInfo(
             "YCbCr Positioning", 0x0213, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_IFD0);
-    // tag constants public static final int YCB_CR_POSITIONING_VALUE_CENTERED = 1;
-    public static final int YCB_CR_POSITIONING_VALUE_CO_SITED = 2;
-    public static final TagInfo EXIF_TAG_REFERENCE_BLACK_WHITE = new TagInfo(
+            EXIF_DIRECTORY_IFD0)) {
+        public static final int YCB_CR_POSITIONING_VALUE_CENTERED = 1;
+        public static final int YCB_CR_POSITIONING_VALUE_CO_SITED = 2;
+    },
+    REFERENCE_BLACK_WHITE(new TagInfo(
             "Reference Black White", 0x0214, FIELD_TYPE_RATIONAL, 6,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_STRIP_ROW_COUNTS = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    STRIP_ROW_COUNTS(new TagInfo(
             "Strip Row Counts", 0x022f, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_APPLICATION_NOTES = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    APPLICATION_NOTES(new TagInfo(
             "Application Notes", 0x02bc, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_RELATED_IMAGE_FILE_FORMAT = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    RELATED_IMAGE_FILE_FORMAT(new TagInfo(
             "Related Image File Format", 0x1000, FIELD_TYPE_ASCII, 1,
-            EXIF_DIRECTORY_INTEROP_IFD);
-    public static final TagInfo EXIF_TAG_RELATED_IMAGE_WIDTH = new TagInfo(
+            EXIF_DIRECTORY_INTEROP_IFD)),
+    RELATED_IMAGE_WIDTH(new TagInfo(
             "Related Image Width", 0x1001, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_INTEROP_IFD);
-    public static final TagInfo EXIF_TAG_RELATED_IMAGE_LENGTH = new TagInfo(
+            EXIF_DIRECTORY_INTEROP_IFD)),
+    RELATED_IMAGE_LENGTH(new TagInfo(
             "Related Image Length", 0x1002, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_INTEROP_IFD);
-    public static final TagInfo EXIF_TAG_RATING = new TagInfo("Rating", 0x4746,
-            FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_RATING_PERCENT = new TagInfo(
-            "Rating Percent", 0x4749, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_IMAGE_ID = new TagInfo("Image ID",
-            0x800d, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_WANG_ANNOTATION = new TagInfo(
+            EXIF_DIRECTORY_INTEROP_IFD)),
+    RATING(new TagInfo("Rating", 0x4746,
+            FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0)),
+    RATING_PERCENT(new TagInfo(
+            "Rating Percent", 0x4749, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_IFD0)),
+    IMAGE_ID(new TagInfo("Image ID",
+            0x800d, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    WANG_ANNOTATION(new TagInfo(
             "Wang Annotation", 0x80a4, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_MATTEING = new TagInfo("Matteing",
-            0x80e3, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_DATA_TYPE = new TagInfo("Data Type",
-            0x80e4, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_IMAGE_DEPTH = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    MATTEING(new TagInfo("Matteing",
+            0x80e3, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    DATA_TYPE(new TagInfo("Data Type",
+            0x80e4, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    IMAGE_DEPTH(new TagInfo(
             "Image Depth", 0x80e5, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_TILE_DEPTH = new TagInfo("Tile Depth",
-            0x80e6, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_MODEL_2 = new TagInfo("Model 2",
-            0x827d, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_CFAREPEAT_PATTERN_DIM = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    TILE_DEPTH(new TagInfo("Tile Depth",
+            0x80e6, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    MODEL_2(new TagInfo("Model 2",
+            0x827d, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    CFAREPEAT_PATTERN_DIM(new TagInfo(
             "CFARepeat Pattern Dim", 0x828d, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_CFAPATTERN_2 = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    CFAPATTERN_2(new TagInfo(
             "CFAPattern 2", 0x828e, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_BATTERY_LEVEL = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    BATTERY_LEVEL(new TagInfo(
             "Battery Level", 0x828f, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_COPYRIGHT = new TagInfo("Copyright",
-            0x8298, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_EXPOSURE_TIME = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    COPYRIGHT(new TagInfo("Copyright",
+            0x8298, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0)),
+    EXPOSURE_TIME(new TagInfo(
             "Exposure Time", 0x829a, FIELD_TYPE_RATIONAL, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_FNUMBER = new TagInfo("FNumber",
-            0x829d, FIELD_TYPE_RATIONAL, 1, EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_MDFILE_TAG = new TagInfo("MDFile Tag",
-            0x82a5, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_MDSCALE_PIXEL = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    FNUMBER(new TagInfo("FNumber",
+            0x829d, FIELD_TYPE_RATIONAL, 1, EXIF_DIRECTORY_EXIF_IFD)),
+    MDFILE_TAG(new TagInfo("MDFile Tag",
+            0x82a5, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    MDSCALE_PIXEL(new TagInfo(
             "MDScale Pixel", 0x82a6, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_MDCOLOR_TABLE = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    MDCOLOR_TABLE(new TagInfo(
             "MDColor Table", 0x82a7, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_MDLAB_NAME = new TagInfo("MDLab Name",
-            0x82a8, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_MDSAMPLE_INFO = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    MDLAB_NAME(new TagInfo("MDLab Name",
+            0x82a8, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    MDSAMPLE_INFO(new TagInfo(
             "MDSample Info", 0x82a9, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_MDPREP_DATE = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    MDPREP_DATE(new TagInfo(
             "MDPrep Date", 0x82aa, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_MDPREP_TIME = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    MDPREP_TIME(new TagInfo(
             "MDPrep Time", 0x82ab, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_MDFILE_UNITS = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    MDFILE_UNITS(new TagInfo(
             "MDFile Units", 0x82ac, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_PIXEL_SCALE = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    PIXEL_SCALE(new TagInfo(
             "Pixel Scale", 0x830e, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_IPTC_NAA = new TagInfo("IPTC- NAA",
-            0x83bb, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_INTERGRAPH_PACKET_DATA = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    IPTC_NAA(new TagInfo("IPTC- NAA",
+            0x83bb, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_IFD0)),
+    INTERGRAPH_PACKET_DATA(new TagInfo(
             "Intergraph Packet Data", 0x847e, FIELD_TYPE_DESCRIPTION_UNKNOWN,
-            1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_INTERGRAPH_FLAG_REGISTERS = new TagInfo(
+            1, EXIF_DIRECTORY_UNKNOWN)),
+    INTERGRAPH_FLAG_REGISTERS(new TagInfo(
             "Intergraph Flag Registers", 0x847f,
-            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_INTERGRAPH_MATRIX = new TagInfo(
+            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    INTERGRAPH_MATRIX(new TagInfo(
             "Intergraph Matrix", 0x8480, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_MODEL_TIE_POINT = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    MODEL_TIE_POINT(new TagInfo(
             "Model Tie Point", 0x8482, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_SITE = new TagInfo("Site", 0x84e0,
-            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_COLOR_SEQUENCE = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    SITE(new TagInfo("Site", 0x84e0,
+            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    COLOR_SEQUENCE(new TagInfo(
             "Color Sequence", 0x84e1, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_IT8HEADER = new TagInfo("IT8 Header",
-            0x84e2, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_RASTER_PADDING = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    IT8HEADER(new TagInfo("IT8 Header",
+            0x84e2, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    RASTER_PADDING(new TagInfo(
             "Raster Padding", 0x84e3, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_BITS_PER_RUN_LENGTH = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    BITS_PER_RUN_LENGTH(new TagInfo(
             "Bits Per Run Length", 0x84e4, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_BITS_PER_EXTENDED_RUN_LENGTH = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    BITS_PER_EXTENDED_RUN_LENGTH(new TagInfo(
             "Bits Per Extended Run Length", 0x84e5,
-            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_COLOR_TABLE = new TagInfo(
+            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    COLOR_TABLE(new TagInfo(
             "Color Table", 0x84e6, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_IMAGE_COLOR_INDICATOR = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    IMAGE_COLOR_INDICATOR(new TagInfo(
             "Image Color Indicator", 0x84e7, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_BACKGROUND_COLOR_INDICATOR = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    BACKGROUND_COLOR_INDICATOR(new TagInfo(
             "Background Color Indicator", 0x84e8,
-            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_IMAGE_COLOR_VALUE = new TagInfo(
+            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    IMAGE_COLOR_VALUE(new TagInfo(
             "Image Color Value", 0x84e9, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_BACKGROUND_COLOR_VALUE = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    BACKGROUND_COLOR_VALUE(new TagInfo(
             "Background Color Value", 0x84ea, FIELD_TYPE_DESCRIPTION_UNKNOWN,
-            1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_PIXEL_INTENSITY_RANGE = new TagInfo(
+            1, EXIF_DIRECTORY_UNKNOWN)),
+    PIXEL_INTENSITY_RANGE(new TagInfo(
             "Pixel Intensity Range", 0x84eb, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_TRANSPARENCY_INDICATOR = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    TRANSPARENCY_INDICATOR(new TagInfo(
             "Transparency Indicator", 0x84ec, FIELD_TYPE_DESCRIPTION_UNKNOWN,
-            1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_COLOR_CHARACTERIZATION = new TagInfo(
+            1, EXIF_DIRECTORY_UNKNOWN)),
+    COLOR_CHARACTERIZATION(new TagInfo(
             "Color Characterization", 0x84ed, FIELD_TYPE_DESCRIPTION_UNKNOWN,
-            1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_HCUSAGE = new TagInfo("HCUsage",
-            0x84ee, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_SEMINFO = new TagInfo("SEMInfo",
-            0x8546, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_AFCP_IPTC = new TagInfo("AFCP_ IPTC",
-            0x8568, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_MODEL_TRANSFORM = new TagInfo(
+            1, EXIF_DIRECTORY_UNKNOWN)),
+    HCUSAGE(new TagInfo("HCUsage",
+            0x84ee, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    SEMINFO(new TagInfo("SEMInfo",
+            0x8546, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0)),
+    AFCP_IPTC(new TagInfo("AFCP_ IPTC",
+            0x8568, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    MODEL_TRANSFORM(new TagInfo(
             "Model Transform", 0x85d8, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_LEAF_DATA = new TagInfo("Leaf Data",
-            0x8606, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_PHOTOSHOP_SETTINGS = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    LEAF_DATA(new TagInfo("Leaf Data",
+            0x8606, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    PHOTOSHOP_SETTINGS(new TagInfo(
             "Photoshop Settings", 0x8649, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_EXIF_OFFSET = new TagInfo.Offset(
+            EXIF_DIRECTORY_UNKNOWN)),
+    EXIF_OFFSET(new TagInfo.Offset(
             "Exif Offset", 0x8769, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_ICC_PROFILE = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    ICC_PROFILE(new TagInfo(
             "ICC_ Profile", 0x8773, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_IMAGE_LAYER = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    IMAGE_LAYER(new TagInfo(
             "Image Layer", 0x87ac, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_GEO_TIFF_DIRECTORY = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    GEO_TIFF_DIRECTORY(new TagInfo(
             "Geo Tiff Directory", 0x87af, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_GEO_TIFF_DOUBLE_PARAMS = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    GEO_TIFF_DOUBLE_PARAMS(new TagInfo(
             "Geo Tiff Double Params", 0x87b0, FIELD_TYPE_DESCRIPTION_UNKNOWN,
-            1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_GEO_TIFF_ASCII_PARAMS = new TagInfo(
+            1, EXIF_DIRECTORY_UNKNOWN)),
+    GEO_TIFF_ASCII_PARAMS(new TagInfo(
             "Geo Tiff Ascii Params", 0x87b1, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_EXPOSURE_PROGRAM = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    EXPOSURE_PROGRAM(new TagInfo(
             "Exposure Program", 0x8822, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    // tag constants public static final int EXPOSURE_PROGRAM_VALUE_MANUAL = 1;
-    public static final int EXPOSURE_PROGRAM_VALUE_PROGRAM_AE = 2;
-    public static final int EXPOSURE_PROGRAM_VALUE_APERTURE_PRIORITY_AE = 3;
-    public static final int EXPOSURE_PROGRAM_VALUE_SHUTTER_SPEED_PRIORITY_AE = 4;
-    public static final int EXPOSURE_PROGRAM_VALUE_CREATIVE_SLOW_SPEED = 5;
-    public static final int EXPOSURE_PROGRAM_VALUE_ACTION_HIGH_SPEED = 6;
-    public static final int EXPOSURE_PROGRAM_VALUE_PORTRAIT = 7;
-    public static final int EXPOSURE_PROGRAM_VALUE_LANDSCAPE = 8;
-    public static final TagInfo EXIF_TAG_SPECTRAL_SENSITIVITY = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)) {
+        public static final int EXPOSURE_PROGRAM_VALUE_MANUAL = 1;
+        public static final int EXPOSURE_PROGRAM_VALUE_PROGRAM_AE = 2;
+        public static final int EXPOSURE_PROGRAM_VALUE_APERTURE_PRIORITY_AE = 3;
+        public static final int EXPOSURE_PROGRAM_VALUE_SHUTTER_SPEED_PRIORITY_AE = 4;
+        public static final int EXPOSURE_PROGRAM_VALUE_CREATIVE_SLOW_SPEED = 5;
+        public static final int EXPOSURE_PROGRAM_VALUE_ACTION_HIGH_SPEED = 6;
+        public static final int EXPOSURE_PROGRAM_VALUE_PORTRAIT = 7;
+        public static final int EXPOSURE_PROGRAM_VALUE_LANDSCAPE = 8;
+    },
+    SPECTRAL_SENSITIVITY(new TagInfo(
             "Spectral Sensitivity", 0x8824, FIELD_TYPE_ASCII, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_GPSINFO = new TagInfo.Offset(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    GPSINFO(new TagInfo.Offset(
             "GPSInfo", 0x8825, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_ISO = new TagInfo("ISO", 0x8827,
-            FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_OPTO__ELECTRIC_CONV_FACTOR = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    ISO(new TagInfo("ISO", 0x8827,
+            FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_EXIF_IFD)),
+    OPTO__ELECTRIC_CONV_FACTOR(new TagInfo(
             "Opto - Electric Conv Factor", 0x8828,
-            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_INTERLACE = new TagInfo("Interlace",
-            0x8829, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_TIME_ZONE_OFFSET = new TagInfo(
+            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    INTERLACE(new TagInfo("Interlace",
+            0x8829, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    TIME_ZONE_OFFSET(new TagInfo(
             "Time Zone Offset", 0x882a, FIELD_TYPE_SSHORT, -1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_SELF_TIMER_MODE = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    SELF_TIMER_MODE(new TagInfo(
             "Self Timer Mode", 0x882b, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_FAX_RECV_PARAMS = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    FAX_RECV_PARAMS(new TagInfo(
             "Fax Recv Params", 0x885c, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_FAX_SUB_ADDRESS = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    FAX_SUB_ADDRESS(new TagInfo(
             "Fax Sub Address", 0x885d, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_FAX_RECV_TIME = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    FAX_RECV_TIME(new TagInfo(
             "Fax Recv Time", 0x885e, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_LEAF_SUB_IFD = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    LEAF_SUB_IFD(new TagInfo(
             "Leaf Sub IFD", 0x888a, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_EXIF_VERSION = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    EXIF_VERSION(new TagInfo(
             "Exif Version", 0x9000, FIELD_TYPE_UNDEFINED, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_DATE_TIME_ORIGINAL = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    DATE_TIME_ORIGINAL(new TagInfo(
             "Date Time Original", 0x9003, FIELD_TYPE_ASCII, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_CREATE_DATE = new TagInfo(
-            "Create Date", 0x9004, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_COMPONENTS_CONFIGURATION = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    CREATE_DATE(new TagInfo(
+            "Create Date", 0x9004, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD)),
+    COMPONENTS_CONFIGURATION(new TagInfo(
             "Components Configuration", 0x9101, FIELD_TYPE_UNDEFINED, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_COMPRESSED_BITS_PER_PIXEL = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    COMPRESSED_BITS_PER_PIXEL(new TagInfo(
             "Compressed Bits Per Pixel", 0x9102, FIELD_TYPE_RATIONAL, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_SHUTTER_SPEED_VALUE = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    SHUTTER_SPEED_VALUE(new TagInfo(
             "Shutter Speed Value", 0x9201, FIELD_TYPE_SRATIONAL, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_APERTURE_VALUE = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    APERTURE_VALUE(new TagInfo(
             "Aperture Value", 0x9202, FIELD_TYPE_RATIONAL, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_BRIGHTNESS_VALUE = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    BRIGHTNESS_VALUE(new TagInfo(
             "Brightness Value", 0x9203, FIELD_TYPE_SRATIONAL, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_EXPOSURE_COMPENSATION = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    EXPOSURE_COMPENSATION(new TagInfo(
             "Exposure Compensation", 0x9204, FIELD_TYPE_SRATIONAL, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_MAX_APERTURE_VALUE = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    MAX_APERTURE_VALUE(new TagInfo(
             "Max Aperture Value", 0x9205, FIELD_TYPE_RATIONAL, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_SUBJECT_DISTANCE = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    SUBJECT_DISTANCE(new TagInfo(
             "Subject Distance", 0x9206, FIELD_TYPE_RATIONAL, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_METERING_MODE = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    METERING_MODE(new TagInfo(
             "Metering Mode", 0x9207, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    // tag constants public static final int METERING_MODE_VALUE_AVERAGE = 1;
-    public static final int METERING_MODE_VALUE_CENTER_WEIGHTED_AVERAGE = 2;
-    public static final int METERING_MODE_VALUE_SPOT = 3;
-    public static final int METERING_MODE_VALUE_MULTI_SPOT = 4;
-    public static final int METERING_MODE_VALUE_MULTI_SEGMENT = 5;
-    public static final int METERING_MODE_VALUE_PARTIAL = 6;
-    public static final int METERING_MODE_VALUE_OTHER = 255;
-    public static final TagInfo EXIF_TAG_LIGHT_SOURCE = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)) {
+        public static final int METERING_MODE_VALUE_AVERAGE = 1;
+        public static final int METERING_MODE_VALUE_CENTER_WEIGHTED_AVERAGE = 2;
+        public static final int METERING_MODE_VALUE_SPOT = 3;
+        public static final int METERING_MODE_VALUE_MULTI_SPOT = 4;
+        public static final int METERING_MODE_VALUE_MULTI_SEGMENT = 5;
+        public static final int METERING_MODE_VALUE_PARTIAL = 6;
+        public static final int METERING_MODE_VALUE_OTHER = 255;
+    },
+    LIGHT_SOURCE(new TagInfo(
             "Light Source", 0x9208, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    // tag constants public static final int LIGHT_SOURCE_VALUE_DAYLIGHT = 1;
-    public static final int LIGHT_SOURCE_VALUE_FLUORESCENT = 2;
-    public static final int LIGHT_SOURCE_VALUE_TUNGSTEN = 3;
-    public static final int LIGHT_SOURCE_VALUE_FLASH = 4;
-    public static final int LIGHT_SOURCE_VALUE_FINE_WEATHER = 9;
-    public static final int LIGHT_SOURCE_VALUE_CLOUDY = 10;
-    public static final int LIGHT_SOURCE_VALUE_SHADE = 11;
-    public static final int LIGHT_SOURCE_VALUE_DAYLIGHT_FLUORESCENT = 12;
-    public static final int LIGHT_SOURCE_VALUE_DAY_WHITE_FLUORESCENT = 13;
-    public static final int LIGHT_SOURCE_VALUE_COOL_WHITE_FLUORESCENT = 14;
-    public static final int LIGHT_SOURCE_VALUE_WHITE_FLUORESCENT = 15;
-    public static final int LIGHT_SOURCE_VALUE_STANDARD_LIGHT_A = 17;
-    public static final int LIGHT_SOURCE_VALUE_STANDARD_LIGHT_B = 18;
-    public static final int LIGHT_SOURCE_VALUE_STANDARD_LIGHT_C = 19;
-    public static final int LIGHT_SOURCE_VALUE_D55 = 20;
-    public static final int LIGHT_SOURCE_VALUE_D65 = 21;
-    public static final int LIGHT_SOURCE_VALUE_D75 = 22;
-    public static final int LIGHT_SOURCE_VALUE_D50 = 23;
-    public static final int LIGHT_SOURCE_VALUE_ISO_STUDIO_TUNGSTEN = 24;
-    public static final int LIGHT_SOURCE_VALUE_OTHER = 255;
-    public static final TagInfo EXIF_TAG_FLASH = new TagInfo("Flash", 0x9209,
-            FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_EXIF_IFD);
-    // tag constants public static final int FLASH_VALUE_NO_FLASH = 0x0;
-    public static final int FLASH_VALUE_FIRED = 0x1;
-    public static final int FLASH_VALUE_FIRED_RETURN_NOT_DETECTED = 0x5;
-    public static final int FLASH_VALUE_FIRED_RETURN_DETECTED = 0x7;
-    public static final int FLASH_VALUE_ON_DID_NOT_FIRE = 0x8;
-    public static final int FLASH_VALUE_ON = 0x9;
-    public static final int FLASH_VALUE_ON_RETURN_NOT_DETECTED = 0xd;
-    public static final int FLASH_VALUE_ON_RETURN_DETECTED = 0xf;
-    public static final int FLASH_VALUE_OFF = 0x10;
-    public static final int FLASH_VALUE_OFF_DID_NOT_FIRE_RETURN_NOT_DETECTED = 0x14;
-    public static final int FLASH_VALUE_AUTO_DID_NOT_FIRE = 0x18;
-    public static final int FLASH_VALUE_AUTO_FIRED = 0x19;
-    public static final int FLASH_VALUE_AUTO_FIRED_RETURN_NOT_DETECTED = 0x1d;
-    public static final int FLASH_VALUE_AUTO_FIRED_RETURN_DETECTED = 0x1f;
-    public static final int FLASH_VALUE_NO_FLASH_FUNCTION = 0x20;
-    public static final int FLASH_VALUE_OFF_NO_FLASH_FUNCTION = 0x30;
-    public static final int FLASH_VALUE_FIRED_RED_EYE_REDUCTION = 0x41;
-    public static final int FLASH_VALUE_FIRED_RED_EYE_REDUCTION_RETURN_NOT_DETECTED = 0x45;
-    public static final int FLASH_VALUE_FIRED_RED_EYE_REDUCTION_RETURN_DETECTED = 0x47;
-    public static final int FLASH_VALUE_ON_RED_EYE_REDUCTION = 0x49;
-    public static final int FLASH_VALUE_ON_RED_EYE_REDUCTION_RETURN_NOT_DETECTED = 0x4d;
-    public static final int FLASH_VALUE_ON_RED_EYE_REDUCTION_RETURN_DETECTED = 0x4f;
-    public static final int FLASH_VALUE_OFF_RED_EYE_REDUCTION = 0x50;
-    public static final int FLASH_VALUE_AUTO_DID_NOT_FIRE_RED_EYE_REDUCTION = 0x58;
-    public static final int FLASH_VALUE_AUTO_FIRED_RED_EYE_REDUCTION = 0x59;
-    public static final int FLASH_VALUE_AUTO_FIRED_RED_EYE_REDUCTION_RETURN_NOT_DETECTED = 0x5d;
-    public static final int FLASH_VALUE_AUTO_FIRED_RED_EYE_REDUCTION_RETURN_DETECTED = 0x5f;
-    public static final TagInfo EXIF_TAG_FOCAL_LENGTH = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)) {
+        public static final int LIGHT_SOURCE_VALUE_DAYLIGHT = 1;
+        public static final int LIGHT_SOURCE_VALUE_FLUORESCENT = 2;
+        public static final int LIGHT_SOURCE_VALUE_TUNGSTEN = 3;
+        public static final int LIGHT_SOURCE_VALUE_FLASH = 4;
+        public static final int LIGHT_SOURCE_VALUE_FINE_WEATHER = 9;
+        public static final int LIGHT_SOURCE_VALUE_CLOUDY = 10;
+        public static final int LIGHT_SOURCE_VALUE_SHADE = 11;
+        public static final int LIGHT_SOURCE_VALUE_DAYLIGHT_FLUORESCENT = 12;
+        public static final int LIGHT_SOURCE_VALUE_DAY_WHITE_FLUORESCENT = 13;
+        public static final int LIGHT_SOURCE_VALUE_COOL_WHITE_FLUORESCENT = 14;
+        public static final int LIGHT_SOURCE_VALUE_WHITE_FLUORESCENT = 15;
+        public static final int LIGHT_SOURCE_VALUE_STANDARD_LIGHT_A = 17;
+        public static final int LIGHT_SOURCE_VALUE_STANDARD_LIGHT_B = 18;
+        public static final int LIGHT_SOURCE_VALUE_STANDARD_LIGHT_C = 19;
+        public static final int LIGHT_SOURCE_VALUE_D55 = 20;
+        public static final int LIGHT_SOURCE_VALUE_D65 = 21;
+        public static final int LIGHT_SOURCE_VALUE_D75 = 22;
+        public static final int LIGHT_SOURCE_VALUE_D50 = 23;
+        public static final int LIGHT_SOURCE_VALUE_ISO_STUDIO_TUNGSTEN = 24;
+        public static final int LIGHT_SOURCE_VALUE_OTHER = 255;
+    },
+    FLASH(new TagInfo("Flash", 0x9209,
+            FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_EXIF_IFD)) {
+        public static final int FLASH_VALUE_NO_FLASH = 0x0;
+        public static final int FLASH_VALUE_FIRED = 0x1;
+        public static final int FLASH_VALUE_FIRED_RETURN_NOT_DETECTED = 0x5;
+        public static final int FLASH_VALUE_FIRED_RETURN_DETECTED = 0x7;
+        public static final int FLASH_VALUE_ON_DID_NOT_FIRE = 0x8;
+        public static final int FLASH_VALUE_ON = 0x9;
+        public static final int FLASH_VALUE_ON_RETURN_NOT_DETECTED = 0xd;
+        public static final int FLASH_VALUE_ON_RETURN_DETECTED = 0xf;
+        public static final int FLASH_VALUE_OFF = 0x10;
+        public static final int FLASH_VALUE_OFF_DID_NOT_FIRE_RETURN_NOT_DETECTED = 0x14;
+        public static final int FLASH_VALUE_AUTO_DID_NOT_FIRE = 0x18;
+        public static final int FLASH_VALUE_AUTO_FIRED = 0x19;
+        public static final int FLASH_VALUE_AUTO_FIRED_RETURN_NOT_DETECTED = 0x1d;
+        public static final int FLASH_VALUE_AUTO_FIRED_RETURN_DETECTED = 0x1f;
+        public static final int FLASH_VALUE_NO_FLASH_FUNCTION = 0x20;
+        public static final int FLASH_VALUE_OFF_NO_FLASH_FUNCTION = 0x30;
+        public static final int FLASH_VALUE_FIRED_RED_EYE_REDUCTION = 0x41;
+        public static final int FLASH_VALUE_FIRED_RED_EYE_REDUCTION_RETURN_NOT_DETECTED = 0x45;
+        public static final int FLASH_VALUE_FIRED_RED_EYE_REDUCTION_RETURN_DETECTED = 0x47;
+        public static final int FLASH_VALUE_ON_RED_EYE_REDUCTION = 0x49;
+        public static final int FLASH_VALUE_ON_RED_EYE_REDUCTION_RETURN_NOT_DETECTED = 0x4d;
+        public static final int FLASH_VALUE_ON_RED_EYE_REDUCTION_RETURN_DETECTED = 0x4f;
+        public static final int FLASH_VALUE_OFF_RED_EYE_REDUCTION = 0x50;
+        public static final int FLASH_VALUE_AUTO_DID_NOT_FIRE_RED_EYE_REDUCTION = 0x58;
+        public static final int FLASH_VALUE_AUTO_FIRED_RED_EYE_REDUCTION = 0x59;
+        public static final int FLASH_VALUE_AUTO_FIRED_RED_EYE_REDUCTION_RETURN_NOT_DETECTED = 0x5d;
+        public static final int FLASH_VALUE_AUTO_FIRED_RED_EYE_REDUCTION_RETURN_DETECTED = 0x5f;
+    },
+    FOCAL_LENGTH(new TagInfo(
             "Focal Length", 0x920a, FIELD_TYPE_RATIONAL, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_FLASH_ENERGY = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    FLASH_ENERGY(new TagInfo(
             "Flash Energy", 0x920b, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_SPATIAL_FREQUENCY_RESPONSE_1 = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    SPATIAL_FREQUENCY_RESPONSE_1(new TagInfo(
             "Spatial Frequency Response", 0x920c,
-            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_NOISE_1 = new TagInfo("Noise", 0x920d,
-            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_FOCAL_PLANE_XRESOLUTION = new TagInfo(
+            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    NOISE_1(new TagInfo("Noise", 0x920d,
+            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    FOCAL_PLANE_XRESOLUTION(new TagInfo(
             "Focal Plane XResolution", 0x920e, FIELD_TYPE_DESCRIPTION_UNKNOWN,
-            1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_FOCAL_PLANE_YRESOLUTION = new TagInfo(
+            1, EXIF_DIRECTORY_UNKNOWN)),
+    FOCAL_PLANE_YRESOLUTION(new TagInfo(
             "Focal Plane YResolution", 0x920f, FIELD_TYPE_DESCRIPTION_UNKNOWN,
-            1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_FOCAL_PLANE_RESOLUTION_UNIT = new TagInfo(
+            1, EXIF_DIRECTORY_UNKNOWN)),
+    FOCAL_PLANE_RESOLUTION_UNIT(new TagInfo(
             "Focal Plane Resolution Unit", 0x9210,
-            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    // tag constants public static final int FOCAL_PLANE_RESOLUTION_UNIT_VALUE_NONE = 1;
-    public static final int FOCAL_PLANE_RESOLUTION_UNIT_VALUE_INCHES = 2;
-    public static final int FOCAL_PLANE_RESOLUTION_UNIT_VALUE_CM = 3;
-    public static final int FOCAL_PLANE_RESOLUTION_UNIT_VALUE_MM = 4;
-    public static final int FOCAL_PLANE_RESOLUTION_UNIT_VALUE_UM = 5;
-    public static final TagInfo EXIF_TAG_IMAGE_NUMBER_EXIF_IFD = new TagInfo(
-            "Image Number", 0x9211, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_SECURITY_CLASSIFICATION_EXIF_IFD = new TagInfo(
+            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)) {
+        public static final int FOCAL_PLANE_RESOLUTION_UNIT_VALUE_NONE = 1;
+        public static final int FOCAL_PLANE_RESOLUTION_UNIT_VALUE_INCHES = 2;
+        public static final int FOCAL_PLANE_RESOLUTION_UNIT_VALUE_CM = 3;
+        public static final int FOCAL_PLANE_RESOLUTION_UNIT_VALUE_MM = 4;
+        public static final int FOCAL_PLANE_RESOLUTION_UNIT_VALUE_UM = 5;
+    },
+    IMAGE_NUMBER_EXIF_IFD(new TagInfo(
+            "Image Number", 0x9211, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_EXIF_IFD)),
+    SECURITY_CLASSIFICATION_EXIF_IFD(new TagInfo(
             "Security Classification", 0x9212, FIELD_TYPE_ASCII, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_IMAGE_HISTORY_EXIF_IFD = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    IMAGE_HISTORY_EXIF_IFD(new TagInfo(
             "Image History", 0x9213, FIELD_TYPE_ASCII, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_SUBJECT_LOCATION_1 = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    SUBJECT_LOCATION_1(new TagInfo(
             "Subject Location", 0x9214, FIELD_TYPE_SHORT, 4,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_EXPOSURE_INDEX = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    EXPOSURE_INDEX(new TagInfo(
             "Exposure Index", 0x9215, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_TIFF_EPSTANDARD_ID_1 = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    TIFF_EPSTANDARD_ID_1(new TagInfo(
             "TIFF- EPStandard ID", 0x9216, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_SENSING_METHOD = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    SENSING_METHOD(new TagInfo(
             "Sensing Method", 0x9217, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    // tag constants public static final int SENSING_METHOD_VALUE_MONOCHROME_AREA = 1;
-    public static final int SENSING_METHOD_VALUE_ONE_CHIP_COLOR_AREA = 2;
-    public static final int SENSING_METHOD_VALUE_TWO_CHIP_COLOR_AREA = 3;
-    public static final int SENSING_METHOD_VALUE_THREE_CHIP_COLOR_AREA = 4;
-    public static final int SENSING_METHOD_VALUE_COLOR_SEQUENTIAL_AREA = 5;
-    public static final int SENSING_METHOD_VALUE_MONOCHROME_LINEAR = 6;
-    public static final int SENSING_METHOD_VALUE_TRILINEAR = 7;
-    public static final int SENSING_METHOD_VALUE_COLOR_SEQUENTIAL_LINEAR = 8;
-    public static final TagInfo EXIF_TAG_STO_NITS = new TagInfo("Sto Nits",
-            0x923f, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
+            EXIF_DIRECTORY_UNKNOWN)) {
+        public static final int SENSING_METHOD_VALUE_MONOCHROME_AREA = 1;
+        public static final int SENSING_METHOD_VALUE_ONE_CHIP_COLOR_AREA = 2;
+        public static final int SENSING_METHOD_VALUE_TWO_CHIP_COLOR_AREA = 3;
+        public static final int SENSING_METHOD_VALUE_THREE_CHIP_COLOR_AREA = 4;
+        public static final int SENSING_METHOD_VALUE_COLOR_SEQUENTIAL_AREA = 5;
+        public static final int SENSING_METHOD_VALUE_MONOCHROME_LINEAR = 6;
+        public static final int SENSING_METHOD_VALUE_TRILINEAR = 7;
+        public static final int SENSING_METHOD_VALUE_COLOR_SEQUENTIAL_LINEAR = 8;
+    },
+    STO_NITS(new TagInfo("Sto Nits",
+            0x923f, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
     //     skipping Maker Note!
-    public static final TagInfo EXIF_TAG_MAKER_NOTE = new TagInfo("Maker Note",
-            0x927c, FIELD_TYPE_UNDEFINED, 1, EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_USER_COMMENT = new TagInfo.Text(
+    MAKER_NOTE(new TagInfo("Maker Note",
+            0x927c, FIELD_TYPE_UNDEFINED, 1, EXIF_DIRECTORY_EXIF_IFD)),
+    USER_COMMENT(new TagInfo.Text(
             "UserComment", 0x9286, FIELD_TYPE_UNDEFINED, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_SUB_SEC_TIME = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    SUB_SEC_TIME(new TagInfo(
             "Sub Sec Time", 0x9290, FIELD_TYPE_ASCII, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_SUB_SEC_TIME_ORIGINAL = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    SUB_SEC_TIME_ORIGINAL(new TagInfo(
             "Sub Sec Time Original", 0x9291, FIELD_TYPE_ASCII, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_SUB_SEC_TIME_DIGITIZED = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    SUB_SEC_TIME_DIGITIZED(new TagInfo(
             "Sub Sec Time Digitized", 0x9292, FIELD_TYPE_ASCII, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_IMAGE_SOURCE_DATA = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    IMAGE_SOURCE_DATA(new TagInfo(
             "Image Source Data", 0x935c, FIELD_TYPE_UNDEFINED, 1,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_XPTITLE = new TagInfo("XPTitle",
-            0x9c9b, FIELD_TYPE_BYTE, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_XPCOMMENT = new TagInfo("XPComment",
-            0x9c9c, FIELD_TYPE_BYTE, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_XPAUTHOR = new TagInfo("XPAuthor",
-            0x9c9d, FIELD_TYPE_BYTE, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_XPKEYWORDS = new TagInfo("XPKeywords",
-            0x9c9e, FIELD_TYPE_BYTE, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_XPSUBJECT = new TagInfo("XPSubject",
-            0x9c9f, FIELD_TYPE_BYTE, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_FLASHPIX_VERSION = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    XPTITLE(new TagInfo("XPTitle",
+            0x9c9b, FIELD_TYPE_BYTE, 1, EXIF_DIRECTORY_IFD0)),
+    XPCOMMENT(new TagInfo("XPComment",
+            0x9c9c, FIELD_TYPE_BYTE, 1, EXIF_DIRECTORY_IFD0)),
+    XPAUTHOR(new TagInfo("XPAuthor",
+            0x9c9d, FIELD_TYPE_BYTE, 1, EXIF_DIRECTORY_IFD0)),
+    XPKEYWORDS(new TagInfo("XPKeywords",
+            0x9c9e, FIELD_TYPE_BYTE, 1, EXIF_DIRECTORY_IFD0)),
+    XPSUBJECT(new TagInfo("XPSubject",
+            0x9c9f, FIELD_TYPE_BYTE, 1, EXIF_DIRECTORY_IFD0)),
+    FLASHPIX_VERSION(new TagInfo(
             "Flashpix Version", 0xa000, FIELD_TYPE_UNDEFINED, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_COLOR_SPACE = new TagInfo(
-            "Color Space", 0xa001, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_EXIF_IFD);
-    // tag constants public static final int COLOR_SPACE_VALUE_SRGB = 1;
-    public static final int COLOR_SPACE_VALUE_ADOBE_RGB = 2;
-    public static final int COLOR_SPACE_VALUE_UNCALIBRATED = 65535;
-    public static final TagInfo EXIF_TAG_EXIF_IMAGE_WIDTH = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    COLOR_SPACE(new TagInfo(
+            "Color Space", 0xa001, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_EXIF_IFD)) {
+        public static final int COLOR_SPACE_VALUE_SRGB = 1;
+        public static final int COLOR_SPACE_VALUE_ADOBE_RGB = 2;
+        public static final int COLOR_SPACE_VALUE_UNCALIBRATED = 65535;
+    },
+    EXIF_IMAGE_WIDTH(new TagInfo(
             "Exif Image Width", 0xa002, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_EXIF_IMAGE_LENGTH = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    EXIF_IMAGE_LENGTH(new TagInfo(
             "Exif Image Length", 0xa003, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_RELATED_SOUND_FILE = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    RELATED_SOUND_FILE(new TagInfo(
             "Related Sound File", 0xa004, FIELD_TYPE_ASCII, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_INTEROP_OFFSET = new TagInfo.Offset(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    INTEROP_OFFSET(new TagInfo.Offset(
             "Interop Offset", 0xa005, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_FLASH_ENERGY_EXIF_IFD = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    FLASH_ENERGY_EXIF_IFD(new TagInfo(
             "Flash Energy", 0xa20b, FIELD_TYPE_RATIONAL, -1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_SPATIAL_FREQUENCY_RESPONSE_2 = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    SPATIAL_FREQUENCY_RESPONSE_2(new TagInfo(
             "Spatial Frequency Response", 0xa20c,
-            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_NOISE_2 = new TagInfo("Noise", 0xa20d,
-            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_FOCAL_PLANE_XRESOLUTION_EXIF_IFD = new TagInfo(
+            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    NOISE_2(new TagInfo("Noise", 0xa20d,
+            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    FOCAL_PLANE_XRESOLUTION_EXIF_IFD(new TagInfo(
             "Focal Plane XResolution", 0xa20e, FIELD_TYPE_RATIONAL, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_FOCAL_PLANE_YRESOLUTION_EXIF_IFD = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    FOCAL_PLANE_YRESOLUTION_EXIF_IFD(new TagInfo(
             "Focal Plane YResolution", 0xa20f, FIELD_TYPE_RATIONAL, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_FOCAL_PLANE_RESOLUTION_UNIT_EXIF_IFD = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    FOCAL_PLANE_RESOLUTION_UNIT_EXIF_IFD(new TagInfo(
             "Focal Plane Resolution Unit", 0xa210, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    // tag constants public static final int FOCAL_PLANE_RESOLUTION_UNIT_EXIF_IFD_VALUE_NONE = 1;
-    public static final int FOCAL_PLANE_RESOLUTION_UNIT_EXIF_IFD_VALUE_INCHES = 2;
-    public static final int FOCAL_PLANE_RESOLUTION_UNIT_EXIF_IFD_VALUE_CM = 3;
-    public static final int FOCAL_PLANE_RESOLUTION_UNIT_EXIF_IFD_VALUE_MM = 4;
-    public static final int FOCAL_PLANE_RESOLUTION_UNIT_EXIF_IFD_VALUE_UM = 5;
-    public static final TagInfo EXIF_TAG_IMAGE_NUMBER = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)) {
+        public static final int FOCAL_PLANE_RESOLUTION_UNIT_EXIF_IFD_VALUE_NONE = 1;
+        public static final int FOCAL_PLANE_RESOLUTION_UNIT_EXIF_IFD_VALUE_INCHES = 2;
+        public static final int FOCAL_PLANE_RESOLUTION_UNIT_EXIF_IFD_VALUE_CM = 3;
+        public static final int FOCAL_PLANE_RESOLUTION_UNIT_EXIF_IFD_VALUE_MM = 4;
+        public static final int FOCAL_PLANE_RESOLUTION_UNIT_EXIF_IFD_VALUE_UM = 5;
+    },
+    IMAGE_NUMBER(new TagInfo(
             "Image Number", 0xa211, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_SECURITY_CLASSIFICATION = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    SECURITY_CLASSIFICATION(new TagInfo(
             "Security Classification", 0xa212, FIELD_TYPE_DESCRIPTION_UNKNOWN,
-            1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_IMAGE_HISTORY = new TagInfo(
+            1, EXIF_DIRECTORY_UNKNOWN)),
+    IMAGE_HISTORY(new TagInfo(
             "Image History", 0xa213, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_SUBJECT_LOCATION_2 = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    SUBJECT_LOCATION_2(new TagInfo(
             "Subject Location", 0xa214, FIELD_TYPE_SHORT, 2,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_EXPOSURE_INDEX_EXIF_IFD = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    EXPOSURE_INDEX_EXIF_IFD(new TagInfo(
             "Exposure Index", 0xa215, FIELD_TYPE_RATIONAL, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_TIFF_EPSTANDARD_ID_2 = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    TIFF_EPSTANDARD_ID_2(new TagInfo(
             "TIFF- EPStandard ID", 0xa216, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_SENSING_METHOD_EXIF_IFD = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    SENSING_METHOD_EXIF_IFD(new TagInfo(
             "Sensing Method", 0xa217, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    // tag constants public static final int SENSING_METHOD_EXIF_IFD_VALUE_NOT_DEFINED = 1;
-    public static final int SENSING_METHOD_EXIF_IFD_VALUE_ONE_CHIP_COLOR_AREA = 2;
-    public static final int SENSING_METHOD_EXIF_IFD_VALUE_TWO_CHIP_COLOR_AREA = 3;
-    public static final int SENSING_METHOD_EXIF_IFD_VALUE_THREE_CHIP_COLOR_AREA = 4;
-    public static final int SENSING_METHOD_EXIF_IFD_VALUE_COLOR_SEQUENTIAL_AREA = 5;
-    public static final int SENSING_METHOD_EXIF_IFD_VALUE_TRILINEAR = 7;
-    public static final int SENSING_METHOD_EXIF_IFD_VALUE_COLOR_SEQUENTIAL_LINEAR = 8;
-    public static final TagInfo EXIF_TAG_FILE_SOURCE = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)) {
+        public static final int SENSING_METHOD_EXIF_IFD_VALUE_NOT_DEFINED = 1;
+        public static final int SENSING_METHOD_EXIF_IFD_VALUE_ONE_CHIP_COLOR_AREA = 2;
+        public static final int SENSING_METHOD_EXIF_IFD_VALUE_TWO_CHIP_COLOR_AREA = 3;
+        public static final int SENSING_METHOD_EXIF_IFD_VALUE_THREE_CHIP_COLOR_AREA = 4;
+        public static final int SENSING_METHOD_EXIF_IFD_VALUE_COLOR_SEQUENTIAL_AREA = 5;
+        public static final int SENSING_METHOD_EXIF_IFD_VALUE_TRILINEAR = 7;
+        public static final int SENSING_METHOD_EXIF_IFD_VALUE_COLOR_SEQUENTIAL_LINEAR = 8;
+    },
+    FILE_SOURCE(new TagInfo(
             "File Source", 0xa300, FIELD_TYPE_UNDEFINED, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    // tag constants public static final int FILE_SOURCE_VALUE_FILM_SCANNER = 1;
-    public static final int FILE_SOURCE_VALUE_REFLECTION_PRINT_SCANNER = 2;
-    public static final int FILE_SOURCE_VALUE_DIGITAL_CAMERA = 3;
-    public static final TagInfo EXIF_TAG_SCENE_TYPE = new TagInfo("Scene Type",
-            0xa301, FIELD_TYPE_UNDEFINED, 1, EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_CFAPATTERN = new TagInfo("CFAPattern",
-            0xa302, FIELD_TYPE_UNDEFINED, 1, EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_CUSTOM_RENDERED = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)) {
+        public static final int FILE_SOURCE_VALUE_FILM_SCANNER = 1;
+        public static final int FILE_SOURCE_VALUE_REFLECTION_PRINT_SCANNER = 2;
+        public static final int FILE_SOURCE_VALUE_DIGITAL_CAMERA = 3;
+    },
+    SCENE_TYPE(new TagInfo("Scene Type",
+            0xa301, FIELD_TYPE_UNDEFINED, 1, EXIF_DIRECTORY_EXIF_IFD)),
+    CFAPATTERN(new TagInfo("CFAPattern",
+            0xa302, FIELD_TYPE_UNDEFINED, 1, EXIF_DIRECTORY_EXIF_IFD)),
+    CUSTOM_RENDERED(new TagInfo(
             "Custom Rendered", 0xa401, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    // tag constants public static final int CUSTOM_RENDERED_VALUE_NORMAL = 0;
-    public static final int CUSTOM_RENDERED_VALUE_CUSTOM = 1;
-    public static final TagInfo EXIF_TAG_EXPOSURE_MODE = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)) {
+        public static final int CUSTOM_RENDERED_VALUE_NORMAL = 0;
+        public static final int CUSTOM_RENDERED_VALUE_CUSTOM = 1;
+    },
+    EXPOSURE_MODE(new TagInfo(
             "Exposure Mode", 0xa402, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    // tag constants public static final int EXPOSURE_MODE_VALUE_AUTO = 0;
-    public static final int EXPOSURE_MODE_VALUE_MANUAL = 1;
-    public static final int EXPOSURE_MODE_VALUE_AUTO_BRACKET = 2;
-    public static final TagInfo EXIF_TAG_WHITE_BALANCE_1 = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)) {
+        public static final int EXPOSURE_MODE_VALUE_AUTO = 0;
+        public static final int EXPOSURE_MODE_VALUE_MANUAL = 1;
+        public static final int EXPOSURE_MODE_VALUE_AUTO_BRACKET = 2;
+    },
+    WHITE_BALANCE_1(new TagInfo(
             "White Balance", 0xa403, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    // tag constants public static final int WHITE_BALANCE_1_VALUE_AUTO = 0;
-    public static final int WHITE_BALANCE_1_VALUE_MANUAL = 1;
-    public static final TagInfo EXIF_TAG_DIGITAL_ZOOM_RATIO = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)) {
+        public static final int WHITE_BALANCE_1_VALUE_AUTO = 0;
+        public static final int WHITE_BALANCE_1_VALUE_MANUAL = 1;
+    },
+    DIGITAL_ZOOM_RATIO(new TagInfo(
             "Digital Zoom Ratio", 0xa404, FIELD_TYPE_RATIONAL, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_FOCAL_LENGTH_IN_35MM_FORMAT = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    FOCAL_LENGTH_IN_35MM_FORMAT(new TagInfo(
             "Focal Length In 3 5mm Format", 0xa405, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_SCENE_CAPTURE_TYPE = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    SCENE_CAPTURE_TYPE(new TagInfo(
             "Scene Capture Type", 0xa406, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    // tag constants public static final int SCENE_CAPTURE_TYPE_VALUE_STANDARD = 0;
-    public static final int SCENE_CAPTURE_TYPE_VALUE_LANDSCAPE = 1;
-    public static final int SCENE_CAPTURE_TYPE_VALUE_PORTRAIT = 2;
-    public static final int SCENE_CAPTURE_TYPE_VALUE_NIGHT = 3;
-    public static final TagInfo EXIF_TAG_GAIN_CONTROL = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)) {
+        public static final int SCENE_CAPTURE_TYPE_VALUE_STANDARD = 0;
+        public static final int SCENE_CAPTURE_TYPE_VALUE_LANDSCAPE = 1;
+        public static final int SCENE_CAPTURE_TYPE_VALUE_PORTRAIT = 2;
+        public static final int SCENE_CAPTURE_TYPE_VALUE_NIGHT = 3;
+    },
+    GAIN_CONTROL(new TagInfo(
             "Gain Control", 0xa407, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    // tag constants public static final int GAIN_CONTROL_VALUE_NONE = 0;
-    public static final int GAIN_CONTROL_VALUE_LOW_GAIN_UP = 1;
-    public static final int GAIN_CONTROL_VALUE_HIGH_GAIN_UP = 2;
-    public static final int GAIN_CONTROL_VALUE_LOW_GAIN_DOWN = 3;
-    public static final int GAIN_CONTROL_VALUE_HIGH_GAIN_DOWN = 4;
-    public static final TagInfo EXIF_TAG_CONTRAST_1 = new TagInfo("Contrast",
-            0xa408, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_EXIF_IFD);
-    // tag constants public static final int CONTRAST_1_VALUE_NORMAL = 0;
-    public static final int CONTRAST_1_VALUE_LOW = 1;
-    public static final int CONTRAST_1_VALUE_HIGH = 2;
-    public static final TagInfo EXIF_TAG_SATURATION_1 = new TagInfo(
-            "Saturation", 0xa409, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_EXIF_IFD);
-    // tag constants public static final int SATURATION_1_VALUE_NORMAL = 0;
-    public static final int SATURATION_1_VALUE_LOW = 1;
-    public static final int SATURATION_1_VALUE_HIGH = 2;
-    public static final TagInfo EXIF_TAG_SHARPNESS_1 = new TagInfo("Sharpness",
-            0xa40a, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_EXIF_IFD);
-    // tag constants public static final int SHARPNESS_1_VALUE_NORMAL = 0;
-    public static final int SHARPNESS_1_VALUE_SOFT = 1;
-    public static final int SHARPNESS_1_VALUE_HARD = 2;
-    public static final TagInfo EXIF_TAG_DEVICE_SETTING_DESCRIPTION = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)) {
+        public static final int GAIN_CONTROL_VALUE_NONE = 0;
+        public static final int GAIN_CONTROL_VALUE_LOW_GAIN_UP = 1;
+        public static final int GAIN_CONTROL_VALUE_HIGH_GAIN_UP = 2;
+        public static final int GAIN_CONTROL_VALUE_LOW_GAIN_DOWN = 3;
+        public static final int GAIN_CONTROL_VALUE_HIGH_GAIN_DOWN = 4;
+    },
+    CONTRAST_1(new TagInfo("Contrast",
+            0xa408, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_EXIF_IFD)) {
+        public static final int CONTRAST_1_VALUE_NORMAL = 0;
+        public static final int CONTRAST_1_VALUE_LOW = 1;
+        public static final int CONTRAST_1_VALUE_HIGH = 2;
+    },
+    SATURATION_1(new TagInfo(
+            "Saturation", 0xa409, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_EXIF_IFD)) {
+        public static final int SATURATION_1_VALUE_NORMAL = 0;
+        public static final int SATURATION_1_VALUE_LOW = 1;
+        public static final int SATURATION_1_VALUE_HIGH = 2;
+    },
+    SHARPNESS_1(new TagInfo("Sharpness",
+            0xa40a, FIELD_TYPE_SHORT, 1, EXIF_DIRECTORY_EXIF_IFD)) {
+        public static final int SHARPNESS_1_VALUE_NORMAL = 0;
+        public static final int SHARPNESS_1_VALUE_SOFT = 1;
+        public static final int SHARPNESS_1_VALUE_HARD = 2;
+    },
+    DEVICE_SETTING_DESCRIPTION(new TagInfo(
             "Device Setting Description", 0xa40b,
-            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_SUBJECT_DISTANCE_RANGE = new TagInfo(
+            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    SUBJECT_DISTANCE_RANGE(new TagInfo(
             "Subject Distance Range", 0xa40c, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    // tag constants public static final int SUBJECT_DISTANCE_RANGE_VALUE_MACRO = 1;
-    public static final int SUBJECT_DISTANCE_RANGE_VALUE_CLOSE = 2;
-    public static final int SUBJECT_DISTANCE_RANGE_VALUE_DISTANT = 3;
-    public static final TagInfo EXIF_TAG_IMAGE_UNIQUE_ID = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)) {
+        public static final int SUBJECT_DISTANCE_RANGE_VALUE_MACRO = 1;
+        public static final int SUBJECT_DISTANCE_RANGE_VALUE_CLOSE = 2;
+        public static final int SUBJECT_DISTANCE_RANGE_VALUE_DISTANT = 3;
+    },
+    IMAGE_UNIQUE_ID(new TagInfo(
             "Image Unique ID", 0xa420, FIELD_TYPE_ASCII, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_GDALMETADATA = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    GDALMETADATA(new TagInfo(
             "GDALMetadata", 0xa480, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_GDALNO_DATA = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    GDALNO_DATA(new TagInfo(
             "GDALNo Data", 0xa481, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_GAMMA = new TagInfo("Gamma", 0xa500,
-            FIELD_TYPE_RATIONAL, 1, EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_PIXEL_FORMAT = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    GAMMA(new TagInfo("Gamma", 0xa500,
+            FIELD_TYPE_RATIONAL, 1, EXIF_DIRECTORY_EXIF_IFD)),
+    PIXEL_FORMAT(new TagInfo(
             "Pixel Format", 0xbc01, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    // tag constants public static final int PIXEL_FORMAT_VALUE_BLACK_AND_WHITE = 0x5;
-    public static final int PIXEL_FORMAT_VALUE_8_BIT_GRAY = 0x8;
-    public static final int PIXEL_FORMAT_VALUE_16_BIT_BGR555 = 0x9;
-    public static final int PIXEL_FORMAT_VALUE_16_BIT_BGR565 = 0xa;
-    public static final int PIXEL_FORMAT_VALUE_16_BIT_GRAY = 0xb;
-    public static final int PIXEL_FORMAT_VALUE_24_BIT_BGR = 0xc;
-    public static final int PIXEL_FORMAT_VALUE_24_BIT_RGB = 0xd;
-    public static final int PIXEL_FORMAT_VALUE_32_BIT_BGR = 0xe;
-    public static final int PIXEL_FORMAT_VALUE_32_BIT_BGRA = 0xf;
-    public static final int PIXEL_FORMAT_VALUE_32_BIT_PBGRA = 0x10;
-    public static final int PIXEL_FORMAT_VALUE_32_BIT_GRAY_FLOAT = 0x11;
-    public static final int PIXEL_FORMAT_VALUE_48_BIT_RGB_FIXED_POINT = 0x12;
-    public static final int PIXEL_FORMAT_VALUE_32_BIT_BGR101010 = 0x13;
-    public static final int PIXEL_FORMAT_VALUE_48_BIT_RGB = 0x15;
-    public static final int PIXEL_FORMAT_VALUE_64_BIT_RGBA = 0x16;
-    public static final int PIXEL_FORMAT_VALUE_64_BIT_PRGBA = 0x17;
-    public static final int PIXEL_FORMAT_VALUE_96_BIT_RGB_FIXED_POINT = 0x18;
-    public static final int PIXEL_FORMAT_VALUE_128_BIT_RGBA_FLOAT = 0x19;
-    public static final int PIXEL_FORMAT_VALUE_128_BIT_PRGBA_FLOAT = 0x1a;
-    public static final int PIXEL_FORMAT_VALUE_128_BIT_RGB_FLOAT = 0x1b;
-    public static final int PIXEL_FORMAT_VALUE_32_BIT_CMYK = 0x1c;
-    public static final int PIXEL_FORMAT_VALUE_64_BIT_RGBA_FIXED_POINT = 0x1d;
-    public static final int PIXEL_FORMAT_VALUE_128_BIT_RGBA_FIXED_POINT = 0x1e;
-    public static final int PIXEL_FORMAT_VALUE_64_BIT_CMYK = 0x1f;
-    public static final int PIXEL_FORMAT_VALUE_24_BIT_3_CHANNELS = 0x20;
-    public static final int PIXEL_FORMAT_VALUE_32_BIT_4_CHANNELS = 0x21;
-    public static final int PIXEL_FORMAT_VALUE_40_BIT_5_CHANNELS = 0x22;
-    public static final int PIXEL_FORMAT_VALUE_48_BIT_6_CHANNELS = 0x23;
-    public static final int PIXEL_FORMAT_VALUE_56_BIT_7_CHANNELS = 0x24;
-    public static final int PIXEL_FORMAT_VALUE_64_BIT_8_CHANNELS = 0x25;
-    public static final int PIXEL_FORMAT_VALUE_48_BIT_3_CHANNELS = 0x26;
-    public static final int PIXEL_FORMAT_VALUE_64_BIT_4_CHANNELS = 0x27;
-    public static final int PIXEL_FORMAT_VALUE_80_BIT_5_CHANNELS = 0x28;
-    public static final int PIXEL_FORMAT_VALUE_96_BIT_6_CHANNELS = 0x29;
-    public static final int PIXEL_FORMAT_VALUE_112_BIT_7_CHANNELS = 0x2a;
-    public static final int PIXEL_FORMAT_VALUE_128_BIT_8_CHANNELS = 0x2b;
-    public static final int PIXEL_FORMAT_VALUE_40_BIT_CMYK_ALPHA = 0x2c;
-    public static final int PIXEL_FORMAT_VALUE_80_BIT_CMYK_ALPHA = 0x2d;
-    public static final int PIXEL_FORMAT_VALUE_32_BIT_3_CHANNELS_ALPHA = 0x2e;
-    public static final int PIXEL_FORMAT_VALUE_40_BIT_4_CHANNELS_ALPHA = 0x2f;
-    public static final int PIXEL_FORMAT_VALUE_48_BIT_5_CHANNELS_ALPHA = 0x30;
-    public static final int PIXEL_FORMAT_VALUE_56_BIT_6_CHANNELS_ALPHA = 0x31;
-    public static final int PIXEL_FORMAT_VALUE_64_BIT_7_CHANNELS_ALPHA = 0x32;
-    public static final int PIXEL_FORMAT_VALUE_72_BIT_8_CHANNELS_ALPHA = 0x33;
-    public static final int PIXEL_FORMAT_VALUE_64_BIT_3_CHANNELS_ALPHA = 0x34;
-    public static final int PIXEL_FORMAT_VALUE_80_BIT_4_CHANNELS_ALPHA = 0x35;
-    public static final int PIXEL_FORMAT_VALUE_96_BIT_5_CHANNELS_ALPHA = 0x36;
-    public static final int PIXEL_FORMAT_VALUE_112_BIT_6_CHANNELS_ALPHA = 0x37;
-    public static final int PIXEL_FORMAT_VALUE_128_BIT_7_CHANNELS_ALPHA = 0x38;
-    public static final int PIXEL_FORMAT_VALUE_144_BIT_8_CHANNELS_ALPHA = 0x39;
-    public static final int PIXEL_FORMAT_VALUE_64_BIT_RGBA_HALF = 0x3a;
-    public static final int PIXEL_FORMAT_VALUE_48_BIT_RGB_HALF = 0x3b;
-    public static final int PIXEL_FORMAT_VALUE_32_BIT_RGBE = 0x3d;
-    public static final int PIXEL_FORMAT_VALUE_16_BIT_GRAY_HALF = 0x3e;
-    public static final int PIXEL_FORMAT_VALUE_32_BIT_GRAY_FIXED_POINT = 0x3f;
-    public static final TagInfo EXIF_TAG_TRANSFOMATION = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)) {
+        public static final int PIXEL_FORMAT_VALUE_BLACK_AND_WHITE = 0x5;
+        public static final int PIXEL_FORMAT_VALUE_8_BIT_GRAY = 0x8;
+        public static final int PIXEL_FORMAT_VALUE_16_BIT_BGR555 = 0x9;
+        public static final int PIXEL_FORMAT_VALUE_16_BIT_BGR565 = 0xa;
+        public static final int PIXEL_FORMAT_VALUE_16_BIT_GRAY = 0xb;
+        public static final int PIXEL_FORMAT_VALUE_24_BIT_BGR = 0xc;
+        public static final int PIXEL_FORMAT_VALUE_24_BIT_RGB = 0xd;
+        public static final int PIXEL_FORMAT_VALUE_32_BIT_BGR = 0xe;
+        public static final int PIXEL_FORMAT_VALUE_32_BIT_BGRA = 0xf;
+        public static final int PIXEL_FORMAT_VALUE_32_BIT_PBGRA = 0x10;
+        public static final int PIXEL_FORMAT_VALUE_32_BIT_GRAY_FLOAT = 0x11;
+        public static final int PIXEL_FORMAT_VALUE_48_BIT_RGB_FIXED_POINT = 0x12;
+        public static final int PIXEL_FORMAT_VALUE_32_BIT_BGR101010 = 0x13;
+        public static final int PIXEL_FORMAT_VALUE_48_BIT_RGB = 0x15;
+        public static final int PIXEL_FORMAT_VALUE_64_BIT_RGBA = 0x16;
+        public static final int PIXEL_FORMAT_VALUE_64_BIT_PRGBA = 0x17;
+        public static final int PIXEL_FORMAT_VALUE_96_BIT_RGB_FIXED_POINT = 0x18;
+        public static final int PIXEL_FORMAT_VALUE_128_BIT_RGBA_FLOAT = 0x19;
+        public static final int PIXEL_FORMAT_VALUE_128_BIT_PRGBA_FLOAT = 0x1a;
+        public static final int PIXEL_FORMAT_VALUE_128_BIT_RGB_FLOAT = 0x1b;
+        public static final int PIXEL_FORMAT_VALUE_32_BIT_CMYK = 0x1c;
+        public static final int PIXEL_FORMAT_VALUE_64_BIT_RGBA_FIXED_POINT = 0x1d;
+        public static final int PIXEL_FORMAT_VALUE_128_BIT_RGBA_FIXED_POINT = 0x1e;
+        public static final int PIXEL_FORMAT_VALUE_64_BIT_CMYK = 0x1f;
+        public static final int PIXEL_FORMAT_VALUE_24_BIT_3_CHANNELS = 0x20;
+        public static final int PIXEL_FORMAT_VALUE_32_BIT_4_CHANNELS = 0x21;
+        public static final int PIXEL_FORMAT_VALUE_40_BIT_5_CHANNELS = 0x22;
+        public static final int PIXEL_FORMAT_VALUE_48_BIT_6_CHANNELS = 0x23;
+        public static final int PIXEL_FORMAT_VALUE_56_BIT_7_CHANNELS = 0x24;
+        public static final int PIXEL_FORMAT_VALUE_64_BIT_8_CHANNELS = 0x25;
+        public static final int PIXEL_FORMAT_VALUE_48_BIT_3_CHANNELS = 0x26;
+        public static final int PIXEL_FORMAT_VALUE_64_BIT_4_CHANNELS = 0x27;
+        public static final int PIXEL_FORMAT_VALUE_80_BIT_5_CHANNELS = 0x28;
+        public static final int PIXEL_FORMAT_VALUE_96_BIT_6_CHANNELS = 0x29;
+        public static final int PIXEL_FORMAT_VALUE_112_BIT_7_CHANNELS = 0x2a;
+        public static final int PIXEL_FORMAT_VALUE_128_BIT_8_CHANNELS = 0x2b;
+        public static final int PIXEL_FORMAT_VALUE_40_BIT_CMYK_ALPHA = 0x2c;
+        public static final int PIXEL_FORMAT_VALUE_80_BIT_CMYK_ALPHA = 0x2d;
+        public static final int PIXEL_FORMAT_VALUE_32_BIT_3_CHANNELS_ALPHA = 0x2e;
+        public static final int PIXEL_FORMAT_VALUE_40_BIT_4_CHANNELS_ALPHA = 0x2f;
+        public static final int PIXEL_FORMAT_VALUE_48_BIT_5_CHANNELS_ALPHA = 0x30;
+        public static final int PIXEL_FORMAT_VALUE_56_BIT_6_CHANNELS_ALPHA = 0x31;
+        public static final int PIXEL_FORMAT_VALUE_64_BIT_7_CHANNELS_ALPHA = 0x32;
+        public static final int PIXEL_FORMAT_VALUE_72_BIT_8_CHANNELS_ALPHA = 0x33;
+        public static final int PIXEL_FORMAT_VALUE_64_BIT_3_CHANNELS_ALPHA = 0x34;
+        public static final int PIXEL_FORMAT_VALUE_80_BIT_4_CHANNELS_ALPHA = 0x35;
+        public static final int PIXEL_FORMAT_VALUE_96_BIT_5_CHANNELS_ALPHA = 0x36;
+        public static final int PIXEL_FORMAT_VALUE_112_BIT_6_CHANNELS_ALPHA = 0x37;
+        public static final int PIXEL_FORMAT_VALUE_128_BIT_7_CHANNELS_ALPHA = 0x38;
+        public static final int PIXEL_FORMAT_VALUE_144_BIT_8_CHANNELS_ALPHA = 0x39;
+        public static final int PIXEL_FORMAT_VALUE_64_BIT_RGBA_HALF = 0x3a;
+        public static final int PIXEL_FORMAT_VALUE_48_BIT_RGB_HALF = 0x3b;
+        public static final int PIXEL_FORMAT_VALUE_32_BIT_RGBE = 0x3d;
+        public static final int PIXEL_FORMAT_VALUE_16_BIT_GRAY_HALF = 0x3e;
+        public static final int PIXEL_FORMAT_VALUE_32_BIT_GRAY_FIXED_POINT = 0x3f;
+    },
+    TRANSFOMATION(new TagInfo(
             "Transfomation", 0xbc02, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    // tag constants public static final int TRANSFOMATION_VALUE_HORIZONTAL_NORMAL = 0;
-    public static final int TRANSFOMATION_VALUE_MIRROR_VERTICAL = 1;
-    public static final int TRANSFOMATION_VALUE_MIRROR_HORIZONTAL = 2;
-    public static final int TRANSFOMATION_VALUE_ROTATE_180 = 3;
-    public static final int TRANSFOMATION_VALUE_ROTATE_90_CW = 4;
-    public static final int TRANSFOMATION_VALUE_MIRROR_HORIZONTAL_AND_ROTATE_90_CW = 5;
-    public static final int TRANSFOMATION_VALUE_MIRROR_HORIZONTAL_AND_ROTATE_270_CW = 6;
-    public static final int TRANSFOMATION_VALUE_ROTATE_270_CW = 7;
-    public static final TagInfo EXIF_TAG_UNCOMPRESSED = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)) {
+        public static final int TRANSFOMATION_VALUE_HORIZONTAL_NORMAL = 0;
+        public static final int TRANSFOMATION_VALUE_MIRROR_VERTICAL = 1;
+        public static final int TRANSFOMATION_VALUE_MIRROR_HORIZONTAL = 2;
+        public static final int TRANSFOMATION_VALUE_ROTATE_180 = 3;
+        public static final int TRANSFOMATION_VALUE_ROTATE_90_CW = 4;
+        public static final int TRANSFOMATION_VALUE_MIRROR_HORIZONTAL_AND_ROTATE_90_CW = 5;
+        public static final int TRANSFOMATION_VALUE_MIRROR_HORIZONTAL_AND_ROTATE_270_CW = 6;
+        public static final int TRANSFOMATION_VALUE_ROTATE_270_CW = 7;
+    },
+    UNCOMPRESSED(new TagInfo(
             "Uncompressed", 0xbc03, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    // tag constants public static final int UNCOMPRESSED_VALUE_NO = 0;
-    public static final int UNCOMPRESSED_VALUE_YES = 1;
-    public static final TagInfo EXIF_TAG_IMAGE_TYPE = new TagInfo("Image Type",
-            0xbc04, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_IMAGE_WIDTH = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)) {
+        public static final int UNCOMPRESSED_VALUE_NO = 0;
+        public static final int UNCOMPRESSED_VALUE_YES = 1;
+    },
+    IMAGE_TYPE(new TagInfo("Image Type",
+            0xbc04, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    IMAGE_WIDTH(new TagInfo(
             "Image Width", 0xbc80, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_IMAGE_HEIGHT = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    IMAGE_HEIGHT(new TagInfo(
             "Image Height", 0xbc81, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_WIDTH_RESOLUTION = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    WIDTH_RESOLUTION(new TagInfo(
             "Width Resolution", 0xbc82, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_HEIGHT_RESOLUTION = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    HEIGHT_RESOLUTION(new TagInfo(
             "Height Resolution", 0xbc83, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
+            EXIF_DIRECTORY_UNKNOWN)),
     // might be an offset?
-    public static final TagInfo EXIF_TAG_IMAGE_OFFSET = new TagInfo(
+    IMAGE_OFFSET(new TagInfo(
             "Image Offset", 0xbcc0, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_IMAGE_BYTE_COUNT = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    IMAGE_BYTE_COUNT(new TagInfo(
             "Image Byte Count", 0xbcc1, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
+            EXIF_DIRECTORY_UNKNOWN)),
     // might be an offset?
-    public static final TagInfo EXIF_TAG_ALPHA_OFFSET = new TagInfo(
+    ALPHA_OFFSET(new TagInfo(
             "Alpha Offset", 0xbcc2, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_ALPHA_BYTE_COUNT = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    ALPHA_BYTE_COUNT(new TagInfo(
             "Alpha Byte Count", 0xbcc3, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_IMAGE_DATA_DISCARD = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    IMAGE_DATA_DISCARD(new TagInfo(
             "Image Data Discard", 0xbcc4, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    // tag constants public static final int IMAGE_DATA_DISCARD_VALUE_FULL_RESOLUTION = 0;
-    public static final int IMAGE_DATA_DISCARD_VALUE_FLEXBITS_DISCARDED = 1;
-    public static final int IMAGE_DATA_DISCARD_VALUE_HIGH_PASS_FREQUENCY_DATA_DISCARDED = 2;
-    public static final int IMAGE_DATA_DISCARD_VALUE_HIGHPASS_AND_LOW_PASS_FREQUENCY_DATA_DISCARDED = 3;
-    public static final TagInfo EXIF_TAG_ALPHA_DATA_DISCARD = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)) {
+        public static final int IMAGE_DATA_DISCARD_VALUE_FULL_RESOLUTION = 0;
+        public static final int IMAGE_DATA_DISCARD_VALUE_FLEXBITS_DISCARDED = 1;
+        public static final int IMAGE_DATA_DISCARD_VALUE_HIGH_PASS_FREQUENCY_DATA_DISCARDED = 2;
+        public static final int IMAGE_DATA_DISCARD_VALUE_HIGHPASS_AND_LOW_PASS_FREQUENCY_DATA_DISCARDED = 3;
+    },
+    ALPHA_DATA_DISCARD(new TagInfo(
             "Alpha Data Discard", 0xbcc5, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    // tag constants public static final int ALPHA_DATA_DISCARD_VALUE_FULL_RESOLUTION = 0;
-    public static final int ALPHA_DATA_DISCARD_VALUE_FLEXBITS_DISCARDED = 1;
-    public static final int ALPHA_DATA_DISCARD_VALUE_HIGH_PASS_FREQUENCY_DATA_DISCARDED = 2;
-    public static final int ALPHA_DATA_DISCARD_VALUE_HIGHPASS_AND_LOW_PASS_FREQUENCY_DATA_DISCARDED = 3;
-    public static final TagInfo EXIF_TAG_OCE_SCANJOB_DESC = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)) {
+        public static final int ALPHA_DATA_DISCARD_VALUE_FULL_RESOLUTION = 0;
+        public static final int ALPHA_DATA_DISCARD_VALUE_FLEXBITS_DISCARDED = 1;
+        public static final int ALPHA_DATA_DISCARD_VALUE_HIGH_PASS_FREQUENCY_DATA_DISCARDED = 2;
+        public static final int ALPHA_DATA_DISCARD_VALUE_HIGHPASS_AND_LOW_PASS_FREQUENCY_DATA_DISCARDED = 3;
+    },
+    OCE_SCANJOB_DESC(new TagInfo(
             "Oce Scanjob Desc", 0xc427, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_OCE_APPLICATION_SELECTOR = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    OCE_APPLICATION_SELECTOR(new TagInfo(
             "Oce Application Selector", 0xc428, FIELD_TYPE_DESCRIPTION_UNKNOWN,
-            1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_OCE_IDNUMBER = new TagInfo(
+            1, EXIF_DIRECTORY_UNKNOWN)),
+    OCE_IDNUMBER(new TagInfo(
             "Oce IDNumber", 0xc429, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_OCE_IMAGE_LOGIC = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    OCE_IMAGE_LOGIC(new TagInfo(
             "Oce Image Logic", 0xc42a, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_ANNOTATIONS = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    ANNOTATIONS(new TagInfo(
             "Annotations", 0xc44f, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_PRINT_IM = new TagInfo("Print IM",
-            0xc4a5, FIELD_TYPE_UNDEFINED, 1, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_DNG_VERSION = new TagInfo(
-            "DNG Version", 0xc612, FIELD_TYPE_BYTE, 4, EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_DNG_BACKWARD_VERSION = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    PRINT_IM(new TagInfo("Print IM",
+            0xc4a5, FIELD_TYPE_UNDEFINED, 1, EXIF_DIRECTORY_IFD0)),
+    DNG_VERSION(new TagInfo(
+            "DNG Version", 0xc612, FIELD_TYPE_BYTE, 4, EXIF_DIRECTORY_IFD0)),
+    DNG_BACKWARD_VERSION(new TagInfo(
             "DNG Backward Version", 0xc613, FIELD_TYPE_BYTE, 4,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_UNIQUE_CAMERA_MODEL = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    UNIQUE_CAMERA_MODEL(new TagInfo(
             "Unique Camera Model", 0xc614, FIELD_TYPE_ASCII, 1,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_LOCALIZED_CAMERA_MODEL = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    LOCALIZED_CAMERA_MODEL(new TagInfo(
             "Localized Camera Model", 0xc615, FIELD_TYPE_ASCII, 1,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_CFAPLANE_COLOR = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    CFAPLANE_COLOR(new TagInfo(
             "CFAPlane Color", 0xc616, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_CFALAYOUT = new TagInfo("CFALayout",
-            0xc617, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    // tag constants public static final int CFALAYOUT_VALUE_RECTANGULAR = 1;
-    public static final int CFALAYOUT_VALUE_EVEN_COLUMNS_OFFSET_DOWN_1_2_ROW = 2;
-    public static final int CFALAYOUT_VALUE_EVEN_COLUMNS_OFFSET_UP_1_2_ROW = 3;
-    public static final int CFALAYOUT_VALUE_EVEN_ROWS_OFFSET_RIGHT_1_2_COLUMN = 4;
-    public static final int CFALAYOUT_VALUE_EVEN_ROWS_OFFSET_LEFT_1_2_COLUMN = 5;
-    public static final TagInfo EXIF_TAG_LINEARIZATION_TABLE = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    CFALAYOUT(new TagInfo("CFALayout",
+            0xc617, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)) {
+        public static final int CFALAYOUT_VALUE_RECTANGULAR = 1;
+        public static final int CFALAYOUT_VALUE_EVEN_COLUMNS_OFFSET_DOWN_1_2_ROW = 2;
+        public static final int CFALAYOUT_VALUE_EVEN_COLUMNS_OFFSET_UP_1_2_ROW = 3;
+        public static final int CFALAYOUT_VALUE_EVEN_ROWS_OFFSET_RIGHT_1_2_COLUMN = 4;
+        public static final int CFALAYOUT_VALUE_EVEN_ROWS_OFFSET_LEFT_1_2_COLUMN = 5;
+    },
+    LINEARIZATION_TABLE(new TagInfo(
             "Linearization Table", 0xc618, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_BLACK_LEVEL_REPEAT_DIM = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    BLACK_LEVEL_REPEAT_DIM(new TagInfo(
             "Black Level Repeat Dim", 0xc619, FIELD_TYPE_DESCRIPTION_UNKNOWN,
-            1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_BLACK_LEVEL = new TagInfo(
+            1, EXIF_DIRECTORY_UNKNOWN)),
+    BLACK_LEVEL(new TagInfo(
             "Black Level", 0xc61a, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_BLACK_LEVEL_DELTA_H = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    BLACK_LEVEL_DELTA_H(new TagInfo(
             "Black Level Delta H", 0xc61b, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_BLACK_LEVEL_DELTA_V = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    BLACK_LEVEL_DELTA_V(new TagInfo(
             "Black Level Delta V", 0xc61c, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_WHITE_LEVEL = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    WHITE_LEVEL(new TagInfo(
             "White Level", 0xc61d, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_DEFAULT_SCALE = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    DEFAULT_SCALE(new TagInfo(
             "Default Scale", 0xc61e, FIELD_TYPE_RATIONAL, 2,
-            EXIF_DIRECTORY_SUB_IFD);
-    public static final TagInfo EXIF_TAG_DEFAULT_CROP_ORIGIN = new TagInfo(
+            EXIF_DIRECTORY_SUB_IFD)),
+    DEFAULT_CROP_ORIGIN(new TagInfo(
             "Default Crop Origin", 0xc61f, FIELD_TYPE_LONG, 2,
-            EXIF_DIRECTORY_SUB_IFD);
-    public static final TagInfo EXIF_TAG_DEFAULT_CROP_SIZE = new TagInfo(
+            EXIF_DIRECTORY_SUB_IFD)),
+    DEFAULT_CROP_SIZE(new TagInfo(
             "Default Crop Size", 0xc620, FIELD_TYPE_LONG, 2,
-            EXIF_DIRECTORY_SUB_IFD);
-    public static final TagInfo EXIF_TAG_COLOR_MATRIX_1 = new TagInfo(
+            EXIF_DIRECTORY_SUB_IFD)),
+    COLOR_MATRIX_1(new TagInfo(
             "Color Matrix 1", 0xc621, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_COLOR_MATRIX_2 = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    COLOR_MATRIX_2(new TagInfo(
             "Color Matrix 2", 0xc622, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_CAMERA_CALIBRATION_1 = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    CAMERA_CALIBRATION_1(new TagInfo(
             "Camera Calibration 1", 0xc623, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_CAMERA_CALIBRATION_2 = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    CAMERA_CALIBRATION_2(new TagInfo(
             "Camera Calibration 2", 0xc624, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_REDUCTION_MATRIX_1 = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    REDUCTION_MATRIX_1(new TagInfo(
             "Reduction Matrix 1", 0xc625, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_REDUCTION_MATRIX_2 = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    REDUCTION_MATRIX_2(new TagInfo(
             "Reduction Matrix 2", 0xc626, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_ANALOG_BALANCE = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    ANALOG_BALANCE(new TagInfo(
             "Analog Balance", 0xc627, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_AS_SHOT_NEUTRAL = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    AS_SHOT_NEUTRAL(new TagInfo(
             "As Shot Neutral", 0xc628, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_AS_SHOT_WHITE_XY = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    AS_SHOT_WHITE_XY(new TagInfo(
             "As Shot White XY", 0xc629, FIELD_TYPE_RATIONAL, 2,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_BASELINE_EXPOSURE = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    BASELINE_EXPOSURE(new TagInfo(
             "Baseline Exposure", 0xc62a, FIELD_TYPE_SRATIONAL, 1,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_BASELINE_NOISE = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    BASELINE_NOISE(new TagInfo(
             "Baseline Noise", 0xc62b, FIELD_TYPE_RATIONAL, 1,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_BASELINE_SHARPNESS = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    BASELINE_SHARPNESS(new TagInfo(
             "Baseline Sharpness", 0xc62c, FIELD_TYPE_RATIONAL, 1,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_BAYER_GREEN_SPLIT = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    BAYER_GREEN_SPLIT(new TagInfo(
             "Bayer Green Split", 0xc62d, FIELD_TYPE_LONG, 1,
-            EXIF_DIRECTORY_SUB_IFD);
-    public static final TagInfo EXIF_TAG_LINEAR_RESPONSE_LIMIT = new TagInfo(
+            EXIF_DIRECTORY_SUB_IFD)),
+    LINEAR_RESPONSE_LIMIT(new TagInfo(
             "Linear Response Limit", 0xc62e, FIELD_TYPE_RATIONAL, 1,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_CAMERA_SERIAL_NUMBER = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    CAMERA_SERIAL_NUMBER(new TagInfo(
             "Camera Serial Number", 0xc62f, FIELD_TYPE_ASCII, 1,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_DNG_LENS_INFO = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    DNG_LENS_INFO(new TagInfo(
             "DNG Lens Info", 0xc630, FIELD_TYPE_RATIONAL, 4,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_CHROMA_BLUR_RADIUS = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    CHROMA_BLUR_RADIUS(new TagInfo(
             "Chroma Blur Radius", 0xc631, FIELD_TYPE_RATIONAL, 1,
-            EXIF_DIRECTORY_SUB_IFD);
-    public static final TagInfo EXIF_TAG_ANTI_ALIAS_STRENGTH = new TagInfo(
+            EXIF_DIRECTORY_SUB_IFD)),
+    ANTI_ALIAS_STRENGTH(new TagInfo(
             "Anti Alias Strength", 0xc632, FIELD_TYPE_RATIONAL, 1,
-            EXIF_DIRECTORY_SUB_IFD);
-    public static final TagInfo EXIF_TAG_SHADOW_SCALE = new TagInfo(
-            "Shadow Scale", 0xc633, FIELD_TYPE_RATIONAL, 1, EXIF_DIRECTORY_IFD0);
-    // poly tag public static final TagInfo2 EXIF_TAG_SR2PRIVATE = new TagInfo2( "SR2Private", 0xc634, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_DNG_ADOBE_DATA = new TagInfo(
+            EXIF_DIRECTORY_SUB_IFD)),
+    SHADOW_SCALE(new TagInfo(
+            "Shadow Scale", 0xc633, FIELD_TYPE_RATIONAL, 1, EXIF_DIRECTORY_IFD0)),
+    // poly tag public static final TagInfo2 SR2PRIVATE(new TagInfo2( "SR2Private", 0xc634, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    DNG_ADOBE_DATA(new TagInfo(
             "DNG Adobe Data", 0xc634, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_DNG_PENTAX_DATA = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    DNG_PENTAX_DATA(new TagInfo(
             "DNG Pentax Data", 0xc634, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_DNG_PRIVATE_DATA = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    DNG_PRIVATE_DATA(new TagInfo(
             "DNG Private Data", 0xc634, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_MAKER_NOTE_SAFETY = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    MAKER_NOTE_SAFETY(new TagInfo(
             "Maker Note Safety", 0xc635, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_IFD0);
-    // tag constants public static final int MAKER_NOTE_SAFETY_VALUE_UNSAFE = 0;
-    public static final int MAKER_NOTE_SAFETY_VALUE_SAFE = 1;
-    public static final TagInfo EXIF_TAG_CALIBRATION_ILLUMINANT_1 = new TagInfo(
+            EXIF_DIRECTORY_IFD0)) {
+        public static final int MAKER_NOTE_SAFETY_VALUE_UNSAFE = 0;
+        public static final int MAKER_NOTE_SAFETY_VALUE_SAFE = 1;
+    },
+    CALIBRATION_ILLUMINANT_1(new TagInfo(
             "Calibration Illuminant 1", 0xc65a, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_IFD0);
-    // tag constants public static final int CALIBRATION_ILLUMINANT_1_VALUE_DAYLIGHT = 1;
-    public static final int CALIBRATION_ILLUMINANT_1_VALUE_FLUORESCENT = 2;
-    public static final int CALIBRATION_ILLUMINANT_1_VALUE_TUNGSTEN = 3;
-    public static final int CALIBRATION_ILLUMINANT_1_VALUE_FLASH = 4;
-    public static final int CALIBRATION_ILLUMINANT_1_VALUE_FINE_WEATHER = 9;
-    public static final int CALIBRATION_ILLUMINANT_1_VALUE_CLOUDY = 10;
-    public static final int CALIBRATION_ILLUMINANT_1_VALUE_SHADE = 11;
-    public static final int CALIBRATION_ILLUMINANT_1_VALUE_DAYLIGHT_FLUORESCENT = 12;
-    public static final int CALIBRATION_ILLUMINANT_1_VALUE_DAY_WHITE_FLUORESCENT = 13;
-    public static final int CALIBRATION_ILLUMINANT_1_VALUE_COOL_WHITE_FLUORESCENT = 14;
-    public static final int CALIBRATION_ILLUMINANT_1_VALUE_WHITE_FLUORESCENT = 15;
-    public static final int CALIBRATION_ILLUMINANT_1_VALUE_STANDARD_LIGHT_A = 17;
-    public static final int CALIBRATION_ILLUMINANT_1_VALUE_STANDARD_LIGHT_B = 18;
-    public static final int CALIBRATION_ILLUMINANT_1_VALUE_STANDARD_LIGHT_C = 19;
-    public static final int CALIBRATION_ILLUMINANT_1_VALUE_D55 = 20;
-    public static final int CALIBRATION_ILLUMINANT_1_VALUE_D65 = 21;
-    public static final int CALIBRATION_ILLUMINANT_1_VALUE_D75 = 22;
-    public static final int CALIBRATION_ILLUMINANT_1_VALUE_D50 = 23;
-    public static final int CALIBRATION_ILLUMINANT_1_VALUE_ISO_STUDIO_TUNGSTEN = 24;
-    public static final int CALIBRATION_ILLUMINANT_1_VALUE_OTHER = 255;
-    public static final TagInfo EXIF_TAG_CALIBRATION_ILLUMINANT_2 = new TagInfo(
+            EXIF_DIRECTORY_IFD0)) {
+        public static final int CALIBRATION_ILLUMINANT_1_VALUE_DAYLIGHT = 1;
+        public static final int CALIBRATION_ILLUMINANT_1_VALUE_FLUORESCENT = 2;
+        public static final int CALIBRATION_ILLUMINANT_1_VALUE_TUNGSTEN = 3;
+        public static final int CALIBRATION_ILLUMINANT_1_VALUE_FLASH = 4;
+        public static final int CALIBRATION_ILLUMINANT_1_VALUE_FINE_WEATHER = 9;
+        public static final int CALIBRATION_ILLUMINANT_1_VALUE_CLOUDY = 10;
+        public static final int CALIBRATION_ILLUMINANT_1_VALUE_SHADE = 11;
+        public static final int CALIBRATION_ILLUMINANT_1_VALUE_DAYLIGHT_FLUORESCENT = 12;
+        public static final int CALIBRATION_ILLUMINANT_1_VALUE_DAY_WHITE_FLUORESCENT = 13;
+        public static final int CALIBRATION_ILLUMINANT_1_VALUE_COOL_WHITE_FLUORESCENT = 14;
+        public static final int CALIBRATION_ILLUMINANT_1_VALUE_WHITE_FLUORESCENT = 15;
+        public static final int CALIBRATION_ILLUMINANT_1_VALUE_STANDARD_LIGHT_A = 17;
+        public static final int CALIBRATION_ILLUMINANT_1_VALUE_STANDARD_LIGHT_B = 18;
+        public static final int CALIBRATION_ILLUMINANT_1_VALUE_STANDARD_LIGHT_C = 19;
+        public static final int CALIBRATION_ILLUMINANT_1_VALUE_D55 = 20;
+        public static final int CALIBRATION_ILLUMINANT_1_VALUE_D65 = 21;
+        public static final int CALIBRATION_ILLUMINANT_1_VALUE_D75 = 22;
+        public static final int CALIBRATION_ILLUMINANT_1_VALUE_D50 = 23;
+        public static final int CALIBRATION_ILLUMINANT_1_VALUE_ISO_STUDIO_TUNGSTEN = 24;
+        public static final int CALIBRATION_ILLUMINANT_1_VALUE_OTHER = 255;
+    },
+    CALIBRATION_ILLUMINANT_2(new TagInfo(
             "Calibration Illuminant 2", 0xc65b, FIELD_TYPE_SHORT, 1,
-            EXIF_DIRECTORY_IFD0);
-    // tag constants public static final int CALIBRATION_ILLUMINANT_2_VALUE_DAYLIGHT = 1;
-    public static final int CALIBRATION_ILLUMINANT_2_VALUE_FLUORESCENT = 2;
-    public static final int CALIBRATION_ILLUMINANT_2_VALUE_TUNGSTEN = 3;
-    public static final int CALIBRATION_ILLUMINANT_2_VALUE_FLASH = 4;
-    public static final int CALIBRATION_ILLUMINANT_2_VALUE_FINE_WEATHER = 9;
-    public static final int CALIBRATION_ILLUMINANT_2_VALUE_CLOUDY = 10;
-    public static final int CALIBRATION_ILLUMINANT_2_VALUE_SHADE = 11;
-    public static final int CALIBRATION_ILLUMINANT_2_VALUE_DAYLIGHT_FLUORESCENT = 12;
-    public static final int CALIBRATION_ILLUMINANT_2_VALUE_DAY_WHITE_FLUORESCENT = 13;
-    public static final int CALIBRATION_ILLUMINANT_2_VALUE_COOL_WHITE_FLUORESCENT = 14;
-    public static final int CALIBRATION_ILLUMINANT_2_VALUE_WHITE_FLUORESCENT = 15;
-    public static final int CALIBRATION_ILLUMINANT_2_VALUE_STANDARD_LIGHT_A = 17;
-    public static final int CALIBRATION_ILLUMINANT_2_VALUE_STANDARD_LIGHT_B = 18;
-    public static final int CALIBRATION_ILLUMINANT_2_VALUE_STANDARD_LIGHT_C = 19;
-    public static final int CALIBRATION_ILLUMINANT_2_VALUE_D55 = 20;
-    public static final int CALIBRATION_ILLUMINANT_2_VALUE_D65 = 21;
-    public static final int CALIBRATION_ILLUMINANT_2_VALUE_D75 = 22;
-    public static final int CALIBRATION_ILLUMINANT_2_VALUE_D50 = 23;
-    public static final int CALIBRATION_ILLUMINANT_2_VALUE_ISO_STUDIO_TUNGSTEN = 24;
-    public static final int CALIBRATION_ILLUMINANT_2_VALUE_OTHER = 255;
-    public static final TagInfo EXIF_TAG_BEST_QUALITY_SCALE = new TagInfo(
+            EXIF_DIRECTORY_IFD0)) {
+        public static final int CALIBRATION_ILLUMINANT_2_VALUE_DAYLIGHT = 1;
+        public static final int CALIBRATION_ILLUMINANT_2_VALUE_FLUORESCENT = 2;
+        public static final int CALIBRATION_ILLUMINANT_2_VALUE_TUNGSTEN = 3;
+        public static final int CALIBRATION_ILLUMINANT_2_VALUE_FLASH = 4;
+        public static final int CALIBRATION_ILLUMINANT_2_VALUE_FINE_WEATHER = 9;
+        public static final int CALIBRATION_ILLUMINANT_2_VALUE_CLOUDY = 10;
+        public static final int CALIBRATION_ILLUMINANT_2_VALUE_SHADE = 11;
+        public static final int CALIBRATION_ILLUMINANT_2_VALUE_DAYLIGHT_FLUORESCENT = 12;
+        public static final int CALIBRATION_ILLUMINANT_2_VALUE_DAY_WHITE_FLUORESCENT = 13;
+        public static final int CALIBRATION_ILLUMINANT_2_VALUE_COOL_WHITE_FLUORESCENT = 14;
+        public static final int CALIBRATION_ILLUMINANT_2_VALUE_WHITE_FLUORESCENT = 15;
+        public static final int CALIBRATION_ILLUMINANT_2_VALUE_STANDARD_LIGHT_A = 17;
+        public static final int CALIBRATION_ILLUMINANT_2_VALUE_STANDARD_LIGHT_B = 18;
+        public static final int CALIBRATION_ILLUMINANT_2_VALUE_STANDARD_LIGHT_C = 19;
+        public static final int CALIBRATION_ILLUMINANT_2_VALUE_D55 = 20;
+        public static final int CALIBRATION_ILLUMINANT_2_VALUE_D65 = 21;
+        public static final int CALIBRATION_ILLUMINANT_2_VALUE_D75 = 22;
+        public static final int CALIBRATION_ILLUMINANT_2_VALUE_D50 = 23;
+        public static final int CALIBRATION_ILLUMINANT_2_VALUE_ISO_STUDIO_TUNGSTEN = 24;
+        public static final int CALIBRATION_ILLUMINANT_2_VALUE_OTHER = 255;
+    },
+    BEST_QUALITY_SCALE(new TagInfo(
             "Best Quality Scale", 0xc65c, FIELD_TYPE_RATIONAL, 1,
-            EXIF_DIRECTORY_SUB_IFD);
-    public static final TagInfo EXIF_TAG_RAW_DATA_UNIQUE_ID = new TagInfo(
+            EXIF_DIRECTORY_SUB_IFD)),
+    RAW_DATA_UNIQUE_ID(new TagInfo(
             "Raw Data Unique ID", 0xc65d, FIELD_TYPE_BYTE, 16,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_ALIAS_LAYER_METADATA = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    ALIAS_LAYER_METADATA(new TagInfo(
             "Alias Layer Metadata", 0xc660, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_ORIGINAL_RAW_FILE_NAME = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    ORIGINAL_RAW_FILE_NAME(new TagInfo(
             "Original Raw File Name", 0xc68b, FIELD_TYPE_ASCII, 1,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_ORIGINAL_RAW_FILE_DATA = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    ORIGINAL_RAW_FILE_DATA(new TagInfo(
             "Original Raw File Data", 0xc68c, FIELD_TYPE_UNDEFINED, 1,
-            EXIF_DIRECTORY_IFD0);
-    public static final TagInfo EXIF_TAG_ACTIVE_AREA = new TagInfo(
-            "Active Area", 0xc68d, FIELD_TYPE_LONG, 4, EXIF_DIRECTORY_SUB_IFD);
-    public static final TagInfo EXIF_TAG_MASKED_AREAS = new TagInfo(
-            "Masked Areas", 0xc68e, FIELD_TYPE_LONG, 4, EXIF_DIRECTORY_SUB_IFD);
-    public static final TagInfo EXIF_TAG_AS_SHOT_ICCPROFILE = new TagInfo(
+            EXIF_DIRECTORY_IFD0)),
+    ACTIVE_AREA(new TagInfo(
+            "Active Area", 0xc68d, FIELD_TYPE_LONG, 4, EXIF_DIRECTORY_SUB_IFD)),
+    MASKED_AREAS(new TagInfo(
+            "Masked Areas", 0xc68e, FIELD_TYPE_LONG, 4, EXIF_DIRECTORY_SUB_IFD)),
+    AS_SHOT_ICCPROFILE(new TagInfo(
             "As Shot ICCProfile", 0xc68f, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_AS_SHOT_PRE_PROFILE_MATRIX = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    AS_SHOT_PRE_PROFILE_MATRIX(new TagInfo(
             "As Shot Pre Profile Matrix", 0xc690,
-            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_CURRENT_ICCPROFILE = new TagInfo(
+            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    CURRENT_ICCPROFILE(new TagInfo(
             "Current ICCProfile", 0xc691, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
-            EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_CURRENT_PRE_PROFILE_MATRIX = new TagInfo(
+            EXIF_DIRECTORY_UNKNOWN)),
+    CURRENT_PRE_PROFILE_MATRIX(new TagInfo(
             "Current Pre Profile Matrix", 0xc692,
-            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfo EXIF_TAG_OFFSET_SCHEMA = new TagInfo(
+            FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN)),
+    OFFSET_SCHEMA(new TagInfo(
             "Offset Schema", 0xea1d, FIELD_TYPE_SLONG, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_OWNER_NAME = new TagInfo("Owner Name",
-            0xfde8, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_SERIAL_NUMBER = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    OWNER_NAME(new TagInfo("Owner Name",
+            0xfde8, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD)),
+    SERIAL_NUMBER(new TagInfo(
             "Serial Number", 0xfde9, FIELD_TYPE_ASCII, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_LENS = new TagInfo("Lens", 0xfdea,
-            FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_RAW_FILE = new TagInfo("Raw File",
-            0xfe4c, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_CONVERTER = new TagInfo("Converter",
-            0xfe4d, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_WHITE_BALANCE_2 = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    LENS(new TagInfo("Lens", 0xfdea,
+            FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD)),
+    RAW_FILE(new TagInfo("Raw File",
+            0xfe4c, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD)),
+    CONVERTER(new TagInfo("Converter",
+            0xfe4d, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD)),
+    WHITE_BALANCE_2(new TagInfo(
             "White Balance", 0xfe4e, FIELD_TYPE_ASCII, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_EXPOSURE = new TagInfo("Exposure",
-            0xfe51, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_SHADOWS = new TagInfo("Shadows",
-            0xfe52, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_BRIGHTNESS = new TagInfo("Brightness",
-            0xfe53, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_CONTRAST_2 = new TagInfo("Contrast",
-            0xfe54, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_SATURATION_2 = new TagInfo(
-            "Saturation", 0xfe55, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_SHARPNESS_2 = new TagInfo("Sharpness",
-            0xfe56, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_SMOOTHNESS = new TagInfo("Smoothness",
-            0xfe57, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD);
-    public static final TagInfo EXIF_TAG_MOIRE_FILTER = new TagInfo(
+            EXIF_DIRECTORY_EXIF_IFD)),
+    EXPOSURE(new TagInfo("Exposure",
+            0xfe51, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD)),
+    SHADOWS(new TagInfo("Shadows",
+            0xfe52, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD)),
+    BRIGHTNESS(new TagInfo("Brightness",
+            0xfe53, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD)),
+    CONTRAST_2(new TagInfo("Contrast",
+            0xfe54, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD)),
+    SATURATION_2(new TagInfo(
+            "Saturation", 0xfe55, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD)),
+    SHARPNESS_2(new TagInfo("Sharpness",
+            0xfe56, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD)),
+    SMOOTHNESS(new TagInfo("Smoothness",
+            0xfe57, FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_EXIF_IFD)),
+    MOIRE_FILTER(new TagInfo(
             "Moire Filter", 0xfe58, FIELD_TYPE_ASCII, 1,
-            EXIF_DIRECTORY_EXIF_IFD);
-
-    public static final TagInfo ALL_EXIF_TAGS[] = {
-            EXIF_TAG_INTEROP_INDEX, EXIF_TAG_INTEROP_VERSION,
-            EXIF_TAG_PROCESSING_SOFTWARE, EXIF_TAG_SUBFILE_TYPE,
-            EXIF_TAG_OLD_SUBFILE_TYPE, EXIF_TAG_IMAGE_WIDTH_IFD0,
-            EXIF_TAG_IMAGE_HEIGHT_IFD0, EXIF_TAG_BITS_PER_SAMPLE,
-            EXIF_TAG_COMPRESSION, EXIF_TAG_PHOTOMETRIC_INTERPRETATION,
-            EXIF_TAG_THRESHOLDING, EXIF_TAG_CELL_WIDTH, EXIF_TAG_CELL_LENGTH,
-            EXIF_TAG_FILL_ORDER, EXIF_TAG_DOCUMENT_NAME,
-            EXIF_TAG_IMAGE_DESCRIPTION, EXIF_TAG_MAKE, EXIF_TAG_MODEL,
-            EXIF_TAG_PREVIEW_IMAGE_START_IFD0,
-            EXIF_TAG_PREVIEW_IMAGE_START_SUB_IFD1,
-            EXIF_TAG_JPG_FROM_RAW_START_SUB_IFD2, EXIF_TAG_ORIENTATION,
-            EXIF_TAG_SAMPLES_PER_PIXEL, EXIF_TAG_ROWS_PER_STRIP,
-            EXIF_TAG_PREVIEW_IMAGE_LENGTH_IFD0,
-            EXIF_TAG_PREVIEW_IMAGE_LENGTH_SUB_IFD1,
-            EXIF_TAG_JPG_FROM_RAW_LENGTH_SUB_IFD2, EXIF_TAG_MIN_SAMPLE_VALUE,
-            EXIF_TAG_MAX_SAMPLE_VALUE, EXIF_TAG_XRESOLUTION,
-            EXIF_TAG_YRESOLUTION, EXIF_TAG_PLANAR_CONFIGURATION,
-            EXIF_TAG_PAGE_NAME, EXIF_TAG_XPOSITION, EXIF_TAG_YPOSITION,
-            EXIF_TAG_FREE_OFFSETS, EXIF_TAG_FREE_BYTE_COUNTS,
-            EXIF_TAG_GRAY_RESPONSE_UNIT, EXIF_TAG_GRAY_RESPONSE_CURVE,
-            EXIF_TAG_T4OPTIONS, EXIF_TAG_T6OPTIONS, EXIF_TAG_RESOLUTION_UNIT,
-            EXIF_TAG_PAGE_NUMBER, EXIF_TAG_COLOR_RESPONSE_UNIT,
-            EXIF_TAG_TRANSFER_FUNCTION, EXIF_TAG_SOFTWARE,
-            EXIF_TAG_MODIFY_DATE, EXIF_TAG_ARTIST, EXIF_TAG_HOST_COMPUTER,
-            EXIF_TAG_PREDICTOR, EXIF_TAG_WHITE_POINT,
-            EXIF_TAG_PRIMARY_CHROMATICITIES, EXIF_TAG_COLOR_MAP,
-            EXIF_TAG_HALFTONE_HINTS, EXIF_TAG_TILE_WIDTH, EXIF_TAG_TILE_LENGTH,
-            EXIF_TAG_TILE_OFFSETS, EXIF_TAG_TILE_BYTE_COUNTS,
-            EXIF_TAG_BAD_FAX_LINES, EXIF_TAG_CLEAN_FAX_DATA,
-            EXIF_TAG_CONSECUTIVE_BAD_FAX_LINES, EXIF_TAG_SUB_IFD,
-            EXIF_TAG_INK_SET, EXIF_TAG_INK_NAMES, EXIF_TAG_NUMBEROF_INKS,
-            EXIF_TAG_DOT_RANGE, EXIF_TAG_TARGET_PRINTER,
-            EXIF_TAG_EXTRA_SAMPLES, EXIF_TAG_SAMPLE_FORMAT,
-            EXIF_TAG_SMIN_SAMPLE_VALUE, EXIF_TAG_SMAX_SAMPLE_VALUE,
-            EXIF_TAG_TRANSFER_RANGE, EXIF_TAG_CLIP_PATH,
-            EXIF_TAG_XCLIP_PATH_UNITS, EXIF_TAG_YCLIP_PATH_UNITS,
-            EXIF_TAG_INDEXED, EXIF_TAG_JPEGTABLES, EXIF_TAG_OPIPROXY,
-            EXIF_TAG_GLOBAL_PARAMETERS_IFD, EXIF_TAG_PROFILE_TYPE,
-            EXIF_TAG_FAX_PROFILE, EXIF_TAG_CODING_METHODS,
-            EXIF_TAG_VERSION_YEAR, EXIF_TAG_MODE_NUMBER, EXIF_TAG_DECODE,
-            EXIF_TAG_DEFAULT_IMAGE_COLOR, EXIF_TAG_JPEGPROC,
-            EXIF_TAG_PREVIEW_IMAGE_START_MAKER_NOTES,
-            EXIF_TAG_JPG_FROM_RAW_START_SUB_IFD,
-            EXIF_TAG_JPG_FROM_RAW_START_IFD2, EXIF_TAG_OTHER_IMAGE_START,
-            EXIF_TAG_PREVIEW_IMAGE_LENGTH_MAKER_NOTES,
-            EXIF_TAG_JPG_FROM_RAW_LENGTH_SUB_IFD,
-            EXIF_TAG_JPG_FROM_RAW_LENGTH_IFD2, EXIF_TAG_OTHER_IMAGE_LENGTH,
-            EXIF_TAG_JPEGRESTART_INTERVAL, EXIF_TAG_JPEGLOSSLESS_PREDICTORS,
-            EXIF_TAG_JPEGPOINT_TRANSFORMS, EXIF_TAG_JPEGQTABLES,
-            EXIF_TAG_JPEGDCTABLES, EXIF_TAG_JPEGACTABLES,
-            EXIF_TAG_YCBCR_COEFFICIENTS, EXIF_TAG_YCBCR_SUB_SAMPLING,
-            EXIF_TAG_YCBCR_POSITIONING, EXIF_TAG_REFERENCE_BLACK_WHITE,
-            EXIF_TAG_STRIP_ROW_COUNTS, EXIF_TAG_APPLICATION_NOTES,
-            EXIF_TAG_RELATED_IMAGE_FILE_FORMAT, EXIF_TAG_RELATED_IMAGE_WIDTH,
-            EXIF_TAG_RELATED_IMAGE_LENGTH, EXIF_TAG_RATING,
-            EXIF_TAG_RATING_PERCENT, EXIF_TAG_IMAGE_ID,
-            EXIF_TAG_WANG_ANNOTATION, EXIF_TAG_MATTEING, EXIF_TAG_DATA_TYPE,
-            EXIF_TAG_IMAGE_DEPTH, EXIF_TAG_TILE_DEPTH, EXIF_TAG_MODEL_2,
-            EXIF_TAG_CFAREPEAT_PATTERN_DIM, EXIF_TAG_CFAPATTERN_2,
-            EXIF_TAG_BATTERY_LEVEL, EXIF_TAG_COPYRIGHT, EXIF_TAG_EXPOSURE_TIME,
-            EXIF_TAG_FNUMBER, EXIF_TAG_MDFILE_TAG, EXIF_TAG_MDSCALE_PIXEL,
-            EXIF_TAG_MDCOLOR_TABLE, EXIF_TAG_MDLAB_NAME,
-            EXIF_TAG_MDSAMPLE_INFO, EXIF_TAG_MDPREP_DATE, EXIF_TAG_MDPREP_TIME,
-            EXIF_TAG_MDFILE_UNITS, EXIF_TAG_PIXEL_SCALE, EXIF_TAG_IPTC_NAA,
-            EXIF_TAG_INTERGRAPH_PACKET_DATA,
-            EXIF_TAG_INTERGRAPH_FLAG_REGISTERS, EXIF_TAG_INTERGRAPH_MATRIX,
-            EXIF_TAG_MODEL_TIE_POINT, EXIF_TAG_SITE, EXIF_TAG_COLOR_SEQUENCE,
-            EXIF_TAG_IT8HEADER, EXIF_TAG_RASTER_PADDING,
-            EXIF_TAG_BITS_PER_RUN_LENGTH,
-            EXIF_TAG_BITS_PER_EXTENDED_RUN_LENGTH, EXIF_TAG_COLOR_TABLE,
-            EXIF_TAG_IMAGE_COLOR_INDICATOR,
-            EXIF_TAG_BACKGROUND_COLOR_INDICATOR, EXIF_TAG_IMAGE_COLOR_VALUE,
-            EXIF_TAG_BACKGROUND_COLOR_VALUE, EXIF_TAG_PIXEL_INTENSITY_RANGE,
-            EXIF_TAG_TRANSPARENCY_INDICATOR, EXIF_TAG_COLOR_CHARACTERIZATION,
-            EXIF_TAG_HCUSAGE, EXIF_TAG_SEMINFO, EXIF_TAG_AFCP_IPTC,
-            EXIF_TAG_MODEL_TRANSFORM, EXIF_TAG_LEAF_DATA,
-            EXIF_TAG_PHOTOSHOP_SETTINGS, EXIF_TAG_EXIF_OFFSET,
-            EXIF_TAG_ICC_PROFILE, EXIF_TAG_IMAGE_LAYER,
-            EXIF_TAG_GEO_TIFF_DIRECTORY, EXIF_TAG_GEO_TIFF_DOUBLE_PARAMS,
-            EXIF_TAG_GEO_TIFF_ASCII_PARAMS, EXIF_TAG_EXPOSURE_PROGRAM,
-            EXIF_TAG_SPECTRAL_SENSITIVITY, EXIF_TAG_GPSINFO, EXIF_TAG_ISO,
-            EXIF_TAG_OPTO__ELECTRIC_CONV_FACTOR, EXIF_TAG_INTERLACE,
-            EXIF_TAG_TIME_ZONE_OFFSET, EXIF_TAG_SELF_TIMER_MODE,
-            EXIF_TAG_FAX_RECV_PARAMS, EXIF_TAG_FAX_SUB_ADDRESS,
-            EXIF_TAG_FAX_RECV_TIME, EXIF_TAG_LEAF_SUB_IFD,
-            EXIF_TAG_EXIF_VERSION, EXIF_TAG_DATE_TIME_ORIGINAL,
-            EXIF_TAG_CREATE_DATE, EXIF_TAG_COMPONENTS_CONFIGURATION,
-            EXIF_TAG_COMPRESSED_BITS_PER_PIXEL, EXIF_TAG_SHUTTER_SPEED_VALUE,
-            EXIF_TAG_APERTURE_VALUE, EXIF_TAG_BRIGHTNESS_VALUE,
-            EXIF_TAG_EXPOSURE_COMPENSATION, EXIF_TAG_MAX_APERTURE_VALUE,
-            EXIF_TAG_SUBJECT_DISTANCE, EXIF_TAG_METERING_MODE,
-            EXIF_TAG_LIGHT_SOURCE, EXIF_TAG_FLASH, EXIF_TAG_FOCAL_LENGTH,
-            EXIF_TAG_FLASH_ENERGY, EXIF_TAG_SPATIAL_FREQUENCY_RESPONSE_1,
-            EXIF_TAG_NOISE_1, EXIF_TAG_FOCAL_PLANE_XRESOLUTION,
-            EXIF_TAG_FOCAL_PLANE_YRESOLUTION,
-            EXIF_TAG_FOCAL_PLANE_RESOLUTION_UNIT,
-            EXIF_TAG_IMAGE_NUMBER_EXIF_IFD,
-            EXIF_TAG_SECURITY_CLASSIFICATION_EXIF_IFD,
-            EXIF_TAG_IMAGE_HISTORY_EXIF_IFD, EXIF_TAG_SUBJECT_LOCATION_1,
-            EXIF_TAG_EXPOSURE_INDEX, EXIF_TAG_TIFF_EPSTANDARD_ID_1,
-            EXIF_TAG_SENSING_METHOD, EXIF_TAG_STO_NITS, EXIF_TAG_SUB_SEC_TIME,
-            EXIF_TAG_SUB_SEC_TIME_ORIGINAL, EXIF_TAG_SUB_SEC_TIME_DIGITIZED,
-            EXIF_TAG_IMAGE_SOURCE_DATA, EXIF_TAG_XPTITLE, EXIF_TAG_XPCOMMENT,
-            EXIF_TAG_XPAUTHOR, EXIF_TAG_XPKEYWORDS, EXIF_TAG_XPSUBJECT,
-            EXIF_TAG_FLASHPIX_VERSION, EXIF_TAG_COLOR_SPACE,
-            EXIF_TAG_EXIF_IMAGE_WIDTH, EXIF_TAG_EXIF_IMAGE_LENGTH,
-            EXIF_TAG_RELATED_SOUND_FILE, EXIF_TAG_INTEROP_OFFSET,
-            EXIF_TAG_FLASH_ENERGY_EXIF_IFD,
-            EXIF_TAG_SPATIAL_FREQUENCY_RESPONSE_2, EXIF_TAG_NOISE_2,
-            EXIF_TAG_FOCAL_PLANE_XRESOLUTION_EXIF_IFD,
-            EXIF_TAG_FOCAL_PLANE_YRESOLUTION_EXIF_IFD,
-            EXIF_TAG_FOCAL_PLANE_RESOLUTION_UNIT_EXIF_IFD,
-            EXIF_TAG_IMAGE_NUMBER, EXIF_TAG_SECURITY_CLASSIFICATION,
-            EXIF_TAG_IMAGE_HISTORY, EXIF_TAG_SUBJECT_LOCATION_2,
-            EXIF_TAG_EXPOSURE_INDEX_EXIF_IFD, EXIF_TAG_TIFF_EPSTANDARD_ID_2,
-            EXIF_TAG_SENSING_METHOD_EXIF_IFD, EXIF_TAG_FILE_SOURCE,
-            EXIF_TAG_SCENE_TYPE, EXIF_TAG_CFAPATTERN, EXIF_TAG_CUSTOM_RENDERED,
-            EXIF_TAG_EXPOSURE_MODE, EXIF_TAG_WHITE_BALANCE_1,
-            EXIF_TAG_DIGITAL_ZOOM_RATIO, EXIF_TAG_FOCAL_LENGTH_IN_35MM_FORMAT,
-            EXIF_TAG_SCENE_CAPTURE_TYPE, EXIF_TAG_GAIN_CONTROL,
-            EXIF_TAG_CONTRAST_1, EXIF_TAG_SATURATION_1, EXIF_TAG_SHARPNESS_1,
-            EXIF_TAG_DEVICE_SETTING_DESCRIPTION,
-            EXIF_TAG_SUBJECT_DISTANCE_RANGE, EXIF_TAG_IMAGE_UNIQUE_ID,
-            EXIF_TAG_GDALMETADATA, EXIF_TAG_GDALNO_DATA, EXIF_TAG_GAMMA,
-            EXIF_TAG_PIXEL_FORMAT, EXIF_TAG_TRANSFOMATION,
-            EXIF_TAG_UNCOMPRESSED, EXIF_TAG_IMAGE_TYPE, EXIF_TAG_IMAGE_WIDTH,
-            EXIF_TAG_IMAGE_HEIGHT, EXIF_TAG_WIDTH_RESOLUTION,
-            EXIF_TAG_HEIGHT_RESOLUTION, EXIF_TAG_IMAGE_OFFSET,
-            EXIF_TAG_IMAGE_BYTE_COUNT, EXIF_TAG_ALPHA_OFFSET,
-            EXIF_TAG_ALPHA_BYTE_COUNT, EXIF_TAG_IMAGE_DATA_DISCARD,
-            EXIF_TAG_ALPHA_DATA_DISCARD, EXIF_TAG_OCE_SCANJOB_DESC,
-            EXIF_TAG_OCE_APPLICATION_SELECTOR, EXIF_TAG_OCE_IDNUMBER,
-            EXIF_TAG_OCE_IMAGE_LOGIC, EXIF_TAG_ANNOTATIONS, EXIF_TAG_PRINT_IM,
-            EXIF_TAG_DNG_VERSION, EXIF_TAG_DNG_BACKWARD_VERSION,
-            EXIF_TAG_UNIQUE_CAMERA_MODEL, EXIF_TAG_LOCALIZED_CAMERA_MODEL,
-            EXIF_TAG_CFAPLANE_COLOR, EXIF_TAG_CFALAYOUT,
-            EXIF_TAG_LINEARIZATION_TABLE, EXIF_TAG_BLACK_LEVEL_REPEAT_DIM,
-            EXIF_TAG_BLACK_LEVEL, EXIF_TAG_BLACK_LEVEL_DELTA_H,
-            EXIF_TAG_BLACK_LEVEL_DELTA_V, EXIF_TAG_WHITE_LEVEL,
-            EXIF_TAG_DEFAULT_SCALE, EXIF_TAG_DEFAULT_CROP_ORIGIN,
-            EXIF_TAG_DEFAULT_CROP_SIZE, EXIF_TAG_COLOR_MATRIX_1,
-            EXIF_TAG_COLOR_MATRIX_2, EXIF_TAG_CAMERA_CALIBRATION_1,
-            EXIF_TAG_CAMERA_CALIBRATION_2, EXIF_TAG_REDUCTION_MATRIX_1,
-            EXIF_TAG_REDUCTION_MATRIX_2, EXIF_TAG_ANALOG_BALANCE,
-            EXIF_TAG_AS_SHOT_NEUTRAL, EXIF_TAG_AS_SHOT_WHITE_XY,
-            EXIF_TAG_BASELINE_EXPOSURE, EXIF_TAG_BASELINE_NOISE,
-            EXIF_TAG_BASELINE_SHARPNESS, EXIF_TAG_BAYER_GREEN_SPLIT,
-            EXIF_TAG_LINEAR_RESPONSE_LIMIT, EXIF_TAG_CAMERA_SERIAL_NUMBER,
-            EXIF_TAG_DNG_LENS_INFO, EXIF_TAG_CHROMA_BLUR_RADIUS,
-            EXIF_TAG_ANTI_ALIAS_STRENGTH, EXIF_TAG_SHADOW_SCALE,
-            EXIF_TAG_DNG_ADOBE_DATA, EXIF_TAG_DNG_PENTAX_DATA,
-            EXIF_TAG_DNG_PRIVATE_DATA, EXIF_TAG_MAKER_NOTE_SAFETY,
-            EXIF_TAG_CALIBRATION_ILLUMINANT_1,
-            EXIF_TAG_CALIBRATION_ILLUMINANT_2, EXIF_TAG_BEST_QUALITY_SCALE,
-            EXIF_TAG_RAW_DATA_UNIQUE_ID, EXIF_TAG_ALIAS_LAYER_METADATA,
-            EXIF_TAG_ORIGINAL_RAW_FILE_NAME, EXIF_TAG_ORIGINAL_RAW_FILE_DATA,
-            EXIF_TAG_ACTIVE_AREA, EXIF_TAG_MASKED_AREAS,
-            EXIF_TAG_AS_SHOT_ICCPROFILE, EXIF_TAG_AS_SHOT_PRE_PROFILE_MATRIX,
-            EXIF_TAG_CURRENT_ICCPROFILE, EXIF_TAG_CURRENT_PRE_PROFILE_MATRIX,
-            EXIF_TAG_OFFSET_SCHEMA, EXIF_TAG_OWNER_NAME,
-            EXIF_TAG_SERIAL_NUMBER, EXIF_TAG_LENS, EXIF_TAG_RAW_FILE,
-            EXIF_TAG_CONVERTER, EXIF_TAG_WHITE_BALANCE_2, EXIF_TAG_EXPOSURE,
-            EXIF_TAG_SHADOWS, EXIF_TAG_BRIGHTNESS, EXIF_TAG_CONTRAST_2,
-            EXIF_TAG_SATURATION_2, EXIF_TAG_SHARPNESS_2, EXIF_TAG_SMOOTHNESS,
-            EXIF_TAG_MOIRE_FILTER,
-
-            EXIF_TAG_USER_COMMENT, //
-
-            EXIF_TAG_MAKER_NOTE, //
-    };
+            EXIF_DIRECTORY_EXIF_IFD));
+    
+    public final TagInfo tagInfo;
+    
+    ExifTagConstants(TagInfo tagInfo) {
+        this.tagInfo = tagInfo;
+    }
+    
+    public TagInfo getTagInfo() {
+        return tagInfo;
+    }
+    
+    public static final List<TagInfo> ALL_EXIF_TAGS = Collections.unmodifiableList(
+            TagConstantsUtils.mergeTagLists(values()));
 }
diff --git a/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/GpsTagConstants.java b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/GpsTagConstants.java
index 6345d7f..f17b196 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/GpsTagConstants.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/GpsTagConstants.java
@@ -16,10 +16,14 @@
  */
 package org.apache.commons.sanselan.formats.tiff.constants;
 
+import java.util.Collections;
+import java.util.List;
+
 public enum GpsTagConstants
         implements
             TiffDirectoryConstants,
-            TiffFieldTypeConstants
+            TiffFieldTypeConstants,
+            TagHolder
 {
     GPS_VERSION_ID(new TagInfo(
             "GPS Version ID", 0x0000, FIELD_TYPE_DESCRIPTION_BYTE, 4,
@@ -208,12 +212,10 @@
 
     // ************************************************************
 
-    public static final TagInfo[] ALL_GPS_TAGS;
-    static {
-        GpsTagConstants[] gpsTagConstants = values();
-        ALL_GPS_TAGS = new TagInfo[gpsTagConstants.length];
-        for (int i = 0; i < gpsTagConstants.length; i++) {
-            ALL_GPS_TAGS[i] = gpsTagConstants[i].tagInfo;
-        }
+    public TagInfo getTagInfo() {
+        return tagInfo;
     }
+    
+    public static final List<TagInfo> ALL_GPS_TAGS = Collections.unmodifiableList(
+            TagConstantsUtils.mergeTagLists(values()));
 }
diff --git a/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/TagConstantsUtils.java b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/TagConstantsUtils.java
index 1934eaa..1ee7937 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/TagConstantsUtils.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/TagConstantsUtils.java
@@ -16,22 +16,25 @@
  */
 package org.apache.commons.sanselan.formats.tiff.constants;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class TagConstantsUtils implements TiffDirectoryConstants
 {
 
-    public static TagInfo[] mergeTagLists(TagInfo lists[][])
+    public static List<TagInfo> mergeTagLists(TagHolder[]... tagHolders)
     {
         int count = 0;
-        for (int i = 0; i < lists.length; i++)
-            count += lists[i].length;
+        for (int i = 0; i < tagHolders.length; i++) {
+            count += tagHolders[i].length;
+        }
 
-        TagInfo result[] = new TagInfo[count];
+        ArrayList<TagInfo> result = new ArrayList<TagInfo>(count);
 
-        int index = 0;
-        for (int i = 0; i < lists.length; i++)
-        {
-            System.arraycopy(lists[i], 0, result, index, lists[i].length);
-            index += lists[i].length;
+        for (int i = 0; i < tagHolders.length; i++) {
+            for (int j = 0; j < tagHolders[i].length; j++) {
+                result.add(tagHolders[i][j].getTagInfo());
+            }
         }
 
         return result;
diff --git a/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/TiffTagConstants.java b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/TiffTagConstants.java
index 2798bf0..6542341 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/TiffTagConstants.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/TiffTagConstants.java
@@ -16,7 +16,10 @@
  */
 package org.apache.commons.sanselan.formats.tiff.constants;
 
-public enum TiffTagConstants implements TiffFieldTypeConstants, TiffDirectoryConstants
+import java.util.Collections;
+import java.util.List;
+
+public enum TiffTagConstants implements TiffFieldTypeConstants, TiffDirectoryConstants, TagHolder
 {
 
     NEW_SUBFILE_TYPE(new TagInfo(
@@ -311,12 +314,10 @@
         this.tagInfo = tagInfo;
     }
     
-    public static final TagInfo[] ALL_TIFF_TAGS;
-    static {
-        TiffTagConstants[] tiffTagConstants = values();
-        ALL_TIFF_TAGS = new TagInfo[tiffTagConstants.length];
-        for (int i = 0; i < tiffTagConstants.length; i++) {
-            ALL_TIFF_TAGS[i] = tiffTagConstants[i].tagInfo;
-        }
+    public TagInfo getTagInfo() {
+        return tagInfo;
     }
+    
+    public static final List<TagInfo> ALL_TIFF_TAGS = Collections.unmodifiableList(
+            TagConstantsUtils.mergeTagLists(values()));
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/commons/sanselan/formats/tiff/write/TiffImageWriterBase.java b/src/main/java/org/apache/commons/sanselan/formats/tiff/write/TiffImageWriterBase.java
index a60149e..4aad219 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/tiff/write/TiffImageWriterBase.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/tiff/write/TiffImageWriterBase.java
@@ -26,7 +26,6 @@
 import java.util.List;
 import java.util.Map;
 
-import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.ImageWriteException;
 import org.apache.commons.sanselan.common.BinaryConstants;
 import org.apache.commons.sanselan.common.BinaryOutputStream;
@@ -35,6 +34,7 @@
 import org.apache.commons.sanselan.common.mylzw.MyLzwCompressor;
 import org.apache.commons.sanselan.formats.tiff.TiffElement;
 import org.apache.commons.sanselan.formats.tiff.TiffImageData;
+import org.apache.commons.sanselan.formats.tiff.constants.ExifTagConstants;
 import org.apache.commons.sanselan.formats.tiff.constants.TiffConstants;
 import org.apache.commons.sanselan.formats.tiff.constants.TiffTagConstants;
 
@@ -140,19 +140,19 @@
                             + ") appears twice in directory.");
                 fieldTags.add(fieldKey);
 
-                if (field.tag == EXIF_TAG_EXIF_OFFSET.tag)
+                if (field.tag == ExifTagConstants.EXIF_OFFSET.tagInfo.tag)
                 {
                     if (exifDirectoryOffsetField != null)
                         throw new ImageWriteException(
                                 "More than one Exif directory offset field.");
                     exifDirectoryOffsetField = field;
-                } else if (field.tag == EXIF_TAG_INTEROP_OFFSET.tag)
+                } else if (field.tag == ExifTagConstants.INTEROP_OFFSET.tagInfo.tag)
                 {
                     if (interoperabilityDirectoryOffsetField != null)
                         throw new ImageWriteException(
                                 "More than one Interoperability directory offset field.");
                     interoperabilityDirectoryOffsetField = field;
-                } else if (field.tag == EXIF_TAG_GPSINFO.tag)
+                } else if (field.tag == ExifTagConstants.GPSINFO.tagInfo.tag)
                 {
                     if (gpsDirectoryOffsetField != null)
                         throw new ImageWriteException(
@@ -208,7 +208,7 @@
             if (interoperabilityDirectoryOffsetField == null)
             {
                 interoperabilityDirectoryOffsetField = TiffOutputField
-                        .createOffsetField(EXIF_TAG_INTEROP_OFFSET, byteOrder);
+                        .createOffsetField(ExifTagConstants.INTEROP_OFFSET.tagInfo, byteOrder);
                 exifDirectory.add(interoperabilityDirectoryOffsetField);
             }
 
@@ -227,7 +227,7 @@
             if (exifDirectoryOffsetField == null)
             {
                 exifDirectoryOffsetField = TiffOutputField.createOffsetField(
-                        EXIF_TAG_EXIF_OFFSET, byteOrder);
+                        ExifTagConstants.EXIF_OFFSET.tagInfo, byteOrder);
                 rootDirectory.add(exifDirectoryOffsetField);
             }
 
@@ -244,7 +244,7 @@
             if (gpsDirectoryOffsetField == null)
             {
                 gpsDirectoryOffsetField = TiffOutputField.createOffsetField(
-                        EXIF_TAG_GPSINFO, byteOrder);
+                        ExifTagConstants.GPSINFO.tagInfo, byteOrder);
                 rootDirectory.add(gpsDirectoryOffsetField);
             }
 
diff --git a/src/main/java/org/apache/commons/sanselan/formats/tiff/write/TiffImageWriterLossless.java b/src/main/java/org/apache/commons/sanselan/formats/tiff/write/TiffImageWriterLossless.java
index 44fdad7..ca29587 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/tiff/write/TiffImageWriterLossless.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/tiff/write/TiffImageWriterLossless.java
@@ -38,6 +38,7 @@
 import org.apache.commons.sanselan.formats.tiff.TiffField;
 import org.apache.commons.sanselan.formats.tiff.TiffImageData;
 import org.apache.commons.sanselan.formats.tiff.TiffReader;
+import org.apache.commons.sanselan.formats.tiff.constants.ExifTagConstants;
 import org.apache.commons.sanselan.util.Debug;
 
 public class TiffImageWriterLossless extends TiffImageWriterBase
@@ -142,7 +143,7 @@
                 for (int f = 0; f < fields.size(); f++)
                 {
                     TiffField field = fields.get(f);
-                    if (field.tag == EXIF_TAG_MAKER_NOTE.tag) {
+                    if (field.tag == ExifTagConstants.MAKER_NOTE.tagInfo.tag) {
                         // Some maker notes reference values stored
                         // inside the maker note itself
                         // using addresses relative to the beginning
diff --git a/src/test/java/org/apache/commons/sanselan/examples/MetadataExample.java b/src/test/java/org/apache/commons/sanselan/examples/MetadataExample.java
index 3aa2f69..cd0088e 100644
--- a/src/test/java/org/apache/commons/sanselan/examples/MetadataExample.java
+++ b/src/test/java/org/apache/commons/sanselan/examples/MetadataExample.java
@@ -27,6 +27,7 @@
 import org.apache.commons.sanselan.formats.jpeg.JpegImageMetadata;
 import org.apache.commons.sanselan.formats.tiff.TiffField;
 import org.apache.commons.sanselan.formats.tiff.TiffImageMetadata;
+import org.apache.commons.sanselan.formats.tiff.constants.ExifTagConstants;
 import org.apache.commons.sanselan.formats.tiff.constants.GpsTagConstants;
 import org.apache.commons.sanselan.formats.tiff.constants.TagInfo;
 import org.apache.commons.sanselan.formats.tiff.constants.TiffConstants;
@@ -60,13 +61,13 @@
             printTagValue(jpegMetadata, TiffTagConstants.XRESOLUTION.tagInfo);
             printTagValue(jpegMetadata, TiffTagConstants.DATE_TIME.tagInfo);
             printTagValue(jpegMetadata,
-                    TiffConstants.EXIF_TAG_DATE_TIME_ORIGINAL);
-            printTagValue(jpegMetadata, TiffConstants.EXIF_TAG_CREATE_DATE);
-            printTagValue(jpegMetadata, TiffConstants.EXIF_TAG_ISO);
+                    ExifTagConstants.DATE_TIME_ORIGINAL.tagInfo);
+            printTagValue(jpegMetadata, ExifTagConstants.CREATE_DATE.tagInfo);
+            printTagValue(jpegMetadata, ExifTagConstants.ISO.tagInfo);
             printTagValue(jpegMetadata,
-                    TiffConstants.EXIF_TAG_SHUTTER_SPEED_VALUE);
-            printTagValue(jpegMetadata, TiffConstants.EXIF_TAG_APERTURE_VALUE);
-            printTagValue(jpegMetadata, TiffConstants.EXIF_TAG_BRIGHTNESS_VALUE);
+                    ExifTagConstants.SHUTTER_SPEED_VALUE.tagInfo);
+            printTagValue(jpegMetadata, ExifTagConstants.APERTURE_VALUE.tagInfo);
+            printTagValue(jpegMetadata, ExifTagConstants.BRIGHTNESS_VALUE.tagInfo);
             printTagValue(jpegMetadata, GpsTagConstants.GPS_LATITUDE_REF.tagInfo);
             printTagValue(jpegMetadata, GpsTagConstants.GPS_LATITUDE.tagInfo);
             printTagValue(jpegMetadata, GpsTagConstants.GPS_LONGITUDE_REF.tagInfo);
diff --git a/src/test/java/org/apache/commons/sanselan/examples/WriteExifMetadataExample.java b/src/test/java/org/apache/commons/sanselan/examples/WriteExifMetadataExample.java
index a79bece..a45d32a 100644
--- a/src/test/java/org/apache/commons/sanselan/examples/WriteExifMetadataExample.java
+++ b/src/test/java/org/apache/commons/sanselan/examples/WriteExifMetadataExample.java
@@ -29,6 +29,7 @@
 import org.apache.commons.sanselan.formats.jpeg.JpegImageMetadata;
 import org.apache.commons.sanselan.formats.jpeg.exif.ExifRewriter;
 import org.apache.commons.sanselan.formats.tiff.TiffImageMetadata;
+import org.apache.commons.sanselan.formats.tiff.constants.ExifTagConstants;
 import org.apache.commons.sanselan.formats.tiff.constants.TiffConstants;
 import org.apache.commons.sanselan.formats.tiff.write.TiffOutputDirectory;
 import org.apache.commons.sanselan.formats.tiff.write.TiffOutputField;
@@ -125,14 +126,14 @@
                 // org.apache.commons.sanselan.formats.tiff.constants.AllTagConstants
                 //
                 TiffOutputField aperture = TiffOutputField.create(
-                        TiffConstants.EXIF_TAG_APERTURE_VALUE,
+                        ExifTagConstants.APERTURE_VALUE.tagInfo,
                         outputSet.byteOrder, new Double(0.3));
                 TiffOutputDirectory exifDirectory = outputSet
                         .getOrCreateExifDirectory();
                 // make sure to remove old value if present (this method will
                 // not fail if the tag does not exist).
                 exifDirectory
-                        .removeField(TiffConstants.EXIF_TAG_APERTURE_VALUE);
+                        .removeField(ExifTagConstants.APERTURE_VALUE.tagInfo);
                 exifDirectory.add(aperture);
             }
 
@@ -231,7 +232,7 @@
                 // Note that this approach is crude: Exif data is organized in
                 // directories. The same tag/field may appear in more than one
                 // directory, and have different meanings in each.
-                outputSet.removeField(TiffConstants.EXIF_TAG_APERTURE_VALUE);
+                outputSet.removeField(ExifTagConstants.APERTURE_VALUE.tagInfo);
 
                 // Option 2: precision
                 // We know the exact directory the tag should appear in, in this
@@ -245,7 +246,7 @@
                         .getExifDirectory();
                 if (null != exifDirectory)
                     exifDirectory
-                            .removeField(TiffConstants.EXIF_TAG_APERTURE_VALUE);
+                            .removeField(ExifTagConstants.APERTURE_VALUE.tagInfo);
             }
 
             os = new FileOutputStream(dst);
diff --git a/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/AsciiFieldTest.java b/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/AsciiFieldTest.java
index cc9dc2a..2402fc6 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/AsciiFieldTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/AsciiFieldTest.java
@@ -30,6 +30,7 @@
 import org.apache.commons.sanselan.formats.tiff.TiffField;
 import org.apache.commons.sanselan.formats.tiff.TiffImageMetadata;
 import org.apache.commons.sanselan.formats.tiff.constants.AllTagConstants;
+import org.apache.commons.sanselan.formats.tiff.constants.ExifTagConstants;
 
 public class AsciiFieldTest extends ExifBaseTest implements AllTagConstants {
 
@@ -58,9 +59,9 @@
         }
 
         Map expectedFieldValues = new Hashtable();
-        expectedFieldValues.put(new Integer(EXIF_TAG_MAKE.tag), "Canon");
-        expectedFieldValues.put(new Integer(EXIF_TAG_MODEL.tag), "Canon PowerShot SD750");
-        expectedFieldValues.put(new Integer(EXIF_TAG_MODIFY_DATE.tag), "2007:12:25 13:34:39");
+        expectedFieldValues.put(new Integer(ExifTagConstants.MAKE.tagInfo.tag), "Canon");
+        expectedFieldValues.put(new Integer(ExifTagConstants.MODEL.tagInfo.tag), "Canon PowerShot SD750");
+        expectedFieldValues.put(new Integer(ExifTagConstants.MODIFY_DATE.tagInfo.tag), "2007:12:25 13:34:39");
         Iterator expectedTags = expectedFieldValues.keySet().iterator();
         while (expectedTags.hasNext()) {
             Integer tag = (Integer) expectedTags.next();
diff --git a/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/ExifRewriteTest.java b/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/ExifRewriteTest.java
index 6dd307b..f1bed00 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/ExifRewriteTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/ExifRewriteTest.java
@@ -40,6 +40,7 @@
 import org.apache.commons.sanselan.formats.tiff.TiffField;
 import org.apache.commons.sanselan.formats.tiff.TiffImageMetadata;
 import org.apache.commons.sanselan.formats.tiff.constants.AllTagConstants;
+import org.apache.commons.sanselan.formats.tiff.constants.TiffFieldTypeConstants;
 import org.apache.commons.sanselan.formats.tiff.write.TiffOutputSet;
 import org.apache.commons.sanselan.util.Debug;
 import org.apache.commons.sanselan.util.IoUtils;
@@ -428,7 +429,7 @@
                     continue;
                 }
 
-                if (oldField.fieldType == FIELD_TYPE_ASCII)
+                if (oldField.fieldType == TiffFieldTypeConstants.FIELD_TYPE_ASCII)
                 {
                     // Sanselan currently doesn't correctly rewrite
                     // strings if any byte had the highest bit set,
diff --git a/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/MakerNoteFieldTest.java b/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/MakerNoteFieldTest.java
index 0d40e54..09b78aa 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/MakerNoteFieldTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/MakerNoteFieldTest.java
@@ -23,6 +23,7 @@
 import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.ImageWriteException;
 import org.apache.commons.sanselan.formats.tiff.TiffField;
+import org.apache.commons.sanselan.formats.tiff.constants.ExifTagConstants;
 import org.apache.commons.sanselan.util.Debug;
 
 public class MakerNoteFieldTest extends SpecificExifTagTest
@@ -35,7 +36,7 @@
     protected void checkField(File imageFile, TiffField field)
             throws IOException, ImageReadException, ImageWriteException
     {
-        if (field.tag != EXIF_TAG_MAKER_NOTE.tag)
+        if (field.tag != ExifTagConstants.MAKER_NOTE.tagInfo.tag)
         {
             //            if (field.tag == EXIF_TAG_EXIF_OFFSET.tag)
             //                ;
diff --git a/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/TextFieldTest.java b/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/TextFieldTest.java
index 547afe2..b99a5f2 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/TextFieldTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/TextFieldTest.java
@@ -23,7 +23,9 @@
 import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.ImageWriteException;
 import org.apache.commons.sanselan.formats.tiff.TiffField;
+import org.apache.commons.sanselan.formats.tiff.constants.ExifTagConstants;
 import org.apache.commons.sanselan.formats.tiff.constants.GpsTagConstants;
+import org.apache.commons.sanselan.formats.tiff.constants.TiffDirectoryConstants;
 import org.apache.commons.sanselan.util.Debug;
 
 public class TextFieldTest extends SpecificExifTagTest
@@ -36,13 +38,13 @@
     protected void checkField(File imageFile, TiffField field)
             throws IOException, ImageReadException, ImageWriteException
     {
-        if (field.tag == EXIF_TAG_USER_COMMENT.tag)
+        if (field.tag == ExifTagConstants.USER_COMMENT.tagInfo.tag)
         { /* do nothing */ }
         else if (field.tag == GpsTagConstants.GPS_PROCESSING_METHOD.tagInfo.tag
-                && field.directoryType == EXIF_DIRECTORY_GPS.directoryType)
+                && field.directoryType == TiffDirectoryConstants.EXIF_DIRECTORY_GPS.directoryType)
         { /* do nothing */ }
         else if (field.tag == GpsTagConstants.GPS_AREA_INFORMATION.tagInfo.tag
-                && field.directoryType == EXIF_DIRECTORY_GPS.directoryType)
+                && field.directoryType == TiffDirectoryConstants.EXIF_DIRECTORY_GPS.directoryType)
         { /* do nothing */ }
         else
             return;
diff --git a/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/WriteTagsTest.java b/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/WriteTagsTest.java
index 1ee9388..604eca0 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/WriteTagsTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/WriteTagsTest.java
@@ -19,7 +19,7 @@
 
 import org.apache.commons.sanselan.SanselanConstants;
 import org.apache.commons.sanselan.common.BinaryConstants;
-import org.apache.commons.sanselan.formats.tiff.constants.TiffConstants;
+import org.apache.commons.sanselan.formats.tiff.constants.ExifTagConstants;
 import org.apache.commons.sanselan.formats.tiff.constants.TiffTagConstants;
 import org.apache.commons.sanselan.formats.tiff.write.TiffOutputField;
 
@@ -29,7 +29,7 @@
     public void test2SHORTS() throws Exception
     {
         TiffOutputField.create(
-            TiffConstants.EXIF_TAG_PAGE_NUMBER,
+            ExifTagConstants.PAGE_NUMBER.tagInfo,
             BinaryConstants.BYTE_ORDER_LITTLE_ENDIAN,
             new Integer[] { new Integer(1), new Integer(10) } );
     }