diff --git a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/NodeInfoCreator.java b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/NodeInfoCreator.java
index 580fdc8..3216284 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/NodeInfoCreator.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/NodeInfoCreator.java
@@ -169,12 +169,12 @@
 								if (prevNode.getNodeName().equals("img")) {
 									prob.setTargetNode(mapData
 											.getOrigNode(prevNode));
-									prob.setTargetStringForHPB(prevText);
+									prob.setTargetStringForExport(prevText);
 									problems.add(prob);
 								} else if (curNode.getNodeName().equals("img")) {
 									prob.setTargetNode(mapData
 											.getOrigNode(curNode));
-									prob.setTargetStringForHPB(curText);
+									prob.setTargetStringForExport(curText);
 									problems.add(prob);
 								} else {
 									// TODO ALERT_REDUNDANT_TEXT
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/LowVisionProblemConverter.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/LowVisionProblemConverter.java
index d2c926a..27e6b21 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/LowVisionProblemConverter.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/LowVisionProblemConverter.java
@@ -41,11 +41,11 @@
 
 
             tmp.setFrameId(frameId);
-            tmp.setFrameUrlS(urlS);
+            tmp.setFrameUrl(urlS);
 
             tmp.setSeverityLV(target[i].getIntProbability());//TODO
-            tmp.setForegroundS(getLVProblemColorString(target[i], true));
-            tmp.setBackgroundS(getLVProblemColorString(target[i], false));
+            tmp.setForeground(getLVProblemColorString(target[i], true));
+            tmp.setBackground(getLVProblemColorString(target[i], false));
             tmp.setX(target[i].getX());
             tmp.setY(target[i].getY());
             tmp.setWidth(target[i].getWidth());
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/problem/ProblemItemLV.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/problem/ProblemItemLV.java
index 3be6143..b804388 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/problem/ProblemItemLV.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/problem/ProblemItemLV.java
@@ -72,7 +72,7 @@
 	 * 
 	 * @see org.eclipse.actf.visualization.eval.problem.IProblemItemImage#getBackgroundS()
 	 */
-	public String getBackgroundS() {
+	public String getBackground() {
 		return backgroundS;
 	}
 
@@ -81,7 +81,7 @@
 	 * 
 	 * @see org.eclipse.actf.visualization.eval.problem.IProblemItemImage#getForegroundS()
 	 */
-	public String getForegroundS() {
+	public String getForeground() {
 		return foregroundS;
 	}
 
@@ -108,7 +108,7 @@
 	 * 
 	 * @see org.eclipse.actf.visualization.eval.problem.IProblemItemImage#getFrameUrlS()
 	 */
-	public String getFrameUrlS() {
+	public String getFrameUrl() {
 		return frameUrlS;
 	}
 
@@ -130,15 +130,15 @@
 	 * 
 	 * @see org.eclipse.actf.visualization.eval.problem.IProblemItemImage#getImageIcon()
 	 */
-	public Image getImageIcon() {
+	public Image getIconImage() {
 		// return imageIcon;
 		String evalPluginID = EvaluationUtil.PLUGIN_ID;
 		if (isCanHighlight()) {
 			switch (iconId) {
-			case ICON_IRO:
+			case ICON_COLOR:
 				return AbstractUIPlugin.imageDescriptorFromPlugin(evalPluginID,
 						"icons/lowvision/HiIro21.gif").createImage();
-			case ICON_BOKE:
+			case ICON_BLUR:
 				return AbstractUIPlugin.imageDescriptorFromPlugin(evalPluginID,
 						"icons/lowvision/HiBoke21.gif").createImage();
 			default:
@@ -146,10 +146,10 @@
 			}
 		} else {
 			switch (iconId) {
-			case ICON_IRO:
+			case ICON_COLOR:
 				return AbstractUIPlugin.imageDescriptorFromPlugin(evalPluginID,
 						"icons/lowvision/ErrIro21.gif").createImage();
-			case ICON_BOKE:
+			case ICON_BLUR:
 				return AbstractUIPlugin.imageDescriptorFromPlugin(evalPluginID,
 						"icons/lowvision/ErrBoke21.gif").createImage();
 			default:
@@ -163,13 +163,13 @@
 	 * 
 	 * @see org.eclipse.actf.visualization.eval.problem.IProblemItemImage#getImageIconTooltip()
 	 */
-	public String getImageIconTooltip() {
+	public String getIconTooltip() {
 		// return imageIcon;
 		if (isCanHighlight()) {
 			switch (iconId) {
-			case ICON_IRO:
+			case ICON_COLOR:
 				return ERR_IRO + " " + ERR_HIGHLIGHT;
-			case ICON_BOKE:
+			case ICON_BLUR:
 				return ERR_BOKE + " " + ERR_HIGHLIGHT;
 			default:
 				System.out.println("Icon not found: " + iconId);
@@ -178,9 +178,9 @@
 			}
 		} else {
 			switch (iconId) {
-			case ICON_IRO:
+			case ICON_COLOR:
 				return ERR_IRO;
-			case ICON_BOKE:
+			case ICON_BLUR:
 				return ERR_BOKE;
 			default:
 				System.out.println("Icon not found: " + iconId);
@@ -214,11 +214,11 @@
 		this.area = area;
 	}
 
-	public void setBackgroundS(String backgroundS) {
+	public void setBackground(String backgroundS) {
 		this.backgroundS = backgroundS;
 	}
 
-	public void setForegroundS(String foregroundS) {
+	public void setForeground(String foregroundS) {
 		this.foregroundS = foregroundS;
 	}
 
@@ -230,7 +230,7 @@
 		this.frameOffset = frameOffset;
 	}
 
-	public void setFrameUrlS(String frameUrlS) {
+	public void setFrameUrl(String frameUrlS) {
 		this.frameUrlS = frameUrlS;
 	}
 
@@ -268,9 +268,9 @@
 		// TODO
 		if (subType == LOWVISION_COLOR_PROBLEM
 				|| subType == LOWVISION_IMAGE_COLOR_PROBLEM) {
-			iconId = ICON_IRO;
+			iconId = ICON_COLOR;
 		} else {
-			iconId = ICON_BOKE;
+			iconId = ICON_BLUR;
 		}
 
 	}
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/ImageStatData.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/ImageStatData.java
index 192f8fd..d3061a8 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/ImageStatData.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/ImageStatData.java
@@ -151,7 +151,7 @@
 			IProblemItem tmpItem = new ProblemItemImpl(idS);
 			if (!tmpItem.getId().equals("unknown")) {
 				if (targetS != null) {
-					tmpItem.setTargetStringForHPB(targetS);
+					tmpItem.setTargetStringForExport(targetS);
 				}
 				addProblemItem(tmpItem);
 				return;
@@ -243,7 +243,7 @@
 			for (int i = 0; i < size; i++) {
 				IProblemItem pItem = (IProblemItem) problemV.get(i);
 				tmpSB.append("<" + ERROR + " " + getAttr(ID, pItem.getId())
-						+ getAttr(TARGET_STRING, pItem.getTargetStringForHPB())
+						+ getAttr(TARGET_STRING, pItem.getTargetStringForExport())
 						+ " />" + FileUtils.LINE_SEP);
 			}
 			tmpSB.append("</" + IMAGE + ">");
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/HighlightTargetId.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/HighlightTargetId.java
index ef3ec98..0b59edc 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/HighlightTargetId.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/HighlightTargetId.java
@@ -11,25 +11,41 @@
 
 package org.eclipse.actf.visualization.eval.problem;
 
-
+/**
+ * The class to store IDs to highlight visualization result
+ */
 public class HighlightTargetId {
-    int startId;
-    int endId;
-    
-    public HighlightTargetId(int startId, int endId){
-        if(endId < startId){
-            endId = startId;
-        }
-        this.startId = startId;
-        this.endId = endId;
-    }
+	int startId;
+	int endId;
 
-    public int getEndId() {
-        return endId;
-    }
+	/**
+	 * Constructor of the class
+	 * 
+	 * @param startId
+	 *            ID of start position
+	 * @param endId
+	 *            ID of end position
+	 */
+	public HighlightTargetId(int startId, int endId) {
+		if (endId < startId) {
+			endId = startId;
+		}
+		this.startId = startId;
+		this.endId = endId;
+	}
 
-    public int getStartId() {
-        return startId;
-    }    
-    
+	/**
+	 * @return end position ID
+	 */
+	public int getEndId() {
+		return endId;
+	}
+
+	/**
+	 * @return start position ID
+	 */
+	public int getStartId() {
+		return startId;
+	}
+
 }
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/HighlightTargetNodeInfo.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/HighlightTargetNodeInfo.java
index 7f6bc78..1a97be8 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/HighlightTargetNodeInfo.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/HighlightTargetNodeInfo.java
@@ -20,179 +20,228 @@
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
-
-
-
+/**
+ * Utility class to get highlight target information.
+ */
 public class HighlightTargetNodeInfo {
-    public static final int SINGLE = 0;
+	private static final int SINGLE = 0;
 
-    public static final int RANGE = 1;
+	private static final int RANGE = 1;
 
-    public static final int MULTI = 2;
+	private static final int MULTI = 2;
 
-    private int mode;
+	private int mode;
 
-    private Node targetNode;
+	private Node targetNode;
 
-    private Node startTarget;
+	private Node startTarget;
 
-    private Node endTarget;
+	private Node endTarget;
 
-    private Node[] targets;
+	private Node[] targets;
 
-    public HighlightTargetNodeInfo(Node target) {
-        mode = SINGLE;
-        targetNode = target;
-    }
+	/**
+	 * Constructor of the class
+	 * 
+	 * @param target
+	 *            target {@link Node} to highlight corresponding positions
+	 */
+	public HighlightTargetNodeInfo(Node target) {
+		mode = SINGLE;
+		targetNode = target;
+	}
 
-    public HighlightTargetNodeInfo(Node startTarget, Node endTarget) {
-        mode = RANGE;
-        this.startTarget = startTarget;
-        this.endTarget = endTarget;
-    }
+	/**
+	 * Constructor of the class
+	 * 
+	 * @param startTarget
+	 *            start {@link Node} to highlight corresponding positions
+	 * @param endTarget
+	 *            end {@link Node} to highlight corresponding positions
+	 */
+	public HighlightTargetNodeInfo(Node startTarget, Node endTarget) {
+		mode = RANGE;
+		this.startTarget = startTarget;
+		this.endTarget = endTarget;
+	}
 
-    public HighlightTargetNodeInfo(List<Node> targets) {
-        mode = MULTI;
-        this.targets = new Node[0];
-        if (targets != null) {
-            this.targets = new Node[targets.size()];
-            try {
-                targets.toArray(this.targets);
-            } catch (Exception e) {
-                this.targets = new Node[0];
-            }
+	/**
+	 * Constructor of the class
+	 * 
+	 * @param targets
+	 *            list of target {@link Node} to highlight corresponding
+	 *            positions
+	 */
+	public HighlightTargetNodeInfo(List<Node> targets) {
+		mode = MULTI;
+		this.targets = new Node[0];
+		if (targets != null) {
+			this.targets = new Node[targets.size()];
+			try {
+				targets.toArray(this.targets);
+			} catch (Exception e) {
+				this.targets = new Node[0];
+			}
 
-        }
-    }
+		}
+	}
 
-    public HighlightTargetId[] getHighlightTargetIds(Map<Node, Integer> node2Id) {
-        HighlightTargetId[] result = new HighlightTargetId[0];
-        switch (mode) {
-        case SINGLE:
-            if (node2Id != null && node2Id.containsKey(targetNode)) {
-                try {
-                    int nodeId = node2Id.get(targetNode).intValue();
-                    result = new HighlightTargetId[1];
-                    result[0] = new HighlightTargetId(nodeId, nodeId);
-                } catch (Exception e) {
-                }
-            }
-            break;
-        case RANGE:
-            // -1 check?
-            if (node2Id != null && (node2Id.containsKey(startTarget) || node2Id.containsKey(endTarget))) {
-                int state = 0;
-                int start = 0;
-                int end = 0;
-                try {
-                    start = node2Id.get(startTarget).intValue();
-                    state += 1;
-                } catch (Exception e) {
-                }
-                try {
-                    end = node2Id.get(endTarget).intValue();
-                    state += 2;
-                } catch (Exception e) {
-                }
-                switch (state) {
-                case 0:
-                    result = new HighlightTargetId[0];
-                    break;
-                case 1:
-                    result = new HighlightTargetId[1];
-                    result[0] = new HighlightTargetId(start, start);
-                    break;
-                case 2:
-                    result = new HighlightTargetId[1];
-                    result[0] = new HighlightTargetId(end, end);
-                    break;
-                case 3:
-                    result = new HighlightTargetId[1];
-                    result[0] = new HighlightTargetId(start, end);
-                    break;
-                default:
-                }
-            }
-            break;
-        case MULTI:
-            Vector<HighlightTargetId> tmpV = new Vector<HighlightTargetId>();
-            for (int i = 0; i < targets.length; i++) {
-                if (node2Id != null && node2Id.containsKey(targets[i])) {
-                    try {
-                        int nodeId = node2Id.get(targets[i]).intValue();
-                        tmpV.add(new HighlightTargetId(nodeId, nodeId));
-                    } catch (Exception e) {
-                    }
-                }
-            }
+	/**
+	 * Get corresponding {@link Node} IDs relate to the target {@link Node}
+	 * 
+	 * @param node2Id
+	 *            map between {@link Node} and ID
+	 * @return target ID information as array of {@link HighlightTargetId}
+	 */
+	public HighlightTargetId[] getHighlightTargetIds(Map<Node, Integer> node2Id) {
+		HighlightTargetId[] result = new HighlightTargetId[0];
+		switch (mode) {
+		case SINGLE:
+			if (node2Id != null && node2Id.containsKey(targetNode)) {
+				try {
+					int nodeId = node2Id.get(targetNode).intValue();
+					result = new HighlightTargetId[1];
+					result[0] = new HighlightTargetId(nodeId, nodeId);
+				} catch (Exception e) {
+				}
+			}
+			break;
+		case RANGE:
+			// -1 check?
+			if (node2Id != null
+					&& (node2Id.containsKey(startTarget) || node2Id
+							.containsKey(endTarget))) {
+				int state = 0;
+				int start = 0;
+				int end = 0;
+				try {
+					start = node2Id.get(startTarget).intValue();
+					state += 1;
+				} catch (Exception e) {
+				}
+				try {
+					end = node2Id.get(endTarget).intValue();
+					state += 2;
+				} catch (Exception e) {
+				}
+				switch (state) {
+				case 0:
+					result = new HighlightTargetId[0];
+					break;
+				case 1:
+					result = new HighlightTargetId[1];
+					result[0] = new HighlightTargetId(start, start);
+					break;
+				case 2:
+					result = new HighlightTargetId[1];
+					result[0] = new HighlightTargetId(end, end);
+					break;
+				case 3:
+					result = new HighlightTargetId[1];
+					result[0] = new HighlightTargetId(start, end);
+					break;
+				default:
+				}
+			}
+			break;
+		case MULTI:
+			Vector<HighlightTargetId> tmpV = new Vector<HighlightTargetId>();
+			for (int i = 0; i < targets.length; i++) {
+				if (node2Id != null && node2Id.containsKey(targets[i])) {
+					try {
+						int nodeId = node2Id.get(targets[i]).intValue();
+						tmpV.add(new HighlightTargetId(nodeId, nodeId));
+					} catch (Exception e) {
+					}
+				}
+			}
 
-            result = new HighlightTargetId[tmpV.size()];
-            tmpV.toArray(result);
-            break;
-        default:
-        }
-        return result;
-    }
-    
-    public HighlightTargetSourceInfo[] getHighlightTargetSourceInfo(Vector<Html2ViewMapData> html2ViewMapDataV){
-        HighlightTargetSourceInfo[] result = new HighlightTargetSourceInfo[0];
-        switch (mode) {
-        case SINGLE:
-            Html2ViewMapData h2vmd = getViewMapData(targetNode, html2ViewMapDataV);
-            if (h2vmd != null) {
-                result = new HighlightTargetSourceInfo[]{new HighlightTargetSourceInfo(h2vmd,h2vmd)};
-            }
-            break;
-        case RANGE:
-            Html2ViewMapData startData = getViewMapData(startTarget, html2ViewMapDataV);
-            Html2ViewMapData endData = getViewMapData(endTarget, html2ViewMapDataV);
-            if (startData != null && endData != null) {
-                result = new HighlightTargetSourceInfo[]{new HighlightTargetSourceInfo(startData,endData)};
-            } else {
-                if (startData == null) {
-                    result = new HighlightTargetSourceInfo[]{new HighlightTargetSourceInfo(endData,endData)};
-                } else {
-                    result = new HighlightTargetSourceInfo[]{new HighlightTargetSourceInfo(startData,startData)};                    
-                }
-            }            
-            break;
-        case MULTI:
-            ArrayList<HighlightTargetSourceInfo> tmpArray = new ArrayList<HighlightTargetSourceInfo>();
-            for (int i = 0; i < targets.length; i++) {
-                Html2ViewMapData data = getViewMapData(targets[i], html2ViewMapDataV);
-                if (data != null) {
-                    tmpArray.add(new HighlightTargetSourceInfo(data,data));
-                }
-            }
-            result = new HighlightTargetSourceInfo[tmpArray.size()];
-            tmpArray.toArray(result);
-            break;
-        default:
-        }
-        return result;        
-    }
-    
-    private Html2ViewMapData getViewMapData(Node targetN, Vector<Html2ViewMapData> html2ViewMapDataV) {
-        if (targetN != null && html2ViewMapDataV != null) {
-            try {
-                String targetId = ((Element) targetN).getAttribute(Html2ViewMapData.ACTF_ID);
-                if (!targetId.equals("")) {
-                    int target = Integer.parseInt(targetId);
-                    if (target > -1 && target < html2ViewMapDataV.size()) {
-                        Html2ViewMapData h2vmd = html2ViewMapDataV.get(target);
-                        return h2vmd;
-                    }
-                } else {
-                    // System.out.println("sethighlight: empty:
-                    // "+targetN.toString());
-                }
-            } catch (Exception e) {
-                //System.out.println("getViewMapData: " +targetN.getNodeName());
-                //e.printStackTrace();
-            }
-        }
-        return null;
-    }
+			result = new HighlightTargetId[tmpV.size()];
+			tmpV.toArray(result);
+			break;
+		default:
+		}
+		return result;
+	}
 
+	/**
+	 * Get corresponding HTML source positions relate to the target {@link Node}
+	 * 
+	 * @param html2ViewMapDataV
+	 *            Vector of HTML source position information
+	 * @return corresponding HTML source positions as array of
+	 *         {@link HighlightTargetSourceInfo}
+	 */
+	public HighlightTargetSourceInfo[] getHighlightTargetSourceInfo(
+			Vector<Html2ViewMapData> html2ViewMapDataV) {
+		HighlightTargetSourceInfo[] result = new HighlightTargetSourceInfo[0];
+		switch (mode) {
+		case SINGLE:
+			Html2ViewMapData h2vmd = getViewMapData(targetNode,
+					html2ViewMapDataV);
+			if (h2vmd != null) {
+				result = new HighlightTargetSourceInfo[] { new HighlightTargetSourceInfo(
+						h2vmd, h2vmd) };
+			}
+			break;
+		case RANGE:
+			Html2ViewMapData startData = getViewMapData(startTarget,
+					html2ViewMapDataV);
+			Html2ViewMapData endData = getViewMapData(endTarget,
+					html2ViewMapDataV);
+			if (startData != null && endData != null) {
+				result = new HighlightTargetSourceInfo[] { new HighlightTargetSourceInfo(
+						startData, endData) };
+			} else {
+				if (startData == null) {
+					result = new HighlightTargetSourceInfo[] { new HighlightTargetSourceInfo(
+							endData, endData) };
+				} else {
+					result = new HighlightTargetSourceInfo[] { new HighlightTargetSourceInfo(
+							startData, startData) };
+				}
+			}
+			break;
+		case MULTI:
+			ArrayList<HighlightTargetSourceInfo> tmpArray = new ArrayList<HighlightTargetSourceInfo>();
+			for (int i = 0; i < targets.length; i++) {
+				Html2ViewMapData data = getViewMapData(targets[i],
+						html2ViewMapDataV);
+				if (data != null) {
+					tmpArray.add(new HighlightTargetSourceInfo(data, data));
+				}
+			}
+			result = new HighlightTargetSourceInfo[tmpArray.size()];
+			tmpArray.toArray(result);
+			break;
+		default:
+		}
+		return result;
+	}
+
+	private Html2ViewMapData getViewMapData(Node targetN,
+			Vector<Html2ViewMapData> html2ViewMapDataV) {
+		if (targetN != null && html2ViewMapDataV != null) {
+			try {
+				String targetId = ((Element) targetN)
+						.getAttribute(Html2ViewMapData.ACTF_ID);
+				if (!targetId.equals("")) {
+					int target = Integer.parseInt(targetId);
+					if (target > -1 && target < html2ViewMapDataV.size()) {
+						Html2ViewMapData h2vmd = html2ViewMapDataV.get(target);
+						return h2vmd;
+					}
+				} else {
+					// System.out.println("sethighlight: empty:
+					// "+targetN.toString());
+				}
+			} catch (Exception e) {
+				// System.out.println("getViewMapData: "
+				// +targetN.getNodeName());
+				// e.printStackTrace();
+			}
+		}
+		return null;
+	}
 
 }
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/HighlightTargetSourceInfo.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/HighlightTargetSourceInfo.java
index 388fbdc..83fd1fb 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/HighlightTargetSourceInfo.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/HighlightTargetSourceInfo.java
@@ -13,31 +13,55 @@
 
 import org.eclipse.actf.visualization.util.html2view.Html2ViewMapData;
 
-
-
+/**
+ * The class to store information to highlight HTML source
+ * 
+ * @see Html2ViewMapData
+ */
 public class HighlightTargetSourceInfo {
-    private Html2ViewMapData start;
+	private Html2ViewMapData start;
 
-    private Html2ViewMapData end;
+	private Html2ViewMapData end;
 
-    public HighlightTargetSourceInfo(Html2ViewMapData start, Html2ViewMapData end) {
-        this.start = start;
-        this.end = end;
-    }
+	/**
+	 * Constructor of the class
+	 * 
+	 * @param start
+	 *            target start position information
+	 * @param end
+	 *            target end position information
+	 */
+	public HighlightTargetSourceInfo(Html2ViewMapData start,
+			Html2ViewMapData end) {
+		this.start = start;
+		this.end = end;
+	}
 
-    public int getStartLine() {
-        return (start.getStartLine() + 1);
-    }
+	/**
+	 * @return start position (line) of target tag
+	 */
+	public int getStartLine() {
+		return (start.getStartLine() + 1);
+	}
 
-    public int getStartColumn(){
-        return start.getStartColumn();
-    }
+	/**
+	 * @return start position (column) of target tag
+	 */
+	public int getStartColumn() {
+		return start.getStartColumn();
+	}
 
-    public int getEndLine(){
-        return (end.getEndLine() + 1); 
-    }
+	/**
+	 * @return end pisition (line) of target tag
+	 */
+	public int getEndLine() {
+		return (end.getEndLine() + 1);
+	}
 
-    public int getEndColumn(){
-        return end.getEndColumn();
-    }
+	/**
+	 * @return end position (column) of target tag
+	 */
+	public int getEndColumn() {
+		return end.getEndColumn();
+	}
 }
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/ILowvisionProblemSubtype.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/ILowvisionProblemSubtype.java
index b6d50b3..6afc60e 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/ILowvisionProblemSubtype.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/ILowvisionProblemSubtype.java
@@ -11,15 +11,17 @@
 
 package org.eclipse.actf.visualization.eval.problem;
 
-
+/**
+ * Interface for low vision problem types
+ */
 public interface ILowvisionProblemSubtype {
-    public static final short LOWVISION_COLOR_PROBLEM = 1;
-    public static final short LOWVISION_BLUR_PROBLEM = 2;
-    public static final short LOWVISION_IMAGE_COLOR_PROBLEM = 3;
-    public static final short LOWVISION_FIXED_SIZE_FONT_PROBLEM = 4;
-    public static final short LOWVISION_SMALL_FONT_PROBLEM = 5;
-    public static final short LOWVISION_FIXED_SMALL_FONT_PROBLEM = 6;
-    public static final short LOWVISION_PROHIBITED_BOTH_COLORS_PROBLEM = 7;
-    public static final short LOWVISION_PROHIBITED_FOREGROUND_COLOR_PROBLEM = 8;
-    public static final short LOWVISION_PROHIBITED_BACKGROUND_COLOR_PROBLEM = 9;    
+	public static final short LOWVISION_COLOR_PROBLEM = 1;
+	public static final short LOWVISION_BLUR_PROBLEM = 2;
+	public static final short LOWVISION_IMAGE_COLOR_PROBLEM = 3;
+	public static final short LOWVISION_FIXED_SIZE_FONT_PROBLEM = 4;
+	public static final short LOWVISION_SMALL_FONT_PROBLEM = 5;
+	public static final short LOWVISION_FIXED_SMALL_FONT_PROBLEM = 6;
+	public static final short LOWVISION_PROHIBITED_BOTH_COLORS_PROBLEM = 7;
+	public static final short LOWVISION_PROHIBITED_FOREGROUND_COLOR_PROBLEM = 8;
+	public static final short LOWVISION_PROHIBITED_BACKGROUND_COLOR_PROBLEM = 9;
 }
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/IProblemConst.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/IProblemConst.java
index f50fcac..2ec1691 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/IProblemConst.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/IProblemConst.java
@@ -7,45 +7,62 @@
  *
  * Contributors:
  *    Kentarou FUKUDA - initial API and implementation
- *******************************************************************************/ 
+ *******************************************************************************/
 
 package org.eclipse.actf.visualization.eval.problem;
 
 import org.eclipse.actf.visualization.internal.eval.Messages;
 
-
+/**
+ * Interface for constants commonly used for evaluation in visualization part
+ */
 public interface IProblemConst {
-    public static final String ALL_ERRORS = Messages.getString("ProblemConst.All_Errors_1"); //$NON-NLS-1$
+	public static final String ALL_ERRORS = Messages
+			.getString("ProblemConst.All_Errors_1"); //$NON-NLS-1$
 
-    public static final String ESSENTIAL = Messages.getString("ProblemConst.Essential_2"); //$NON-NLS-1$
+	public static final String ESSENTIAL = Messages
+			.getString("ProblemConst.Essential_2"); //$NON-NLS-1$
 
-    public static final String USER_CHECK = Messages.getString("ProblemConst.User_Check_5"); //$NON-NLS-1$
+	public static final String USER_CHECK = Messages
+			.getString("ProblemConst.User_Check_5"); //$NON-NLS-1$
 
-    public static final String INFO = Messages.getString("ProblemConst.Info"); //$NON-NLS-1$
-    
-    public static final String COMPLIANCE = Messages.getString("ProblemConst.Compliance_6"); //$NON-NLS-1$
+	public static final String INFO = Messages.getString("ProblemConst.Info"); //$NON-NLS-1$
 
-    public static final String ACCESSIBILITY = Messages.getString("ProblemConst.0"); //$NON-NLS-1$
+	public static final String COMPLIANCE = Messages
+			.getString("ProblemConst.Compliance_6"); //$NON-NLS-1$
 
-    //the titles of the Problem Table
-    public final static String TITLE_ICON = Messages.getString("ProblemConst.Type_11"); //$NON-NLS-1$
+	public static final String ACCESSIBILITY = Messages
+			.getString("ProblemConst.0"); //$NON-NLS-1$
 
-    public final static String TITLE_LINE = Messages.getString("ProblemConst.Line_12"); //$NON-NLS-1$
+	// the titles of the Problem Table
+	public final static String TITLE_ICON = Messages
+			.getString("ProblemConst.Type_11"); //$NON-NLS-1$
 
-    public final static String TITLE_HIGHLIGHT = Messages.getString("ProblemConst.Highlight"); //$NON-NLS-1$
-    
-    public final static String TITLE_DESCRIPTION =  Messages.getString("ProblemConst.Problem_Description_17"); //$NON-NLS-1$
+	public final static String TITLE_LINE = Messages
+			.getString("ProblemConst.Line_12"); //$NON-NLS-1$
 
-    public final static String TITLE_FORECOLOR = Messages.getString("ProblemConst.Foreground_18"); //$NON-NLS-1$
+	public final static String TITLE_HIGHLIGHT = Messages
+			.getString("ProblemConst.Highlight"); //$NON-NLS-1$
 
-    public final static String TITLE_BACKCOLOR = Messages.getString("ProblemConst.Background_19"); //$NON-NLS-1$
+	public final static String TITLE_DESCRIPTION = Messages
+			.getString("ProblemConst.Problem_Description_17"); //$NON-NLS-1$
 
-    public final static String TITLE_SEVERITY = Messages.getString("ProblemConst.Severity_20"); //$NON-NLS-1$
+	public final static String TITLE_FORECOLOR = Messages
+			.getString("ProblemConst.Foreground_18"); //$NON-NLS-1$
 
-    public final static String TITLE_X = Messages.getString("ProblemConst.X_21"); //$NON-NLS-1$
+	public final static String TITLE_BACKCOLOR = Messages
+			.getString("ProblemConst.Background_19"); //$NON-NLS-1$
 
-    public final static String TITLE_Y = Messages.getString("ProblemConst.Y_22"); //$NON-NLS-1$
+	public final static String TITLE_SEVERITY = Messages
+			.getString("ProblemConst.Severity_20"); //$NON-NLS-1$
 
-    public final static String TITLE_AREA = Messages.getString("ProblemConst.Area_23"); //$NON-NLS-1$
+	public final static String TITLE_X = Messages
+			.getString("ProblemConst.X_21"); //$NON-NLS-1$
+
+	public final static String TITLE_Y = Messages
+			.getString("ProblemConst.Y_22"); //$NON-NLS-1$
+
+	public final static String TITLE_AREA = Messages
+			.getString("ProblemConst.Area_23"); //$NON-NLS-1$
 
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/IProblemItem.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/IProblemItem.java
index a4a7191..4ab64d6 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/IProblemItem.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/IProblemItem.java
@@ -16,189 +16,232 @@
 import org.w3c.dom.Node;
 
 /**
- *
+ * Interface for problem information
  */
-public interface IProblemItem {// extends IEvaluationItem {
+public interface IProblemItem {
 
 	/**
-	 * 
+	 * Severity: error
 	 */
 	public static final int SEV_ERROR = IEvaluationItem.SEV_ERROR;
 
 	/**
-	 * 
+	 * Severity: warning
 	 */
 	public static final int SEV_WARNING = IEvaluationItem.SEV_WARNING;
 
 	/**
-	 * 
+	 * Severity: informational
 	 */
 	public static final int SEV_INFO = IEvaluationItem.SEV_INFO;
 
 	/**
-	 * @return
+	 * @return related evaluation item information
 	 */
 	public abstract IEvaluationItem getEvaluationItem();
 
 	/**
-	 * @return
+	 * @return description about the problem
 	 */
 	public abstract String getDescription();
 
 	/**
-	 * @return
+	 * @return serial number
 	 */
 	public abstract int getSerialNumber();
 
 	/**
-	 * @return
+	 * @return target {@link Node} of the problem
 	 */
 	public abstract Node getTargetNode();
 
 	/**
-	 * @return
+	 * @return target String will be embedded into description
 	 */
 	public abstract String getTargetString();
 
 	/**
-	 * @return
+	 * @return target String will be used to export this problem item
 	 */
-	public abstract String getTargetStringForHPB();
+	public abstract String getTargetStringForExport();
 
 	/**
-	 * @return
+	 * @return true if this error position can highlight in visualization result
+	 *         view
 	 */
 	public abstract boolean isCanHighlight();
 
 	/**
+	 * Set if his error position can highlight in visualization result view
+	 * 
 	 * @param canHighlight
+	 *            true if this error position can highlight in visualization
+	 *            result view
 	 */
 	public abstract void setCanHighlight(boolean canHighlight);
 
 	/**
-	 * @param checkItem
+	 * Set {@link IEvaluationItem} relates to this problem
+	 * 
+	 * @param evalItem
 	 */
-	public abstract void setCheckItem(IEvaluationItem checkItem);
+	public abstract void setEvaluationItem(IEvaluationItem evalItem);
 
 	/**
+	 * Set description about this problem
+	 * 
 	 * @param description
 	 */
 	public abstract void setDescription(String description);
 
 	/**
+	 * Set serial number for this problem
+	 * 
 	 * @param serialNumber
+	 *            serial number
 	 */
 	public abstract void setSerialNumber(int serialNumber);
 
 	/**
+	 * Set {@link HighlightTargetNodeInfo}.
+	 * 
 	 * @param targetNodeInfo
+	 *            target {@link HighlightTargetNodeInfo}
 	 */
 	void setHighlightTargetNodeInfo(HighlightTargetNodeInfo targetNodeInfo);
 
 	/**
-	 * @return
+	 * @return corresponding {@link HighlightTargetNodeInfo} of this problem
 	 */
 	HighlightTargetNodeInfo getHighlightTargetNodeInfo();
 
 	/**
+	 * Set {@link HighlightTargetId} corresponds to this problem
+	 * 
 	 * @param targetId
+	 *            target {@link HighlightTargetId}
 	 */
 	void setHighlightTargetIds(HighlightTargetId targetId);
 
 	/**
+	 * Set array of {@link HighlightTargetId} corresponds to this problem
+	 * 
 	 * @param targetIds
+	 *            array of target {@link HighlightTargetId}
 	 */
 	void setHighlightTargetIds(HighlightTargetId[] targetIds);
 
 	/**
-	 * @return
+	 * @return array of {@link HighlightTargetId} corresponds to this problem
 	 */
 	HighlightTargetId[] getHighlightTargetIds();
 
 	/**
+	 * Set target {@link Node} of this problem
+	 * 
 	 * @param targetNode
+	 *            target Node
 	 */
 	public abstract void setTargetNode(Node targetNode);
 
 	/**
+	 * Set target String will be embedded into description
+	 * 
 	 * @param targetString
+	 *            target String
 	 */
 	public abstract void setTargetString(String targetString);
 
 	/**
+	 * Set target String will be used to export this problem item
+	 * 
 	 * @param targetString
+	 *            target String
 	 */
-	public abstract void setTargetStringForHPB(String targetString);
+	public abstract void setTargetStringForExport(String targetString);
 
 	/**
-	 * @return
+	 * @return line number of the problem position
 	 */
 	public abstract int getLine();
 
 	/**
-	 * @return
+	 * @return line number of the problem position as String
 	 */
 	public abstract String getLineStr();
 
 	/**
+	 * Set line number of the problem position
+	 * 
 	 * @param line
+	 *            line number
 	 */
 	public abstract void setLine(int line);
 
 	/**
-	 * @return
+	 * @return related line numbers of the problem as comma separated String
 	 */
 	public abstract String getLineStrMulti();
 
 	/**
+	 * Set {@link HighlightTargetSourceInfo} corresponds to this problem
+	 * 
 	 * @param targetSourceInfo
+	 *            target {@link HighlightTargetSourceInfo}
 	 */
 	void setHighlightTargetSourceInfo(HighlightTargetSourceInfo targetSourceInfo);
 
 	/**
+	 * Set array of {@link HighlightTargetSourceInfo} corresponds to this
+	 * problem
+	 * 
 	 * @param targetSourceInfo
+	 *            array of target {@link HighlightTargetSourceInfo}
 	 */
 	void setHighlightTargetSourceInfo(
 			HighlightTargetSourceInfo[] targetSourceInfo);
 
 	/**
-	 * @return
+	 * @return corresponding {@link HighlightTargetSourceInfo} of this problem
 	 */
 	HighlightTargetSourceInfo[] getHighlightTargetSoruceInfo();
 
 	/**
+	 * Accept {@link IProblemItemVisitor}. This method can be used to export
+	 * problem list, filter some problem items, etc.
+	 * 
 	 * @param visitor
+	 *            target {@link IProblemItemVisitor} to accept
 	 */
 	public abstract void accept(IProblemItemVisitor visitor);
 
-	// TODO
 	/**
-	 * @return
+	 * @return evaluation item ID
 	 */
 	public String getId();
 
 	/**
-	 * @return
+	 * @return get severity of this problem
 	 */
 	public int getSeverity();
 
 	/**
-	 * @return
+	 * @return get severity as String
 	 */
 	public String getSeverityStr();
 
 	/**
-	 * @return
+	 * @return get evaluation metrics scores relate to this problem
 	 */
 	public int[] getMetricsScores();
 
 	/**
-	 * @return
+	 * @return get icons for evaluation metrics
 	 */
 	public Image[] getMetricsIcons();
 
 	/**
-	 * @return
+	 * @return get related guideline information as String array
 	 */
 	public String[] getTableDataGuideline();
 
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/IProblemItemImage.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/IProblemItemImage.java
index 22cb948..289d76f 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/IProblemItemImage.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/IProblemItemImage.java
@@ -13,46 +13,130 @@
 import org.eclipse.actf.visualization.ui.IPositionSize;
 import org.eclipse.swt.graphics.Image;
 
-public interface IProblemItemImage extends IProblemItem, IPositionSize, ILowvisionProblemSubtype{
-	
-    public static final int ICON_IRO = 1;
+/**
+ * Interface to store image related information in addition to
+ * {@link IProblemItem}
+ */
+public interface IProblemItemImage extends IProblemItem, IPositionSize,
+		ILowvisionProblemSubtype {
 
-    public static final int ICON_BOKE = 3;
+	public static final int ICON_COLOR = 1;
 
-	public abstract String getBackgroundS();
+	public static final int ICON_BLUR = 3;
 
-	public abstract String getForegroundS();
+	/**
+	 * @return background
+	 */
+	public abstract String getBackground();
 
+	/**
+	 * @return foreground
+	 */
+	public abstract String getForeground();
+
+	/**
+	 * @return frame ID
+	 */
 	public abstract int getFrameId();
 
+	/**
+	 * @return frame offset
+	 */
 	public abstract int getFrameOffset();
 
-	public abstract String getFrameUrlS();
+	/**
+	 * @return frame URL
+	 */
+	public abstract String getFrameUrl();
 
+	/**
+	 * @return ID of problem icon
+	 */
 	public abstract int getIconId();
 
-	public abstract Image getImageIcon();
+	/**
+	 * @return problem icon as {@link Image}
+	 */
+	public abstract Image getIconImage();
 
-	public abstract String getImageIconTooltip();
+	/**
+	 * @return tooltip text for problem icon
+	 */
+	public abstract String getIconTooltip();
 
+	/**
+	 * @return severity value (from 0 to 100)
+	 */
 	public abstract int getSeverityLV();
 
+	/**
+	 * @return type of the problem
+	 * @see ILowvisionProblemSubtype
+	 */
 	public abstract short getSubType();
 
+	/**
+	 * Set area of the problem
+	 * 
+	 * @param area
+	 *            target area size
+	 */
 	public void setArea(int area);
 
-	public void setBackgroundS(String backgroundS);
+	/**
+	 * Set background
+	 * 
+	 * @param backgroundS
+	 *            target background
+	 */
+	public void setBackground(String backgroundS);
 
-	public void setForegroundS(String foregroundS);
+	/**
+	 * Set foreground
+	 * 
+	 * @param foregroundS
+	 *            target foreground
+	 */
+	public void setForeground(String foregroundS);
 
+	/**
+	 * Set frame ID
+	 * 
+	 * @param frameId
+	 *            target frame ID
+	 */
 	public void setFrameId(int frameId);
 
+	/**
+	 * Set frame offset
+	 * 
+	 * @param frameOffset
+	 *            target frame offset
+	 */
 	public void setFrameOffset(int frameOffset);
 
-	public void setFrameUrlS(String frameUrlS);
+	/**
+	 * Set target frane URL
+	 * 
+	 * @param frameUrlS
+	 *            target frame URL
+	 */
+	public void setFrameUrl(String frameUrlS);
 
+	/**
+	 * Set severity value (from 0 to 100)
+	 * 
+	 * @param severityLV
+	 */
 	public void setSeverityLV(int severityLV);
 
+	/**
+	 * Set detailed problem type
+	 * 
+	 * @param subType
+	 *            problem type
+	 * @see ILowvisionProblemSubtype
+	 */
 	public void setSubType(short subType);
 
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/IProblemItemVisitor.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/IProblemItemVisitor.java
index cbb67eb..882fdbd 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/IProblemItemVisitor.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/IProblemItemVisitor.java
@@ -11,7 +11,18 @@
 
 package org.eclipse.actf.visualization.eval.problem;
 
+/**
+ * Visitor class can be used to visit each {@link IProblemItem} and export
+ * problem list, filter some problem items, etc.
+ * 
+ */
 public interface IProblemItemVisitor {
 
+	/**
+	 * Visit {@link IProblemItem} and do something.
+	 * 
+	 * @param item
+	 *            target {@link IProblemItem} to visit
+	 */
 	public void visit(IProblemItem item);
 }
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/ProblemItemImpl.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/ProblemItemImpl.java
index ba036eb..ad0cc46 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/ProblemItemImpl.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/ProblemItemImpl.java
@@ -18,236 +18,257 @@
 import org.eclipse.swt.graphics.Image;
 import org.w3c.dom.Node;
 
-
-
+/**
+ * Default implementation of {@link IProblemItem}
+ */
 public class ProblemItemImpl implements IProblemItem {
 
-    private static GuidelineHolder GUIDELINE_HOLDER = GuidelineHolder.getInstance();
+	private static GuidelineHolder GUIDELINE_HOLDER = GuidelineHolder
+			.getInstance();
 
-    private boolean canHighlight = false;
+	private boolean canHighlight = false;
 
-    private IEvaluationItem checkItem;
+	private IEvaluationItem checkItem;
 
-    private String description = "";
+	private String description = "";
 
-    private int serialNumber = -1;
+	private int serialNumber = -1;
 
-    private int line = -1;
+	private int line = -1;
 
-    private HighlightTargetNodeInfo highlightTargetNodeInfo;
+	private HighlightTargetNodeInfo highlightTargetNodeInfo;
 
-    private HighlightTargetId[] targetIds = new HighlightTargetId[0];
+	private HighlightTargetId[] targetIds = new HighlightTargetId[0];
 
-    private HighlightTargetSourceInfo[] targetSources = new HighlightTargetSourceInfo[0];
+	private HighlightTargetSourceInfo[] targetSources = new HighlightTargetSourceInfo[0];
 
-    private Node targetNode = null;
+	private Node targetNode = null;
 
-    protected String targetStringForHPB = "";
+	protected String targetStringForHPB = "";
 
-    protected String targetString = "";
+	protected String targetString = "";
 
-    // TODO add Icon(for Result doc) info
+	// TODO add Icon(for Result doc) info
 
-    /**
-     * 
-     */
-    public ProblemItemImpl(String id) {
-        checkItem = GUIDELINE_HOLDER.getEvaluationItem(id);
+	/**
+	 * Create new ProblemItemImpl for the evaluation item
+	 * 
+	 * @param id
+	 *            evaluation item ID
+	 * @see GuidelineHolder#getEvaluationItem(String)
+	 */
+	public ProblemItemImpl(String id) {
+		checkItem = GUIDELINE_HOLDER.getEvaluationItem(id);
 
-        if (checkItem == null) {
-            checkItem = new EvaluationItemImpl("unknown", EvaluationItemImpl.SEV_INFO_STR);
-            System.err.println("Problem Item: unknown id \"" + id + "\"");
+		if (checkItem == null) {
+			checkItem = new EvaluationItemImpl("unknown",
+					EvaluationItemImpl.SEV_INFO_STR);
+			System.err.println("Problem Item: unknown id \"" + id + "\"");
 
-        } else {
-            description = checkItem.createDescription();
-        }
+		} else {
+			description = checkItem.createDescription();
+		}
 
-    }
+	}
 
-    public ProblemItemImpl(String id, Node targetNode) {
-        this(id);
-        setTargetNode(targetNode);
-    }
+	/**
+	 * Create new ProblemItemImpl for the evaluation item and set target Node
+	 * 
+	 * @param id
+	 *            evaluation item ID
+	 * @param targetNode
+	 *            target Node
+	 * @see GuidelineHolder#getEvaluationItem(String)
+	 */
+	public ProblemItemImpl(String id, Node targetNode) {
+		this(id);
+		setTargetNode(targetNode);
+	}
 
-    public IEvaluationItem getEvaluationItem() {
-        return checkItem;
-    }
+	public IEvaluationItem getEvaluationItem() {
+		return checkItem;
+	}
 
-    public String getId() {
-        return checkItem.getId();
-    }
+	public String getId() {
+		return checkItem.getId();
+	}
 
-    public String[] getTableDataGuideline() {
-        return checkItem.getTableDataGuideline();
-    }
+	public String[] getTableDataGuideline() {
+		return checkItem.getTableDataGuideline();
+	}
 
-    public int[] getMetricsScores() {
-        return checkItem.getMetricsScores();
-    }
+	public int[] getMetricsScores() {
+		return checkItem.getMetricsScores();
+	}
 
-    public Image[] getMetricsIcons() {
-        return checkItem.getMetricsIcons();
-    }
+	public Image[] getMetricsIcons() {
+		return checkItem.getMetricsIcons();
+	}
 
-    public int getSeverity() {
-        return checkItem.getSeverity();
-    }
+	public int getSeverity() {
+		return checkItem.getSeverity();
+	}
 
-    public String getSeverityStr() {
-        return checkItem.getSeverityStr();
-    }
+	public String getSeverityStr() {
+		return checkItem.getSeverityStr();
+	}
 
-    public String getDescription() {
-        return description;
-    }
+	public String getDescription() {
+		return description;
+	}
 
-    public int getSerialNumber() {
-        return serialNumber;
-    }
+	public int getSerialNumber() {
+		return serialNumber;
+	}
 
-    public Node getTargetNode() {
-        return targetNode;
-    }
+	public Node getTargetNode() {
+		return targetNode;
+	}
 
-    public String getTargetStringForHPB() {
-        return targetStringForHPB;
-    }
+	public String getTargetStringForExport() {
+		return targetStringForHPB;
+	}
 
-    public boolean isCanHighlight() {
-        return canHighlight;
-    }
+	public boolean isCanHighlight() {
+		return canHighlight;
+	}
 
-    public void setCanHighlight(boolean canHighlight) {
-        this.canHighlight = canHighlight;
-    }
+	public void setCanHighlight(boolean canHighlight) {
+		this.canHighlight = canHighlight;
+	}
 
-    public void setCheckItem(IEvaluationItem checkItem) {
-        this.checkItem = checkItem;
-    }
+	public void setEvaluationItem(IEvaluationItem checkItem) {
+		this.checkItem = checkItem;
+	}
 
-    public void setDescription(String description) {
-        this.description = description;
-    }
+	public void setDescription(String description) {
+		this.description = description;
+	}
 
-    public void setSerialNumber(int serialNumber) {
-        this.serialNumber = serialNumber;
-    }
+	public void setSerialNumber(int serialNumber) {
+		this.serialNumber = serialNumber;
+	}
 
-    public void setHighlightTargetIds(HighlightTargetId[] targetIds) {
-        if (targetIds != null) {
-            this.targetIds = targetIds;
-            if (targetIds.length > 0) {
-                canHighlight = true;
-            }
-        }
-    }
+	public void setHighlightTargetIds(HighlightTargetId[] targetIds) {
+		if (targetIds != null) {
+			this.targetIds = targetIds;
+			if (targetIds.length > 0) {
+				canHighlight = true;
+			}
+		}
+	}
 
-    public HighlightTargetId[] getHighlightTargetIds() {
-        return (targetIds);
-    }
+	public HighlightTargetId[] getHighlightTargetIds() {
+		return (targetIds);
+	}
 
-    public void setTargetNode(Node targetNode) {
-        this.targetNode = targetNode;
-    }
+	public void setTargetNode(Node targetNode) {
+		this.targetNode = targetNode;
+	}
 
-    public void setTargetStringForHPB(String targetString) {
-        this.targetStringForHPB = targetString;
-    }
+	public void setTargetStringForExport(String targetString) {
+		this.targetStringForHPB = targetString;
+	}
 
-    public String getTargetString() {
-        return targetString;
-    }
+	public String getTargetString() {
+		return targetString;
+	}
 
-    public void setTargetString(String targetString) {
-        this.targetString = targetString;
-        if (targetString != null && targetString.length() > 0) {
-            this.description = checkItem.createDescription(targetString);
-        }
-    }
+	public void setTargetString(String targetString) {
+		this.targetString = targetString;
+		if (targetString != null && targetString.length() > 0) {
+			this.description = checkItem.createDescription(targetString);
+		}
+	}
 
-    public int getLine() {
-        return line;
-    }
+	public int getLine() {
+		return line;
+	}
 
-    public void setLine(int line) {
-        this.line = line;
-    }
+	public void setLine(int line) {
+		this.line = line;
+	}
 
-    public String getLineStr() {
-        int curLine = getLine();
-        if (curLine > -1) {
-            return (Integer.toString(curLine));
-        } else {
-            return ("");
-        }
-    }
+	public String getLineStr() {
+		int curLine = getLine();
+		if (curLine > -1) {
+			return (Integer.toString(curLine));
+		} else {
+			return ("");
+		}
+	}
 
-    public String getLineStrMulti() {
-        StringBuffer tmpSB = new StringBuffer();
-        // TODO check multiple same line number
-        if (targetSources.length > 0) {
-            for (int i = 0; i < targetSources.length; i++) {
-                int tmp = targetSources[i].getStartLine() + 1;
-                tmpSB.append(tmp);
-                tmpSB.append(", ");
-            }
-            String result = tmpSB.substring(0, tmpSB.length() - 2);
-            return result;
-        }
-        if (line > -1) {
-            return (Integer.toString(line));
-        } else {
-            return ("");
-        }
-    }
+	public String getLineStrMulti() {
+		StringBuffer tmpSB = new StringBuffer();
+		// TODO check multiple same line number
+		if (targetSources.length > 0) {
+			for (int i = 0; i < targetSources.length; i++) {
+				int tmp = targetSources[i].getStartLine() + 1;
+				tmpSB.append(tmp);
+				tmpSB.append(", ");
+			}
+			String result = tmpSB.substring(0, tmpSB.length() - 2);
+			return result;
+		}
+		if (line > -1) {
+			return (Integer.toString(line));
+		} else {
+			return ("");
+		}
+	}
 
-    public void setHighlightTargetSourceInfo(HighlightTargetSourceInfo[] targetSourceInfo) {
-        if (targetSourceInfo != null) {
-            targetSources = targetSourceInfo;
-            int tmpLine = Integer.MAX_VALUE;
-            for (int i = 0; i < targetSources.length; i++) {
-                if (tmpLine > targetSources[i].getStartLine()) {
-                    tmpLine = targetSources[i].getStartLine();
-                }
-                // TODO
-                if (tmpLine != Integer.MAX_VALUE) {
-                    line = tmpLine;
-                }
-            }
-        }
-    }
+	public void setHighlightTargetSourceInfo(
+			HighlightTargetSourceInfo[] targetSourceInfo) {
+		if (targetSourceInfo != null) {
+			targetSources = targetSourceInfo;
+			int tmpLine = Integer.MAX_VALUE;
+			for (int i = 0; i < targetSources.length; i++) {
+				if (tmpLine > targetSources[i].getStartLine()) {
+					tmpLine = targetSources[i].getStartLine();
+				}
+				// TODO
+				if (tmpLine != Integer.MAX_VALUE) {
+					line = tmpLine;
+				}
+			}
+		}
+	}
 
-    public HighlightTargetSourceInfo[] getHighlightTargetSoruceInfo() {
-        if (targetSources.length == 0 && line > -1) {
-            Html2ViewMapData dummy = new Html2ViewMapData(new int[] { line, -1 }, new int[] { line, -1 });
-            return (new HighlightTargetSourceInfo[] { new HighlightTargetSourceInfo(dummy, dummy) });
-        }
-        return (targetSources);
-    }
+	public HighlightTargetSourceInfo[] getHighlightTargetSoruceInfo() {
+		if (targetSources.length == 0 && line > -1) {
+			Html2ViewMapData dummy = new Html2ViewMapData(
+					new int[] { line, -1 }, new int[] { line, -1 });
+			return (new HighlightTargetSourceInfo[] { new HighlightTargetSourceInfo(
+					dummy, dummy) });
+		}
+		return (targetSources);
+	}
 
-    public void accept(IProblemItemVisitor visitor) {
-        visitor.visit(this);
-    }
+	public void accept(IProblemItemVisitor visitor) {
+		visitor.visit(this);
+	}
 
-    public HighlightTargetNodeInfo getHighlightTargetNodeInfo() {
-        return highlightTargetNodeInfo;
-    }
+	public HighlightTargetNodeInfo getHighlightTargetNodeInfo() {
+		return highlightTargetNodeInfo;
+	}
 
+	public void setHighlightTargetNodeInfo(
+			HighlightTargetNodeInfo targetNodeInfo) {
+		this.highlightTargetNodeInfo = targetNodeInfo;
+	}
 
-    public void setHighlightTargetNodeInfo(HighlightTargetNodeInfo targetNodeInfo) {
-        this.highlightTargetNodeInfo = targetNodeInfo;
-    }
+	public void setHighlightTargetIds(HighlightTargetId targetId) {
+		if (targetId != null) {
+			this.setHighlightTargetIds(new HighlightTargetId[] { targetId });
+		}
+	}
 
-    public void setHighlightTargetIds(HighlightTargetId targetId) {
-        if(targetId!=null){
-            this.setHighlightTargetIds(new HighlightTargetId[]{targetId});
-        }
-    }
-
-    public void setHighlightTargetSourceInfo(HighlightTargetSourceInfo targetSourceInfo) {
-        if(targetSourceInfo!=null){
-            this.setHighlightTargetSourceInfo(new HighlightTargetSourceInfo[]{targetSourceInfo});
-        }
-    }
+	public void setHighlightTargetSourceInfo(
+			HighlightTargetSourceInfo targetSourceInfo) {
+		if (targetSourceInfo != null) {
+			this
+					.setHighlightTargetSourceInfo(new HighlightTargetSourceInfo[] { targetSourceInfo });
+		}
+	}
 
 }
diff --git a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/eval/SaveReportLowVision.java b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/eval/SaveReportLowVision.java
index 9a24a1c..3d9dc25 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/eval/SaveReportLowVision.java
+++ b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/eval/SaveReportLowVision.java
@@ -341,7 +341,7 @@
 						int currentIcon = 0;
 						String strIconName = "";// TODO
 						switch (iconId) {
-						case IProblemItemImage.ICON_IRO:
+						case IProblemItemImage.ICON_COLOR:
 							iColorNum++;
 							currentIcon = 0;
 							if (problemLVArray[i].isCanHighlight()) {
@@ -350,7 +350,7 @@
 								strIconName = "ErrIro21.gif";
 							}
 							break;
-						case IProblemItemImage.ICON_BOKE:
+						case IProblemItemImage.ICON_BLUR:
 							iFontNum++;
 							currentIcon = 1;
 							if (problemLVArray[i].isCanHighlight()) {
@@ -384,11 +384,11 @@
 										.getSeverityLV()) + "&nbsp;</td>");
 
 						fileOutput.write("<td>"
-								+ problemLVArray[i].getForegroundS()
+								+ problemLVArray[i].getForeground()
 								+ "&nbsp;</td>");
 
 						fileOutput.write("<td>"
-								+ problemLVArray[i].getBackgroundS()
+								+ problemLVArray[i].getBackground()
 								+ "&nbsp;</td>");
 
 						fileOutput.write("<td>"
diff --git a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/ui/report/table/ResultTableLabelProviderLV.java b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/ui/report/table/ResultTableLabelProviderLV.java
index 7e985e0..2899ca8 100644
--- a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/ui/report/table/ResultTableLabelProviderLV.java
+++ b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/ui/report/table/ResultTableLabelProviderLV.java
@@ -45,7 +45,7 @@
 	public Image getColumnImage(Object arg0, int arg1) {
 		IProblemItemImage tmpItem = (IProblemItemImage) arg0;
 		if (arg1 == 0) {
-			return (tmpItem.getImageIcon());
+			return (tmpItem.getIconImage());
 		}
 		return null;
 	}
@@ -69,9 +69,9 @@
 			case 0:
 				return (Integer.toString(tmpItem.getSeverityLV()));
 			case 1:
-				return (tmpItem.getForegroundS());
+				return (tmpItem.getForeground());
 			case 2:
-				return (tmpItem.getBackgroundS());
+				return (tmpItem.getBackground());
 			case 3:
 				return (Integer.toString(tmpItem.getX()));
 			case 4:
diff --git a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/ui/report/table/ResultTableSorterLV.java b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/ui/report/table/ResultTableSorterLV.java
index 8df509e..e47d56b 100644
--- a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/ui/report/table/ResultTableSorterLV.java
+++ b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/ui/report/table/ResultTableSorterLV.java
@@ -84,12 +84,12 @@
 								.getSeverityLV());
 						break;
 					case 1:
-						result = compareString(tmp1.getForegroundS(), tmp2
-								.getForegroundS());
+						result = compareString(tmp1.getForeground(), tmp2
+								.getForeground());
 						break;
 					case 2:
-						result = compareString(tmp1.getBackgroundS(), tmp2
-								.getBackgroundS());
+						result = compareString(tmp1.getBackground(), tmp2
+								.getBackground());
 						break;
 					case 3:
 						result = compareInt(tmp1.getX(), tmp2.getX());
