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 bf10152..c4d03ee 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
@@ -378,7 +378,6 @@
 					for(int j = 0; j < tmpNL2.getLength(); j++){
 						Element e2 = (Element) tmpNL2.item(j);
 						String id = e2.getAttribute("id");
-						System.out.println(listS+" : "+id);
 						if(id!=null && id.equals(listS)){
 							Node tmpN = mapData.getResultNode(e2);
 							if(tmpN!=null && tmpN instanceof Element){
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 96e1dbe..7145fdd 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
@@ -85,11 +85,15 @@
 			return true;
 		} else if (tagName.equals("input")) {
 			String type = el.getAttribute("type").toLowerCase();
-			if ((type.length() == 0) | type.equals("text") | type.equals("textarea") | type.equals("radio")
-					| type.equals("checkbox")) {
+			if (type.equals("submit") || type.equals("reset") || type.equals("hidden") || type.equals("image")) {
+				//TODO update by using techniques (only hidden state is not labelable in HTML5)
+				return false;
+			} else {
 				return true;
 			}
 		}
+		//TODO update by using techniques 
+		//keygen, meter, output, progress
 		return false;
 	}
 
@@ -227,10 +231,10 @@
 					} else if (nodeName.equals("label")) {
 						info.setLabel(true);
 						info.appendComment("Label for '" + ((Element) curNode).getAttribute("for") + "'. ");
-					} else if (nodeName.contains("caption")){
+					} else if (nodeName.contains("caption")) {
 						info.setCaption(true);
 						info.appendComment(curNode.getNodeName());
-					} else if (nodeName.equals("mark")){
+					} else if (nodeName.equals("mark")) {
 						info.appendComment("mark");
 					}
 
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/VisualizeColorUtil.java b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/VisualizeColorUtil.java
index dcc9928..d2e8b4d 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/VisualizeColorUtil.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/VisualizeColorUtil.java
@@ -143,16 +143,16 @@
 			String inputRGB = getRGBString(param.inputTagsColor, "#FF9900");
 			String captionRGB = getRGBString(param.captionColor, "#FFFF80");
 
-			if (param.bColorizeTags && (info.isHeading() | info.isTableHeader() | info.isLabel()
-					| info.isIdRequiredInput() | info.isCaption())) {
+			if (param.bColorizeTags && (info.isHeading() || info.isTableHeader() || info.isLabel()
+					|| info.isIdRequiredInput() || info.isCaption())) {
 				if (info.isHeading()) {
 					strRGB = headingRGB;
 				} else if (info.isTableHeader()) {
 					strRGB = thRGB;
-				} else if (info.isLabel()) {
-					strRGB = labelRGB;
 				} else if (info.isIdRequiredInput()) {
 					strRGB = inputRGB;
+				} else if (info.isLabel()) {
+					strRGB = labelRGB;
 				} else if (info.isCaption()) {
 					strRGB = captionRGB;
 				}
@@ -177,7 +177,7 @@
 				}
 
 				if (param.bVisualizeTime == true) {
-					if ("mark".equals(el.getTagName())||HtmlTagUtil.hasAncestor(el, "mark")) {
+					if ("mark".equals(el.getTagName()) || HtmlTagUtil.hasAncestor(el, "mark")) {
 						el.setAttribute("style", "color: black; background-image: none;");
 					} else {
 						el.setAttribute("style", "color: black; background-image: none; background-color: #"
diff --git a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/DomUtil.java b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/DomUtil.java
index 2ff4be5..cdad86e 100644
--- a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/DomUtil.java
+++ b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/DomUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and Others
+ * Copyright (c) 2003, 2016 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
@@ -34,6 +34,7 @@
 
 	/**
 	 * Method recursiveWalk.
+	 * 
 	 * @param node
 	 * @param num
 	 */
@@ -41,9 +42,7 @@
 		getNodeInfo(node, num);
 		tab++;
 		cnt = 0;
-		for (Node child = node.getFirstChild();
-			child != null;
-			child = child.getNextSibling(), cnt++) {
+		for (Node child = node.getFirstChild(); child != null; child = child.getNextSibling(), cnt++) {
 			recursiveWalk(child, cnt);
 		}
 		tab--;
@@ -51,6 +50,7 @@
 
 	/**
 	 * Method getString.
+	 * 
 	 * @param node
 	 * @return String
 	 */
@@ -64,6 +64,7 @@
 
 	/**
 	 * Method getNodeInfo.
+	 * 
 	 * @param node
 	 * @param num
 	 */
@@ -82,12 +83,10 @@
 				str += ">";
 				System.out.println(str);
 			} else {
-				System.out.println(
-					"<" + nodeName + ":" + node.getNodeValue() + ">");
+				System.out.println("<" + nodeName + ":" + node.getNodeValue() + ">");
 			}
 		} else {
-			System.out.println(
-				"<" + nodeName + ":" + node.getNodeValue() + ">");
+			System.out.println("<" + nodeName + ":" + node.getNodeValue() + ">");
 		}
 	}
 
@@ -102,13 +101,13 @@
 
 	/**
 	 * Method isNameAttr.
+	 * 
 	 * @param node
 	 * @return boolean
 	 */
 	public static boolean isNameAttr(Node node) {
 		if (node != null) {
-			if (node.getNodeType() == Node.ELEMENT_NODE
-				&& node.getNodeName().toLowerCase().equals("a")) {
+			if (node.getNodeType() == Node.ELEMENT_NODE && node.getNodeName().toLowerCase().equals("a")) {
 				NamedNodeMap attrs = node.getAttributes();
 				Node altNode = attrs.getNamedItem("name");
 				if (altNode != null)
@@ -120,6 +119,7 @@
 
 	/**
 	 * Method dumpPC.
+	 * 
 	 * @param pc
 	 */
 	public static void dumpPC(PacketCollection pc) {
@@ -136,6 +136,7 @@
 
 	/**
 	 * Method setFormList.
+	 * 
 	 * @param node
 	 */
 	public static void setFormList(Node node) {
@@ -146,6 +147,7 @@
 
 	/**
 	 * Method getFormNum.
+	 * 
 	 * @param element
 	 * @return int
 	 */
@@ -160,4 +162,47 @@
 		}
 		return 0;
 	}
+
+	/**
+	 * Get ancestor node whose name is specified target name
+	 * 
+	 * @param target
+	 *            target {@link Node}
+	 * @param ancestorName
+	 *            target ancestor tag name
+	 * @return target ancestor {@link Node} or null
+	 */
+	public static Node getAncestor(Node target, String ancestorName) {
+		Node tmpNode = target;
+		while (tmpNode != null) {
+			if (tmpNode.getNodeName().equals(ancestorName)) {
+				return tmpNode;
+			}
+			tmpNode = tmpNode.getParentNode();
+		}
+		return null;
+	}
+	
+	
+	
+	public static boolean isDisabled(Element target){
+		if(target.hasAttribute("disabled")){
+			String disabled = target.getAttribute("disabled");
+			if (!"false".equals(disabled)) {
+				return true;
+			}			
+		}
+		Node tmpN = DomUtil.getAncestor(target, "fieldset");
+		if (null != tmpN && tmpN instanceof Element) {
+			Element fieldset = (Element) tmpN;
+			if (fieldset.hasAttribute("disabled")) {
+				String disabled = ((Element) fieldset).getAttribute("disabled");
+				if (!"false".equals(disabled)) {
+					return true;
+				}
+			}
+		}		
+		return false;
+	}
+
 }
diff --git a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/JWATCore.java b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/JWATCore.java
index a8176f4..5a4cf19 100644
--- a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/JWATCore.java
+++ b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/JWATCore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and Others
+ * Copyright (c) 2003, 2016 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
@@ -240,6 +240,7 @@
 		elementMap.put("form", new StaticFORMRenderer());
 		elementMap.put("select", new StaticSELECTRenderer());
 		elementMap.put("input", new StaticINPUTRenderer());
+		elementMap.put("button", new StaticBUTTONRenderer());
 		elementMap.put("br", new StaticBRRenderer());
 		elementMap.put("table", new StaticTABLERenderer());
 		elementMap.put("area", new StaticAREARenderer());
diff --git a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticBUTTONRenderer.java b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticBUTTONRenderer.java
new file mode 100644
index 0000000..43b242d
--- /dev/null
+++ b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticBUTTONRenderer.java
@@ -0,0 +1,188 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2016 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:
+ *    Masahide WASHIZAWA - initial API and implementation
+ *    Kentarou Fukuda - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.actf.visualization.internal.engines.voicebrowser;
+
+import org.eclipse.actf.visualization.engines.voicebrowser.IVoiceBrowserController;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+
+@SuppressWarnings("nls")
+public class StaticBUTTONRenderer implements IElementRenderer {
+
+	/**
+	 * @see org.eclipse.actf.visualization.internal.engines.voicebrowser.IElementRenderer#getPacketCollectionIn(Element,
+	 *      Context)
+	 */
+	// @SuppressWarnings("nls")
+	public PacketCollection getPacketCollectionIn(Element element, Context curContext, String url,
+			MessageCollection mc) {
+		try {
+			setContextIn(element, curContext);
+			NamedNodeMap attrs = element.getAttributes();
+
+			String type = null, result = null;
+			Node typeNode = attrs.getNamedItem("type");
+			if (typeNode != null) {
+				type = typeNode.getNodeValue();
+				if (type.length() > 0) {
+					if (type.equals("submit")) {
+						result = inputTypeSubmit(element, attrs, mc, url);
+					} else if (type.equals("reset")) {
+						result = inputTypeReset(element, attrs, mc, url);
+					} else if (type.equals("button")) {
+						result = inputTypeButton(element, attrs, mc, url);
+					}
+					// other??
+				}
+			} else {
+				result = inputTypeButton(element, attrs, mc, url);
+			}
+			if (OutLoud.jwat_mode == IVoiceBrowserController.SCREEN_READER_MODE) {
+				curContext.setLineDelimiter(true);
+				curContext.setStartSelect(true);
+			}
+			if (result != null) {
+				result = result.trim();
+
+				if (DomUtil.isDisabled(element)) {
+					result = "(disabled)" + result;
+				}
+
+				return new PacketCollection(new Packet(element, result, curContext, true));
+			} else {
+				return null;
+			}
+		} catch (NullPointerException npe) {
+			return null;
+		}
+	}
+
+	/**
+	 * Method inputTypeSubmit.
+	 * 
+	 * @param nodeName
+	 * @param attrs
+	 * @param mc
+	 * @return String
+	 */
+	private String inputTypeSubmit(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
+		String result = null;
+		String value = null;
+		Node valueNode = attrs.getNamedItem("VALUE");
+		if (valueNode != null)
+			value = valueNode.getNodeValue();
+		if (value != null && value.length() > 0) {
+			result = OutLoud.buildResultString(mc, url, element, "submit", "hasstr", "name=str1", value);
+			if (result == null)
+				result = "[" + value + ": Submit button.]";
+		} else {
+			result = OutLoud.buildResultString(mc, url, element, "submit", "nostr");
+			if (result == null)
+				result = "[Submit button.]";
+		}
+		return result;
+	}
+
+	/**
+	 * Method inputTypeReset.
+	 * 
+	 * @param nodeName
+	 * @param attrs
+	 * @param mc
+	 * @return String
+	 */
+	private String inputTypeReset(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
+		String result = null;
+		String value = null;
+		Node valueNode = attrs.getNamedItem("VALUE");
+		if (valueNode != null)
+			value = valueNode.getNodeValue();
+		if (value != null && value.length() > 0) {
+			result = OutLoud.buildResultString(mc, url, element, "reset", "hasstr", "name=str1", value);
+			if (result == null)
+				result = "[" + value + ": Reset button.]";
+		} else {
+			result = OutLoud.buildResultString(mc, url, element, "reset", "nostr");
+			if (result == null)
+				result = "[Reset button.]";
+		}
+		return result;
+	}
+
+	/**
+	 * Method inputTypeButton.
+	 * 
+	 * @param nodeName
+	 * @param attrs
+	 * @param mc
+	 * @return String
+	 */
+	private String inputTypeButton(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
+		String result = null;
+		String value = null;
+		Node valueNode = attrs.getNamedItem("VALUE");
+		if (valueNode != null)
+			value = valueNode.getNodeValue();
+		if (value != null && value.length() > 0) {
+			result = OutLoud.buildResultString(mc, url, element, "button", "hasstr", "name=str1", value);
+			if (result == null)
+				result = "[" + value + ": Button.]";
+		} else {
+			result = OutLoud.buildResultString(mc, url, element, "button", "nostr");
+			if (result == null)
+				result = "[Button.]";
+		}
+		return result;
+	}
+
+	/**
+	 * @see org.eclipse.actf.visualization.internal.engines.voicebrowser.IElementRenderer#getPacketCollectionOut(Element,
+	 *      Context)
+	 */
+	public PacketCollection getPacketCollectionOut(Element element, Context curContext, String url,
+			MessageCollection mc) {
+		setContextOut(element, curContext);
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.actf.visualization.internal.engines.voicebrowser.IElementRenderer#setContextIn(Context)
+	 */
+	public void setContextIn(Element element, Context curContext) {
+		curContext.setGoChild(true);
+		/*
+		 * try { NamedNodeMap attrs = element.getAttributes();
+		 * 
+		 * String type = null; Node typeNode = attrs.getNamedItem("type");
+		 * //$NON-NLS-1$ if (typeNode != null) { type = typeNode.getNodeValue();
+		 * if (type.length() > 0) { if (type.equals("submit") ||
+		 * type.equals("reset")) { //$NON-NLS-1$ //$NON-NLS-2$
+		 * curContext.setLineDelimiter(true); } else {
+		 * curContext.setLineDelimiter(false); } } else {
+		 * curContext.setLineDelimiter(false); } } else {
+		 * curContext.setLineDelimiter(false); } } catch (NullPointerException
+		 * npe) { npe.printStackTrace(); }
+		 */
+		curContext.setLineDelimiter(false);
+		curContext.setLinkTag(true);
+	}
+
+	/**
+	 * @see org.eclipse.actf.visualization.internal.engines.voicebrowser.IElementRenderer#setContextOut(Context)
+	 */
+	public void setContextOut(Element element, Context curContext) {
+		curContext.setGoChild(true);
+		curContext.setLineDelimiter(true);
+		curContext.setLinkTag(false);
+	}
+}
diff --git a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticINPUTRenderer.java b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticINPUTRenderer.java
index 2aec773..cd25f46 100644
--- a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticINPUTRenderer.java
+++ b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticINPUTRenderer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and Others
+ * Copyright (c) 2003, 2016 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
@@ -22,9 +22,9 @@
 	 * @see org.eclipse.actf.visualization.internal.engines.voicebrowser.IElementRenderer#getPacketCollectionIn(Element,
 	 *      Context)
 	 */
-	//@SuppressWarnings("nls")
-	public PacketCollection getPacketCollectionIn(Element element,
-			Context curContext, String url, MessageCollection mc) {
+	// @SuppressWarnings("nls")
+	public PacketCollection getPacketCollectionIn(Element element, Context curContext, String url,
+			MessageCollection mc) {
 		try {
 			setContextIn(element, curContext);
 			NamedNodeMap attrs = element.getAttributes();
@@ -54,7 +54,17 @@
 						result = inputTypeFile(element, attrs, mc, url);
 					} else if (type.equals("hidden")) {
 						result = inputTypeHidden(element, attrs, mc, url);
+					} else if (type.equals("range")) {
+						result = inputTypeRange(element, attrs, mc, url);
+					} else if (type.equals("tel") || type.equals("search") || type.equals("url") || type.equals("email")
+							|| type.equals("number")) {
+						// temp for (supported) tel, search, url, email, number,
+						result = inputTypeOther(element, attrs, mc, url, type);
+					} else if (type.equals("date") || type.equals("time") || type.equals("color")) {
+						// temp for (not supported) date, time, color
+						result = inputTypeText(element, attrs, mc, url);
 					}
+					// other??
 				}
 			} else {
 				result = inputTypeText(element, attrs, mc, url);
@@ -65,8 +75,12 @@
 			}
 			if (result != null) {
 				result = result.trim();
-				return new PacketCollection(new Packet(element, result,
-						curContext, true));
+
+				if(DomUtil.isDisabled(element)){
+					result = "(disabled)"+result;
+				}
+
+				return new PacketCollection(new Packet(element, result, curContext, true));
 			} else {
 				return null;
 			}
@@ -83,16 +97,14 @@
 	 * @param mc
 	 * @return String
 	 */
-	private String inputTypeImage(Element element, NamedNodeMap attrs,
-			MessageCollection mc, String url) {
+	private String inputTypeImage(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
 		String result = null;
 		String value = null;
 		Node valueNode = attrs.getNamedItem("alt");
 		if (valueNode != null) {
 			value = valueNode.getNodeValue();
 			if (value != null && value.length() > 0) {
-				result = OutLoud.buildResultString(mc, url, element, "image",
-						"hasstr", "name=str1", value);
+				result = OutLoud.buildResultString(mc, url, element, "image", "hasstr", "name=str1", value);
 				if (result == null)
 					result = "[" + value + ": Image button.]";
 			}
@@ -116,13 +128,11 @@
 				}
 			}
 			if (value != null && value.length() > 0) {
-				result = OutLoud.buildResultString(mc, url, element, "image",
-						"hasstr", "name=str", value);
+				result = OutLoud.buildResultString(mc, url, element, "image", "hasstr", "name=str", value);
 				if (result == null)
 					result = "[" + value + ": Image button.]";
 			} else {
-				result = OutLoud.buildResultString(mc, url, element, "image",
-						"nostr");
+				result = OutLoud.buildResultString(mc, url, element, "image", "nostr");
 				if (result == null)
 					result = "[Image button.]";
 			}
@@ -138,16 +148,31 @@
 	 * @param mc
 	 * @return String
 	 */
-	private String inputTypeText(Element element, NamedNodeMap attrs,
-			MessageCollection mc, String url) {
-		String result = OutLoud.buildResultString(mc, url, element, "text",
-				null);
+	private String inputTypeText(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
+		String result = OutLoud.buildResultString(mc, url, element, "text", null);
 		if (result == null)
 			result = "[Text.]";
 		return result;
 	}
 
 	/**
+	 * Method inputTypeOther.
+	 * 
+	 * @param nodeName
+	 * @param attrs
+	 * @param mc
+	 * @return String
+	 */
+	private String inputTypeOther(Element element, NamedNodeMap attrs, MessageCollection mc, String url, String type) {
+		// String result = OutLoud.buildResultString(mc, url, element, "text",
+		// null);
+		String result = null;
+		if (result == null)
+			result = "[" + type + ".]";
+		return result;
+	}
+
+	/**
 	 * Method inputTypeSubmit.
 	 * 
 	 * @param nodeName
@@ -155,21 +180,18 @@
 	 * @param mc
 	 * @return String
 	 */
-	private String inputTypeSubmit(Element element, NamedNodeMap attrs,
-			MessageCollection mc, String url) {
+	private String inputTypeSubmit(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
 		String result = null;
 		String value = null;
 		Node valueNode = attrs.getNamedItem("VALUE");
 		if (valueNode != null)
 			value = valueNode.getNodeValue();
 		if (value != null && value.length() > 0) {
-			result = OutLoud.buildResultString(mc, url, element, "submit",
-					"hasstr", "name=str1", value);
+			result = OutLoud.buildResultString(mc, url, element, "submit", "hasstr", "name=str1", value);
 			if (result == null)
 				result = "[" + value + ": Submit button.]";
 		} else {
-			result = OutLoud.buildResultString(mc, url, element, "submit",
-					"nostr");
+			result = OutLoud.buildResultString(mc, url, element, "submit", "nostr");
 			if (result == null)
 				result = "[Submit button.]";
 		}
@@ -184,21 +206,18 @@
 	 * @param mc
 	 * @return String
 	 */
-	private String inputTypeReset(Element element, NamedNodeMap attrs,
-			MessageCollection mc, String url) {
+	private String inputTypeReset(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
 		String result = null;
 		String value = null;
 		Node valueNode = attrs.getNamedItem("VALUE");
 		if (valueNode != null)
 			value = valueNode.getNodeValue();
 		if (value != null && value.length() > 0) {
-			result = OutLoud.buildResultString(mc, url, element, "reset",
-					"hasstr", "name=str1", value);
+			result = OutLoud.buildResultString(mc, url, element, "reset", "hasstr", "name=str1", value);
 			if (result == null)
 				result = "[" + value + ": Reset button.]";
 		} else {
-			result = OutLoud.buildResultString(mc, url, element, "reset",
-					"nostr");
+			result = OutLoud.buildResultString(mc, url, element, "reset", "nostr");
 			if (result == null)
 				result = "[Reset button.]";
 		}
@@ -213,21 +232,18 @@
 	 * @param mc
 	 * @return String
 	 */
-	private String inputTypeButton(Element element, NamedNodeMap attrs,
-			MessageCollection mc, String url) {
+	private String inputTypeButton(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
 		String result = null;
 		String value = null;
 		Node valueNode = attrs.getNamedItem("VALUE");
 		if (valueNode != null)
 			value = valueNode.getNodeValue();
 		if (value != null && value.length() > 0) {
-			result = OutLoud.buildResultString(mc, url, element, "button",
-					"hasstr", "name=str1", value);
+			result = OutLoud.buildResultString(mc, url, element, "button", "hasstr", "name=str1", value);
 			if (result == null)
 				result = "[" + value + ": Button.]";
 		} else {
-			result = OutLoud.buildResultString(mc, url, element, "button",
-					"nostr");
+			result = OutLoud.buildResultString(mc, url, element, "button", "nostr");
 			if (result == null)
 				result = "[Button.]";
 		}
@@ -242,10 +258,8 @@
 	 * @param mc
 	 * @return String
 	 */
-	private String inputTypePassword(Element element, NamedNodeMap attrs,
-			MessageCollection mc, String url) {
-		String result = OutLoud.buildResultString(mc, url, element, "password",
-				null);
+	private String inputTypePassword(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
+		String result = OutLoud.buildResultString(mc, url, element, "password", null);
 		if (result == null)
 			result = "[Password.]";
 		return result;
@@ -259,18 +273,15 @@
 	 * @param mc
 	 * @return String
 	 */
-	private String inputTypeCheckbox(Element element, NamedNodeMap attrs,
-			MessageCollection mc, String url) {
+	private String inputTypeCheckbox(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
 		String result = null;
 		Node cnode = attrs.getNamedItem("checked");
 		if (cnode == null) {
-			result = OutLoud.buildResultString(mc, url, element, "checkbox",
-					"off");
+			result = OutLoud.buildResultString(mc, url, element, "checkbox", "off");
 			if (result == null)
 				result = "[Not Checked.]";
 		} else {
-			result = OutLoud.buildResultString(mc, url, element, "checkbox",
-					"on");
+			result = OutLoud.buildResultString(mc, url, element, "checkbox", "on");
 			if (result == null)
 				result = "[Checked.]";
 		}
@@ -285,13 +296,11 @@
 	 * @param mc
 	 * @return String
 	 */
-	private String inputTypeRadio(Element element, NamedNodeMap attrs,
-			MessageCollection mc, String url) {
+	private String inputTypeRadio(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
 		String result = null;
 		Node cnode = attrs.getNamedItem("checked");
 		if (cnode == null) {
-			result = OutLoud
-					.buildResultString(mc, url, element, "radio", "off");
+			result = OutLoud.buildResultString(mc, url, element, "radio", "off");
 			if (result == null)
 				result = "[Not Pressed.]";
 		} else {
@@ -310,10 +319,8 @@
 	 * @param mc
 	 * @return String
 	 */
-	private String inputTypeFile(Element element, NamedNodeMap attrs,
-			MessageCollection mc, String url) {
-		String result = OutLoud.buildResultString(mc, url, element, "file",
-				null);
+	private String inputTypeFile(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
+		String result = OutLoud.buildResultString(mc, url, element, "file", null);
 		if (result == null)
 			result = "[Browse button.]";
 		return result;
@@ -327,17 +334,44 @@
 	 * @param mc
 	 * @return String
 	 */
-	private String inputTypeHidden(Element element, NamedNodeMap attrs,
-			MessageCollection mc, String url) {
+	private String inputTypeHidden(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
 		return null;
 	}
 
 	/**
+	 * Method inputTypeRange.
+	 * 
+	 * @param nodeName
+	 * @param attrs
+	 * @param mc
+	 * @return String
+	 */
+	private String inputTypeRange(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
+		String result = null;
+		String value = null;
+		Node valueNode = attrs.getNamedItem("VALUE");
+		if (valueNode != null)
+			value = valueNode.getNodeValue();
+		if (value != null && value.length() > 0) {
+			try {
+				double val = Double.parseDouble(value);
+				result = "[slider:" + val + "]";
+			} catch (Exception e) {
+
+			}
+		}
+		if (result == null) {
+			result = "[slider]";
+		}
+		return result;
+	}
+
+	/**
 	 * @see org.eclipse.actf.visualization.internal.engines.voicebrowser.IElementRenderer#getPacketCollectionOut(Element,
 	 *      Context)
 	 */
-	public PacketCollection getPacketCollectionOut(Element element,
-			Context curContext, String url, MessageCollection mc) {
+	public PacketCollection getPacketCollectionOut(Element element, Context curContext, String url,
+			MessageCollection mc) {
 		setContextOut(element, curContext);
 		return null;
 	}
@@ -355,7 +389,7 @@
 			if (typeNode != null) {
 				type = typeNode.getNodeValue();
 				if (type.length() > 0) {
-					if (type.equals("submit") || type.equals("reset")) { //$NON-NLS-1$  //$NON-NLS-2$
+					if (type.equals("submit") || type.equals("reset")) { //$NON-NLS-1$ //$NON-NLS-2$
 						curContext.setLineDelimiter(true);
 					} else {
 						curContext.setLineDelimiter(false);
diff --git a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticOPTIONRenderer.java b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticOPTIONRenderer.java
index 5aac736..2e281b5 100644
--- a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticOPTIONRenderer.java
+++ b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticOPTIONRenderer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and Others
+ * Copyright (c) 2003, 2016 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
@@ -79,6 +79,11 @@
 		}
 		if (result != null)
 			result = result.trim();
+		
+		if(DomUtil.isDisabled(element)){
+			result = "(disabled)"+result;
+		}
+
 		return new PacketCollection(
 			new Packet(element, result, curContext, true));
 	}
diff --git a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticSELECTRenderer.java b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticSELECTRenderer.java
index 5b7d8e2..c4dd74d 100644
--- a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticSELECTRenderer.java
+++ b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticSELECTRenderer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and Others
+ * Copyright (c) 2003, 2016 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
@@ -80,6 +80,11 @@
 		}
 		if (result != null)
 			result = result.trim();
+		
+		if(DomUtil.isDisabled(element)){
+			result = "(disabled)"+result;
+		}
+
 		return new PacketCollection(
 			new Packet(element, result, curContext, true));
 	}
diff --git a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticTEXTAREARenderer.java b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticTEXTAREARenderer.java
index 042b855..bd76668 100644
--- a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticTEXTAREARenderer.java
+++ b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticTEXTAREARenderer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and Others
+ * Copyright (c) 2003, 2016 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
@@ -10,20 +10,18 @@
  *******************************************************************************/
 package org.eclipse.actf.visualization.internal.engines.voicebrowser;
 
-import org.w3c.dom.*;
-
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
 
 public class StaticTEXTAREARenderer implements IElementRenderer {
 
 	/**
-	 * @see org.eclipse.actf.visualization.internal.engines.voicebrowser.IElementRenderer#getPacketCollectionIn(Element, Context)
+	 * @see org.eclipse.actf.visualization.internal.engines.voicebrowser.IElementRenderer#getPacketCollectionIn(Element,
+	 *      Context)
 	 */
 	@SuppressWarnings("nls")
-	public PacketCollection getPacketCollectionIn(
-		Element element,
-		Context curContext,
-		String url,
-		MessageCollection mc) {
+	public PacketCollection getPacketCollectionIn(Element element, Context curContext, String url,
+			MessageCollection mc) {
 
 		// set `context in' flags
 		setContextIn(element, curContext);
@@ -36,15 +34,7 @@
 			String nodeValue = node.getNodeValue();
 			nodeValue = nodeValue.trim();
 			if (nodeValue.length() > 0) {
-				result =
-					OutLoud.buildResultString(
-						mc,
-						url,
-						element,
-						null,
-						"hasstr",
-						"name=str1",
-						nodeValue);
+				result = OutLoud.buildResultString(mc, url, element, null, "hasstr", "name=str1", nodeValue);
 				if (result == null && OutLoud.hprDefltMsg)
 					result = "[TextArea: " + nodeValue + "]";
 			}
@@ -56,18 +46,20 @@
 		}
 		if (result != null)
 			result = result.trim();
-		return new PacketCollection(
-			new Packet(element, result, curContext, true));
+
+		if(DomUtil.isDisabled(element)){
+			result = "(disabled)"+result;
+		}
+
+		return new PacketCollection(new Packet(element, result, curContext, true));
 	}
 
 	/**
-	 * @see org.eclipse.actf.visualization.internal.engines.voicebrowser.IElementRenderer#getPacketCollectionOut(Element, Context)
+	 * @see org.eclipse.actf.visualization.internal.engines.voicebrowser.IElementRenderer#getPacketCollectionOut(Element,
+	 *      Context)
 	 */
-	public PacketCollection getPacketCollectionOut(
-		Element element,
-		Context curContext,
-		String url,
-		MessageCollection mc) {
+	public PacketCollection getPacketCollectionOut(Element element, Context curContext, String url,
+			MessageCollection mc) {
 		setContextOut(element, curContext);
 
 		return null;
@@ -87,8 +79,8 @@
 	 */
 	public void setContextOut(Element element, Context curContext) {
 		curContext.setGoChild(true);
-		//		curContext.setLineDelimiter(false);
-		//		curContext.setLinkTag(true);
+		// curContext.setLineDelimiter(false);
+		// curContext.setLinkTag(true);
 		curContext.setLineDelimiter(true);
 		curContext.setLinkTag(false);
 	}
