diff --git a/src/test/java/org/apache/commons/sanselan/SanselanGuessFormatTest.java b/src/test/java/org/apache/commons/sanselan/SanselanGuessFormatTest.java
index 5312b62..3f833db 100644
--- a/src/test/java/org/apache/commons/sanselan/SanselanGuessFormatTest.java
+++ b/src/test/java/org/apache/commons/sanselan/SanselanGuessFormatTest.java
@@ -18,10 +18,8 @@
 package org.apache.commons.sanselan;
 
 import java.io.File;
-import java.io.IOException;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.sanselan.ImageFormat;
-import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.Sanselan;
 
 public class SanselanGuessFormatTest extends SanselanTest {
@@ -39,7 +37,8 @@
     public static final String PPM_IMAGE_FILE = "pbm\\1\\Oregon Scientific DS6639 - DSC_0307 - small.ppm";
     public static final String TGA_IMAGE_FILE = "tga\\1\\Oregon Scientific DS6639 - DSC_0307 - small.tga";
 
-    public void testGuess_all() throws IOException, ImageReadException {
+    public void testGuess_all() throws Exception
+    {
         testGuess(ImageFormat.IMAGE_FORMAT_PNG, PNG_IMAGE_FILE);
         testGuess(ImageFormat.IMAGE_FORMAT_GIF, GIF_IMAGE_FILE);
         testGuess(ImageFormat.IMAGE_FORMAT_ICNS, ICNS_IMAGE_FILE);
@@ -61,12 +60,12 @@
 
     public static final String UNKNOWN_IMAGE_FILE = "jpg\\1\\info.txt";
 
-    public void testGuess_unknown() throws IOException, ImageReadException {
+    public void testGuess_unknown() throws Exception {
         testGuess(ImageFormat.IMAGE_FORMAT_UNKNOWN, UNKNOWN_IMAGE_FILE);
     }
 
-    public void testGuess(ImageFormat expectedFormat, String imagePath)
-            throws IOException, ImageReadException {
+    public void testGuess(ImageFormat expectedFormat, String imagePath) throws Exception
+    {
         imagePath = FilenameUtils.separatorsToSystem(imagePath);
         File imageFile = new File(TEST_IMAGE_FOLDER, imagePath);
 
diff --git a/src/test/java/org/apache/commons/sanselan/common/bytesource/ByteSourceDataTest.java b/src/test/java/org/apache/commons/sanselan/common/bytesource/ByteSourceDataTest.java
index 8aac956..8a64309 100644
--- a/src/test/java/org/apache/commons/sanselan/common/bytesource/ByteSourceDataTest.java
+++ b/src/test/java/org/apache/commons/sanselan/common/bytesource/ByteSourceDataTest.java
@@ -122,7 +122,7 @@
 
     }
 
-    public void test() throws IOException
+    public void test() throws Exception
     {
         ByteSourceFactory byteSourceFactories[] = {
                 new ByteSourceFileFactory(),
diff --git a/src/test/java/org/apache/commons/sanselan/common/bytesource/ByteSourceImageTest.java b/src/test/java/org/apache/commons/sanselan/common/bytesource/ByteSourceImageTest.java
index b3ffa37..95784b4 100644
--- a/src/test/java/org/apache/commons/sanselan/common/bytesource/ByteSourceImageTest.java
+++ b/src/test/java/org/apache/commons/sanselan/common/bytesource/ByteSourceImageTest.java
@@ -38,9 +38,7 @@
 public class ByteSourceImageTest extends ByteSourceTest
 {
 
-    public void test() throws IOException, ImageReadException,
-            IllegalAccessException, IllegalArgumentException,
-            InvocationTargetException
+    public void test() throws Exception
     {
         List imageFiles = getTestImages();
         for (int i = 0; i < imageFiles.size(); i++)
@@ -96,8 +94,7 @@
         }
     }
 
-    public void checkGetBufferedImage(File file, byte[] bytes)
-            throws IOException, ImageReadException
+    public void checkGetBufferedImage(File file, byte[] bytes) throws Exception
     {
         BufferedImage imageFile = Sanselan.getBufferedImage(file);
         assertNotNull(imageFile);
@@ -113,8 +110,7 @@
         assertTrue(imageFileHeight == imageBytes.getHeight());
     }
 
-    public void checkGetImageSize(File imageFile, byte[] imageFileBytes)
-            throws IOException, ImageReadException
+    public void checkGetImageSize(File imageFile, byte[] imageFileBytes) throws Exception
     {
         Dimension imageSizeFile = Sanselan.getImageSize(imageFile);
         assertNotNull(imageSizeFile);
@@ -127,8 +123,7 @@
         assertTrue(imageSizeFile.height == imageSizeBytes.height);
     }
 
-    public void checkGuessFormat(File imageFile, byte[] imageFileBytes)
-            throws IOException, ImageReadException
+    public void checkGuessFormat(File imageFile, byte[] imageFileBytes) throws Exception
     {
         // check guessFormat()
         ImageFormat imageFormatFile = Sanselan.guessFormat(imageFile);
@@ -144,8 +139,7 @@
         assertTrue(imageFormatBytes == imageFormatFile);
     }
 
-    public void checkGetICCProfileBytes(File imageFile, byte[] imageFileBytes)
-            throws IOException, ImageReadException
+    public void checkGetICCProfileBytes(File imageFile, byte[] imageFileBytes)  throws Exception
     {
         // check guessFormat()
         byte iccBytesFile[] = Sanselan.getICCProfileBytes(imageFile);
diff --git a/src/test/java/org/apache/commons/sanselan/formats/bmp/BmpReadTest.java b/src/test/java/org/apache/commons/sanselan/formats/bmp/BmpReadTest.java
index 7461b96..486b574 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/bmp/BmpReadTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/bmp/BmpReadTest.java
@@ -19,13 +19,11 @@
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.sanselan.ImageInfo;
-import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.common.IImageMetadata;
 import org.apache.commons.sanselan.util.Debug;
@@ -33,7 +31,7 @@
 public class BmpReadTest extends BmpBaseTest
 {
 
-    public void test() throws IOException, ImageReadException
+    public void test() throws Exception
     {
         Debug.debug("start");
 
diff --git a/src/test/java/org/apache/commons/sanselan/formats/bmp/BmpRoundtripTest.java b/src/test/java/org/apache/commons/sanselan/formats/bmp/BmpRoundtripTest.java
index 1dcf723..f7fe490 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/bmp/BmpRoundtripTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/bmp/BmpRoundtripTest.java
@@ -72,46 +72,38 @@
         return result;
     }
 
-     public void testSmallBlackPixels() throws IOException,
-     ImageReadException,
-     ImageWriteException
+     public void testSmallBlackPixels() throws Exception
      {
      int[][] smallBlackPixels = getSimpleRawData(256, 256, 0);
      writeAndReadImageData(smallBlackPixels);
      }
 
-    public void testSingleBlackPixel() throws IOException, ImageReadException,
-            ImageWriteException
+    public void testSingleBlackPixel() throws Exception
     {
         int[][] singleBlackPixel = getSimpleRawData(1, 1, 0);
         writeAndReadImageData(singleBlackPixel);
     }
 
 
-     public void testSmallRedPixels() throws IOException, ImageReadException,
-     ImageWriteException
+     public void testSmallRedPixels() throws Exception
      {
      int[][] smallRedPixels = getSimpleRawData(256, 256, 0xffff0000);
      writeAndReadImageData(smallRedPixels);
      }
 
-     public void testSingleRedPixel() throws IOException, ImageReadException,
-     ImageWriteException
+     public void testSingleRedPixel() throws Exception
      {
      int[][] singleRedPixel = getSimpleRawData(1, 1, 0xffff0000);
      writeAndReadImageData(singleRedPixel);
      }
 
-     public void testSmallAscendingPixels() throws IOException,
-     ImageReadException, ImageWriteException
+     public void testSmallAscendingPixels() throws Exception
      {
      int[][] smallAscendingPixels = getAscendingRawData(256, 256);
      writeAndReadImageData(smallAscendingPixels);
      }
 
-     public void testSmallRandomPixels() throws IOException,
-     ImageReadException,
-     ImageWriteException
+     public void testSmallRandomPixels() throws Exception
      {
      int[][] smallRandomPixels = randomRawData(256, 256);
      writeAndReadImageData(smallRandomPixels);
diff --git a/src/test/java/org/apache/commons/sanselan/formats/dcx/DcxReadTest.java b/src/test/java/org/apache/commons/sanselan/formats/dcx/DcxReadTest.java
index be67c19..e551005 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/dcx/DcxReadTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/dcx/DcxReadTest.java
@@ -19,13 +19,11 @@
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.sanselan.ImageInfo;
-import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.common.IImageMetadata;
 import org.apache.commons.sanselan.util.Debug;
@@ -33,7 +31,7 @@
 public class DcxReadTest extends DcxBaseTest
 {
 
-    public void test() throws IOException, ImageReadException
+    public void test() throws Exception
     {
         Debug.debug("start");
 
diff --git a/src/test/java/org/apache/commons/sanselan/formats/gif/GifReadTest.java b/src/test/java/org/apache/commons/sanselan/formats/gif/GifReadTest.java
index 83c8083..6026256 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/gif/GifReadTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/gif/GifReadTest.java
@@ -19,11 +19,9 @@
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.io.IOException;
 import java.util.List;
 
 import org.apache.commons.sanselan.ImageInfo;
-import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.common.IImageMetadata;
 import org.apache.commons.sanselan.util.Debug;
@@ -31,7 +29,7 @@
 public class GifReadTest extends GifBaseTest
 {
 
-    public void test() throws IOException, ImageReadException
+    public void test() throws Exception
     {
         Debug.debug("start");
 
diff --git a/src/test/java/org/apache/commons/sanselan/formats/icns/IcnsReadTest.java b/src/test/java/org/apache/commons/sanselan/formats/icns/IcnsReadTest.java
index 1931f77..29559a5 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/icns/IcnsReadTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/icns/IcnsReadTest.java
@@ -19,13 +19,11 @@
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.sanselan.ImageInfo;
-import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.common.IImageMetadata;
 import org.apache.commons.sanselan.util.Debug;
@@ -33,7 +31,7 @@
 public class IcnsReadTest extends IcnsBaseTest
 {
 
-    public void test() throws IOException, ImageReadException
+    public void test() throws Exception
     {
         Debug.debug("start");
 
diff --git a/src/test/java/org/apache/commons/sanselan/formats/icns/IcnsRoundTripTest.java b/src/test/java/org/apache/commons/sanselan/formats/icns/IcnsRoundTripTest.java
index 3a0240e..571a172 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/icns/IcnsRoundTripTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/icns/IcnsRoundTripTest.java
@@ -23,7 +23,6 @@
 import java.io.IOException;
 
 import org.apache.commons.sanselan.ImageReadException;
-import org.apache.commons.sanselan.ImageWriteException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.common.BinaryOutputStream;
 import org.apache.commons.sanselan.formats.icns.IcnsImageParser;
@@ -53,7 +52,7 @@
         {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
     };
 
-    public void test1BPPIconMaskVersus8BPPMask() throws ImageReadException, ImageWriteException, IOException
+    public void test1BPPIconMaskVersus8BPPMask() throws Exception
     {
         final int foreground = 0xff000000;
         final int background = 0xff000000;
@@ -94,7 +93,7 @@
                 baos.toByteArray(), foreground, background);
     }
 
-    public void test8BPPIcon8BPPMask() throws ImageReadException, ImageWriteException, IOException
+    public void test8BPPIcon8BPPMask() throws Exception
     {
         final int foreground = 0xff000000;
         final int background = 0x00cccccc;
@@ -133,8 +132,7 @@
         writeAndReadImageData("8bpp-image-8bpp-mask", baos.toByteArray(), foreground, background);
     }
 
-    public void test8BPPIcon8BPPMaskVersus1BPPMask()
-            throws ImageReadException, ImageWriteException, IOException
+    public void test8BPPIcon8BPPMaskVersus1BPPMask() throws Exception
     {
         final int foreground = 0xff000000;
         final int background = 0x00cccccc;
@@ -197,8 +195,7 @@
                 baos.toByteArray(), foreground, background);
     }
 
-    public void test8BPPIcon1BPPMaskVersus8BPPMask()
-            throws ImageReadException, ImageWriteException, IOException
+    public void test8BPPIcon1BPPMaskVersus8BPPMask() throws Exception
     {
         final int foreground = 0xff000000;
         final int background = 0x00cccccc;
@@ -261,7 +258,7 @@
                 baos.toByteArray(), foreground, background);
     }
 
-    public void test8BPPIconNoMask() throws ImageReadException, ImageWriteException, IOException
+    public void test8BPPIconNoMask() throws Exception
     {
         final int foreground = 0xff000000;
         final int background = 0xffcccccc;
@@ -287,7 +284,7 @@
         writeAndReadImageData("8bpp-image-no-mask", baos.toByteArray(), foreground, background);
     }
 
-    public void test32BPPMaskedIcon() throws ImageReadException, ImageWriteException, IOException
+    public void test32BPPMaskedIcon() throws Exception
     {
         final int foreground = 0xff000000;
         final int background = 0x000000ff;
@@ -348,7 +345,7 @@
         writeAndReadImageData("32bpp-image-1bpp-mask", baos.toByteArray(), foreground, background);
     }
 
-    public void test32BPPHalfMaskedIcon() throws ImageWriteException, IOException
+    public void test32BPPHalfMaskedIcon() throws Exception
     {
         final int foreground = 0xff000000;
         final int background = 0xff0000ff;
@@ -406,7 +403,7 @@
         assertTrue("ICNS file with corrupt mask didn't fail to parse", threw);
     }
 
-    public void test32BPPMaskMissingIcon() throws ImageReadException, ImageWriteException, IOException
+    public void test32BPPMaskMissingIcon() throws Exception
     {
         final int foreground = 0xff000000;
         final int background = 0xff0000ff;
diff --git a/src/test/java/org/apache/commons/sanselan/formats/ico/IcoReadTest.java b/src/test/java/org/apache/commons/sanselan/formats/ico/IcoReadTest.java
index 22627f5..ce2914c 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/ico/IcoReadTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/ico/IcoReadTest.java
@@ -19,13 +19,11 @@
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.sanselan.ImageInfo;
-import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.common.IImageMetadata;
 import org.apache.commons.sanselan.util.Debug;
@@ -33,7 +31,7 @@
 public class IcoReadTest extends IcoBaseTest
 {
 
-    public void test() throws IOException, ImageReadException
+    public void test() throws Exception
     {
         Debug.debug("start");
 
diff --git a/src/test/java/org/apache/commons/sanselan/formats/ico/IcoRoundtripTest.java b/src/test/java/org/apache/commons/sanselan/formats/ico/IcoRoundtripTest.java
index 7853c16..4c55d25 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/ico/IcoRoundtripTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/ico/IcoRoundtripTest.java
@@ -280,8 +280,7 @@
         }
 
         public byte[] generate32bitRGBABitmap(int foreground, int background,
-                int paletteSize, boolean writeMask) throws IOException,
-                ImageWriteException
+                int paletteSize, boolean writeMask) throws IOException
         {
             ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream();
             BinaryOutputStream bos = new BinaryOutputStream(byteArrayStream,
@@ -318,7 +317,7 @@
     }
 
     private void writeICONDIR(BinaryOutputStream bos, int reserved, int type, int count)
-            throws IOException, ImageWriteException
+            throws IOException
     {
         bos.write2Bytes(reserved);
         bos.write2Bytes(type);
@@ -327,7 +326,7 @@
 
     private void writeICONDIRENTRY(BinaryOutputStream bos, int width, int height,
             int colorCount, int reserved, int planes, int bitCount, int bytesInRes)
-            throws IOException, ImageWriteException
+            throws IOException
     {
         bos.write(width);
         bos.write(height);
@@ -341,7 +340,7 @@
 
     private void writeBITMAPINFOHEADER(BinaryOutputStream bos, int width, int height,
             int colorPlanes, int bitCount, int compression, int colorsUsed,
-            int colorsImportant) throws IOException, ImageWriteException
+            int colorsImportant) throws IOException
     {
         // BITMAPINFOHEADER
         bos.write4Bytes(40); // biSize, always 40 for BITMAPINFOHEADER
@@ -357,7 +356,7 @@
         bos.write4Bytes(colorsImportant); // colors important
     }
 
-    public void testNormalIcons() throws IOException, ImageWriteException, ImageReadException
+    public void testNormalIcons() throws Exception
     {
         final int foreground = 0xFFF000E0;
         final int background = 0xFF102030;
@@ -381,7 +380,7 @@
         }
     }
 
-    public void testBadICONDIRENTRYIcons() throws IOException, ImageWriteException, ImageReadException
+    public void testBadICONDIRENTRYIcons() throws Exception
     {
         final int foreground = 0xFFF000E0;
         final int background = 0xFF102030;
@@ -413,7 +412,7 @@
         }
     }
 
-    public void testColorsUsed() throws IOException, ImageWriteException, ImageReadException
+    public void testColorsUsed() throws Exception
     {
         final int foreground = 0xFFF000E0;
         final int background = 0xFF102030;
@@ -437,7 +436,7 @@
         }
     }
 
-    public void testZeroColorPlanes() throws IOException, ImageWriteException
+    public void testZeroColorPlanes() throws Exception
     {
         final int foreground = 0xFFF000E0;
         final int background = 0xFF102030;
@@ -472,7 +471,7 @@
         }
     }
 
-    public void testBitfieldCompression() throws IOException, ImageWriteException, ImageReadException
+    public void testBitfieldCompression() throws Exception
     {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         BinaryOutputStream bos = new BinaryOutputStream(baos,
@@ -491,7 +490,7 @@
                 0xFF0000FF, 0xFFFFFFFF);
     }
 
-    public void test32bitMask() throws IOException, ImageWriteException, ImageReadException
+    public void test32bitMask() throws Exception
     {
         final int foreground = 0xFFF000E0;
         final int background = 0xFF102030;
@@ -509,7 +508,7 @@
         writeAndReadImageData("16x16x32-no-mask", baos.toByteArray(), foreground, background);
     }
 
-    public void testAlphaVersusANDMask() throws IOException, ImageWriteException, ImageReadException
+    public void testAlphaVersusANDMask() throws Exception
     {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         BinaryOutputStream bos = new BinaryOutputStream(baos,
@@ -526,7 +525,7 @@
                 0xFF000000, 0x00000000);
     }
 
-    public void testFullyTransparent32bitRGBA() throws IOException, ImageWriteException, ImageReadException
+    public void testFullyTransparent32bitRGBA() throws Exception
     {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         BinaryOutputStream bos = new BinaryOutputStream(baos,
diff --git a/src/test/java/org/apache/commons/sanselan/formats/jpeg/JpegReadTest.java b/src/test/java/org/apache/commons/sanselan/formats/jpeg/JpegReadTest.java
index d182629..c0f99f9 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/jpeg/JpegReadTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/jpeg/JpegReadTest.java
@@ -18,13 +18,11 @@
 package org.apache.commons.sanselan.formats.jpeg;
 
 import java.io.File;
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.sanselan.ImageInfo;
-import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.common.IImageMetadata;
 import org.apache.commons.sanselan.util.Debug;
@@ -32,7 +30,7 @@
 public class JpegReadTest extends JpegBaseTest
 {
 
-    public void test() throws IOException, ImageReadException
+    public void test() throws Exception
     {
         List images = getJpegImages();
         for (int i = 0; i < images.size(); i++)
diff --git a/src/test/java/org/apache/commons/sanselan/formats/jpeg/JpegWithJpegThumbnailTest.java b/src/test/java/org/apache/commons/sanselan/formats/jpeg/JpegWithJpegThumbnailTest.java
index 337138f..c75e21a 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/jpeg/JpegWithJpegThumbnailTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/jpeg/JpegWithJpegThumbnailTest.java
@@ -19,11 +19,9 @@
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.SanselanTest;
 import org.apache.commons.sanselan.common.IImageMetadata;
@@ -31,7 +29,8 @@
 
 public class JpegWithJpegThumbnailTest extends SanselanTest {
 
-    public void testSingleImage() throws IOException, ImageReadException {
+    public void testSingleImage() throws Exception
+    {
         File imageFile = getTestImageByName("img_F028c_small.jpg");
 
         Map params = new HashMap();
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 10fd25b..cc9dc2a 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
@@ -18,14 +18,12 @@
 package org.apache.commons.sanselan.formats.jpeg.exif;
 
 import java.io.File;
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.common.IImageMetadata;
 import org.apache.commons.sanselan.formats.jpeg.JpegImageMetadata;
@@ -35,7 +33,8 @@
 
 public class AsciiFieldTest extends ExifBaseTest implements AllTagConstants {
 
-    public void testSingleImage() throws IOException, ImageReadException {
+    public void testSingleImage() throws Exception
+    {
         File imageFile = getTestImageByName("Canon Powershot SD750 - 2007.12.26.n.IMG_3704.JPG");
 
         Map params = new HashMap();
diff --git a/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/ExifDumpTest.java b/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/ExifDumpTest.java
index 16c6630..13fbe39 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/ExifDumpTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/ExifDumpTest.java
@@ -18,13 +18,10 @@
 package org.apache.commons.sanselan.formats.jpeg.exif;
 
 import java.io.File;
-import java.io.IOException;
 import java.util.HashMap;
 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.Sanselan;
 import org.apache.commons.sanselan.common.bytesource.ByteSource;
 import org.apache.commons.sanselan.common.bytesource.ByteSourceFile;
@@ -39,8 +36,7 @@
     //        super(name);
     //    }
 
-    public void test() throws IOException, ImageReadException,
-            ImageWriteException
+    public void test() throws Exception
     {
         List images = getImagesWithExifData();
         for (int i = 0; i < images.size(); i++)
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 3e77139..8e47305 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
@@ -51,8 +51,7 @@
     //        super(name);
     //    }
 
-    public void testRemove() throws IOException, ImageReadException,
-            ImageWriteException
+    public void testRemove() throws Exception
     {
         List images = getImagesWithExifData();
         for (int i = 0; i < images.size(); i++)
@@ -93,8 +92,7 @@
         }
     }
 
-    public void testInsert() throws IOException, ImageReadException,
-            ImageWriteException
+    public void testInsert() throws Exception
     {
         List images = getImagesWithExifData();
         for (int i = 0; i < images.size(); i++)
@@ -260,8 +258,7 @@
         }
     }
 
-    public void testRewriteLossy() throws IOException, ImageReadException,
-            ImageWriteException
+    public void testRewriteLossy() throws Exception
     {
         Rewriter rewriter = new Rewriter()
         {
@@ -277,8 +274,7 @@
         rewrite(rewriter, "lossy");
     }
 
-    public void testRewriteLossless() throws IOException, ImageReadException,
-            ImageWriteException
+    public void testRewriteLossless() throws Exception
     {
         Rewriter rewriter = new Rewriter()
         {
diff --git a/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/SpecificExifTagTest.java b/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/SpecificExifTagTest.java
index 56c4d20..79ed5a2 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/SpecificExifTagTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/SpecificExifTagTest.java
@@ -42,15 +42,13 @@
     //        super(name);
     //    }
 
-    public void testSingleImage() throws IOException, ImageReadException,
-            ImageWriteException
+    public void testSingleImage() throws Exception
     {
         File imageFile = getImageWithExifData();
         checkImage(imageFile);
     }
 
-    public void testAllImages() throws IOException, ImageReadException,
-            ImageWriteException
+    public void testAllImages() throws Exception
     {
         List images = getImagesWithExifData();
         for (int i = 0; i < images.size(); i++)
diff --git a/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/WriteExifMetadataExampleTest.java b/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/WriteExifMetadataExampleTest.java
index 033812f..8eb8b58 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/WriteExifMetadataExampleTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/jpeg/exif/WriteExifMetadataExampleTest.java
@@ -18,11 +18,8 @@
 package org.apache.commons.sanselan.formats.jpeg.exif;
 
 import java.io.File;
-import java.io.IOException;
 import java.util.List;
 
-import org.apache.commons.sanselan.ImageReadException;
-import org.apache.commons.sanselan.ImageWriteException;
 import org.apache.commons.sanselan.examples.WriteExifMetadataExample;
 import org.apache.commons.sanselan.formats.jpeg.exif.ExifRewriter;
 import org.apache.commons.sanselan.formats.tiff.constants.AllTagConstants;
@@ -37,8 +34,7 @@
     //        super(name);
     //    }
 
-    public void test() throws IOException, ImageReadException,
-            ImageWriteException
+    public void test() throws Exception
     {
         List images = getJpegImages();
         for (int i = 0; i < images.size(); i++)
@@ -68,8 +64,7 @@
         }
     }
 
-    public void testInsert() throws IOException, ImageReadException,
-            ImageWriteException
+    public void testInsert() throws Exception
     {
         List images = getJpegImages();
         for (int i = 0; i < images.size(); i++)
diff --git a/src/test/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcDumpTest.java b/src/test/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcDumpTest.java
index 2dd925e..099ce27 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcDumpTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcDumpTest.java
@@ -18,12 +18,10 @@
 package org.apache.commons.sanselan.formats.jpeg.iptc;
 
 import java.io.File;
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.formats.jpeg.JpegImageMetadata;
 import org.apache.commons.sanselan.formats.jpeg.JpegPhotoshopMetadata;
@@ -34,7 +32,7 @@
 public class IptcDumpTest extends IptcBaseTest
 {
 
-    public void test() throws IOException, ImageReadException
+    public void test() throws Exception
     {
         List images = getImagesWithIptcData();
         for (int i = 0; i < images.size(); i++)
diff --git a/src/test/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcUpdateTest.java b/src/test/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcUpdateTest.java
index 3993f12..18450ce 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcUpdateTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcUpdateTest.java
@@ -20,15 +20,12 @@
 import java.io.BufferedOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
-import java.io.IOException;
 import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.HashMap;
 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.bytesource.ByteSource;
 import org.apache.commons.sanselan.common.bytesource.ByteSourceFile;
 import org.apache.commons.sanselan.formats.jpeg.JpegImageParser;
@@ -60,8 +57,7 @@
     /*
      * Remove all Photoshop IPTC data from a JPEG file.
      */
-    public void testRemove() throws IOException, ImageReadException,
-            ImageWriteException
+    public void testRemove() throws Exception
     {
         List images = imagesWithIptcData;
         for (int i = 0; i < images.size(); i++)
@@ -115,8 +111,7 @@
         }
     }
 
-    public void testRemoveInsertUpdate() throws IOException,
-            ImageReadException, ImageWriteException
+    public void testRemoveInsertUpdate() throws Exception
     {
         List images = imagesWithIptcData;
         for (int i = 0; i < images.size(); i++)
@@ -327,8 +322,7 @@
      * Add a few IPTC values to JPEG images, whether or not they have existing
      * IPTC data.
      */
-    public void testAddIptcData() throws IOException, ImageReadException,
-            ImageWriteException
+    public void testAddIptcData() throws Exception
     {
         List images = getJpegImages();
         for (int i = 0; i < images.size(); i++)
diff --git a/src/test/java/org/apache/commons/sanselan/formats/jpeg/xmp/JpegXmpDumpTest.java b/src/test/java/org/apache/commons/sanselan/formats/jpeg/xmp/JpegXmpDumpTest.java
index 8053d7d..1f7b35d 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/jpeg/xmp/JpegXmpDumpTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/jpeg/xmp/JpegXmpDumpTest.java
@@ -18,12 +18,10 @@
 package org.apache.commons.sanselan.formats.jpeg.xmp;
 
 import java.io.File;
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.common.bytesource.ByteSource;
 import org.apache.commons.sanselan.common.bytesource.ByteSourceFile;
 import org.apache.commons.sanselan.formats.jpeg.JpegImageParser;
@@ -32,7 +30,7 @@
 public class JpegXmpDumpTest extends JpegXmpBaseTest
 {
 
-    public void test() throws IOException, ImageReadException
+    public void test() throws Exception
     {
         List images = getImagesWithXmpData();
         for (int i = 0; i < images.size(); i++)
diff --git a/src/test/java/org/apache/commons/sanselan/formats/jpeg/xmp/JpegXmpRewriteTest.java b/src/test/java/org/apache/commons/sanselan/formats/jpeg/xmp/JpegXmpRewriteTest.java
index 4e18392..23b7963 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/jpeg/xmp/JpegXmpRewriteTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/jpeg/xmp/JpegXmpRewriteTest.java
@@ -20,14 +20,11 @@
 import java.io.BufferedOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
-import java.io.IOException;
 import java.io.OutputStream;
 import java.util.HashMap;
 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.bytesource.ByteSource;
 import org.apache.commons.sanselan.common.bytesource.ByteSourceFile;
 import org.apache.commons.sanselan.formats.jpeg.JpegImageParser;
@@ -37,8 +34,7 @@
 public class JpegXmpRewriteTest extends JpegXmpBaseTest
 {
 
-    public void testRemoveInsertUpdate() throws IOException, ImageReadException,
-            ImageWriteException
+    public void testRemoveInsertUpdate() throws Exception
     {
         List images = getImagesWithXmpData();
         for (int i = 0; i < images.size(); i++)
diff --git a/src/test/java/org/apache/commons/sanselan/formats/pcx/PcxReadTest.java b/src/test/java/org/apache/commons/sanselan/formats/pcx/PcxReadTest.java
index c75015a..b162613 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/pcx/PcxReadTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/pcx/PcxReadTest.java
@@ -19,13 +19,11 @@
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.sanselan.ImageInfo;
-import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.common.IImageMetadata;
 import org.apache.commons.sanselan.util.Debug;
@@ -33,7 +31,7 @@
 public class PcxReadTest extends PcxBaseTest
 {
 
-    public void test() throws IOException, ImageReadException
+    public void test() throws Exception
     {
         Debug.debug("start");
 
diff --git a/src/test/java/org/apache/commons/sanselan/formats/png/ConvertPngToGifTest.java b/src/test/java/org/apache/commons/sanselan/formats/png/ConvertPngToGifTest.java
index ce780a7..964beee 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/png/ConvertPngToGifTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/png/ConvertPngToGifTest.java
@@ -19,13 +19,10 @@
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.io.IOException;
 import java.util.Hashtable;
 import java.util.List;
 
 import org.apache.commons.sanselan.ImageFormat;
-import org.apache.commons.sanselan.ImageReadException;
-import org.apache.commons.sanselan.ImageWriteException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.util.Debug;
 
@@ -33,8 +30,8 @@
 
 
 
-    public void test() throws IOException, ImageReadException,
-            ImageWriteException {
+    public void test() throws Exception
+    {
 
         List images = getPngImages();
         for (int i = 0; i < images.size(); i++) {
diff --git a/src/test/java/org/apache/commons/sanselan/formats/png/PngMultipleRoundtripTest.java b/src/test/java/org/apache/commons/sanselan/formats/png/PngMultipleRoundtripTest.java
index 0bef623..327eda7 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/png/PngMultipleRoundtripTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/png/PngMultipleRoundtripTest.java
@@ -19,22 +19,18 @@
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.sanselan.ImageFormat;
-import org.apache.commons.sanselan.ImageReadException;
-import org.apache.commons.sanselan.ImageWriteException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.util.Debug;
 
 public class PngMultipleRoundtripTest extends PngBaseTest
 {
 
-    public void test() throws IOException, ImageReadException,
-            ImageWriteException
+    public void test() throws Exception
     {
         String imagesFolderPath = FilenameUtils.separatorsToSystem("src\\test\\data\\images\\png\\3");
         File imagesFolder = new File(imagesFolderPath);
diff --git a/src/test/java/org/apache/commons/sanselan/formats/png/PngReadTest.java b/src/test/java/org/apache/commons/sanselan/formats/png/PngReadTest.java
index 528e605..5d9e060 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/png/PngReadTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/png/PngReadTest.java
@@ -19,11 +19,9 @@
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.io.IOException;
 import java.util.List;
 
 import org.apache.commons.sanselan.ImageInfo;
-import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.common.IImageMetadata;
 import org.apache.commons.sanselan.util.Debug;
@@ -33,7 +31,7 @@
 
 
 
-    public void test() throws IOException, ImageReadException
+    public void test() throws Exception
     {
         Debug.debug("start");
 
diff --git a/src/test/java/org/apache/commons/sanselan/formats/png/PngTextTest.java b/src/test/java/org/apache/commons/sanselan/formats/png/PngTextTest.java
index c908315..718e2c3 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/png/PngTextTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/png/PngTextTest.java
@@ -20,15 +20,12 @@
 import java.awt.Color;
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.sanselan.ImageFormat;
-import org.apache.commons.sanselan.ImageReadException;
-import org.apache.commons.sanselan.ImageWriteException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.formats.png.PngConstants;
 import org.apache.commons.sanselan.formats.png.PngImageInfo;
@@ -38,8 +35,7 @@
 public class PngTextTest extends PngBaseTest
 {
 
-    public void test() throws IOException, ImageReadException,
-            ImageWriteException
+    public void test() throws Exception
     {
         int width = 1;
         int height = 1;
diff --git a/src/test/java/org/apache/commons/sanselan/formats/png/PngWriteForceTrueColorText.java b/src/test/java/org/apache/commons/sanselan/formats/png/PngWriteForceTrueColorText.java
index c098217..8bec926 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/png/PngWriteForceTrueColorText.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/png/PngWriteForceTrueColorText.java
@@ -30,7 +30,8 @@
 
 public class PngWriteForceTrueColorText extends PngBaseTest {
 
-    public void test() throws Exception {
+    public void test() throws Exception 
+    {
 
         List images = getPngImages();
         for (int i = 0; i < images.size(); i++) {
diff --git a/src/test/java/org/apache/commons/sanselan/formats/png/PngWriteReadTest.java b/src/test/java/org/apache/commons/sanselan/formats/png/PngWriteReadTest.java
index 342a361..a56d905 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/png/PngWriteReadTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/png/PngWriteReadTest.java
@@ -76,8 +76,7 @@
         return result;
     }
 
-    public void test() throws IOException, ImageReadException,
-            ImageWriteException
+    public void test() throws Exception
     {
         int[][] smallBlackPixels = getSimpleRawData(256, 256, 0);
         int[][] singleBlackPixel = getSimpleRawData(1, 1, 0);
@@ -98,7 +97,7 @@
         }
     }
 
-    public void testTransparency() throws IOException, ImageReadException, ImageWriteException
+    public void testTransparency() throws Exception
     {
         // Test for https://issues.apache.org/jira/browse/SANSELAN-52
         int[][] smallAscendingPixels = getAscendingRawData(256, 256);
diff --git a/src/test/java/org/apache/commons/sanselan/formats/tiff/TiffLzwTest.java b/src/test/java/org/apache/commons/sanselan/formats/tiff/TiffLzwTest.java
index c9ad0e1..46f0b14 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/tiff/TiffLzwTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/tiff/TiffLzwTest.java
@@ -31,13 +31,13 @@
 public class TiffLzwTest extends TiffBaseTest implements BinaryConstants
 {
 
-    public void testTrivial() throws IOException
+    public void testTrivial() throws Exception
     {
         byte bytes[] = { 0, };
         compressRoundtripAndValidate(bytes);
     }
 
-    public void testMedium() throws IOException
+    public void testMedium() throws Exception
     {
         int LENGTH = 1024 * 32;
         byte bytes[] = new byte[LENGTH];
diff --git a/src/test/java/org/apache/commons/sanselan/formats/tiff/TiffReadTest.java b/src/test/java/org/apache/commons/sanselan/formats/tiff/TiffReadTest.java
index 395ec8f..dda6169 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/tiff/TiffReadTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/tiff/TiffReadTest.java
@@ -19,11 +19,9 @@
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.io.IOException;
 import java.util.List;
 
 import org.apache.commons.sanselan.ImageInfo;
-import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.common.IImageMetadata;
 import org.apache.commons.sanselan.util.Debug;
@@ -31,7 +29,7 @@
 public class TiffReadTest extends TiffBaseTest
 {
 
-    public void test() throws IOException, ImageReadException
+    public void test() throws Exception
     {
         List images = getTiffImages();
         for (int i = 0; i < images.size(); i++)
diff --git a/src/test/java/org/apache/commons/sanselan/formats/tiff/TiffRoundtripTest.java b/src/test/java/org/apache/commons/sanselan/formats/tiff/TiffRoundtripTest.java
index d16cb17..3c6c894 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/tiff/TiffRoundtripTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/tiff/TiffRoundtripTest.java
@@ -19,23 +19,20 @@
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.sanselan.ImageFormat;
 import org.apache.commons.sanselan.ImageInfo;
-import org.apache.commons.sanselan.ImageReadException;
-import org.apache.commons.sanselan.ImageWriteException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.common.IImageMetadata;
 import org.apache.commons.sanselan.util.Debug;
 
 public class TiffRoundtripTest extends TiffBaseTest {
 
-    public void test() throws IOException, ImageReadException,
-            ImageWriteException {
+    public void test() throws Exception
+    {
         List images = getTiffImages();
         for (int i = 0; i < images.size(); i++) {
             if (i % 10 == 0)
diff --git a/src/test/java/org/apache/commons/sanselan/formats/wbmp/WbmpReadTest.java b/src/test/java/org/apache/commons/sanselan/formats/wbmp/WbmpReadTest.java
index 64d8e95..fc29247 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/wbmp/WbmpReadTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/wbmp/WbmpReadTest.java
@@ -17,13 +17,11 @@
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.sanselan.ImageInfo;
-import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.common.IImageMetadata;
 import org.apache.commons.sanselan.util.Debug;
@@ -31,7 +29,7 @@
 public class WbmpReadTest extends WbmpBaseTest
 {
 
-    public void test() throws IOException, ImageReadException
+    public void test() throws Exception
     {
         Debug.debug("start");
 
diff --git a/src/test/java/org/apache/commons/sanselan/formats/xbm/XbmReadTest.java b/src/test/java/org/apache/commons/sanselan/formats/xbm/XbmReadTest.java
index fae94be..6940852 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/xbm/XbmReadTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/xbm/XbmReadTest.java
@@ -17,13 +17,11 @@
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.sanselan.ImageInfo;
-import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.common.IImageMetadata;
 import org.apache.commons.sanselan.util.Debug;
@@ -31,7 +29,7 @@
 public class XbmReadTest extends XbmBaseTest
 {
 
-    public void test() throws IOException, ImageReadException
+    public void test() throws Exception
     {
         Debug.debug("start");
 
diff --git a/src/test/java/org/apache/commons/sanselan/formats/xmp/XmpDumpTest.java b/src/test/java/org/apache/commons/sanselan/formats/xmp/XmpDumpTest.java
index f1d76a4..b6851a9 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/xmp/XmpDumpTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/xmp/XmpDumpTest.java
@@ -18,10 +18,8 @@
 package org.apache.commons.sanselan.formats.xmp;
 
 import java.io.File;
-import java.io.IOException;
 import java.util.List;
 
-import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.SanselanTest;
 import org.apache.commons.sanselan.util.Debug;
@@ -29,7 +27,7 @@
 public class XmpDumpTest extends SanselanTest
 {
 
-    public void test() throws IOException, ImageReadException
+    public void test() throws Exception
     {
         List images = getTestImages();
         for (int i = 0; i < images.size(); i++)
diff --git a/src/test/java/org/apache/commons/sanselan/formats/xmp/XmpUpdateTest.java b/src/test/java/org/apache/commons/sanselan/formats/xmp/XmpUpdateTest.java
index e9c4794..2a24797 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/xmp/XmpUpdateTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/xmp/XmpUpdateTest.java
@@ -19,14 +19,11 @@
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.sanselan.ImageFormat;
-import org.apache.commons.sanselan.ImageReadException;
-import org.apache.commons.sanselan.ImageWriteException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.SanselanTest;
 import org.apache.commons.sanselan.util.Debug;
@@ -34,8 +31,7 @@
 public class XmpUpdateTest extends SanselanTest
 {
 
-    public void test() throws IOException, ImageReadException,
-            ImageWriteException
+    public void test() throws Exception
     {
         List images = getTestImages();
         for (int i = 0; i < images.size(); i++)
diff --git a/src/test/java/org/apache/commons/sanselan/formats/xpm/XpmReadTest.java b/src/test/java/org/apache/commons/sanselan/formats/xpm/XpmReadTest.java
index 33a8c55..d8edcfa 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/xpm/XpmReadTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/xpm/XpmReadTest.java
@@ -17,13 +17,11 @@
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.sanselan.ImageInfo;
-import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.Sanselan;
 import org.apache.commons.sanselan.common.IImageMetadata;
 import org.apache.commons.sanselan.util.Debug;
@@ -31,7 +29,7 @@
 public class XpmReadTest extends XpmBaseTest
 {
 
-    public void test() throws IOException, ImageReadException
+    public void test() throws Exception
     {
         Debug.debug("start");
 
diff --git a/src/test/java/org/apache/commons/sanselan/roundtrip/RoundtripTest.java b/src/test/java/org/apache/commons/sanselan/roundtrip/RoundtripTest.java
index 339f816..f51fd2d 100644
--- a/src/test/java/org/apache/commons/sanselan/roundtrip/RoundtripTest.java
+++ b/src/test/java/org/apache/commons/sanselan/roundtrip/RoundtripTest.java
@@ -279,8 +279,7 @@
         }
     }
 
-    public void testBitmapRoundtrip() throws IOException, ImageReadException,
-            ImageWriteException
+    public void testBitmapRoundtrip() throws Exception
     {
         BufferedImage testImages[] = { //
 
@@ -312,8 +311,7 @@
         }
     }
 
-    public void testGrayscaleRoundtrip() throws IOException,
-            ImageReadException, ImageWriteException
+    public void testGrayscaleRoundtrip() throws Exception
     {
         BufferedImage testImages[] = { //
 
@@ -349,8 +347,7 @@
         }
     }
 
-    public void testLimitedColorRoundtrip() throws IOException,
-            ImageReadException, ImageWriteException
+    public void testLimitedColorRoundtrip() throws Exception
     {
         BufferedImage testImages[] = { //
 
@@ -383,8 +380,7 @@
         }
     }
 
-    public void testFullColorRoundtrip() throws IOException,
-            ImageReadException, ImageWriteException
+    public void testFullColorRoundtrip() throws Exception
     {
         BufferedImage testImages[] = { //
 
