diff --git a/plugins/org.eclipse.actf.visualization.gui/schema/targetWindowData.exsd b/plugins/org.eclipse.actf.visualization.gui/schema/targetWindowData.exsd
index 1799d97..c81d073 100644
--- a/plugins/org.eclipse.actf.visualization.gui/schema/targetWindowData.exsd
+++ b/plugins/org.eclipse.actf.visualization.gui/schema/targetWindowData.exsd
@@ -6,7 +6,7 @@
          <meta.schema plugin="org.eclipse.actf.visualization.gui" id="targetWindowData" name="DataSource for Target Window"/>
       </appInfo>
       <documentation>
-         This extension point is used to add new ModelService for Target Window.
+         This extension point is used to add new Target Window for GUI Visualization.
       </documentation>
    </annotation>
 
@@ -85,7 +85,7 @@
          <meta.section type="apiInfo"/>
       </appInfo>
       <documentation>
-         The contributor need to extend &lt;samp&gt;TargetWindowDataProvider&lt;/samp&gt;. 
+         The contributor need to extend &lt;samp&gt;TargetWindowDataProvider&lt;/samp&gt;.
       </documentation>
    </annotation>
 
@@ -94,7 +94,7 @@
          <meta.section type="implementation"/>
       </appInfo>
       <documentation>
-         ACTF provides default implementation within the plugin (org.eclipse.actf.visualization.gui.internal.GuiTargetWindowDataProvider).
+         ACTF provides default implementation within the plugin (org.eclipse.actf.visualization.gui.internal.GuiTargetWindowDataProvider). 
 
 The example implementation is also available at &lt;samp&gt;org.eclipse.actf.examples.adesigner.extension.ADesignerTargetWindowDataProvider&lt;/samp&gt;
       </documentation>
