diff --git a/plugins/org.eclipse.actf.visualization.blind.html/src/org/eclipse/actf/visualization/blind/html/BlindVisualizerHtml.java b/plugins/org.eclipse.actf.visualization.blind.html/src/org/eclipse/actf/visualization/blind/html/BlindVisualizerHtml.java
index 1377c02..265013d 100644
--- a/plugins/org.eclipse.actf.visualization.blind.html/src/org/eclipse/actf/visualization/blind/html/BlindVisualizerHtml.java
+++ b/plugins/org.eclipse.actf.visualization.blind.html/src/org/eclipse/actf/visualization/blind/html/BlindVisualizerHtml.java
@@ -97,7 +97,7 @@
 		File srcFile;
 		File liveFile;
 		File targetFile;
-		
+
 		boolean isHTML5 = false;
 
 		try {
@@ -158,9 +158,9 @@
 
 				targetFile = srcFile;
 			}
-			
+
 			isHTML5 = DocumentTypeUtil.isOriginalHTML5(originalDocument.getDoctype());
-			
+
 			if (PERFORMANCE_DEBUG)
 				System.out.println("parse documents\t" + (new Date()).getTime()); //$NON-NLS-1$
 
@@ -331,14 +331,27 @@
 			try {
 				Element[] iframes = getElementsArray(ieDom, "iframe"); //$NON-NLS-1$
 				HashSet<String> urlS = new HashSet<String>();
+				HashSet<Element> srcLessIframe = new HashSet<Element>();
 				if (iframes.length > 0) {
 					for (Element e : iframes) {
 						String src = e.getAttribute("src"); //$NON-NLS-1$
-						if (src != null) {
-							if (src.startsWith("http")) { //$NON-NLS-1$
-								urlS.add(src);
-							} else {
-								System.err.println(src);
+						if (src != null && src.startsWith("http")) { //$NON-NLS-1$
+							urlS.add(src);
+						} else {
+							srcLessIframe.add(e);
+						}
+					}
+					for (Element e : srcLessIframe) {
+						NodeList nl = e.getChildNodes();
+						if (nl.getLength() > 0 && nl.item(0).getNodeName().equalsIgnoreCase("html")) {
+							try {
+								File iframeDump = BlindVizResourceUtil.createTempFile("IFRAME",
+										IVisualizationConst.SUFFIX_HTML);
+								DomPrintUtil dpu = new DomPrintUtil(e);
+								dpu.setHTML5(true);
+								dpu.writeToFile(iframeDump);
+								urlS.add(iframeDump.toURI().toURL().toString());
+							} catch (Exception e4) {
 							}
 						}
 					}
@@ -346,8 +359,14 @@
 							Messages.BlindVisualizerHtml_15, Messages.BlindVisualizerHtml_16)) {
 						IEditorPart currentE = PlatformUIUtil.getActiveEditor();
 						for (String s : urlS) {
-							System.out.println(s);
-							ModelServiceUtils.launch(s);
+							final String ss = s;
+							PlatformUIUtil.getShell().getDisplay().asyncExec(new Runnable() {
+								public void run() {
+									IEditorPart iep = ModelServiceUtils.launch(ss);
+									PlatformUIUtil.getActivePage().activate(iep);									
+									iep.setFocus();
+								}
+							});
 						}
 						PlatformUIUtil.getActivePage().activate(currentE);
 					}
@@ -368,7 +387,11 @@
 			}
 			return OK;
 
-		} catch (Exception e) {
+		} catch (
+
+		Exception e)
+
+		{
 			setStatusMessage(Messages.Visualization_Error);
 			e.printStackTrace();
 			return ERROR;
