diff --git a/plugins/org.eclipse.actf.ai.audio.description/META-INF/MANIFEST.MF b/plugins/org.eclipse.actf.ai.audio.description/META-INF/MANIFEST.MF
index d8bf74f..e5626ec 100644
--- a/plugins/org.eclipse.actf.ai.audio.description/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.actf.ai.audio.description/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: Eclipse ACTF Audio Description Plug-in (Incubation)
 Bundle-SymbolicName: org.eclipse.actf.ai.audio.description;singleton:=true
 Bundle-Version: 0.0.1.qualifier
-Bundle-Activator: org.eclipse.actf.ai.audio.description.DescriptionPlugin
+Bundle-Activator: org.eclipse.actf.ai.internal.audio.description.DescriptionPlugin
 Bundle-Vendor: Eclipse.org
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.ui,
diff --git a/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/impl/MediaControlImpl.java b/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/impl/MediaControlImpl.java
index f21ca88..ce020ba 100644
--- a/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/impl/MediaControlImpl.java
+++ b/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/impl/MediaControlImpl.java
@@ -13,9 +13,9 @@
 
 import java.util.HashMap;
 
-import org.eclipse.actf.ai.audio.description.DescriptionPlugin;
 import org.eclipse.actf.ai.audio.description.IMetadataProvider;
