diff --git a/plugins/org.eclipse.actf.visualization.blind.html/src/org/eclipse/actf/visualization/blind/html/BlindVisualizerHtml.java b/plugins/org.eclipse.actf.visualization.blind.html/src/org/eclipse/actf/visualization/blind/html/BlindVisualizerHtml.java
index 05453a7..11f0256 100644
--- a/plugins/org.eclipse.actf.visualization.blind.html/src/org/eclipse/actf/visualization/blind/html/BlindVisualizerHtml.java
+++ b/plugins/org.eclipse.actf.visualization.blind.html/src/org/eclipse/actf/visualization/blind/html/BlindVisualizerHtml.java
@@ -18,6 +18,7 @@
 import java.io.PrintWriter;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashSet;
 import java.util.Vector;
 
@@ -82,6 +83,8 @@
 		return false;
 	}
 
+	private final boolean PERFORMANCE_DEBUG = false;
+	
 	public int visualize() {
 		GuidelineHolder.getInstance().setTargetMimeType("text/html"); //$NON-NLS-1$
 
@@ -92,13 +95,15 @@
 		File targetFile;
 
 		try {
-
+			if (PERFORMANCE_DEBUG) System.out.println("vizualize start\t"+(new Date()).getTime());
 			srcFile = webBrowser.saveOriginalDocument(tmpDirS + ORIG_HTML_FILE);
 			liveFile = webBrowser
 					.saveDocumentAsHTMLFile(tmpDirS + IE_HTML_FILE);
 			// for srcViewer
 			webBrowser.saveOriginalDocument(tmpDirS + HTML_SOURCE_FILE);
 
+			if (PERFORMANCE_DEBUG) System.out.println("save documents\t"+(new Date()).getTime());
+
 			Vector<Html2ViewMapData> html2ViewMapV = new Vector<Html2ViewMapData>();
 			IHTMLParser htmlParser = HTMLParserFactory.createHTMLParser();
 			HtmlErrorLogListener errorLogListener = new HtmlErrorLogListener();
@@ -148,6 +153,8 @@
 
 				targetFile = srcFile;
 			}
+			if (PERFORMANCE_DEBUG) System.out.println("parse documents\t"+(new Date()).getTime());
+
 			// System.out.println(document+" "+ _originalDom+" "+ ieDom);
 
 			boolean hasFrame = false;
@@ -182,9 +189,13 @@
 			// engine.setInvisibleIdSet(invisibleIdSet);
 
 			engine.setInvisibleIdSet(new HashSet<String>());
+			if (PERFORMANCE_DEBUG) System.out.println("setInvisibleIdSet\t"+(new Date()).getTime());
 
 			engine.setPageData(pageData);
+			if (PERFORMANCE_DEBUG) System.out.println("setPageData\t"+(new Date()).getTime());
+
 			engine.visualize();
+			if (PERFORMANCE_DEBUG) System.out.println("do vizualize\t"+(new Date()).getTime());
 
 			maxReachingTime = engine.getMaxTime();
 			setInfoMessage(getMaxReachingTime());
@@ -212,6 +223,8 @@
 			edu.setSrcFile(srcFile);
 			edu.setTargetFile(targetFile);
 
+			if (PERFORMANCE_DEBUG) System.out.println("HtmlEvalUtil\t"+(new Date()).getTime());
+
 			ArrayList<IProblemItem> tmpResults = new ArrayList<IProblemItem>(
 					1024);
 
@@ -233,6 +246,9 @@
 					tmpResults.addAll(checkers[i].check(checkTarget));
 				}
 			}
+			
+			if (PERFORMANCE_DEBUG) System.out.println("checked\t"+(new Date()).getTime());
+
 
 			// TODO support blind biz -> visitor
 			for (int i = 0; i < tmpResults.size(); i++) {
@@ -252,6 +268,9 @@
 			checkResult
 					.addProblemItems(errorLogListener.getHtmlProblemVector());
 			checkResult.accept(pageData);
+			
+			if (PERFORMANCE_DEBUG) System.out.println("process problems\t"+(new Date()).getTime());
+
 
 			// TODO move (add Icons into result doc) here
 
@@ -272,6 +291,7 @@
 						.devOrDebugPrintln("error: saveHtmlDocumentAsUTF8"); //$NON-NLS-1$
 			}
 
