diff --git a/plugins/org.eclipse.actf.visualization.blind/plugin.properties b/plugins/org.eclipse.actf.visualization.blind/plugin.properties
index 6030f4e..5998689 100644
--- a/plugins/org.eclipse.actf.visualization.blind/plugin.properties
+++ b/plugins/org.eclipse.actf.visualization.blind/plugin.properties
@@ -11,4 +11,4 @@
 actf.blind.view.title=Blind
 actf.action.visualize=Visualize Blind Usability
 actf.visualization.actionset=ACTF Visualization 
-actf.visualization.menu=Visualize
\ No newline at end of file
+actf.visualization.menu=Visuali&ze
\ No newline at end of file
diff --git a/plugins/org.eclipse.actf.visualization.blind/plugin_ja.properties b/plugins/org.eclipse.actf.visualization.blind/plugin_ja.properties
index 5a44d80..723d2cd 100644
--- a/plugins/org.eclipse.actf.visualization.blind/plugin_ja.properties
+++ b/plugins/org.eclipse.actf.visualization.blind/plugin_ja.properties
@@ -9,6 +9,6 @@
 #     IBM Corporation - initial API and implementation
 ###############################################################################
 actf.blind.view.title=\u97f3\u58f0\u30e6\u30fc\u30b6\u30d3\u30ea\u30c6\u30a3
-actf.action.visualize=\u97f3\u58f0\u30e6\u30fc\u30b6\u30d3\u30ea\u30c6\u30a3\u8996\u899a\u5316
+actf.action.visualize=\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u691c\u8a3c\u30fb\u97f3\u58f0\u30e6\u30fc\u30b6\u30d3\u30ea\u30c6\u30a3\u8996\u899a\u5316
 actf.visualization.actionset=ACTF\u8996\u899a\u5316 
-actf.visualization.menu=\u8996\u899a\u5316
\ No newline at end of file
+actf.visualization.menu=\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u691c\u8a3c\u30fb\u8996\u899a\u5316(&Z)
\ No newline at end of file
diff --git a/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/BlindVisualizerBase.java b/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/BlindVisualizerBase.java
index cd03ff5..bc7c00e 100644
--- a/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/BlindVisualizerBase.java
+++ b/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/BlindVisualizerBase.java
@@ -68,6 +68,9 @@
 
 		modelService = targetModel;
 		targetUrl = targetModel.getURL();
+		if(targetUrl==null){
+			targetUrl="";
+		}
 		return true;
 	}
 
diff --git a/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/actions/BlindSaveAction.java b/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/actions/BlindSaveAction.java
index 71edc5b..347bea9 100644
--- a/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/actions/BlindSaveAction.java
+++ b/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/actions/BlindSaveAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and Others
+ * Copyright (c) 2005, 2010 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
@@ -15,20 +15,57 @@
 import org.eclipse.actf.visualization.blind.ui.internal.PartControlBlind;
 import org.eclipse.actf.visualization.engines.blind.BlindVizResourceUtil;
 import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuCreator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
 
 public class BlindSaveAction extends Action {
-	PartControlBlind prb;
+	private PartControlBlind pcb;
+	private boolean saveReport = false;
 
 	public BlindSaveAction(PartControlBlind prb) {
-		setToolTipText(Messages.Tooltip_Save); 
+		super(Messages.MenuConst_Save,
+				AS_DROP_DOWN_MENU);
+		this.pcb = prb;
+
+		setToolTipText(Messages.Tooltip_Save);
 		setImageDescriptor(BlindVizResourceUtil
 				.getImageDescriptor("icons/ButtonSave.png")); //$NON-NLS-1$
-		setText(Messages.MenuConst_Save); 
-		this.prb = prb;
+
+		setMenuCreator(new IMenuCreator() {
+
+			public void dispose() {
+			}
+
+			public Menu getMenu(Control parent) {
+				Menu menu = new Menu(parent);
+				MenuItem item1 = new MenuItem(menu, SWT.CHECK);
+				item1.setText(org.eclipse.actf.visualization.blind.ui.internal.Messages.Report);
+				item1.setSelection(saveReport);
+				item1.addSelectionListener(new SelectionListener() {
+					public void widgetSelected(SelectionEvent e) {
+						saveReport = !saveReport;
+					}
+
+					public void widgetDefaultSelected(SelectionEvent e) {
+					}
+				});
+				return menu;
+			}
+
+			public Menu getMenu(Menu parent) {
+				return null;
+			}
+		});
+
 	}
 
 	public void run() {
-		prb.doSave();
+		pcb.doSave(saveReport);
 	}
 
 }
diff --git a/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/BlindVisualizationBrowser.java b/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/BlindVisualizationBrowser.java
index b995c07..7198990 100644
--- a/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/BlindVisualizationBrowser.java
+++ b/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/BlindVisualizationBrowser.java
@@ -124,7 +124,13 @@
             Variant[] rgvarg = new Variant[1];
             rgvarg[0] = new Variant(str);
 
-            ieWindowAutomation.invoke(id_exec_script, rgvarg);
+            if(ieWindowAutomation.invoke(id_exec_script, rgvarg)==null){
+            	//try again
+            	ieWindowAutomation = null;
+            	if(initWindowAutomation()){
+            		ieWindowAutomation.invoke(id_exec_script, rgvarg);
+            	}
+            }
         }
     }
 
diff --git a/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/Messages.java b/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/Messages.java
index ff546ad..f1fbda3 100644
--- a/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/Messages.java
+++ b/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/Messages.java
@@ -30,6 +30,7 @@
 	public static String BlindView_Visualize_4;
 	public static String BlindVisualizationAction_0;
 	public static String Visualization_Error;
+	public static String Report;
 
 	static {
 		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/PartControlBlind.java b/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/PartControlBlind.java
index 0b1f59e..a59b1a0 100644
--- a/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/PartControlBlind.java
+++ b/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/PartControlBlind.java
@@ -10,7 +10,11 @@
  *******************************************************************************/
 package org.eclipse.actf.visualization.blind.ui.internal;
 
+import java.io.BufferedOutputStream;
 import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -37,8 +41,8 @@
 import org.eclipse.actf.visualization.eval.html.statistics.PageData;
 import org.eclipse.actf.visualization.eval.problem.HighlightTargetId;
 import org.eclipse.actf.visualization.eval.problem.IProblemItem;
+import org.eclipse.actf.visualization.eval.problem.ReportUtil;
 import org.eclipse.actf.visualization.ui.IVisualizationView;
-import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IEditorPart;
@@ -79,26 +83,59 @@
 		this.vizView = vizView;
 		this._shell = parent.getShell();
 
-		//new BlindToolBar(parent, SWT.NONE, this);
+		// new BlindToolBar(parent, SWT.NONE, this);
 
 		this._blindBrowser = new BlindVisualizationBrowser(parent);
 		this._blindBrowser.setBrowserSilent();
 	}
 
-	public void doSave() {
-		String saveFile = DialogSave.open(_shell, DialogSave.HTML, targetUrl,
-				"_blind.htm"); //$NON-NLS-1$
+	public void doSave(boolean withReport) {
+		String saveFile = DialogSave.open(_shell, DialogSave.CSV, targetUrl,
+				".csv"); //$NON-NLS-1$
 
-		if (null == this.resultDoc || null == saveFile) {
-			return;
+		if (saveFile != null) {
+
+			// final IViewPart curView =
+			// PlatformUIUtil.showView(IVisualizationView.ID_BLINDVIEW);
+			// TODO
+			IEvaluationResult result = (IEvaluationResult) Mediator
+					.getInstance().getReport(vizView);
+			if (result != null) {
+				try {
+					OutputStreamWriter osw = new OutputStreamWriter(
+							new BufferedOutputStream(new FileOutputStream(saveFile)),
+							// "UTF-8");
+							"Shift_JIS"); // TODO
+					PrintWriter reportPW = new PrintWriter(osw);
+					ReportUtil reportUtil = new ReportUtil();
+					reportUtil.setPrintWriter(reportPW);
+					reportUtil.writeFirstLine();
+					result.accept(reportUtil);
+					reportPW.flush();
+					reportPW.close();
+				
+				} catch (Exception e) {
+				}
+			}
+
+			if (withReport) {
+				if (null == this.resultDoc || null == saveFile) {
+					return;
+				}
+
+				if (saveFile.toLowerCase().endsWith(".csv")) {
+					saveFile = saveFile.substring(0, saveFile.length() - 3);
+				}
+				saveFile = saveFile.concat(".html");
+
+				String imageBriefDir = saveFile.substring(saveFile
+						.lastIndexOf("\\") + 1, saveFile.lastIndexOf(".")) //$NON-NLS-1$ //$NON-NLS-2$
+						+ "/"; //$NON-NLS-1$
+				// 2007.09.25 remove space character to include JavaScript files
+				imageBriefDir = imageBriefDir.replace(' ', '_');
+				saveReportFile(saveFile, imageBriefDir, true);
+			}
 		}
-
-		String imageBriefDir = saveFile.substring(
-				saveFile.lastIndexOf("\\") + 1, saveFile.lastIndexOf(".")) //$NON-NLS-1$ //$NON-NLS-2$
-				+ "/"; //$NON-NLS-1$
-		// 2007.09.25 remove space character to include JavaScript files
-		imageBriefDir = imageBriefDir.replace(' ', '_');
-		saveReportFile(saveFile, imageBriefDir, true);
 	}
 
 	public int doVisualize() {
@@ -291,4 +328,21 @@
 
 		}
 	}
+
+	public boolean isBrowserModeSupported(IModelServiceHolder msh) {
+		if (msh != null) {
+			for (IBlindVisualizer bvh : blindVizualizers) {
+				if (bvh.setModelService(msh.getModelService())) {
+					// TODO add method into interface
+					if (bvh.getClass()
+							.getName()
+							.startsWith("org.eclipse.actf.visualization.blind.")) {
+						return true;
+					}
+				}
+			}
+		}
+		return false;
+	}
+
 }
diff --git a/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/SaveReportBlind.java b/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/SaveReportBlind.java
index b6e2a60..cc58e50 100644
--- a/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/SaveReportBlind.java
+++ b/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/SaveReportBlind.java
@@ -51,7 +51,7 @@
 	private static final String SRC = "src";
 
 	private static final String[] ICON_NAMES = { "Err.png", "Warn.png",
-			"Info.png" };
+			"Conf.png", "Info.png" };
 
 	// moved from PartRightBlind
 	// TODO renew
@@ -67,17 +67,17 @@
 
 			IEvaluationResult evalResult = (IEvaluationResult) checkResult;
 
-			String saveDir = sFileName.substring(0, sFileName
-					.lastIndexOf(File.separator) + 1);
+			String saveDir = sFileName.substring(0,
+					sFileName.lastIndexOf(File.separator) + 1);
 			String imageDir = saveDir + imageBriefDir;
 			File fDir = new File(imageDir);
 			if ((!fDir.isDirectory() || !fDir.canWrite()) && !fDir.mkdirs()) {
 				System.err.println("can't create image dir:" + imageDir);
 			}
 
-			String preName = sFileName.substring(sFileName
-					.lastIndexOf(File.separator) + 1, sFileName
-					.lastIndexOf("."));
+			String preName = sFileName.substring(
+					sFileName.lastIndexOf(File.separator) + 1,
+					sFileName.lastIndexOf("."));
 			String scriptVariantName = preName + "_variant.js";
 			String reportImgSaveName = preName + ".png";
 
@@ -114,9 +114,10 @@
 					// e.printStackTrace();
 				}
 
-				FileUtils.copyFile(new File(BlindVizResourceUtil
-						.getTempDirectory(), "pagerating.png"), imageDir
-						+ reportImgSaveName, true);
+				FileUtils.copyFile(
+						new File(BlindVizResourceUtil.getTempDirectory(),
+								"pagerating.png"),
+						imageDir + reportImgSaveName, true);
 
 			}
 
@@ -154,18 +155,16 @@
 
 				Element newEle = result.createElement("script");
 				StringBuffer buffer = new StringBuffer();
-				buffer
-						.append(FileUtils.LINE_SEP
-								+ "if(navigator.appName.toLowerCase().indexOf(\"microsoft\")>=0){"
-								+ FileUtils.LINE_SEP);
+				buffer.append(FileUtils.LINE_SEP
+						+ "if(navigator.appName.toLowerCase().indexOf(\"microsoft\")>=0){"
+						+ FileUtils.LINE_SEP);
 				buffer.append("jsFile=\"highlight.js\";" + FileUtils.LINE_SEP);
 				buffer.append("}else{" + FileUtils.LINE_SEP);
 				buffer.append("jsFile=\"highlight_moz.js\";"
 						+ FileUtils.LINE_SEP);
 				buffer.append("}" + FileUtils.LINE_SEP);
-				buffer
-						.append("document.write(\"<script src=\"+acc_imageDir+jsFile+\"></script>\");"
-								+ FileUtils.LINE_SEP);
+				buffer.append("document.write(\"<script src=\"+acc_imageDir+jsFile+\"></script>\");"
+						+ FileUtils.LINE_SEP);
 				newEle.appendChild(result.createComment(buffer.toString()));
 				el.appendChild(newEle);
 			}
@@ -421,8 +420,10 @@
 			return ICON_NAMES[0];
 		case IEvaluationItem.SEV_WARNING:
 			return ICON_NAMES[1];
-		case IEvaluationItem.SEV_INFO:
+		case IEvaluationItem.SEV_USER:
 			return ICON_NAMES[2];
+		case IEvaluationItem.SEV_INFO:
+			return ICON_NAMES[3];
 		default:
 			return NULL_STRING;
 		}
diff --git a/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/messages.properties b/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/messages.properties
index d33f0e7..86e3eb3 100644
--- a/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/messages.properties
+++ b/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/messages.properties
@@ -23,6 +23,7 @@
 #
 BlindView_Visualize_4 = Visualize blind usability
 BlindVisualizationAction_0 = Visualize
+Report = Save HTML Report
 #
 # Others
 #
diff --git a/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/messages_ja.properties b/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/messages_ja.properties
index 46805c7..af50ab0 100644
--- a/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/messages_ja.properties
+++ b/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/internal/messages_ja.properties
@@ -21,8 +21,9 @@
 #
 # Actions
 #
-BlindView_Visualize_4 = \u97f3\u58f0\u30e6\u30fc\u30b6\u30d3\u30ea\u30c6\u30a3\u8996\u899a\u5316\u5b9f\u884c
+BlindView_Visualize_4 = \u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u691c\u8a3c\u30fb\u97f3\u58f0\u30e6\u30fc\u30b6\u30d3\u30ea\u30c6\u30a3\u8996\u899a\u5316\u5b9f\u884c
 BlindVisualizationAction_0 = \u8996\u899a\u5316\u5b9f\u884c
+Report = HTML\u5f62\u5f0f\u306e\u30ec\u30dd\u30fc\u30c8\u3082\u4fdd\u5b58
 #
 # Others
 #
