diff --git a/plugins/org.eclipse.actf.visualization.lowvision/META-INF/MANIFEST.MF b/plugins/org.eclipse.actf.visualization.lowvision/META-INF/MANIFEST.MF
index 206a763..1079f7c 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.actf.visualization.lowvision/META-INF/MANIFEST.MF
@@ -14,5 +14,5 @@
  org.eclipse.actf.visualization.ui.report,
  org.eclipse.actf.model.dom.html,
  org.eclipse.actf.ui
-Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/LowVisionVizPlugin.java b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/LowVisionVizPlugin.java
index d7132a0..00f3b79 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/LowVisionVizPlugin.java
+++ b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/LowVisionVizPlugin.java
@@ -24,7 +24,7 @@
 public class LowVisionVizPlugin extends AbstractUIPlugin {
 
 	// The plug-in ID
-	public static final String PLUGIN_ID = "org.eclipse.actf.visualization.lowvision";
+	public static final String PLUGIN_ID = "org.eclipse.actf.visualization.lowvision"; //$NON-NLS-1$
 
 	// The shared instance
 	private static LowVisionVizPlugin plugin;
@@ -49,7 +49,7 @@
 		createTempDirectory();
 		String tmpS;
 		if (tmpDir != null) {
-			tmpS = tmpDir.getAbsolutePath() + File.separator + "img";
+			tmpS = tmpDir.getAbsolutePath() + File.separator + "img"; //$NON-NLS-1$
 			if (FileUtils.isAvailableDirectory(tmpS)) {
 				String tmpS2 = tmpS + File.separator;
 				LowVisionVizResourceUtil.saveImages(tmpS2);
@@ -83,12 +83,12 @@
 	private static void createTempDirectory() {
 		if (tmpDir == null) {
 			String tmpS = plugin.getStateLocation().toOSString()
-					+ File.separator + "tmp";
+					+ File.separator + "tmp"; //$NON-NLS-1$
 			if (FileUtils.isAvailableDirectory(tmpS)) {
 				tmpDir = new File(tmpS);
 			} else {
-				System.err.println(PLUGIN_ID + " : can't create tmp Directory");
-				tmpDir = new File(System.getProperty("java.io.tmpdir"));
+				//System.err.println(PLUGIN_ID + " : can't create tmp Directory");
+				tmpDir = new File(System.getProperty("java.io.tmpdir")); //$NON-NLS-1$
 			}
 		}
 	}
diff --git a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/eval/CheckResultLowVision.java b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/eval/CheckResultLowVision.java
index 5c2c5cd..ff512b6 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/eval/CheckResultLowVision.java
+++ b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/eval/CheckResultLowVision.java
@@ -24,7 +24,7 @@
 
     //serial number
     public CheckResultLowVision() {
-        setSummaryReportUrl("about:blank");
+        setSummaryReportUrl("about:blank"); //$NON-NLS-1$
         setShowAllGuidelineItems(true);
     }
     
diff --git a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/eval/SaveReportLowVision.java b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/eval/SaveReportLowVision.java
index 80ea8d9..e8a2857 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/eval/SaveReportLowVision.java
+++ b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/eval/SaveReportLowVision.java
@@ -36,9 +36,11 @@
 
 public class SaveReportLowVision {
 
-	private static final String LVIMG_FILE = "lvimg.bmp";
+	private static final String UNDERSCORE = "_"; //$NON-NLS-1$
 
-	private static final String RESULT_BMP_FILE = "result.bmp";
+	private static final String LVIMG_FILE = "lvimg.bmp"; //$NON-NLS-1$
+
+	private static final String RESULT_BMP_FILE = "result.bmp"; //$NON-NLS-1$
 
 	private static final String[] ERROR_IMAGE_ALT = {
 			Messages.SaveReportLowVision_Iro21_Error_Alt,
@@ -76,7 +78,7 @@
 
 	public SaveReportLowVision(Shell _shell) {
 		shell = _shell;
-		saveFileName = "";
+		saveFileName = ""; //$NON-NLS-1$
 	}
 
 	// TODO save rating
@@ -86,7 +88,7 @@
 		currentUrlS = _currentUrlS;
 
 		saveFileName = DialogSave.open(shell, DialogSave.HTML, currentUrlS,
-				"_lowVision.htm");
+				"_lowVision.htm"); //$NON-NLS-1$
 		saveImgName = LVIMG_FILE;
 		// probStaticsName = "";
 		problemList = targetList;
@@ -117,15 +119,15 @@
 		saveFileName = currentUrlS;
 		if (saveFileName != null) {
 
-			int iPos = saveFileName.indexOf("//");
+			int iPos = saveFileName.indexOf("//"); //$NON-NLS-1$
 			if (iPos == -1)
 				iPos = 0;
 			saveFileName = saveFileName.substring(iPos + 2);
-			saveFileName = saveFileName.replaceAll("\\p{Punct}", "_");
+			saveFileName = saveFileName.replaceAll("\\p{Punct}", UNDERSCORE); //$NON-NLS-1$
 
-			if (saveFileName.indexOf(".") > 0) {
+			if (saveFileName.indexOf(".") > 0) { //$NON-NLS-1$
 				saveFileName = saveFileName.substring(0, saveFileName
-						.lastIndexOf("."));
+						.lastIndexOf(".")); //$NON-NLS-1$
 			}
 
 			if (saveFileName.length() > 100) {
@@ -134,13 +136,13 @@
 			// saveFileName += "_"+String.valueOf(processNo)+"_lowVision.htm";
 		}
 		// probStaticsName = folder + probName;
-		saveImgName = saveFileName + "_" + String.valueOf(processNo) + "_"
+		saveImgName = saveFileName + UNDERSCORE + String.valueOf(processNo) + UNDERSCORE
 				+ String.valueOf(paramNo[0]) + String.valueOf(paramNo[1])
-				+ String.valueOf(paramNo[2]) + "_lvimg.png";
-		saveFileName += "_" + String.valueOf(processNo) + "_"
+				+ String.valueOf(paramNo[2]) + "_lvimg.png"; //$NON-NLS-1$
+		saveFileName += UNDERSCORE + String.valueOf(processNo) + UNDERSCORE
 				+ String.valueOf(paramNo[0]) + String.valueOf(paramNo[1])
-				+ String.valueOf(paramNo[2]) + "_lowVision.htm";
-		folder += "lowvision" + File.separator;
+				+ String.valueOf(paramNo[2]) + "_lowVision.htm"; //$NON-NLS-1$
+		folder += "lowvision" + File.separator; //$NON-NLS-1$
 		File testDir = new File(folder);
 		if (!testDir.isDirectory())
 			testDir.mkdirs();
@@ -164,7 +166,7 @@
 			try {
 				if (data.length > 0) {
 					for (int i = 0; i < data.length; i++) {
-						tmpSB.append(data[i][item] + ",");
+						tmpSB.append(data[i][item] + ","); //$NON-NLS-1$
 					}
 				}
 			} catch (Exception e) {
@@ -173,6 +175,7 @@
 			return (tmpSB.toString());
 		}
 
+		@SuppressWarnings("nls")
 		private void prepareJavaScript(Writer writer,
 				IProblemItemImage[] problemArray, String imgDir) {
 
@@ -228,6 +231,8 @@
 
 		}
 
+		@SuppressWarnings("nls")
+		//TODO
 		public void run() {
 			try {
 
@@ -503,8 +508,8 @@
 	}
 
 	private String getFileName(String filePath) {
-		int index = filePath.lastIndexOf("/");
-		int index2 = filePath.lastIndexOf("\\");
+		int index = filePath.lastIndexOf("/"); //$NON-NLS-1$
+		int index2 = filePath.lastIndexOf("\\"); //$NON-NLS-1$
 		if (index < index2) {
 			index = index2;
 		}
diff --git a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/eval/SummaryEvaluationLV.java b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/eval/SummaryEvaluationLV.java
index acdaaac..e941eec 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/eval/SummaryEvaluationLV.java
+++ b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/eval/SummaryEvaluationLV.java
@@ -22,7 +22,6 @@
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.widgets.Display;
 
-
 public class SummaryEvaluationLV {
 
 	public static HighlightStringListener getHighLightStringListener() {
@@ -30,33 +29,24 @@
 		Color blue = Display.getDefault().getSystemColor(SWT.COLOR_BLUE);
 		Color red = Display.getDefault().getSystemColor(SWT.COLOR_RED);
 
-		if(Display.getDefault().getHighContrast()){
+		if (Display.getDefault().getHighContrast()) {
 			blue = null;
 			red = null;
 		}
-		
-		hlsl
-				.addTarget(
-						Messages.EvalLV_no_color_difficult_distinguish, blue, SWT.BOLD); //$NON-NLS-1$
-		hlsl
-				.addTarget(
-						Messages.EvalLV_font_might_enough_to_read, blue, SWT.BOLD); 
 
-		hlsl
-				.addTarget(
-						Messages.EvalLV_color_difficult_distinguish, red, SWT.BOLD); //$NON-NLS-1$
-		hlsl
-				.addTarget(
-						Messages.EvalLV_color_might_difficult_distinguish, red, SWT.BOLD); //$NON-NLS-1$
-		hlsl
-				.addTarget(
-						Messages.EvalLV_font_too_small_to_read, red, SWT.BOLD); 
-		hlsl
-				.addTarget(
-						Messages.EvalLV_font_might_too_small_to_read, red, SWT.BOLD); //$NON-NLS-1$
-		hlsl
-				.addTarget(
-						Messages.EvalLV_page_have_fixed_font, red, SWT.BOLD); 
+		hlsl.addTarget(Messages.EvalLV_no_color_difficult_distinguish, blue,
+				SWT.BOLD);
+		hlsl.addTarget(Messages.EvalLV_font_might_enough_to_read, blue,
+				SWT.BOLD);
+
+		hlsl.addTarget(Messages.EvalLV_color_difficult_distinguish, red,
+				SWT.BOLD);
+		hlsl.addTarget(Messages.EvalLV_color_might_difficult_distinguish, red,
+				SWT.BOLD);
+		hlsl.addTarget(Messages.EvalLV_font_too_small_to_read, red, SWT.BOLD);
+		hlsl.addTarget(Messages.EvalLV_font_might_too_small_to_read, red,
+				SWT.BOLD);
+		hlsl.addTarget(Messages.EvalLV_page_have_fixed_font, red, SWT.BOLD);
 
 		hlsl.addTarget(Messages.EvalLV_0, null, SWT.BOLD);
 		// TODO
@@ -76,7 +66,7 @@
 	}
 
 	public static String notSupported() {
-		return (Messages.EvalLV_0); 
+		return (Messages.EvalLV_0);
 	}
 
 	public String getOverview() {
@@ -99,60 +89,59 @@
 
 		if (problemCount[1] > 0 || problemCount[3] > 0) {
 			if (severeCount[1] > 0 || severeCount[3] > 0) {
-				tmpSB
-						.append(Messages.EvalLV_color_difficult_distinguish + FileUtils.LINE_SEP); //$NON-NLS-1$
+				tmpSB.append(Messages.EvalLV_color_difficult_distinguish
+						+ FileUtils.LINE_SEP);
 			} else {
-				tmpSB
-						.append(Messages.EvalLV_color_might_difficult_distinguish + FileUtils.LINE_SEP); //$NON-NLS-1$
+				tmpSB.append(Messages.EvalLV_color_might_difficult_distinguish
+						+ FileUtils.LINE_SEP);
 			}
-			tmpSB
-					.append(Messages.EvalLV_click_detailed_report + FileUtils.LINE_SEP); 
+			tmpSB.append(Messages.EvalLV_click_detailed_report
+					+ FileUtils.LINE_SEP);
 
 			tmpSB.append(FileUtils.LINE_SEP);
 			if (problemCount[1] > 0) {
-				tmpSB
-						.append(Messages.EvalLV_text_color_combination + " " + problemCount[1] + FileUtils.LINE_SEP); //$NON-NLS-1$ //$NON-NLS-2$
+				tmpSB.append(Messages.EvalLV_text_color_combination
+						+ " " + problemCount[1] + FileUtils.LINE_SEP); //$NON-NLS-1$ 
 			}
 			if (problemCount[3] > 0) {
-				tmpSB
-						.append(Messages.EvalLV_img_color_combination + " " + problemCount[3] + FileUtils.LINE_SEP); //$NON-NLS-1$ //$NON-NLS-2$
+				tmpSB.append(Messages.EvalLV_img_color_combination
+						+ " " + problemCount[3] + FileUtils.LINE_SEP); //$NON-NLS-1$ 
 			}
 		} else {
-			tmpSB
-					.append(Messages.EvalLV_no_color_difficult_distinguish + FileUtils.LINE_SEP); //$NON-NLS-1$
+			tmpSB.append(Messages.EvalLV_no_color_difficult_distinguish
+					+ FileUtils.LINE_SEP);
 		}
 
 		tmpSB.append(FileUtils.LINE_SEP);
 
 		if (problemCount[5] > 0 || problemCount[6] > 0) {
 			if (severeCount[5] > 0 || severeCount[6] > 0) {
-				tmpSB
-						.append(Messages.EvalLV_font_too_small_to_read + FileUtils.LINE_SEP); //$NON-NLS-1$
+				tmpSB.append(Messages.EvalLV_font_too_small_to_read
+						+ FileUtils.LINE_SEP);
 			} else {
-				tmpSB
-						.append(Messages.EvalLV_font_might_too_small_to_read + FileUtils.LINE_SEP); //$NON-NLS-1$
+				tmpSB.append(Messages.EvalLV_font_might_too_small_to_read
+						+ FileUtils.LINE_SEP);
 			}
-			tmpSB
-					.append(Messages.EvalLV_click_detailed_report + FileUtils.LINE_SEP); 
+			tmpSB.append(Messages.EvalLV_click_detailed_report
+					+ FileUtils.LINE_SEP);
 
 			tmpSB.append(FileUtils.LINE_SEP);
 			if (problemCount[5] > 0) {
-				tmpSB
-						.append(Messages.EvalLV_font_too_small + " " + problemCount[5]); 
+				tmpSB.append(Messages.EvalLV_font_too_small + " " //$NON-NLS-1$
+						+ problemCount[5]);
 			}
 			if (problemCount[6] > 0) {
-				tmpSB
-						.append(Messages.EvalLV_font_too_small_fixed + " " + problemCount[6]); //$NON-NLS-1$ //$NON-NLS-2$
+				tmpSB.append(Messages.EvalLV_font_too_small_fixed
+						+ " " + problemCount[6]); //$NON-NLS-1$ 
 			}
 		} else if (problemCount[4] > 0) {
-			tmpSB
-					.append(Messages.EvalLV_page_have_fixed_font + FileUtils.LINE_SEP); 
+			tmpSB.append(Messages.EvalLV_page_have_fixed_font
+					+ FileUtils.LINE_SEP);
 			tmpSB.append(FileUtils.LINE_SEP);
-			tmpSB
-					.append(Messages.EvalLV_font_fixed + " " + problemCount[4]); 
+			tmpSB.append(Messages.EvalLV_font_fixed + " " + problemCount[4]); //$NON-NLS-1$
 		} else {
-			tmpSB
-					.append(Messages.EvalLV_font_might_enough_to_read + FileUtils.LINE_SEP); //$NON-NLS-1$
+			tmpSB.append(Messages.EvalLV_font_might_enough_to_read
+					+ FileUtils.LINE_SEP);
 		}
 
 		return (tmpSB.toString());
diff --git a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/actions/LowVisionSaveAction.java b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/actions/LowVisionSaveAction.java
index f61cf62..81bb6e9 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/actions/LowVisionSaveAction.java
+++ b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/actions/LowVisionSaveAction.java
@@ -24,7 +24,7 @@
 	
     public LowVisionSaveAction(PartControlLowVision lowVisionCtrl) {
         setToolTipText(Messages.Tooltip_Save); 
-        setImageDescriptor(LowVisionVizPlugin.imageDescriptorFromPlugin(LowVisionVizPlugin.PLUGIN_ID, "icons/ButtonSave.png"));
+        setImageDescriptor(LowVisionVizPlugin.imageDescriptorFromPlugin(LowVisionVizPlugin.PLUGIN_ID, "icons/ButtonSave.png")); //$NON-NLS-1$
         setText(Messages.MenuConst_Save); 
         this.lowVisionCtrl = lowVisionCtrl;
     }
diff --git a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/actions/LowVisionSettingsAction.java b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/actions/LowVisionSettingsAction.java
index 760a0c0..fa84bd0 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/actions/LowVisionSettingsAction.java
+++ b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/actions/LowVisionSettingsAction.java
@@ -23,7 +23,7 @@
 		
     public LowVisionSettingsAction() {
         setToolTipText(Messages.Tooltip_Settings); 
-        setImageDescriptor(LowVisionVizPlugin.imageDescriptorFromPlugin(LowVisionVizPlugin.PLUGIN_ID, "icons/setting.png"));
+        setImageDescriptor(LowVisionVizPlugin.imageDescriptorFromPlugin(LowVisionVizPlugin.PLUGIN_ID, "icons/setting.png")); //$NON-NLS-1$
         setText(Messages.MenuConst_Settings); 
     }
 
diff --git a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/actions/LowVisionSimulateAction.java b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/actions/LowVisionSimulateAction.java
index 607efd5..423db5d 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/actions/LowVisionSimulateAction.java
+++ b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/actions/LowVisionSimulateAction.java
@@ -24,7 +24,7 @@
 	public LowVisionSimulateAction(PartControlLowVision lowVisionCtrl) {
 		setToolTipText(Messages.LowVisionView_Simulate_2); 
 		setImageDescriptor(LowVisionVizPlugin.imageDescriptorFromPlugin(
-				LowVisionVizPlugin.PLUGIN_ID, "icons/simulation.png"));
+				LowVisionVizPlugin.PLUGIN_ID, "icons/simulation.png")); //$NON-NLS-1$
 		setText(Messages.LVSimulationAction_0); 
 		this.lowVisionCtrl = lowVisionCtrl;
 	}
diff --git a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/internal/LowVisionToolbar.java b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/internal/LowVisionToolbar.java
index 566a7b4..945cac2 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/internal/LowVisionToolbar.java
+++ b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/internal/LowVisionToolbar.java
@@ -70,7 +70,7 @@
 		toolBarManager.update(true);
 
 		this._wholePageButton = new Button(this, SWT.CHECK);
-		this._wholePageButton.setText(Messages.LowVisionView_whole_page_1); //$NON-NLS-1$
+		this._wholePageButton.setText(Messages.LowVisionView_whole_page_1);
 		GridData gridData = new GridData();
 		gridData.horizontalAlignment = GridData.CENTER;
 		this._wholePageButton.setLayoutData(gridData);
diff --git a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/internal/PartControlLowVision.java b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/internal/PartControlLowVision.java
index f306336..8e0c7f8 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/internal/PartControlLowVision.java
+++ b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/internal/PartControlLowVision.java
@@ -32,6 +32,7 @@
 import org.eclipse.actf.ui.util.PlatformUIUtil;
 import org.eclipse.actf.ui.util.timer.WaitExecSyncEventHandler;
 import org.eclipse.actf.ui.util.timer.WaitExecSyncEventListener;
+import org.eclipse.actf.util.logging.DebugPrintUtil;
 import org.eclipse.actf.visualization.IVisualizationConst;
 import org.eclipse.actf.visualization.engines.lowvision.PageEvaluation;
 import org.eclipse.actf.visualization.engines.lowvision.image.IPageImage;
@@ -299,7 +300,7 @@
 	}
 
 	private HashMap<String, WaitExecSyncEventListener> eventhandlerHolder = new HashMap<String, WaitExecSyncEventListener>();
-	private static final String LISTENER_KEY = "browser";
+	private static final String LISTENER_KEY = "browser"; //$NON-NLS-1$
 
 	public void doSimulate() {
 		is1stSimulateDone = true;
@@ -376,7 +377,7 @@
 		if (webBrowser != null) {
 			try {
 				File sourceHtmlFile = LowVisionVizPlugin.createTempFile(
-						"source", SUFFIX_HTML);
+						"source", SUFFIX_HTML); //$NON-NLS-1$
 				webBrowser.saveOriginalDocument(sourceHtmlFile
 						.getAbsolutePath());
 				checkResult.setSourceFile(sourceHtmlFile);
@@ -602,7 +603,7 @@
 	@SuppressWarnings("unchecked")
 	public void selectionChanged(IWorkbenchPart part, ISelection selection) {
 		if (selection == null || !(selection instanceof IStructuredSelection)) {
-			System.err.println(this.getClass().getName() + ":" + "Iselection");
+			DebugPrintUtil.devOrDebugPrintln(this.getClass().getName() + ": Iselection"); //$NON-NLS-1$
 			return;
 		}
 		ArrayList<IPositionSize> result = new ArrayList<IPositionSize>();
diff --git a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/preferences/LowVisionPreferencePage.java b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/preferences/LowVisionPreferencePage.java
index 33d6568..928064f 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/preferences/LowVisionPreferencePage.java
+++ b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/preferences/LowVisionPreferencePage.java
@@ -64,11 +64,11 @@
 
 	private static final String EYESIGHT_0_1 = "20/200"; //$NON-NLS-1$
 
-	private static final String COLOR_VISION_1 = Messages.DialogSettingLowVision_Protan; //$NON-NLS-1$
+	private static final String COLOR_VISION_1 = Messages.DialogSettingLowVision_Protan;
 
-	private static final String COLOR_VISION_2 = Messages.DialogSettingLowVision_Deutan; //$NON-NLS-1$
+	private static final String COLOR_VISION_2 = Messages.DialogSettingLowVision_Deutan;
 
-	private static final String COLOR_VISION_3 = Messages.DialogSettingLowVision_Tritan; //$NON-NLS-1$
+	private static final String COLOR_VISION_3 = Messages.DialogSettingLowVision_Tritan;
 
 	private Button _eyesightCheckButton;
 
@@ -168,7 +168,7 @@
 			// "vizResources/images/LowVisionSample.bmp"), false));
 			this._samplePageImage = PageImageFactory
 					.createPageImage(FileLocator.openStream(lvBundle, new Path(
-							"vizResources/images/LowVisionSample.bmp"), false));
+							"vizResources/images/LowVisionSample.bmp"), false)); //$NON-NLS-1$
 		} catch (Exception e) {
 			// e.printStackTrace();
 			this._samplePageImage = PageImageFactory.createPageImage();
@@ -187,7 +187,7 @@
 			ImageLoader imageLoader = new ImageLoader();
 			_sampleImageData = imageLoader.load(FileLocator.openStream(
 					lvBundle, new Path(
-							"vizResources/images/LowVisionSample.bmp"), false));
+							"vizResources/images/LowVisionSample.bmp"), false)); //$NON-NLS-1$
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
@@ -195,7 +195,7 @@
 		if (simulationImageFile == null) {
 			try {
 				simulationImageFile = LowVisionVizPlugin.createTempFile(
-						"preference", IVisualizationConst.SUFFIX_BMP);
+						"preference", IVisualizationConst.SUFFIX_BMP); //$NON-NLS-1$
 			} catch (Exception e) {
 			}
 		}
@@ -232,7 +232,8 @@
 		this._eyesightCheckButton = new Button(composite, SWT.CHECK);
 		this._eyesightCheckButton.setLayoutData(new GridData(SWT.LEFT,
 				SWT.CENTER, false, false, 2, 1));
-		this._eyesightCheckButton.setText(Messages.DialogSettingLowVision_Eyesight_9);
+		this._eyesightCheckButton
+				.setText(Messages.DialogSettingLowVision_Eyesight_9);
 		this._eyesightCheckButton.setSelection(this._appSetting.useEyeSight());
 		this._eyesightCheckButton.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent event) {
@@ -417,7 +418,8 @@
 		this._colorfilterCheckButton = new Button(composite, SWT.CHECK);
 		this._colorfilterCheckButton.setLayoutData(new GridData(SWT.LEFT,
 				SWT.CENTER, false, false, 2, 1));
-		this._colorfilterCheckButton.setText(Messages.DialogSettingLowVision_Crystalline_lens);
+		this._colorfilterCheckButton
+				.setText(Messages.DialogSettingLowVision_Crystalline_lens);
 		this._colorfilterCheckButton.setSelection(this._appSetting
 				.useEyeSight());
 		this._colorfilterCheckButton
@@ -507,7 +509,7 @@
 
 		// Create the Label "Original:"
 		Label labelOriginal = new Label(composite, SWT.NONE);
-		labelOriginal.setText(Messages.DialogSettingLowVision_Original__24); //$NON-NLS-1$
+		labelOriginal.setText(Messages.DialogSettingLowVision_Original__24);
 
 		_beforeSimulateImageCanvas = new Canvas(composite, SWT.NO_REDRAW_RESIZE);
 		gridData = new GridData();
@@ -528,14 +530,15 @@
 
 		// Create the blank label for adjust the location
 		Label labelBlank = new Label(composite, SWT.NONE);
-		labelBlank.setText(" ");
+		labelBlank.setText(" "); //$NON-NLS-1$
 		gridData = new GridData();
 		gridData.heightHint = 20;
 		labelBlank.setLayoutData(gridData);
 
 		// Create the Label "After simulation:"
 		Label labelAfterSimulation = new Label(composite, SWT.NONE);
-		labelAfterSimulation.setText(Messages.DialogSettingLowVision_After_simulation); //$NON-NLS-1$
+		labelAfterSimulation
+				.setText(Messages.DialogSettingLowVision_After_simulation);
 
 		_afterSimulateImageCanvas = new Canvas(composite, SWT.NO_REDRAW_RESIZE);
 		gridData = new GridData();
@@ -656,13 +659,13 @@
 
 			int sliderValue = _eyeSightSlider.getSelection();
 			if (sliderValue < 100) {
-				str = "0." + String.valueOf(sliderValue);
+				str = "0." + String.valueOf(sliderValue); //$NON-NLS-1$
 			} else {
-				str = "1.00";
+				str = "1.00"; //$NON-NLS-1$
 			}
 			_eyeSightLabel.setText(str);
 		} else {
-			_eyeSightLabel.setText("");
+			_eyeSightLabel.setText(""); //$NON-NLS-1$
 		}
 
 		currParam.setColorVision(_colorvisionCheckButton.getSelection());
diff --git a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/util/LowVisionUtil.java b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/util/LowVisionUtil.java
index 4b780d0..53ccd2c 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/util/LowVisionUtil.java
+++ b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/util/LowVisionUtil.java
@@ -40,7 +40,7 @@
     public static String[] frameAnalyze(IWebBrowserACTF webBrowser) {
         try {
             if(runtimeHtmlFile==null){
-                runtimeHtmlFile = LowVisionVizPlugin.createTempFile("runtime", SUFFIX_HTML);
+                runtimeHtmlFile = LowVisionVizPlugin.createTempFile("runtime", SUFFIX_HTML); //$NON-NLS-1$
             }
             URL urlBase = new URL(webBrowser.getURL());
 
@@ -55,10 +55,10 @@
 
             NodeList frameList = documentElement.getElementsByTagName("frame"); //$NON-NLS-1$
             try {
-                NodeList baseNL = documentElement.getElementsByTagName("base");
+                NodeList baseNL = documentElement.getElementsByTagName("base"); //$NON-NLS-1$
                 if (baseNL.getLength() > 0) {
                     Element baseE = (Element) baseNL.item(baseNL.getLength() - 1);
-                    String baseUrlS = baseE.getAttribute("href");
+                    String baseUrlS = baseE.getAttribute("href"); //$NON-NLS-1$
                     if (baseUrlS.length() > 0) {
                         URL tmpUrl = new URL(urlBase, baseUrlS);
                         urlBase = tmpUrl;
diff --git a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/util/LowVisionVizResourceUtil.java b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/util/LowVisionVizResourceUtil.java
index 8865901..d433918 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/util/LowVisionVizResourceUtil.java
+++ b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/util/LowVisionVizResourceUtil.java
@@ -18,35 +18,46 @@
 import org.eclipse.core.runtime.Platform;
 import org.osgi.framework.Bundle;
 
-
-
-
+@SuppressWarnings("nls")
 public class LowVisionVizResourceUtil {
 
-    public static void saveErrorIcons(String path) {
-        Bundle bundleChecker = Platform.getBundle(EvaluationUtil.PLUGIN_ID);
-        FileUtils.copyFile(bundleChecker, new Path("icons/lowvision/HiIro21.gif"), path + "HiIro21.gif", true);
-        FileUtils.copyFile(bundleChecker, new Path("icons/lowvision/HiBoke21.gif"), path + "HiBoke21.gif", true);
-        FileUtils.copyFile(bundleChecker, new Path("icons/lowvision/ErrIro21.gif"), path + "ErrIro21.gif", true);
-        FileUtils.copyFile(bundleChecker, new Path("icons/lowvision/ErrBoke21.gif"), path + "ErrBoke21.gif", true);
+	public static void saveErrorIcons(String path) {
+		Bundle bundleChecker = Platform.getBundle(EvaluationUtil.PLUGIN_ID);
+		FileUtils.copyFile(bundleChecker, new Path(
+				"icons/lowvision/HiIro21.gif"), path + "HiIro21.gif", true);
+		FileUtils.copyFile(bundleChecker, new Path(
+				"icons/lowvision/HiBoke21.gif"), path + "HiBoke21.gif", true);
+		FileUtils.copyFile(bundleChecker, new Path(
+				"icons/lowvision/ErrIro21.gif"), path + "ErrIro21.gif", true);
+		FileUtils.copyFile(bundleChecker, new Path(
+				"icons/lowvision/ErrBoke21.gif"), path + "ErrBoke21.gif", true);
 
-    }
+	}
 
-    public static void saveImages(String path) {
-        Bundle bundleChecker = Platform.getBundle(EvaluationUtil.PLUGIN_ID);
+	public static void saveImages(String path) {
+		Bundle bundleChecker = Platform.getBundle(EvaluationUtil.PLUGIN_ID);
 
-        FileUtils.copyFile(bundleChecker, new Path("icons/rating/Bad.png"), path + "Bad.png", true);
-        FileUtils.copyFile(bundleChecker, new Path("icons/rating/Good.png"), path + "Good.png", true);
-        FileUtils.copyFile(bundleChecker, new Path("icons/rating/Poor.png"), path + "Poor.png", true);
-        FileUtils.copyFile(bundleChecker, new Path("icons/rating/VeryGood.png"), path + "VeryGood.png", true);
-    }
+		FileUtils.copyFile(bundleChecker, new Path("icons/rating/Bad.png"),
+				path + "Bad.png", true);
+		FileUtils.copyFile(bundleChecker, new Path("icons/rating/Good.png"),
+				path + "Good.png", true);
+		FileUtils.copyFile(bundleChecker, new Path("icons/rating/Poor.png"),
+				path + "Poor.png", true);
+		FileUtils.copyFile(bundleChecker,
+				new Path("icons/rating/VeryGood.png"), path + "VeryGood.png",
+				true);
+	}
 
-    public static void saveScripts(String path) {
-        Bundle lvBundle = Platform.getBundle(LowVisionVizPlugin.PLUGIN_ID);
+	public static void saveScripts(String path) {
+		Bundle lvBundle = Platform.getBundle(LowVisionVizPlugin.PLUGIN_ID);
 
-        FileUtils.copyFile(lvBundle, new Path("vizResources/scripts/lvHighlight.js"), path + "lvHighlight.js", true);
-        FileUtils.copyFile(lvBundle, new Path("vizResources/scripts/lvHighlight_moz.js"), path + "lvHighlight_moz.js", true);
+		FileUtils.copyFile(lvBundle, new Path(
+				"vizResources/scripts/lvHighlight.js"),
+				path + "lvHighlight.js", true);
+		FileUtils.copyFile(lvBundle, new Path(
+				"vizResources/scripts/lvHighlight_moz.js"), path
+				+ "lvHighlight_moz.js", true);
 
-    }
+	}
 
 }
diff --git a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/util/ParamLowVision.java b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/util/ParamLowVision.java
index b2f9d66..a2cb984 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/util/ParamLowVision.java
+++ b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/util/ParamLowVision.java
@@ -14,196 +14,199 @@
 import org.eclipse.actf.visualization.engines.lowvision.LowVisionType;
 import org.eclipse.actf.visualization.lowvision.ui.internal.Messages;
 
-
-
 public class ParamLowVision {
-    //TODO use preference store
-    private static ParamLowVision INSTANCE;
-    
-    //the current setting
-    private boolean oEyeSight;
+	// TODO use preference store
+	private static ParamLowVision INSTANCE;
 
-    private int iCurEyeSightValue; //the actual value:devided it by 100
+	// the current setting
+	private boolean oEyeSight;
 
-    private boolean oColorVision;
+	private int iCurEyeSightValue; // the actual value:devided it by 100
 
-    private int iCurColorVisionValue; //1,2,3
+	private boolean oColorVision;
 
-    private boolean oColorFilter;
+	private int iCurColorVisionValue; // 1,2,3
 
-    private int iCurColorFilterValue; //the actual value:devided it by 100
+	private boolean oColorFilter;
 
-    private LowVisionType lowVisionType;
+	private int iCurColorFilterValue; // the actual value:devided it by 100
 
-    private static final double DEFAULT_EYESIGHT_DEGREE = 0.5;
+	private LowVisionType lowVisionType;
 
-    private static final int DEFAULT_CVD_TYPE = 2;
+	private static final double DEFAULT_EYESIGHT_DEGREE = 0.5;
 
-    private static final double DEFAULT_COLOR_FILTER = 0.8;
+	private static final int DEFAULT_CVD_TYPE = 2;
 
-    public static ParamLowVision getDefaultInstance(){
-        if(INSTANCE==null){
-            INSTANCE=new ParamLowVision();
-        }
-        return INSTANCE;
-    }
-    
-    public ParamLowVision() {
+	private static final double DEFAULT_COLOR_FILTER = 0.8;
 
-        oEyeSight = true;
-        iCurEyeSightValue = (int) (Math.rint(DEFAULT_EYESIGHT_DEGREE * 100.0));
-        oColorVision = true;
-        iCurColorVisionValue = DEFAULT_CVD_TYPE;
-        oColorFilter = true;
-        iCurColorFilterValue = (int) (Math.rint(DEFAULT_COLOR_FILTER * 100.0));
-        lowVisionType = new LowVisionType();
-    }
+	public static ParamLowVision getDefaultInstance() {
+		if (INSTANCE == null) {
+			INSTANCE = new ParamLowVision();
+		}
+		return INSTANCE;
+	}
 
-    public LowVisionType getLowVisionType() {
-        //	LowVisionType lowVisionType = new LowVisionType();
-        try {
-            lowVisionType.setEyesight(oEyeSight);
-            if (oEyeSight) {
-                float fEyeSight = iCurEyeSightValue / 100.0f;
-                /*
-                 * float fEye = 0.1f; if (fEyeSight < 0.075f) fEye = 0.05f; else
-                 * if (fEyeSight > 0.15f) fEye = 0.2f;
-                 */
-                //System.out.println(fEyeSight);
-                lowVisionType.setEyesightDegree(fEyeSight);
-            }
+	public ParamLowVision() {
 
-            lowVisionType.setCVD(oColorVision);
-            if (oColorVision) {
-                lowVisionType.setCVDType(iCurColorVisionValue);
-            }
+		oEyeSight = true;
+		iCurEyeSightValue = (int) (Math.rint(DEFAULT_EYESIGHT_DEGREE * 100.0));
+		oColorVision = true;
+		iCurColorVisionValue = DEFAULT_CVD_TYPE;
+		oColorFilter = true;
+		iCurColorFilterValue = (int) (Math.rint(DEFAULT_COLOR_FILTER * 100.0));
+		lowVisionType = new LowVisionType();
+	}
 
-            lowVisionType.setColorFilter(oColorFilter);
-            if (oColorFilter) {
-                lowVisionType.setColorFilterDegree(iCurColorFilterValue / 100.0f);
-            }
-            // debug
-            //DebugUtil.outMsg( this, "eyesight = " +
-            // lowVisionType.getEyesight() + "\nCVD = " + lowVisionType.getCVD()
-            // + "\nfileter = " + lowVisionType.getColorFilter());
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return (lowVisionType);
-    }
+	public LowVisionType getLowVisionType() {
+		// LowVisionType lowVisionType = new LowVisionType();
+		try {
+			lowVisionType.setEyesight(oEyeSight);
+			if (oEyeSight) {
+				float fEyeSight = iCurEyeSightValue / 100.0f;
+				/*
+				 * float fEye = 0.1f; if (fEyeSight < 0.075f) fEye = 0.05f; else
+				 * if (fEyeSight > 0.15f) fEye = 0.2f;
+				 */
+				// System.out.println(fEyeSight);
+				lowVisionType.setEyesightDegree(fEyeSight);
+			}
 
-    public Object clone() {
-        ParamLowVision tmpParam = new ParamLowVision();
-        tmpParam.setColorFilterValue(iCurColorFilterValue);
-        tmpParam.setColorVisionValue(iCurColorVisionValue);
-        tmpParam.setEyeSightValue(iCurEyeSightValue);
-        tmpParam.setColorFilter(oColorFilter);
-        tmpParam.setColorVision(oColorVision);
-        tmpParam.setEyeSight(oEyeSight);
+			lowVisionType.setCVD(oColorVision);
+			if (oColorVision) {
+				lowVisionType.setCVDType(iCurColorVisionValue);
+			}
 
-        return (tmpParam);
-    }
+			lowVisionType.setColorFilter(oColorFilter);
+			if (oColorFilter) {
+				lowVisionType
+						.setColorFilterDegree(iCurColorFilterValue / 100.0f);
+			}
+			// debug
+			// DebugUtil.outMsg( this, "eyesight = " +
+			// lowVisionType.getEyesight() + "\nCVD = " + lowVisionType.getCVD()
+			// + "\nfileter = " + lowVisionType.getColorFilter());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return (lowVisionType);
+	}
 
-    /**
-     * @return
-     */
-    public int getColorFilterValue() {
-        return iCurColorFilterValue;
-    }
+	public Object clone() {
+		ParamLowVision tmpParam = new ParamLowVision();
+		tmpParam.setColorFilterValue(iCurColorFilterValue);
+		tmpParam.setColorVisionValue(iCurColorVisionValue);
+		tmpParam.setEyeSightValue(iCurEyeSightValue);
+		tmpParam.setColorFilter(oColorFilter);
+		tmpParam.setColorVision(oColorVision);
+		tmpParam.setEyeSight(oEyeSight);
 
-    /**
-     * @return
-     */
-    public int getColorVisionValue() {
-        return iCurColorVisionValue;
-    }
+		return (tmpParam);
+	}
 
-    /**
-     * @return
-     */
-    public int getEyeSightValue() {
-        return iCurEyeSightValue;
-    }
+	/**
+	 * @return
+	 */
+	public int getColorFilterValue() {
+		return iCurColorFilterValue;
+	}
 
-    /**
-     * @return
-     */
-    public boolean useColorFilter() {
-        return oColorFilter;
-    }
+	/**
+	 * @return
+	 */
+	public int getColorVisionValue() {
+		return iCurColorVisionValue;
+	}
 
-    /**
-     * @return
-     */
-    public boolean useColorVision() {
-        return oColorVision;
-    }
+	/**
+	 * @return
+	 */
+	public int getEyeSightValue() {
+		return iCurEyeSightValue;
+	}
 
-    /**
-     * @return
-     */
-    public boolean useEyeSight() {
-        return oEyeSight;
-    }
+	/**
+	 * @return
+	 */
+	public boolean useColorFilter() {
+		return oColorFilter;
+	}
 
-    /**
-     * @param i
-     */
-    public void setColorFilterValue(int i) {
-        iCurColorFilterValue = i;
-    }
+	/**
+	 * @return
+	 */
+	public boolean useColorVision() {
+		return oColorVision;
+	}
 
-    /**
-     * @param i
-     */
-    public void setColorVisionValue(int i) {
-        iCurColorVisionValue = i;
-    }
+	/**
+	 * @return
+	 */
+	public boolean useEyeSight() {
+		return oEyeSight;
+	}
 
-    /**
-     * @param i
-     */
-    public void setEyeSightValue(int i) {
-        iCurEyeSightValue = i;
-    }
+	/**
+	 * @param i
+	 */
+	public void setColorFilterValue(int i) {
+		iCurColorFilterValue = i;
+	}
 
-    /**
-     * @param b
-     */
-    public void setColorFilter(boolean b) {
-        oColorFilter = b;
-    }
+	/**
+	 * @param i
+	 */
+	public void setColorVisionValue(int i) {
+		iCurColorVisionValue = i;
+	}
 
-    /**
-     * @param b
-     */
-    public void setColorVision(boolean b) {
-        oColorVision = b;
-    }
+	/**
+	 * @param i
+	 */
+	public void setEyeSightValue(int i) {
+		iCurEyeSightValue = i;
+	}
 
-    /**
-     * @param b
-     */
-    public void setEyeSight(boolean b) {
-        oEyeSight = b;
-    }
+	/**
+	 * @param b
+	 */
+	public void setColorFilter(boolean b) {
+		oColorFilter = b;
+	}
 
-    public String toString() {
-        StringBuffer result = new StringBuffer(" "); //$NON-NLS-1$
+	/**
+	 * @param b
+	 */
+	public void setColorVision(boolean b) {
+		oColorVision = b;
+	}
 
-        if (useEyeSight()) {
-            result.append(Messages.ParamLowVision_1+" " + (getEyeSightValue() / 100.0f) + "  "); 
-        }
+	/**
+	 * @param b
+	 */
+	public void setEyeSight(boolean b) {
+		oEyeSight = b;
+	}
 
-        if (useColorVision()) {
-            result.append(Messages.ParamLowVision_4+" " + getColorVisionValue() + "  "); 
-        }
+	@SuppressWarnings("nls")
+	public String toString() {
+		StringBuffer result = new StringBuffer(" "); //$NON-NLS-1$
 
-        if (useColorFilter()) {
-            result.append(Messages.ParamLowVision_7+" " + (getColorFilterValue() / 100.0f) + "  "); 
-        }
+		if (useEyeSight()) {
+			result.append(Messages.ParamLowVision_1 + " "
+					+ (getEyeSightValue() / 100.0f) + "  ");
+		}
 
-        return result.toString();
-    }
+		if (useColorVision()) {
+			result.append(Messages.ParamLowVision_4 + " "
+					+ getColorVisionValue() + "  ");
+		}
+
+		if (useColorFilter()) {
+			result.append(Messages.ParamLowVision_7 + " "
+					+ (getColorFilterValue() / 100.0f) + "  ");
+		}
+
+		return result.toString();
+	}
 
 }
diff --git a/plugins/org.eclipse.actf.visualization.presentation/META-INF/MANIFEST.MF b/plugins/org.eclipse.actf.visualization.presentation/META-INF/MANIFEST.MF
index 6a8df75..5323502 100644
--- a/plugins/org.eclipse.actf.visualization.presentation/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.actf.visualization.presentation/META-INF/MANIFEST.MF
@@ -12,6 +12,6 @@
  org.eclipse.actf.visualization.engines.lowvision,
  org.eclipse.actf.visualization.eval,
  org.eclipse.actf.visualization.ui.report
-Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.actf.visualization.presentation
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/eval/CheckResultPresentation.java b/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/eval/CheckResultPresentation.java
index 416467b..81a6f4f 100644
--- a/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/eval/CheckResultPresentation.java
+++ b/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/eval/CheckResultPresentation.java
@@ -18,8 +18,8 @@
 
     //serial number
 	
-    public CheckResultPresentation() {
-        setSummaryReportUrl("about:blank");
+	public CheckResultPresentation() {
+        setSummaryReportUrl("about:blank"); //$NON-NLS-1$
         setShowAllGuidelineItems(true);
     }
     
diff --git a/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/internal/RoomPlugin.java b/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/internal/RoomPlugin.java
index 8dacc64..b3cb4c5 100644
--- a/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/internal/RoomPlugin.java
+++ b/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/internal/RoomPlugin.java
@@ -27,7 +27,7 @@
  */
 public class RoomPlugin extends AbstractUIPlugin {
 
-	public static String PLUGIN_ID = "org.eclipse.actf.visualization.presentation";
+	public static String PLUGIN_ID = "org.eclipse.actf.visualization.presentation"; //$NON-NLS-1$
 
 	// The shared instance.
 	private static RoomPlugin _plugin;
@@ -46,6 +46,7 @@
 	/**
 	 * This method is called upon plug-in activation
 	 */
+	@SuppressWarnings("nls")
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
 		_context = context;
@@ -131,7 +132,7 @@
 			return new Path(url.getPath()).makeAbsolute().toOSString();
 		} catch (IOException ioe) {
 			ioe.printStackTrace();
-			return "";
+			return ""; //$NON-NLS-1$
 		}
 	}
 
@@ -139,13 +140,13 @@
 		if (tmpDir != null) {
 			return (tmpDir.getAbsolutePath() + File.separator);
 		}
-		return "";
+		return ""; //$NON-NLS-1$
 	}
 
 	private static void createTempDirectory() {
 		if (tmpDir == null) {
 			String tmpS = _plugin.getStateLocation().toOSString()
-					+ File.separator + "tmp";
+					+ File.separator + "tmp"; //$NON-NLS-1$
 			if (FileUtils.isAvailableDirectory(tmpS)) {
 				tmpDir = new File(tmpS);
 			}
diff --git a/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/ui/actions/SmallRoomSimulateAction.java b/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/ui/actions/SmallRoomSimulateAction.java
index 6ee2e3e..f8ae8c6 100644
--- a/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/ui/actions/SmallRoomSimulateAction.java
+++ b/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/ui/actions/SmallRoomSimulateAction.java
@@ -22,7 +22,7 @@
 	public SmallRoomSimulateAction() {
 		setToolTipText(Messages.RoomSimulationAction_Small); 
 		setImageDescriptor(RoomPlugin
-				.getImageDescriptor("icons/ButtonSmall.gif"));
+				.getImageDescriptor("icons/ButtonSmall.gif")); //$NON-NLS-1$
 		setText(Messages.RoomSimulationAction_Small); 
 	}
 
diff --git a/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/ui/internal/PartControlRoom.java b/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/ui/internal/PartControlRoom.java
index 4264a12..c6897c8 100644
--- a/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/ui/internal/PartControlRoom.java
+++ b/plugins/org.eclipse.actf.visualization.presentation/src/org/eclipse/actf/visualization/presentation/ui/internal/PartControlRoom.java
@@ -157,7 +157,7 @@
 			e.printStackTrace();
 		}
 
-		String html = "";
+		String html = ""; //$NON-NLS-1$
 		switch (paramRoom.getType()) {
 		case ParamRoom.ROOM_SMALL:
 			html = Messages.report_small_url;
@@ -170,10 +170,10 @@
 			break;
 		}
 
-		checkResult.setSummaryReportUrl(RoomPlugin.getTempDirectory() + "html"
+		checkResult.setSummaryReportUrl(RoomPlugin.getTempDirectory() + "html" //$NON-NLS-1$
 				+ File.separator + html);
 		// TODO
-		checkResult.setSummaryReportText("");
+		checkResult.setSummaryReportText(""); //$NON-NLS-1$
 		Mediator.getInstance().setReport(checker, checkResult);
 
 		checker