+			if (PERFORMANCE_DEBUG) System.out.println("vizualize end\t"+(new Date()).getTime());
 			if (hasFrame) {
 				pageData.setHasFrame(true);
 				return FRAME;
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/eval/EvaluationResultBlind.java b/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/eval/EvaluationResultBlind.java
index b14c754..fa2fc40 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/eval/EvaluationResultBlind.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/eval/EvaluationResultBlind.java
@@ -15,24 +15,16 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.eclipse.actf.util.xpath.XPathService;
-import org.eclipse.actf.util.xpath.XPathServiceFactory;
 import org.eclipse.actf.visualization.eval.EvaluationResultImpl;
 import org.eclipse.actf.visualization.eval.IEvaluationResult;
 import org.eclipse.actf.visualization.eval.guideline.GuidelineHolder;
+import org.eclipse.actf.visualization.eval.html.HtmlTagUtil;
 import org.eclipse.actf.visualization.eval.problem.IProblemItem;
-import org.w3c.dom.NodeList;
 
 /**
  * Implementation class of {@link IEvaluationResult}
  */
 public class EvaluationResultBlind extends EvaluationResultImpl {
-
-	private static final XPathService xpathService = XPathServiceFactory
-			.newService();
-	private static final Object EXP1 = xpathService
-			.compile("ancestor::noscript"); //$NON-NLS-1$
-
 	private int count = 0;
 	private PageEvaluation pageEvaluation = null;
 
@@ -56,10 +48,8 @@
 					tmpItem.setSerialNumber(count);
 					if (tmpItem.isCanHighlight()
 							&& tmpItem.getTargetNode() != null) {
-						NodeList tmpNL = xpathService.evalForNodeList(EXP1,
-								tmpItem.getTargetNode());
-						// noframes can highlight
-						if (tmpNL != null && tmpNL.getLength() > 0) {
+						
+						if (HtmlTagUtil.hasAncestor(tmpItem.getTargetNode(), "script")) {
 							tmpItem.setCanHighlight(false);
 						}
 					}
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/HtmlEvalUtil.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/HtmlEvalUtil.java
index 15f8b7c..15846f3 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/HtmlEvalUtil.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/HtmlEvalUtil.java
@@ -15,6 +15,7 @@
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
@@ -38,6 +39,8 @@
  * Utility class for HTML evaluation
  */
 public class HtmlEvalUtil extends HtmlTagUtil {
+	
+	private static final boolean PERFORMANCE_DEBUG = false;
 
 	private static final int LONG_TEXT_NUM = 200; // TODO check
 
@@ -247,6 +250,8 @@
 		this.document2IdMap = document2IdMap;
 		// this.html2ViewMapData = html2ViewMapData;
 
+		if (PERFORMANCE_DEBUG) System.out.println("document2IdMap\t"+(new Date()).getTime());
+
 		this.isDBCS = isDBCS;
 
 		// prepare freq use elements
@@ -255,7 +260,7 @@
 
 		NodeList tmpNL = xpathService.evalForNodeList(EXP1, target);
 		int length = tmpNL.getLength();
-
+		
 		if (length > 0) {
 			hasAwithHref = true;
 		}
@@ -293,6 +298,8 @@
 		pageData.setImageDataMap(tmpMap);
 		pageData.setLinkImageDataMap(linkImgMap);
 
+		if (PERFORMANCE_DEBUG) System.out.println("process images\t"+(new Date()).getTime());
+
 		// TODO use XPath
 		tmpNL = target.getElementsByTagName("table"); //$NON-NLS-1$
 		length = tmpNL.getLength();
@@ -324,11 +331,16 @@
 		b1row1colV.toArray(bottom_1row1col_tables);
 		bNotDataV.toArray(bottom_notdata_tables);
 		parentV.toArray(parent_table_elements);
+		
+		if (PERFORMANCE_DEBUG) System.out.println("process tables\t"+(new Date()).getTime());
+
 
 		body_elements = getElementsArray(target, "body");
 		frame_elements = getElementsArray(target, "frame");
 		iframe_elements = getElementsArray(target, "iframe");
 
+		if (PERFORMANCE_DEBUG) System.out.println("process frames\t"+(new Date()).getTime());
+
 		HashSet<Element> embedInObjectSet = new HashSet<Element>();
 
 		// TODO ieDOM
@@ -402,6 +414,8 @@
 			}
 		}
 
+		if (PERFORMANCE_DEBUG) System.out.println("process object\t"+(new Date()).getTime());
+
 		NodeList headingsNL = xpathService.evalForNodeList(EXP2, target);
 		length = headingsNL.getLength();
 		Vector<HeadingsData> tmpV2 = new Vector<HeadingsData>();
@@ -413,8 +427,12 @@
 		}
 		pageData.setHeadingsData(tmpV2);
 
+		if (PERFORMANCE_DEBUG) System.out.println("process headins\t"+(new Date()).getTime());
+
 		collectScriptElements();
+		if (PERFORMANCE_DEBUG) System.out.println("collectScriptElements\t"+(new Date()).getTime());
 		calcDomDifference();
+		if (PERFORMANCE_DEBUG) System.out.println("calcDomDifference\t"+(new Date()).getTime());
 	}
 
 	private Element[] getElementsArray(Document target, String tagName) {
@@ -508,10 +526,19 @@
 					.asList(aWithHref_hrefs));
 			// trim()?
 