diff --git a/plugins/org.eclipse.actf.visualization.gui/src/org/eclipse/actf/visualization/gui/GuiTargetWindowData.java b/plugins/org.eclipse.actf.visualization.gui/src/org/eclipse/actf/visualization/gui/GuiTargetWindowData.java
index 2976baa..bb336d6 100644
--- a/plugins/org.eclipse.actf.visualization.gui/src/org/eclipse/actf/visualization/gui/GuiTargetWindowData.java
+++ b/plugins/org.eclipse.actf.visualization.gui/src/org/eclipse/actf/visualization/gui/GuiTargetWindowData.java
@@ -24,182 +24,228 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 
-
-
-
+/**
+ * 
+ */
 public class GuiTargetWindowData implements IModelService {
 
-    private static final String categoryBrowser = Messages.getString("msaa.external_browsers"); //$NON-NLS-1$
-    private static final String categoryWindow = Messages.getString("msaa.external_windows"); //$NON-NLS-1$
-    private int hwnd;
-    private boolean isBrowser;
-    
-    private class DummyModelServiceHolder implements IModelServiceHolder{
+	private static final String categoryBrowser = Messages
+			.getString("msaa.external_browsers"); //$NON-NLS-1$
+	private static final String categoryWindow = Messages
+			.getString("msaa.external_windows"); //$NON-NLS-1$
+	private int hwnd;
+	private boolean isBrowser;
 
-    	private GuiTargetWindowData guiTarget;
-    	
+	private class DummyModelServiceHolder implements IModelServiceHolder {
+
+		private GuiTargetWindowData guiTarget;
+
 		public DummyModelServiceHolder(GuiTargetWindowData guiTarget) {
 			this.guiTarget = guiTarget;
 		}
-    	
-		/* (non-Javadoc)
+
+		/*
+		 * (non-Javadoc)
+		 * 
 		 * @see org.eclipse.actf.model.IModelServiceHolder#getEditorPart()
 		 */
 		public IEditorPart getEditorPart() {
 			return null;
 		}
 
-		/* (non-Javadoc)
+		/*
+		 * (non-Javadoc)
+		 * 
 		 * @see org.eclipse.actf.model.IModelServiceHolder#getModelService()
 		 */
 		public IModelService getModelService() {
 			return guiTarget;
 		}
 
-		/* (non-Javadoc)
+		/*
+		 * (non-Javadoc)
+		 * 
 		 * @see org.eclipse.actf.model.IModelServiceHolder#setTitle(java.lang.String)
 		 */
 		public void setEditorTitle(String title) {
-			//do nothing
+			// do nothing
 		}
-    	
-    }
-    
-    private DummyModelServiceHolder holder;
-    
-    public GuiTargetWindowData(int hwnd, boolean isBrowser) {
-        this.hwnd = hwnd;
-        this.isBrowser = isBrowser;
-        this.holder = new DummyModelServiceHolder(this);
-    }
 
-    /**
-     * Get category string for menu bar
-     * @return
-     */
-    public String getCategory() {
-    	return isBrowser ? categoryBrowser : categoryWindow; 
-    }
+	}
 
-    /**
-     * Check if this data source is Web browser
-     * @return
-     */
-    public boolean isBrowser() {
-        return isBrowser;
-    }
+	private DummyModelServiceHolder holder;
 
-    /* (non-Javadoc)
-     * @see org.eclipse.actf.model.IModelService#getTitle()
-     */
-    public String getTitle() {
-        if( 0 != hwnd ) {
-            String title = WindowUtil.GetWindowText(hwnd);
-            if( title.length()==0 ) {
-                title = Messages.getString("msaa.NAMELESS"); //$NON-NLS-1$
-            }
-            return title + " ("+WindowUtil.GetWindowClassName(hwnd)+")"; //$NON-NLS-1$ //$NON-NLS-2$
-        }
-        return null;
-    }
-    
-    /* (non-Javadoc)
-     * @see org.eclipse.actf.model.IModelService#getID()
-     */
-    public String getID() {
-        return getCategory()+"/"+Integer.toString(hwnd); //$NON-NLS-1$
-    }
+	/**
+	 * Constructor of the class.
+	 * 
+	 * @param hwnd Window handle of the target window
+	 * @param isBrowser set true if the target window is a Web browser
+	 */
+	public GuiTargetWindowData(int hwnd, boolean isBrowser) {
+		this.hwnd = hwnd;
+		this.isBrowser = isBrowser;
+		this.holder = new DummyModelServiceHolder(this);
+	}
 
-    /* (non-Javadoc)
-     * @see org.eclipse.actf.model.IModelService#getAttribute(java.lang.String)
-     */
-    public Object getAttribute(String name) {
-    	if( IModelService.ATTR_WINDOWHANDLE.equals(name) ) {
-    		return new Integer(hwnd);
-    	}
-        return null;
-    }
+	/**
+	 * Get category string for menu bar
+	 * 
+	 * @return category
+	 */
+	public String getCategory() {
+		return isBrowser ? categoryBrowser : categoryWindow;
+	}
 
-    /* (non-Javadoc)
-     * @see org.eclipse.actf.model.IModelService#getCurrentMIMEType()
-     */
-    public String getCurrentMIMEType() {
-        return null;
-    }
+	/**
+	 * Check if this data source is Web browser
+	 * 
+	 * @return true if this data source is Web browser
+	 */
+	public boolean isBrowser() {
+		return isBrowser;
+	}
 
-    /* (non-Javadoc)
-     * @see org.eclipse.actf.model.IModelService#getDocument()
-     */
-    public Document getDocument() {
-        return null;
-    }
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.actf.model.IModelService#getTitle()
+	 */
+	public String getTitle() {
+		if (0 != hwnd) {
+			String title = WindowUtil.GetWindowText(hwnd);
+			if (title.length() == 0) {
+				title = Messages.getString("msaa.NAMELESS"); //$NON-NLS-1$
+			}
+			return title + " (" + WindowUtil.GetWindowClassName(hwnd) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		return null;
+	}
 
-    /* (non-Javadoc)
-     * @see org.eclipse.actf.model.IModelService#getLiveDocument()
-     */
-    public Document getLiveDocument() {
-        return null;
-    }
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.actf.model.IModelService#getID()
+	 */
+	public String getID() {
+		return getCategory() + "/" + Integer.toString(hwnd); //$NON-NLS-1$
+	}
 
-    /* (non-Javadoc)
-     * @see org.eclipse.actf.model.IModelService#getScrollManager()
-     */
-    public IModelServiceScrollManager getScrollManager() {
-        return null;
-    }
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.actf.model.IModelService#getAttribute(java.lang.String)
+	 */
+	public Object getAttribute(String name) {
+		if (IModelService.ATTR_WINDOWHANDLE.equals(name)) {
+			return new Integer(hwnd);
+		}
+		return null;
+	}
 
-    /* (non-Javadoc)
-     * @see org.eclipse.actf.model.IModelService#getSupportExtensions()
-     */
-    public String[] getSupportExtensions() {
-        return null;
-    }
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.actf.model.IModelService#getCurrentMIMEType()
+	 */
+	public String getCurrentMIMEType() {
+		return null;
+	}
 
-    /* (non-Javadoc)
-     * @see org.eclipse.actf.model.IModelService#getSupportMIMETypes()
-     */
-    public String[] getSupportMIMETypes() {
-        return null;
-    }
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.actf.model.IModelService#getDocument()
+	 */
+	public Document getDocument() {
+		return null;
+	}
 
-    /* (non-Javadoc)
-     * @see org.eclipse.actf.model.IModelService#getTargetComposite()
-     */
-    public Composite getTargetComposite() {
-        return null;
-    }
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.actf.model.IModelService#getLiveDocument()
+	 */
+	public Document getLiveDocument() {
+		return null;
+	}
 
-    /* (non-Javadoc)
-     * @see org.eclipse.actf.model.IModelService#getURL()
-     */
-    public String getURL() {
-        return null;
-    }
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.actf.model.IModelService#getScrollManager()
+	 */
+	public IModelServiceScrollManager getScrollManager() {
+		return null;
+	}
 
-    /* (non-Javadoc)
-     * @see org.eclipse.actf.model.IModelService#jumpToNode(org.w3c.dom.Node)
-     */
-    public void jumpToNode(Node target) {
-    }
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.actf.model.IModelService#getSupportExtensions()
+	 */
+	public String[] getSupportExtensions() {
+		return null;
+	}
 
-    /* (non-Javadoc)
-     * @see org.eclipse.actf.model.IModelService#open(java.io.File)
-     */
-    public void open(File target) {
-    }
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.actf.model.IModelService#getSupportMIMETypes()
+	 */
+	public String[] getSupportMIMETypes() {
+		return null;
+	}
 
-    /* (non-Javadoc)
-     * @see org.eclipse.actf.model.IModelService#open(java.lang.String)
-     */
-    public void open(String url) {
-    }
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.actf.model.IModelService#getTargetComposite()
+	 */
+	public Composite getTargetComposite() {
+		return null;
+	}
 
-    /* (non-Javadoc)
-     * @see org.eclipse.actf.model.IModelService#saveDocumentAsHTMLFile(java.lang.String)
-     */
-    public File saveDocumentAsHTMLFile(String file) {
-        return null;
-    }
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.actf.model.IModelService#getURL()
+	 */
+	public String getURL() {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.actf.model.IModelService#jumpToNode(org.w3c.dom.Node)
+	 */
+	public void jumpToNode(Node target) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.actf.model.IModelService#open(java.io.File)
+	 */
+	public void open(File target) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.actf.model.IModelService#open(java.lang.String)
+	 */
+	public void open(String url) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.actf.model.IModelService#saveDocumentAsHTMLFile(java.lang.String)
+	 */
+	public File saveDocumentAsHTMLFile(String file) {
+		return null;
+	}
 
 	public File saveOriginalDocument(String file) {
 		return null;
@@ -209,12 +255,13 @@
 		return new ImagePositionInfo[0];
 	}
 
-	/* (non-Javadoc)
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see org.eclipse.actf.model.IModelService#getModelServiceHolder()
 	 */
 	public IModelServiceHolder getModelServiceHolder() {
 		return holder;
 	}
-    
 
 }
diff --git a/plugins/org.eclipse.actf.visualization.gui/src/org/eclipse/actf/visualization/gui/IGuiViewIDs.java b/plugins/org.eclipse.actf.visualization.gui/src/org/eclipse/actf/visualization/gui/IGuiViewIDs.java
index e8d2adb..f8673c3 100644
--- a/plugins/org.eclipse.actf.visualization.gui/src/org/eclipse/actf/visualization/gui/IGuiViewIDs.java
+++ b/plugins/org.eclipse.actf.visualization.gui/src/org/eclipse/actf/visualization/gui/IGuiViewIDs.java
@@ -17,14 +17,38 @@
 import org.eclipse.actf.visualization.gui.ui.views.MSAAProblemsView;
 import org.eclipse.actf.visualization.gui.ui.views.MSAAPropertiesView;
 
+/**
+ * The interface that includes GUI Visualization View IDs
+ */
 public interface IGuiViewIDs {
 	
+	/**
+	 * ID of Flash DOM view
+	 */
 	public static final String ID_FLASHDOMVIEW = "org.eclipse.actf.visualization.flash.ui.views.FlashDOMView";
 
+	/**
+	 * ID of GUI Summary view
+	 */
 	public static final String ID_SUMMARYVIEW = JAWSTextView.class.getName();
+	/**
+	 * ID of GUI Event view
+	 */
 	public static final String ID_EVENTVIEW = MSAAEventView.class.getName();
+	/**
+	 * ID of GUI Siblings view
+	 */
 	public static final String ID_SIBLINGSVIEW = MSAAListView.class.getName();
+	/**
+	 * ID of GUI Outline view
+	 */
 	public static final String ID_OUTLINEVIEW = MSAAOutlineView.class.getName();
+	/**
+	 * ID of GUI Report view
+	 */
 	public static final String ID_REPORTVIEW = MSAAProblemsView.class.getName();
+	/**
+	 * ID of GUI Properties view
+	 */
 	public static final String ID_PROPERTIESVIEW = MSAAPropertiesView.class.getName();
 }
diff --git a/plugins/org.eclipse.actf.visualization.gui/src/org/eclipse/actf/visualization/gui/TargetWindowDataProvider.java b/plugins/org.eclipse.actf.visualization.gui/src/org/eclipse/actf/visualization/gui/TargetWindowDataProvider.java
index 8e0482c..92968d9 100644
--- a/plugins/org.eclipse.actf.visualization.gui/src/org/eclipse/actf/visualization/gui/TargetWindowDataProvider.java
+++ b/plugins/org.eclipse.actf.visualization.gui/src/org/eclipse/actf/visualization/gui/TargetWindowDataProvider.java
@@ -13,25 +13,31 @@
 
 import org.eclipse.actf.model.ui.IModelService;
 
-
-
+/**
+ * Abstract class to add new Target Window for GUI Visualization. Contributors
+ * need to implement this class and register the implementation to
+ * <samp>org.eclipse.actf.visualization.gui.targetWindowData</samp> extension
+ * point.
+ */
 public abstract class TargetWindowDataProvider {
 
-    /**
-     * Get all ModelService
-     * @return array of IModelService
-     * getActiveModelService is called if null is returned
-     */
-    public IModelService[] getModelService() {
-        return null;
-    }
-    
-    /**
-     * Get current active Data source
-     * @return IModelService
-     */
-    public IModelService getActiveModelService() {
-        return null;
-    }
-    
+	/**
+	 * Get all ModelService
+	 * 
+	 * @return array of IModelService. getActiveModelService is called if null
+	 *         is returned by this method
+	 */
+	public IModelService[] getModelService() {
+		return null;
+	}
+
+	/**
+	 * Get current active Data source
+	 * 
+	 * @return IModelService
+	 */
+	public IModelService getActiveModelService() {
+		return null;
+	}
+
 }
