diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/contexts.xml b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/contexts.xml
index b3b18ae..d144cdd 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/contexts.xml
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/contexts.xml
@@ -10,4 +10,7 @@
 			</enablement>
 		</topic>
 	</context>
+ <context id="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationSearching">
+    <command label="Help_Command"/>
+ </context>
 </contexts>
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/plugin.xml b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/plugin.xml
index a43c23e..f949824 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/plugin.xml
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/plugin.xml
@@ -97,6 +97,7 @@
                 name="addition2"
                 visible="true">
             </separator>
+ <!--
           <command
                 commandId="org.eclipse.mylyn.reviews.r4e-gerrit.ui.projectList"
                 id="r4eGerritUI.dropdown.toolbar.ProjectList"
@@ -119,6 +120,7 @@
                 name="addition4"
                 visible="true">
             </separator>
+ -->
           <command
                 commandId="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationIndex"
                 id="r4eGerritUI.dropdown.toolbar.Documentation"
@@ -281,6 +283,14 @@
                tooltip="Find the access controls of the documentation">
          </command>
 
+         <command
+               commandId="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationRestAPI"
+               id="r4eGerritUI.dropdown.toolbar.documentationRestAPI"
+               label="REST API"
+               style="push"
+               tooltip="Find the REST API of the documentation">
+         </command>
+
 
          <separator
                name="additions"
@@ -291,13 +301,14 @@
       
   </extension>
    
+ <!--
    <extension
          point="org.eclipse.help.contexts">
       <contexts
             file="contexts.xml">
       </contexts>
    </extension>
-   
+ -->  
    <extension
          point="org.eclipse.ui.commands">
 
@@ -369,8 +380,8 @@
             	name="DocumentationIndex">
       </command>
        <command
-            	id="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationSearching"
-            	name="DocumentationSearching">
+             	id="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationSearching"
+             	name="DocumentationSearching">
       </command>
        <command
             	id="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationUploading"
@@ -381,17 +392,28 @@
             	name="DocumentationAccessControls">
       </command>
       
+       <command
+            	id="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationRestAPI"
+            	name="DocumentationRestAPI">
+      </command>
+      
           <!-- The following are the commands under the "Review TableList" sub-menu
          -->
        <command
             	id="org.eclipse.mylyn.reviews.r4e-gerrit.ui.adjustMyStarred"
             	name="Toggle ID Selection">
       </command>
- 
+  
    </extension>
 
    <extension
          point="org.eclipse.ui.bindings">
+      <key
+            commandId="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationSearching"
+            contextId="org.eclipse.mylyn.reviews.r4e-gerrit.ui.context"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="F1">
+      </key>
    </extension>
    
    <extension
@@ -462,8 +484,8 @@
 	            commandId="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationIndex">
 	      </handler>
 	      <handler
-	            class="org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.commands.documentation.SearchingHandler"
-	            commandId="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationSearching">
+             	class="org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.commands.documentation.SearchingHandler"
+             	commandId="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationSearching">
 	      </handler>
 	      <handler
 	            class="org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.commands.documentation.UploadingHandler"
@@ -473,6 +495,10 @@
 	            class="org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.commands.documentation.AccessControlHandler"
 	            commandId="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationAccessControls">
 	      </handler>
+	      <handler
+	            class="org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.commands.documentation.RestAPIHandler"
+	            commandId="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationRestAPI">
+	      </handler>
 	     <!-- The following are the handlers under the "Table review list" sub-menu
          -->
 	      <handler
@@ -484,5 +510,14 @@
    <extension
          point="org.eclipse.mylyn.tasks.ui.editors">
    </extension>