+			/*
 			NodeList ieNL = xpathService.evalForNodeList(EXP1, liveDom);
 			int size = ieNL.getLength();
+			*/
+			
+			NodeList ieNL = liveDom.getElementsByTagName("a");
+			int size = ieNL.getLength();
+
 			for (int i = 0; i < size; i++) {
 				Element tmpE = (Element) ieNL.item(i);
+				if (!tmpE.hasAttribute(ATTR_HREF)) {
+					continue;
+				}
 				String tmpS = tmpE.getAttribute(ATTR_HREF);
 				if (!existSet.contains(tmpS)) {
 					notExistHrefSet.add(tmpS);
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/HtmlTagUtil.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/HtmlTagUtil.java
index b9ee8d8..8f330b1 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/HtmlTagUtil.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/HtmlTagUtil.java
@@ -81,6 +81,27 @@
 		}
 		return (result);
 	}
+	
+
+	/**
+	 * Get ancestor node whose name is specified target name 
+	 * 
+	 * @param target
+	 *            target {@link Node}
+	 * @param ancestorName
+	 *            target ancestor tag name
+	 * @return true if target {@link Node} has target ancestor
+	 */
+	public static Node getAncestor(Node target, String ancestorName) {
+		Node tmpNode = target;
+		while (tmpNode != null) {
+			if (tmpNode.getNodeName().equals(ancestorName)) {
+				return tmpNode;
+			}
+			tmpNode = tmpNode.getParentNode();
+		}
+		return null;
+	}
 
 	/**
 	 * Get <i>noscript</i> text of the {@link Node}
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 2af850d..a26a7e3 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
@@ -17,11 +17,12 @@
 import org.eclipse.actf.util.FileUtils;
 import org.eclipse.actf.util.xpath.XPathService;
 import org.eclipse.actf.util.xpath.XPathServiceFactory;
+import org.eclipse.actf.visualization.eval.html.HtmlTagUtil;
 import org.eclipse.actf.visualization.eval.problem.IProblemItem;
 import org.eclipse.actf.visualization.eval.problem.ProblemItemImpl;
 import org.eclipse.actf.visualization.internal.eval.XMLStringUtil;
 import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
+import org.w3c.dom.Node;
 import org.w3c.dom.html.HTMLAnchorElement;
 import org.w3c.dom.html.HTMLImageElement;
 import org.xml.sax.Attributes;
@@ -37,10 +38,6 @@
 
 	public static final String LONGDESC = "longdesc"; //$NON-NLS-1$
 
-	private static final XPathService xpathService = XPathServiceFactory
-			.newService();
-	private static final Object EXP1 = xpathService.compile("ancestor::a"); //$NON-NLS-1$
-
 	protected String altS = ""; //$NON-NLS-1$
 
 	protected Element ancestorLink = null;
@@ -117,18 +114,19 @@
 		}
 
 		isMap = target.getIsMap();
+		
 
-		NodeList tmpNL = xpathService.evalForNodeList(EXP1, target);
-		// XPathUtil.showNodeList(tmpNL,true);
-		int len = tmpNL.getLength();
-		if (len > 0) {
-			HTMLAnchorElement tmpE = (HTMLAnchorElement) tmpNL.item(0);
-			if (isInLink = tmpE.hasAttribute(HREF)) {
-				destUrlS = tmpE.getHref();
-				ancestorLink = tmpE;
-				try {
-					destUrlS = new URL(baseURL, destUrlS).toString();
-				} catch (Exception e) {
+		if (HtmlTagUtil.hasAncestor(target, "a")) {
+			Node temp = HtmlTagUtil.getAncestor(target, "a");
+			if (temp != null) {
+				HTMLAnchorElement tmpE = (HTMLAnchorElement) temp;
+				if (isInLink = tmpE.hasAttribute(HREF)) {
+					destUrlS = tmpE.getHref();
+					ancestorLink = tmpE;
+					try {
+						destUrlS = new URL(baseURL, destUrlS).toString();
+					} catch (Exception e) {
+					}
 				}
 			}
 		}
