diff --git a/src/main/java/org/apache/commons/imaging/ImageFormat.java b/src/main/java/org/apache/commons/imaging/ImageFormat.java
new file mode 100644
index 0000000..0e0c322
--- /dev/null
+++ b/src/main/java/org/apache/commons/imaging/ImageFormat.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.imaging;
+
+/**
+ * Simple image format interface.
+ */
+public interface ImageFormat {
+
+    /**
+     * Get the name of this {@link ImageFormat}.
+     * 
+     * @return String name
+     */
+    String getName();
+
+    /**
+     * Get the file extension associated with this {@link ImageFormat}.
+     * 
+     * @return String extension
+     */
+    String getExtension();
+
+}
diff --git a/src/main/java/org/apache/commons/imaging/ImageFormats.java b/src/main/java/org/apache/commons/imaging/ImageFormats.java
index 3eb2c92..013de00 100644
--- a/src/main/java/org/apache/commons/imaging/ImageFormats.java
+++ b/src/main/java/org/apache/commons/imaging/ImageFormats.java
@@ -20,7 +20,7 @@
  * Enum of known image formats.
  */
 //@formatter:off
-public enum ImageFormats {
+public enum ImageFormats implements ImageFormat {
     UNKNOWN,
     BMP,
     DCX,
@@ -45,57 +45,63 @@
     XPM;
 //@formatter:on
 
+    /**
+     * {@inheritDoc}
+     */
     public String getName() {
         return name();
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public String getExtension() {
         return name();
     }
 
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_UNKNOWN = UNKNOWN;
+    public static final ImageFormat IMAGE_FORMAT_UNKNOWN = UNKNOWN;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_BMP = BMP;
+    public static final ImageFormat IMAGE_FORMAT_BMP = BMP;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_DCX = DCX;
+    public static final ImageFormat IMAGE_FORMAT_DCX = DCX;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_GIF = GIF;
+    public static final ImageFormat IMAGE_FORMAT_GIF = GIF;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_ICNS = ICNS;
+    public static final ImageFormat IMAGE_FORMAT_ICNS = ICNS;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_ICO = ICO;
+    public static final ImageFormat IMAGE_FORMAT_ICO = ICO;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_JBIG2 = JBIG2;
+    public static final ImageFormat IMAGE_FORMAT_JBIG2 = JBIG2;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_JPEG = JPEG;
+    public static final ImageFormat IMAGE_FORMAT_JPEG = JPEG;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_PAM = PAM;
+    public static final ImageFormat IMAGE_FORMAT_PAM = PAM;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_PSD = PSD;
+    public static final ImageFormat IMAGE_FORMAT_PSD = PSD;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_PBM = PBM;
+    public static final ImageFormat IMAGE_FORMAT_PBM = PBM;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_PGM = PGM;
+    public static final ImageFormat IMAGE_FORMAT_PGM = PGM;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_PNM = PNM;
+    public static final ImageFormat IMAGE_FORMAT_PNM = PNM;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_PPM = PPM;
+    public static final ImageFormat IMAGE_FORMAT_PPM = PPM;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_PCX = PCX;
+    public static final ImageFormat IMAGE_FORMAT_PCX = PCX;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_PNG = PNG;
+    public static final ImageFormat IMAGE_FORMAT_PNG = PNG;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_RGBE = RGBE;
+    public static final ImageFormat IMAGE_FORMAT_RGBE = RGBE;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_TGA = TGA;
+    public static final ImageFormat IMAGE_FORMAT_TGA = TGA;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_TIFF = TIFF;
+    public static final ImageFormat IMAGE_FORMAT_TIFF = TIFF;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_WBMP = WBMP;
+    public static final ImageFormat IMAGE_FORMAT_WBMP = WBMP;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_XBM = XBM;
+    public static final ImageFormat IMAGE_FORMAT_XBM = XBM;
     @Deprecated
-    public static final ImageFormats IMAGE_FORMAT_XPM = XPM;
+    public static final ImageFormat IMAGE_FORMAT_XPM = XPM;
 
 }
diff --git a/src/main/java/org/apache/commons/imaging/ImageInfo.java b/src/main/java/org/apache/commons/imaging/ImageInfo.java
index 647cd3c..82b8966 100644
--- a/src/main/java/org/apache/commons/imaging/ImageInfo.java
+++ b/src/main/java/org/apache/commons/imaging/ImageInfo.java
@@ -31,7 +31,7 @@
     private final int bitsPerPixel;
     private final List<String> comments;
 
-    private final ImageFormats format;
+    private final ImageFormat format;
     private final String formatName;
     private final int height;
     private final String mimeType;
@@ -74,7 +74,7 @@
     private final String compressionAlgorithm;
 
     public ImageInfo(final String formatDetails, final int bitsPerPixel,
-            final List<String> comments, final ImageFormats format, final String formatName,
+            final List<String> comments, final ImageFormat format, final String formatName,
             final int height, final String mimeType, final int numberOfImages,
             final int physicalHeightDpi, final float physicalHeightInch,
             final int physicalWidthDpi, final float physicalWidthInch, final int width,
@@ -129,7 +129,7 @@
      * @return A constant defined in ImageFormat.
      * @see ImageFormats
      */
-    public ImageFormats getFormat() {
+    public ImageFormat getFormat() {
         return format;
     }
 
diff --git a/src/main/java/org/apache/commons/imaging/ImageParser.java b/src/main/java/org/apache/commons/imaging/ImageParser.java
index 6e13e6d..334d837 100644
--- a/src/main/java/org/apache/commons/imaging/ImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/ImageParser.java
@@ -906,7 +906,7 @@
      * accepted types
      * @return A valid array of one or more elements.
      */
-    protected abstract ImageFormats[] getAcceptedTypes();
+    protected abstract ImageFormat[] getAcceptedTypes();
 
     /**
      * Indicates whether the ImageParser implementation can accept
@@ -914,10 +914,10 @@
      * @param type An instance of ImageFormat. 
      * @return If the parser can accept the format, true; otherwise, false.
      */
-    public boolean canAcceptType(final ImageFormats type) {
-        final ImageFormats types[] = getAcceptedTypes();
+    public boolean canAcceptType(final ImageFormat type) {
+        final ImageFormat types[] = getAcceptedTypes();
 
-        for (final ImageFormats type2 : types) {
+        for (final ImageFormat type2 : types) {
             if (type2.equals(type)) {
                 return true;
             }
diff --git a/src/main/java/org/apache/commons/imaging/Imaging.java b/src/main/java/org/apache/commons/imaging/Imaging.java
index 6b49d3a..5400c10 100644
--- a/src/main/java/org/apache/commons/imaging/Imaging.java
+++ b/src/main/java/org/apache/commons/imaging/Imaging.java
@@ -147,7 +147,7 @@
      *         ImageFormat.IMAGE_FORMAT_UNKNOWN if the image type cannot be
      *         determined.
      */
-    public static ImageFormats guessFormat(final byte bytes[])
+    public static ImageFormat guessFormat(final byte bytes[])
             throws ImageReadException, IOException {
         return guessFormat(new ByteSourceArray(bytes));
     }
@@ -167,7 +167,7 @@
      *         ImageFormat.IMAGE_FORMAT_UNKNOWN if the image type cannot be
      *         determined.
      */
-    public static ImageFormats guessFormat(final File file) throws ImageReadException,
+    public static ImageFormat guessFormat(final File file) throws ImageReadException,
             IOException {
         return guessFormat(new ByteSourceFile(file));
     }
@@ -219,7 +219,7 @@
      * attempt to read the image data
      * @throws IOException in the event of an unrecoverable I/O condition.
      */
-    public static ImageFormats guessFormat(final ByteSource byteSource)
+    public static ImageFormat guessFormat(final ByteSource byteSource)
             throws ImageReadException, IOException {
         
         if (byteSource==null) {
@@ -707,7 +707,7 @@
 
     private static ImageParser getImageParser(final ByteSource byteSource)
             throws ImageReadException, IOException {
-        final ImageFormats format = guessFormat(byteSource);
+        final ImageFormat format = guessFormat(byteSource);
         if (!format.equals(ImageFormats.UNKNOWN)) {
 
             final ImageParser imageParsers[] = ImageParser.getAllImageParsers();
@@ -1403,7 +1403,7 @@
      * @see ImagingConstants
      */    
     public static void writeImage(final BufferedImage src, final File file,
-            final ImageFormats format, final Map<String,Object> params) throws ImageWriteException,
+            final ImageFormat format, final Map<String,Object> params) throws ImageWriteException,
             IOException {
         OutputStream os = null;
         boolean canThrow = false;
@@ -1443,7 +1443,7 @@
      * @see ImagingConstants
      */   
     public static byte[] writeImageToBytes(final BufferedImage src,
-            final ImageFormats format, final Map<String,Object> params) throws ImageWriteException,
+            final ImageFormat format, final Map<String,Object> params) throws ImageWriteException,
             IOException {
         final ByteArrayOutputStream os = new ByteArrayOutputStream();
 
@@ -1477,7 +1477,7 @@
      * @see ImagingConstants
      */    
     public static void writeImage(final BufferedImage src, final OutputStream os,
-            final ImageFormats format, Map<String,Object> params) throws ImageWriteException,
+            final ImageFormat format, Map<String,Object> params) throws ImageWriteException,
             IOException {
         final ImageParser imageParsers[] = ImageParser.getAllImageParsers();
 
diff --git a/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImageParser.java b/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImageParser.java
index 7185a8f..47d6577 100644
--- a/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImageParser.java
@@ -30,6 +30,7 @@
 import java.util.Map;
 
 import org.apache.commons.imaging.FormatCompliance;
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageParser;
@@ -79,8 +80,8 @@
     }
 
     @Override
-    protected ImageFormats[] getAcceptedTypes() {
-        return new ImageFormats[] { ImageFormats.BMP, //
+    protected ImageFormat[] getAcceptedTypes() {
+        return new ImageFormat[] { ImageFormats.BMP, //
         };
     }
 
@@ -632,7 +633,7 @@
         // TODO: comments...
 
         final int bitsPerPixel = bhi.bitsPerPixel;
-        final ImageFormats format = ImageFormats.BMP;
+        final ImageFormat format = ImageFormats.BMP;
         final String name = "BMP Windows Bitmap";
         final String mimeType = "image/x-ms-bmp";
         // we ought to count images, but don't yet.
diff --git a/src/main/java/org/apache/commons/imaging/formats/dcx/DcxImageParser.java b/src/main/java/org/apache/commons/imaging/formats/dcx/DcxImageParser.java
index a7c5655..1c57c47 100644
--- a/src/main/java/org/apache/commons/imaging/formats/dcx/DcxImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/dcx/DcxImageParser.java
@@ -28,6 +28,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageParser;
@@ -69,8 +70,8 @@
     }
 
     @Override
-    protected ImageFormats[] getAcceptedTypes() {
-        return new ImageFormats[] {
+    protected ImageFormat[] getAcceptedTypes() {
+        return new ImageFormat[] {
                 ImageFormats.DCX, //
         };
     }
diff --git a/src/main/java/org/apache/commons/imaging/formats/gif/GifImageParser.java b/src/main/java/org/apache/commons/imaging/formats/gif/GifImageParser.java
index 87a2b5d..5560105 100644
--- a/src/main/java/org/apache/commons/imaging/formats/gif/GifImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/gif/GifImageParser.java
@@ -31,6 +31,7 @@
 import java.util.Map;
 
 import org.apache.commons.imaging.FormatCompliance;
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageParser;
@@ -74,8 +75,8 @@
     }
 
     @Override
-    protected ImageFormats[] getAcceptedTypes() {
-        return new ImageFormats[] { ImageFormats.GIF, //
+    protected ImageFormat[] getAcceptedTypes() {
+        return new ImageFormat[] { ImageFormats.GIF, //
         };
     }
 
@@ -564,7 +565,7 @@
 
         final List<String> comments = getComments(blocks.blocks);
         final int bitsPerPixel = (bhi.colorResolution + 1);
-        final ImageFormats format = ImageFormats.GIF;
+        final ImageFormat format = ImageFormats.GIF;
         final String formatName = "GIF Graphics Interchange Format";
         final String mimeType = "image/gif";
         // we ought to count images, but don't yet.
diff --git a/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImageParser.java b/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImageParser.java
index ecb9103..7b70929 100644
--- a/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImageParser.java
@@ -28,6 +28,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageParser;
@@ -67,8 +68,8 @@
     }
 
     @Override
-    protected ImageFormats[] getAcceptedTypes() {
-        return new ImageFormats[] { ImageFormats.ICNS };
+    protected ImageFormat[] getAcceptedTypes() {
+        return new ImageFormat[] { ImageFormats.ICNS };
     }
 
     @Override
diff --git a/src/main/java/org/apache/commons/imaging/formats/ico/IcoImageParser.java b/src/main/java/org/apache/commons/imaging/formats/ico/IcoImageParser.java
index 792ea01..80742ae 100644
--- a/src/main/java/org/apache/commons/imaging/formats/ico/IcoImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/ico/IcoImageParser.java
@@ -30,6 +30,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageParser;
@@ -72,8 +73,8 @@
     }
 
     @Override
-    protected ImageFormats[] getAcceptedTypes() {
-        return new ImageFormats[] { ImageFormats.ICO, //
+    protected ImageFormat[] getAcceptedTypes() {
+        return new ImageFormat[] { ImageFormats.ICO, //
         };
     }
 
@@ -534,7 +535,7 @@
 
     private IconData readIconData(final byte[] iconData, final IconInfo fIconInfo)
             throws ImageReadException, IOException {
-        final ImageFormats imageFormat = Imaging.guessFormat(iconData);
+        final ImageFormat imageFormat = Imaging.guessFormat(iconData);
         if (imageFormat.equals(ImageFormats.PNG)) {
             final BufferedImage bufferedImage = Imaging.getBufferedImage(iconData);
             final PNGIconData pngIconData = new PNGIconData(fIconInfo, bufferedImage);
diff --git a/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImageParser.java b/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImageParser.java
index 9d9a5a5..fbab755 100644
--- a/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImageParser.java
@@ -30,6 +30,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageParser;
@@ -64,8 +65,8 @@
     }
 
     @Override
-    protected ImageFormats[] getAcceptedTypes() {
-        return new ImageFormats[] { ImageFormats.JPEG, //
+    protected ImageFormat[] getAcceptedTypes() {
+        return new ImageFormat[] { ImageFormats.JPEG, //
         };
     }
 
@@ -783,7 +784,7 @@
         final int Precision = fSOFNSegment.precision;
 
         final int BitsPerPixel = Number_of_components * Precision;
-        final ImageFormats Format = ImageFormats.JPEG;
+        final ImageFormat Format = ImageFormats.JPEG;
         final String FormatName = "JPEG (Joint Photographic Experts Group) Format";
         final String MimeType = "image/jpeg";
         // we ought to count images, but don't yet.
diff --git a/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImageParser.java b/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImageParser.java
index f62973b..c75ac17 100644
--- a/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImageParser.java
@@ -38,6 +38,7 @@
 import java.util.Map;
 import java.util.Properties;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageParser;
@@ -84,8 +85,8 @@
     }
 
     @Override
-    protected ImageFormats[] getAcceptedTypes() {
-        return new ImageFormats[] { ImageFormats.PCX, //
+    protected ImageFormat[] getAcceptedTypes() {
+        return new ImageFormat[] { ImageFormats.PCX, //
         };
     }
 
diff --git a/src/main/java/org/apache/commons/imaging/formats/png/PngImageInfo.java b/src/main/java/org/apache/commons/imaging/formats/png/PngImageInfo.java
index b9b5527..5579a3a 100644
--- a/src/main/java/org/apache/commons/imaging/formats/png/PngImageInfo.java
+++ b/src/main/java/org/apache/commons/imaging/formats/png/PngImageInfo.java
@@ -19,14 +19,14 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.commons.imaging.ImageFormats;
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageInfo;
 
 public class PngImageInfo extends ImageInfo {
     private final List<PngText> textChunks;
 
     public PngImageInfo(final String formatDetails, final int bitsPerPixel,
-            final List<String> comments, final ImageFormats format, final String formatName,
+            final List<String> comments, final ImageFormat format, final String formatName,
             final int height, final String mimeType, final int numberOfImages,
             final int physicalHeightDpi, final float physicalHeightInch,
             final int physicalWidthDpi, final float physicalWidthInch, final int width,
diff --git a/src/main/java/org/apache/commons/imaging/formats/png/PngImageParser.java b/src/main/java/org/apache/commons/imaging/formats/png/PngImageParser.java
index 923a248..77454ec 100644
--- a/src/main/java/org/apache/commons/imaging/formats/png/PngImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/png/PngImageParser.java
@@ -35,6 +35,7 @@
 import java.util.zip.InflaterInputStream;
 
 import org.apache.commons.imaging.ColorTools;
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageParser;
@@ -88,8 +89,8 @@
     }
 
     @Override
-    protected ImageFormats[] getAcceptedTypes() {
-        return new ImageFormats[] { ImageFormats.PNG, //
+    protected ImageFormat[] getAcceptedTypes() {
+        return new ImageFormat[] { ImageFormats.PNG, //
         };
     }
 
@@ -556,7 +557,7 @@
 
         final int BitsPerPixel = pngChunkIHDR.bitDepth
                 * samplesPerPixel(pngChunkIHDR.colorType);
-        final ImageFormats Format = ImageFormats.PNG;
+        final ImageFormat Format = ImageFormats.PNG;
         final String FormatName = "PNG Portable Network Graphics";
         final int Height = pngChunkIHDR.height;
         final String MimeType = "image/png";
diff --git a/src/main/java/org/apache/commons/imaging/formats/pnm/FileInfo.java b/src/main/java/org/apache/commons/imaging/formats/pnm/FileInfo.java
index 117c687..8d16faa 100644
--- a/src/main/java/org/apache/commons/imaging/formats/pnm/FileInfo.java
+++ b/src/main/java/org/apache/commons/imaging/formats/pnm/FileInfo.java
@@ -19,7 +19,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 
-import org.apache.commons.imaging.ImageFormats;
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.common.ImageBuilder;
 
 public abstract class FileInfo {
@@ -38,7 +38,7 @@
 
     public abstract int getBitDepth();
 
-    public abstract ImageFormats getImageType();
+    public abstract ImageFormat getImageType();
 
     public abstract String getImageTypeDescription();
 
diff --git a/src/main/java/org/apache/commons/imaging/formats/pnm/PamFileInfo.java b/src/main/java/org/apache/commons/imaging/formats/pnm/PamFileInfo.java
index 2c4f225..a6e085a 100644
--- a/src/main/java/org/apache/commons/imaging/formats/pnm/PamFileInfo.java
+++ b/src/main/java/org/apache/commons/imaging/formats/pnm/PamFileInfo.java
@@ -20,6 +20,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageReadException;
@@ -78,7 +79,7 @@
     }
 
     @Override
-    public ImageFormats getImageType() {
+    public ImageFormat getImageType() {
         return ImageFormats.PAM;
     }
 
diff --git a/src/main/java/org/apache/commons/imaging/formats/pnm/PbmFileInfo.java b/src/main/java/org/apache/commons/imaging/formats/pnm/PbmFileInfo.java
index cbe2d6a..d27b905 100644
--- a/src/main/java/org/apache/commons/imaging/formats/pnm/PbmFileInfo.java
+++ b/src/main/java/org/apache/commons/imaging/formats/pnm/PbmFileInfo.java
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 
@@ -43,7 +44,7 @@
     }
 
     @Override
-    public ImageFormats getImageType() {
+    public ImageFormat getImageType() {
         return ImageFormats.PBM;
     }
 
diff --git a/src/main/java/org/apache/commons/imaging/formats/pnm/PgmFileInfo.java b/src/main/java/org/apache/commons/imaging/formats/pnm/PgmFileInfo.java
index 6da045f..bb545f0 100644
--- a/src/main/java/org/apache/commons/imaging/formats/pnm/PgmFileInfo.java
+++ b/src/main/java/org/apache/commons/imaging/formats/pnm/PgmFileInfo.java
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageReadException;
@@ -62,7 +63,7 @@
     }
 
     @Override
-    public ImageFormats getImageType() {
+    public ImageFormat getImageType() {
         return ImageFormats.PGM;
     }
 
diff --git a/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java b/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java
index b26a3ed..71cdd17 100644
--- a/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java
@@ -29,6 +29,7 @@
 import java.util.Map;
 import java.util.StringTokenizer;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageParser;
@@ -69,8 +70,8 @@
     }
 
     @Override
-    protected ImageFormats[] getAcceptedTypes() {
-        return new ImageFormats[] {
+    protected ImageFormat[] getAcceptedTypes() {
+        return new ImageFormat[] {
                 ImageFormats.PBM, //
                 ImageFormats.PGM, //
                 ImageFormats.PPM, //
@@ -241,7 +242,7 @@
         final List<String> Comments = new ArrayList<String>();
 
         final int BitsPerPixel = info.getBitDepth() * info.getNumComponents();
-        final ImageFormats Format = info.getImageType();
+        final ImageFormat Format = info.getImageType();
         final String FormatName = info.getImageTypeDescription();
         final String MimeType = info.getMIMEType();
         final int NumberOfImages = 1;
diff --git a/src/main/java/org/apache/commons/imaging/formats/pnm/PpmFileInfo.java b/src/main/java/org/apache/commons/imaging/formats/pnm/PpmFileInfo.java
index aadae87..246331d 100644
--- a/src/main/java/org/apache/commons/imaging/formats/pnm/PpmFileInfo.java
+++ b/src/main/java/org/apache/commons/imaging/formats/pnm/PpmFileInfo.java
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageReadException;
@@ -62,7 +63,7 @@
     }
 
     @Override
-    public ImageFormats getImageType() {
+    public ImageFormat getImageType() {
         return ImageFormats.PPM;
     }
 
diff --git a/src/main/java/org/apache/commons/imaging/formats/psd/PsdImageParser.java b/src/main/java/org/apache/commons/imaging/formats/psd/PsdImageParser.java
index 134996d..09ca376 100644
--- a/src/main/java/org/apache/commons/imaging/formats/psd/PsdImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/psd/PsdImageParser.java
@@ -28,6 +28,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageParser;
@@ -74,8 +75,8 @@
     }
 
     @Override
-    protected ImageFormats[] getAcceptedTypes() {
-        return new ImageFormats[] { ImageFormats.PSD, //
+    protected ImageFormat[] getAcceptedTypes() {
+        return new ImageFormat[] { ImageFormats.PSD, //
         };
     }
 
@@ -524,7 +525,7 @@
         if (BitsPerPixel < 0) {
             BitsPerPixel = 0;
         }
-        final ImageFormats Format = ImageFormats.PSD;
+        final ImageFormat Format = ImageFormats.PSD;
         final String FormatName = "Photoshop";
         final String MimeType = "image/x-photoshop";
         // we ought to count images, but don't yet.
diff --git a/src/main/java/org/apache/commons/imaging/formats/rgbe/RgbeImageParser.java b/src/main/java/org/apache/commons/imaging/formats/rgbe/RgbeImageParser.java
index 660d68d..1b0f8af 100644
--- a/src/main/java/org/apache/commons/imaging/formats/rgbe/RgbeImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/rgbe/RgbeImageParser.java
@@ -31,6 +31,7 @@
 import java.util.ArrayList;
 import java.util.Map;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageParser;
@@ -67,8 +68,8 @@
     }
 
     @Override
-    protected ImageFormats[] getAcceptedTypes() {
-        return new ImageFormats[] { ImageFormats.RGBE };
+    protected ImageFormat[] getAcceptedTypes() {
+        return new ImageFormat[] { ImageFormats.RGBE };
     }
 
     @Override
diff --git a/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImageParser.java b/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImageParser.java
index ea14b9f..f809e87 100644
--- a/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImageParser.java
@@ -29,6 +29,7 @@
 import java.util.Map;
 
 import org.apache.commons.imaging.FormatCompliance;
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageParser;
@@ -78,8 +79,8 @@
     }
 
     @Override
-    protected ImageFormats[] getAcceptedTypes() {
-        return new ImageFormats[] { ImageFormats.TIFF, //
+    protected ImageFormat[] getAcceptedTypes() {
+        return new ImageFormat[] { ImageFormats.TIFF, //
         };
     }
 
@@ -255,7 +256,7 @@
             comments.add(comment);
         }
 
-        final ImageFormats format = ImageFormats.TIFF;
+        final ImageFormat format = ImageFormats.TIFF;
         final String formatName = "TIFF Tag-based Image File Format";
         final String mimeType = "image/tiff";
         final int numberOfImages = contents.directories.size();
diff --git a/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImageParser.java b/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImageParser.java
index 76278d6..6908c4d 100644
--- a/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImageParser.java
@@ -32,6 +32,7 @@
 import java.util.Map;
 import java.util.Properties;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageParser;
@@ -64,8 +65,8 @@
     }
 
     @Override
-    protected ImageFormats[] getAcceptedTypes() {
-        return new ImageFormats[] { ImageFormats.WBMP, //
+    protected ImageFormat[] getAcceptedTypes() {
+        return new ImageFormat[] { ImageFormats.WBMP, //
         };
     }
 
diff --git a/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImageParser.java b/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImageParser.java
index 1c63528..5e39500 100644
--- a/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImageParser.java
@@ -37,6 +37,7 @@
 import java.util.Properties;
 import java.util.UUID;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageParser;
@@ -70,8 +71,8 @@
     }
 
     @Override
-    protected ImageFormats[] getAcceptedTypes() {
-        return new ImageFormats[] { ImageFormats.XBM, //
+    protected ImageFormat[] getAcceptedTypes() {
+        return new ImageFormat[] { ImageFormats.XBM, //
         };
     }
 
diff --git a/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImageParser.java b/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImageParser.java
index 37277a2..10f44c8 100644
--- a/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImageParser.java
@@ -40,6 +40,7 @@
 import java.util.Properties;
 import java.util.UUID;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageParser;
@@ -120,8 +121,8 @@
     }
 
     @Override
-    protected ImageFormats[] getAcceptedTypes() {
-        return new ImageFormats[] { ImageFormats.XPM, //
+    protected ImageFormat[] getAcceptedTypes() {
+        return new ImageFormat[] { ImageFormats.XPM, //
         };
     }
 
diff --git a/src/test/java/org/apache/commons/imaging/ImagingGuessFormatTest.java b/src/test/java/org/apache/commons/imaging/ImagingGuessFormatTest.java
index a834ee8..0241558 100644
--- a/src/test/java/org/apache/commons/imaging/ImagingGuessFormatTest.java
+++ b/src/test/java/org/apache/commons/imaging/ImagingGuessFormatTest.java
@@ -63,14 +63,14 @@
         testGuess(ImageFormats.UNKNOWN, UNKNOWN_IMAGE_FILE);
     }
 
-    public void testGuess(final ImageFormats expectedFormat, String imagePath)
+    public void testGuess(final ImageFormat expectedFormat, String imagePath)
             throws Exception {
         imagePath = FilenameUtils.separatorsToSystem(imagePath);
         final File imageFile = new File(TEST_IMAGE_FOLDER, imagePath);
 
         assertTrue(imageFile.exists());
         assertTrue(imageFile.isFile());
-        final ImageFormats guessedFormat = Imaging.guessFormat(imageFile);
+        final ImageFormat guessedFormat = Imaging.guessFormat(imageFile);
         assertNotNull(guessedFormat);
         assertEquals(guessedFormat, expectedFormat);
     }
diff --git a/src/test/java/org/apache/commons/imaging/common/bytesource/ByteSourceImageTest.java b/src/test/java/org/apache/commons/imaging/common/bytesource/ByteSourceImageTest.java
index 0b43f1b..798e928 100644
--- a/src/test/java/org/apache/commons/imaging/common/bytesource/ByteSourceImageTest.java
+++ b/src/test/java/org/apache/commons/imaging/common/bytesource/ByteSourceImageTest.java
@@ -28,6 +28,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageReadException;
@@ -84,7 +85,7 @@
 
             checkGetImageSize(imageFile, imageFileBytes);
 
-            final ImageFormats imageFormat = Imaging.guessFormat(imageFile);
+            final ImageFormat imageFormat = Imaging.guessFormat(imageFile);
             if (ImageFormats.JPEG != imageFormat
                     && ImageFormats.UNKNOWN != imageFormat) {
                 checkGetBufferedImage(imageFile, imageFileBytes);
@@ -123,12 +124,12 @@
     public void checkGuessFormat(final File imageFile, final byte[] imageFileBytes)
             throws Exception {
         // check guessFormat()
-        final ImageFormats imageFormatFile = Imaging.guessFormat(imageFile);
+        final ImageFormat imageFormatFile = Imaging.guessFormat(imageFile);
         assertNotNull(imageFormatFile);
         assertTrue(imageFormatFile != ImageFormats.UNKNOWN);
         // Debug.debug("imageFormatFile", imageFormatFile);
 
-        final ImageFormats imageFormatBytes = Imaging.guessFormat(imageFileBytes);
+        final ImageFormat imageFormatBytes = Imaging.guessFormat(imageFileBytes);
         assertNotNull(imageFormatBytes);
         assertTrue(imageFormatBytes != ImageFormats.UNKNOWN);
         // Debug.debug("imageFormatBytes", imageFormatBytes);
@@ -157,7 +158,7 @@
             IllegalArgumentException, InvocationTargetException {
         final Map<String,Object> params = new HashMap<String,Object>();
         final boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
-        final ImageFormats imageFormat = Imaging.guessFormat(imageFile);
+        final ImageFormat imageFormat = Imaging.guessFormat(imageFile);
         if (imageFormat.equals(ImageFormats.TIFF)
                 || imageFormat.equals(ImageFormats.JPEG)) {
             params.put(PARAM_KEY_READ_THUMBNAILS, new Boolean(!ignoreImageData));
diff --git a/src/test/java/org/apache/commons/imaging/examples/ImageWriteExample.java b/src/test/java/org/apache/commons/imaging/examples/ImageWriteExample.java
index d28fd6b..f850462 100644
--- a/src/test/java/org/apache/commons/imaging/examples/ImageWriteExample.java
+++ b/src/test/java/org/apache/commons/imaging/examples/ImageWriteExample.java
@@ -22,6 +22,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
@@ -35,7 +36,7 @@
         // read image
         final BufferedImage image = Imaging.getBufferedImage(file);
 
-        final ImageFormats format = ImageFormats.TIFF;
+        final ImageFormat format = ImageFormats.TIFF;
         final Map<String,Object> params = new HashMap<String,Object>();
 
         // set optional parameters if you like
diff --git a/src/test/java/org/apache/commons/imaging/examples/SampleUsage.java b/src/test/java/org/apache/commons/imaging/examples/SampleUsage.java
index 582a92f..83343d4 100644
--- a/src/test/java/org/apache/commons/imaging/examples/SampleUsage.java
+++ b/src/test/java/org/apache/commons/imaging/examples/SampleUsage.java
@@ -26,6 +26,7 @@
 import java.util.Map;
 
 import org.apache.commons.imaging.FormatCompliance;
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.Imaging;
@@ -64,7 +65,7 @@
             // <b>Write an image. </b>
             final BufferedImage image = someImage;
             final File dst = someFile;
-            final ImageFormats format = ImageFormats.PNG;
+            final ImageFormat format = ImageFormats.PNG;
             final Map<String,Object> optional_params = new HashMap<String,Object>();
             Imaging.writeImage(image, dst, format, optional_params);
 
@@ -91,7 +92,7 @@
             }
 
             // <b>try to guess the image's format. </b>
-            final ImageFormats image_format = Imaging.guessFormat(imageBytes);
+            final ImageFormat image_format = Imaging.guessFormat(imageBytes);
             image_format.equals(ImageFormats.PNG);
 
             // <b>get all metadata stored in EXIF format (ie. from JPEG or
diff --git a/src/test/java/org/apache/commons/imaging/formats/bmp/BmpBaseTest.java b/src/test/java/org/apache/commons/imaging/formats/bmp/BmpBaseTest.java
index 1ce398b..73aefbd 100644
--- a/src/test/java/org/apache/commons/imaging/formats/bmp/BmpBaseTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/bmp/BmpBaseTest.java
@@ -21,6 +21,7 @@
 import java.io.IOException;
 import java.util.List;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.Imaging;
@@ -30,7 +31,7 @@
 
     private static boolean isBmp(final File file) throws IOException,
             ImageReadException {
-        final ImageFormats format = Imaging.guessFormat(file);
+        final ImageFormat format = Imaging.guessFormat(file);
         return format == ImageFormats.BMP;
     }
 
diff --git a/src/test/java/org/apache/commons/imaging/formats/dcx/DcxBaseTest.java b/src/test/java/org/apache/commons/imaging/formats/dcx/DcxBaseTest.java
index 4054d70..61764f9 100644
--- a/src/test/java/org/apache/commons/imaging/formats/dcx/DcxBaseTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/dcx/DcxBaseTest.java
@@ -21,6 +21,7 @@
 import java.io.IOException;
 import java.util.List;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.Imaging;
@@ -30,7 +31,7 @@
 
     private static boolean isDcx(final File file) throws IOException,
             ImageReadException {
-        final ImageFormats format = Imaging.guessFormat(file);
+        final ImageFormat format = Imaging.guessFormat(file);
         return format == ImageFormats.DCX;
     }
 
diff --git a/src/test/java/org/apache/commons/imaging/formats/gif/GifBaseTest.java b/src/test/java/org/apache/commons/imaging/formats/gif/GifBaseTest.java
index 013c3b0..6e75df2 100644
--- a/src/test/java/org/apache/commons/imaging/formats/gif/GifBaseTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/gif/GifBaseTest.java
@@ -21,6 +21,7 @@
 import java.io.IOException;
 import java.util.List;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.Imaging;
@@ -30,7 +31,7 @@
 
     private static boolean isGif(final File file) throws IOException,
             ImageReadException {
-        final ImageFormats format = Imaging.guessFormat(file);
+        final ImageFormat format = Imaging.guessFormat(file);
         return format == ImageFormats.GIF;
     }
 
diff --git a/src/test/java/org/apache/commons/imaging/formats/icns/IcnsBaseTest.java b/src/test/java/org/apache/commons/imaging/formats/icns/IcnsBaseTest.java
index 04f141f..5f34261 100644
--- a/src/test/java/org/apache/commons/imaging/formats/icns/IcnsBaseTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/icns/IcnsBaseTest.java
@@ -21,6 +21,7 @@
 import java.io.IOException;
 import java.util.List;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.Imaging;
@@ -30,7 +31,7 @@
 
     private static boolean isIcns(final File file) throws IOException,
             ImageReadException {
-        final ImageFormats format = Imaging.guessFormat(file);
+        final ImageFormat format = Imaging.guessFormat(file);
         return format == ImageFormats.ICNS;
     }
 
diff --git a/src/test/java/org/apache/commons/imaging/formats/jpeg/JpegBaseTest.java b/src/test/java/org/apache/commons/imaging/formats/jpeg/JpegBaseTest.java
index 5657d4a..b9e3fc1 100644
--- a/src/test/java/org/apache/commons/imaging/formats/jpeg/JpegBaseTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/jpeg/JpegBaseTest.java
@@ -21,6 +21,7 @@
 import java.io.IOException;
 import java.util.List;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.Imaging;
@@ -30,7 +31,7 @@
 
     protected static boolean isJpeg(final File file) throws IOException,
             ImageReadException {
-        final ImageFormats format = Imaging.guessFormat(file);
+        final ImageFormat format = Imaging.guessFormat(file);
         return format == ImageFormats.JPEG;
     }
 
diff --git a/src/test/java/org/apache/commons/imaging/formats/pam/PamBaseTest.java b/src/test/java/org/apache/commons/imaging/formats/pam/PamBaseTest.java
index 5dd415f..b3a792a 100644
--- a/src/test/java/org/apache/commons/imaging/formats/pam/PamBaseTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/pam/PamBaseTest.java
@@ -21,6 +21,7 @@
 import java.io.IOException;
 import java.util.List;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.Imaging;
@@ -30,7 +31,7 @@
 
     private static boolean isPam(final File file) throws IOException,
             ImageReadException {
-        final ImageFormats format = Imaging.guessFormat(file);
+        final ImageFormat format = Imaging.guessFormat(file);
         return format == ImageFormats.PAM;
     }
 
diff --git a/src/test/java/org/apache/commons/imaging/formats/png/PngBaseTest.java b/src/test/java/org/apache/commons/imaging/formats/png/PngBaseTest.java
index c9c5b31..a5f01b2 100644
--- a/src/test/java/org/apache/commons/imaging/formats/png/PngBaseTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/png/PngBaseTest.java
@@ -21,6 +21,7 @@
 import java.io.IOException;
 import java.util.List;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.Imaging;
@@ -30,7 +31,7 @@
 
     private static boolean isPng(final File file) throws IOException,
             ImageReadException {
-        final ImageFormats format = Imaging.guessFormat(file);
+        final ImageFormat format = Imaging.guessFormat(file);
         return format == ImageFormats.PNG;
     }
 
diff --git a/src/test/java/org/apache/commons/imaging/formats/psd/PsdBaseTest.java b/src/test/java/org/apache/commons/imaging/formats/psd/PsdBaseTest.java
index 9cc70c4..107f8d5 100644
--- a/src/test/java/org/apache/commons/imaging/formats/psd/PsdBaseTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/psd/PsdBaseTest.java
@@ -20,6 +20,7 @@
 import java.io.IOException;
 import java.util.List;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.Imaging;
@@ -28,7 +29,7 @@
 public abstract class PsdBaseTest extends ImagingTest {
     private static boolean isPsd(final File file) throws IOException,
             ImageReadException {
-        final ImageFormats format = Imaging.guessFormat(file);
+        final ImageFormat format = Imaging.guessFormat(file);
         return format == ImageFormats.PSD;
     }
 
diff --git a/src/test/java/org/apache/commons/imaging/formats/rgbe/RgbeBaseTest.java b/src/test/java/org/apache/commons/imaging/formats/rgbe/RgbeBaseTest.java
index 38fbf4f..fe7bafd 100644
--- a/src/test/java/org/apache/commons/imaging/formats/rgbe/RgbeBaseTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/rgbe/RgbeBaseTest.java
@@ -20,6 +20,7 @@
 import java.io.IOException;
 import java.util.List;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.Imaging;
@@ -28,7 +29,7 @@
 public abstract class RgbeBaseTest extends ImagingTest {
     private static boolean isRgbe(final File file) throws IOException,
             ImageReadException {
-        final ImageFormats format = Imaging.guessFormat(file);
+        final ImageFormat format = Imaging.guessFormat(file);
         return format == ImageFormats.RGBE;
     }
 
diff --git a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffBaseTest.java b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffBaseTest.java
index 51e678f..58fc03e 100644
--- a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffBaseTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffBaseTest.java
@@ -21,6 +21,7 @@
 import java.io.IOException;
 import java.util.List;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.Imaging;
@@ -30,7 +31,7 @@
 
     private static boolean isTiff(final File file) throws IOException,
             ImageReadException {
-        final ImageFormats format = Imaging.guessFormat(file);
+        final ImageFormat format = Imaging.guessFormat(file);
         return format == ImageFormats.TIFF;
     }
 
diff --git a/src/test/java/org/apache/commons/imaging/formats/xmp/XmpUpdateTest.java b/src/test/java/org/apache/commons/imaging/formats/xmp/XmpUpdateTest.java
index c3ec3e1..b497c41 100644
--- a/src/test/java/org/apache/commons/imaging/formats/xmp/XmpUpdateTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/xmp/XmpUpdateTest.java
@@ -23,6 +23,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.Imaging;
 import org.apache.commons.imaging.ImagingTest;
@@ -47,7 +48,7 @@
             Debug.debug("imageFile", imageFile);
             Debug.debug();
 
-            final ImageFormats imageFormat = Imaging.guessFormat(imageFile);
+            final ImageFormat imageFormat = Imaging.guessFormat(imageFile);
 
             String xmpXml = Imaging.getXmpXml(imageFile);
             if (null == xmpXml
diff --git a/src/test/java/org/apache/commons/imaging/roundtrip/RoundtripTest.java b/src/test/java/org/apache/commons/imaging/roundtrip/RoundtripTest.java
index c61b136..556fa64 100644
--- a/src/test/java/org/apache/commons/imaging/roundtrip/RoundtripTest.java
+++ b/src/test/java/org/apache/commons/imaging/roundtrip/RoundtripTest.java
@@ -23,6 +23,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageReadException;
@@ -43,14 +44,14 @@
 
     private static class FormatInfo {
 
-        public final ImageFormats format;
+        public final ImageFormat format;
         public final boolean canRead;
         public final boolean canWrite;
         public final int colorSupport;
         public final boolean identicalSecondWrite;
         public final boolean preservesResolution;
 
-        public FormatInfo(final ImageFormats format, final boolean canRead,
+        public FormatInfo(final ImageFormat format, final boolean canRead,
                 final boolean canWrite, final int colorSupport,
                 final boolean identicalSecondWrite,
                 final boolean preservesResolution) {