+   <extension
+         point="org.eclipse.ui.contexts">
+      <context
+            description="Dashboard R4E-gerrit View"
+            id="org.eclipse.mylyn.reviews.r4e-gerrit.ui.context"
+            name="Dashboard View"
+            parentId="org.eclipse.ui.contexts.window">
+      </context>
+   </extension>
 
 </plugin>
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/AddGerritSiteHandler.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/AddGerritSiteHandler.java
index 913f07b..0034ef1 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/AddGerritSiteHandler.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/AddGerritSiteHandler.java
@@ -82,7 +82,7 @@
 
 	    R4EGerritPlugin.Ftracer.traceInfo("Create the Add button to search the Gerrit location " ); //$NON-NLS-1$
 		String menuItemText = "";
-		fServerUtil = new R4EGerritServerUtility();
+		fServerUtil = R4EGerritServerUtility.getInstance();
 		Object obj = aEvent.getTrigger();
 		Map<String, String> param = aEvent.getParameters();
 		R4EGerritTableView reviewTableView = R4EGerritTableView
@@ -186,7 +186,7 @@
 					TaskRepository taskRepositoryTmp = fServerUtil.getTaskRepo (taskRepository.getUrl());
 					if (taskRepositoryTmp == null) {
 						//Need to re-map our internal Gerrit Repo
-						fServerUtil.mapConfiguredGerritServer();
+						fServerUtil.getGerritMapping();
 					}
 					/*****************************************************/
 					/*                                                   */