diff --git a/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/views/BlindView.java b/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/views/BlindView.java
index 3fdf14e..42dd425 100644
--- a/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/views/BlindView.java
+++ b/plugins/org.eclipse.actf.visualization.blind/src/org/eclipse/actf/visualization/blind/ui/views/BlindView.java
@@ -23,6 +23,7 @@
 import org.eclipse.actf.visualization.engines.blind.html.ui.elementViewer.ElementViewerManagerFactory;
 import org.eclipse.actf.visualization.engines.blind.html.ui.elementViewer.IElementViewerManager;
 import org.eclipse.actf.visualization.engines.blind.ui.actions.BlindSettingAction;
+import org.eclipse.actf.visualization.engines.blind.ui.actions.BlindVisualizationBrowserModeAction;
 import org.eclipse.actf.visualization.ui.IVisualizationView;
 import org.eclipse.actf.visualization.ui.VisualizationStatusLineContributionItem;
 import org.eclipse.actf.visualization.ui.report.table.ResultTableLabelProvider;
@@ -55,6 +56,8 @@
 	private PartControlBlind partRightBlind;
 
 	private HashSet<IWorkbenchPage> pageSet = new HashSet<IWorkbenchPage>();
+	
+	private BlindVisualizationBrowserModeAction browserVisualizaton;
 
 	public BlindView() {
 		super();
@@ -85,8 +88,11 @@
 		IActionBars bars = getViewSite().getActionBars();
 		// IMenuManager menuManager = bars.getMenuManager();
 		IToolBarManager toolbarManager = bars.getToolBarManager();
+
+		browserVisualizaton = new BlindVisualizationBrowserModeAction();
 		
 		toolbarManager.add(new BlindVisualizationAction(partRightBlind));
+		toolbarManager.add(browserVisualizaton); 
 		toolbarManager.add(new BlindSettingAction());
 		toolbarManager.add(new BlindSaveAction(partRightBlind));
 		toolbarManager.add(new BlindOpenIdCssAction());
@@ -192,7 +198,11 @@
 	}
 
 	public void modelserviceChanged(MediatorEvent event) {
-		// do nothing
+		if(partRightBlind.isBrowserModeSupported(event.getModelServiceHolder())){
+			browserVisualizaton.setEnabled(true);
+		}else{
+			browserVisualizaton.setEnabled(false);			
+		}
 	}
 
 	public void modelserviceInputChanged(MediatorEvent event) {
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/VisualizeEngine.java b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/VisualizeEngine.java
index 48a7369..3fa474d 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/VisualizeEngine.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/VisualizeEngine.java
@@ -284,6 +284,7 @@
 			DocumentCleaner.removeEmbed(result);
 			DocumentCleaner.removeApplet(result);
 			DocumentCleaner.removeBase(result);
+			DocumentCleaner.removePI(result);
 
 			VisualizationResultCleaner.clean(result, targetUrl);
 
@@ -308,7 +309,8 @@
 			VisualizeStyleInfoManager.getInstance()
 					.fireVisualizeStyleInfoUpdate(styleInfo);
 
-			if (curParamBlind.visualizeMode == ParamBlind.BLIND_BROWSER_MODE) {
+			if (curParamBlind.visualizeMode
+					.equals(ParamBlind.BLIND_BROWSER_MODE)) {
 				VisualizeViewUtil.returnTextView(result, allPc, baseUrl);
 				return;
 			} else {
@@ -380,21 +382,24 @@
 				title = titleNode.getNodeValue();
 			} else {
 				error = true;
-				title = "untitled";
+				title = "";
 			}
 
-			title.trim();
 			if (remove) {
-				if (title.length() > 0) {
-					div.appendChild(doc.createTextNode("[Internal frame:"
-							+ title + "]"));
-				}
 				div.setAttribute("width", iframe.getAttribute("width"));
 				div.setAttribute("height", iframe.getAttribute("height"));
 				if (error) {
+					div.appendChild(doc
+							.createTextNode("[iframe: (without title)]"));
 					div.setAttribute("style", errorStyle);
 				} else {
-					div.setAttribute("style", iframe.getAttribute("style"));
+					div.appendChild(doc.createTextNode("[iframe: title=\""
+							+ title + "\"]"));
+					if (title.matches("^[\\s\u3000]*$")) {
+						div.setAttribute("style", errorStyle);
+					} else {
+						div.setAttribute("style", iframe.getAttribute("style"));
+					}
 				}
 				Node parent = iframe.getParentNode();
 				parent.insertBefore(div, iframe);
@@ -413,7 +418,7 @@
 			if (typeS.equalsIgnoreCase("image")) {
 
 				input.setAttribute("type", "button");
-				//				
+				//
 				NamedNodeMap map = input.getAttributes();
 				int mapSize = map.getLength();
 				Node altNode = null;
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/util/HtmlErrorLogListener.java b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/util/HtmlErrorLogListener.java
index 176cf88..b80434e 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/util/HtmlErrorLogListener.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/util/HtmlErrorLogListener.java
@@ -64,7 +64,7 @@
 					orgDoctype = orgDoctype.substring(0, orgDoctype
 							.indexOf("\""));
 					if (orgDoctype
-							.matches("-//W3C//DTD XHTML ((1.0 (Strict|Transitional|Frameset))|1.1|Basic 1.0)//EN")) {
+							.matches("-//W3C//DTD XHTML ((1.0 (Strict|Transitional|Frameset))|1.1|Basic 1.0|Basic 1.1)//EN")) {
 						orgDoctype = "";
 					} else {
 						isInvalidDoctype = true;
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/DocumentCleaner.java b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/DocumentCleaner.java
index b06d519..fb566b9 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/DocumentCleaner.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/DocumentCleaner.java
@@ -23,6 +23,7 @@
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
+import org.w3c.dom.ProcessingInstruction;
 
 @SuppressWarnings("nls")
 public class DocumentCleaner {
@@ -355,5 +356,15 @@
 
 		}
 	}
+	
+	public static void removePI(Document doc){
+		NodeList nl = doc.getChildNodes();
+		for(int i=nl.getLength()-1;i>-1;i--){
+			Node n = nl.item(i);
+			if(n instanceof ProcessingInstruction){
+				doc.removeChild(n);
+			}
+		}
+	}
 
 }
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/ImgChecker.java b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/ImgChecker.java
index 65721df..a5b516a 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/ImgChecker.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/ImgChecker.java
@@ -128,8 +128,10 @@
 					if (!areaE.hasAttribute(ALT)) {
 						if (areaE.hasAttribute("href")) {
 							prob = new BlindProblem(IBlindProblem.NO_ALT_AREA,
-									mapEl.getAttribute("name") + " , href=\""
-											+ areaE.getAttribute("href") + "\"");
+									"map name=\"" + mapEl.getAttribute("name")
+											+ "\", href=\""
+											+ areaE.getAttribute("href")
+											+ "\".");
 							prob.setTargetNode(mapData.getOrigNode(areaE));
 						}
 					} else {
@@ -174,8 +176,8 @@
 						if (checkItems[prob.getSubType()]) {
 							Element errorImg = doc.createElement("img");
 							errorImg.setAttribute(ALT, "error icon");
-							errorImg.setAttribute("title", prob
-									.getDescription());
+							errorImg.setAttribute("title",
+									prob.getDescription());
 							if (idObj != null) {
 								errorImg.setAttribute("onmouseover",
 										"updateBaloon('id" + idObj + "');");
@@ -196,6 +198,7 @@
 	}
 
 	private String checkAlt(Element img) {
+		// check_H67(img); // For new JIS
 
 		boolean noAltError = false;
 		String altS = ""; //$NON-NLS-1$
@@ -203,17 +206,19 @@
 		BlindProblem prob = null;
 
 		if (!img.hasAttribute(ALT)) {
-			prob = new BlindProblem(IBlindProblem.NO_ALT_IMG, img
-					.getAttribute(SRC));
+			prob = new BlindProblem(IBlindProblem.NO_ALT_IMG,
+					img.getAttribute(SRC));
 			noAltError = true;
 		} else {
 			altS = img.getAttribute(ALT);
 			if (altS.length() > 0) {
 				if (textChecker.isInappropriateAlt(altS)) {
-					prob = new BlindProblem(IBlindProblem.WRONG_ALT_IMG, altS);
+					// prob = new BlindProblem(IBlindProblem.WRONG_ALT_IMG,
+					// altS);
+					prob = new BlindProblem(IBlindProblem.ALERT_WRONG_ALT, altS);
 				} else if (textChecker.isSeparatedJapaneseChars(altS)) {
-					prob = new BlindProblem(IBlindProblem.SEPARATE_DBCS_ALT_IMG,
-							altS);
+					prob = new BlindProblem(
+							IBlindProblem.SEPARATE_DBCS_ALT_IMG, altS);
 				} else {
 					switch (textChecker.checkInappropriateAlt(altS)) {
 					case 3:
@@ -221,8 +226,10 @@
 								altS);
 						break;
 					case 2:
-						prob = new BlindProblem(IBlindProblem.WRONG_ALT_IMG,
+						prob = new BlindProblem(IBlindProblem.ALERT_WRONG_ALT,
 								altS);
+						// prob = new BlindProblem(IBlindProblem.WRONG_ALT_IMG,
+						// altS);
 						break;
 					case 1:
 						prob = new BlindProblem(IBlindProblem.ALERT_WRONG_ALT,
@@ -260,4 +267,42 @@
 		}
 		return (imgText);
 	}
+
+	/**
+	 * For new JIS
+	 * 
+	 * @param img
+	 */
+	private void check_H67(Element img) {
+		System.out.println("----");
+		System.out.println("check_H67");
+		String src = img.getAttribute(SRC);
+		System.out.println("src = " + src + ", alt = [" + img.getAttribute(ALT)
+				+ "]");
+		System.out.println(isIgnoredByAT(img));
+
+		if (isIgnoredByAT(img)) {
+			String alt = img.getAttribute(ALT); // it must exist
+			if (alt.matches("[ ]+"))
+				System.out.println("warning: alt=\"\" is recommended");
+			if (alt.matches("(\\u00A0)+"))
+				System.out
+						.println("error: &nbsp; cannot be used for null ALT purpose");
+			if (img.hasAttribute("title")
+					&& img.getAttribute("title").length() > 0)
+				System.out.println("error: title att exists in ignored img");
+		}
+	}
+
+	/**
+	 * For new JIS
+	 * 
+	 * @param img
+	 * @return
+	 */
+	private boolean isIgnoredByAT(Element img) {
+		String alt = img.getAttribute(ALT);
+		// System.out.println(Integer.toHexString(alt.codePointAt(0)));
+		return img.hasAttribute(ALT) && alt.matches("[ \\u00A0]*");
+	}
 }
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 19ca922..85b8d14 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
@@ -83,7 +83,7 @@
 		} else if (tagName.equals("textarea")) {
 			return true;
 		} else if (tagName.equals("input")) {
-			String type = el.getAttribute("type");
+			String type = el.getAttribute("type").toLowerCase();
 			if ((type.length() == 0) | type.equals("text")
 					| type.equals("textarea") | type.equals("radio")
 					| type.equals("checkbox")) {
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind/icons/etool16/wh_16.png b/plugins/org.eclipse.actf.visualization.engines.blind/icons/etool16/wh_16.png
new file mode 100644
index 0000000..db9aaa9
--- /dev/null
+++ b/plugins/org.eclipse.actf.visualization.engines.blind/icons/etool16/wh_16.png
Binary files differ
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind/src/messages.properties b/plugins/org.eclipse.actf.visualization.engines.blind/src/messages.properties
index 0a77297..b5b7875 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind/src/messages.properties
+++ b/plugins/org.eclipse.actf.visualization.engines.blind/src/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2006, 2008 IBM Corporation and others.
+# Copyright (c) 2006, 2010 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
@@ -9,31 +9,31 @@
 #     IBM Corporation - initial API and implementation
 ###############################################################################
 #
-AltDialog_TITLE = Edit Inappropriate Alt List
-AltDialog_Column_Name = Inappropreate ALT WORDS
+AltDialog_TITLE = Edit Inappropriate alt attribute List
+AltDialog_Column_Name = Inappropreate alt WORDS
 AltDialog_MSG_No_String = Please input string.
 AltDialog_MSG_Existed = The Word has existed.
 #
 # PageEvaluation
 #
-PageEvaluation_Bad=Unsatisfactory (needs modification)
+PageEvaluation_Bad=Very poor
 PageEvaluation_Excellent=Excellent
 PageEvaluation_Good=Good
-PageEvaluation_Poor=Passes minimum requirements
+PageEvaluation_Poor=Poor
 #
 # SummaryEvaluation
 #
-Eval_redundant_img_alt=Redundant ALT attribute:
-Eval_wrong_img_alt=Image with wrong ALT attribute:
-Eval_no_img_alt=Image without ALT attribute:
+Eval_redundant_img_alt=Redundant alt attribute:
+Eval_wrong_img_alt=Image with wrong alt attribute:
+Eval_no_img_alt=Image without alt attribute:
 Eval_redundant_img_alt_error_msg=If there are alternative text near the image, please use alt="".
-Eval_wrong_img_alt_error_msg=Please do not use unclear ALT, such as "click here" or "image".
+Eval_wrong_img_alt_error_msg=Please do not use unclear alt, such as "click here" or "image".
 Eval_no_img_alt_error_msg=Please provide alternative text for an image (If the image has no information to read out, please provide alt=""
 Eval_navigability_low_score_error_msg=In visualization view, you can confirm that most part of the page are dark-colored.{0}Blind users have to wait too long to visit these fragments.{1}To improve blind users' navigability, please provide more headings(H1,H2,...) or skip-links.
 Eval_navigability_long_time_error_msg=This page has some skip-links or some headings.{0}"However, you can find some dark fragments in visualization view.{1}Blind users have to wait too long to visit these fragments.{2}"To improve blind users' navigability, please provide more headings(H1,H2,...) or skip-links.
-Eval_navigability_good_msg=This page is well structured and might be easy for blind users to navigate.
+Eval_navigability_good_msg=This page is well structured and might be easy for blind users to operate.
 Eval_confirm_errors_detailed_report=Please confirm errors at detailed report tab, then correct them.
-Eval_confirm_alt_attributes_first=At first, please confirm ALT attribute of images.
+Eval_confirm_alt_attributes_first=At first, please confirm alt attribute of images.
 Eval_many_accessibility_issues=This page seems to have many accessibility issues.
 Eval_some_accessibility_issues=This page seems to have some accessibility issues.
 Eval_completely_compliant_with_user_check_items=This page seems completely compliant with guidelines.
@@ -44,7 +44,7 @@
 Eval_some_errors_on_metrics1=({0}: Please confirm them at detailed report tab.)
 Eval_compliant_with_some_other_errors=This page is almost compliant with guidelines, however, there are still some errors.
 Eval_excellent=Excellent!
-Eval_easy_for_blind_user_to_navigate=This page is well structured and might be easy for blind users to navigate.
+Eval_easy_for_blind_user_to_navigate=This page is well structured and might be easy for blind users to operate.
 Eval_page_has_skiplinks_headings=This page has some skip-links or some headings.
 Eval_darkcolored_visualization_view=However, you can find some dark fragments in visualization view. In visualization view, you can confirm that most part of the page are dark-colored.
 #
@@ -66,3 +66,8 @@
 DialogSettingBlind_Input_tags_22 = Input tags:
 DialogSettingBlind_Label_tags_23 = Label tags:
 DialogSettingBlind_Tabel_border_24 = Tabel border:
+#
+#
+#
+VisualizeBrowserMode = Visualize (Voice browser mode)
+VisualizeBrowserModeTooltip = Visualize blind usability (Voice browser mode)
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind/src/messages_ja.properties b/plugins/org.eclipse.actf.visualization.engines.blind/src/messages_ja.properties
index ce59ac2..81e67ef 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind/src/messages_ja.properties
+++ b/plugins/org.eclipse.actf.visualization.engines.blind/src/messages_ja.properties
@@ -9,31 +9,31 @@
 #     IBM Corporation - initial API and implementation
 ###############################################################################
 #
-AltDialog_TITLE = \u4e0d\u9069\u5207\u306aALT\u5c5e\u6027\u3092\u8a2d\u5b9a
-AltDialog_Column_Name = \u4e0d\u9069\u5207\u306aALT\u5c5e\u6027
+AltDialog_TITLE = \u4e0d\u9069\u5207\u306aalt\u5c5e\u6027\u3092\u8a2d\u5b9a
+AltDialog_Column_Name = \u4e0d\u9069\u5207\u306aalt\u5c5e\u6027
 AltDialog_MSG_No_String = \u4f55\u3089\u304b\u306e\u6587\u5b57\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
 AltDialog_MSG_Existed = \u65e2\u306b\u5165\u529b\u3055\u308c\u305f\u5358\u8a9e\u3067\u3059
 #
 # PageEvaluation
 #
-PageEvaluation_Bad=\u8981\u4fee\u6b63
+PageEvaluation_Bad=\u975e\u5e38\u306b\u60aa\u3044
 PageEvaluation_Excellent=\u975e\u5e38\u306b\u826f\u3044
 PageEvaluation_Good=\u826f\u3044
-PageEvaluation_Poor=\u5229\u7528\u56f0\u96e3
+PageEvaluation_Poor=\u60aa\u3044
 #
 # SummaryEvaluation
 #
-Eval_redundant_img_alt=\u7e70\u308a\u8fd4\u3057\u306b\u306a\u308bALT\u5c5e\u6027\u3092\u6301\u3064\u753b\u50cf\u306e\u6570:
-Eval_wrong_img_alt=\u5224\u308a\u306b\u304f\u3044ALT\u5c5e\u6027\u3092\u6301\u3064\u753b\u50cf\u306e\u6570:
-Eval_no_img_alt=ALT\u5c5e\u6027\u306e\u7121\u3044\u753b\u50cf\u306e\u6570:
-Eval_redundant_img_alt_error_msg=\u3082\u3057\u753b\u50cf\u306e\u3059\u3050\u524d\u5f8c\u306b\uff0c\u305d\u306e\u753b\u50cf\u306e\u610f\u5473\u3092\u8868\u3059\u6587\u5b57\u5217\u306a\u3069\u304c\u5b58\u5728\u3057\u3066\u3044\u308b\u5834\u5408\u306b\u306f\uff0cALT="" \u3068\u3057\u3066\u304f\u3060\u3055\u3044\uff0e \uff08\u97f3\u58f0\u30d6\u30e9\u30a6\u30b6\u3067\u95b2\u89a7\u3057\u305f\u969b\u306b\uff0c\u540c\u3058\u6587\u7ae0\u3092\u7e70\u308a\u8fd4\u3057\u8aad\u307f\u4e0a\u3052\u3066\u3057\u307e\u3044\u307e\u3059\uff0e\uff09
-Eval_wrong_img_alt_error_msg=\u753b\u50cf\u306e\u4ee3\u66ff\u30c6\u30ad\u30b9\u30c8\uff08ALT\u5c5e\u6027\uff09\u306b\u306f\u610f\u5473\u306e\u3042\u308b\u6587\u5b57\u5217\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\uff0e \uff08\u300c\u30af\u30ea\u30c3\u30af\u300d\u3084\u300cimage\u300d\u7b49\u3067\u306f\uff0c\u97f3\u58f0\u3067\u8aad\u307f\u4e0a\u3052\u305f\u969b\u306b\u753b\u50cf\u306e\u610f\u5473\u3084\u5f79\u5272\u304c\u4f1d\u308f\u308a\u307e\u305b\u3093\uff0e)
-Eval_no_img_alt_error_msg=\u753b\u50cf\uff08IMG\u30bf\u30b0\uff09\u306b\u306f\uff0c\u305d\u306e\u753b\u50cf\u306e\u610f\u5473\u3084\u5f79\u5272\u3092\u8868\u3059\u6587\u5b57\u5217\u3092ALT\u5c5e\u6027\u3068\u3057\u3066\u4ed8\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\uff0e \uff08\u3082\u3057\uff0c\u7a7a\u767d\u753b\u50cf\u306a\u3069\uff0c\u610f\u5473\u306e\u7121\u3044\u753b\u50cf\u306e\u5834\u5408\u306f ALT="" \u3068\u3057\u3066\u304f\u3060\u3055\u3044)
+Eval_redundant_img_alt=\u7e70\u308a\u8fd4\u3057\u306b\u306a\u308balt\u5c5e\u6027\u3092\u6301\u3064\u753b\u50cf\u306e\u6570:
+Eval_wrong_img_alt=\u5224\u308a\u306b\u304f\u3044alt\u5c5e\u6027\u3092\u6301\u3064\u753b\u50cf\u306e\u6570:
+Eval_no_img_alt=alt\u5c5e\u6027\u306e\u7121\u3044\u753b\u50cf\u306e\u6570:
+Eval_redundant_img_alt_error_msg=\u3082\u3057\u753b\u50cf\u306e\u3059\u3050\u524d\u5f8c\u306b\uff0c\u305d\u306e\u753b\u50cf\u306e\u610f\u5473\u3092\u8868\u3059\u6587\u5b57\u5217\u306a\u3069\u304c\u5b58\u5728\u3057\u3066\u3044\u308b\u5834\u5408\u306b\u306f\uff0calt="" \u3068\u3057\u3066\u304f\u3060\u3055\u3044\uff0e \uff08\u97f3\u58f0\u30d6\u30e9\u30a6\u30b6\u3067\u95b2\u89a7\u3057\u305f\u969b\u306b\uff0c\u540c\u3058\u6587\u7ae0\u3092\u7e70\u308a\u8fd4\u3057\u8aad\u307f\u4e0a\u3052\u3066\u3057\u307e\u3044\u307e\u3059\uff0e\uff09
+Eval_wrong_img_alt_error_msg=\u753b\u50cf\u306e\u4ee3\u66ff\u30c6\u30ad\u30b9\u30c8\uff08alt\u5c5e\u6027\uff09\u306b\u306f\u610f\u5473\u306e\u3042\u308b\u6587\u5b57\u5217\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\uff0e \uff08\u300c\u30af\u30ea\u30c3\u30af\u300d\u3084\u300cimage\u300d\u7b49\u3067\u306f\uff0c\u97f3\u58f0\u3067\u8aad\u307f\u4e0a\u3052\u305f\u969b\u306b\u753b\u50cf\u306e\u610f\u5473\u3084\u5f79\u5272\u304c\u4f1d\u308f\u308a\u307e\u305b\u3093\uff0e)
+Eval_no_img_alt_error_msg=\u753b\u50cf\uff08IMG\u30bf\u30b0\uff09\u306b\u306f\uff0c\u305d\u306e\u753b\u50cf\u306e\u610f\u5473\u3084\u5f79\u5272\u3092\u8868\u3059\u6587\u5b57\u5217\u3092alt\u5c5e\u6027\u3068\u3057\u3066\u4ed8\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\uff0e \uff08\u3082\u3057\uff0c\u7a7a\u767d\u753b\u50cf\u306a\u3069\uff0c\u610f\u5473\u306e\u7121\u3044\u753b\u50cf\u306e\u5834\u5408\u306f alt="" \u3068\u3057\u3066\u304f\u3060\u3055\u3044)
 Eval_navigability_low_score_error_msg=\u53f3\u4e0a\u306e\u7d50\u679c\u753b\u9762\u3067\u30da\u30fc\u30b8\u306e\u5927\u90e8\u5206\u304c\u6697\u3044\u8272\u306b\u306a\u3063\u3066\u3044\u307e\u305b\u3093\u304b\uff1f{0} \u3053\u306e\u30da\u30fc\u30b8\u306b\u97f3\u58f0\u3067\u30a2\u30af\u30bb\u30b9\u3057\u305f\u5834\u5408\uff0c\u6700\u3082\u6697\u3044\u8272\u306e\u90e8\u5206\u306b\u5230\u9054\u3059\u308b\u306b\u306f90\u79d2\u4ee5\u4e0a\u304b\u304b\u3063\u3066\u3057\u307e\u3044\u307e\u3059\uff0e{1} \u898b\u51fa\u3057\u30bf\u30b0(H1,H2...)\u3084\u30da\u30fc\u30b8\u5185\u30ea\u30f3\u30af\u3092\u63d0\u4f9b\u3057\u3066\uff0c\u30da\u30fc\u30b8\u5185\u306e\u5404\u9805\u76ee\u3078\u306e\u79fb\u52d5\u304c\u7c21\u5358\u306b\u306a\u308b\u3088\u3046\u306b\u3057\u3066\u4e0b\u3055\u3044\uff0e{2} \u7d50\u679c\u753b\u9762\u306e\u4e2d\u3067\u306f\uff0c\u898b\u51fa\u3057\u306f\u6c34\u8272\uff0c\u30da\u30fc\u30b8\u5185\u30ea\u30f3\u30af\u306f\u77e2\u5370\u3067\u8868\u793a\u3055\u308c\u307e\u3059\uff0e{3} \u307e\u305f\uff0c\u3053\u308c\u3089\u306e\u6a5f\u80fd\u3092\u63d0\u4f9b\u3059\u308b\u3053\u3068\u3067\uff0c\u7d50\u679c\u5168\u4f53\u304c\u660e\u308b\u3044\u8272\u306b\u306a\u3063\u3066\u304d\u307e\u3059\u306e\u3067\u78ba\u8a8d\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\uff0e
-Eval_navigability_long_time_error_msg=\u3053\u306e\u30da\u30fc\u30b8\u306b\u306f\uff0c\u97f3\u58f0\u3067\u306e\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u304c\u96e3\u3057\u3044\u7b87\u6240\u304c\u6b8b\u3063\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e{0} \u53f3\u4e0a\u306e\u7d50\u679c\u753b\u9762\u306e\u4e2d\u3067\u6700\u3082\u6697\u3044\u8272\u306e\u90e8\u5206\u306b\u5230\u9054\u3059\u308b\u306b\u306f90\u79d2\u4ee5\u4e0a\u304b\u304b\u3063\u3066\u3057\u307e\u3044\u307e\u3059\uff0e{1} \u3088\u308a\u591a\u304f\u306e\u898b\u51fa\u3057\u30bf\u30b0(H1,H2...)\u3084\u30da\u30fc\u30b8\u5185\u30ea\u30f3\u30af\u3092\u63d0\u4f9b\u3057\u3066\uff0c\u30da\u30fc\u30b8\u5185\u306e\u5404\u9805\u76ee\u3078\u7c21\u5358\u306b\u79fb\u52d5\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\uff0e{2} \u7d50\u679c\u753b\u9762\u306e\u4e2d\u3067\u306f\uff0c\u898b\u51fa\u3057\u306f\u6c34\u8272\uff0c\u30da\u30fc\u30b8\u5185\u30ea\u30f3\u30af\u306f\u77e2\u5370\u3067\u8868\u793a\u3055\u308c\u307e\u3059\uff0e{3} \u307e\u305f\uff0c\u3053\u308c\u3089\u306e\u6a5f\u80fd\u3092\u63d0\u4f9b\u3059\u308b\u3053\u3068\u3067\uff0c\u7d50\u679c\u5168\u4f53\u304c\u660e\u308b\u3044\u8272\u306b\u306a\u3063\u3066\u304d\u307e\u3059\u306e\u3067\u78ba\u8a8d\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\uff0e
-Eval_navigability_good_msg=\u3053\u306e\u30da\u30fc\u30b8\u306f\u97f3\u58f0\u30d6\u30e9\u30a6\u30b6\u3067\u3082\u7c21\u5358\u306b\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u3067\u304d\u308b\u3068\u601d\u308f\u308c\u307e\u3059\uff0e{0} \u53f3\u4e0a\u306e\u7d50\u679c\u753b\u9762\u3067\uff0c\u80cc\u666f\u304c\u6c34\u8272\u306e\u6587\u5b57\u5217\u304c\u898b\u51fa\u3057\u3067\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\uff0e{1} \u307e\u305f\uff0c\u77e2\u5370\u306e\u30a2\u30a4\u30b3\u30f3\u3092\u62bc\u3057\u3066\uff0c\u30da\u30fc\u30b8\u5185\u30ea\u30f3\u30af\u306e\u30b8\u30e3\u30f3\u30d7\u5148\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\uff0e
+Eval_navigability_long_time_error_msg=\u3053\u306e\u30da\u30fc\u30b8\u306b\u306f\uff0c\u97f3\u58f0\u3067\u306e\u64cd\u4f5c\u304c\u96e3\u3057\u3044\u7b87\u6240\u304c\u6b8b\u3063\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e{0} \u53f3\u4e0a\u306e\u7d50\u679c\u753b\u9762\u306e\u4e2d\u3067\u6700\u3082\u6697\u3044\u8272\u306e\u90e8\u5206\u306b\u5230\u9054\u3059\u308b\u306b\u306f90\u79d2\u4ee5\u4e0a\u304b\u304b\u3063\u3066\u3057\u307e\u3044\u307e\u3059\uff0e{1} \u3088\u308a\u591a\u304f\u306e\u898b\u51fa\u3057\u30bf\u30b0(H1,H2...)\u3084\u30da\u30fc\u30b8\u5185\u30ea\u30f3\u30af\u3092\u63d0\u4f9b\u3057\u3066\uff0c\u30da\u30fc\u30b8\u5185\u306e\u5404\u9805\u76ee\u3078\u7c21\u5358\u306b\u79fb\u52d5\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\uff0e{2} \u7d50\u679c\u753b\u9762\u306e\u4e2d\u3067\u306f\uff0c\u898b\u51fa\u3057\u306f\u6c34\u8272\uff0c\u30da\u30fc\u30b8\u5185\u30ea\u30f3\u30af\u306f\u77e2\u5370\u3067\u8868\u793a\u3055\u308c\u307e\u3059\uff0e{3} \u307e\u305f\uff0c\u3053\u308c\u3089\u306e\u6a5f\u80fd\u3092\u63d0\u4f9b\u3059\u308b\u3053\u3068\u3067\uff0c\u7d50\u679c\u5168\u4f53\u304c\u660e\u308b\u3044\u8272\u306b\u306a\u3063\u3066\u304d\u307e\u3059\u306e\u3067\u78ba\u8a8d\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\uff0e
+Eval_navigability_good_msg=\u3053\u306e\u30da\u30fc\u30b8\u306f\u97f3\u58f0\u30d6\u30e9\u30a6\u30b6\u3067\u3082\u7c21\u5358\u306b\u64cd\u4f5c\u3067\u304d\u308b\u3068\u601d\u308f\u308c\u307e\u3059\uff0e{0} \u53f3\u4e0a\u306e\u7d50\u679c\u753b\u9762\u3067\uff0c\u80cc\u666f\u304c\u6c34\u8272\u306e\u6587\u5b57\u5217\u304c\u898b\u51fa\u3057\u3067\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\uff0e{1} \u307e\u305f\uff0c\u77e2\u5370\u306e\u30a2\u30a4\u30b3\u30f3\u3092\u62bc\u3057\u3066\uff0c\u30da\u30fc\u30b8\u5185\u30ea\u30f3\u30af\u306e\u30b8\u30e3\u30f3\u30d7\u5148\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\uff0e
 Eval_confirm_errors_detailed_report=\u8a73\u7d30\u30ec\u30dd\u30fc\u30c8\u3067\uff0c\u3069\u306e\u3088\u3046\u306a\u554f\u984c\u304c\u3042\u308b\u304b\u78ba\u8a8d\u3057\u3066\u4fee\u6b63\u3057\u3066\u304f\u3060\u3055\u3044\uff0e
-Eval_confirm_alt_attributes_first=\u307e\u305a\u306f\uff0c\u30da\u30fc\u30b8\u5185\u306e\u753b\u50cf\u306b\u5bfe\u3057\u3066\uff0c\u305d\u306e\u610f\u5473\u30fb\u5f79\u5272\u3092\u8aac\u660e\u3059\u308b\u6587\u5b57\u5217(ALT\u5c5e\u6027)\u304c\u4ed8\u52a0\u3055\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u307f\u307e\u3057\u3087\u3046\uff0e
+Eval_confirm_alt_attributes_first=\u307e\u305a\u306f\uff0c\u30da\u30fc\u30b8\u5185\u306e\u753b\u50cf\u306b\u5bfe\u3057\u3066\uff0c\u305d\u306e\u610f\u5473\u30fb\u5f79\u5272\u3092\u8aac\u660e\u3059\u308b\u6587\u5b57\u5217(alt\u5c5e\u6027)\u304c\u4ed8\u52a0\u3055\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u307f\u307e\u3057\u3087\u3046\uff0e
 Eval_many_accessibility_issues=\u3053\u306e\u30da\u30fc\u30b8\u306b\u306f\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u306b\u95a2\u3059\u308b\u554f\u984c\u304c\u591a\u6570\u5b58\u5728\u3057\u3066\u3044\u307e\u3059\uff0e
 Eval_some_accessibility_issues=\u3053\u306e\u30da\u30fc\u30b8\u306b\u306f\u3044\u304f\u3064\u304b\u306e\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u306b\u95a2\u3059\u308b\u554f\u984c\u304c\u5b58\u5728\u3057\u3066\u3044\u307e\u3059\uff0e
 Eval_completely_compliant_with_user_check_items=\u3053\u306e\u30da\u30fc\u30b8\u306f\u3053\u306e\u30c4\u30fc\u30eb\u3067\u30c1\u30a7\u30c3\u30af\u53ef\u80fd\u306a\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u306e\u9805\u76ee\u5168\u3066\u306b\u6e96\u62e0\u3057\u3066\u3044\u308b\u69d8\u3067\u3059\uff0e
@@ -44,14 +44,14 @@
 Eval_some_errors_on_metrics1=({0}: \u8a73\u7d30\u30ec\u30dd\u30fc\u30c8\u3067\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\uff0e)
 Eval_compliant_with_some_other_errors=\u3053\u306e\u30da\u30fc\u30b8\u306f\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u306b\u307b\u307c\u6e96\u62e0\u3057\u3066\u3044\u308b\u3088\u3046\u3067\u3059\u304c\uff0c\u307e\u3060\u3044\u304f\u3064\u304b\u306e\u554f\u984c\u304c\u6b8b\u3063\u3066\u3044\u307e\u3059\uff0e
 Eval_excellent=Excellent!
-Eval_easy_for_blind_user_to_navigate=\u3053\u306e\u30da\u30fc\u30b8\u306f\u97f3\u58f0\u30d6\u30e9\u30a6\u30b6\u3067\u3082\u7c21\u5358\u306b\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u3067\u304d\u308b\u3068\u601d\u308f\u308c\u307e\u3059\uff0e
-Eval_page_has_skiplinks_headings=\u3053\u306e\u30da\u30fc\u30b8\u306b\u306f\uff0c\u97f3\u58f0\u3067\u306e\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u304c\u96e3\u3057\u3044\u7b87\u6240\u304c\u6b8b\u3063\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e
+Eval_easy_for_blind_user_to_navigate=\u3053\u306e\u30da\u30fc\u30b8\u306f\u97f3\u58f0\u30d6\u30e9\u30a6\u30b6\u3067\u3082\u7c21\u5358\u306b\u64cd\u4f5c\u3067\u304d\u308b\u3068\u601d\u308f\u308c\u307e\u3059\uff0e
+Eval_page_has_skiplinks_headings=\u3053\u306e\u30da\u30fc\u30b8\u306b\u306f\uff0c\u97f3\u58f0\u3067\u306e\u64cd\u4f5c\u304c\u96e3\u3057\u3044\u7b87\u6240\u304c\u6b8b\u3063\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e
 Eval_darkcolored_visualization_view=\u53f3\u4e0a\u306e\u7d50\u679c\u753b\u9762\u3067\u30da\u30fc\u30b8\u306e\u5927\u90e8\u5206\u304c\u6697\u3044\u8272\u306b\u306a\u3063\u3066\u3044\u307e\u305b\u3093\u304b\uff1f
 #
 # PreferencePage
 #
-DialogSettingBlind_NG_Word___Wrong_Text_5 = \u4e0d\u9069\u5207\u306aALT\u5c5e\u6027
-DialogSettingBlind_NG_Word_Wrong_Text_Edit____25 = \u4e0d\u9069\u5207\u306aALT\u5c5e\u6027\u30ea\u30b9\u30c8\u306e\u7de8\u96c6
+DialogSettingBlind_NG_Word___Wrong_Text_5 = \u4e0d\u9069\u5207\u306aalt\u5c5e\u6027
+DialogSettingBlind_NG_Word_Wrong_Text_Edit____25 = \u4e0d\u9069\u5207\u306aalt\u5c5e\u6027\u30ea\u30b9\u30c8\u306e\u7de8\u96c6
 DialogSettingBlind_Language_4 = \u8a00\u8a9e
 DialogSettingBlind_English_15 = \u82f1\u8a9e
 DialogSettingBlind_Japanese_16 = \u65e5\u672c\u8a9e
@@ -66,3 +66,8 @@
 DialogSettingBlind_Input_tags_22 = \u5165\u529b\u30bf\u30b0 (Input):
 DialogSettingBlind_Label_tags_23 = \u30e9\u30d9\u30eb\u30bf\u30b0 (Label):
 DialogSettingBlind_Tabel_border_24 = \u30c6\u30fc\u30d6\u30eb\u306e\u5883\u754c:
+#
+#
+#
+VisualizeBrowserMode = \u8996\u899a\u5316 (\u97f3\u58f0\u30d6\u30e9\u30a6\u30b6\u30e2\u30fc\u30c9)
+VisualizeBrowserModeTooltip = \u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u691c\u8a3c\u30fb\u97f3\u58f0\u30e6\u30fc\u30b6\u30d3\u30ea\u30c6\u30a3\u8996\u899a\u5316\u5b9f\u884c (\u97f3\u58f0\u30d6\u30e9\u30a6\u30b6\u30e2\u30fc\u30c9)
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/BlindVizResourceUtil.java b/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/BlindVizResourceUtil.java
index 4b65294..c99f531 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/BlindVizResourceUtil.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/BlindVizResourceUtil.java
@@ -40,6 +40,8 @@
 				+ "Err.png", true);
 		FileUtils.copyFile(bundleChecker, new Path("icons/Warn.png"), path
 				+ "Warn.png", true);
+		FileUtils.copyFile(bundleChecker, new Path("icons/Conf.png"), path
+				+ "Conf.png", true);
 		FileUtils.copyFile(bundleChecker, new Path("icons/Info.png"), path
 				+ "Info.png", true);
 		FileUtils.copyFile(bundleChecker, new Path("icons/star.gif"), path
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/eval/PageEvaluation.java b/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/eval/PageEvaluation.java
index e4d38e0..541fedd 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/eval/PageEvaluation.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/eval/PageEvaluation.java
@@ -62,9 +62,7 @@
 		hlsl.addTarget(Messages.Eval_some_accessibility_issues, red, SWT.BOLD);
 		hlsl.addTarget(Messages.Eval_easy_for_blind_user_to_navigate, blue,
 				SWT.BOLD);
-		hlsl
-				.addTarget(Messages.Eval_page_has_skiplinks_headings, red,
-						SWT.BOLD);
+		hlsl.addTarget(Messages.Eval_page_has_skiplinks_headings, red, SWT.BOLD);
 		hlsl.addTarget(Messages.Eval_darkcolored_visualization_view, red,
 				SWT.BOLD);
 
@@ -76,6 +74,7 @@
 	private PageData pageData;
 
 	private String[] metrics = guidelineHolder.getMetricsNames();
+	private String[] lMetrics = guidelineHolder.getLocalizedMetricsNames();
 
 	private int metricsSize = metrics.length;
 
@@ -122,8 +121,13 @@
 
 	protected boolean hasComplianceError() {
 		for (int i = 0; i < metricsSize; i++) {
-			if (metrics[i].equalsIgnoreCase("compliance")) { //$NON-NLS-1$
-				return (scores[i] != 100);
+			if (metrics[i].equalsIgnoreCase("perceivable") || //$NON-NLS-1$
+					metrics[i].equalsIgnoreCase("understandable") || //$NON-NLS-1$
+					metrics[i].equalsIgnoreCase("robust") || //$NON-NLS-1$
+					metrics[i].equalsIgnoreCase("operable")) { //$NON-NLS-1$)
+				if (scores[i] != 100) {
+					return (true);
+				}
 			}
 		}
 		return (false);
@@ -143,7 +147,7 @@
 
 		for (int i = 0; i < metricsSize; i++) {
 			if (enabledMetrics[i]) {
-				tmpV.add(metrics[i]);
+				tmpV.add(lMetrics[i]);
 				tmpV.add(String.valueOf(scores[i]));
 			}
 		}
@@ -178,14 +182,13 @@
 
 		String rating = Messages.PageEvaluation_Bad;
 
-		if (!hasComplianceError()) {
-			if (minValue >= 90) {
-				rating = Messages.PageEvaluation_Excellent;
-			} else if (minValue >= 70) {
-				rating = Messages.PageEvaluation_Good;
-			} else if (minValue >= 60) {
-				rating = Messages.PageEvaluation_Poor;
-			}
+		// TODO check compliance / others
+		if (minValue == 100) {
+			rating = Messages.PageEvaluation_Excellent;
+		} else if (minValue >= 75) {
+			rating = Messages.PageEvaluation_Good;
+		} else if (minValue >= 50) {
+			rating = Messages.PageEvaluation_Poor;
 		}
 		return (rating);
 	}
@@ -212,14 +215,14 @@
 
 		String rating = IVisualizationConst.RATING_BAD;
 
-		if (!hasComplianceError()) {
-			if (minValue >= 90) {
-				rating = IVisualizationConst.RATING_V_GOOD;
-			} else if (minValue >= 80) {
-				rating = IVisualizationConst.RATING_GOOD;
-			} else if (minValue >= 60) {
-				rating = IVisualizationConst.RATING_POOR;
-			}
+		// TODO check compliance / others
+
+		if (minValue == 100) {
+			rating = IVisualizationConst.RATING_V_GOOD;
+		} else if (minValue >= 75) {
+			rating = IVisualizationConst.RATING_GOOD;
+		} else if (minValue >= 50) {
+			rating = IVisualizationConst.RATING_POOR;
 		}
 		return (rating);
 	}
@@ -234,7 +237,7 @@
 		this.checkMinus();
 
 		boolean[] enabled = GuidelineHolder.getInstance().getMatchedMetrics();
-		String[] metrics = this.getMetrics();
+		String[] metrics = lMetrics;
 		int[] scores = this.getScores();
 
 		Vector<String> metricsV = new Vector<String>();
@@ -276,6 +279,16 @@
 	}
 
 	/**
+	 * Get evaluation metrics used to evaluate this page 
+	 * 
+	 * @return metrics names (localized)
+	 */
+	public String[] getLocalizedMetrics() {
+		return lMetrics;
+	}
+
+	
+	/**
 	 * Get scores for each metrics
 	 * 
 	 * @return scores
@@ -283,7 +296,7 @@
 	public int[] getScores() {
 		return scores;
 	}
-	
+
 	/**
 	 * Get {@link PageData} used for this evaluation
 	 * 
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/ui/actions/BlindVisualizationBrowserModeAction.java b/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/ui/actions/BlindVisualizationBrowserModeAction.java
new file mode 100644
index 0000000..68a83bd
--- /dev/null
+++ b/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/ui/actions/BlindVisualizationBrowserModeAction.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2010 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.blind.ui.actions;
+
+import org.eclipse.actf.ui.util.PlatformUIUtil;
+import org.eclipse.actf.visualization.engines.blind.BlindVizResourceUtil;
+import org.eclipse.actf.visualization.engines.blind.ParamBlind;
+import org.eclipse.actf.visualization.engines.blind.ui.preferences.IBlindPreferenceConstants;
+import org.eclipse.actf.visualization.internal.engines.blind.BlindVizEnginePlugin;
+import org.eclipse.actf.visualization.internal.engines.blind.Messages;
+import org.eclipse.actf.visualization.ui.IVisualizationView;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.ui.IViewPart;
+
+public class BlindVisualizationBrowserModeAction extends Action {
+
+	public BlindVisualizationBrowserModeAction() {
+		setToolTipText(Messages.VisualizeBrowserModeTooltip);
+		setImageDescriptor(BlindVizResourceUtil
+				.getImageDescriptor("icons/etool16/wh_16.png")); //$NON-NLS-1$
+		setText(Messages.VisualizeBrowserMode);
+	}
+
+	public void run() {
+		
+		IPreferenceStore ps = BlindVizEnginePlugin.getDefault().getPreferenceStore();
+		ps.setValue(IBlindPreferenceConstants.BLIND_MODE, IBlindPreferenceConstants.BLIND_BROWSER_MODE);
+		ParamBlind.refresh();
+		
+		IViewPart viewPart = PlatformUIUtil
+				.showView(IVisualizationView.ID_BLINDVIEW);
+		if (viewPart instanceof IVisualizationView) {
+			((IVisualizationView) viewPart).doVisualize();
+		}
+		ps.setValue(IBlindPreferenceConstants.BLIND_MODE, IBlindPreferenceConstants.BLIND_LAYOUT_MODE);
+		ParamBlind.refresh();
+	}
+
+}
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/ui/preferences/BlindPreferencePage.java b/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/ui/preferences/BlindPreferencePage.java
index 4ff8f94..97d53cc 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/ui/preferences/BlindPreferencePage.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/ui/preferences/BlindPreferencePage.java
@@ -20,7 +20,6 @@
 import org.eclipse.actf.visualization.internal.engines.blind.Messages;
 import org.eclipse.jface.preference.ColorFieldEditor;
 import org.eclipse.jface.preference.RadioGroupFieldEditor;
-import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -36,7 +35,7 @@
 
 	public static final String ID = BlindPreferencePage.class.getName();
 
-	private RadioGroupFieldEditor modeRadio;
+//	private RadioGroupFieldEditor modeRadio;
 
 	private Group visualizationSetting;
 
@@ -80,20 +79,20 @@
 
 		Composite parent = getFieldEditorParent();
 
-		modeRadio = new RadioGroupFieldEditor(
-				IBlindPreferenceConstants.BLIND_MODE,
-				Messages.DialogSettingBlind_Visualization_mode_3,
-				1,
-				new String[][] {
-						{
-								Messages.DialogSettingBlind_Layout_mode_9,
-								IBlindPreferenceConstants.BLIND_LAYOUT_MODE },
-						{
-								Messages.DialogSettingBlind_Voice_browser_output_mode_8,
-								IBlindPreferenceConstants.BLIND_BROWSER_MODE } },
-				parent);
-
-		addField(modeRadio);
+//		modeRadio = new RadioGroupFieldEditor(
+//				IBlindPreferenceConstants.BLIND_MODE,
+//				Messages.DialogSettingBlind_Visualization_mode_3,
+//				1,
+//				new String[][] {
+//						{
+//								Messages.DialogSettingBlind_Layout_mode_9,
+//								IBlindPreferenceConstants.BLIND_LAYOUT_MODE },
+//						{
+//								Messages.DialogSettingBlind_Voice_browser_output_mode_8,
+//								IBlindPreferenceConstants.BLIND_BROWSER_MODE } },
+//				parent);
+//
+//		addField(modeRadio);
 
 		visualizationSetting = createFieldGroup(Messages.DialogSettingBlind_LayoutModeSetting);
 
@@ -155,19 +154,19 @@
 		visualizationSetting.setVisible(isLayoutMode);
 	}
 
-	@Override
-	public void propertyChange(PropertyChangeEvent event) {
-		super.propertyChange(event);
-
-		if (event.getSource() == modeRadio) {
-			if (!event.getOldValue().equals(event.getNewValue())) {
-				boolean isLayoutMode = IBlindPreferenceConstants.BLIND_LAYOUT_MODE
-						.equals(event.getNewValue());
-				visualizationSetting.setEnabled(isLayoutMode);
-				visualizationSetting.setVisible(isLayoutMode);
-			}
-		}
-	}
+//	@Override
+//	public void propertyChange(PropertyChangeEvent event) {
+//		super.propertyChange(event);
+//
+//		if (event.getSource() == modeRadio) {
+//			if (!event.getOldValue().equals(event.getNewValue())) {
+//				boolean isLayoutMode = IBlindPreferenceConstants.BLIND_LAYOUT_MODE
+//						.equals(event.getNewValue());
+//				visualizationSetting.setEnabled(isLayoutMode);
+//				visualizationSetting.setVisible(isLayoutMode);
+//			}
+//		}
+//	}
 
 	@Override
 	public boolean performOk() {
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/internal/engines/blind/Messages.java b/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/internal/engines/blind/Messages.java
index 2b30384..3b224a7 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/internal/engines/blind/Messages.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/internal/engines/blind/Messages.java
@@ -68,6 +68,9 @@
 	public static String DialogSettingBlind_Input_tags_22;
 	public static String DialogSettingBlind_Label_tags_23;
 	public static String DialogSettingBlind_Tabel_border_24;
+	
+	public static String VisualizeBrowserMode;
+	public static String VisualizeBrowserModeTooltip;
 
 	static {
 		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/internal/engines/blind/SummaryEvaluation.java b/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/internal/engines/blind/SummaryEvaluation.java
index f85f5e1..1c2f82a 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/internal/engines/blind/SummaryEvaluation.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/internal/engines/blind/SummaryEvaluation.java
@@ -53,38 +53,45 @@
 		StringBuffer noGoodMetrics = new StringBuffer();
 
 		boolean hasComp = false;
-		boolean hasNav = false;
+		boolean hasOperable = false;
 		boolean hasOther = false;
 
 		String[] metrics = pe.getMetrics();
+		String[] lMetrics = pe.getLocalizedMetrics();
 		int[] scores = pe.getScores();
 
-		int comp = 100;
-		int nav = 100;
+		int compTotal = 0;
+		int compCount = 0;
+		int operable = 100;
 		int other = 100;
 
 		// boolean[] enabledMetrics = guidelineHolder.getMatchedMetrics();
 
 		for (int i = 0; i < metrics.length; i++) {
 			int score = scores[i];
-			if (metrics[i].equalsIgnoreCase("compliance") //$NON-NLS-1$
+			if ((metrics[i].equalsIgnoreCase("perceivable") //$NON-NLS-1$
+					|| metrics[i].equalsIgnoreCase("understandable") || //$NON-NLS-1$
+					metrics[i].equalsIgnoreCase("robust"))//$NON-NLS-1$
 					&& guidelineHolder.isMatchedMetric(metrics[i])) {
-				comp = score;
+				compTotal += score;
+				compCount++;
 				hasComp = true;
 				if (score != 100) {
-					noGoodMetrics.append(metrics[i] + ","); //$NON-NLS-1$
+					noGoodMetrics.append(lMetrics[i] + ","); //$NON-NLS-1$
 				}
-			} else if (metrics[i].equalsIgnoreCase("navigability") //$NON-NLS-1$
+			} else if (metrics[i].equalsIgnoreCase("operable") //$NON-NLS-1$
 					&& guidelineHolder.isMatchedMetric(metrics[i])) {
-				nav = score;
-				hasNav = true;
+				operable = score;
+				compTotal += score;
+				compCount++;
+				hasOperable = true;
 			} else {
 				hasOther = true;
 				if (other > score) {
 					other = score;
 				}
 				if (score != 100) {
-					noGoodMetrics.append(metrics[i] + ","); //$NON-NLS-1$
+					noGoodMetrics.append(lMetrics[i] + ","); //$NON-NLS-1$
 				}
 			}
 		}
@@ -102,54 +109,13 @@
 
 		boolean isGood = false;
 
-		if (hasComp) {
-			if (comp >= 80) {
-				if (hasError) {
-					aboutComp
-							.append(Messages.Eval_compliant_with_some_other_errors
-									+ FileUtils.LINE_SEP);
-
-					if (totalAltError > 0) {
-						aboutComp
-								.append(Messages.Eval_confirm_alt_attributes_first
-										+ FileUtils.LINE_SEP);
-						aboutComp.append(getImageAltStatistics());
-					} else {
-						aboutComp
-								.append(Messages.Eval_confirm_errors_detailed_report);
-					}
-				} else {
-					if (hasOther && other != 100) {
-						aboutComp.append(Messages.Eval_some_errors_on_metrics
-								+ FileUtils.LINE_SEP
-								+ MessageFormat.format(
-										Messages.Eval_some_errors_on_metrics1,
-										(new String[] { noGoodMetrics
-												.substring(0, noGoodMetrics
-														.length() - 1) })));
-					} else {
-						if (comp == 100) {
-							isGood = true;
-							aboutComp.append(Messages.Eval_completely_compliant
-									+ FileUtils.LINE_SEP
-									+ Messages.Eval_user_check2);
-						} else {
-							isGood = true;
-							aboutComp
-									.append(Messages.Eval_completely_compliant_with_user_check_items
-											+ FileUtils.LINE_SEP
-											+ Messages.Eval_user_check1);
-						}
-					}
-				}
-			} else {
-				if (comp > 50) {
-					aboutComp.append(Messages.Eval_some_accessibility_issues
-							+ FileUtils.LINE_SEP);
-				} else {
-					aboutComp.append(Messages.Eval_many_accessibility_issues
-							+ FileUtils.LINE_SEP);
-				}
+		if(compCount==0){
+			return("");
+		}
+		if (compTotal / compCount >= 75) {
+			if (hasError) { // hasComplianceError
+				aboutComp.append(Messages.Eval_compliant_with_some_other_errors
+						+ FileUtils.LINE_SEP);
 
 				if (totalAltError > 0) {
 					aboutComp.append(Messages.Eval_confirm_alt_attributes_first
@@ -159,12 +125,50 @@
 					aboutComp
 							.append(Messages.Eval_confirm_errors_detailed_report);
 				}
+			} else {
+				if (hasOther && other != 100) {
+					aboutComp.append(Messages.Eval_some_errors_on_metrics
+							+ FileUtils.LINE_SEP
+							+ MessageFormat.format(
+									Messages.Eval_some_errors_on_metrics1,
+									(new String[] { noGoodMetrics.substring(0,
+											noGoodMetrics.length() - 1) })));
+				} else {
+					if (compTotal / compCount == 100) {
+						isGood = true;
+						aboutComp.append(Messages.Eval_completely_compliant
+								+ FileUtils.LINE_SEP
+								+ Messages.Eval_user_check2);
+					} else {
+						isGood = true;
+						aboutComp
+								.append(Messages.Eval_completely_compliant_with_user_check_items
+										+ FileUtils.LINE_SEP
+										+ Messages.Eval_user_check1);
+					}
+				}
+			}
+		} else {
+			if (compTotal / compCount >= 50) {
+				aboutComp.append(Messages.Eval_some_accessibility_issues
+						+ FileUtils.LINE_SEP);
+			} else {
+				aboutComp.append(Messages.Eval_many_accessibility_issues
+						+ FileUtils.LINE_SEP);
+			}
+
+			if (totalAltError > 0) {
+				aboutComp.append(Messages.Eval_confirm_alt_attributes_first
+						+ FileUtils.LINE_SEP);
+				aboutComp.append(getImageAltStatistics());
+			} else {
+				aboutComp.append(Messages.Eval_confirm_errors_detailed_report);
 			}
 		}
 
 		//
-		if (hasNav && guidelineHolder.isEnabledMetric("navigability")) { //$NON-NLS-1$
-			if (nav > 80) {
+		if (hasOperable && guidelineHolder.isEnabledMetric("operable")) { //$NON-NLS-1$
+			if (operable >= 75) {
 				if (pageData.getMaxTime() > 240) {
 					aboutNav.append(MessageFormat.format(
 							Messages.Eval_navigability_long_time_error_msg,
@@ -189,18 +193,18 @@
 			}
 		}
 
-		if ((hasComp || hasNav) && isGood) {
+		if ((hasComp || hasOperable) && isGood) {
 			tmpSB.append(Messages.Eval_excellent + FileUtils.LINE_SEP
 					+ FileUtils.LINE_SEP);
 		}
-		tmpSB.append(aboutNav + FileUtils.LINE_SEP);
-		tmpSB.append(aboutComp);
+		tmpSB.append(aboutComp + FileUtils.LINE_SEP + FileUtils.LINE_SEP);
+		tmpSB.append(aboutNav);
 
 		return (tmpSB.toString());
 	}
 
 	private String getImageAltStatistics() {
-		StringBuffer tmpSB = new StringBuffer();
+		StringBuffer tmpSB = new StringBuffer(FileUtils.LINE_SEP);
 
 		if (noImageAltCount > 0) {
 			tmpSB.append(" -" + Messages.Eval_no_img_alt_error_msg //$NON-NLS-1$
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind/vizResources/scripts/highlight.js b/plugins/org.eclipse.actf.visualization.engines.blind/vizResources/scripts/highlight.js
index f4784e0..4ab86f0 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind/vizResources/scripts/highlight.js
+++ b/plugins/org.eclipse.actf.visualization.engines.blind/vizResources/scripts/highlight.js
@@ -33,7 +33,7 @@
 var idNumber_Old=0;
 var refresh=false;
 var HIGHLIGHT_BGCOLOR = "#ffdddd";
-var MAX_PROBLEM_SELECTION = 30;
+var MAX_PROBLEM_SELECTION = 250;
 
 // call it like: setHighlight2(new Array(43,47,49), new Array(45,47,50));
 function setHighlight2(firstNodeArray, lastNodeArray) {	
diff --git a/plugins/org.eclipse.actf.visualization.ui.report/src/messages.properties b/plugins/org.eclipse.actf.visualization.ui.report/src/messages.properties
index 55e1757..4e389a7 100644
--- a/plugins/org.eclipse.actf.visualization.ui.report/src/messages.properties
+++ b/plugins/org.eclipse.actf.visualization.ui.report/src/messages.properties
@@ -10,9 +10,9 @@
 ###############################################################################
 #
 ProblemTable_5 = View Source HTML
-ProblemTable_6 = View Problem Description
+ProblemTable_6 = Properties
 ProblemTable_Clear_Selection_15 = Clear Selection
-ProblemTable_View_Guideline_16 = View Guideline
+ProblemTable_View_Guideline_16 = View Success Criterion
 
 DialogTextSearch_0 = Search
 DialogTextSearch_1 = The string to be searched:
@@ -31,5 +31,9 @@
 SrcViewer_9 = &Copy
 SrcViewer_0 = file can't read:
 
-GuidelineSubMenu_0=Guideline help is not available.
+GuidelineSubMenu_0=Help for Success Criterion is not available.
 SrcViewerForPT_0=HTML Source
+
+ViewTechniques=View Techniques
+NoTechniques=Help for Technique is not available.
+Copy = Copy
\ No newline at end of file
diff --git a/plugins/org.eclipse.actf.visualization.ui.report/src/messages_ja.properties b/plugins/org.eclipse.actf.visualization.ui.report/src/messages_ja.properties
index d805e00..8f278d3 100644
--- a/plugins/org.eclipse.actf.visualization.ui.report/src/messages_ja.properties
+++ b/plugins/org.eclipse.actf.visualization.ui.report/src/messages_ja.properties
@@ -10,9 +10,9 @@
 ###############################################################################
 #
 ProblemTable_5 = \u30bd\u30fc\u30b9HTML\u3092\u898b\u308b
-ProblemTable_6 = \u30a8\u30e9\u30fc\u306e\u5185\u5bb9\u3092\u898b\u308b
+ProblemTable_6 = \u30d7\u30ed\u30d1\u30c6\u30a3
 ProblemTable_Clear_Selection_15 = \u9078\u629e\u306e\u89e3\u9664
-ProblemTable_View_Guideline_16 = \u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3092\u898b\u308b
+ProblemTable_View_Guideline_16 = \u9054\u6210\u57fa\u6e96\u3092\u898b\u308b
 
 DialogTextSearch_0 = \u691c\u7d22
 DialogTextSearch_1 = \u691c\u7d22\u3059\u308b\u6587\u5b57\u5217:
@@ -31,5 +31,8 @@
 SrcViewer_9 = \u30b3\u30d4\u30fc\t(&C)
 SrcViewer_0 = \u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u3053\u3068\u304c\u51fa\u6765\u307e\u305b\u3093:
 
-GuidelineSubMenu_0=\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u306e\u30d8\u30eb\u30d7\u304c\u6709\u308a\u307e\u305b\u3093.
+GuidelineSubMenu_0=\u9054\u6210\u57fa\u6e96\u306e\u30d8\u30eb\u30d7\u304c\u6709\u308a\u307e\u305b\u3093.
 SrcViewerForPT_0=HTML \u30bd\u30fc\u30b9
+Copy = \u30b3\u30d4\u30fc
+ViewTechniques=\u5b9f\u88c5\u65b9\u6cd5\u3092\u898b\u308b
+NoTechniques=\u5b9f\u88c5\u65b9\u6cd5\u306e\u30d8\u30eb\u30d7\u304c\u6709\u308a\u307e\u305b\u3093.
\ No newline at end of file
diff --git a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/Messages.java b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/Messages.java
index 8d425e4..a9d1822 100644
--- a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/Messages.java
+++ b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/Messages.java
@@ -41,6 +41,11 @@
 	public static String SrcViewer_9;
 	public static String SrcViewer_0;
 	public static String SrcViewerForPT_0;
+	
+	public static String ViewTechniques;
+	public static String NoTechniques;
+	
+	public static String Copy;
 
 	static {
 		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/ProblemTree.java b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/ProblemTree.java
index 3c227da..9d8fd91 100644
--- a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/ProblemTree.java
+++ b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/ProblemTree.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and Others
+ * Copyright (c) 2003, 2010 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
@@ -43,6 +43,8 @@
 	private TreeItem node1_2;
 
 	private TreeItem node1_3;
+	
+	private TreeItem node1_4;
 
 	private ResultTableViewer _resultTableViewer = null;
 
@@ -77,6 +79,8 @@
 							} else if (item == node1_2) {
 								result = result | IEvaluationItem.SEV_WARNING;
 							} else if (item == node1_3) {
+								result = result | IEvaluationItem.SEV_USER;
+							} else if (item ==node1_4){
 								result = result | IEvaluationItem.SEV_INFO;
 							}
 						}
@@ -106,6 +110,10 @@
 
 		node1_3 = new TreeItem(nodeRoot, SWT.NULL);
 		node1_3.setImage(AbstractUIPlugin.imageDescriptorFromPlugin(
+				EvaluationUtil.PLUGIN_ID, "icons/Conf.png").createImage()); //$NON-NLS-1$
+
+		node1_4 = new TreeItem(nodeRoot, SWT.NULL);
+		node1_4.setImage(AbstractUIPlugin.imageDescriptorFromPlugin(
 				EvaluationUtil.PLUGIN_ID, "icons/Info.png").createImage()); //$NON-NLS-1$
 
 		nodeRoot.setExpanded(true);
@@ -129,6 +137,7 @@
 	public void changeTreeNodeAmount(List<IProblemItem> targetList) {
 
 		int error = 0;
+		int warn = 0;
 		int user = 0;
 		int info = 0;
 
@@ -139,6 +148,9 @@
 					error++;
 					break;
 				case IProblemItem.SEV_WARNING:
+					warn++;
+					break;
+				case IProblemItem.SEV_USER:
 					user++;
 					break;
 				case IProblemItem.SEV_INFO:
@@ -154,8 +166,9 @@
 
 		nodeRoot.setText(IProblemConst.ALL_ERRORS + "  (" + all + ")"); //$NON-NLS-1$ //$NON-NLS-2$
 		node1_1.setText(IProblemConst.ESSENTIAL + "  (" + error + ")"); //$NON-NLS-1$ //$NON-NLS-2$
-		node1_2.setText(IProblemConst.USER_CHECK + "  (" + user + ")"); //$NON-NLS-1$ //$NON-NLS-2$
-		node1_3.setText(IProblemConst.INFO + " (" + info + ")"); //$NON-NLS-1$ //$NON-NLS-2$
+		node1_2.setText(IProblemConst.WARNING + "  (" + warn + ")"); //$NON-NLS-1$ //$NON-NLS-2$
+		node1_3.setText(IProblemConst.USER_CHECK + " (" + user + ")"); //$NON-NLS-1$ //$NON-NLS-2$
+		node1_4.setText(IProblemConst.INFO + " (" + info + ")"); //$NON-NLS-1$ //$NON-NLS-2$;
 
 	}
 
diff --git a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/ReportMessageDialog.java b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/ReportMessageDialog.java
new file mode 100644
index 0000000..df353d1
--- /dev/null
+++ b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/ReportMessageDialog.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2011 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.internal.ui.report;
+
+import org.eclipse.actf.util.FileUtils;
+import org.eclipse.actf.visualization.eval.guideline.GuidelineHolder;
+import org.eclipse.actf.visualization.eval.guideline.IGuidelineData;
+import org.eclipse.actf.visualization.eval.problem.IProblemConst;
+import org.eclipse.actf.visualization.eval.problem.IProblemItem;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Shell;
+
+public class ReportMessageDialog {
+	public static void openReportMEssageDialog(Shell shell, IProblemItem curItem) {
+		if(shell==null||curItem==null)return;
+		
+		StringBuffer tmpSB = new StringBuffer();
+
+		IGuidelineData[] dataArray = GuidelineHolder.getInstance()
+				.getGuidelineData();
+		for (int i = 0; i < dataArray.length; i++) {
+			if (dataArray[i].isMatched()) {
+				tmpSB.append(dataArray[i].getGuidelineName() + ": "
+						+ curItem.getTableDataGuideline()[i]
+						+ FileUtils.LINE_SEP + FileUtils.LINE_SEP);
+			}
+		}
+		tmpSB.append(IProblemConst.TITLE_TECHNIQUS + ": "
+				+ curItem.getEvaluationItem().getTableDataTechniques()
+				+ FileUtils.LINE_SEP + FileUtils.LINE_SEP);
+		String lineS = curItem.getLineStrMulti();
+		if (lineS != null && lineS.length() > 0) {
+			tmpSB.append(IProblemConst.TITLE_LINE + ": " + lineS
+					+ FileUtils.LINE_SEP + FileUtils.LINE_SEP);
+		}
+		tmpSB.append(IProblemConst.TITLE_DESCRIPTION + ": "
+				+ FileUtils.LINE_SEP + curItem.getDescription());
+
+		switch (curItem.getSeverity()) {
+		case IProblemItem.SEV_ERROR:
+			MessageDialog.openError(shell, IProblemConst.ESSENTIAL,
+					tmpSB.toString());
+			break;
+		case IProblemItem.SEV_WARNING:
+			MessageDialog.openWarning(shell, IProblemConst.WARNING,
+					tmpSB.toString());
+			break;
+		case IProblemItem.SEV_USER:
+			MessageDialog.openInformation(shell, IProblemConst.USER_CHECK,
+					tmpSB.toString());
+			break;
+		case IProblemItem.SEV_INFO:
+			MessageDialog.openInformation(shell, IProblemConst.INFO,
+					tmpSB.toString());
+			break;
+		}
+	}
+}
diff --git a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/CopyAction.java b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/CopyAction.java
new file mode 100644
index 0000000..fdd9471
--- /dev/null
+++ b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/CopyAction.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2011 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.internal.ui.report.action;
+
+import java.util.List;
+
+import org.eclipse.actf.visualization.eval.problem.IProblemItem;
+import org.eclipse.actf.visualization.eval.problem.IProblemItemImage;
+import org.eclipse.actf.visualization.eval.problem.ReportUtil;
+import org.eclipse.actf.visualization.internal.ui.report.Messages;
+import org.eclipse.actf.visualization.internal.ui.report.table.ResultTableViewer;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+
+public class CopyAction extends Action {
+
+	private TableViewer tableViewer;
+
+	public CopyAction(ResultTableViewer resultTableViewer) {
+		super(Messages.Copy);
+
+		tableViewer = resultTableViewer.getTableViewer();
+		tableViewer
+				.addSelectionChangedListener(new ISelectionChangedListener() {
+					public void selectionChanged(SelectionChangedEvent arg0) {
+						@SuppressWarnings("rawtypes")
+						List tmpList = ((IStructuredSelection) arg0
+								.getSelection()).toList();
+						if (tmpList == null || tmpList.size() == 0) {
+							setIProblemItem(null);
+						} else {
+							try {
+								setIProblemItem((IProblemItem) tmpList.get(0));
+							} catch (Exception e) {
+								setIProblemItem(null);
+							}
+						}
+					}
+				});
+
+		this.setEnabled(false);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.action.Action#run()
+	 */
+	public void run() {
+
+		@SuppressWarnings("unchecked")
+		List<IProblemItem> targetList = ((IStructuredSelection) tableViewer
+				.getSelection()).toList();
+
+		ReportUtil reportUtil = new ReportUtil();
+		StringBuffer tmpSB = new StringBuffer(reportUtil.getFirstLine()
+				+ ReportUtil.LINE_SEP);
+
+		for (IProblemItem tmpItem : targetList) {
+			tmpSB.append(reportUtil.getCSV(tmpItem) + ReportUtil.LINE_SEP);
+		}
+
+		Clipboard clipboard = new Clipboard(tableViewer.getControl()
+				.getDisplay());
+		clipboard.setContents(new Object[] { tmpSB.toString() },
+				new Transfer[] { TextTransfer.getInstance() });
+
+	}
+
+	public void setIProblemItem(IProblemItem target) {
+		if (target == null) {
+			this.setEnabled(false);
+		} else {
+			if (target instanceof IProblemItemImage) {
+				// TODO CSV export function for lv
+				this.setEnabled(false);
+			} else {
+				this.setEnabled(true);
+			}
+		}
+	}
+}
diff --git a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/GuidelineSubMenu.java b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/GuidelineSubMenu.java
index 6f47c03..2329506 100644
--- a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/GuidelineSubMenu.java
+++ b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/GuidelineSubMenu.java
@@ -12,12 +12,10 @@
 
 import java.util.Arrays;
 import java.util.Comparator;
-import java.util.Iterator;
 import java.util.List;
 import java.util.TreeSet;
 
 import org.eclipse.actf.visualization.eval.IGuidelineItem;
-import org.eclipse.actf.visualization.eval.guideline.GuidelineHolder;
 import org.eclipse.actf.visualization.eval.problem.IProblemItem;
 import org.eclipse.actf.visualization.internal.ui.report.Messages;
 import org.eclipse.actf.visualization.internal.ui.report.table.ResultTableViewer;
@@ -36,8 +34,6 @@
 
 	private Action _dummy;
 
-	private GuidelineHolder _guidelineHolder = GuidelineHolder.getInstance();
-
 	public GuidelineSubMenu(ResultTableViewer resultTableViewer) {
 		super(Messages.ProblemTable_View_Guideline_16);
 
@@ -68,20 +64,19 @@
 					}
 				});
 
-		for (Iterator<IProblemItem> i = target.iterator(); i.hasNext();) {
-			IProblemItem tmpItem = i.next();
+		for (IProblemItem tmpItem : target) {
 			tmpSet.addAll(Arrays.asList(tmpItem.getEvaluationItem()
 					.getGuidelines()));
 		}
 
 		this.removeAll();
 
-		for (Iterator<IGuidelineItem> i = tmpSet.iterator(); i.hasNext();) {
-			IGuidelineItem tmpItem = i.next();
+		for (IGuidelineItem tmpItem : tmpSet) {
 			if (tmpItem.getUrl() != null && tmpItem.getUrl().length() != 0) {
 				// Lowvision-> show all
-				if (_resultTableViewer.isShowAllGuidelineItems()
-						|| this._guidelineHolder.isMatchedInTopLevel(tmpItem)) {
+				if (// _resultTableViewer.isShowAllGuidelineItems()
+					// ||
+				tmpItem.isEnabled()) {
 					add(new ShowGuidelineAction(tmpItem));
 				}
 			}
diff --git a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/ShowDescriptionAction.java b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/ShowDescriptionAction.java
index 83b69b0..2b9b20e 100644
--- a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/ShowDescriptionAction.java
+++ b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/ShowDescriptionAction.java
@@ -14,14 +14,14 @@
 import java.util.List;
 
 import org.eclipse.actf.visualization.eval.problem.IProblemItem;
-import org.eclipse.actf.visualization.eval.problem.IProblemConst;
 import org.eclipse.actf.visualization.internal.ui.report.Messages;
+import org.eclipse.actf.visualization.internal.ui.report.ReportMessageDialog;
 import org.eclipse.jface.action.Action;
-import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.widgets.Shell;
 
 
 public class ShowDescriptionAction extends Action {
@@ -38,9 +38,9 @@
         this.tableViewer = tableViewer;
         
         tableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-            @SuppressWarnings("unchecked")
-			public void selectionChanged(SelectionChangedEvent arg0) {
-                List tmpList = ((IStructuredSelection) arg0.getSelection()).toList();
+            public void selectionChanged(SelectionChangedEvent arg0) {
+				@SuppressWarnings("rawtypes")
+				List tmpList = ((IStructuredSelection) arg0.getSelection()).toList();
                 if(tmpList==null||tmpList.size()>1||tmpList.size()==0){
                     setIProblemItem(null);
                 }else{
@@ -61,7 +61,8 @@
      * @see org.eclipse.jface.action.Action#run()
      */
     public void run() {
-        MessageDialog.openInformation(tableViewer.getControl().getShell(),IProblemConst.TITLE_DESCRIPTION,curItem.getDescription());
+    	Shell shell = tableViewer.getControl().getShell();
+    	ReportMessageDialog.openReportMEssageDialog(shell, curItem);
     }
     
     public void setIProblemItem(IProblemItem target){
diff --git a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/ShowTechniquesAction.java b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/ShowTechniquesAction.java
new file mode 100644
index 0000000..87a8922
--- /dev/null
+++ b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/ShowTechniquesAction.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2010 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.internal.ui.report.action;
+
+import org.eclipse.actf.visualization.eval.ITechniquesItem;
+import org.eclipse.jface.action.Action;
+import org.eclipse.swt.program.Program;
+
+
+
+public class ShowTechniquesAction extends Action {
+
+    private ITechniquesItem targetItem;
+
+    /**
+     * 
+     */
+    public ShowTechniquesAction(ITechniquesItem targetItem) {
+        super(targetItem.getGuidelineName() + ": " + targetItem.getId()); //$NON-NLS-1$
+        this.targetItem = targetItem;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.jface.action.Action#run()
+     */
+    public void run() {
+
+        // launch default web browser
+        Program program = Program.findProgram(".html"); //$NON-NLS-1$
+        if (null != program) {
+            program.execute(targetItem.getUrl());
+        }
+    }
+
+}
diff --git a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/SrcHighlightAction.java b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/SrcHighlightAction.java
index 4198005..f5fa990 100644
--- a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/SrcHighlightAction.java
+++ b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/SrcHighlightAction.java
@@ -12,7 +12,6 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.actf.visualization.eval.problem.HighlightTargetSourceInfo;
@@ -24,48 +23,49 @@
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;
 
-
-
 public class SrcHighlightAction extends Action {
 
-    private ResultTableViewer _resultTableViewer;
-    
-    private TableViewer _tableView;
+	private ResultTableViewer _resultTableViewer;
 
-    private SrcViewerForPT _srcViewer;
+	private TableViewer _tableView;
 
-    public SrcHighlightAction(ResultTableViewer resultTableViewer) {
-        super(Messages.ProblemTable_5);
-        this._resultTableViewer = resultTableViewer;
-        this._tableView = resultTableViewer.getTableViewer();
-        this._srcViewer = SrcViewerForPT.getInstance();
-    }
+	private SrcViewerForPT _srcViewer;
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.eclipse.jface.action.Action#run()
-     */
-    @SuppressWarnings("unchecked")
+	public SrcHighlightAction(ResultTableViewer resultTableViewer) {
+		super(Messages.ProblemTable_5);
+		this._resultTableViewer = resultTableViewer;
+		this._tableView = resultTableViewer.getTableViewer();
+		this._srcViewer = SrcViewerForPT.getInstance();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.action.Action#run()
+	 */
 	public void run() {
 
-        if (_srcViewer != null) {
+		if (_srcViewer != null) {
 
-            _srcViewer.openSrcViewer();
+			_srcViewer.openSrcViewer();
 
-            List targetList = ((IStructuredSelection) _tableView.getSelection()).toList();
-            ArrayList<HighlightTargetSourceInfo> srcLineArray = new ArrayList<HighlightTargetSourceInfo>();
+			@SuppressWarnings("unchecked")
+			List<IProblemItem> targetList = ((IStructuredSelection) _tableView
+					.getSelection()).toList();
+			ArrayList<HighlightTargetSourceInfo> srcLineArray = new ArrayList<HighlightTargetSourceInfo>();
 
-            for (Iterator i = targetList.iterator(); i.hasNext();) {
-                IProblemItem tmpItem = (IProblemItem) i.next();
-                srcLineArray.addAll(Arrays.asList(tmpItem.getHighlightTargetSoruceInfo()));
-            }
+			for (IProblemItem tmpItem : targetList) {
+				srcLineArray.addAll(Arrays.asList(tmpItem
+						.getHighlightTargetSoruceInfo()));
+			}
 
-            HighlightTargetSourceInfo[] target = new HighlightTargetSourceInfo[srcLineArray.size()];
-            srcLineArray.toArray(target);
-            _srcViewer.highlightSrcViewer(target, _resultTableViewer.getCurrentSoruceFile());
+			HighlightTargetSourceInfo[] target = new HighlightTargetSourceInfo[srcLineArray
+					.size()];
+			srcLineArray.toArray(target);
+			_srcViewer.highlightSrcViewer(target,
+					_resultTableViewer.getCurrentSoruceFile());
 
-        }
-    }
+		}
+	}
 
 }
diff --git a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/TechniquesSubMenu.java b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/TechniquesSubMenu.java
new file mode 100644
index 0000000..6994242
--- /dev/null
+++ b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/action/TechniquesSubMenu.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * Copyright (c) 2010 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.internal.ui.report.action;
+
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.TreeSet;
+
+import org.eclipse.actf.visualization.eval.IEvaluationItem;
+import org.eclipse.actf.visualization.eval.IGuidelineItem;
+import org.eclipse.actf.visualization.eval.ITechniquesItem;
+import org.eclipse.actf.visualization.eval.problem.IProblemItem;
+import org.eclipse.actf.visualization.internal.ui.report.Messages;
+import org.eclipse.actf.visualization.internal.ui.report.table.ResultTableViewer;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableViewer;
+
+public class TechniquesSubMenu extends MenuManager {
+
+	private ResultTableViewer _resultTableViewer;
+
+	private TableViewer _tableViewer;
+
+	private Action _dummy;
+
+	public TechniquesSubMenu(ResultTableViewer resultTableViewer) {
+		super(Messages.ViewTechniques);
+
+		this._resultTableViewer = resultTableViewer;
+		this._tableViewer = resultTableViewer.getTableViewer();
+
+		this._tableViewer
+				.addSelectionChangedListener(new ISelectionChangedListener() {
+					@SuppressWarnings("unchecked")
+					public void selectionChanged(SelectionChangedEvent arg0) {
+						List<IProblemItem> tmpList = ((IStructuredSelection) arg0
+								.getSelection()).toList();
+						setTechniques(tmpList);
+					}
+				});
+
+		this._dummy = new Action(Messages.NoTechniques) {
+		};
+		this._dummy.setEnabled(false);
+		add(this._dummy);
+	}
+
+	public void setTechniques(List<IProblemItem> target) {
+		this.removeAll();
+
+		TreeSet<IEvaluationItem> tmpSet = new TreeSet<IEvaluationItem>(
+				new Comparator<IEvaluationItem>() {
+					public int compare(IEvaluationItem o1, IEvaluationItem o2) {
+						return o1.getId().compareTo(o2.getId());
+					}
+				});
+
+		for (Iterator<IProblemItem> i = target.iterator(); i.hasNext();) {
+			IProblemItem tmpItem = i.next();
+			tmpSet.add(tmpItem.getEvaluationItem());
+		}
+
+		TreeSet<ITechniquesItem> techSet = new TreeSet<ITechniquesItem>(
+				new Comparator<ITechniquesItem>() {
+					public int compare(ITechniquesItem o1, ITechniquesItem o2) {
+						int flag = o1.getGuidelineName().compareTo(
+								o2.getGuidelineName());
+						if (flag == 0) {
+							flag = o1.getId().compareTo(o2.getId());
+						}
+						return flag;
+					}
+				});
+
+		for (Iterator<IEvaluationItem> i = tmpSet.iterator(); i.hasNext();) {
+			IEvaluationItem eval = i.next();
+			IGuidelineItem[] guidelines = eval.getGuidelines();
+			ITechniquesItem[][] techs = eval.getTechniques();
+			for (int j = 0; j < guidelines.length; j++) {
+				// Lowvision-> show all
+				if (// _resultTableViewer.isShowAllGuidelineItems()
+					// ||
+				guidelines[j].isEnabled()) {
+					techSet.addAll(Arrays.asList(techs[j]));
+				}
+			}
+		}
+
+		for (Iterator<ITechniquesItem> i = techSet.iterator(); i.hasNext();) {
+			add(new ShowTechniquesAction(i.next()));
+		}
+
+		if (this.getItems().length == 0) {
+			this.add(this._dummy);
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/srcviewer/SrcViewerForPT.java b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/srcviewer/SrcViewerForPT.java
index c12f81e..00eaa48 100644
--- a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/srcviewer/SrcViewerForPT.java
+++ b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/srcviewer/SrcViewerForPT.java
@@ -12,7 +12,6 @@
 
 import java.io.File;
 
-import org.eclipse.actf.visualization.eval.EvaluationUtil;
 import org.eclipse.actf.visualization.eval.problem.HighlightTargetSourceInfo;
 import org.eclipse.actf.visualization.internal.ui.report.Messages;
 import org.eclipse.actf.visualization.internal.ui.report.ReportPlugin;
@@ -22,137 +21,142 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 
-
-
-
 public class SrcViewerForPT {
 
-    //TODO viewpart, SourceViewer
-    
-    private static SrcViewerForPT INSTANCE = null;
+	// TODO viewpart, SourceViewer
 
-    private static SrcViewer _srcViewer;
+	private static SrcViewerForPT INSTANCE = null;
 
-    private static Shell _srcViewerShell;
+	private static SrcViewer _srcViewer;
 
-    private Shell _shell = null;
+	private static Shell _srcViewerShell;
 
-    private boolean srcChanged;
-    
-    private File curTarget;
+	private Shell _shell = null;
 
-    /**
-     * @param pt
-     * @param display
-     */
-    private SrcViewerForPT(Shell shell) {
-        super();
-        this._shell = shell;
-        initSrcViewer();
-    }
+	private boolean srcChanged;
 
-    public static SrcViewerForPT initSrcViewerForPT(Shell parent) {
-        if (INSTANCE != null) {
-            // TODO close
-            // INSTANCE.PARENT.removeShellListener();
-        }
+	private File curTarget;
 
-        INSTANCE = new SrcViewerForPT(parent);
-        return (INSTANCE);
-    }
+	/**
+	 * @param pt
+	 * @param display
+	 */
+	private SrcViewerForPT(Shell shell) {
+		super();
+		this._shell = shell;
+		initSrcViewer();
+	}
 
-    public static SrcViewerForPT getInstance() {
-        return (INSTANCE);
-    }
+	public static SrcViewerForPT initSrcViewerForPT(Shell parent) {
+		if (INSTANCE != null) {
+			// TODO close
+			// INSTANCE.PARENT.removeShellListener();
+		}
 
-    private void initSrcViewer() {
-        srcChanged = true;
+		INSTANCE = new SrcViewerForPT(parent);
+		return (INSTANCE);
+	}
 
-        if (_shell != null) {
-            _shell.addShellListener(new ShellAdapter() {
-                public void shellClosed(ShellEvent arg0) {
-                    if (_srcViewerShell != null && !_srcViewerShell.isDisposed()) {
-                        _srcViewerShell.dispose();
-                    }
-                }
-            });
-        }
-    }
+	public static SrcViewerForPT getInstance() {
+		return (INSTANCE);
+	}
 
-    public void openSrcViewer() {
-        if (null == _srcViewerShell || _srcViewerShell.isDisposed()) {
-            Display display = _shell.getDisplay();
-            if (null == display) {
-                display = Display.getDefault();
-            }
-            _srcViewerShell = new Shell(display);
-            _srcViewerShell.setLayout(new FillLayout());
-            _srcViewerShell.setImage(ReportPlugin.imageDescriptorFromPlugin(ReportPlugin.PLUGIN_ID, "icons/excla_squ.png").createImage()); //$NON-NLS-1$
-            _srcViewerShell.setText(Messages.SrcViewerForPT_0);
-            _srcViewer = new SrcViewer(_srcViewerShell);
-            _srcViewerShell.setSize(600, 750);
-            _srcViewerShell.setFocus();
-            _srcViewerShell.open();
+	private void initSrcViewer() {
+		srcChanged = true;
 
-            _srcViewerShell.addShellListener(new ShellAdapter() {
-                public void shellClosed(ShellEvent arg0) {
-                    _srcViewer.closeSearchDlgShell();
-                }
-            });
+		if (_shell != null) {
+			_shell.addShellListener(new ShellAdapter() {
+				public void shellClosed(ShellEvent arg0) {
+					if (_srcViewerShell != null
+							&& !_srcViewerShell.isDisposed()) {
+						_srcViewerShell.dispose();
+					}
+				}
+			});
+		}
+	}
 
-            srcChanged = true;
+	public void openSrcViewer() {
+		if (null == _srcViewerShell || _srcViewerShell.isDisposed()) {
+			Display display = _shell.getDisplay();
+			if (null == display) {
+				display = Display.getDefault();
+			}
+			_srcViewerShell = new Shell(display);
+			_srcViewerShell.setLayout(new FillLayout());
+			_srcViewerShell.setImage(ReportPlugin
+					.imageDescriptorFromPlugin(ReportPlugin.PLUGIN_ID,
+							"icons/excla_squ.png").createImage()); //$NON-NLS-1$
+			_srcViewerShell.setText(Messages.SrcViewerForPT_0);
+			_srcViewer = new SrcViewer(_srcViewerShell);
+			_srcViewerShell.setSize(600, 750);
+			_srcViewerShell.setFocus();
+			_srcViewerShell.open();
 
-        } else if (!_srcViewerShell.isDisposed()) {
-            if (_srcViewerShell.getMinimized()) {
-                _srcViewerShell.setMinimized(false);
-            }
-            _srcViewerShell.forceActive();
-        }
-    }
+			_srcViewerShell.addShellListener(new ShellAdapter() {
+				public void shellClosed(ShellEvent arg0) {
+					_srcViewer.closeSearchDlgShell();
+				}
+			});
 
-    public void highlightSrcViewer(HighlightTargetSourceInfo[] sourceInfos, File target) {
-        if (_srcViewerShell != null && !_srcViewerShell.isDisposed() && EvaluationUtil.isOriginalDOM()) {
+			srcChanged = true;
 
-            if(curTarget!=target || srcChanged){
-                srcChanged =true;
-                updateSrcViewer(target);
-            }
-            
-            //updateSrcViewer(currentLayout);
-            _srcViewer.clearHighlight();
+		} else if (!_srcViewerShell.isDisposed()) {
+			if (_srcViewerShell.getMinimized()) {
+				_srcViewerShell.setMinimized(false);
+			}
+			_srcViewerShell.forceActive();
+		}
+	}
 
-            for (int i = 0; i < sourceInfos.length; i++) {
-                HighlightTargetSourceInfo curInfo = sourceInfos[i];
+	public void highlightSrcViewer(HighlightTargetSourceInfo[] sourceInfos,
+			File target) {
+		if (_srcViewerShell != null && !_srcViewerShell.isDisposed()) {
 
-                if (curInfo.getStartColumn() < 0 || curInfo.getEndColumn() < 0) {
-                    _srcViewer.highlightLines(curInfo.getStartLine(),curInfo.getEndLine());
-                } else {
-                    _srcViewer.highlight(curInfo.getStartLine(),curInfo.getStartColumn(),curInfo.getEndLine(),curInfo.getEndColumn());
-                }
+			if (curTarget != target || srcChanged) {
+				srcChanged = true;
+				updateSrcViewer(target);
+			}
 
-            }
-        }
+			// updateSrcViewer(currentLayout);
+			_srcViewer.clearHighlight();
 
-    }
+			for (int i = 0; i < sourceInfos.length; i++) {
+				HighlightTargetSourceInfo curInfo = sourceInfos[i];
 
-    public void updateSrcViewer(File target) {
-        if (_srcViewerShell != null && !_srcViewerShell.isDisposed() && srcChanged) {
-            try {
-                _srcViewer.openFile(target);
-                curTarget = target;
-            } catch (Exception e) {
-                // e.printStackTrace();
-                _srcViewer.setText(""); //$NON-NLS-1$
-            }
-            srcChanged = false;
-        }
-    }
+				if (curInfo.getStartColumn() < 0 || curInfo.getEndColumn() < 0) {
+					_srcViewer.highlightLines(curInfo.getStartLine(),
+							curInfo.getEndLine());
+				} else {
+					_srcViewer.highlight(curInfo.getStartLine(),
+							curInfo.getStartColumn(), curInfo.getEndLine(),
+							curInfo.getEndColumn());
+				}
 
-    /**
-     * @param srcChanged
-     *            The srcChanged to set.
-     */
-    public void setSrcChanged(boolean srcChanged) {
-        this.srcChanged = srcChanged;
-    }
+			}
+		}
+
+	}
+
+	public void updateSrcViewer(File target) {
+		if (_srcViewerShell != null && !_srcViewerShell.isDisposed()
+				&& srcChanged) {
+			try {
+				_srcViewer.openFile(target);
+				curTarget = target;
+			} catch (Exception e) {
+				// e.printStackTrace();
+				_srcViewer.setText(""); //$NON-NLS-1$
+			}
+			srcChanged = false;
+		}
+	}
+
+	/**
+	 * @param srcChanged
+	 *            The srcChanged to set.
+	 */
+	public void setSrcChanged(boolean srcChanged) {
+		this.srcChanged = srcChanged;
+	}
 }
diff --git a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/table/ResultTableViewer.java b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/table/ResultTableViewer.java
index e31b727..3f8e594 100644
--- a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/table/ResultTableViewer.java
+++ b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/internal/ui/report/table/ResultTableViewer.java
@@ -25,16 +25,21 @@
 import org.eclipse.actf.visualization.eval.problem.HighlightTargetSourceInfo;
 import org.eclipse.actf.visualization.eval.problem.IProblemConst;
 import org.eclipse.actf.visualization.eval.problem.IProblemItem;
+import org.eclipse.actf.visualization.internal.ui.report.ReportMessageDialog;
 import org.eclipse.actf.visualization.internal.ui.report.action.ClearSelectionAction;
+import org.eclipse.actf.visualization.internal.ui.report.action.CopyAction;
 import org.eclipse.actf.visualization.internal.ui.report.action.GuidelineSubMenu;
 import org.eclipse.actf.visualization.internal.ui.report.action.ShowDescriptionAction;
 import org.eclipse.actf.visualization.internal.ui.report.action.SrcHighlightAction;
+import org.eclipse.actf.visualization.internal.ui.report.action.TechniquesSubMenu;
 import org.eclipse.actf.visualization.internal.ui.report.srcviewer.SrcViewerForPT;
 import org.eclipse.actf.visualization.ui.IVisualizationView;
 import org.eclipse.actf.visualization.ui.report.table.IResultTableSorter;
 import org.eclipse.actf.visualization.ui.report.table.ResultTableSorter;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
@@ -45,6 +50,7 @@
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
 
@@ -87,9 +93,13 @@
 	private SrcHighlightAction srcHighlightAction;
 
 	private boolean isShowAllGuidelineItems = false;
+	
+	private Shell shell;
 
 	public ResultTableViewer(Composite parent) {
 
+		shell = parent.getShell();
+		
 		tableViewer = new TableViewer(parent, SWT.BORDER | SWT.FULL_SELECTION
 				| SWT.MULTI);
 		table = tableViewer.getTable();
@@ -109,25 +119,27 @@
 		MenuManager popupMenu = new MenuManager();
 		popupMenu.add(new ClearSelectionAction(tableViewer));
 		popupMenu.add(new GuidelineSubMenu(this));
-		popupMenu.add(new ShowDescriptionAction(tableViewer));
+		popupMenu.add(new TechniquesSubMenu(this));
 		srcHighlightAction = new SrcHighlightAction(this);
 		srcHighlightAction.setEnabled(false);
 		popupMenu.add(srcHighlightAction);
+		popupMenu.add(new CopyAction(this));
+		popupMenu.add(new ShowDescriptionAction(tableViewer));
 		table.setMenu(popupMenu.createContextMenu(table));
 
 		guidelineHolder.addGuidelineSelectionChangedListener(this);
 
 		tableViewer
 				.addSelectionChangedListener(new ISelectionChangedListener() {
-					@SuppressWarnings("unchecked")
 					public void selectionChanged(SelectionChangedEvent event) {
 						ISelection selection = event.getSelection();
 						if (srcViewerForPT != null
 								&& selection instanceof IStructuredSelection) {
 							ArrayList<HighlightTargetSourceInfo> srcLineArray = new ArrayList<HighlightTargetSourceInfo>();
-							for (Iterator i = ((IStructuredSelection) selection)
+							for (@SuppressWarnings("unchecked")
+							Iterator<IProblemItem> i = ((IStructuredSelection) selection)
 									.iterator(); i.hasNext();) {
-								IProblemItem tmpItem = (IProblemItem) i.next();
+								IProblemItem tmpItem = i.next();
 								srcLineArray.addAll(Arrays.asList(tmpItem
 										.getHighlightTargetSoruceInfo()));
 							}
@@ -140,7 +152,19 @@
 						}
 					}
 				});
-
+		tableViewer.addDoubleClickListener(new IDoubleClickListener() {
+			public void doubleClick(DoubleClickEvent event) {
+				ISelection selection = event.getSelection();
+				if (selection instanceof IStructuredSelection) {
+					for (@SuppressWarnings("unchecked")
+					Iterator<IProblemItem> i = ((IStructuredSelection) selection)
+							.iterator(); i.hasNext();) {
+						IProblemItem tmpItem = i.next();
+						ReportMessageDialog.openReportMEssageDialog(shell, tmpItem);
+					}
+				}
+			}
+		});
 	}
 
 	public TableViewer getTableViewer() {
@@ -169,9 +193,9 @@
 	}
 
 	private void initColumns() {
-		int columnSize = 3 + guidelineHolder.getGuidelineData().length
+		int columnSize = 4 + guidelineHolder.getGuidelineData().length
 				+ guidelineHolder.getMetricsNames().length;
-		int lvColumn = 3 + 6 + guidelineHolder.getGuidelineData().length;
+		int lvColumn = 4 + 6 + guidelineHolder.getGuidelineData().length;
 
 		if (lvColumn > columnSize) {
 			columnSize = lvColumn;
@@ -199,7 +223,7 @@
 		columns[curPos].setWidth(25);
 		curPos++;
 
-		String[] tmpSarray = guidelineHolder.getMetricsNames();
+		String[] tmpSarray = guidelineHolder.getLocalizedMetricsNames();
 		boolean[] enabledMetrics = guidelineHolder.getMatchedMetrics();
 		for (int i = 0; i < tmpSarray.length; i++) {
 			columns[curPos].setText(tmpSarray[i]);
@@ -221,7 +245,7 @@
 			 * "icons/IconPink.gif").createImage()); break; default: }
 			 */
 			if (enabledMetrics[i]) {
-				columns[curPos].setWidth(70);
+				columns[curPos].setWidth(55);
 			} else {
 				columns[curPos].setWidth(0);
 				columns[curPos].setResizable(false);
@@ -241,6 +265,10 @@
 			curPos++;
 		}
 
+		columns[curPos].setText(IProblemConst.TITLE_TECHNIQUS);
+		columns[curPos].setWidth(65);
+		curPos++;
+
 		columns[curPos].setText(IProblemConst.TITLE_LINE);
 		columns[curPos].setWidth(60);
 		curPos++;
@@ -273,18 +301,23 @@
 		IGuidelineData[] dataArray = guidelineHolder.getGuidelineData();
 		for (int i = 0; i < dataArray.length; i++) {
 			columns[curPos].setText(dataArray[i].getGuidelineName());
-			columns[curPos].setWidth(70);
+			if (dataArray[i].isMatched()) {
+				columns[curPos].setWidth(70);
+			} else {
+				columns[curPos].setWidth(0);
+				columns[curPos].setResizable(false);
+			}
 			curPos++;
 		}
 
 		columns[curPos].setText(IProblemConst.TITLE_SEVERITY);
-		columns[curPos].setWidth(60);
+		columns[curPos].setWidth(55);
 		curPos++;
 		columns[curPos].setText(IProblemConst.TITLE_FORECOLOR);
-		columns[curPos].setWidth(100);
+		columns[curPos].setWidth(70);
 		curPos++;
 		columns[curPos].setText(IProblemConst.TITLE_BACKCOLOR);
-		columns[curPos].setWidth(100);
+		columns[curPos].setWidth(70);
 		curPos++;
 		columns[curPos].setText(IProblemConst.TITLE_X);
 		columns[curPos].setWidth(50);
@@ -293,7 +326,11 @@
 		columns[curPos].setWidth(50);
 		curPos++;
 		columns[curPos].setText(IProblemConst.TITLE_AREA);
-		columns[curPos].setWidth(70);
+		columns[curPos].setWidth(50);
+		curPos++;
+
+		columns[curPos].setText(IProblemConst.TITLE_TECHNIQUS);
+		columns[curPos].setWidth(60);
 		curPos++;
 
 		columns[curPos].setText(IProblemConst.TITLE_DESCRIPTION);
diff --git a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/ui/report/table/ResultTableLabelProvider.java b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/ui/report/table/ResultTableLabelProvider.java
index 5655123..5f42cc8 100644
--- a/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/ui/report/table/ResultTableLabelProvider.java
+++ b/plugins/org.eclipse.actf.visualization.ui.report/src/org/eclipse/actf/visualization/ui/report/table/ResultTableLabelProvider.java
@@ -11,6 +11,7 @@
 package org.eclipse.actf.visualization.ui.report.table;
 
 import org.eclipse.actf.visualization.eval.EvaluationUtil;
+import org.eclipse.actf.visualization.eval.IEvaluationItem;
 import org.eclipse.actf.visualization.eval.guideline.GuidelineHolder;
 import org.eclipse.actf.visualization.eval.problem.IProblemItem;
 import org.eclipse.actf.visualization.internal.ui.report.ReportPlugin;
@@ -32,19 +33,23 @@
 	private int guidelineFinPos = metricsFinPos
 			+ guidelineHolder.getGuidelineData().length;
 
+	private static Image HIGHLIGHT_IMAGE = ReportPlugin
+			.imageDescriptorFromPlugin(EvaluationUtil.PLUGIN_ID,
+					"icons/star.gif") //$NON-NLS-1$
+			.createImage();
+
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object,
-	 *      int)
+	 * @see
+	 * org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang
+	 * .Object, int)
 	 */
 	public Image getColumnImage(Object arg0, int arg1) {
 		IProblemItem tmpItem = (IProblemItem) arg0;
 		if (arg1 == 0) {
 			if (tmpItem.isCanHighlight()) {
-				return (ReportPlugin.imageDescriptorFromPlugin(
-						EvaluationUtil.PLUGIN_ID, "icons/star.gif") //$NON-NLS-1$
-						.createImage());
+				return (HIGHLIGHT_IMAGE);
 			}
 		} else if (arg1 < metricsFinPos) {
 			return (tmpItem.getEvaluationItem().getMetricsIcons()[arg1 - 1]);
@@ -55,28 +60,32 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object,
-	 *      int)
+	 * @see
+	 * org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang
+	 * .Object, int)
 	 */
 	public String getColumnText(Object arg0, int arg1) {
 		IProblemItem tmpItem = (IProblemItem) arg0;
+		IEvaluationItem ei = tmpItem.getEvaluationItem();
 
 		if (arg1 == 0) {
 
 		} else if (arg1 < metricsFinPos) {
-			return (tmpItem.getEvaluationItem().getTableDataMetrics()[arg1 - 1]);
+			return (ei.getTableDataMetrics()[arg1 - 1]);
 		} else if (arg1 < guidelineFinPos) {
-			return (tmpItem.getEvaluationItem().getTableDataGuideline()[arg1
-					- metricsFinPos]);
+			return (ei.getTableDataGuideline()[arg1 - metricsFinPos]);
 		} else {
-			if (arg1 - guidelineFinPos == 0) {
+			switch (arg1 - guidelineFinPos) {
+			case 0:
+				return ei.getTableDataTechniques(); // techniques
+			case 1:
 				return (tmpItem.getLineStrMulti());
-			} else {
+			case 2:
 				return (tmpItem.getDescription());
+			default:
 			}
 		}
 
 		return ""; //$NON-NLS-1$
 	}
-
 }
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 76c7e93..145902e 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
@@ -39,8 +39,9 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object,
-	 *      int)
+	 * @see
+	 * org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang
+	 * .Object, int)
 	 */
 	public Image getColumnImage(Object arg0, int arg1) {
 		IProblemItemImage tmpItem = (IProblemItemImage) arg0;
@@ -53,20 +54,28 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object,
-	 *      int)
+	 * @see
+	 * org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang
+	 * .Object, int)
 	 */
 	public String getColumnText(Object arg0, int arg1) {
 		IProblemItemImage tmpItem = (IProblemItemImage) arg0;
 
 		if (arg1 == 0) {
-			return(tmpItem.getIconTooltip());			
+			return (tmpItem.getIconTooltip());
 		} else if (arg1 < guidelineFinPos) {
-			return (tmpItem.getEvaluationItem().getTableDataGuideline()[arg1 - 1]);
+			try {
+				return (tmpItem.getEvaluationItem().getTableDataGuideline()[arg1 - 1]);
+			} catch (Exception e) {
+				return ("");
+			}
 		} else {
 			switch (arg1 - guidelineFinPos) {
 			case 0:
-				return (Integer.toString(tmpItem.getSeverityLV()));
+				if(tmpItem.getSeverityLV()>0){
+					return (Integer.toString(tmpItem.getSeverityLV()));
+				}
+				return("-");
 			case 1:
 				return (tmpItem.getForeground());
 			case 2:
@@ -78,6 +87,8 @@
 			case 5:
 				return (Integer.toString(tmpItem.getArea()));
 			case 6:
+				return (tmpItem.getEvaluationItem().getTableDataTechniques());// techniques
+			case 7:
 				return (tmpItem.getDescription());
 			default:
 				return (""); //$NON-NLS-1$
