diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/io/ImageReader.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/io/ImageReader.java
index 231feed..8a224e8 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/io/ImageReader.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/io/ImageReader.java
@@ -7,10 +7,15 @@
  *
  * Contributors:
  *    Junji MAEDA - initial API and implementation
+ *    Kentarou FUKUDA - 514944
  *******************************************************************************/
 package org.eclipse.actf.visualization.internal.engines.lowvision.io;
 
 import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+
+import javax.imageio.ImageIO;
 
 import org.eclipse.actf.visualization.engines.lowvision.LowVisionIOException;
 import org.eclipse.actf.visualization.engines.lowvision.image.ImageException;
@@ -19,8 +24,7 @@
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.ImageUtil;
 
 public class ImageReader {
-	public static BufferedImage readBufferedImage(String _fileName)
-			throws LowVisionIOException {
+	public static BufferedImage readBufferedImage(String _fileName) throws LowVisionIOException {
 		short type = IoUtil.getFileType(_fileName);
 		if (type != IoUtil.TYPE_UNKNOWN)
 			return (readBufferedImage(_fileName, type));
@@ -28,13 +32,17 @@
 			throw new LowVisionIOException("Unknown image format: _fileName"); //$NON-NLS-1$
 	}
 
-	public static BufferedImage readBufferedImage(String _fileName, short _type)
-			throws LowVisionIOException {
+	public static BufferedImage readBufferedImage(String _fileName, short _type) throws LowVisionIOException {
 		BufferedImage bufIm = null;
 		if (_type == IoUtil.TYPE_BMP) {
 			bufIm = BMPReader.readBufferedImage(_fileName);
 		} else if (_type == IoUtil.TYPE_JPEG) {
-			bufIm = JPEGReader.readBufferedImage(_fileName);
+			try {
+				bufIm = ImageIO.read(new File(_fileName));
+			} catch (IOException e) {
+				e.printStackTrace();
+				throw new LowVisionIOException("IO error occurred while decoding JPEG file."); //$NON-NLS-1$
+			}
 		} else if (_type == IoUtil.TYPE_GIF) {
 			bufIm = ImageFileReader.readBufferedImage(_fileName);
 		} else if (_type == IoUtil.TYPE_PNG) {
@@ -52,29 +60,23 @@
 
 	public static IInt2D readInt2D(String _fileName) throws LowVisionIOException {
 		try {
-			return (ImageUtil
-					.bufferedImageToInt2D(readBufferedImage(_fileName)));
+			return (ImageUtil.bufferedImageToInt2D(readBufferedImage(_fileName)));
 		} catch (ImageException e) {
 			e.printStackTrace();
-			throw new LowVisionIOException(
-					"ImageException occurred while converting BufferedImage into Int2D."); //$NON-NLS-1$
+			throw new LowVisionIOException("ImageException occurred while converting BufferedImage into Int2D."); //$NON-NLS-1$
 		}
 	}
 
-	public static IInt2D readInt2D(String _fileName, short _type)
-			throws LowVisionIOException {
+	public static IInt2D readInt2D(String _fileName, short _type) throws LowVisionIOException {
 		try {
-			return (ImageUtil.bufferedImageToInt2D(readBufferedImage(_fileName,
-					_type)));
+			return (ImageUtil.bufferedImageToInt2D(readBufferedImage(_fileName, _type)));
 		} catch (ImageException e) {
 			e.printStackTrace();
-			throw new LowVisionIOException(
-					"ImageException occurred while converting BufferedImage into Int2D."); //$NON-NLS-1$
+			throw new LowVisionIOException("ImageException occurred while converting BufferedImage into Int2D."); //$NON-NLS-1$
 		}
 	}
 
-	public static BinaryImage readBinaryImage(String _fileName)
-			throws LowVisionIOException {
+	public static BinaryImage readBinaryImage(String _fileName) throws LowVisionIOException {
 		short type = IoUtil.getFileType(_fileName);
 		if (type != IoUtil.TYPE_UNKNOWN)
 			return (readBinaryImage(_fileName, type));
@@ -82,12 +84,22 @@
 			throw new LowVisionIOException("Unknown image format."); //$NON-NLS-1$
 	}
 
-	public static BinaryImage readBinaryImage(String _fileName, short _type)
-			throws LowVisionIOException {
+	public static BinaryImage readBinaryImage(String _fileName, short _type) throws LowVisionIOException {
 		if (_type == IoUtil.TYPE_PBM)
 			return (PBMReader.readBinaryImage(_fileName));
 		else
 			throw new LowVisionIOException("Unknown image format."); //$NON-NLS-1$
 	}
 
+	//for test
+	// public static void main(String[] args) {
+	// try {
+	// BufferedImage tmpBI = readBufferedImage("C://test/test.jpg");
+	// ImageWriter.writeBufferedImage(tmpBI, "C://test/test2.jpg");
+	// } catch (Exception e) {
+	// e.printStackTrace();
+	// }
+	//
+	// }
+
 }
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/io/ImageWriter.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/io/ImageWriter.java
index 61ea1cf..ad4165b 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/io/ImageWriter.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/io/ImageWriter.java
@@ -22,8 +22,7 @@
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.Int2D;
 
 public class ImageWriter {
-	public static void writeBufferedImage(BufferedImage _bi, String _fileName)
-			throws LowVisionIOException {
+	public static void writeBufferedImage(BufferedImage _bi, String _fileName) throws LowVisionIOException {
 		short type = IoUtil.getFileType(_fileName);
 		if (type != IoUtil.TYPE_UNKNOWN)
 			writeBufferedImage(_bi, _fileName, type);
@@ -31,25 +30,33 @@
 			throw new LowVisionIOException("Unknown image format."); //$NON-NLS-1$
 	}
 
-	public static void writeBufferedImage(BufferedImage _bi, String _fileName,
-			short _type) throws LowVisionIOException {
+	public static void writeBufferedImage(BufferedImage _bi, String _fileName, short _type)
+			throws LowVisionIOException {
 		if (_type == IoUtil.TYPE_BMP)
 			BMPWriter.writeBufferedImage(_bi, _fileName);
-		else if (_type == IoUtil.TYPE_JPEG)
-			JPEGWriter.writeBufferedImage(_bi, _fileName);
-		else if (_type == IoUtil.TYPE_GIF) {
+		else if (_type == IoUtil.TYPE_JPEG) {
+			boolean result = true;
+			try {
+				File targetFile = new File(_fileName);
+				result = ImageIO.write(_bi, "jpg", targetFile);
+			} catch (IOException e) {
+				e.printStackTrace();
+				throw new LowVisionIOException("IO error occurred while decoding/closing."); //$NON-NLS-1$
+			}
+			if(!result){
+				throw new LowVisionIOException("No appropriate writer is found while writing a JPEG image."); //$NON-NLS-1$
+			}
+		} else if (_type == IoUtil.TYPE_GIF) {
 			File outFile = new File(_fileName);
 			boolean result = true;
 			try {
 				result = ImageIO.write(_bi, "GIF", outFile); //$NON-NLS-1$
 			} catch (IOException ioe) {
 				ioe.printStackTrace();
-				throw new LowVisionIOException(
-						"An error occurs while writing a GIF image."); //$NON-NLS-1$
+				throw new LowVisionIOException("An error occurs while writing a GIF image."); //$NON-NLS-1$
 			}
 			if (!result) {
-				throw new LowVisionIOException(
-						"No appropriate writer is found while writing a GIF image."); //$NON-NLS-1$
+				throw new LowVisionIOException("No appropriate writer is found while writing a GIF image."); //$NON-NLS-1$
 			}
 			// throw new LowVisionIOException("This file format cannot be
 			// written out.");
@@ -60,12 +67,10 @@
 				result = ImageIO.write(_bi, "PNG", outFile); //$NON-NLS-1$
 			} catch (IOException ioe) {
 				ioe.printStackTrace();
-				throw new LowVisionIOException(
-						"An error occurs while writing a PNG image."); //$NON-NLS-1$
+				throw new LowVisionIOException("An error occurs while writing a PNG image."); //$NON-NLS-1$
 			}
 			if (!result) {
-				throw new LowVisionIOException(
-						"No appropriate writer is found while writing a PNG image."); //$NON-NLS-1$
+				throw new LowVisionIOException("No appropriate writer is found while writing a PNG image."); //$NON-NLS-1$
 			}
 			// throw new LowVisionIOException("This file format cannot be
 			// written out.");
@@ -73,19 +78,15 @@
 			throw new LowVisionIOException("Unknown image format."); //$NON-NLS-1$
 	}
 
-	public static void writeInt2D(Int2D _i2d, String _fileName)
-			throws LowVisionIOException {
+	public static void writeInt2D(Int2D _i2d, String _fileName) throws LowVisionIOException {
 		writeBufferedImage(ImageUtil.int2DToBufferedImage(_i2d), _fileName);
 	}
 
-	public static void writeInt2D(Int2D _i2d, String _fileName, short _type)
-			throws LowVisionIOException {
-		writeBufferedImage(ImageUtil.int2DToBufferedImage(_i2d), _fileName,
-				_type);
+	public static void writeInt2D(Int2D _i2d, String _fileName, short _type) throws LowVisionIOException {
+		writeBufferedImage(ImageUtil.int2DToBufferedImage(_i2d), _fileName, _type);
 	}
 
-	public static void writeBinaryImage(BinaryImage _bi, String _fileName)
-			throws LowVisionIOException {
+	public static void writeBinaryImage(BinaryImage _bi, String _fileName) throws LowVisionIOException {
 		short type = IoUtil.getFileType(_fileName);
 		if (type != IoUtil.TYPE_UNKNOWN)
 			writeBinaryImage(_bi, _fileName, type);
@@ -93,8 +94,7 @@
 			throw new LowVisionIOException("Unknown image format."); //$NON-NLS-1$
 	}
 
-	public static void writeBinaryImage(BinaryImage _bi, String _fileName,
-			short _type) throws LowVisionIOException {
+	public static void writeBinaryImage(BinaryImage _bi, String _fileName, short _type) throws LowVisionIOException {
 		if (_type == IoUtil.TYPE_PBM)
 			PBMWriter.writeBinaryImage(_bi, _fileName);
 		else
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/io/JPEGReader.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/io/JPEGReader.java
deleted file mode 100644
index c396ef9..0000000
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/io/JPEGReader.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and Others
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Junji MAEDA - initial API and implementation
- *******************************************************************************/
-package org.eclipse.actf.visualization.internal.engines.lowvision.io;
-
-import java.awt.image.BufferedImage;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import org.eclipse.actf.visualization.engines.lowvision.LowVisionIOException;
-
-import com.sun.image.codec.jpeg.JPEGCodec;
-import com.sun.image.codec.jpeg.JPEGImageDecoder;
-
-public class JPEGReader {
-	public static BufferedImage readBufferedImage(String _fileName)
-			throws LowVisionIOException {
-		FileInputStream fis = null;
-		try {
-			fis = new FileInputStream(_fileName);
-		} catch (FileNotFoundException e) {
-			e.printStackTrace();
-			throw new LowVisionIOException("The file was not found: " //$NON-NLS-1$
-					+ _fileName);
-		}
-
-		JPEGImageDecoder dec = null;
-		try {
-			dec = JPEGCodec.createJPEGDecoder(fis);
-			BufferedImage bi = dec.decodeAsBufferedImage();
-			fis.close();
-			return (bi);
-		} catch (IOException e) {
-			e.printStackTrace();
-			throw new LowVisionIOException(
-					"IO error occurred while decoding JPEG file."); //$NON-NLS-1$
-		}
-	} 
-}
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/io/JPEGWriter.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/io/JPEGWriter.java
deleted file mode 100644
index c73bfed..0000000
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/io/JPEGWriter.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and Others
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Junji MAEDA - initial API and implementation
- *******************************************************************************/
-package org.eclipse.actf.visualization.internal.engines.lowvision.io;
-
-import java.awt.image.BufferedImage;
-import java.io.BufferedOutputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-import org.eclipse.actf.visualization.engines.lowvision.LowVisionIOException;
-
-import com.sun.image.codec.jpeg.JPEGCodec;
-import com.sun.image.codec.jpeg.JPEGImageEncoder;
-
-public class JPEGWriter {
-	public static void writeBufferedImage(BufferedImage _bi, String _fileName)
-			throws LowVisionIOException {
-		BufferedOutputStream bos = null;
-		try {
-			bos = new BufferedOutputStream(new FileOutputStream(_fileName));
-		} catch (FileNotFoundException e) {
-			e.printStackTrace();
-			throw new LowVisionIOException("The file was not found: " //$NON-NLS-1$
-					+ _fileName);
-		}
-
-		try {
-			JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(bos);
-			enc.encode(_bi);
-			bos.close();
-		} catch (IOException e) {
-			e.printStackTrace();
-			throw new LowVisionIOException(
-					"IO error occurred while decoding/closing."); //$NON-NLS-1$
-		}
-	}
-}