@@ -227,7 +227,7 @@
 	private TaskRepository getTaskRepository (String aUrl) {
 		TaskRepository taskRepo = null;
 		//Search for the current Gerrit connector
-		taskRepo =  R4EGerritServerUtility.getDefault().getTaskRepo(aUrl);
+		taskRepo =  R4EGerritServerUtility.getInstance().getTaskRepo(aUrl);
 		
 		if (taskRepo == null) {
 			if (aUrl != null) {
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/SelectReviewSiteHandler.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/SelectReviewSiteHandler.java
index a92a114..a37fdd7 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/SelectReviewSiteHandler.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/SelectReviewSiteHandler.java
@@ -99,7 +99,7 @@
 
 
 				//Map the Gerrit server
-				fServerUtil = new R4EGerritServerUtility();
+				fServerUtil = R4EGerritServerUtility.getInstance();
 				
 				//Debug purpose, see which project have a gerrit server
 				fMapRepoServer = fServerUtil.getGerritMapping();
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/AccessControlHandler.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/AccessControlHandler.java
index e50e915..c1cd1aa 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/AccessControlHandler.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/AccessControlHandler.java
@@ -18,9 +18,8 @@
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.common.NotDefinedException;
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
-import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.UIUtils;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.R4EGerritServerUtility;
 
 /**
  * @author Jacques Bouthillier
@@ -30,21 +29,17 @@
 
 public class AccessControlHandler extends AbstractHandler {
 
+	private final String ACCESS_CONTROL_DOCUMENTATION = "Documentation/access-control.html";
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
 	@Override
 	public Object execute(ExecutionEvent aEvent) throws ExecutionException {
-		// TODO Auto-generated method stub
 		R4EGerritUi.Ftracer.traceInfo("Search the documentation AccessControlHandler  " ); //$NON-NLS-1$
 
-		R4EGerritUi.Ftracer.traceInfo("Execute:  AccessControlHandler() "  ); //$NON-NLS-1$
-		try {
-			UIUtils.notInplementedDialog(aEvent.getCommand().getName());
-		} catch (NotDefinedException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
+		R4EGerritServerUtility.getInstance().openWebBrowser (ACCESS_CONTROL_DOCUMENTATION);
+
 		return null;
 	}
 
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/IndexHandler.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/IndexHandler.java
index 809b681..65b2acc 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/IndexHandler.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/IndexHandler.java
@@ -18,9 +18,8 @@
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.common.NotDefinedException;
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
-import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.UIUtils;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.R4EGerritServerUtility;
 
 /**
  * @author Jacques Bouthillier
@@ -29,22 +28,18 @@
  */
 
 public class IndexHandler extends AbstractHandler {
-
+	
+	private final String INDEX_DOCUMENTATION = "Documentation/index.html";
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
 	@Override
 	public Object execute(ExecutionEvent aEvent) throws ExecutionException {
-		// TODO Auto-generated method stub
 		R4EGerritUi.Ftracer.traceInfo("Search the documentation IndexHandler  " ); //$NON-NLS-1$
 
-		R4EGerritUi.Ftracer.traceInfo("Execute:  IndexHandler() "  ); //$NON-NLS-1$
-		try {
-			UIUtils.notInplementedDialog(aEvent.getCommand().getName());
-		} catch (NotDefinedException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
+		R4EGerritServerUtility.getInstance().openWebBrowser (INDEX_DOCUMENTATION);
+
 		return null;
 	}
 
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/RestAPIHandler.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/RestAPIHandler.java
new file mode 100644
index 0000000..04bf965
--- /dev/null
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/RestAPIHandler.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Ericsson
+ * 
+ * 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
+ * 
+ * Description:
+ * 	This class implements the implementation of the R4E-Gerrit UI REST API 	reviews handler.
+ * 
+ * Contributors:
+ *   Jacques Bouthillier - Initial Implementation of the plug-in handler
+ ******************************************************************************/
+
+package org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.commands.documentation;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.R4EGerritServerUtility;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.UIUtils;
+import org.eclipse.mylyn.reviews.r4egerrit.ui.views.R4EGerritTableView;
+import org.osgi.framework.Version;
+
+/**
+ * @author Jacques Bouthillier
+ * @version $Revision: 1.0 $
+ *
+ */
+
+public class RestAPIHandler extends AbstractHandler {
+
+	private final String REST_API_DOCUMENTATION = "Documentation/rest-api.html";
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+	 */
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		R4EGerritUi.Ftracer.traceInfo("Search the documentation RestAPIHandler  " ); //$NON-NLS-1$
+		Version version = R4EGerritTableView.getActiveView().getlastGerritServerVersion();
+		//Testing the Gerrit server before getting the documentation
+		if (version != null) {
+			if (version.getMajor() >= 2) {
+				if (version.getMinor() < 5) {
+					String msg = "Selected Gerrit server: " + version.toString();
+					String reason = "Gerrit server is too old, need at least Gerrit version 2.5 \nto get Gerrit Code Review - REST API documentation.";
+					R4EGerritUi.Ftracer.traceInfo(msg );
+					UIUtils.showErrorDialog(msg, reason);
+					return null;
+				}
+			}
+		}
+		
+		R4EGerritServerUtility.getInstance().openWebBrowser (REST_API_DOCUMENTATION);
+		
+		return null;
+	}
+
+}
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/SearchingHandler.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/SearchingHandler.java
index 6316ea0..53fa4d6 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/SearchingHandler.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/SearchingHandler.java
@@ -18,9 +18,8 @@
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.common.NotDefinedException;
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
-import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.UIUtils;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.R4EGerritServerUtility;
 
 /**
  * @author Jacques Bouthillier
@@ -29,7 +28,11 @@
  */
 
 public class SearchingHandler extends AbstractHandler {
+	
 
+	private final String SEARCHING_DOCUMENTATION = "Documentation/user-search.html";
+
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
@@ -38,13 +41,8 @@
 		// TODO Auto-generated method stub
 		R4EGerritUi.Ftracer.traceInfo("Search the documentation SearchingHandler  " ); //$NON-NLS-1$
 
-		R4EGerritUi.Ftracer.traceInfo("Execute:  SearchingHandler() "  ); //$NON-NLS-1$
-		try {
-			UIUtils.notInplementedDialog(aEvent.getCommand().getName());
-		} catch (NotDefinedException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
+		R4EGerritServerUtility.getInstance().openWebBrowser (SEARCHING_DOCUMENTATION);
+
 		return null;
 	}
 
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/UploadingHandler.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/UploadingHandler.java
index 43323c9..f76efac 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/UploadingHandler.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/UploadingHandler.java
@@ -18,9 +18,8 @@
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.common.NotDefinedException;
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
-import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.UIUtils;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.R4EGerritServerUtility;
 
 /**
  * @author Jacques Bouthillier
@@ -30,21 +29,17 @@
 
 public class UploadingHandler extends AbstractHandler {
 
+	private final String UPLOADING_DOCUMENTATION = "Documentation/user-upload.html";
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
 	@Override
 	public Object execute(ExecutionEvent aEvent) throws ExecutionException {
-		// TODO Auto-generated method stub
 		R4EGerritUi.Ftracer.traceInfo("Search the documentation UploadingHandler  " ); //$NON-NLS-1$
 
-		R4EGerritUi.Ftracer.traceInfo("Execute:  UploadingHandler() "  ); //$NON-NLS-1$
-		try {
-			UIUtils.notInplementedDialog(aEvent.getCommand().getName());
-		} catch (NotDefinedException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
+		R4EGerritServerUtility.getInstance().openWebBrowser (UPLOADING_DOCUMENTATION);
+		
 		return null;
 	}
 
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/menus/DynamicMenuAddition.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/menus/DynamicMenuAddition.java
index 08a8bfb..c24681b 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/menus/DynamicMenuAddition.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/menus/DynamicMenuAddition.java
@@ -143,7 +143,7 @@
 		fServiceLocator = aServiceLocator;
 		
 		//Read the Gerrit potential servers
-		fServer = new R4EGerritServerUtility();
+		fServer = R4EGerritServerUtility.getInstance();
 		R4EGerritPlugin.Ftracer.traceInfo("\t\t DynamicMenuAddition .initialize()()" );
 		
 	}
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/utils/R4EGerritServerUtility.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/utils/R4EGerritServerUtility.java
index 0106c52..1652e2e 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/utils/R4EGerritServerUtility.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/utils/R4EGerritServerUtility.java
@@ -21,8 +21,9 @@
 import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -39,8 +40,13 @@
 import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager;
 import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
 import org.eclipse.mylyn.reviews.r4e_gerrit.R4EGerritPlugin;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
 import org.eclipse.mylyn.tasks.core.RepositoryTemplate;
 import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.ui.IEditorDescriptor;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.browser.IWorkbenchBrowserSupport;
 
 
 /**
@@ -75,20 +81,31 @@
 	 */
 	private static final String LAST_GERRIT_FILE = "lastGerrit.txt";
 
+	/**
+	 * Field ECLIPSE_GERRIT_DEFAULT. (value is ""https://git.eclipse.org/r/"")
+	 */
+	private final String ECLIPSE_GERRIT_DEFAULT = "https://git.eclipse.org/r/";
+	
+	/**
+	 * Field SLASH. (value is ""/"")
+	 */
+	private final String SLASH = "/";
+
+
+
 	// ------------------------------------------------------------------------
 	// Variables
 	// ------------------------------------------------------------------------
 
-	private static R4EGerritServerUtility instance = null;
+	private static R4EGerritServerUtility fInstance = null;
 
-	private static Map<TaskRepository, String> fResultTask = new HashMap<TaskRepository,String>();
+	private Map<TaskRepository, String> fResultTask = new HashMap<TaskRepository,String>();
 	
 	// ------------------------------------------------------------------------
 	// Constructors
 	// ------------------------------------------------------------------------
-	public R4EGerritServerUtility() {
-		instance = this;
-		mapConfiguredGerritServer();
+	protected R4EGerritServerUtility() {
+		fInstance = this;
 		
 		//LATER: Map the workspace gerrit to the menu option
 		//addWorkspaceGerritRepo();
@@ -98,36 +115,12 @@
 		//End Test
 	}
 
+
 	// ------------------------------------------------------------------------
 	// Methods Private
 	// ------------------------------------------------------------------------
 	
 	/**
-	 * Map the configured Gerrit server found in the TaskList
-	 * @return Map<TaskRepository, String>
-	 */
-	public Map<TaskRepository, String> mapConfiguredGerritServer () {
-		//Reset the list of Gerrit server
-		fResultTask.clear();
-		
-		TaskRepositoryManager repositoryManager = TasksUiPlugin.getRepositoryManager();
-		
-		//Only get the TaskRepository related to Gerrit review connnector
-		R4EGerritPlugin.Ftracer.traceInfo("--------Review repo ---------------");
-		Set<TaskRepository> reviewRepo = repositoryManager.getRepositories(GerritConnector.CONNECTOR_KIND);
-		for (TaskRepository taskRepo: reviewRepo) {
-		    R4EGerritPlugin.Ftracer.traceInfo("Add Gerrit Review repo: " + taskRepo.getRepositoryLabel() + "\t url: " + taskRepo.getRepositoryUrl());
-			fResultTask.put(taskRepo, taskRepo.getRepositoryUrl());
-			if (null != taskRepo.getRepositoryUrl()  ) {
-				adjustTemplatemanager(taskRepo);			
-			}
-		}
-		//Print a the end the info for all Gerrit 
-		printRepositoryTemplate();
-		return fResultTask;
-	}
-	
-	/**
 	 * Build a list of Gerrit server to display in the combo box in the dialogue window
 	 * @param aTaskRepo
 	 */
@@ -276,21 +269,84 @@
 		return file;
 	}
 	
+	/**
+	 * Build a URL for Gerrit documentation
+	 * @param aRequest specific documentation 
+	 * @return URL complete URL fo the selected site based on the Gerrit server and version
+	 * @throws MalformedURLException
+	 */
+	private URL buildDocumentationURL (String aRequest) throws MalformedURLException {
+		StringBuilder sb = new StringBuilder();
+
+		String lastSaved = getInstance ().getLastSavedGerritServer();
+		if (lastSaved == null) {
+			//Use Default, so ECLIPSE_GERRIT_DEFAULT
+			lastSaved = ECLIPSE_GERRIT_DEFAULT;
+		}
+		if (!lastSaved.endsWith(SLASH)) {
+			lastSaved = lastSaved.concat(SLASH);
+		}
+		sb.append(lastSaved);
+		sb.append(aRequest);
+		return new URL (sb.toString());
+	}
+	
+	/**
+	 * Search for a similar page in the eclipse editor
+	 * @param aUrl 
+	 * @return String
+	 */
+	private String getEditorId (URL aUrl) {
+		//Try to get the editor id
+		IEditorDescriptor desc = PlatformUI.getWorkbench().
+		        getEditorRegistry().getDefaultEditor(aUrl.getFile());
+		String id = null;
+		if (desc !=null) {
+			id = desc.getId();
+		}
+
+		return id;
+	}
+	
 	// ------------------------------------------------------------------------
 	// Methods Public
 	// ------------------------------------------------------------------------
-	public static R4EGerritServerUtility getDefault () {
-		if (instance == null) {
+	public static R4EGerritServerUtility getInstance () {
+		if (fInstance == null) {
 			new R4EGerritServerUtility();
 		}
-		return instance;
+		return fInstance;
 	}
 	
 	/**
 	 * Return the mapping of the available Gerrit server used in the user workspace
 	 * @return Map<Repository, String>
 	 */
-	public static Map<TaskRepository, String> getGerritMapping () {
+	public Map<TaskRepository, String> getGerritMapping () {
+		if (fResultTask == null ) {
+			fResultTask = new HashMap<TaskRepository,String>();
+		}
+			
+		
+		//Reset the list of Gerrit server
+		fResultTask.clear();
+		
+		TaskRepositoryManager repositoryManager = TasksUiPlugin.getRepositoryManager();
+		if (repositoryManager != null) {
+			//Only get the TaskRepository related to Gerrit review connnector
+			R4EGerritPlugin.Ftracer.traceInfo("--------Review repo ---------------");
+			Set<TaskRepository> reviewRepo = repositoryManager.getRepositories(GerritConnector.CONNECTOR_KIND);
+			for (TaskRepository taskRepo: reviewRepo) {
+			    R4EGerritPlugin.Ftracer.traceInfo("Add Gerrit Review repo: " + taskRepo.getRepositoryLabel() + "\t url: " + taskRepo.getRepositoryUrl());
+				fResultTask.put(taskRepo, taskRepo.getRepositoryUrl());
+				if (null != taskRepo.getRepositoryUrl()  ) {
+					adjustTemplatemanager(taskRepo);			
+				}
+			}
+			//Print a the end the info for all Gerrit 
+			printRepositoryTemplate();
+			
+		}
 		return fResultTask;
 	}
 	
@@ -345,6 +401,7 @@
 	 */
 	public String getMenuSelectionURL (String aSt) {
 		String urlStr = null;
+		fResultTask = getGerritMapping();
 		if (!fResultTask.isEmpty()) {
 			Set<TaskRepository> mapSet = fResultTask.keySet();
 			R4EGerritPlugin.Ftracer.traceInfo("-------------------");
@@ -369,7 +426,7 @@
 	 * 
 	 */
 	public TaskRepository getTaskRepo (String aStURL) {
-		
+		fResultTask = getGerritMapping();
 		if (aStURL != null && !fResultTask.isEmpty()) {
 			Set<TaskRepository> mapSet = fResultTask.keySet();
 			R4EGerritPlugin.Ftracer.traceInfo("-------------------");
@@ -384,8 +441,39 @@
 		
 		return null;
 	}
+	
 
 	/**
+	 * Open the web browser for the specific documentation
+	 * @param String aDocumentation requested documentation
+	 */
+	public void openWebBrowser (String aDocumentation) {
+		if (fInstance == null) {
+			fInstance = getInstance();
+		}
+
+		IWorkbenchBrowserSupport workBenchSupport = PlatformUI.getWorkbench().getBrowserSupport();
+		URL url = null;
+		try {
+			url = buildDocumentationURL (aDocumentation);
+			try {
+			
+				//Using NULL as a browser id will create a new editor each time, 
+				//so we need to see if there is already an editor for this help
+				String id = getEditorId (url);
+				workBenchSupport.createBrowser(id).openURL(url);
+			} catch (PartInitException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		} catch (MalformedURLException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		}
+		R4EGerritUi.Ftracer.traceInfo("openWebBrowser for " + url );
+	}
+	
+	/**
 	 * Read the Gerrit server to populate the list of reviews
 	 */
 	public void getReviewListFromServer () {
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4egerrit/ui/views/R4EGerritTableView.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4egerrit/ui/views/R4EGerritTableView.java
index 676756d..e09493c 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4egerrit/ui/views/R4EGerritTableView.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4egerrit/ui/views/R4EGerritTableView.java
@@ -92,10 +92,12 @@
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.menus.CommandContributionItem;
 import org.eclipse.ui.menus.CommandContributionItemParameter;
 import org.eclipse.ui.part.ViewPart;
 import org.eclipse.ui.services.IServiceLocator;
+import org.osgi.framework.Version;
 
 /**
  * This class initiate a new workbench view. The view
@@ -135,7 +137,12 @@
 
 	private final int SEARCH_WIDTH = 300;
 	private final int REPO_WIDTH = 200;
-	private final int VERSION_WIDTH = 70;
+	private final int VERSION_WIDTH = 100;
+	
+	private final String SEARCH_TOOLTIP = "Ex. status:open (or is:open) \n status:merged \n "
+			+ "is:draft \n status:open project:Foo \n "
+			+ "See explanation by selecting in the toolbar \n "
+			+ "Documentation > Searching";
 	
 	// ------------------------------------------------------------------------
 	// Member variables
@@ -166,7 +173,7 @@
 	private static TableViewer fViewer;
 	
 	private ReviewTableData fReviewTable = new ReviewTableData();
-	private R4EGerritServerUtility fServerUtil = new R4EGerritServerUtility();
+	private R4EGerritServerUtility fServerUtil = R4EGerritServerUtility.getInstance();
 
 	private Map<TaskRepository, String> fMapRepoServer = null;
 
@@ -349,6 +356,7 @@
 		//Create a SEARCH text data entry
 		fSearchRequestText = new Text (rightSsearchForm, SWT.BORDER);
 		fSearchRequestText.setLayoutData(new GridData(SEARCH_WIDTH, SWT.DEFAULT));
+		fSearchRequestText.setToolTipText(SEARCH_TOOLTIP);
 	
 		//Create a SEARCH button 
 		fSearchRequestBtn = new Button (rightSsearchForm, SWT.NONE);
@@ -551,7 +559,7 @@
 		
 		if (fTaskRepository == null) {
 			//If we did not find the task Repository
-			fMapRepoServer = R4EGerritServerUtility.getGerritMapping();
+			fMapRepoServer = R4EGerritServerUtility.getInstance().getGerritMapping();
 			//Verify How many gerrit server are defined
 			if (fMapRepoServer.size() == 1) {
 				Set<TaskRepository> mapSet = fMapRepoServer.keySet();
@@ -578,6 +586,50 @@
 	}
 	
 	/**
+	 * Find the last Gerrit server being used , otherwise consider the Eclipse.org gerrit server version as a default
+	 * @return Version
+	 */
+	public Version getlastGerritServerVersion () {
+		Version version = null;
+		String lastSaved = fServerUtil.getLastSavedGerritServer();
+		if (lastSaved != null) {
+			//Already saved a Gerrit server, so use it
+			fTaskRepository  = fServerUtil.getTaskRepo(lastSaved);
+		}
+		
+		if (fTaskRepository == null) {
+			//If we did not find the task Repository
+			fMapRepoServer = R4EGerritServerUtility.getInstance().getGerritMapping();
+			//Verify How many gerrit server are defined
+			if (fMapRepoServer.size() == 1) {
+				Set<TaskRepository> mapSet = fMapRepoServer.keySet();
+				for (TaskRepository key: mapSet) {
+				    fTaskRepository = key;
+					//Save it for the next query time
+					fServerUtil.saveLastGerritServer(key.getRepositoryUrl());
+					break;
+				}
+				
+			}
+		}
+		
+		//We should have a TaskRepository here, otherwise, the user need to define one
+		if (fTaskRepository != null) {
+			if (fConnector != null) {
+				GerritClient gerritClient = fConnector.getClient(fTaskRepository);
+				try {
+					version = gerritClient.getVersion(new NullProgressMonitor());
+					R4EGerritUi.Ftracer.traceInfo("Selected version: " + version.toString());
+				} catch (GerritException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
+		}
+		return version;
+	}
+	
+	/**
 	 * @param aTaskRepo
 	 * @param aQueryType
 	 * @return
@@ -615,7 +667,7 @@
 	                        setRepositoryLabel(aTaskRepo.getRepositoryLabel());
 	                        GerritClient gerritClient = fConnector.getClient(aTaskRepo);
 	                        try {
-								R4EGerritUi.Ftracer.traceInfo("Jb GerritClient: " + gerritClient.getVersion(new NullProgressMonitor()) );
+								R4EGerritUi.Ftracer.traceInfo("GerritClient: " + gerritClient.getVersion(new NullProgressMonitor()) );
 								setRepositoryVersionLabel (gerritClient.getVersion(new NullProgressMonitor()).toString() );
 							} catch (GerritException e1) {
 								e1.printStackTrace();
