diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/LowVisionType.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/LowVisionType.java
index a58b06c..fedf95b 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/LowVisionType.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/LowVisionType.java
@@ -11,12 +11,15 @@
 
 package org.eclipse.actf.visualization.engines.lowvision;
 
+import org.eclipse.actf.visualization.engines.lowvision.image.PageImageFactory;
 import org.eclipse.actf.visualization.internal.engines.lowvision.operator.CVDOp;
 import org.eclipse.actf.visualization.internal.engines.lowvision.operator.ColorFilterOp;
 import org.eclipse.actf.visualization.internal.engines.lowvision.operator.GlareOp;
 
 /**
  * This class defines low vision simulation type
+ * 
+ * @see PageImageFactory
  */
 public class LowVisionType {
 
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/TargetPage.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/PageEvaluation.java
similarity index 81%
rename from plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/TargetPage.java
rename to plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/PageEvaluation.java
index 09a7c0f..7473a5a 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/TargetPage.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/PageEvaluation.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *    Junji MAEDA - initial API and implementation
+ *    Kentarou FUKUDA - initial API and implementation
  *******************************************************************************/
 
 package org.eclipse.actf.visualization.engines.lowvision;
@@ -39,7 +40,10 @@
 import org.eclipse.actf.visualization.internal.engines.lowvision.problem.LowVisionProblemGroup;
 import org.eclipse.actf.visualization.internal.engines.lowvision.problem.ProblemItemLV;
 
-public class TargetPage {
+/**
+ * Utility class to evaluate accessibility of {@link IPageImage}
+ */
+public class PageEvaluation {
 	private static final int UNSET = -1;
 
 	private IPageImage pageImage = null; // rendered image in browser
@@ -60,21 +64,16 @@
 
 	private String overallRatingImageString = "";
 
-	public TargetPage() {
-	}
-
-	public void disposePageImage() {
-		pageImage.disposeInt2D();
-	}
-
-	public IPageImage getPageImage() {
-		return (pageImage);
-	}
-
-	public void setPageImage(IPageImage _pi) {
-		pageImage = _pi;
+	/**
+	 * Constructor of PageEvaluation utility
+	 * 
+	 * @param _pageImage
+	 *            target {@link IPageImage}
+	 */
+	public PageEvaluation(IPageImage _pageImage) {
+		pageImage = _pageImage;
 		if (pageImage != null) {
-			if (pageImage.isInteriorImageArraySet()) {
+			if (pageImage.hasInteriorImageArraySet()) {
 				try {
 					pageImage.extractCharacters();
 				} catch (ImageException e) {
@@ -94,6 +93,20 @@
 		}
 	}
 
+	/**
+	 * Get target {@link IPageImage}
+	 * 
+	 * @return target {@link IPageImage}
+	 */
+	public IPageImage getPageImage() {
+		return (pageImage);
+	}
+
+	/**
+	 * Get interior image position (e.g., <img> position in HTML page image)
+	 * 
+	 * @return array of {@link ImagePositionInfo}
+	 */
 	public ImagePositionInfo[] getInteriorImagePosition() {
 		if (pageImage == null) {
 			return (null);
@@ -101,6 +114,12 @@
 		return (pageImage.getInteriorImagePosition());
 	}
 
+	/**
+	 * Set interior image position (e.g., <img> position in HTML page image)
+	 * 
+	 * @param infoArray
+	 *            array of {@link ImagePositionInfo}
+	 */
 	public void setInteriorImagePosition(ImagePositionInfo[] infoArray) {
 		if (pageImage != null) {
 			pageImage.setInteriorImagePosition(infoArray);
@@ -114,6 +133,9 @@
 		}
 	}
 
+	/**
+	 * @param _styleMap
+	 */
 	public void setCurrentStyles(Map<String, ICurrentStyles> _styleMap) {
 		Set<String> keySet = _styleMap.keySet();
 		int len = keySet.size();
@@ -130,52 +152,58 @@
 		}
 	}
 
+	/**
+	 * Get allowed foreground colors
+	 * 
+	 * @return array of allowed foreground colors
+	 */
 	public String[] getAllowedForegroundColors() {
 		return (allowedForegroundColors);
 	}
 
+	/**
+	 * Get allowed background colors
+	 * 
+	 * @return array of allowed background colors
+	 */
 	public String[] getAllowedBackgroundColors() {
 		return (allowedBackgroundColors);
 	}
 
+	/**
+	 * Set allowed foreground/background colors
+	 * 
+	 * @param _fg
+	 *            array of allowed foreground colors
+	 * @param _bg
+	 *            array of allowed background colors
+	 */
 	public void setAllowedColors(String[] _fg, String[] _bg) {
 		allowedForegroundColors = _fg;
 		allowedBackgroundColors = _bg;
 	}
 
-	public void setAllowedForegroundColors(String[] _fg) {
-		allowedForegroundColors = _fg;
-	}
-
-	public void setAllowedBackgroundColors(String[] _bg) {
-		allowedBackgroundColors = _bg;
-	}
-
-	public void clearAllowedColors() {
-		allowedForegroundColors = null;
-		allowedBackgroundColors = null;
-	}
-
-	public void clearAllowedForegroundColors() {
-		allowedForegroundColors = null;
-	}
-
-	public void clearAllowedBackgroundColors() {
-		allowedBackgroundColors = null;
-	}
-
-	public List<IProblemItem> check(LowVisionType _lvType, String urlS,
-			int frameId) {
+	/**
+	 * Evaluate accessibility of target {@link IPageImage}
+	 * 
+	 * @param type
+	 *            target low vision type
+	 * @param urlS
+	 *            target's URL
+	 * @param frameId
+	 *            target's frame ID
+	 * @return found accessibility issues as list of {@link IProblemItem}
+	 * @see LowVisionType
+	 */
+	public List<IProblemItem> check(LowVisionType type, String urlS, int frameId) {
 
 		List<IProblemItem> problemList = new ArrayList<IProblemItem>();
 
 		if (pageImage != null) {
 			try {
-				problemList = pageImage.checkCharacters(_lvType, urlS, frameId);
-			} catch (LowVisionProblemException lvpe) {
-				lvpe.printStackTrace();
-			} catch (ImageException ie) {
-				ie.printStackTrace();
+				problemList = pageImage.checkCharacters(type, urlS, frameId);
+			} catch (Exception e) {
+				e.printStackTrace();
 			}
 		}
 
@@ -187,8 +215,8 @@
 				if (curElement == null) {
 					continue;
 				}
-				LowVisionProblem[] curProblemArray = curElement.check(_lvType,
-						this);
+				LowVisionProblem[] curProblemArray = curElement.check(type,
+						allowedForegroundColors, allowedBackgroundColors);
 				int curLen = 0;
 				if (curProblemArray != null) {
 					curLen = curProblemArray.length;
@@ -226,7 +254,7 @@
 		int totalSeverity = 0;
 		for (IProblemItem item : problemList) {
 			if (item instanceof ProblemItemLV) {
-				totalSeverity += ((IProblemItemImage)item).getSeverityLV();
+				totalSeverity += ((IProblemItemImage) item).getSeverityLV();
 			}
 		}
 		overallRatingString = ScoreUtil.getScoreString(totalSeverity);
@@ -237,6 +265,13 @@
 	// Max size of Problem Map image
 	private static final int PROBLEM_MAP_LENGTH = 100;
 
+	/**
+	 * Generate report file for unsupported mode
+	 * 
+	 * @param targetFile
+	 *            target file path to save report
+	 * @throws LowVisionException
+	 */
 	public void unsupportedModeReport(File targetFile)
 			throws LowVisionException {
 
@@ -258,9 +293,21 @@
 		}
 	}
 
-	public void makeAndStoreReport(String _path, String _htmlName,
-			String _imgName, List<IProblemItem> _problemGroupArray)
-			throws LowVisionException {
+	/**
+	 * Generate report file from {@link IProblemItem} list.
+	 * 
+	 * @param _path
+	 *            target path
+	 * @param _htmlName
+	 *            report file name
+	 * @param _imgName
+	 *            report image file name
+	 * @param _problemGroupArray
+	 *            target {@link IProblemItem} list
+	 * @throws LowVisionException
+	 */
+	public void generateReport(String _path, String _htmlName, String _imgName,
+			List<IProblemItem> _problemGroupArray) throws LowVisionException {
 		boolean doMakeProblemMap = true;
 		if (this.pageImage == null)
 			doMakeProblemMap = false;
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/IInt2D.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/IInt2D.java
deleted file mode 100644
index 7a65f12..0000000
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/IInt2D.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 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:
- *    Kentarou FUKUDA - initial API and implementation
- *******************************************************************************/
-package org.eclipse.actf.visualization.engines.lowvision.image;
-
-import java.awt.image.BufferedImage;
-
-import org.eclipse.actf.visualization.engines.lowvision.LowVisionIOException;
-
-public interface IInt2D {
-
-	public abstract int getWidth();
-
-	public abstract int getHeight();
-
-	public abstract BufferedImage toBufferedImage();
-
-	public abstract void writeToBMPFile(String _fileName)
-			throws LowVisionIOException;
-
-	public abstract void writeToBMPFile(String _fileName, int _bitCount)
-			throws LowVisionIOException;
-
-	public abstract void fill(int _color);
-
-	public abstract IInt2D cutMargin(int _m) throws ImageException;
-
-	public int[][] getData();
-
-	public IInt2D deepCopy();
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/IPageImage.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/IPageImage.java
index fa5e502..dee742b 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/IPageImage.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/IPageImage.java
@@ -1,11 +1,12 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and Others
+ * 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
  *    Kentarou FUKUDA - initial API and implementation
  *******************************************************************************/
 package org.eclipse.actf.visualization.engines.lowvision.image;
@@ -14,31 +15,102 @@
 import java.util.List;
 
 import org.eclipse.actf.model.ui.ImagePositionInfo;
+import org.eclipse.actf.visualization.engines.lowvision.LowVisionIOException;
 import org.eclipse.actf.visualization.engines.lowvision.LowVisionType;
 import org.eclipse.actf.visualization.eval.problem.IProblemItem;
 import org.eclipse.actf.visualization.internal.engines.lowvision.problem.LowVisionProblemException;
 
+/**
+ * Interface to store image data used in low vision simulation engine
+ */
 public interface IPageImage {
 
-	public abstract IInt2D getInt2D();
-
+	/**
+	 * Get width of image
+	 * 
+	 * @return width
+	 */
 	public int getWidth();
 
+	/**
+	 * Get height of image
+	 * 
+	 * @return image
+	 */
 	public int getHeight();
 
-	public void disposeInt2D();
-
+	/**
+	 * Extract character position in the image
+	 * 
+	 * @throws ImageException
+	 */
 	public void extractCharacters() throws ImageException;
 
+	/**
+	 * Get interior image position (e.g., <img> position in HTML page image)
+	 * 
+	 * @return array of {@link ImagePositionInfo}
+	 */
 	public ImagePositionInfo[] getInteriorImagePosition();
 
+	/**
+	 * Set interior image position (e.g., <img> position in HTML page image)
+	 * 
+	 * @param infoArray
+	 *            array of {@link ImagePositionInfo}
+	 */
 	public void setInteriorImagePosition(ImagePositionInfo[] infoArray);
 
-	public boolean isInteriorImageArraySet();
+	/**
+	 * Check existence of interior image position information
+	 * 
+	 * @return true if interior image position is specified
+	 */
+	public boolean hasInteriorImageArraySet();
 
-	public List<IProblemItem> checkCharacters(LowVisionType _lvType, String urlS, int frameId)
-			throws ImageException, LowVisionProblemException;
+	/**
+	 * Check accessibility issues inside the image.
+	 * 
+	 * @param type
+	 *            target low vision type
+	 * @param urlS
+	 *            target's URL
+	 * @param frameId
+	 *            target's frame ID
+	 * @return list of accessibility issues ({@link IProblemItem})
+	 * @throws ImageException
+	 * @throws LowVisionProblemException
+	 */
+	public List<IProblemItem> checkCharacters(LowVisionType type, String urlS,
+			int frameId) throws ImageException, LowVisionProblemException;
 
+	/**
+	 * Convert image data into {@link BufferedImage}
+	 * 
+	 * @return image as new {@link BufferedImage}
+	 */
 	public BufferedImage getBufferedImage();
 
+	/**
+	 * Write image to File as Bitmap
+	 * 
+	 * @param _fileName
+	 *            target file path
+	 * @throws LowVisionIOException
+	 */
+	public abstract void writeToBMPFile(String _fileName)
+			throws LowVisionIOException;
+
+	/**
+	 * Write image to File as Bitmap
+	 * 
+	 * @param _fileName
+	 *            target file path
+	 * @param _bitCount
+	 *            depth of color (16 or 24)
+	 * @throws LowVisionIOException
+	 */
+	public abstract void writeToBMPFile(String _fileName, int _bitCount)
+			throws LowVisionIOException;
+
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/ImageDumpUtil.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/ImageDumpUtil.java
deleted file mode 100644
index ce78983..0000000
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/ImageDumpUtil.java
+++ /dev/null
@@ -1,94 +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:
- *    Kentarou FUKUDA - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.actf.visualization.engines.lowvision.image;
-
-import org.eclipse.actf.visualization.internal.engines.lowvision.Messages;
-import org.eclipse.actf.visualization.internal.engines.lowvision.image.Int2D;
-import org.eclipse.actf.visualization.internal.engines.lowvision.image.PageImage;
-import org.eclipse.actf.visualization.internal.engines.lowvision.io.BMPReader;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.MessageBox;
-import org.eclipse.swt.widgets.Shell;
-
-public class ImageDumpUtil {
-
-	private static boolean LV16BIT = false;
-
-	public static synchronized IPageImage joinPageImages(String saveFileName,
-			IPageImage[] targets) {
-		Int2D int2dWhole = new Int2D(0, 0);
-		int iWholeWidth = 0;
-		int iWholeHeight = 0;
-
-		if (targets != null && saveFileName != null) {
-			for (int i = 0; i < targets.length; i++) {
-				IInt2D tmpInt2d;
-				tmpInt2d = targets[i].getInt2D();
-				if (iWholeWidth < tmpInt2d.getWidth())
-					iWholeWidth = tmpInt2d.getWidth();
-				iWholeHeight += tmpInt2d.getHeight();
-			}
-
-			int2dWhole = new Int2D(iWholeWidth, iWholeHeight);
-
-			try {
-
-				int iDrawY = 0;
-				for (int i = 0; i < targets.length; i++) {
-					IInt2D tmpInt2d = targets[i].getInt2D();
-					for (int k = 0; k < tmpInt2d.getHeight(); k++) {
-						System.arraycopy(tmpInt2d.getData()[k], 0,
-								int2dWhole.getData()[iDrawY + k], 0, tmpInt2d.getWidth());
-					}
-					iDrawY += tmpInt2d.getHeight();
-				}
-
-				int2dWhole.writeToBMPFile(saveFileName);
-			} catch (Exception e) {
-				e.printStackTrace();
-			}
-		}
-		return (new PageImage(int2dWhole));
-	}
-
-	static public IPageImage createPageImage(String bmpFileName, Shell _shell) {
-
-		// TODO without file
-		IInt2D int2dWhole = new Int2D(0, 0);
-
-		try {
-			int2dWhole = Int2DFactory.createInt2D(bmpFileName);
-			PageImage result = new PageImage(int2dWhole);
-			int2dWhole = null;
-
-			try {
-				LV16BIT = BMPReader.getBitCount(bmpFileName) == 16;
-			} catch (Exception e2) {
-				// TODO
-				LV16BIT = true;
-			}
-
-			return (result);
-		} catch (Exception e) {
-			MessageBox box1 = new MessageBox(_shell, SWT.OK | SWT.ICON_WARNING);
-			box1.setMessage(Messages.getString("ImageDumpUtil.TrueColor"));
-			box1.open();
-		}
-
-		return (null);
-	}
-
-	public static boolean isLV16BIT() {
-		return LV16BIT;
-	}
-
-}
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/ImageException.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/ImageException.java
index 21ec9d0..b700abf 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/ImageException.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/ImageException.java
@@ -10,13 +10,26 @@
  *******************************************************************************/
 package org.eclipse.actf.visualization.engines.lowvision.image;
 
-public class ImageException extends Exception{
+/**
+ * Exception relates to images used in low vision simulation engine.
+ */
+public class ImageException extends Exception {
 	private static final long serialVersionUID = -3796816367042170808L;
 
-	public ImageException(){
+	/**
+	 * Constructor of Exception
+	 */
+	public ImageException() {
 		super();
 	}
-	public ImageException( String _s ){
-		super(_s);
+
+	/**
+	 * Constructor of Exception
+	 * 
+	 * @param msg
+	 *            exception message
+	 */
+	public ImageException(String msg) {
+		super(msg);
 	}
 }
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/Int2DFactory.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/Int2DFactory.java
deleted file mode 100644
index 84ae512..0000000
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/Int2DFactory.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 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:
- *    Kentarou FUKUDA - initial API and implementation
- *******************************************************************************/
-package org.eclipse.actf.visualization.engines.lowvision.image;
-
-import java.io.InputStream;
-
-import org.eclipse.actf.visualization.engines.lowvision.LowVisionIOException;
-import org.eclipse.actf.visualization.internal.engines.lowvision.image.Int2D;
-import org.eclipse.actf.visualization.internal.engines.lowvision.io.BMPReader;
-
-public class Int2DFactory {
-
-	public static IInt2D createInt2D(int width, int height) {
-		return new Int2D(width, height);
-	}
-
-	public static IInt2D createInt2D(int width, int height, int[][] data)
-			throws ImageException {
-		return new Int2D(width, height, data);
-	}
-
-	public static IInt2D createInt2D(String fileName)
-			throws LowVisionIOException {
-		return (BMPReader.readInt2D(fileName));
-	}
-
-	public static IInt2D createInt2D(InputStream is)
-			throws LowVisionIOException {
-		return (BMPReader.readInt2D(is));
-	}
-
-}
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/PageImageFactory.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/PageImageFactory.java
index e79c90b..11ac7da 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/PageImageFactory.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/engines/lowvision/image/PageImageFactory.java
@@ -10,28 +10,158 @@
  *******************************************************************************/
 package org.eclipse.actf.visualization.engines.lowvision.image;
 
+import java.io.InputStream;
+
 import org.eclipse.actf.visualization.engines.lowvision.LowVisionType;
+import org.eclipse.actf.visualization.internal.engines.lowvision.image.IInt2D;
+import org.eclipse.actf.visualization.internal.engines.lowvision.image.Int2D;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.PageImage;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.SimulatedPageImage;
+import org.eclipse.actf.visualization.internal.engines.lowvision.io.BMPReader;
 
+/**
+ * Factory for {@link IPageImage} instance.
+ */
 public class PageImageFactory {
 
+	/**
+	 * Create empty {@link IPageImage} instance
+	 * 
+	 * @return empty {@link IPageImage} instance
+	 */
 	public static IPageImage createPageImage() {
 		return new PageImage();
 	}
 
-	public static IPageImage createPageImage(IInt2D int2d) {
-		return new PageImage(int2d, true);
+	/**
+	 * Simulate low vision user's view by using {@link LowVisionType}
+	 * configuration and return result as new {@link IPageImage} instance
+	 * 
+	 * @param target
+	 *            target {@link IPageImage}
+	 * @param type
+	 *            target {@link LowVisionType} for simulation
+	 * @return simulation result as new {@link IPageImage} instance
+	 * @throws ImageException
+	 * @see LowVisionType
+	 */
+	public static IPageImage createSimulationPageImage(IPageImage target,
+			LowVisionType type) throws ImageException {
+		return new SimulatedPageImage(target, type);
 	}
 
-	public static IPageImage createPageImage(IInt2D int2d,
+	/**
+	 * Read image data (bitmap) from target file and create new
+	 * {@link IPageImage} instance
+	 * 
+	 * @param bmpFileName
+	 *            target bitmap file name
+	 * @return new {@link IPageImage} instance, or null if not available
+	 */
+	static public IPageImage createPageImage(String bmpFileName) {
+		return createPageImage(bmpFileName, false);
+	}
+
+	/**
+	 * Read image data (bitmap) from target file and create new
+	 * {@link IPageImage} instance. If removeScrollBar flag is true, cut scroll
+	 * bar area from image
+	 * 
+	 * @param bmpFileName
+	 *            target bitmap file name
+	 * @param removeScrollBar
+	 *            if true, cut scroll bar area from image
+	 * @return new {@link IPageImage} instance, or null if not available
+	 */
+	static public IPageImage createPageImage(String bmpFileName,
 			boolean removeScrollBar) {
-		return new PageImage(int2d, removeScrollBar);
+
+		IInt2D int2dWhole = new Int2D(0, 0);
+		try {
+			int2dWhole = (BMPReader.readInt2D(bmpFileName));
+			PageImage result = new PageImage(int2dWhole, removeScrollBar);
+			int2dWhole = null;
+			return (result);
+		} catch (Exception e) {
+			// TODO
+		}
+
+		return (null);
 	}
 
-	public static IPageImage createSimulationPageImage(IPageImage original,
-			LowVisionType type) throws ImageException{
-		return new SimulatedPageImage(original, type);
+	/**
+	 * Read image data (bitmap) from {@link InputStream} and create new
+	 * {@link IPageImage} instance
+	 * 
+	 * @param is
+	 *            target {@link InputStream} of image data
+	 * @return new {@link IPageImage} instance, or null if not available
+	 */
+	static public IPageImage createPageImage(InputStream is) {
+		return createPageImage(is, false);
+	}
+
+	/**
+	 * Read image data (bitmap) from {@link InputStream} and create new
+	 * {@link IPageImage} instance. If removeScrollBar flag is true, cut scroll
+	 * bar area from image
+	 * 
+	 * @param is
+	 *            target {@link InputStream} of image data
+	 * @param removeScrollBar
+	 *            if true, cut scroll bar area from image
+	 * @return new {@link IPageImage} instance, or null if not available
+	 */
+	static public IPageImage createPageImage(InputStream is,
+			boolean removeScrollBar) {
+
+		IInt2D int2dWhole = new Int2D(0, 0);
+		try {
+			int2dWhole = BMPReader.readInt2D(is);
+			PageImage result = new PageImage(int2dWhole, removeScrollBar);
+			int2dWhole = null;
+			return (result);
+		} catch (Exception e) {
+			// TODO
+		}
+
+		return (null);
+	}
+
+	/**
+	 * Join multiple {@link IPageImage} into new {@link IPageImage} instance
+	 * 
+	 * @param targets
+	 *            array of target {@link IPageImage}
+	 * @return new {@link IPageImage} instance
+	 */
+	public static synchronized IPageImage joinPageImages(IPageImage[] targets) {
+		Int2D int2dWhole = new Int2D(0, 0);
+		int iWholeWidth = 0;
+		int iWholeHeight = 0;
+
+		if (targets != null) {
+			for (int i = 0; i < targets.length; i++) {
+				if (iWholeWidth < targets[i].getWidth())
+					iWholeWidth = targets[i].getWidth();
+				iWholeHeight += targets[i].getHeight();
+			}
+
+			int2dWhole = new Int2D(iWholeWidth, iWholeHeight);
+
+			int iDrawY = 0;
+			for (int i = 0; i < targets.length; i++) {
+				//TODO
+				IInt2D tmpInt2d = ((PageImage)targets[i]).getInt2D();
+				for (int k = 0; k < tmpInt2d.getHeight(); k++) {
+					System.arraycopy(tmpInt2d.getData()[k], 0, int2dWhole
+							.getData()[iDrawY + k], 0, tmpInt2d.getWidth());
+				}
+				iDrawY += tmpInt2d.getHeight();
+			}
+
+		}
+		return (new PageImage(int2dWhole));
 	}
 
 }
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/PageElement.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/PageElement.java
index 1718e88..a6d3934 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/PageElement.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/PageElement.java
@@ -18,7 +18,6 @@
 import org.eclipse.actf.model.ui.editor.browser.ICurrentStyles;
 import org.eclipse.actf.visualization.engines.lowvision.LowVisionException;
 import org.eclipse.actf.visualization.engines.lowvision.LowVisionType;
-import org.eclipse.actf.visualization.engines.lowvision.TargetPage;
 import org.eclipse.actf.visualization.engines.lowvision.image.ImageException;
 import org.eclipse.actf.visualization.internal.engines.lowvision.checker.W3CColorChecker;
 import org.eclipse.actf.visualization.internal.engines.lowvision.color.ColorCSS;
@@ -43,22 +42,23 @@
 	// IE fontsize
 	static final String IE_LARGEST_FONT = "16pt";
 	static final double IE_EM_SCALING = 1.33; // "1em" in largest
-												// (experimental)
+	// (experimental)
 	static final double IE_LARGER_SCALING = 1.67; // "larger" in largest
-													// (experimental)
+	// (experimental)
 	static final double IE_SMALLER_SCALING = 1.00; // "smaller" in largest
-													// (experimental)
+	// (experimental)
 
-	//severity for fixed size font (0-1)
+	// severity for fixed size font (0-1)
 	public static final double SEVERITY_FIXED_SIZE_FONT = 0.25;
 	public static final double SEVERITY_SMALL_FONT = 0.25;
-	public static final double SEVERITY_FIXED_SMALL_FONT = SEVERITY_FIXED_SIZE_FONT + SEVERITY_SMALL_FONT;
-	// severity for color problems 
+	public static final double SEVERITY_FIXED_SMALL_FONT = SEVERITY_FIXED_SIZE_FONT
+			+ SEVERITY_SMALL_FONT;
+	// severity for color problems
 	public static final double SEVERITY_PROHIBITED_FOREGROUND_COLOR = 0.5;
 	public static final double SEVERITY_PROHIBITED_BACKGROUND_COLOR = 0.5;
-	public static final double SEVERITY_PROHIBITED_BOTH_COLORS = SEVERITY_PROHIBITED_FOREGROUND_COLOR + SEVERITY_PROHIBITED_BACKGROUND_COLOR;
+	public static final double SEVERITY_PROHIBITED_BOTH_COLORS = SEVERITY_PROHIBITED_FOREGROUND_COLOR
+			+ SEVERITY_PROHIBITED_BACKGROUND_COLOR;
 
-	
 	private static final String DELIM = "/";
 
 	// text check
@@ -165,9 +165,8 @@
 	}
 
 	// _lvType: for LowVision error check
-	// _targetPage: for guideline check
 	public LowVisionProblem[] check(LowVisionType _lvType,
-			TargetPage _targetPage) {
+			String[] allowedFgColors, String[] allowedBgColors) {
 		Vector<LowVisionProblem> problemVec = new Vector<LowVisionProblem>();
 
 		// ignore elements not in the rendered area
@@ -226,27 +225,19 @@
 			problemVec.addElement(sfp);
 		}
 
-		String[] allowedForegroundColors = _targetPage
-				.getAllowedForegroundColors();
-		String[] allowedBackgroundColors = _targetPage
-				.getAllowedBackgroundColors();
 		ProhibitedForegroundColorProblem pfcp = null;
 		ProhibitedBackgroundColorProblem pbcp = null;
 
-		if (allowedForegroundColors != null
-				&& allowedForegroundColors.length > 0) {
+		if (allowedFgColors != null && allowedFgColors.length > 0) {
 			try {
-				pfcp = checkAllowedForegroundColors(_lvType,
-						allowedForegroundColors);
+				pfcp = checkAllowedForegroundColors(_lvType, allowedFgColors);
 			} catch (LowVisionException lve) {
 				lve.printStackTrace();
 			}
 		}
-		if (allowedBackgroundColors != null
-				&& allowedBackgroundColors.length > 0) {
+		if (allowedBgColors != null && allowedBgColors.length > 0) {
 			try {
-				pbcp = checkAllowedBackgroundColors(_lvType,
-						allowedBackgroundColors);
+				pbcp = checkAllowedBackgroundColors(_lvType, allowedBgColors);
 			} catch (LowVisionException lve) {
 				lve.printStackTrace();
 			}
@@ -254,8 +245,7 @@
 		if ((pfcp != null) && (pbcp != null)) {// fg/bg
 			try {
 				problemVec.addElement(new ProhibitedBothColorsProblem(this,
-						_lvType,
-						PageElement.SEVERITY_PROHIBITED_BOTH_COLORS));
+						_lvType, PageElement.SEVERITY_PROHIBITED_BOTH_COLORS));
 			} catch (LowVisionProblemException lvpe) {
 				lvpe.printStackTrace();
 			}
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/character/CharacterMS.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/character/CharacterMS.java
index d4f06be..abc48ef 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/character/CharacterMS.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/character/CharacterMS.java
@@ -11,11 +11,11 @@
 
 package org.eclipse.actf.visualization.internal.engines.lowvision.character;
 
-import org.eclipse.actf.visualization.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.engines.lowvision.image.IPageImage;
 import org.eclipse.actf.visualization.engines.lowvision.image.ImageException;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.ConnectedComponent;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.Container;
+import org.eclipse.actf.visualization.internal.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.Int2D;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.PageComponent;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.Topology;
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/character/CharacterSM.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/character/CharacterSM.java
index b69f69c..1407d0c 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/character/CharacterSM.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/character/CharacterSM.java
@@ -11,11 +11,11 @@
 
 package org.eclipse.actf.visualization.internal.engines.lowvision.character;
 
-import org.eclipse.actf.visualization.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.engines.lowvision.image.IPageImage;
 import org.eclipse.actf.visualization.engines.lowvision.image.ImageException;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.ConnectedComponent;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.Container;
+import org.eclipse.actf.visualization.internal.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.Int2D;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.PageComponent;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.Topology;
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/character/CharacterSS.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/character/CharacterSS.java
index 601f5cb..4826945 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/character/CharacterSS.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/character/CharacterSS.java
@@ -11,11 +11,11 @@
 
 package org.eclipse.actf.visualization.internal.engines.lowvision.character;
 
-import org.eclipse.actf.visualization.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.engines.lowvision.image.IPageImage;
 import org.eclipse.actf.visualization.engines.lowvision.image.ImageException;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.ConnectedComponent;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.Container;
+import org.eclipse.actf.visualization.internal.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.Int2D;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.PageComponent;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.Topology;
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/checker/CharacterChecker.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/checker/CharacterChecker.java
index 22564a6..f8f83c6 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/checker/CharacterChecker.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/checker/CharacterChecker.java
@@ -17,7 +17,6 @@
 import java.util.Vector;
 
 import org.eclipse.actf.visualization.engines.lowvision.LowVisionType;
-import org.eclipse.actf.visualization.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.engines.lowvision.image.ImageException;
 import org.eclipse.actf.visualization.internal.engines.lowvision.DecisionMaker;
 import org.eclipse.actf.visualization.internal.engines.lowvision.character.CharacterMS;
@@ -27,6 +26,7 @@
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.BinaryImage;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.ConnectedComponent;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.Container;
+import org.eclipse.actf.visualization.internal.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.Int2D;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.PageImage;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.Topology;
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/BinaryImage.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/BinaryImage.java
index a7c8c3e..5d84e39 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/BinaryImage.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/BinaryImage.java
@@ -17,7 +17,6 @@
 import java.io.PrintWriter;
 import java.util.Vector;
 
-import org.eclipse.actf.visualization.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.engines.lowvision.image.ImageException;
 
 /*
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/ColorHistogram.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/ColorHistogram.java
index 2f83e1d..df87724 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/ColorHistogram.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/ColorHistogram.java
@@ -17,7 +17,6 @@
 import java.util.Comparator;
 import java.util.HashMap;
 
-import org.eclipse.actf.visualization.engines.lowvision.image.IInt2D;
 
 
 public class ColorHistogram {
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/IInt2D.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/IInt2D.java
new file mode 100644
index 0000000..4d0c4a1
--- /dev/null
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/IInt2D.java
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * 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
+ *    Kentarou FUKUDA - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.actf.visualization.internal.engines.lowvision.image;
+
+import java.awt.image.BufferedImage;
+
+import org.eclipse.actf.visualization.engines.lowvision.LowVisionIOException;
+import org.eclipse.actf.visualization.engines.lowvision.image.ImageException;
+
+/**
+ * Interface to store image data as 2D integer array. <br>
+ * data[y][x] = BufferdImage.TYPE_INT_RGB (null, R, G, B)<br>
+ * data[0][0] is top left
+ */
+public interface IInt2D {
+
+	/**
+	 * Get width of image
+	 * 
+	 * @return width
+	 */
+	public abstract int getWidth();
+
+	/**
+	 * Get height of image
+	 * 
+	 * @return height
+	 */
+	public abstract int getHeight();
+
+	/**
+	 * Convert image data into {@link BufferedImage}
+	 * 
+	 * @return image as {@link BufferedImage}
+	 */
+	public abstract BufferedImage toBufferedImage();
+
+	/**
+	 * Write image to File as Bitmap
+	 * 
+	 * @param _fileName
+	 *            target file path
+	 * @throws LowVisionIOException
+	 */
+	public abstract void writeToBMPFile(String _fileName)
+			throws LowVisionIOException;
+
+	/**
+	 * Write image to File as Bitmap
+	 * 
+	 * @param _fileName
+	 *            target file path
+	 * @param _bitCount
+	 *            depth of color (16 or 24)
+	 * @throws LowVisionIOException
+	 */
+	public abstract void writeToBMPFile(String _fileName, int _bitCount)
+			throws LowVisionIOException;
+
+	/**
+	 * Fill image data with specified color.<br>
+	 * (BufferdImage.TYPE_INT_RGB (null, R, G, B))
+	 * 
+	 * @param _color
+	 * @see BufferedImage
+	 */
+	public abstract void fill(int _color);
+
+	/**
+	 * Cut margin pixels and return as new {@link IInt2D}
+	 * 
+	 * @param _m
+	 *            target margin
+	 * @return new {@link IInt2D}
+	 * @throws ImageException
+	 */
+	public abstract IInt2D cutMargin(int _m) throws ImageException;
+
+	/**
+	 * Get image data as 2D integer array. Color data is stored as integer
+	 * (BufferdImage.TYPE_INT_RGB (null, R, G, B))
+	 * 
+	 * @return image data
+	 */
+	public int[][] getData();
+
+	/**
+	 * Copy image data and return as new {@link IInt2D}
+	 * @return deep copied {@link IInt2D}
+	 */
+	public IInt2D deepCopy();
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/ImageUtil.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/ImageUtil.java
index 9b31e92..1e44c88 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/ImageUtil.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/ImageUtil.java
@@ -16,7 +16,6 @@
 import java.io.PrintStream;
 import java.io.PrintWriter;
 
-import org.eclipse.actf.visualization.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.engines.lowvision.image.ImageException;
 
 public class ImageUtil {
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/Int2D.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/Int2D.java
index 7f6327b..3a71a22 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/Int2D.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/Int2D.java
@@ -16,7 +16,6 @@
 import java.awt.image.WritableRaster;
 
 import org.eclipse.actf.visualization.engines.lowvision.LowVisionIOException;
-import org.eclipse.actf.visualization.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.engines.lowvision.image.ImageException;
 import org.eclipse.actf.visualization.internal.engines.lowvision.io.BMPWriter;
 
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/PageImage.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/PageImage.java
index f77b54e..dfb900d 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/PageImage.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/PageImage.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *    Junji MAEDA - initial API and implementation
+ *    Kentarou FUKUDA - initial API and implementation
  *******************************************************************************/
 package org.eclipse.actf.visualization.internal.engines.lowvision.image;
 
@@ -18,7 +19,6 @@
 import org.eclipse.actf.model.ui.ImagePositionInfo;
 import org.eclipse.actf.visualization.engines.lowvision.LowVisionIOException;
 import org.eclipse.actf.visualization.engines.lowvision.LowVisionType;
-import org.eclipse.actf.visualization.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.engines.lowvision.image.IPageImage;
 import org.eclipse.actf.visualization.engines.lowvision.image.ImageException;
 import org.eclipse.actf.visualization.eval.problem.IProblemItem;
@@ -51,10 +51,10 @@
 	private static boolean REMOVE_SCROLL_BAR_AT_BOTTOM = false;
 
 	// TODO relative value?
-	// the color which have only small portions in image is not handled as text candidate
+	// the color which have only small portions in image is not handled as text
+	// candidate
 	private static int THRESHOLD_MIN_OCCURRENCES = 300;
 
-	
 	// private static final boolean DO_CHAR_TEST = false;
 
 	public IInt2D pixel = null;
@@ -175,10 +175,6 @@
 		return (pixel);
 	}
 
-	public void disposeInt2D() {
-		pixel = new Int2D(0, 0);
-	}
-
 	public int getNumContainers() {
 		return (numContainers);
 	}
@@ -217,7 +213,7 @@
 		}
 	}
 
-	public boolean isInteriorImageArraySet() {
+	public boolean hasInteriorImageArraySet() {
 		if (interiorImageArray == null || interiorImageArray.length == 0) {
 			return (false);
 		} else {
@@ -1000,4 +996,13 @@
 		}
 		return (smVec);
 	}
+
+	public void writeToBMPFile(String name) throws LowVisionIOException {
+		pixel.writeToBMPFile(name);
+	}
+
+	public void writeToBMPFile(String name, int count)
+			throws LowVisionIOException {
+		pixel.writeToBMPFile(name, count);
+	}
 }
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/PageImageDebugUtil.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/PageImageDebugUtil.java
index 9621e26..faeac2b 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/PageImageDebugUtil.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/image/PageImageDebugUtil.java
@@ -10,7 +10,6 @@
  *******************************************************************************/
 package org.eclipse.actf.visualization.internal.engines.lowvision.image;
 
-import org.eclipse.actf.visualization.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.engines.lowvision.image.ImageException;
 import org.eclipse.actf.visualization.internal.engines.lowvision.DebugUtil;
 import org.eclipse.actf.visualization.internal.engines.lowvision.character.CharacterSS;
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 13c367e..f7ccb2e 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
@@ -13,9 +13,9 @@
 import java.awt.image.BufferedImage;
 
 import org.eclipse.actf.visualization.engines.lowvision.LowVisionIOException;
-import org.eclipse.actf.visualization.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.engines.lowvision.image.ImageException;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.BinaryImage;
+import org.eclipse.actf.visualization.internal.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.ImageUtil;
 
 public class ImageReader {
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/io/ImageReader14.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/io/ImageReader14.java
index d5a9e45..5269a19 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/io/ImageReader14.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/io/ImageReader14.java
@@ -17,9 +17,9 @@
 import javax.imageio.ImageIO;
 
 import org.eclipse.actf.visualization.engines.lowvision.LowVisionIOException;
-import org.eclipse.actf.visualization.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.engines.lowvision.image.ImageException;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.BinaryImage;
+import org.eclipse.actf.visualization.internal.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.ImageUtil;
 
 public class ImageReader14 {
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/operator/CVDOp.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/operator/CVDOp.java
index 9030057..11cbbc4 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/operator/CVDOp.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/operator/CVDOp.java
@@ -16,11 +16,11 @@
 import java.util.HashMap;
 
 import org.eclipse.actf.visualization.engines.lowvision.LowVisionException;
-import org.eclipse.actf.visualization.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.internal.engines.lowvision.color.ColorException;
 import org.eclipse.actf.visualization.internal.engines.lowvision.color.ColorIRGB;
 import org.eclipse.actf.visualization.internal.engines.lowvision.color.ColorSRGB;
 import org.eclipse.actf.visualization.internal.engines.lowvision.color.ColorYXY;
+import org.eclipse.actf.visualization.internal.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.Int2D;
 
 /*
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/operator/ColorFilterOp.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/operator/ColorFilterOp.java
index 3cae4f3..67a4a22 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/operator/ColorFilterOp.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/operator/ColorFilterOp.java
@@ -16,7 +16,7 @@
 import java.util.HashMap;
 
 import org.eclipse.actf.visualization.engines.lowvision.LowVisionException;
-import org.eclipse.actf.visualization.engines.lowvision.image.IInt2D;
+import org.eclipse.actf.visualization.internal.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.Int2D;
 
 /*
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/problem/ImageColorProblem.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/problem/ImageColorProblem.java
index 0ec0c8a..d44accd 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/problem/ImageColorProblem.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/problem/ImageColorProblem.java
@@ -12,10 +12,10 @@
 package org.eclipse.actf.visualization.internal.engines.lowvision.problem;
 
 import org.eclipse.actf.visualization.engines.lowvision.LowVisionType;
-import org.eclipse.actf.visualization.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.internal.engines.lowvision.Messages;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.BinaryImage;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.ConnectedComponent;
+import org.eclipse.actf.visualization.internal.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.Int2D;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.InteriorImage;
 import org.eclipse.actf.visualization.internal.engines.lowvision.image.InteriorImageComponent;
diff --git a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/eval/CheckResultLowVision.java b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/eval/CheckResultLowVision.java
index e397e65..5c2c5cd 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/eval/CheckResultLowVision.java
+++ b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/eval/CheckResultLowVision.java
@@ -37,7 +37,7 @@
             frameOffset[0] = 0;
 
             for (int i = 1; i < framePageImages.length; i++) {
-                frameOffset[i] = frameOffset[i - 1] + framePageImages[i - 1].getInt2D().getHeight();
+                frameOffset[i] = frameOffset[i - 1] + framePageImages[i - 1].getHeight();
             }
 
             for (Iterator<IProblemItem> i = getProblemList().iterator(); i.hasNext();) {
diff --git a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/internal/PartControlLowVision.java b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/internal/PartControlLowVision.java
index 7f9e4d6..84b402e 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/internal/PartControlLowVision.java
+++ b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/internal/PartControlLowVision.java
@@ -28,9 +28,9 @@
 import org.eclipse.actf.model.ui.editor.browser.IWebBrowserACTF;
 import org.eclipse.actf.model.ui.util.ModelServiceUtils;
 import org.eclipse.actf.visualization.IVisualizationConst;
-import org.eclipse.actf.visualization.engines.lowvision.TargetPage;
+import org.eclipse.actf.visualization.engines.lowvision.PageEvaluation;
 import org.eclipse.actf.visualization.engines.lowvision.image.IPageImage;
-import org.eclipse.actf.visualization.engines.lowvision.image.ImageDumpUtil;
+import org.eclipse.actf.visualization.engines.lowvision.image.PageImageFactory;
 import org.eclipse.actf.visualization.eval.problem.IProblemItem;
 import org.eclipse.actf.visualization.lowvision.LowVisionVizPlugin;
 import org.eclipse.actf.visualization.lowvision.eval.CheckResultLowVision;
@@ -109,7 +109,7 @@
 
 		String address;
 
-		TargetPage targetPage;
+		PageEvaluation targetPage;
 
 		private List<IProblemItem> lowvisionProblemList;
 
@@ -120,8 +120,7 @@
 
 		public void run() {
 			try {
-				targetPage = new TargetPage();
-				targetPage.setPageImage(framePageImage[frameId]);
+				targetPage = new PageEvaluation(framePageImage[frameId]);
 				targetPage
 						.setInteriorImagePosition(imageInfoInHtmlArray[frameId]);
 				targetPage.setCurrentStyles(styleInfoArray.get(frameId));
@@ -146,7 +145,7 @@
 						reportImageFile = LowVisionVizPlugin.createTempFile(
 								PREFIX_REPORT, SUFFIX_BMP);
 						targetPage
-								.makeAndStoreReport(reportFile.getParent(),
+								.generateReport(reportFile.getParent(),
 										reportFile.getName(), reportImageFile
 												.getName(),
 										lowvisionProblemList);
@@ -169,12 +168,6 @@
 			}
 		}
 
-		public void disposeTargetPage() {
-			if (targetPage != null) {
-				targetPage.disposePageImage();
-			}
-		}
-
 	}
 
 	// TODO use event
@@ -237,9 +230,6 @@
 					_shell.setCursor(null);
 					_isInSimulate = false;
 
-					for (ExtractCheckThread tmpT : checkThreads) {
-						tmpT.disposeTargetPage();
-					}
 					checkThreads = new Vector<ExtractCheckThread>();
 				}
 			});
@@ -335,9 +325,11 @@
 		frameUrl = new String[0];
 		int frameSize = 0;
 		if (webBrowser != null) {
-			if (lowVisionView.isWholepage()) {
-				frameUrl = LowVisionUtil.frameAnalyze(webBrowser);
-			}
+
+			// TODO frame support
+			// if (lowVisionView.isWholepage()) {
+			// frameUrl = LowVisionUtil.frameAnalyze(webBrowser);
+			// }
 
 			frameSize = frameUrl.length;
 			if (frameSize == 0) {
@@ -396,7 +388,7 @@
 
 			framePageImage[frameId] =
 			// partLeftWebBrowser.dumpWebBrowserImg(
-			ImageDumpUtil.createPageImage(dumpImageFile, _shell);
+			PageImageFactory.createPageImage(dumpImageFile);
 			// System.out.println("finish dump");
 
 			IWebBrowserACTF browser = null;
@@ -470,20 +462,7 @@
 	private void doSimulateAfterHalf() {
 		IPageImage pageImageWhole;
 		if (framePageImage.length > 1) {
-			File mergedImageFile;
-			try {
-				mergedImageFile = LowVisionVizPlugin.createTempFile(
-						PREFIX_MERGED_IMAGE, SUFFIX_BMP);
-				pageImageWhole = ImageDumpUtil.joinPageImages(mergedImageFile
-						.getAbsolutePath(), //$NON-NLS-1$
-						framePageImage);
-				if (mergedImageFile != null) {
-					mergedImageFile.delete();
-				}
-			} catch (Exception e) {
-				e.printStackTrace();
-				pageImageWhole = framePageImage[0];
-			}
+			pageImageWhole = PageImageFactory.joinPageImages(framePageImage);
 		} else {
 			pageImageWhole = framePageImage[0];
 		}
diff --git a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/preferences/LowVisionPreferencePage.java b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/preferences/LowVisionPreferencePage.java
index 20660bc..46500eb 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/preferences/LowVisionPreferencePage.java
+++ b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/preferences/LowVisionPreferencePage.java
@@ -14,9 +14,7 @@
 import java.io.File;
 
 import org.eclipse.actf.visualization.IVisualizationConst;
-import org.eclipse.actf.visualization.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.engines.lowvision.image.IPageImage;
-import org.eclipse.actf.visualization.engines.lowvision.image.Int2DFactory;
 import org.eclipse.actf.visualization.engines.lowvision.image.PageImageFactory;
 import org.eclipse.actf.visualization.lowvision.LowVisionVizPlugin;
 import org.eclipse.actf.visualization.lowvision.ui.internal.Messages;
@@ -163,24 +161,29 @@
 
 	private void initSampleImage() {
 
-		IInt2D int2D = null;
+		// IInt2D int2D = null;
 
 		Bundle lvBundle = LowVisionVizPlugin.getDefault().getBundle();
 
 		try {
-			int2D = Int2DFactory
-					.createInt2D(FileLocator.openStream(lvBundle, new Path(
+			// int2D = Int2DFactory
+			// .createInt2D(FileLocator.openStream(lvBundle, new Path(
+			// "vizResources/images/LowVisionSample.bmp"), false));
+			this._samplePageImage = PageImageFactory
+					.createPageImage(FileLocator.openStream(lvBundle, new Path(
 							"vizResources/images/LowVisionSample.bmp"), false));
 		} catch (Exception e) {
-			e.printStackTrace();
-		}
-
-		if (null != int2D) {
-			this._samplePageImage = PageImageFactory.createPageImage(int2D, false);
-		} else {
+			// e.printStackTrace();
 			this._samplePageImage = PageImageFactory.createPageImage();
 		}
 
+		// if (null != int2D) {
+		// this._samplePageImage = PageImageFactory.createPageImage(int2D,
+		// false);
+		// } else {
+		// this._samplePageImage = PageImageFactory.createPageImage();
+		// }
+
 		_sampleImageData = new ImageData[0];
 
 		try {
diff --git a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/util/SimulateLowVision.java b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/util/SimulateLowVision.java
index eea1f57..e3cef1c 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/util/SimulateLowVision.java
+++ b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/util/SimulateLowVision.java
@@ -12,11 +12,8 @@
 package org.eclipse.actf.visualization.lowvision.util;
 
 import org.eclipse.actf.visualization.engines.lowvision.LowVisionIOException;
-import org.eclipse.actf.visualization.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.engines.lowvision.image.IPageImage;
-import org.eclipse.actf.visualization.engines.lowvision.image.ImageDumpUtil;
 import org.eclipse.actf.visualization.engines.lowvision.image.ImageException;
-import org.eclipse.actf.visualization.engines.lowvision.image.Int2DFactory;
 import org.eclipse.actf.visualization.engines.lowvision.image.PageImageFactory;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.ImageData;
@@ -27,21 +24,17 @@
 
 	// separated from Lowvision part
 
-	public static synchronized IInt2D getSimulatedInt2D(IPageImage target,
-			ParamLowVision currentSetting) {
-
-		IInt2D result = Int2DFactory.createInt2D(0, 0);
+	private static synchronized IPageImage getSimulatedPageImage(
+			IPageImage target, ParamLowVision currentSetting) {
 
 		try {
-			IPageImage simulatedPageImage = PageImageFactory
-					.createSimulationPageImage(target, currentSetting
-							.getLowVisionType());
-			result = simulatedPageImage.getInt2D();
+			return PageImageFactory.createSimulationPageImage(target,
+					currentSetting.getLowVisionType());
 		} catch (ImageException ie) {
 			ie.printStackTrace();
 		}
 
-		return result;
+		return PageImageFactory.createPageImage();
 	}
 
 	public static synchronized ImageData[] doSimulate(IPageImage target,
@@ -51,12 +44,8 @@
 
 		// TODO use memory
 		try {
-			IInt2D int2d_sim = getSimulatedInt2D(target, currentSetting);
-			if (ImageDumpUtil.isLV16BIT()) {
-				int2d_sim.writeToBMPFile(fileName, 16);
-			} else {
-				int2d_sim.writeToBMPFile(fileName);
-			}
+			getSimulatedPageImage(target, currentSetting).writeToBMPFile(
+					fileName);
 			ImageLoader loaderAfterSimulate = new ImageLoader();
 			imageDataArray = loaderAfterSimulate.load(fileName);
 		} catch (LowVisionIOException lvioe) {
@@ -72,18 +61,8 @@
 		Image image = null;
 
 		try {
-			IPageImage simulatedPageImage = PageImageFactory.createSimulationPageImage(target, currentSetting
-					.getLowVisionType());
-			IInt2D int2d_sim = simulatedPageImage.getInt2D();
-
-			// TODO do not use file
-
-			if (ImageDumpUtil.isLV16BIT()) {
-				int2d_sim.writeToBMPFile(fileS, 16);
-			} else {
-				int2d_sim.writeToBMPFile(fileS);
-			}
-
+			PageImageFactory.createSimulationPageImage(target,
+					currentSetting.getLowVisionType()).writeToBMPFile(fileS);
 			image = new Image(display, fileS);
 
 		} catch (ImageException ie) {
@@ -95,17 +74,4 @@
 		return image;
 	}
 
-	public static IPageImage getPageImage(String fileName, boolean withoutFrame) {
-
-		IPageImage pageImage = null;
-
-		try {
-			IInt2D int2d = Int2DFactory.createInt2D(fileName);
-			pageImage = PageImageFactory.createPageImage(int2d, withoutFrame);
-		} catch (LowVisionIOException lvioe) {
-			lvioe.printStackTrace();
-		}
-
-		return pageImage;
-	}
 }
diff --git a/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/ui/internal/PartControlRoom.java b/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/ui/internal/PartControlRoom.java
index 3d58dae..9154aa7 100644
--- a/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/ui/internal/PartControlRoom.java
+++ b/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/ui/internal/PartControlRoom.java
@@ -20,7 +20,7 @@
 import org.eclipse.actf.model.ui.util.ModelServiceUtils;
 import org.eclipse.actf.visualization.IVisualizationConst;
 import org.eclipse.actf.visualization.engines.lowvision.image.IPageImage;
-import org.eclipse.actf.visualization.engines.lowvision.image.ImageDumpUtil;
+import org.eclipse.actf.visualization.engines.lowvision.image.PageImageFactory;
 import org.eclipse.actf.visualization.presentation.eval.CheckResultPresentation;
 import org.eclipse.actf.visualization.presentation.internal.RoomPlugin;
 import org.eclipse.actf.visualization.presentation.util.ParamRoom;
@@ -118,8 +118,7 @@
 					modelService);
 			imgCreator.getScreenImageAsBMP(dumpImageFile, false);
 
-			targetPageImage = ImageDumpUtil.createPageImage(dumpImageFile,
-					_shell);
+			targetPageImage = PageImageFactory.createPageImage(dumpImageFile);
 
 			if (targetPageImage != null) {
 
diff --git a/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/util/SimulateRoom.java b/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/util/SimulateRoom.java
index a8673c9..b947af6 100644
--- a/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/util/SimulateRoom.java
+++ b/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/util/SimulateRoom.java
@@ -11,11 +11,8 @@
 package org.eclipse.actf.visualization.presentation.util;
 
 import org.eclipse.actf.visualization.engines.lowvision.LowVisionIOException;
-import org.eclipse.actf.visualization.engines.lowvision.image.IInt2D;
 import org.eclipse.actf.visualization.engines.lowvision.image.IPageImage;
-import org.eclipse.actf.visualization.engines.lowvision.image.ImageDumpUtil;
 import org.eclipse.actf.visualization.engines.lowvision.image.ImageException;
-import org.eclipse.actf.visualization.engines.lowvision.image.Int2DFactory;
 import org.eclipse.actf.visualization.engines.lowvision.image.PageImageFactory;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.ImageData;
@@ -24,21 +21,17 @@
 
 public class SimulateRoom {
 
-	public static synchronized IInt2D getSimulatedInt2D(IPageImage target,
-			ParamRoom currentSetting) {
-
-		IInt2D result = Int2DFactory.createInt2D(0, 0);
+	private static synchronized IPageImage getSimulatedPageImage(
+			IPageImage target, ParamRoom currentSetting) {
 
 		try {
-			IPageImage simulatedPageImage = PageImageFactory
-					.createSimulationPageImage(target, currentSetting
-							.getLowVisionType());
-			result = simulatedPageImage.getInt2D();
+			return PageImageFactory.createSimulationPageImage(target,
+					currentSetting.getLowVisionType());
 		} catch (ImageException ie) {
-			ie.printStackTrace();
+			// ie.printStackTrace();
 		}
 
-		return result;
+		return PageImageFactory.createPageImage();
 	}
 
 	public static synchronized ImageData[] doSimulate(IPageImage target,
@@ -48,12 +41,8 @@
 
 		// TODO use memory
 		try {
-			IInt2D int2d_sim = getSimulatedInt2D(target, currentSetting);
-			if (ImageDumpUtil.isLV16BIT()) {
-				int2d_sim.writeToBMPFile(fileName, 16);
-			} else {
-				int2d_sim.writeToBMPFile(fileName);
-			}
+			getSimulatedPageImage(target, currentSetting).writeToBMPFile(
+					fileName);
 			ImageLoader loaderAfterSimulate = new ImageLoader();
 			imageDataArray = loaderAfterSimulate.load(fileName);
 		} catch (LowVisionIOException lvioe) {
@@ -72,16 +61,9 @@
 			IPageImage simulatedPageImage = PageImageFactory
 					.createSimulationPageImage(target, currentSetting
 							.getLowVisionType());
-			IInt2D int2d_sim = simulatedPageImage.getInt2D();
-
-			// TODO use memory
-
-			if (ImageDumpUtil.isLV16BIT()) {
-				int2d_sim.writeToBMPFile(fileS, 16);
-			} else {
-				int2d_sim.writeToBMPFile(fileS);
-			}
-
+			simulatedPageImage.writeToBMPFile(fileS);
+			// IInt2D int2d_sim = simulatedPageImage.getInt2D();
+			// int2d_sim.writeToBMPFile(fileS);
 			image = new Image(display, fileS);
 
 		} catch (ImageException ie) {
@@ -93,17 +75,4 @@
 		return image;
 	}
 
-	public static IPageImage getPageImage(String fileName, boolean withoutFrame) {
-
-		IPageImage pageImage = null;
-
-		try {
-			IInt2D int2d = Int2DFactory.createInt2D(fileName);
-			pageImage = PageImageFactory.createPageImage(int2d, withoutFrame);
-		} catch (LowVisionIOException lvioe) {
-			lvioe.printStackTrace();
-		}
-
-		return pageImage;
-	}
 }