-import org.eclipse.actf.ai.audio.description.Messages;
+import org.eclipse.actf.ai.internal.audio.description.DescriptionPlugin;
+import org.eclipse.actf.ai.internal.audio.description.Messages;
 import org.eclipse.actf.ai.navigator.IMediaControl;
 
 public class MediaControlImpl implements IMediaControl {
diff --git a/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/impl/MetadataManager.java b/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/impl/MetadataManager.java
index ea538c8..a6f5753 100644
--- a/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/impl/MetadataManager.java
+++ b/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/impl/MetadataManager.java
@@ -11,11 +11,11 @@
 
 package org.eclipse.actf.ai.audio.description.impl;
 
-import org.eclipse.actf.ai.audio.description.DescriptionPlugin;
 import org.eclipse.actf.ai.audio.description.IMetadata;
 import org.eclipse.actf.ai.audio.description.IMetadataProvider;
 import org.eclipse.actf.ai.fennec.treemanager.ISoundControl;
 import org.eclipse.actf.ai.fennec.treemanager.IVideoControl;
+import org.eclipse.actf.ai.internal.audio.description.DescriptionPlugin;
 import org.eclipse.actf.ai.navigator.IMediaControl.IHandle;
 
 public class MetadataManager {
diff --git a/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/preferences/ADPreferenceInitializer.java b/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/preferences/ADPreferenceInitializer.java
index 05c3e8d..fe891cd 100644
--- a/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/preferences/ADPreferenceInitializer.java
+++ b/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/preferences/ADPreferenceInitializer.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.actf.ai.audio.description.preferences;
 
-import org.eclipse.actf.ai.audio.description.DescriptionPlugin;
+import org.eclipse.actf.ai.internal.audio.description.DescriptionPlugin;
 import org.eclipse.actf.ai.tts.TTSRegistry;
 import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
 import org.eclipse.jface.preference.IPreferenceStore;
diff --git a/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/preferences/ADPreferencePage.java b/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/preferences/ADPreferencePage.java
index 7f28510..94b5987 100644
--- a/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/preferences/ADPreferencePage.java
+++ b/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/preferences/ADPreferencePage.java
@@ -11,8 +11,8 @@
 
 package org.eclipse.actf.ai.audio.description.preferences;
 
-import org.eclipse.actf.ai.audio.description.DescriptionPlugin;
-import org.eclipse.actf.ai.audio.description.Messages;
+import org.eclipse.actf.ai.internal.audio.description.DescriptionPlugin;
+import org.eclipse.actf.ai.internal.audio.description.Messages;
 import org.eclipse.actf.ai.tts.TTSRegistry;
 import org.eclipse.jface.preference.FieldEditorPreferencePage;
 import org.eclipse.jface.preference.RadioGroupFieldEditor;
diff --git a/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/views/DescriptionView.java b/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/views/DescriptionView.java
index 06c1b04..9055acd 100644
--- a/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/views/DescriptionView.java
+++ b/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/views/DescriptionView.java
@@ -11,9 +11,9 @@
 
 package org.eclipse.actf.ai.audio.description.views;
 
-import org.eclipse.actf.ai.audio.description.DescriptionPlugin;
-import org.eclipse.actf.ai.audio.description.Messages;
 import org.eclipse.actf.ai.audio.description.impl.MetadataContentProvider;
+import org.eclipse.actf.ai.internal.audio.description.DescriptionPlugin;
+import org.eclipse.actf.ai.internal.audio.description.Messages;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
diff --git a/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/views/VideoStatusViewer.java b/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/views/VideoStatusViewer.java
index 3f98f47..bf3b71f 100644
--- a/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/views/VideoStatusViewer.java
+++ b/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/views/VideoStatusViewer.java
@@ -11,9 +11,9 @@
 
 package org.eclipse.actf.ai.audio.description.views;
 
-import org.eclipse.actf.ai.audio.description.DescriptionPlugin;
-import org.eclipse.actf.ai.audio.description.Messages;
 import org.eclipse.actf.ai.audio.description.util.TimeFormatUtil;
+import org.eclipse.actf.ai.internal.audio.description.DescriptionPlugin;
+import org.eclipse.actf.ai.internal.audio.description.Messages;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
diff --git a/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/DescriptionPlugin.java b/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/internal/audio/description/DescriptionPlugin.java
similarity index 95%
rename from plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/DescriptionPlugin.java
rename to plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/internal/audio/description/DescriptionPlugin.java
index a312b5e..937d4c2 100644
--- a/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/DescriptionPlugin.java
+++ b/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/internal/audio/description/DescriptionPlugin.java
@@ -8,12 +8,13 @@
  * Contributors:
  *    Daisuke SATO - initial API and implementation
  *******************************************************************************/
-package org.eclipse.actf.ai.audio.description;
+package org.eclipse.actf.ai.internal.audio.description;
 
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.Locale;
 
+import org.eclipse.actf.ai.audio.description.IMetadataProvider;
 import org.eclipse.actf.ai.audio.description.impl.MetadataManager;
 import org.eclipse.actf.ai.audio.description.impl.MetadataProviderImpl;
 import org.eclipse.actf.ai.audio.description.views.DescriptionView;
@@ -25,7 +26,7 @@
 import org.eclipse.actf.ai.xmlstore.IXMLSelector;
 import org.eclipse.actf.ai.xmlstore.IXMLStore;
 import org.eclipse.actf.ai.xmlstore.IXMLStoreService;
-import org.eclipse.actf.ai.xmlstore.XMLStorePlugin;
+import org.eclipse.actf.ai.xmlstore.XMLStoreServiceUtil;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
@@ -80,11 +81,11 @@
 	 * @param url
 	 *            The URL string which determines audio description files in the
 	 *            XMLStore
-	 * @see org.eclipse.actf.ai.xmlstore.XMLStorePlugin#getXMLStoreService
+	 * @see org.eclipse.actf.ai.xmlstore.XMLStoreServiceUtil#getXMLStoreService
 	 * @return metadata information
 	 */
 	public IMetadataProvider getMetadata(String url) {
-		IXMLStoreService service = XMLStorePlugin.getDefault()
+		IXMLStoreService service = XMLStoreServiceUtil
 				.getXMLStoreService();
 		IXMLStore store = service.getRootStore();
 		IXMLSelector selector1 = service.getSelectorWithDocElem("puits",
diff --git a/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/Messages.java b/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/internal/audio/description/Messages.java
similarity index 90%
rename from plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/Messages.java
rename to plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/internal/audio/description/Messages.java
index 433ff0a..b87f690 100644
--- a/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/audio/description/Messages.java
+++ b/plugins/org.eclipse.actf.ai.audio.description/src/org/eclipse/actf/ai/internal/audio/description/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and Others
+ * Copyright (c) 2007, 2008 IBM Corporation and Others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,7 +9,7 @@
  *    Takashi ITOH - initial API and implementation
  *******************************************************************************/
 
-package org.eclipse.actf.ai.audio.description;
+package org.eclipse.actf.ai.internal.audio.description;
 
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
diff --git a/plugins/org.eclipse.actf.ai.audio.io/META-INF/MANIFEST.MF b/plugins/org.eclipse.actf.ai.audio.io/META-INF/MANIFEST.MF
index 0131f47..2b2a3ec 100644
--- a/plugins/org.eclipse.actf.ai.audio.io/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.actf.ai.audio.io/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: Eclipse ACTF Audio IO Plug-in (Incubation)
 Bundle-SymbolicName: org.eclipse.actf.ai.audio.io
 Bundle-Version: 0.0.1.qualifier
-Bundle-Activator: org.eclipse.actf.ai.audio.io.Activator
+Bundle-Activator: org.eclipse.actf.ai.audio.io.impl.Activator
 Bundle-Vendor: Eclipse.org
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime
diff --git a/plugins/org.eclipse.actf.ai.audio.io/src/org/eclipse/actf/ai/audio/io/Activator.java b/plugins/org.eclipse.actf.ai.audio.io/src/org/eclipse/actf/ai/audio/io/impl/Activator.java
similarity index 97%
rename from plugins/org.eclipse.actf.ai.audio.io/src/org/eclipse/actf/ai/audio/io/Activator.java
rename to plugins/org.eclipse.actf.ai.audio.io/src/org/eclipse/actf/ai/audio/io/impl/Activator.java
index 15bd634..8afc252 100644
--- a/plugins/org.eclipse.actf.ai.audio.io/src/org/eclipse/actf/ai/audio/io/Activator.java
+++ b/plugins/org.eclipse.actf.ai.audio.io/src/org/eclipse/actf/ai/audio/io/impl/Activator.java
@@ -8,7 +8,7 @@
  * Contributors:
  *    Daisuke SATO - initial API and implementation
  *******************************************************************************/
-package org.eclipse.actf.ai.audio.io;
+package org.eclipse.actf.ai.audio.io.impl;
 
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
diff --git a/plugins/org.eclipse.actf.ai.fennec/META-INF/MANIFEST.MF b/plugins/org.eclipse.actf.ai.fennec/META-INF/MANIFEST.MF
index 5243470..565f1fe 100644
--- a/plugins/org.eclipse.actf.ai.fennec/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.actf.ai.fennec/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: Eclipse ACTF Fennec Plug-in (Incubation)
 Bundle-SymbolicName: org.eclipse.actf.ai.fennec
 Bundle-Version: 0.0.1.qualifier
-Bundle-Activator: org.eclipse.actf.ai.fennec.FennecPlugin
+Bundle-Activator: org.eclipse.actf.ai.internal.fennec.FennecPlugin
 Bundle-Vendor: Eclipse.org
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.actf.util.vocab,
diff --git a/plugins/org.eclipse.actf.ai.fennec/src/org/eclipse/actf/ai/fennec/FennecMediatorFactory.java b/plugins/org.eclipse.actf.ai.fennec/src/org/eclipse/actf/ai/fennec/FennecMediatorFactory.java
new file mode 100644
index 0000000..1bf84ef
--- /dev/null
+++ b/plugins/org.eclipse.actf.ai.fennec/src/org/eclipse/actf/ai/fennec/FennecMediatorFactory.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and Others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Kentarou FUKUDA - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.actf.ai.fennec;
+
+import org.eclipse.actf.ai.fennec.mediator.FennecMediatorImpl;
+import org.eclipse.actf.model.ui.editor.browser.IWebBrowserACTF;
+
+/**
+ * Factory to create a instance of IFennecMediator
+ */
+public class FennecMediatorFactory {
+
+	/**
+	 * This is the factory method to create a instance of IFennecMediator
+	 * 
+	 * @param webBrowser
+	 *            An instance of {@link IWebBrowserACTF} to mediate.
+	 * @return New instance of IFennecMediator.
+	 */
+	public static IFennecMediator newFennecMediator(IWebBrowserACTF webBrowser) {
+		return new FennecMediatorImpl(webBrowser);
+	}
+
+}
diff --git a/plugins/org.eclipse.actf.ai.fennec/src/org/eclipse/actf/ai/fennec/FennecPlugin.java b/plugins/org.eclipse.actf.ai.fennec/src/org/eclipse/actf/ai/fennec/FennecPlugin.java
deleted file mode 100644
index 53ced46..0000000
--- a/plugins/org.eclipse.actf.ai.fennec/src/org/eclipse/actf/ai/fennec/FennecPlugin.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 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:
- *    Hisashi MIYASHITA - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.actf.ai.fennec;
-
-import org.eclipse.actf.ai.fennec.mediator.FennecMediatorImpl;
-import org.eclipse.actf.model.ui.editor.browser.IWebBrowserACTF;
-import org.eclipse.core.runtime.Plugin;
-import org.osgi.framework.BundleContext;
-
-/**
- * The activator class controls the plug-in life cycle
- */
-public class FennecPlugin extends Plugin {
-
-	// The shared instance.
-	private static FennecPlugin plugin;
-
-	/**
-	 * The constructor.
-	 */
-	public FennecPlugin() {
-		plugin = this;
-	}
-
-	/**
-	 * This method is called upon plug-in activation
-	 */
-	@Override
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-	}
-
-	/**
-	 * This method is called when the plug-in is stopped
-	 */
-	@Override
-	public void stop(BundleContext context) throws Exception {
-		super.stop(context);
-		plugin = null;
-	}
-
-	/**
-	 * Returns the shared instance.
-	 */
-	public static FennecPlugin getDefault() {
-		return plugin;
-	}
-
-	/**
-	 * This is the factory method to create a instance of IFennecMediator
-	 * 
-	 * @param webBrowser
-	 *            An instance of {@link IWebBrowserACTF} to mediate.
-	 * @return New instance of IFennecMediator.
-	 */
-	public IFennecMediator newFennecMediator(IWebBrowserACTF webBrowser) {
-		return new FennecMediatorImpl(webBrowser);
-	}
-
-}
diff --git a/plugins/org.eclipse.actf.ai.fennec/src/org/eclipse/actf/ai/fennec/impl/FennecEntryImpl.java b/plugins/org.eclipse.actf.ai.fennec/src/org/eclipse/actf/ai/fennec/impl/FennecEntryImpl.java
index 42df0e1..83c4183 100644
--- a/plugins/org.eclipse.actf.ai.fennec/src/org/eclipse/actf/ai/fennec/impl/FennecEntryImpl.java
+++ b/plugins/org.eclipse.actf.ai.fennec/src/org/eclipse/actf/ai/fennec/impl/FennecEntryImpl.java
@@ -15,7 +15,7 @@
 
 import org.eclipse.actf.ai.fennec.IFennecEntry;
 import org.eclipse.actf.ai.xmlstore.IXMLInfo;
-import org.eclipse.actf.ai.xmlstore.XMLStorePlugin;
+import org.eclipse.actf.ai.xmlstore.XMLStoreServiceUtil;
 
 
 
@@ -40,6 +40,6 @@
     }
 
     public boolean export(File dest) {
-        return XMLStorePlugin.getDefault().getXMLStoreService().exportMetadata(info, dest);
+        return XMLStoreServiceUtil.getXMLStoreService().exportMetadata(info, dest);
     }
 }
diff --git a/plugins/org.eclipse.actf.ai.fennec/src/org/eclipse/actf/ai/fennec/mediator/FennecMediatorImpl.java b/plugins/org.eclipse.actf.ai.fennec/src/org/eclipse/actf/ai/fennec/mediator/FennecMediatorImpl.java
index 6d75fe2..5a07264 100644
--- a/plugins/org.eclipse.actf.ai.fennec/src/org/eclipse/actf/ai/fennec/mediator/FennecMediatorImpl.java
+++ b/plugins/org.eclipse.actf.ai.fennec/src/org/eclipse/actf/ai/fennec/mediator/FennecMediatorImpl.java
@@ -26,7 +26,7 @@
 import org.eclipse.actf.ai.xmlstore.IXMLSelector;
 import org.eclipse.actf.ai.xmlstore.IXMLStore;
 import org.eclipse.actf.ai.xmlstore.IXMLStoreService;
-import org.eclipse.actf.ai.xmlstore.XMLStorePlugin;
+import org.eclipse.actf.ai.xmlstore.XMLStoreServiceUtil;
 import org.eclipse.actf.model.dom.dombycom.IDocumentEx;
 import org.eclipse.actf.model.ui.editor.browser.IWebBrowserACTF;
 
@@ -53,7 +53,7 @@
     }
 
     private IXMLStore getFennecStore(String url) {
-        IXMLStoreService ss = XMLStorePlugin.getDefault().getXMLStoreService();
+        IXMLStoreService ss = XMLStoreServiceUtil.getXMLStoreService();
         IXMLSelector selector = ss.getSelectorWithDocElem(FennecDOMReader.Fennec_DOCUMENT_ELEMENT_NAME,
                                                           FennecDOMReader.Fennec_NAMESPACE_URI);
         IXMLStore store = ss.getRootStore();
diff --git a/plugins/org.eclipse.actf.ai.query/src/org/eclipse/actf/ai/query/QueryPlugin.java b/plugins/org.eclipse.actf.ai.fennec/src/org/eclipse/actf/ai/internal/fennec/FennecPlugin.java
similarity index 81%
copy from plugins/org.eclipse.actf.ai.query/src/org/eclipse/actf/ai/query/QueryPlugin.java
copy to plugins/org.eclipse.actf.ai.fennec/src/org/eclipse/actf/ai/internal/fennec/FennecPlugin.java
index cb594c0..1dc866a 100644
--- a/plugins/org.eclipse.actf.ai.query/src/org/eclipse/actf/ai/query/QueryPlugin.java
+++ b/plugins/org.eclipse.actf.ai.fennec/src/org/eclipse/actf/ai/internal/fennec/FennecPlugin.java
@@ -9,23 +9,23 @@
  *    Hisashi MIYASHITA - initial API and implementation
  *******************************************************************************/
 
-package org.eclipse.actf.ai.query;
+package org.eclipse.actf.ai.internal.fennec;
 
 import org.eclipse.core.runtime.Plugin;
 import org.osgi.framework.BundleContext;
 
 /**
- * The main plugin class to be used in the desktop.
+ * The activator class controls the plug-in life cycle
  */
-public class QueryPlugin extends Plugin {
+public class FennecPlugin extends Plugin {
 
 	// The shared instance.
-	private static QueryPlugin plugin;
+	private static FennecPlugin plugin;
 
 	/**
 	 * The constructor.
 	 */
-	public QueryPlugin() {
+	public FennecPlugin() {
 		plugin = this;
 	}
 
@@ -49,7 +49,7 @@
 	/**
 	 * Returns the shared instance.
 	 */
-	public static QueryPlugin getDefault() {
+	public static FennecPlugin getDefault() {
 		return plugin;
 	}
 
diff --git a/plugins/org.eclipse.actf.ai.key.keyui/src/org/eclipse/actf/ai/key/keyui/impl/KeyUIImpl.java b/plugins/org.eclipse.actf.ai.key.keyui/src/org/eclipse/actf/ai/key/keyui/impl/KeyUIImpl.java
index cb8995a..336a543 100644
--- a/plugins/org.eclipse.actf.ai.key.keyui/src/org/eclipse/actf/ai/key/keyui/impl/KeyUIImpl.java
+++ b/plugins/org.eclipse.actf.ai.key.keyui/src/org/eclipse/actf/ai/key/keyui/impl/KeyUIImpl.java
@@ -23,13 +23,13 @@
 import org.eclipse.actf.ai.navigator.IBrowserControl;
 import org.eclipse.actf.ai.navigator.IManipulator;
 import org.eclipse.actf.ai.navigator.INavigatorUI;
-import org.eclipse.actf.ai.navigator.NavigatorPlugin;
+import org.eclipse.actf.ai.navigator.ui.NavigatorUIUtil;
 import org.eclipse.actf.ai.xmlstore.IXMLInfo;
 import org.eclipse.actf.ai.xmlstore.IXMLSelector;
 import org.eclipse.actf.ai.xmlstore.IXMLStore;
 import org.eclipse.actf.ai.xmlstore.IXMLStoreService;
 import org.eclipse.actf.ai.xmlstore.XMLStoreException;
-import org.eclipse.actf.ai.xmlstore.XMLStorePlugin;
+import org.eclipse.actf.ai.xmlstore.XMLStoreServiceUtil;
 import org.eclipse.actf.util.win32.comclutch.ComPlugin;
 import org.eclipse.actf.util.win32.keyhook.IKeyHook;
 import org.eclipse.actf.util.win32.keyhook.IKeyHookListener;
@@ -89,7 +89,7 @@
         keyHook = ComPlugin.getDefault().newKeyHook(this);
         sendEvent = ComPlugin.getDefault().newSendEvent();
 
-        IXMLStoreService xmlStoreService = XMLStorePlugin.getDefault().getXMLStoreService();
+        IXMLStoreService xmlStoreService = XMLStoreServiceUtil.getXMLStoreService();
         IXMLSelector selector = xmlStoreService.getSelectorWithDocElem("UserPreferences", PREFERENCES_NS);
         IXMLStore rootStore = xmlStoreService.getRootStore();
         IXMLStore specifiedStroe = rootStore.specify(selector);
@@ -198,7 +198,7 @@
             return;
         String name = command.getLocalName();
 
-        IMenuManager menu = NavigatorPlugin.menuManager;
+        IMenuManager menu = NavigatorUIUtil.menuManager;
         IMenuManager menu2 = menu.findMenuUsingPath(menuName);
 
         if ("separator".equals(name)) {
diff --git a/plugins/org.eclipse.actf.ai.navigator/META-INF/MANIFEST.MF b/plugins/org.eclipse.actf.ai.navigator/META-INF/MANIFEST.MF
index 45650a2..39b18d3 100644
--- a/plugins/org.eclipse.actf.ai.navigator/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.actf.ai.navigator/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: Eclipse ACTF Navigator Plug-in (Incubation)
 Bundle-SymbolicName: org.eclipse.actf.ai.navigator;singleton:=true
 Bundle-Version: 0.0.1.qualifier
-Bundle-Activator: org.eclipse.actf.ai.navigator.NavigatorPlugin
+Bundle-Activator: org.eclipse.actf.ai.internal.navigator.NavigatorPlugin
 Bundle-Vendor: Eclipse.org
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.core.runtime,
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/Messages.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/internal/navigator/Messages.java
similarity index 96%
rename from plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/Messages.java
rename to plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/internal/navigator/Messages.java
index 610be3b..a964d7c 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/Messages.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/internal/navigator/Messages.java
@@ -9,7 +9,7 @@
  *    Daisuke SATO - initial API and implementation
  *******************************************************************************/
 
-package org.eclipse.actf.ai.navigator;
+package org.eclipse.actf.ai.internal.navigator;
 
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/internal/navigator/NavigatorPlugin.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/internal/navigator/NavigatorPlugin.java
new file mode 100644
index 0000000..3e4a660
--- /dev/null
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/internal/navigator/NavigatorPlugin.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 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:
+ *    Hisashi MIYASHITA - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.actf.ai.internal.navigator;
+
+import org.eclipse.actf.ai.navigator.extension.MetadataCacheCleanerExtension;
+import org.eclipse.actf.ai.navigator.views.NavigatorTreeView;
+import org.eclipse.actf.ai.tts.AbstractUIPluginForTTS;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The main plugin class to be used in the desktop.
+ */
+public class NavigatorPlugin extends AbstractUIPluginForTTS {
+
+	public static final String ID = "org.eclipse.actf.ai.navigator";
+	// The shared instance.
+	private static NavigatorPlugin plugin;
+
+	/**
+	 * The constructor.
+	 */
+	public NavigatorPlugin() {
+		plugin = this;
+	}
+
+	/**
+	 * This method is called upon plug-in activation
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/**
+	 * This method is called when the plug-in is stopped
+	 */
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		super.stop(context);
+		plugin = null;
+	}
+
+	/**
+	 * Returns the shared instance.
+	 */
+	public static NavigatorPlugin getDefault() {
+		return plugin;
+	}
+
+	private NavigatorTreeView navigatorTreeView;
+
+	/**
+	 * To share the instance of the Navigator Tree View in this plug-in.
+	 * 
+	 * @param navigatorTreeView
+	 *            An instance of the Navigator Tree View.
+	 */
+	public void setNavigatorTreeView(NavigatorTreeView navigatorTreeView) {
+		this.navigatorTreeView = navigatorTreeView;
+	}
+
+	/**
+	 * @return The shared instance of the Navigator Tree View.
+	 */
+	public NavigatorTreeView getNavigatorTreeView() {
+		return navigatorTreeView;
+	}
+
+	/**
+	 * Clear the memory cache of the metadata.
+	 */
+	public void clearMetadataCache() {
+		MetadataCacheCleanerExtension.clearCache();
+	}
+}
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/IManipulator.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/IManipulator.java
index 9ac0f62..44f195d 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/IManipulator.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/IManipulator.java
@@ -11,6 +11,8 @@
 
 package org.eclipse.actf.ai.navigator;
 
+import org.eclipse.actf.ai.internal.navigator.Messages;
+
 
 /**
  * IManipulator interface defines the methods to be implemented by the "manipulator"
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/INavigatorUI.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/INavigatorUI.java
index a26dadf..d44597b 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/INavigatorUI.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/INavigatorUI.java
@@ -112,16 +112,6 @@
     void treeBottom();
 
     /**
-     * @deprecated
-     * @see #traverseUp()
-     */
-    void traverseNodeUp();
-    /**
-     * @deprecated
-     * @see #traverseDown()
-     */
-    void traverseNodeDown();
-    /**
      * Move the current position to the next node which can be read.
      * The traverse is executed in depth first strategy.
      */
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/NavigatorPlugin.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/NavigatorPlugin.java
deleted file mode 100644
index 5a40afc..0000000
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/NavigatorPlugin.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 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:
- *    Hisashi MIYASHITA - initial API and implementation
- *******************************************************************************/
-package org.eclipse.actf.ai.navigator;
-
-import org.eclipse.actf.ai.navigator.extension.MetadataCacheCleanerExtension;
-import org.eclipse.actf.ai.navigator.views.NavigatorTreeView;
-import org.eclipse.actf.ai.tts.AbstractUIPluginForTTS;
-import org.eclipse.jface.action.IMenuManager;
-import org.osgi.framework.BundleContext;
-
-
-/**
- * The main plugin class to be used in the desktop.
- */
-public class NavigatorPlugin extends AbstractUIPluginForTTS {
-
-    public static final String ID = "org.eclipse.actf.ai.navigator";
-    //The shared instance.
-    private static NavigatorPlugin plugin;
-    public static IMenuManager menuManager;
-        
-    /**
-     * The constructor.
-     */
-    public NavigatorPlugin() {
-        plugin = this;
-    }
-
-    /**
-     * This method is called upon plug-in activation
-     */
-    @Override
-    public void start(BundleContext context) throws Exception {
-        super.start(context);
-    }
-
-    /**
-     * This method is called when the plug-in is stopped
-     */
-    @Override
-    public void stop(BundleContext context) throws Exception {
-        super.stop(context);
-        plugin = null;
-    }
-
-    /**
-     * Returns the shared instance.
-     */
-    public static NavigatorPlugin getDefault() {
-        return plugin;
-    }
-
-    private NavigatorTreeView navigatorTreeView;
-    
-	/**
-	 * The view ID of the Navigator Tree View.
-	 */
-	public static final String NAVIGATOR_TREE_VIEW_ID = "org.eclipse.actf.ai.navigator.views.NavigatorTreeView"; //$NON-NLS-1$
-
-    /**
-     * To share the instance of the Navigator Tree View in this plug-in.
-     * @param navigatorTreeView An instance of the Navigator Tree View.
-     */
-    public void setNavigatorTreeView(NavigatorTreeView navigatorTreeView) {
-        this.navigatorTreeView = navigatorTreeView;
-    }
-    
-    /**
-     * @return The shared instance of the Navigator Tree View.
-     */
-    public NavigatorTreeView getNavigatorTreeView() {
-        return navigatorTreeView;
-    }
-    
-    /**
-     * Clear the memory cache of the metadata.
-     */
-    public void clearMetadataCache(){
-        MetadataCacheCleanerExtension.clearCache();
-    }
-}
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/extension/ManipulatorExtension.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/extension/ManipulatorExtension.java
index 93fad37..a345671 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/extension/ManipulatorExtension.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/extension/ManipulatorExtension.java
@@ -14,10 +14,10 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.actf.ai.internal.navigator.NavigatorPlugin;
 import org.eclipse.actf.ai.navigator.IBrowserControl;
 import org.eclipse.actf.ai.navigator.IManipulator;
 import org.eclipse.actf.ai.navigator.INavigatorUI;
-import org.eclipse.actf.ai.navigator.NavigatorPlugin;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtension;
 import org.eclipse.core.runtime.Platform;
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/extension/MediaControlExtension.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/extension/MediaControlExtension.java
index 4a9f815..be41408 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/extension/MediaControlExtension.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/extension/MediaControlExtension.java
@@ -14,8 +14,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.actf.ai.internal.navigator.NavigatorPlugin;
 import org.eclipse.actf.ai.navigator.IMediaControl;
-import org.eclipse.actf.ai.navigator.NavigatorPlugin;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtension;
 import org.eclipse.core.runtime.Platform;
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/extension/MetadataCacheCleanerExtension.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/extension/MetadataCacheCleanerExtension.java
index c0f35e0..8102317 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/extension/MetadataCacheCleanerExtension.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/extension/MetadataCacheCleanerExtension.java
@@ -14,8 +14,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.actf.ai.internal.navigator.NavigatorPlugin;
 import org.eclipse.actf.ai.navigator.IMetadataCacheCleaner;
-import org.eclipse.actf.ai.navigator.NavigatorPlugin;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtension;
 import org.eclipse.core.runtime.Platform;
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/extension/ScreenReaderExtension.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/extension/ScreenReaderExtension.java
index 16acadd..262119a 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/extension/ScreenReaderExtension.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/extension/ScreenReaderExtension.java
@@ -14,8 +14,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.actf.ai.internal.navigator.NavigatorPlugin;
 import org.eclipse.actf.ai.navigator.IScreenReaderControl;
-import org.eclipse.actf.ai.navigator.NavigatorPlugin;
 import org.eclipse.actf.model.ui.editor.browser.IWebBrowserACTF;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtension;
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/AccessKeyListDialog.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/AccessKeyListDialog.java
index f2ba059..88d30d5 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/AccessKeyListDialog.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/AccessKeyListDialog.java
@@ -12,7 +12,7 @@
 package org.eclipse.actf.ai.navigator.impl;
 
 import org.eclipse.actf.ai.fennec.treemanager.IAccessKeyList;
-import org.eclipse.actf.ai.navigator.Messages;
+import org.eclipse.actf.ai.internal.navigator.Messages;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionEvent;
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/BrowserControlImpl.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/BrowserControlImpl.java
index 5cbc32a..7f4c73e 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/BrowserControlImpl.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/BrowserControlImpl.java
@@ -16,9 +16,9 @@
 import org.eclipse.actf.ai.navigator.IBrowserControl;
 import org.eclipse.actf.ai.navigator.IManipulator;
 import org.eclipse.actf.ai.navigator.extension.ManipulatorExtension;
-import org.eclipse.actf.ai.navigator.ui.URLOpenDialog;
+import org.eclipse.actf.ai.navigator.util.URLOpenDialog;
 import org.eclipse.actf.ai.navigator.voice.VoiceManager;
-import org.eclipse.actf.ai.xmlstore.XMLStorePlugin;
+import org.eclipse.actf.ai.xmlstore.XMLStoreServiceUtil;
 import org.eclipse.actf.model.ui.editor.browser.IWebBrowserACTF;
 import org.eclipse.actf.model.ui.editor.browser.IWebBrowserNavigationEventListener;
 import org.eclipse.actf.model.ui.editor.browser.WebBrowserNavigationEvent;
@@ -94,7 +94,7 @@
                 if (!ret)
                     return;
             }
-            if (XMLStorePlugin.getDefault().getXMLStoreService().exportAllAnnotations(dest)) {
+            if (XMLStoreServiceUtil.getXMLStoreService().exportAllAnnotations(dest)) {
                 voiceManager.speakWithFormat("Navigator.EXPORT_IS_SUCCEEDED", true, true);
             } else {
                 voiceManager.speakWithFormat("Navigator.EXPORT_IS_FAILED", true, true);
@@ -114,8 +114,8 @@
         if (path != null) {
             File src = new File(path);
 
-            boolean r = XMLStorePlugin.getDefault().getXMLStoreService().importMetadata(src);
-            XMLStorePlugin.getDefault().getXMLStoreService().getRootStore().refleshAll();
+            boolean r = XMLStoreServiceUtil.getXMLStoreService().importMetadata(src);
+            XMLStoreServiceUtil.getXMLStoreService().getRootStore().refleshAll();
             NavigatorImpl navigator = webEventListener.getFocused();
             if (navigator != null)
                 navigator.forceRestart();
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/FormInputDialog.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/FormInputDialog.java
index 55956d7..06407ec 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/FormInputDialog.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/FormInputDialog.java
@@ -11,7 +11,7 @@
 
 package org.eclipse.actf.ai.navigator.impl;
 
-import org.eclipse.actf.ai.navigator.Messages;
+import org.eclipse.actf.ai.internal.navigator.Messages;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.KeyEvent;
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/FormSelectDialog.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/FormSelectDialog.java
index 7790e6c..07094b6 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/FormSelectDialog.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/FormSelectDialog.java
@@ -12,7 +12,7 @@
 package org.eclipse.actf.ai.navigator.impl;
 
 import org.eclipse.actf.ai.fennec.treemanager.ITreeItem;
-import org.eclipse.actf.ai.navigator.Messages;
+import org.eclipse.actf.ai.internal.navigator.Messages;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionEvent;
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/NavigatorImpl.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/NavigatorImpl.java
index 424f642..73020cc 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/NavigatorImpl.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/NavigatorImpl.java
@@ -31,10 +31,10 @@
 import org.eclipse.actf.ai.fennec.treemanager.TreeManagerInterruptedException;
 import org.eclipse.actf.ai.fennec.treemanager.ISoundControl.VolumeState;
 import org.eclipse.actf.ai.fennec.treemanager.IVideoControl.VideoState;
+import org.eclipse.actf.ai.internal.navigator.NavigatorPlugin;
 import org.eclipse.actf.ai.navigator.IManipulator;
 import org.eclipse.actf.ai.navigator.IMediaControl;
 import org.eclipse.actf.ai.navigator.INavigatorUI;
-import org.eclipse.actf.ai.navigator.NavigatorPlugin;
 import org.eclipse.actf.ai.navigator.IMediaControl.IHandle;
 import org.eclipse.actf.ai.navigator.extension.ManipulatorExtension;
 import org.eclipse.actf.ai.navigator.extension.MediaControlExtension;
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/NavigatorImplEx.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/NavigatorImplEx.java
index f613636..df132d1 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/NavigatorImplEx.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/NavigatorImplEx.java
@@ -12,8 +12,8 @@
 
 import org.eclipse.actf.ai.fennec.treemanager.ITreeItem;
 import org.eclipse.actf.ai.fennec.treemanager.TreeManagerException;
+import org.eclipse.actf.ai.internal.navigator.NavigatorPlugin;
 import org.eclipse.actf.ai.navigator.IManipulator;
-import org.eclipse.actf.ai.navigator.NavigatorPlugin;
 import org.eclipse.actf.ai.navigator.preferences.UserInfoPreferenceConstants;
 import org.eclipse.actf.ai.navigator.userinfo.IMetaDataModifier;
 import org.eclipse.actf.ai.navigator.userinfo.IUserInfoGenerator;
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/SearchDialog.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/SearchDialog.java
index 9c70d95..a7adbf4 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/SearchDialog.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/SearchDialog.java
@@ -11,7 +11,7 @@
 
 package org.eclipse.actf.ai.navigator.impl;
 
-import org.eclipse.actf.ai.navigator.Messages;
+import org.eclipse.actf.ai.internal.navigator.Messages;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/WebEventListener.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/WebEventListener.java
index 0c7056a..9620d08 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/WebEventListener.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/impl/WebEventListener.java
@@ -14,7 +14,7 @@
 import java.net.URLDecoder;
 import java.util.HashMap;
 
-import org.eclipse.actf.ai.fennec.FennecPlugin;
+import org.eclipse.actf.ai.fennec.FennecMediatorFactory;
 import org.eclipse.actf.ai.fennec.IFennecMediator;
 import org.eclipse.actf.ai.fennec.treemanager.ILocation;
 import org.eclipse.actf.ai.navigator.broker.RequestBroker;
@@ -31,314 +31,338 @@
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PlatformUI;
 
-
 public class WebEventListener implements IWebBrowserACTFEventListener {
 
-    private static final String ABOUT_BLANK_URL = "about:blank";
+	private static final String ABOUT_BLANK_URL = "about:blank";
 
-    private FennecPlugin getFennecPlugin() {
-        return FennecPlugin.getDefault();
-    }
+	// --------------------------------------------------------------------------------
+	// Browser State: It keeps the state of the browser by receiving Web Browser
+	// Events. In overall, we should encapsulate the stateful information around
+	// the browser
+	// into this class.
+	// --------------------------------------------------------------------------------
+	public class BrowserState {
+		public static final int STATE_NONE = -1;
 
-    // --------------------------------------------------------------------------------
-    //  Browser State: It keeps the state of the browser by receiving Web Browser
-    //  Events.  In overall, we should encapsulate the stateful information around the browser
-    //  into this class.
-    // --------------------------------------------------------------------------------
-    public class BrowserState {
-        public static final int STATE_NONE = -1;
+		public static final int STATE_UNINIT = 0;
 
-        public static final int STATE_UNINIT = 0;
+		public static final int STATE_PROGRESS = 1;
 
-        public static final int STATE_PROGRESS = 1;
+		public static final int STATE_NAVIGATECOMPLETED = 3;
 
-        public static final int STATE_NAVIGATECOMPLETED = 3;
+		public static final int STATE_STARTED = 10;
 
-        public static final int STATE_STARTED = 10;
+		boolean shouldRecord;
+		boolean initFlag;
+		ILocation savedLocation;
+		ILocation savedLocationForMyRefresh;
 
-        boolean shouldRecord;
-        boolean initFlag;
-        ILocation savedLocation;
-        ILocation savedLocationForMyRefresh;
+		NavigatorImpl navigator;
 
-        NavigatorImpl navigator;
+		public NavigatorImpl getNavigator() {
+			return navigator;
+		}
 
-        public NavigatorImpl getNavigator() {
-            return navigator;
-        }
+		int state;
 
-        int state;
+		public int getState() {
+			return state;
+		}
 
+		void resetState() {
+			this.state = STATE_UNINIT;
+		}
 
-        public int getState() {
-            return state;
-        }
+		void setNoState() {
+			this.state = STATE_NONE;
+		}
 
-        void resetState() {
-            this.state = STATE_UNINIT;
-        }
+		void forwardState(int newst) {
+			if (this.state < newst)
+				this.state = newst;
+		}
 
-        void setNoState() {
-            this.state = STATE_NONE;
-        }
+		BrowserState(IWebBrowserACTF webBrowser) {
+			this.navigator = new NavigatorImplEx(WebEventListener.this,
+					webBrowser, 30, 1000);
+			this.state = STATE_NONE;
+		}
+	}
 
-        void forwardState(int newst) {
-            if (this.state < newst) this.state = newst;
-        }
+	private HashMap<IWebBrowserACTF, BrowserState> browserStateMap;
 
-        BrowserState(IWebBrowserACTF webBrowser) {
-            this.navigator = new NavigatorImplEx(WebEventListener.this, webBrowser, 30, 1000);
-            this.state = STATE_NONE;
-        }
-    }
+	private RequestBroker requestBroker;
 
-    private HashMap<IWebBrowserACTF, BrowserState> browserStateMap;
+	private final TripJournal tripJournal;
 
-    private RequestBroker requestBroker;
-    
-    private final TripJournal tripJournal;
+	private final BrowserControlImpl browserControl;
 
-    private final BrowserControlImpl browserControl;
+	public WebEventListener() {
+		this.browserStateMap = new HashMap<IWebBrowserACTF, BrowserState>();
+		this.tripJournal = new TripJournal();
+		this.browserControl = new BrowserControlImpl(this, this.tripJournal);
+		WebBrowserNavigationEventListnerHolder.LISTENER = this.browserControl;
+		ManipulatorExtension.setBrowserControl(this.browserControl);
 
-    public WebEventListener() {
-        this.browserStateMap = new HashMap<IWebBrowserACTF, BrowserState>();
-        this.tripJournal = new TripJournal();
-        this.browserControl = new BrowserControlImpl(this, this.tripJournal);
-        WebBrowserNavigationEventListnerHolder.LISTENER = this.browserControl;
-        ManipulatorExtension.setBrowserControl(this.browserControl);
+		requestBroker = new RequestBroker(this);
+	}
 
-        requestBroker = new RequestBroker(this);
-    }
-    
-    public synchronized BrowserState getBrowserState(IWebBrowserACTF webBrowser) {
-        BrowserState bs = browserStateMap.get(webBrowser);
-        if (bs == null) {
-            bs = new BrowserState(webBrowser);
-            browserStateMap.put(webBrowser, bs);
-        }
-        return bs;
-    }
+	public synchronized BrowserState getBrowserState(IWebBrowserACTF webBrowser) {
+		BrowserState bs = browserStateMap.get(webBrowser);
+		if (bs == null) {
+			bs = new BrowserState(webBrowser);
+			browserStateMap.put(webBrowser, bs);
+		}
+		return bs;
+	}
 
-    public void forceRestart(IWebBrowserACTF webBrowser) {
-        startNavigation(webBrowser, false);
-    }
+	public void forceRestart(IWebBrowserACTF webBrowser) {
+		startNavigation(webBrowser, false);
+	}
 
-    public NavigatorImpl getFocused() {
-        IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
-        IWorkbenchPage page = window.getActivePage();
-        IEditorPart editor = page.getActiveEditor();
+	public NavigatorImpl getFocused() {
+		IWorkbenchWindow window = PlatformUI.getWorkbench()
+				.getActiveWorkbenchWindow();
+		IWorkbenchPage page = window.getActivePage();
+		IEditorPart editor = page.getActiveEditor();
 
-        if (editor == null) return null;
-        IModelServiceHolder modelServiceHolder = (IModelServiceHolder) editor;
-        IWebBrowserACTF wb = (IWebBrowserACTF) modelServiceHolder.getModelService();
-        BrowserState bs = browserStateMap.get(wb);
-        if (bs == null) return null;
+		if (editor == null)
+			return null;
+		IModelServiceHolder modelServiceHolder = (IModelServiceHolder) editor;
+		IWebBrowserACTF wb = (IWebBrowserACTF) modelServiceHolder
+				.getModelService();
+		BrowserState bs = browserStateMap.get(wb);
+		if (bs == null)
+			return null;
 
-        return bs.getNavigator();
-    }
+		return bs.getNavigator();
+	}
 
-    // --------------------------------------------------------------------------------
-    //  Event Handlers
-    // --------------------------------------------------------------------------------
-    
-    private static final boolean EVENT_DEBUG = false;
-    
-    private void startNavigation(IWebBrowserACTF webBrowser) {
-        startNavigation(webBrowser, false);
-    }
+	// --------------------------------------------------------------------------------
+	// Event Handlers
+	// --------------------------------------------------------------------------------
 
-    private void startNavigation(IWebBrowserACTF webBrowser, boolean isRefresh) {
-        tripJournal.tripEnd();
-        BrowserState bs = getBrowserState(webBrowser);
-        if (bs.state >= BrowserState.STATE_STARTED)
-            return;
-        
-        if (EVENT_DEBUG) System.err.println(webBrowser.getURL() + ", isRefresh=" + isRefresh + ", " + webBrowser);
-        
-        if (bs.state == BrowserState.STATE_STARTED) {
-            MediaControlExtension.doDispose(bs.navigator.getMediaControlHandle());
-        }
-        MediaControlExtension.start(bs.navigator.getMediaControlHandle());
+	private static final boolean EVENT_DEBUG = false;
 
-        IFennecMediator mediator = getFennecPlugin().newFennecMediator(webBrowser);
-        bs.navigator.setFennecMediator(mediator);
-        bs.navigator.startNavigation(webBrowser, !isRefresh);
-        requestBroker.setNavigator(bs.navigator, webBrowser);
+	private void startNavigation(IWebBrowserACTF webBrowser) {
+		startNavigation(webBrowser, false);
+	}
 
-        bs.forwardState(BrowserState.STATE_STARTED);
-        requestBroker.newPageReady();
-    }
+	private void startNavigation(IWebBrowserACTF webBrowser, boolean isRefresh) {
+		tripJournal.tripEnd();
+		BrowserState bs = getBrowserState(webBrowser);
+		if (bs.state >= BrowserState.STATE_STARTED)
+			return;
 
-    private static final String FILE_SCHEME_SUFFIX = "file:///";
-    private String unifyURLFileScheme(String url) {
-        if (url.startsWith(FILE_SCHEME_SUFFIX)) {
-            url = url.substring(FILE_SCHEME_SUFFIX.length());
-            try {
-                url = URLDecoder.decode(url, "UTF-8");
-            } catch (UnsupportedEncodingException e) {
-                e.printStackTrace();
-            }
-            return url.replace('/', '\\');
-        }
-        return url;
-    }
+		if (EVENT_DEBUG)
+			System.err.println(webBrowser.getURL() + ", isRefresh=" + isRefresh
+					+ ", " + webBrowser);
 
-    private boolean urlEquals(String url1, String url2) {
-        if ((url1 == null) || (url2 == null)) return false;
-        return unifyURLFileScheme(url1).equals(unifyURLFileScheme(url2));
-    }
+		if (bs.state == BrowserState.STATE_STARTED) {
+			MediaControlExtension.doDispose(bs.navigator
+					.getMediaControlHandle());
+		}
+		MediaControlExtension.start(bs.navigator.getMediaControlHandle());
 
-    public void navigateComplete(IWebBrowserACTF webBrowser, String url) { 
-        if (EVENT_DEBUG) System.out.println("navigateComplete " + url + ", "
-                                            + webBrowser.getURL() + " | " + webBrowser);
-        
-        if (!urlEquals(url, webBrowser.getURL())) return;
+		IFennecMediator mediator = FennecMediatorFactory
+				.newFennecMediator(webBrowser);
+		bs.navigator.setFennecMediator(mediator);
+		bs.navigator.startNavigation(webBrowser, !isRefresh);
+		requestBroker.setNavigator(bs.navigator, webBrowser);
 
-        BrowserState bs = getBrowserState(webBrowser);
-        if ((bs.shouldRecord)
-            && (bs.state < BrowserState.STATE_NAVIGATECOMPLETED)) {
-            tripJournal.recordJournal(bs.navigator,
-                                      bs.savedLocation,
-                                      webBrowser.getURL(),
-                                      bs.initFlag);
-        }
-        bs.forwardState(BrowserState.STATE_NAVIGATECOMPLETED);
-        bs.navigator.navigateComplete();
-    }
+		bs.forwardState(BrowserState.STATE_STARTED);
+		requestBroker.newPageReady();
+	}
 
-    public void titleChange(IWebBrowserACTF webBrowser, String title) {
-        if (EVENT_DEBUG) System.out.println("titleChange " + title + ", "+ webBrowser);
+	private static final String FILE_SCHEME_SUFFIX = "file:///";
 
-        IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
-        IWorkbenchPage page = window.getActivePage();
+	private String unifyURLFileScheme(String url) {
+		if (url.startsWith(FILE_SCHEME_SUFFIX)) {
+			url = url.substring(FILE_SCHEME_SUFFIX.length());
+			try {
+				url = URLDecoder.decode(url, "UTF-8");
+			} catch (UnsupportedEncodingException e) {
+				e.printStackTrace();
+			}
+			return url.replace('/', '\\');
+		}
+		return url;
+	}
 
-        IEditorPart editor = page.getActiveEditor();
-        if (editor instanceof IModelServiceHolder) {
-            if (webBrowser != ((IModelServiceHolder) editor).getModelService()) {
-                return;
-            }
-        }
+	private boolean urlEquals(String url1, String url2) {
+		if ((url1 == null) || (url2 == null))
+			return false;
+		return unifyURLFileScheme(url1).equals(unifyURLFileScheme(url2));
+	}
 
-        setWindowTitle(title);
-    }
+	public void navigateComplete(IWebBrowserACTF webBrowser, String url) {
+		if (EVENT_DEBUG)
+			System.out.println("navigateComplete " + url + ", "
+					+ webBrowser.getURL() + " | " + webBrowser);
 
-    public void dispose() {
-    }
+		if (!urlEquals(url, webBrowser.getURL()))
+			return;
 
-    public void progressChange(IWebBrowserACTF webBrowser, int progress, int progressMax) {
-        if (EVENT_DEBUG) System.out.println("progressChange progress=" + progress + ", progressMax=" + progressMax + ", " + webBrowser);
-        BrowserState bs = getBrowserState(webBrowser);
-        bs.forwardState(BrowserState.STATE_PROGRESS);
-        bs.navigator.progressChange(progress, progressMax);
-    }
+		BrowserState bs = getBrowserState(webBrowser);
+		if ((bs.shouldRecord)
+				&& (bs.state < BrowserState.STATE_NAVIGATECOMPLETED)) {
+			tripJournal.recordJournal(bs.navigator, bs.savedLocation,
+					webBrowser.getURL(), bs.initFlag);
+		}
+		bs.forwardState(BrowserState.STATE_NAVIGATECOMPLETED);
+		bs.navigator.navigateComplete();
+	}
 
-    public void rootDocumentComplete(IWebBrowserACTF webBrowser) {
-        if (EVENT_DEBUG) System.out.println("myDocumentComplete " + webBrowser);
-        BrowserState bs = getBrowserState(webBrowser);
-        
-        if (!(ABOUT_BLANK_URL.equals(webBrowser.getURL()))) {
-            bs.navigator.speakTab(false);
-            startNavigation(webBrowser);
-        } else {
-            bs.setNoState();
-        }
-    }
+	public void titleChange(IWebBrowserACTF webBrowser, String title) {
+		if (EVENT_DEBUG)
+			System.out.println("titleChange " + title + ", " + webBrowser);
 
-    public void focusChange(IWebBrowserACTF webBrowser) {
-        if (EVENT_DEBUG) System.out.println("focusChange " + webBrowser);
-        BrowserState bs = getBrowserState(webBrowser);
-        ManipulatorExtension.setNavigator(bs.navigator);
-        requestBroker.setNavigator(bs.navigator, webBrowser);
-        MediaControlExtension.start(bs.navigator.getMediaControlHandle());
-        setWindowTitle();
-    }
+		IWorkbenchWindow window = PlatformUI.getWorkbench()
+				.getActiveWorkbenchWindow();
+		IWorkbenchPage page = window.getActivePage();
 
-    private void setWindowTitle(String title) {
-        String productName = Platform.getProduct().getName();
-        PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().setText(title + " - " + productName);
-    }
+		IEditorPart editor = page.getActiveEditor();
+		if (editor instanceof IModelServiceHolder) {
+			if (webBrowser != ((IModelServiceHolder) editor).getModelService()) {
+				return;
+			}
+		}
 
-    private void setWindowTitle() {
-        IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
-        IWorkbenchPage page = window.getActivePage();
-        String title = page.getActiveEditor().getTitle();
-        setWindowTitle(title);
-    }
+		setWindowTitle(title);
+	}
 
-    public void beforeNavigate(IWebBrowserACTF webBrowser,
-                               String url,
-                               String targetFrameName,
-                               boolean isInNavigation) {
-        if (EVENT_DEBUG) System.out.println("beforeNavigate " + url + ", " + targetFrameName + ", isInNavigation=" + isInNavigation);
-        BrowserState bs = getBrowserState(webBrowser);
-        //if (isInNavigation) {
-        if (!url.startsWith("javascript")) {
-            if (!(ABOUT_BLANK_URL.equals(url))) {
-                if (bs.state == BrowserState.STATE_NONE) {
-                    bs.initFlag = true;
-                } else {
-                    bs.initFlag = false;
-                }
-                bs.shouldRecord = true;
-                bs.savedLocation = bs.navigator.getLocation();
-            } else {
-                bs.shouldRecord = false;
-            }
-            bs.resetState();
-            bs.navigator.beforeNavigation(webBrowser.getURL());
-        } else {
-            bs.shouldRecord = false;
-        }
-        ScreenReaderExtension.takeBackControl(webBrowser);
-    }
+	public void dispose() {
+	}
 
-    public void browserDisposed(IWebBrowserACTF webBrowser, String title) {
-        if (EVENT_DEBUG) System.out.println("browserDisposed " + title);
-        BrowserState bs = getBrowserState(webBrowser);
-        bs.navigator.speakCloseTab(title);
+	public void progressChange(IWebBrowserACTF webBrowser, int progress,
+			int progressMax) {
+		if (EVENT_DEBUG)
+			System.out.println("progressChange progress=" + progress
+					+ ", progressMax=" + progressMax + ", " + webBrowser);
+		BrowserState bs = getBrowserState(webBrowser);
+		bs.forwardState(BrowserState.STATE_PROGRESS);
+		bs.navigator.progressChange(progress, progressMax);
+	}
 
-        IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
-        IWorkbenchPage page = window.getActivePage();
-        if ((page == null) || (page.getActiveEditor() == null)) {
-            setWindowTitle("No Tab");
-        }
-    }
+	public void rootDocumentComplete(IWebBrowserACTF webBrowser) {
+		if (EVENT_DEBUG)
+			System.out.println("myDocumentComplete " + webBrowser);
+		BrowserState bs = getBrowserState(webBrowser);
 
-    public void refreshStart(IWebBrowserACTF webBrowser) {
-        if (EVENT_DEBUG) System.out.println("myRefresh " + webBrowser);
-        BrowserState bs = getBrowserState(webBrowser);
-        bs.resetState();
-        bs.savedLocationForMyRefresh = bs.navigator.getLocation();
-        bs.navigator.beforeNavigation(webBrowser.getURL());
-    }
+		if (!(ABOUT_BLANK_URL.equals(webBrowser.getURL()))) {
+			bs.navigator.speakTab(false);
+			startNavigation(webBrowser);
+		} else {
+			bs.setNoState();
+		}
+	}
 
-    public void refreshComplete(IWebBrowserACTF webBrowser) {
-        if (EVENT_DEBUG) System.out.println("Refresh Complete " + webBrowser);
-        BrowserState bs = getBrowserState(webBrowser);
-        bs.navigator.restoreLocation(bs.savedLocationForMyRefresh);
-        startNavigation(webBrowser, true);
-    }
+	public void focusChange(IWebBrowserACTF webBrowser) {
+		if (EVENT_DEBUG)
+			System.out.println("focusChange " + webBrowser);
+		BrowserState bs = getBrowserState(webBrowser);
+		ManipulatorExtension.setNavigator(bs.navigator);
+		requestBroker.setNavigator(bs.navigator, webBrowser);
+		MediaControlExtension.start(bs.navigator.getMediaControlHandle());
+		setWindowTitle();
+	}
 
-    public void navigateStop(IWebBrowserACTF webBrowser) {
-        if (EVENT_DEBUG) System.out.println("navigateStop " + webBrowser);
-    }
+	private void setWindowTitle(String title) {
+		String productName = Platform.getProduct().getName();
+		PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell()
+				.setText(title + " - " + productName);
+	}
 
-    public void focusGainedOfAddressText(IWebBrowserACTF webBrowser) {
-        if (EVENT_DEBUG) System.out.println("focusGainedOfAddressText " + webBrowser);
-        BrowserState bs = getBrowserState(webBrowser);
-        bs.navigator.enterBrowserAddress();
-    }
+	private void setWindowTitle() {
+		IWorkbenchWindow window = PlatformUI.getWorkbench()
+				.getActiveWorkbenchWindow();
+		IWorkbenchPage page = window.getActivePage();
+		String title = page.getActiveEditor().getTitle();
+		setWindowTitle(title);
+	}
 
-    public void focusLostOfAddressText(IWebBrowserACTF webBrowser) {
-        if (EVENT_DEBUG) System.out.println("focusLostOfAddressText " + webBrowser);
-        BrowserState bs = getBrowserState(webBrowser);
-        bs.navigator.exitFormMode();
-    }
+	public void beforeNavigate(IWebBrowserACTF webBrowser, String url,
+			String targetFrameName, boolean isInNavigation) {
+		if (EVENT_DEBUG)
+			System.out.println("beforeNavigate " + url + ", " + targetFrameName
+					+ ", isInNavigation=" + isInNavigation);
+		BrowserState bs = getBrowserState(webBrowser);
+		// if (isInNavigation) {
+		if (!url.startsWith("javascript")) {
+			if (!(ABOUT_BLANK_URL.equals(url))) {
+				if (bs.state == BrowserState.STATE_NONE) {
+					bs.initFlag = true;
+				} else {
+					bs.initFlag = false;
+				}
+				bs.shouldRecord = true;
+				bs.savedLocation = bs.navigator.getLocation();
+			} else {
+				bs.shouldRecord = false;
+			}
+			bs.resetState();
+			bs.navigator.beforeNavigation(webBrowser.getURL());
+		} else {
+			bs.shouldRecord = false;
+		}
+		ScreenReaderExtension.takeBackControl(webBrowser);
+	}
 
-    public void newWindow(IWebBrowserACTF webBrowser) {
-        if (EVENT_DEBUG) System.out.println("newWindow " + webBrowser);
-        BrowserState bs = getBrowserState(webBrowser);
-        bs.navigator.speakOpenTab();
-    }
+	public void browserDisposed(IWebBrowserACTF webBrowser, String title) {
+		if (EVENT_DEBUG)
+			System.out.println("browserDisposed " + title);
+		BrowserState bs = getBrowserState(webBrowser);
+		bs.navigator.speakCloseTab(title);
+
+		IWorkbenchWindow window = PlatformUI.getWorkbench()
+				.getActiveWorkbenchWindow();
+		IWorkbenchPage page = window.getActivePage();
+		if ((page == null) || (page.getActiveEditor() == null)) {
+			setWindowTitle("No Tab");
+		}
+	}
+
+	public void refreshStart(IWebBrowserACTF webBrowser) {
+		if (EVENT_DEBUG)
+			System.out.println("myRefresh " + webBrowser);
+		BrowserState bs = getBrowserState(webBrowser);
+		bs.resetState();
+		bs.savedLocationForMyRefresh = bs.navigator.getLocation();
+		bs.navigator.beforeNavigation(webBrowser.getURL());
+	}
+
+	public void refreshComplete(IWebBrowserACTF webBrowser) {
+		if (EVENT_DEBUG)
+			System.out.println("Refresh Complete " + webBrowser);
+		BrowserState bs = getBrowserState(webBrowser);
+		bs.navigator.restoreLocation(bs.savedLocationForMyRefresh);
+		startNavigation(webBrowser, true);
+	}
+
+	public void navigateStop(IWebBrowserACTF webBrowser) {
+		if (EVENT_DEBUG)
+			System.out.println("navigateStop " + webBrowser);
+	}
+
+	public void focusGainedOfAddressText(IWebBrowserACTF webBrowser) {
+		if (EVENT_DEBUG)
+			System.out.println("focusGainedOfAddressText " + webBrowser);
+		BrowserState bs = getBrowserState(webBrowser);
+		bs.navigator.enterBrowserAddress();
+	}
+
+	public void focusLostOfAddressText(IWebBrowserACTF webBrowser) {
+		if (EVENT_DEBUG)
+			System.out.println("focusLostOfAddressText " + webBrowser);
+		BrowserState bs = getBrowserState(webBrowser);
+		bs.navigator.exitFormMode();
+	}
+
+	public void newWindow(IWebBrowserACTF webBrowser) {
+		if (EVENT_DEBUG)
+			System.out.println("newWindow " + webBrowser);
+		BrowserState bs = getBrowserState(webBrowser);
+		bs.navigator.speakOpenTab();
+	}
 
 }
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/preferences/UserInfoPreferenceInitializer.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/preferences/UserInfoPreferenceInitializer.java
index 09f4713..e49f1b0 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/preferences/UserInfoPreferenceInitializer.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/preferences/UserInfoPreferenceInitializer.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.actf.ai.navigator.preferences;
 
-import org.eclipse.actf.ai.navigator.NavigatorPlugin;
+import org.eclipse.actf.ai.internal.navigator.NavigatorPlugin;
 import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
 import org.eclipse.jface.preference.IPreferenceStore;
 
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/preferences/UserInfoPreferencePage.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/preferences/UserInfoPreferencePage.java
index 9e19db8..8e87cea 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/preferences/UserInfoPreferencePage.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/preferences/UserInfoPreferencePage.java
@@ -10,8 +10,8 @@
  *******************************************************************************/
 package org.eclipse.actf.ai.navigator.preferences;
 
-import org.eclipse.actf.ai.navigator.Messages;
-import org.eclipse.actf.ai.navigator.NavigatorPlugin;
+import org.eclipse.actf.ai.internal.navigator.Messages;
+import org.eclipse.actf.ai.internal.navigator.NavigatorPlugin;
 import org.eclipse.jface.preference.BooleanFieldEditor;
 import org.eclipse.jface.preference.FieldEditorPreferencePage;
 import org.eclipse.ui.IWorkbench;
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/ui/NavigatorUIUtil.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/ui/NavigatorUIUtil.java
new file mode 100644
index 0000000..dfc881b
--- /dev/null
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/ui/NavigatorUIUtil.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and Others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Kentarou FUKUDA - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.actf.ai.navigator.ui;
+
+import org.eclipse.jface.action.IMenuManager;
+
+/**
+ * Utility class for Navigator UIs.
+ */
+public class NavigatorUIUtil {
+
+	/**
+	 * The navigator related menus will be added to this IMenuManager.
+	 */
+	public static IMenuManager menuManager;
+
+	/**
+	 * The view ID of the Navigator Tree View.
+	 */
+	public static final String NAVIGATOR_TREE_VIEW_ID = "org.eclipse.actf.ai.navigator.views.NavigatorTreeView"; //$NON-NLS-1$
+
+}
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/userinfo/impl/AltInputDialog.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/userinfo/impl/AltInputDialog.java
index 22d9661..08a4fe8 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/userinfo/impl/AltInputDialog.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/userinfo/impl/AltInputDialog.java
@@ -11,7 +11,7 @@
 
 package org.eclipse.actf.ai.navigator.userinfo.impl;
 
-import org.eclipse.actf.ai.navigator.Messages;
+import org.eclipse.actf.ai.internal.navigator.Messages;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/userinfo/impl/MetaDataModifier.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/userinfo/impl/MetaDataModifier.java
index 687cc11..4fa20ae 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/userinfo/impl/MetaDataModifier.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/userinfo/impl/MetaDataModifier.java
@@ -24,7 +24,7 @@
 import org.eclipse.actf.ai.xmlstore.IXMLStore;
 import org.eclipse.actf.ai.xmlstore.IXMLStoreService;
 import org.eclipse.actf.ai.xmlstore.XMLStoreException;
-import org.eclipse.actf.ai.xmlstore.XMLStorePlugin;
+import org.eclipse.actf.ai.xmlstore.XMLStoreServiceUtil;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -84,7 +84,7 @@
     }
     
     private IXMLEditableInfo getUserInfo() throws XMLStoreException {
-        IXMLStoreService service = XMLStorePlugin.getDefault().getXMLStoreService();
+        IXMLStoreService service = XMLStoreServiceUtil.getXMLStoreService();
         IXMLEditableInfo info = getStoredUserInfo(service);
         if (info != null) {
             return info;
@@ -126,7 +126,7 @@
     }
     
     public boolean remove() throws XMLStoreException {
-        IXMLStoreService service = XMLStorePlugin.getDefault().getXMLStoreService();
+        IXMLStoreService service = XMLStoreServiceUtil.getXMLStoreService();
         IXMLEditableInfo info = getStoredUserInfo(service);
 
         if (info == null) {
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/ui/URLOpenDialog.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/util/URLOpenDialog.java
similarity index 97%
rename from plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/ui/URLOpenDialog.java
rename to plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/util/URLOpenDialog.java
index bcde4b7..918d226 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/ui/URLOpenDialog.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/util/URLOpenDialog.java
@@ -8,9 +8,9 @@
  * Contributors:
  *    Daisuke SATO - initial API and implementation
  *******************************************************************************/
-package org.eclipse.actf.ai.navigator.ui;
+package org.eclipse.actf.ai.navigator.util;
 
-import org.eclipse.actf.ai.navigator.Messages;
+import org.eclipse.actf.ai.internal.navigator.Messages;
 import org.eclipse.actf.ui.util.IDialogConstants;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
diff --git a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/views/NavigatorTreeView.java b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/views/NavigatorTreeView.java
index 5d13f12..450c64b 100644
--- a/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/views/NavigatorTreeView.java
+++ b/plugins/org.eclipse.actf.ai.navigator/src/org/eclipse/actf/ai/navigator/views/NavigatorTreeView.java
@@ -11,10 +11,11 @@
 package org.eclipse.actf.ai.navigator.views;
 
 import org.eclipse.actf.ai.fennec.treemanager.ITreeItem;
+import org.eclipse.actf.ai.internal.navigator.Messages;
+import org.eclipse.actf.ai.internal.navigator.NavigatorPlugin;
 import org.eclipse.actf.ai.navigator.IManipulator;
-import org.eclipse.actf.ai.navigator.Messages;
-import org.eclipse.actf.ai.navigator.NavigatorPlugin;
 import org.eclipse.actf.ai.navigator.ui.ModeContribution;
+import org.eclipse.actf.ai.navigator.ui.NavigatorUIUtil;
 import org.eclipse.actf.util.vocab.Vocabulary;
 import org.eclipse.jface.action.IStatusLineManager;
 import org.eclipse.jface.viewers.ArrayContentProvider;
@@ -258,20 +259,20 @@
 
     public boolean isShown() {
         IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
-        IViewPart part = page.findView(NavigatorPlugin.NAVIGATOR_TREE_VIEW_ID);
+        IViewPart part = page.findView(NavigatorUIUtil.NAVIGATOR_TREE_VIEW_ID);
         return part != null;
     }
 
     public boolean toggleViewShowing() {
         IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
-        IViewPart part = page.findView(NavigatorPlugin.NAVIGATOR_TREE_VIEW_ID);
+        IViewPart part = page.findView(NavigatorUIUtil.NAVIGATOR_TREE_VIEW_ID);
 
         if (part != null) {
             page.hideView(part);
             return false;
         } else {
             try {
-                page.showView(NavigatorPlugin.NAVIGATOR_TREE_VIEW_ID);
+                page.showView(NavigatorUIUtil.NAVIGATOR_TREE_VIEW_ID);
                 return true;
             } catch (PartInitException e) {
                 e.printStackTrace();
diff --git a/plugins/org.eclipse.actf.ai.query/META-INF/MANIFEST.MF b/plugins/org.eclipse.actf.ai.query/META-INF/MANIFEST.MF
index 9853735..2094011 100644
--- a/plugins/org.eclipse.actf.ai.query/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.actf.ai.query/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: Eclipse ACTF Query Plug-in (Incubation)
 Bundle-SymbolicName: org.eclipse.actf.ai.query
 Bundle-Version: 0.0.1.qualifier
-Bundle-Activator: org.eclipse.actf.ai.query.QueryPlugin
+Bundle-Activator: org.eclipse.actf.ai.internal.query.QueryPlugin
 Bundle-Vendor: Eclipse.org
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.actf.model.dom.dombycom,
diff --git a/plugins/org.eclipse.actf.ai.query/src/org/eclipse/actf/ai/query/QueryPlugin.java b/plugins/org.eclipse.actf.ai.query/src/org/eclipse/actf/ai/internal/query/QueryPlugin.java
similarity index 96%
rename from plugins/org.eclipse.actf.ai.query/src/org/eclipse/actf/ai/query/QueryPlugin.java
rename to plugins/org.eclipse.actf.ai.query/src/org/eclipse/actf/ai/internal/query/QueryPlugin.java
index cb594c0..799af5a 100644
--- a/plugins/org.eclipse.actf.ai.query/src/org/eclipse/actf/ai/query/QueryPlugin.java
+++ b/plugins/org.eclipse.actf.ai.query/src/org/eclipse/actf/ai/internal/query/QueryPlugin.java
@@ -9,7 +9,7 @@
  *    Hisashi MIYASHITA - initial API and implementation
  *******************************************************************************/
 
-package org.eclipse.actf.ai.query;
+package org.eclipse.actf.ai.internal.query;
 
 import org.eclipse.core.runtime.Plugin;
 import org.osgi.framework.BundleContext;
diff --git a/plugins/org.eclipse.actf.ai.xmlstore/META-INF/MANIFEST.MF b/plugins/org.eclipse.actf.ai.xmlstore/META-INF/MANIFEST.MF
index 61aae2b..1e63ce5 100644
--- a/plugins/org.eclipse.actf.ai.xmlstore/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.actf.ai.xmlstore/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: Eclipse ACTF XML store Plug-in (Incubation)
 Bundle-SymbolicName: org.eclipse.actf.ai.xmlstore
 Bundle-Version: 0.0.1.qualifier
-Bundle-Activator: org.eclipse.actf.ai.xmlstore.XMLStorePlugin
+Bundle-Activator: org.eclipse.actf.ai.internal.xmlstore.XMLStorePlugin
 Bundle-Vendor: Eclipse.org
 Require-Bundle: org.eclipse.core.runtime
 Eclipse-LazyStart: true
diff --git a/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/XMLStorePlugin.java b/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/internal/xmlstore/XMLStorePlugin.java
similarity index 78%
rename from plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/XMLStorePlugin.java
rename to plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/internal/xmlstore/XMLStorePlugin.java
index 81b8467..685e3a1 100644
--- a/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/XMLStorePlugin.java
+++ b/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/internal/xmlstore/XMLStorePlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and Others
+ * Copyright (c) 2007, 2008 IBM Corporation and Others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,10 +9,11 @@
  *    Hisashi MIYASHITA - initial API and implementation
  *******************************************************************************/
 
-package org.eclipse.actf.ai.xmlstore;
+package org.eclipse.actf.ai.internal.xmlstore;
 
 import java.io.File;
 
+import org.eclipse.actf.ai.xmlstore.XMLStoreServiceUtil;
 import org.eclipse.actf.ai.xmlstore.local.UserXMLStore;
 import org.eclipse.actf.ai.xmlstore.local.XMLStoreLocal;
 import org.eclipse.actf.ai.xmlstore.spi.XMLStoreServiceImpl;
@@ -87,32 +88,12 @@
 		return stateLocationPath.toFile();
 	}
 
-	private static final String[] XML_EXT = new String[] { ".xml", ".fnc" };
-
 	private void initialize() {
 		XMLStoreServiceImpl.getInstance().setUserStore(
 				new UserXMLStore(getLocalDir(UserXMLStore.TEMP_DIR_NAME),
-						XML_EXT));
+						XMLStoreServiceUtil.XML_EXT));
 		XMLStoreServiceImpl.getInstance().addStore(
 				new XMLStoreLocal(getLocalDir(XMLStoreLocal.SYSTEM_DIR_NAME),
-						XML_EXT));
-	}
-
-	/**
-	 * The settings of the application should be contained in the system store.
-	 * 
-	 * @param location
-	 *            the location to be added for searching XML files.
-	 */
-	public void addSystemStore(File location) {
-		XMLStoreServiceImpl.getInstance().addStore(
-				new XMLStoreLocal(location, XML_EXT));
-	}
-
-	/**
-	 * @return the singleton instance of the IXMLStoreService.
-	 */
-	public IXMLStoreService getXMLStoreService() {
-		return XMLStoreServiceImpl.getInstance();
+						XMLStoreServiceUtil.XML_EXT));
 	}
 }
diff --git a/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/XMLStoreServiceUtil.java b/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/XMLStoreServiceUtil.java
new file mode 100644
index 0000000..69e025b
--- /dev/null
+++ b/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/XMLStoreServiceUtil.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and Others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Kentarou FUKUDA - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.actf.ai.xmlstore;
+
+import java.io.File;
+
+import org.eclipse.actf.ai.xmlstore.local.XMLStoreLocal;
+import org.eclipse.actf.ai.xmlstore.spi.XMLStoreServiceImpl;
+
+/**
+ * Utility class for IXMLStoreService
+ */
+public class XMLStoreServiceUtil {
+
+	/**
+	 * The extensions for the XML files used for addSystemStore method.
+	 */
+	public static final String[] XML_EXT = new String[] { ".xml", ".fnc" };
+
+	/**
+	 * The settings of the application should be contained in the system store.
+	 * 
+	 * @param location
+	 *            the location to be added for searching XML files.
+	 */
+	public static void addSystemStore(File location) {
+		XMLStoreServiceImpl.getInstance().addStore(
+				new XMLStoreLocal(location, XMLStoreServiceUtil.XML_EXT));
+	}
+
+	/**
+	 * @return the singleton instance of the IXMLStoreService.
+	 */
+	public static IXMLStoreService getXMLStoreService() {
+		return XMLStoreServiceImpl.getInstance();
+	}
+
+
+}
diff --git a/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/spi/XMLStoreServiceImpl.java b/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/spi/XMLStoreServiceImpl.java
index a4279e8..f8588f0 100644
--- a/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/spi/XMLStoreServiceImpl.java
+++ b/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/spi/XMLStoreServiceImpl.java
@@ -21,13 +21,13 @@
 import java.util.zip.ZipInputStream;
 import java.util.zip.ZipOutputStream;
 
+import org.eclipse.actf.ai.internal.xmlstore.XMLStorePlugin;
 import org.eclipse.actf.ai.xmlstore.IXMLEditableInfo;
 import org.eclipse.actf.ai.xmlstore.IXMLInfo;
 import org.eclipse.actf.ai.xmlstore.IXMLSelector;
 import org.eclipse.actf.ai.xmlstore.IXMLStore;
 import org.eclipse.actf.ai.xmlstore.IXMLStoreService;
 import org.eclipse.actf.ai.xmlstore.XMLStoreException;
-import org.eclipse.actf.ai.xmlstore.XMLStorePlugin;
 import org.eclipse.actf.ai.xmlstore.local.UserXMLStore;
 import org.eclipse.actf.ai.xmlstore.local.XMLStoreLocal;
 
