Dashboard contribution (1)

Change-Id: Ia1e3b0bb5249ddcad2ceea7da8b1a488acaf27ec
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/META-INF/MANIFEST.MF b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/META-INF/MANIFEST.MF
index e843de3..ee5b32d 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/META-INF/MANIFEST.MF
@@ -5,6 +5,7 @@
 Bundle-Version: 0.2.1.qualifier
 Bundle-Activator: org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi
 Require-Bundle: org.eclipse.ui,
+ org.eclipse.ui.forms;bundle-version="3.6.0",
  org.eclipse.core.runtime,
  org.eclipse.mylyn.tasks.core;bundle-version="3.9.0",
  org.eclipse.mylyn.gerrit.core;bundle-version="2.0.0",
@@ -12,6 +13,7 @@
  org.eclipse.jgit,
  org.eclipse.mylyn.tasks.ui;bundle-version="3.9.0",
  org.eclipse.mylyn.reviews.core;bundle-version="2.0.0",
+ org.eclipse.mylyn.reviews.ui;bundle-version="2.0.1",
  org.eclipse.mylyn.commons.ui;bundle-version="3.9.0",
  org.eclipse.mylyn.reviews.r4e-gerrit;bundle-version="0.2.0"
 Bundle-ActivationPolicy: lazy
@@ -19,3 +21,4 @@
 Bundle-Vendor: %providerName
 Export-Package: org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.commands,
  org.eclipse.mylyn.reviews.r4egerrit.ui.views
+Import-Package: org.eclipse.mylyn.internal.gerrit.ui.editor
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/icons/view16/gerrit.ico b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/icons/view16/gerrit.ico
new file mode 100644
index 0000000..155217b
--- /dev/null
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/icons/view16/gerrit.ico
Binary files differ
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/icons/view16/minusOne.png b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/icons/view16/minusOne.png
new file mode 100644
index 0000000..1121f93
--- /dev/null
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/icons/view16/minusOne.png
Binary files differ
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/icons/view16/plusOne.png b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/icons/view16/plusOne.png
new file mode 100644
index 0000000..0089262
--- /dev/null
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/icons/view16/plusOne.png
Binary files differ
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/plugin.xml b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/plugin.xml
index dcc17d5..581c6c8 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/plugin.xml
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/plugin.xml
@@ -12,8 +12,8 @@
             id="org.eclipse.mylyn.reviews.r4e-gerrit.ui">
       </category>
       <view
-            name="R4E-Gerrit table"
-            icon="icons/view16/revnav_misc.gif"
+            name="Dashboard"
+            icon="icons/view16/gerrit.ico"
             category="org.eclipse.mylyn.reviews.r4e-gerrit.ui"
             class="org.eclipse.mylyn.reviews.r4egerrit.ui.views.R4EGerritTableView"
             id="org.eclipse.mylyn.reviews.r4egerrit.ui.views.R4EGerritTableView">
@@ -469,5 +469,8 @@
 	      </handler>
 	      
    </extension>
+   <extension
+         point="org.eclipse.mylyn.tasks.ui.editors">
+   </extension>
 
 </plugin>
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/internal/menus/DynamicMenuAddition.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/internal/menus/DynamicMenuAddition.java
new file mode 100644
index 0000000..770f4ee
--- /dev/null
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/internal/menus/DynamicMenuAddition.java
@@ -0,0 +1,135 @@
+/*******************************************************************************
+ * 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 Dynamic menu selection to pre-filled the list of gerrit
+ * 	project locations.
+ * 
+ * Contributors:
+ *   Jacques Bouthillier - Initial Implementation of the dynamic menu selection
+ ******************************************************************************/
+package org.eclipse.mylyn.reviews.r4e_gerrit.internal.menus;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.mylyn.reviews.r4e_gerrit.R4EGerritPlugin;
+import org.eclipse.mylyn.reviews.r4e_gerrit.internal.utils.R4EGerritServerUtility;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.R4EUIConstants;
+import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.ui.actions.CompoundContributionItem;
+import org.eclipse.ui.menus.CommandContributionItem;
+import org.eclipse.ui.menus.CommandContributionItemParameter;
+import org.eclipse.ui.menus.IWorkbenchContribution;
+import org.eclipse.ui.services.IServiceLocator;
+
+/**
+ * @author Jacques Bouthillier
+ * @version $Revision: 1.0 $
+ *
+ */
+public class DynamicMenuAddition extends CompoundContributionItem implements IWorkbenchContribution {
+
+
+	// ------------------------------------------------------------------------
+	// Constants
+	// ------------------------------------------------------------------------
+	
+	/**
+	 * Field SELECT_PICTURE_FILE. (value is ""icons/select.png"")
+	 */
+//	private String SELECT_PICTURE_FILE = "icons/select.png";
+	private static String SELECT_PICTURE_FILE = "icons/select.gif";
+	
+    /**
+     * Note: An image registry owns all of the image objects registered with it,
+     * and automatically disposes of them the SWT Display is disposed.
+     */
+    // For the images
+    private static ImageRegistry fImageRegistry = new ImageRegistry();
+
+    static {
+      fImageRegistry
+      .put(SELECT_PICTURE_FILE,
+              R4EGerritUi.getImageDescriptor(SELECT_PICTURE_FILE));
+    }
+
+    // ------------------------------------------------------------------------
+	// Variables
+	// ------------------------------------------------------------------------
+
+	private IServiceLocator fServiceLocator;
+	
+	private R4EGerritServerUtility fServer = null;
+	
+	private Map<TaskRepository, String> fMapServer = null;
+	
+	private ImageDescriptor fSelectPicture = null;
+	
+	// ------------------------------------------------------------------------
+	// Methods
+	// ------------------------------------------------------------------------
+	@Override
+	protected IContributionItem[] getContributionItems() {
+
+	    R4EGerritPlugin.Ftracer
+				.traceInfo("\t\t DynamicMenuAddition .getContributionItems()");
+		CommandContributionItem[] contributionItems = new CommandContributionItem[0];
+		if (fServer != null) {
+			fMapServer = fServer.getGerritMapping();
+		}
+
+		if (fMapServer != null && !fMapServer.isEmpty()) {
+			Set<TaskRepository> mapSet = fMapServer.keySet();
+			String lastSelected = fServer.getLastSavedGerritServer();
+			R4EGerritPlugin.Ftracer.traceInfo("-------------------");
+			int size = mapSet.size();
+			contributionItems = new CommandContributionItem[size];
+
+			int count = 0;
+			for (TaskRepository key : mapSet) {
+			    R4EGerritPlugin.Ftracer.traceInfo("Map Key: "
+						+ key.getRepositoryLabel() + "\t URL: "
+						+ fMapServer.get(key));
+				CommandContributionItemParameter contributionParameter = new CommandContributionItemParameter(
+						fServiceLocator, fMapServer.get(key),
+						R4EUIConstants.ADD_GERRIT_SITE_COMMAND_ID,
+						CommandContributionItem.STYLE_PUSH);
+				contributionParameter.label = key.getRepositoryLabel();
+				contributionParameter.visibleEnabled = true;
+				if (lastSelected != null
+						&& lastSelected.equals(fMapServer.get(key))) {
+					fSelectPicture = fImageRegistry.getDescriptor(SELECT_PICTURE_FILE);
+
+					contributionParameter.icon = fSelectPicture;
+
+				}
+				contributionItems[count++] = new CommandContributionItem(
+						contributionParameter);
+			}
+		}
+
+		return contributionItems;
+	}
+
+	@Override
+	public void initialize(IServiceLocator aServiceLocator) {
+		fServiceLocator = aServiceLocator;
+		
+		//Read the Gerrit potential servers
+		fServer = new R4EGerritServerUtility();
+		R4EGerritPlugin.Ftracer.traceInfo("\t\t DynamicMenuAddition .initialize()()" );
+		
+	}
+
+
+}
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/internal/utils/R4EGerritServerUtility.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/internal/utils/R4EGerritServerUtility.java
new file mode 100644
index 0000000..3bc4aec
--- /dev/null
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/internal/utils/R4EGerritServerUtility.java
@@ -0,0 +1,495 @@
+/*******************************************************************************
+ * 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 some utility for the Gerrit servers.
+ * 
+ * Contributors:
+ *   Jacques Bouthillier - Initial Implementation of the server selection
+ ******************************************************************************/
+
+package org.eclipse.mylyn.reviews.r4e_gerrit.internal.utils;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.egit.core.RepositoryCache;
+import org.eclipse.egit.core.RepositoryUtil;
+import org.eclipse.jgit.lib.Config;
+import org.eclipse.jgit.lib.ConfigConstants;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.mylyn.internal.gerrit.core.GerritConnector;
+import org.eclipse.mylyn.internal.tasks.core.RepositoryTemplateManager;
+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;
+
+
+/**
+ * @author Jacques Bouthillier
+ * @version $Revision: 1.0 $
+ *
+ */
+@SuppressWarnings("restriction")
+public class R4EGerritServerUtility {
+
+	// ------------------------------------------------------------------------
+	// Constants
+	// ------------------------------------------------------------------------
+
+	/**
+	 * Field GERRIT_PORT. (value is "":29418"")
+	 */
+	private static final String GERRIT_PORT = ":29418"; 
+
+	/**
+	 * Field AT. (value is ""@"")
+	 */
+	private static final String AT = "@"; 
+
+	/**
+	 * Field AT. (value is ""https://"")
+	 */
+	private static final String HTTPS = "https://"; 
+	
+	/**
+	 * Field LAST_GERRIT_FILE. (value is ""lastGerrit.txt"")
+	 */
+	private static final String LAST_GERRIT_FILE = "lastGerrit.txt";
+
+	// ------------------------------------------------------------------------
+	// Variables
+	// ------------------------------------------------------------------------
+
+	private static R4EGerritServerUtility instance = null;
+
+	private static Map<TaskRepository, String> fResultTask = new HashMap<TaskRepository,String>();
+	
+	// ------------------------------------------------------------------------
+	// Constructors
+	// ------------------------------------------------------------------------
+	public R4EGerritServerUtility() {
+		instance = this;
+		mapConfiguredGerritServer();
+		
+		//LATER: Map the workspace gerrit to the menu option
+		//addWorkspaceGerritRepo();
+		
+		//Begin Test
+		//testTaskRepo(); not needed anymore
+		//End Test
+	}
+
+	// ------------------------------------------------------------------------
+	// Methods Private
+	// ------------------------------------------------------------------------
+	
+	/**
+	 * Map the configured Gerrit server found in the TaskList
+	 * @return Map<TaskRepository, String>
+	 */
+	private 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
+	 */
+	private void adjustTemplatemanager (TaskRepository aTaskRepo) {
+		RepositoryTemplateManager templateManager = TasksUiPlugin.getRepositoryTemplateManager();
+		//Verify to only add once in the repository template
+		Boolean found = false;
+	//	printTaskRepository(aTaskRepo);
+		for (RepositoryTemplate template : templateManager.getTemplates(GerritConnector.CONNECTOR_KIND)) {
+			String convertedRemoteURL = aTaskRepo.getRepositoryUrl() ;
+			R4EGerritPlugin.Ftracer.traceInfo("\t template.label: " + template.label
+					+ "\t repo label: " + aTaskRepo.getRepositoryLabel() +" repo getname: " + convertedRemoteURL );
+			//Test the name and the remoteURL to reduce duplications
+			if (template.label.equals(aTaskRepo.getRepositoryLabel()) ||
+			    template.repositoryUrl.equals(convertedRemoteURL) ) {
+				found = true;
+				break;
+			}
+		}
+		
+		if (!found) {
+			//Set each parameter of the Gerrit server
+			String userName = aTaskRepo.getUserName();
+			Boolean anonymous = (userName != null &&  !userName.isEmpty()) ? false: true;
+			
+			//Create a repository template
+			RepositoryTemplate templateTest = new RepositoryTemplate(aTaskRepo.getRepositoryLabel(), 
+					aTaskRepo.getRepositoryUrl(),
+					aTaskRepo.getCharacterEncoding(),
+					aTaskRepo.getVersion(),
+					"", "", "", 
+					aTaskRepo.getUserName(), anonymous, true);
+			
+			//Set the attributes 
+			Map<String, String> attributes = aTaskRepo.getProperties();
+			
+			Set<Entry<String, String>> value = attributes.entrySet();
+			for ( Map.Entry <String, String> entry: value){
+				templateTest.addAttribute(entry.getKey(), entry.getValue());
+			}
+			templateManager.addTemplate(GerritConnector.CONNECTOR_KIND, templateTest);
+			
+		}
+	}
+	
+	private void printRepositoryTemplate() {
+		RepositoryTemplateManager templateManager = TasksUiPlugin.getRepositoryTemplateManager();
+		for (RepositoryTemplate template : templateManager.getTemplates(GerritConnector.CONNECTOR_KIND)) {
+		    R4EGerritPlugin.Ftracer.traceInfo("------------======================------------------");
+			 Set<Entry<String, String>> value = template.getAttributes().entrySet();
+			for (Map.Entry <String, String> entry: value) {
+			    R4EGerritPlugin.Ftracer.traceInfo("key: " + entry.getKey() + "\tvalue: " +
+						entry.getValue());
+			}
+		}
+	}
+
+	private void printTaskRepository(TaskRepository aTask) {
+		Set<Entry<String, String>> value = aTask.getProperties().entrySet();
+		for (Map.Entry<String, String> entry : value) {
+		    R4EGerritPlugin.Ftracer.traceInfo("TaskRepo key: " + entry.getKey()
+					+ "\tvalue: " + entry.getValue());
+		}
+		R4EGerritPlugin.Ftracer.traceInfo(" UserName: " + aTask.getUserName());
+		R4EGerritPlugin.Ftracer
+				.traceInfo("===================================");
+	}
+
+	/**
+	 * This method use the Gerrit from the git server in the workspace
+	 */
+    private void addWorkspaceGerritRepo () {
+		RepositoryUtil repoUtil = org.eclipse.egit.core.Activator.getDefault().getRepositoryUtil();
+		List<String> repoPaths = repoUtil.getConfiguredRepositories();
+		RepositoryCache repositoryCache = org.eclipse.egit.core.Activator.getDefault().getRepositoryCache();
+        Repository repo = null;
+		
+		for (String repoPath : repoPaths) {
+		    R4EGerritPlugin.Ftracer.traceInfo("List Gerrit repository: " + repoPath );
+			File gitDir = new File(repoPath);
+			if (!gitDir.exists()) {
+			    R4EGerritPlugin.Ftracer.traceInfo("Gerrit repository do not exist: " + gitDir.getPath());
+				continue;		
+			}
+			try {
+				repo = repositoryCache.lookupRepository(gitDir);
+				R4EGerritPlugin.Ftracer.traceInfo("\trepository config after lookup: " +
+						repo.getConfig());
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+			if (repo != null) {
+				Config config  = new Config(repo.getConfig());
+				//Look to get the remotes URL
+				Set<String> remotes = config.getSubsections(ConfigConstants.CONFIG_REMOTE_SECTION);
+				for (String remote: remotes) {
+					String remoteURL = config.getString(ConfigConstants.CONFIG_REMOTE_SECTION,
+							remote,
+							ConfigConstants.CONFIG_KEY_URL);
+					R4EGerritPlugin.Ftracer.traceInfo("\t\t " + remote +" -> remoteURL: " + remoteURL );
+					
+					//Test if this is a Gerrit server and add it to the Dialogue combo
+					String convertedRemoteURL = getReformatGerritServer(remoteURL) ;
+					if (null != convertedRemoteURL  ) {
+						TaskRepository taskRepo =  new TaskRepository(GerritConnector.CONNECTOR_KIND, convertedRemoteURL);
+						taskRepo.setRepositoryLabel(convertedRemoteURL);
+						fResultTask.put(taskRepo, taskRepo.getRepositoryUrl());
+						adjustTemplatemanager(taskRepo);
+						
+					}
+				}			
+			}
+		}
+	}
+	
+
+	//Note the Gerrit server for "git.eclipse.org" in config is 
+	//      not the same as in the task Repository: "git.eclipse.org/r"
+	/**
+	 * Verify if the gerrit remote URL has the gerrit port (29418 )
+	 * @param aRemoteURL
+	 * @return String remote converted URL
+	 */
+	private String getReformatGerritServer(String aRemoteURL) {
+		//Test if this is a Gerrit server or not
+		String[] strParsePort = aRemoteURL.split(GERRIT_PORT);
+		if (strParsePort.length == 2) {
+			//Do not convert it for now
+			return aRemoteURL;
+//			//We found a Gerrit server, lets build the URL
+//			//String[] strParseServer = strParsePort[0].split(AT);
+//			int index = strParsePort[0].indexOf(AT);
+//			String server = strParsePort[0].substring(++index);
+//			StringBuilder sb = new StringBuilder();
+//			sb.append(HTTPS);
+//			sb.append(server);
+//			return sb.toString();
+		}
+		return null;
+	}
+
+	private File getLastGerritFile () {
+		IPath ipath = R4EGerritUi.getDefault().getStateLocation();
+		String fileName = ipath.append(LAST_GERRIT_FILE).toPortableString();
+		File file = new File (fileName);
+		return file;
+	}
+	
+	// ------------------------------------------------------------------------
+	// Methods Public
+	// ------------------------------------------------------------------------
+	public static R4EGerritServerUtility getDefault () {
+		if (instance == null) {
+			new R4EGerritServerUtility();
+		}
+		return instance;
+	}
+	
+	/**
+	 * Return the mapping of the available Gerrit server used in the user workspace
+	 * @return Map<Repository, String>
+	 */
+	public static Map<TaskRepository, String> getGerritMapping () {
+		return fResultTask;
+	}
+	
+	/**
+	 * Save the selected Gerrit server URL
+	 * @param aURL
+	 * @return Boolean
+	 */
+	public Boolean saveLastGerritServer (String aURL) {
+		Boolean ok = true;
+		File file = getLastGerritFile();
+		try {
+			FileWriter fw= new FileWriter(file);
+			BufferedWriter out = new BufferedWriter(fw);
+			out.write(aURL);
+			out.close();
+		} catch (IOException e1) {
+			e1.printStackTrace();
+			ok = false;
+		}
+		
+		return ok;
+	}
+	
+	/**
+	 * Return the last selected Gerrit server used
+	 * @return String
+	 */
+	public String getLastSavedGerritServer () {
+		String lastGerritURL = null;
+		File file = getLastGerritFile();
+		if (file != null) {
+			try {
+				FileReader fr= new FileReader(file);
+				BufferedReader in = new BufferedReader(fr);
+				lastGerritURL = in.readLine();
+				in.close();
+			} catch (IOException e1) {
+				//When there is no file, 
+				//e1.printStackTrace();
+			}			
+		}
+		return lastGerritURL;
+	}
+	
+	/**
+	 * Get the Gerrit URL based on the provided string
+	 * 
+	 * @param  Menu string aSt
+	 * @return URL as a string
+	 * 
+	 */
+	public String getMenuSelectionURL (String aSt) {
+		String urlStr = null;
+		if (!fResultTask.isEmpty()) {
+			Set<TaskRepository> mapSet = fResultTask.keySet();
+			R4EGerritPlugin.Ftracer.traceInfo("-------------------");
+			for (TaskRepository key: mapSet) {
+				if (key.getRepositoryLabel().equals(aSt)) {
+					urlStr = fResultTask.get(key);
+					
+					R4EGerritPlugin.Ftracer.traceInfo("Map Key: " + key.getRepositoryLabel() + "\t URL: " + fResultTask.get(key));
+					return urlStr;
+				}
+			}
+		}
+		
+		return urlStr;
+	}
+
+	/**
+	 * Get the Gerrit task Repository
+	 * 
+	 * @param  string aSt
+	 * @return TaskRepository
+	 * 
+	 */
+	public TaskRepository getTaskRepo (String aStURL) {
+		
+		if (aStURL != null && !fResultTask.isEmpty()) {
+			Set<TaskRepository> mapSet = fResultTask.keySet();
+			R4EGerritPlugin.Ftracer.traceInfo("-------------------");
+			for (TaskRepository key: mapSet) {
+				if (key.getRepositoryUrl().equals(aStURL)) {
+					
+				    R4EGerritPlugin.Ftracer.traceInfo("Key label : " + key.getRepositoryLabel() + "\t URL: " + fResultTask.get(key));
+					return key;
+				}
+			}
+		}
+		
+		return null;
+	}
+
+	/**
+	 * Read the Gerrit server to populate the list of reviews
+	 */
+	public void getReviewListFromServer () {
+		//Get the Gerrit URL to query
+		String urlToUsed = getLastSavedGerritServer ();
+		
+		if (urlToUsed != null) {
+			//Initiate the request to populate the list of Reviews
+		    R4EGerritPlugin.Ftracer.traceInfo("use the following Gerrit URL to populate the list of reviews: " +  urlToUsed);
+			
+			// TODO: Make it pick the right repository
+			Set<TaskRepository> gerritRepositories = fResultTask.keySet();
+			Iterator<TaskRepository> it = gerritRepositories.iterator();
+			if (it.hasNext()) {
+	            TaskRepository repository = it.next();
+	     //       List<R4EGerritReviewSummary> reviews = getReviewListFromRepository(repository, GerritQuery.MY_WATCHED_CHANGES);
+	            // TODO: populate the Gerrit Dashboard with 'reviews'
+			}
+		} else {
+			//Open the dialogue to populate a Gerrit server, Should not happen here
+		    R4EGerritPlugin.Ftracer.traceInfo("Need to open the dialogue to populate a gerrit server" ); 			
+		}
+	}
+//
+//    /**
+//     * 
+//     */
+//    public static List<R4EGerritReviewSummary> getReviewListFromRepository(TaskRepository repository, String query) {
+//        List<R4EGerritReviewSummary> results = new ArrayList<R4EGerritReviewSummary>();
+//        R4EGerritQueryHandler handler = new R4EGerritQueryHandler(repository, query);
+//        IStatus status = handler.performQuery();
+//        if (status.isOK()) {
+//            for (R4EGerritReviewSummary summary : handler.getQueryResult()) {
+//                if (summary.getAttribute(R4EGerritReviewSummary.DATE_COMPLETION) == null) {
+//                    R4EGerritPlugin.Ftracer.traceInfo(summary.toString());
+//                    results.add(summary);
+//                }
+//            }
+//        }
+//        return results;
+//    }
+
+	/******************************************************************/
+	/******************************************************************/
+	/******************************************************************/
+	/******************************************************************/
+	/********  TEST   *************************************************/
+	/******************************************************************/
+	/******************************************************************/
+	/******************************************************************/
+	/******************************************************************/
+	
+	private void testTaskRepo () {
+	//	TaskRepository repository = new TaskRepository(GerritConnector.CONNECTOR_KIND, "http://repository"); //$NON-NLS-1$
+//		final TaskRepository repository = new TaskRepository(GerritConnector.CONNECTOR_KIND, "https://"); //$NON-NLS-1$
+		
+		final TaskRepository repository = getTaskRepository(); //$NON-NLS-1$
+		R4EGerritPlugin.Ftracer.traceInfo("repository:   " + repository.getUrl()); //$NON-NLS-1$
+//		int ret = TasksUiUtil.openEditRepositoryWizard(repository); //Generate a null pointer for the workbench window
+		
+		
+		R4EGerritPlugin.Ftracer.traceInfo("Before: repository url:   " + repository.getUrl() ); //$NON-NLS-1$
+
+	}
+	
+	/**
+	 * Look at the current Gerrit repository and return a default value 
+	 * i.e the first Gerrit if found ???
+	 * @return TaskRepository
+	 */
+	private TaskRepository getTaskRepository () {
+		TaskRepository taskRepo = null;
+		/**
+		 * Field DEFAULT_REPOSITORY. (value is ""https://repository"")
+		 */
+		String DEFAULT_REPOSITORY = "https://";
+		//Reset the list of Gerrit server
+		fResultTask.clear();
+
+
+		//Test to read the TaskRepositories
+		
+		TaskRepositoryManager repositoryManager = TasksUiPlugin.getRepositoryManager();
+		
+		//List all repositories in the the TaskRepositories view
+		List <TaskRepository>listallRepo = repositoryManager.getAllRepositories();
+		for (int i = 0;i < listallRepo.size(); i++) {
+		    R4EGerritPlugin.Ftracer.traceInfo("TaskRepositoryManager repository: [ " + i + " ] : " + listallRepo.get(i).getRepositoryLabel() );
+		}
+		
+		//Only get the TaskRepository related to Gerrit review connnector
+		R4EGerritPlugin.Ftracer.traceInfo("--------Review repo ---------------");
+		Set<TaskRepository> reviewRepo = repositoryManager.getRepositories(GerritConnector.CONNECTOR_KIND);
+		for (TaskRepository tp: reviewRepo) {
+		    R4EGerritPlugin.Ftracer.traceInfo("Only Gerrit Review repo: " + tp.getRepositoryLabel() + "\t url: " + tp.getRepositoryUrl());
+		}
+
+		//Testing bugzilla but need to add the mylyn bugzilla in plugin dependencies
+//		for (RepositoryTemplate template : templateManager.getTemplates(BugzillaCorePlugin.CONNECTOR_KIND)) {
+//			R4EGerritPlugin.Ftracer.traceInfo("Gerrit Bugzilla repository: " + template.label + "\t URL: " + template.repositoryUrl);
+//		}
+		
+		return taskRepo;
+	}
+
+}
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/table/AdjustMyStarredHandler.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/table/AdjustMyStarredHandler.java
index 759b400..439e6d6 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/table/AdjustMyStarredHandler.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/table/AdjustMyStarredHandler.java
@@ -21,7 +21,7 @@
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritReviewData;
+import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritTask;
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
 import org.eclipse.mylyn.reviews.r4egerrit.ui.views.R4EGerritTableView;
 
@@ -35,10 +35,11 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
+	@SuppressWarnings("restriction")
 	@Override
 	public Object execute(ExecutionEvent aEvent) throws ExecutionException {
 		//R4EGerritPlugin.Ftracer.traceInfo("AdjustMyStarred  " ); //$NON-NLS-1$
-		R4EGerritReviewData item = null;
+		R4EGerritTask item = null;
 		TableViewer viewer = R4EGerritTableView.getTableViewer();
 		ISelection tableSelection = viewer.getSelection();
 		if (tableSelection.isEmpty()) {
@@ -47,13 +48,13 @@
 		} else {
 			if (tableSelection instanceof IStructuredSelection ) {
 				Object obj = ((IStructuredSelection) tableSelection).getFirstElement();
-				if (obj instanceof  R4EGerritReviewData) {
-					item = (R4EGerritReviewData) obj;
+				if (obj instanceof  R4EGerritTask) {
+					item = (R4EGerritTask) obj;
 					//R4EGerritPlugin.Ftracer.traceInfo("Selected table OBJECT selection ID: "  + item.getId() ); 				
-					if (Boolean.valueOf(item.getAttribute(R4EGerritReviewData.REVIEW_FLAG_STAR))) {
-						item.setAttribute(R4EGerritReviewData.REVIEW_FLAG_STAR, Boolean.toString(false));
-					} else if (!Boolean.valueOf(item.getAttribute(R4EGerritReviewData.REVIEW_FLAG_STAR))) {
-						item.setAttribute(R4EGerritReviewData.REVIEW_FLAG_STAR, Boolean.toString(true));
+					if (Boolean.valueOf(item.getAttribute(R4EGerritTask.IS_STARRED))) {
+						item.setAttribute(R4EGerritTask.IS_STARRED, Boolean.toString(false));
+					} else if (!Boolean.valueOf(item.getAttribute(R4EGerritTask.IS_STARRED))) {
+						item.setAttribute(R4EGerritTask.IS_STARRED, Boolean.toString(true));
 					}
 					viewer.update(item, null);
 				}
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableContentProvider.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableContentProvider.java
index cfa4f7d..ce2a1d5 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableContentProvider.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableContentProvider.java
@@ -16,7 +16,7 @@
 
 import org.eclipse.jface.viewers.IStructuredContentProvider;
 import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritReviewData;
+import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritTask;
 
 /**
  * @author Jacques Bouthillier
@@ -58,14 +58,14 @@
 	@Override
 	public Object[] getElements(Object aInputElement) {
 		//R4EGerritPlugin.Ftracer.traceInfo("getElements() content provider Object: " + aInputElement);
-		if (aInputElement instanceof R4EGerritReviewData[]) {
-			R4EGerritReviewData[] itemList = (R4EGerritReviewData[]) aInputElement;
+		if (aInputElement instanceof R4EGerritTask[]) {
+			R4EGerritTask[] itemList = (R4EGerritTask[]) aInputElement;
 			return itemList;
 		}
 		//This null will generate an error if we reach this point, may be we should log an error and 
 		// initiate an empty structure to return
 		//return null;
-		return  new R4EGerritReviewData[] {};
+		return  new R4EGerritTask[] {};
 	}
 
 }
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableData.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableData.java
index 1459231..f42a2e4 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableData.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableData.java
@@ -14,78 +14,103 @@
  ******************************************************************************/
 package org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.model;
 
-import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritReviewData;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritTask;
 import org.eclipse.mylyn.tasks.core.TaskRepository;
 
 /**
  * @author Jacques Bouthillier
  * @version $Revision: 1.0 $
- *
  */
 public class ReviewTableData {
 
-	// ------------------------------------------------------------------------
-	// Member variables
-	// ------------------------------------------------------------------------
+    // ------------------------------------------------------------------------
+    // Member variables
+    // ------------------------------------------------------------------------
 
-	private R4EGerritReviewData[] fReviewList = null;
-	
-	private TaskRepository fTaskRepo = null;
-	
-	private String fQuery = null;
-	
-	
-	/**
-	 * Create a new review entry to insert to the list of reviews
-	 * 
-	 * @param Object
-	 */
-	public void createReviewItem(R4EGerritReviewData[] aList, String aQuery, TaskRepository aTaskRepo) {
+    // The list of reviews indexed by the SHORT_CHANGE_ID
+    private Map<String, R4EGerritTask> fReviewList;
 
-		// Create the new object
-//		if (fQuery != aQuery) {
-			fReviewList = aList;
-			fTaskRepo = aTaskRepo;
-			fQuery = aQuery;
-			
-//		} else {
-//			//Need to reset the list, we just created a null entry
-//			reset();
-//		}
-	}	
-	
-	/**
-	 * Provide the list of review available for the table list
-	 * @return ReviewTableListItem[]
-	 */
-	public R4EGerritReviewData[] getReviews () {
-		if (fReviewList == null) {
-	        fReviewList = new R4EGerritReviewData[0];
-		}
-		return fReviewList;
-	}
-	
-	/**
-	 * Get the current TaskRepo populating the table list view
-	 * @return TaskRepository
-	 */
-    public TaskRepository getCurrentTaskRepo () {
-    	return  fTaskRepo; 
+    private TaskRepository                   fTaskRepo = null;
+
+    private String                           fQuery    = null;
+
+    /**
+     * Create a new review entry to insert to the list of reviews
+     * 
+     * @param Object
+     */
+    @SuppressWarnings("restriction")
+	public void createReviewItem(R4EGerritTask[] aList, String aQuery,
+            TaskRepository aTaskRepo) {
+
+        // Create the new object
+        // if (fQuery != aQuery) {
+        fReviewList = new HashMap<String, R4EGerritTask>();
+        for (R4EGerritTask review : aList) {
+            fReviewList.put(
+                    review.getAttribute(R4EGerritTask.SHORT_CHANGE_ID),
+                    review);
+        }
+        fTaskRepo = aTaskRepo;
+        fQuery = aQuery;
+
+        // } else {
+        // //Need to reset the list, we just created a null entry
+        // reset();
+        // }
     }
-    
+
+    /**
+     * Provide the list of review available for the table list
+     * 
+     * @return the list of gerrit reviews
+     */
+    public R4EGerritTask[] getReviews() {
+        if (fReviewList == null) {
+            fReviewList = new HashMap<String, R4EGerritTask>();
+        }
+        return fReviewList.values().toArray(new R4EGerritTask[0]);
+    }
+
+    /**
+     * Provide the review with the specified ID
+     * 
+     * @param id
+     *            the requested ID (SHORT_CHANGE_ID)
+     * @return the requested review (or null)
+     */
+    public R4EGerritTask getReview(String id) {
+        if (id != null && fReviewList.containsKey(id)) {
+            return fReviewList.get(id);
+        }
+        return null;
+    }
+
+    /**
+     * Get the current TaskRepo populating the table list view
+     * 
+     * @return TaskRepository
+     */
+    public TaskRepository getCurrentTaskRepo() {
+        return fTaskRepo;
+    }
+
     /**
      * Return the query information used to populate the review table
+     * 
      * @return String
      */
-    public String getQueryInfo () {
-    	return fQuery;
+    public String getQueryInfo() {
+        return fQuery;
     }
 
-    	
-	private void reset() {
-		if (fReviewList != null) {
-            fReviewList = new R4EGerritReviewData[0];
-		}
-	}
+//    private void reset() {
+//        if (fReviewList != null) {
+//            fReviewList = new HashMap<String, R4EGerritReviewData>();
+//        }
+//    }
 
 }
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableDefinition.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableDefinition.java
index e92a33d..9a7028d 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableDefinition.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableDefinition.java
@@ -17,6 +17,8 @@
 
 import java.util.ArrayList;
 
+import org.eclipse.swt.SWT;
+
 /**
  * @author Jacques Bouthillier
  * @version $Revision: 1.0 $
@@ -29,28 +31,29 @@
 // Moveable}
 public enum ReviewTableDefinition {
 	// 			Name 			Width 	Resize Moveable
-	   STARRED(	"", 			20, 	false,	true), 
-	   ID(		"ID", 			80, 	false,	true), 
-	   SUBJECT(	"Subject",	 	200, 	true,	true), 
-	   OWNER(	"Owner", 		140, 	true, 	true), 
-	   PROJECT(	"Project", 		200, 	true, 	true), 
-	   BRANCH(	"Branch", 		100, 	true, 	true), 
-	   UPDATED(	"Updated", 		75, 	true, 	true), 
-	   CR(		"CR", 			28, 	false, 	true), 
-	   IC(		"IC", 			28, 	false, 	true), 
-	   VERIFY(	"V", 			28,		false, 	true);
+	   STARRED(	"", 			20, 	false,	true, SWT.LEFT), 
+	   ID(		"ID", 			80, 	false,	true, SWT.LEFT),
+	   SUBJECT(	"Subject",	 	200, 	true,	true, SWT.LEFT),
+	   OWNER(	"Owner", 		140, 	true, 	true, SWT.LEFT),
+	   PROJECT(	"Project", 		200, 	true, 	true, SWT.LEFT),
+	   BRANCH(	"Branch", 		100, 	true, 	true, SWT.LEFT),
+	   UPDATED(	"Updated", 		100, 	true, 	true, SWT.RIGHT),
+	   CR(		"CR", 			28, 	false, 	true, SWT.LEFT),
+//	   IC(		"IC", 			28, 	false, 	true, SWT.LEFT),
+	   VERIFY(	"V", 			28,		false, 	true, SWT.LEFT);
 	   
-	private String fHeader;
-	private int fwidth;
-	private Boolean fResize;
-	private Boolean fMoveable;
+	private final String  fHeader;
+	private final int     fwidth;
+	private final boolean fResize;
+	private final boolean fMoveable;
+	private final int     fAlignment;
 
-	private ReviewTableDefinition(String aName, int aWidth, Boolean aResize,
-			Boolean aMove) {
+	private ReviewTableDefinition(String aName, int aWidth, boolean aResize, boolean aMove, int align) {
 		fHeader = aName;
 		fwidth = aWidth;
 		fResize = aResize;
 		fMoveable = aMove;
+		fAlignment = align;
 	}
 
 	public String getName() {
@@ -61,14 +64,18 @@
 		return fwidth;
 	}
 
-	public Boolean getResize() {
+	public boolean getResize() {
 		return fResize;
 	}
 
-	public Boolean getMoveable() {
+	public boolean getMoveable() {
 		return fMoveable;
 	}
 
+	public int getAlignment() {
+		return fAlignment;
+	}
+
 	public static String[] getColumnName() {
 		ArrayList<String> listName = new ArrayList<String>();
 		for (ReviewTableDefinition st : ReviewTableDefinition.values()) {
@@ -92,4 +99,4 @@
 	// return ReviewTableDefinition.valueOf(st).ordinal();
 	// }
 
-}
\ No newline at end of file
+}
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableLabelProvider.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableLabelProvider.java
index b714274..adc4ad8 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableLabelProvider.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableLabelProvider.java
@@ -19,7 +19,7 @@
 import org.eclipse.jface.viewers.ITableColorProvider;
 import org.eclipse.jface.viewers.ITableLabelProvider;
 import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritReviewData;
+import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritTask;
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Color;
@@ -37,13 +37,21 @@
 	// ------------------------------------------------------------------------
 	// Constants
 	// ------------------------------------------------------------------------
-	private final String EMPTY_STRING = "";
-	// Names of images used to represent review-checked
+	
+    private final String EMPTY_STRING = "";
+
+	// +2 Names of images used to represent review-checked
 	public static final String CHECKED_IMAGE = "greenCheck";
 
-	// Names of images used to represent review-not OK
+	// -2 Names of images used to represent review-not OK
 	public static final String NOT_OK_IMAGE = "redNot";
 
+	// -1
+	public static final String MINUS_ONE = "minusOne";
+
+	// +1
+	public static final String PLUS_ONE = "plusOne";
+
 	// Names of images used to represent STAR FILLED
 	public static final String STAR_FILLED = "starFilled";
 
@@ -61,8 +69,10 @@
 	//Color used depending on the review state
 	private static Color DEFAULT_COLOR = fDisplay.getSystemColor(SWT.COLOR_LIST_BACKGROUND);
 //	private static Color INCOMING_COLOR = fDisplay.getSystemColor(SWT.COLOR_TITLE_BACKGROUND);
-	private static Color INCOMING_COLOR = fDisplay.getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW);
-	private static Color CLOSED_COLOR = fDisplay.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW);
+	private static Color INCOMING_COLOR = fDisplay.getSystemColor(SWT.COLOR_WHITE);
+	private static Color CLOSED_COLOR = fDisplay.getSystemColor(SWT.COLOR_WHITE);
+//	private static Color INCOMING_COLOR = fDisplay.getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW);
+//	private static Color CLOSED_COLOR = fDisplay.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW);
 
 	// For the images
 	private static ImageRegistry fImageRegistry = new ImageRegistry();
@@ -72,21 +82,23 @@
 	 * and automatically disposes of them the SWT Display is disposed.
 	 */
 	static {
+		
 		String iconPath = "icons/view16/";
-		// icon used for the column ID
 
-		fImageRegistry.put(
-				CHECKED_IMAGE,
-				R4EGerritUi.getImageDescriptor(iconPath + CHECKED_IMAGE
-						+ ".png"));
-		fImageRegistry.put(NOT_OK_IMAGE, R4EGerritUi
-				.getImageDescriptor(iconPath + NOT_OK_IMAGE + ".png"));
+		fImageRegistry.put(CHECKED_IMAGE,
+				R4EGerritUi.getImageDescriptor(iconPath + CHECKED_IMAGE + ".png"));
 
-		// icon used for the column ID
-		fImageRegistry
-				.put(STAR_FILLED,
-						R4EGerritUi.getImageDescriptor(iconPath + STAR_FILLED
-								+ ".gif"));
+		fImageRegistry.put(NOT_OK_IMAGE,
+				R4EGerritUi.getImageDescriptor(iconPath + NOT_OK_IMAGE + ".png"));
+
+		fImageRegistry.put(MINUS_ONE,
+				R4EGerritUi.getImageDescriptor(iconPath + MINUS_ONE + ".png"));
+
+		fImageRegistry.put(PLUS_ONE,
+				R4EGerritUi.getImageDescriptor(iconPath + PLUS_ONE + ".png"));
+
+		fImageRegistry.put(STAR_FILLED,
+				R4EGerritUi.getImageDescriptor(iconPath + STAR_FILLED + ".gif"));
 
 		fImageRegistry.put(STAR_OPEN,
 				R4EGerritUi.getImageDescriptor(iconPath + STAR_OPEN + ".gif"));
@@ -101,17 +113,47 @@
 	// ------------------------------------------------------------------------
 	// Methods
 	// ------------------------------------------------------------------------
+
 	/**
 	 * Return an image representing the state of the object
 	 * 
 	 * @param int aState
 	 * @return Image
 	 */
-	private Image getReviewSate(int aState) {
-		if (aState == NOT_OK_IMAGE_STATE) {
-			return fImageRegistry.get(NOT_OK_IMAGE);
-		} else if (aState == CHECKED_IMAGE_STATE) {
+	private Image getReviewStateImage(int aState) {
+		switch (aState) {
+		case 2:
 			return fImageRegistry.get(CHECKED_IMAGE);
+		case 1:
+			return fImageRegistry.get(PLUS_ONE);
+		case 0:
+			break;
+		case -1:
+			return fImageRegistry.get(MINUS_ONE);
+		case -2:
+			return fImageRegistry.get(NOT_OK_IMAGE);
+		default:
+			break;
+		}
+		return null;
+	}
+
+	/**
+	 * Return an image representing the state of the object
+	 * 
+	 * @param int aState
+	 * @return Image
+	 */
+	private Image getVerifyStateImage(int aState) {
+		switch (aState) {
+		case 1:
+			return fImageRegistry.get(CHECKED_IMAGE);
+		case 0:
+			break;
+		case -1:
+			return fImageRegistry.get(NOT_OK_IMAGE);
+		default:
+			break;
 		}
 		return null;
 	}
@@ -142,67 +184,67 @@
 	 * 
 	 * @return String text associated to the column
 	 */
+	@SuppressWarnings("restriction")
 	public String getColumnText(Object aObj, int aIndex) {
 		// R4EGerritPlugin.Ftracer.traceWarning("getColumnText object: " + aObj
 		// + "\tcolumn: " + aIndex);
-		if (aObj instanceof R4EGerritReviewData) {
-			R4EGerritReviewData reviewSummary = (R4EGerritReviewData) aObj;
-			String value = null;
+		if (aObj instanceof R4EGerritTask) {
+			R4EGerritTask reviewSummary = (R4EGerritTask) aObj;
+//			String value = null;
 			switch (aIndex) {
 			case 0:
-				return reviewSummary.getAttribute(R4EGerritReviewData.REVIEW_FLAG_STAR); // Needed for the sorter
+				return reviewSummary.getAttribute(R4EGerritTask.IS_STARRED); // Needed for the sorter
 			case 1:
-				return reviewSummary.getAttribute(R4EGerritReviewData.SHORT_CHANGE_ID); 
+				return reviewSummary.getAttribute(R4EGerritTask.SHORT_CHANGE_ID); 
 			case 2:
-				return reviewSummary.getAttribute(R4EGerritReviewData.SUBJECT); 
+				return reviewSummary.getAttribute(R4EGerritTask.SUBJECT); 
 			case 3:
-				return reviewSummary.getAttribute(R4EGerritReviewData.OWNER); 
+				return reviewSummary.getAttribute(R4EGerritTask.OWNER); 
 			case 4:
-				return reviewSummary.getAttribute(R4EGerritReviewData.PROJECT); 
+				return reviewSummary.getAttribute(R4EGerritTask.PROJECT); 
 			case 5:
-				return reviewSummary.getAttribute(R4EGerritReviewData.BRANCH); 
+				return reviewSummary.getAttribute(R4EGerritTask.BRANCH); 
 			case 6:
-				return reviewSummary.getAttributeAsDate(R4EGerritReviewData.DATE_MODIFICATION); 
-			case 7:
-				value = reviewSummary.getAttribute(R4EGerritReviewData.REVIEW_FLAG_CR);
-				if (null != value && !value.equals(EMPTY_STRING)) {
-					return formatValue (value);
-				}
-				break; 
-			case 8:
-				value = reviewSummary.getAttribute(R4EGerritReviewData.REVIEW_FLAG_CI);
-				if (null != value && !value.equals(EMPTY_STRING)) {
-					return formatValue (value);
-				}
-				break; 
-			case 9:
-				value = reviewSummary.getAttribute(R4EGerritReviewData.REVIEW_FLAG_V);
-				if (null != value && !value.equals(EMPTY_STRING)) {
-					return formatValue (value);
-				}
-				break; 
+				return reviewSummary.getAttributeAsDate(R4EGerritTask.DATE_MODIFICATION); 
+//			case 7:
+//				value = reviewSummary.getAttribute(R4EGerritTask.REVIEW_STATE);
+//				if (null != value && !value.equals(EMPTY_STRING)) {
+//					return formatValue (value);
+//				}
+//			case 8:
+//				value = reviewSummary.getAttribute(R4EGerritTask.IS_IPCLEAN);
+//				if (null != value && !value.equals(EMPTY_STRING)) {
+//					return formatValue (value);
+//				}
+//                return EMPTY_STRING; 
+//			case 9:
+//				value = reviewSummary.getAttribute(R4EGerritTask.VERIFY_STATE);
+//				if (null != value && !value.equals(EMPTY_STRING)) {
+//					return formatValue (value);
+//				}
+//                return EMPTY_STRING; 
 			default:
 				return EMPTY_STRING;
 			}
 		}
-		return "";
+		return EMPTY_STRING;
 	}
 
 	
-	/**
-	 * Format the numbering value to display
-	 * @param aSt
-	 * @return String
-	 */
-	private String formatValue (String aSt) {
-		int val = aSt.equals("")? 0 : Integer.parseInt(aSt, 10);
-		if ( val > 0) {
-			String st = "+" + aSt;
-			return st;
-		}
-		return aSt; 
-
-	}
+//	/**
+//	 * Format the numbering value to display
+//	 * @param aSt
+//	 * @return String
+//	 */
+//	private String formatValue (String aSt) {
+//		int val = aSt.equals("")? 0 : Integer.parseInt(aSt, 10);
+//		if ( val > 0) {
+//			String st = "+" + aSt;
+//			return st;
+//		}
+//		return aSt; 
+//
+//	}
 
 	/**
 	 * Return the image associated to the column
@@ -213,16 +255,17 @@
 	 * 
 	 * @return Image Image according to the selected column
 	 */
+	@SuppressWarnings("restriction")
 	public Image getColumnImage(Object aObj, int aIndex) {
 		// R4EGerritPlugin.Ftracer
 		// .traceWarning("getColumnImage column: " + aIndex);
 		Image image = null;
 		String value = null;
-		if (aObj instanceof R4EGerritReviewData) {
-			R4EGerritReviewData reviewSummary = (R4EGerritReviewData) aObj;
+		if (aObj instanceof R4EGerritTask) {
+			R4EGerritTask reviewSummary = (R4EGerritTask) aObj;
 			switch (aIndex) {
 			case 0:
-				value = reviewSummary.getAttribute(R4EGerritReviewData.REVIEW_FLAG_STAR);
+				value = reviewSummary.getAttribute(R4EGerritTask.IS_STARRED);
 				if (null != value && !value.equals(EMPTY_STRING)) {
 					return getReviewId(Boolean.valueOf(value.toLowerCase()));
 				}
@@ -240,27 +283,27 @@
 			case 6:
 				return image;
 			case 7:
-				value = reviewSummary.getAttribute(R4EGerritReviewData.REVIEW_FLAG_CR);
+				value = reviewSummary.getAttribute(R4EGerritTask.REVIEW_STATE);
 
 				if (null != value && !value.equals(EMPTY_STRING)) {
 					int val = Integer.parseInt(value);
-					return getReviewSate(val);
+					return getReviewStateImage(val);
 				}
 				break;
 			case 8:
-				value = reviewSummary.getAttribute(R4EGerritReviewData.REVIEW_FLAG_CI);
+//				value = reviewSummary.getAttribute(R4EGerritTask.IS_IPCLEAN);
+//
+//				if (null != value && !value.equals(EMPTY_STRING)) {
+//					int val = Integer.parseInt(value);
+//					return getReviewSate(val);
+//				}
+//				break;
+//			case 9:
+				value = reviewSummary.getAttribute(R4EGerritTask.VERIFY_STATE);
 
 				if (null != value && !value.equals(EMPTY_STRING)) {
 					int val = Integer.parseInt(value);
-					return getReviewSate(val);
-				}
-				break;
-			case 9:
-				value = reviewSummary.getAttribute(R4EGerritReviewData.REVIEW_FLAG_V);
-
-				if (null != value && !value.equals(EMPTY_STRING)) {
-					int val = Integer.parseInt(value);
-					return getReviewSate(val);
+					return getVerifyStateImage(val);
 				}
 				break;
 			default:
@@ -280,36 +323,36 @@
 	 */
 	@Override
 	public Color getForeground(Object aElement, int aColumnIndex) {
-		if (aElement instanceof R4EGerritReviewData) {
-			R4EGerritReviewData item = (R4EGerritReviewData) aElement;
+		if (aElement instanceof R4EGerritTask) {
+			R4EGerritTask item = (R4EGerritTask) aElement;
 			int value = 0;
 			String st = null;
 			// R4EGerritPlugin.Ftracer.traceWarning("getForeground() object CR : "
 			// + item.getCr() + "\tcolumn : " + aColumnIndex );
 			if (aColumnIndex == ReviewTableDefinition.CR.ordinal()
-					|| aColumnIndex == ReviewTableDefinition.IC.ordinal()
+//					|| aColumnIndex == ReviewTableDefinition.IC.ordinal()
 					|| aColumnIndex == ReviewTableDefinition.VERIFY.ordinal()) {
 				switch (aColumnIndex) {
 				case 7: // ReviewTableDefinition.CR.ordinal():
-					st = item.getAttribute(R4EGerritReviewData.REVIEW_FLAG_CR);
-					if (st != null) {
-						value = st.equals(EMPTY_STRING) ? 0 : Integer
-								.parseInt(st);						
-					}
+//					st = item.getAttribute(R4EGerritTask.REVIEW_STATE);
+//					if (st != null) {
+//						value = st.equals(EMPTY_STRING) ? 0 : Integer
+//								.parseInt(st);						
+//					}
 					break;
 				case 8: // ReviewTableDefinition.IC.ordinal():
-					st = item.getAttribute(R4EGerritReviewData.REVIEW_FLAG_CI);
-					if (st != null) {
-						value = st.equals(EMPTY_STRING) ? 0 : Integer
-								.parseInt(st);						
-					}
-					break;
-				case 9: // ReviewTableDefinition.VERIFY.ordinal():
-					st = item.getAttribute(R4EGerritReviewData.REVIEW_FLAG_V);
-					if (st != null) {
-						value = st.equals(EMPTY_STRING) ? 0 : Integer
-								.parseInt(st);						
-					}
+//					st = item.getAttribute(R4EGerritTask.IS_IPCLEAN);
+//					if (st != null) {
+//						value = st.equals(EMPTY_STRING) ? 0 : Integer
+//								.parseInt(st);						
+//					}
+//					break;
+//				case 9: // ReviewTableDefinition.VERIFY.ordinal():
+//					st = item.getAttribute(R4EGerritTask.VERIFY_STATE);
+//					if (st != null) {
+//						value = st.equals(EMPTY_STRING) ? 0 : Integer
+//								.parseInt(st);						
+//					}
 					break;
 				}
 				if (value < 0) {
@@ -323,16 +366,17 @@
 	}
 
 	@Override
+	@SuppressWarnings("restriction")
 	public Color getBackground(Object aElement, int aColumnIndex) {
 		// R4EGerritUi.Ftracer.traceInfo("getBackground column : " +
 		// aColumnIndex +
 		// " ]: "+ aElement );
-		if (aElement instanceof R4EGerritReviewData) {
-			R4EGerritReviewData item = (R4EGerritReviewData) aElement;
+		if (aElement instanceof R4EGerritTask) {
+			R4EGerritTask item = (R4EGerritTask) aElement;
 			//
 			// To modify when we can verify the review state
 			String state = item
-					.getAttribute(R4EGerritReviewData.REVIEW_FLAG_STAR);
+					.getAttribute(R4EGerritTask.IS_STARRED);
 			if (state != null) {
 				if (state.equals("true")) {
 					return INCOMING_COLOR;
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableSorter.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableSorter.java
index b3222fd..d1e83a6 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableSorter.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableSorter.java
@@ -11,6 +11,7 @@
  * 
  * Contributors:
  *   Jacques Bouthillier - Initial Implementation of the view sorter
+ *   Francois Chouinard - Refined the sorting of 1) dates and 2) flags 
  ******************************************************************************/
 package org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.model;
 
@@ -18,6 +19,7 @@
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritTask;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -25,32 +27,110 @@
 import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.swt.widgets.TreeItem;
 
-
-
 /**
  * @author Jacques Bouthillier
  * @version $Revision: 1.0 $
  *
  */
 public class ReviewTableSorter extends ViewerSorter {
+
+	// ------------------------------------------------------------------------
+	// Attributes
+	// ------------------------------------------------------------------------
+
+	// The target column
 	private int columnIndex = 0;
-	private static UIReviewTable fReviewTable = null;
+
+	// ------------------------------------------------------------------------
+	// Constructor
+	// ------------------------------------------------------------------------
 
 	public ReviewTableSorter(int columnIndex) {
 		super();
 		this.columnIndex = columnIndex;
 	}
 
-	/*
-	 * public static void reverseOrder() { order *= -1; }
-	 */
+	// ------------------------------------------------------------------------
+	// ViewerSorter
+	// ------------------------------------------------------------------------
 
-	public int compare(Viewer aViewer, Object aE1, Object aE2) {
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+	 */
+	@SuppressWarnings("restriction")
+	public int compare(Viewer viewer, Object item1, Object item2) {
+
+		// The comparison result (< 0, == 0, > 0)
+		int result = 0;
+
+		// We are dealing with R4EGerritTask:s but just in case...
+		if (viewer instanceof TableViewer && item1 instanceof R4EGerritTask && item2 instanceof R4EGerritTask) {
+
+			R4EGerritTask task1 = (R4EGerritTask) item1;
+			R4EGerritTask task2 = (R4EGerritTask) item2;
+
+			String val1 = null;
+			String val2 = null;
+
+			switch (columnIndex) {
+			case 0:	// Star
+				val1 = task1.getAttribute(R4EGerritTask.IS_STARRED);
+				val2 = task2.getAttribute(R4EGerritTask.IS_STARRED);
+				if (val1 != null && val2 != null) {
+					result = val1.compareTo(val2);
+				}
+				break;
+			case 6:	// Updated
+				val1 = task1.getAttribute(R4EGerritTask.DATE_MODIFICATION);
+				val2 = task2.getAttribute(R4EGerritTask.DATE_MODIFICATION);
+				if (val1 != null && val2 != null) {
+					result = val1.compareTo(val2);
+				}
+				break;
+			case 7:	// Code Review
+				val1 = task1.getAttribute(R4EGerritTask.REVIEW_STATE);
+				val2 = task2.getAttribute(R4EGerritTask.REVIEW_STATE);
+				if (val1 != null && val2 != null) {
+					Integer v1 = new Integer(val1);
+					Integer v2 = new Integer(val2);
+					result = v2 - v1;
+				}
+				break;
+			case 8:	// Verify
+				val1 = task1.getAttribute(R4EGerritTask.VERIFY_STATE);
+				val2 = task2.getAttribute(R4EGerritTask.VERIFY_STATE);
+				if (val1 != null && val2 != null) {
+					Integer v1 = new Integer(val1);
+					Integer v2 = new Integer(val2);
+					result = v2 - v1;
+				}
+				break;
+			case 9:	// IPLog Clean
+			default:
+				result = defaultCompare(viewer, item1, item2);
+				break;
+			}
+
+			if (((TableViewer) viewer).getTable().getSortDirection() != SWT.UP) {
+				result = -result;
+			}
+
+		} else {
+			result = defaultCompare(viewer, item1, item2);
+		}
+
+		return result;
+	}
+
+	private int defaultCompare(Viewer aViewer, Object aE1, Object aE2) {
 
 		if (aViewer instanceof TableViewer) {
 
+			// We are in a table
 			TableViewer tv = (TableViewer) aViewer;
 			tv.getTable().setSortColumn(tv.getTable().getColumn(columnIndex));
+
+			// Lookup aE1 and aE2
 			int idx1 = -1, idx2 = -1;
 			for (int i = 0; i < tv.getTable().getItemCount(); i++) {
 				Object obj = tv.getElementAt(i);
@@ -59,23 +139,26 @@
 				} else if (obj.equals(aE2)) {
 					idx2 = i;
 				}
-				if (idx1 > 0 && idx2 > 0) {
+				if (idx1 != -1 && idx2 != -1) {
 					break;
 				}
 			}
+
+			// Compare the respective fields
 			int order = 0;
+			
 			if (idx1 > -1 && idx2 > -1) {
-				String str1 = tv.getTable().getItems()[idx1]
-						.getText(this.columnIndex);
-				String str2 = tv.getTable().getItems()[idx2]
-						.getText(this.columnIndex);
+				String str1 = tv.getTable().getItems()[idx1].getText(this.columnIndex);
+				String str2 = tv.getTable().getItems()[idx2].getText(this.columnIndex);
 				order = str1.compareTo(str2);
-				if (tv.getTable().getSortDirection() != SWT.UP) {
-					order *= -1;
-				}
+			}
+			if (tv.getTable().getSortDirection() != SWT.UP) {
+				order *= -1;
 			}
 			return order;
-		} else if (aViewer instanceof TreeViewer) {
+		}
+		
+		else if (aViewer instanceof TreeViewer) {
 
 			TreeViewer tv = (TreeViewer) aViewer;
 			tv.getTree().setSortColumn(tv.getTree().getColumn(columnIndex));
@@ -104,7 +187,7 @@
 					}
 				}
 			}
-			
+
 			int order = 0;
 			if (idx1 > -1 && idx2 > -1) {
 				String str1 = tv.getTree().getItems()[idx1]
@@ -121,8 +204,12 @@
 		return 0;
 	}
 
+	// ------------------------------------------------------------------------
+	// Static methods 
+	// ------------------------------------------------------------------------
+
 	/**
-	 * table is bind to Sorter.
+	 * Bind a sorter to each table column
 	 * 
 	 * @param aTableViewer
 	 */
@@ -132,8 +219,7 @@
 			TableColumn column = aTableViewer.getTable().getColumn(i);
 			column.addSelectionListener(new SelectionAdapter() {
 				public void widgetSelected(final SelectionEvent e) {
-					ReviewTableSorter sorter = new ReviewTableSorter(
-							columnNum);
+					ReviewTableSorter sorter = new ReviewTableSorter(columnNum);
 					Table table = aTableViewer.getTable();
 					if (table.getSortDirection() == SWT.UP) {
 						table.setSortDirection(SWT.DOWN);
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/UIReviewTable.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/UIReviewTable.java
index 14fd08a..4d3b0d7 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/UIReviewTable.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/UIReviewTable.java
@@ -23,7 +23,7 @@
 import org.eclipse.jface.viewers.TableLayout;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.TableViewerColumn;
-import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritReviewData;
+import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritTask;
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.commands.table.AdjustMyStarredHandler;
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.UIUtils;
@@ -153,7 +153,6 @@
 			GridData gribData = new GridData(GridData.FILL_BOTH);
 			gribData.minimumWidth = tableInfo[index].getWidth();
 			col.getColumn().getParent().setLayoutData(gribData);
-
 		}
 
 		TableLayout tableLayout = new TableLayout();
@@ -219,7 +218,8 @@
 				SWT.NONE);
 		final TableColumn column = viewerColumn.getColumn();
 		column.setText(aTableInfo.getName());
-		column.setWidth(aTableInfo.getWidth());			
+		column.setWidth(aTableInfo.getWidth());
+		column.setAlignment(aTableInfo.getAlignment());
 		column.setResizable(aTableInfo.getResize());
 		column.setMoveable(aTableInfo.getMoveable());
 		return viewerColumn;
@@ -332,20 +332,13 @@
 			R4EGerritUi.Ftracer.traceInfo("Selected table selection is EMPTY ");
 
 		} else {
-			if (tableSelection instanceof IStructuredSelection) {
-				Object obj = ((IStructuredSelection) tableSelection)
-						.getFirstElement();
-				R4EGerritUi.Ftracer
-						.traceInfo("Selected table selection class: "
-								+ obj.getClass());
-				if (obj instanceof R4EGerritReviewData) {
-					R4EGerritReviewData item = (R4EGerritReviewData) obj;
-					R4EGerritUi.Ftracer
-							.traceInfo("Selected table OBJECT selection ID: "
-									+ item.getAttribute(R4EGerritReviewData.SHORT_CHANGE_ID)
-									+ "\t subject: "
-									+ item.getAttribute(R4EGerritReviewData.SUBJECT));
-
+			if (tableSelection instanceof IStructuredSelection ) {
+				Object obj = ((IStructuredSelection) tableSelection).getFirstElement();
+				R4EGerritUi.Ftracer.traceInfo("Selected table selection class: " + obj.getClass() ); 
+				if (obj instanceof  R4EGerritTask) {
+					R4EGerritTask item = (R4EGerritTask) obj;
+					R4EGerritUi.Ftracer.traceInfo("Selected table OBJECT selection ID: "  + item.getAttribute(R4EGerritTask.SHORT_CHANGE_ID) + 
+							"\t subject: " + item.getAttribute(R4EGerritTask.SUBJECT)); 				
 				}
 			}
 		}
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 c9607f0..41d9e6b 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
@@ -15,11 +15,17 @@
 
 package org.eclipse.mylyn.reviews.r4egerrit.ui.views;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jface.action.Action;
@@ -28,18 +34,22 @@
 import org.eclipse.jface.action.IToolBarManager;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.viewers.DoubleClickEvent;
 import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.mylyn.internal.gerrit.core.GerritConnector;
-import org.eclipse.mylyn.internal.tasks.core.TaskTask;
+import org.eclipse.mylyn.internal.gerrit.core.GerritCorePlugin;
+import org.eclipse.mylyn.internal.gerrit.core.GerritQuery;
+import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
+import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery;
+import org.eclipse.mylyn.internal.tasks.core.TaskList;
 import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
+import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
 import org.eclipse.mylyn.reviews.r4e_gerrit.R4EGerritPlugin;
 import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritQueryUtils;
-import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritReviewData;
+import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritTask;
 import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EQueryException;
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.model.ReviewTableData;
@@ -48,9 +58,12 @@
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.R4EGerritServerUtility;
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.R4EUIConstants;
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.UIUtils;
+import org.eclipse.mylyn.tasks.core.IRepositoryModel;
 import org.eclipse.mylyn.tasks.core.ITask;
 import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.mylyn.tasks.core.data.TaskData;
 import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi;
+import org.eclipse.mylyn.tasks.ui.TasksUi;
 import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
 import org.eclipse.mylyn.tasks.ui.editors.TaskEditorInput;
 import org.eclipse.swt.SWT;
@@ -64,6 +77,7 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IEditorInput;
@@ -165,18 +179,14 @@
 		createSearchSection(aParent);
 		UIReviewTable reviewTable = new UIReviewTable();
 		fViewer = reviewTable.createTableViewerSection(aParent);
-		
 			
 		// Setup the view layout
 		createLayout(aParent);
-		
-		
-	
-		
-	
+
 		fViewer.setInput(fReviewItem.getReviews());
+		Table table = fViewer.getTable();
+		addListeners(table);
 		
-	
 //		fViewer.setInput(getViewSite());
 //
 //		// Create the help context id for the viewer's control
@@ -229,12 +239,12 @@
 		GridData gribDataViewer = new GridData(GridData.FILL_HORIZONTAL);
 		leftSearchForm.setLayoutData(gribDataViewer);
 
-		GridLayout leftLyoutForm = new GridLayout();
-		leftLyoutForm.numColumns = 2;
-		leftLyoutForm.marginHeight = 0;
-		leftLyoutForm.makeColumnsEqualWidth = false;
+		GridLayout leftLayoutForm = new GridLayout();
+		leftLayoutForm.numColumns = 2;
+		leftLayoutForm.marginHeight = 0;
+		leftLayoutForm.makeColumnsEqualWidth = false;
 		
-		leftSearchForm.setLayout(leftLyoutForm);
+		leftSearchForm.setLayout(leftLayoutForm);
 		
 		// Label for SEARCH for
 		fSearchForLabel = new Label(leftSearchForm, SWT.NONE);
@@ -322,33 +332,37 @@
 
 	private void makeActions() {
 		doubleClickAction = new Action() {
+			@Override
 			public void run() {
 
 			    // -------------------------------------------------
 				// Open an editor with the detailed task information
                 // -------------------------------------------------
 
-			    // Retrieve the table selection
-                ISelection selection = fViewer.getSelection();
-                Object obj = ((IStructuredSelection) selection).getFirstElement();
+			    // Retrieve the single table selection ("the" task)
+				ISelection selection = fViewer.getSelection();
+				if (!(selection instanceof IStructuredSelection)) {
+					return;
+				}
+				IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+				if (structuredSelection.size() != 1) {
+					return;
+				}
+				Object element = structuredSelection.getFirstElement();
+				if (!(element instanceof AbstractTask)) {
+					return;
+				}
+				AbstractTask task = (AbstractTask) element;
 
-				// Get the task id from the table selection
-				R4EGerritReviewData summary = (R4EGerritReviewData) obj;
-                String mylynTaskId = summary.getAttribute(R4EGerritReviewData.TASK_ID);
-
-                // Fetch the detailed task information from the server
-		        AbstractRepositoryConnectorUi connector = TasksUiPlugin.getConnectorUi(GerritConnector.CONNECTOR_KIND);
-		        ITask task = new TaskTask(connector.getConnectorKind(), fTaskRepository.getRepositoryUrl(), mylynTaskId);
-
-		        // Select the proper editor...
-		        IEditorInput editorInput = connector.getTaskEditorInput(fTaskRepository, task);
+				// Open the task in the proper editor
+                AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getConnectorUi(GerritConnector.CONNECTOR_KIND);
+		        IEditorInput editorInput = connectorUi.getTaskEditorInput(fTaskRepository, task);
 		        if (editorInput == null) {
 		            editorInput = new TaskEditorInput(fTaskRepository, task);
 		        }
-		        String editorId = connector.getTaskEditorId(task);
-
-		        // ... and open it with the task data
+		        String editorId = connectorUi.getTaskEditorId(task);
 				TasksUiUtil.openEditor(editorInput, editorId, null);
+
 			}
 		};
 	}
@@ -361,10 +375,10 @@
 		});
 	}
 
-	private void showMessage(String message) {
-		MessageDialog.openInformation(fViewer.getControl().getShell(),
-				"R4E-Gerrit table", message);
-	}
+//	private void showMessage(String message) {
+//		MessageDialog.openInformation(fViewer.getControl().getShell(),
+//				"R4E-Gerrit table", message);
+//	}
 
 	/**
 	 * Passing the focus request to the viewer's control.
@@ -467,7 +481,7 @@
 	 * Process the commands based on the Gerrit string 
 	 * @param String aQuery
 	 */
-	public void processCommands (String aQuery) {
+	public void processCommands(String aQuery) {
 		R4EGerritUi.Ftracer.traceInfo("Process command :   "  + aQuery );
 		String lastSaved = fServerUtil.getLastSavedGerritServer();
 		if (lastSaved != null) {
@@ -508,8 +522,7 @@
 
 	}
 	
-	private Object updateTable (final TaskRepository aTaskRepo, final String aQuery)  {
-		
+	private Object updateTable(final TaskRepository aTaskRepo, final String aQuery)  {
 		
 		final Job job = new Job(COMMAND_MESSAGE) {
 
@@ -530,10 +543,11 @@
 				// If there is only have one Gerrit server, we can proceed as if it was already used before
 				IStatus status = null;
 				try {
-	                R4EGerritReviewData[] list = R4EGerritQueryUtils.getReviewList(aTaskRepo, aQuery);
-	                final int numItems = list.length;
+	                R4EGerritTask[] reviewList = getReviewTasks(aTaskRepo, aQuery);
+//	                R4EGerritTask[] reviewList = R4EGerritQueryUtils.getReviewList(aTaskRepo, aQuery);
+	                final int numItems = reviewList.length;
 	                R4EGerritPlugin.Ftracer.traceInfo("Number of review items: " + numItems);
-	                fReviewItem.createReviewItem(list, aQuery, aTaskRepo );
+	                fReviewItem.createReviewItem(reviewList, aQuery, aTaskRepo );
 	                Display.getDefault().syncExec(new Runnable() {
 	                    @Override
 	                    public void run() {
@@ -542,12 +556,12 @@
 	                        setRepositoryLabel (aTaskRepo.getRepositoryLabel());
 	                        fViewer.setInput(fReviewItem.getReviews()); 
 	                        fViewer.refresh();
-	                        if (numItems < 1) {
-	                            //Display a popup, we did not find any items to display
-	                            String msg = "Query ( " + aQuery + ") on " + aTaskRepo.getUrl();
-	                            String reason = "Return " + numItems  + " items.";
-	                            UIUtils.showErrorDialog(msg, reason);
-	                        }
+//	                        if (numItems < 1) {
+//	                            //Display a popup, we did not find any items to display
+//	                            String msg = "Query ( " + aQuery + ") on " + aTaskRepo.getUrl();
+//	                            String reason = "Return " + numItems  + " items.";
+//	                            UIUtils.showErrorDialog(msg, reason);
+//	                        }
 	                    }
 	                });
 	                status = Status.OK_STATUS;
@@ -559,6 +573,7 @@
                 }
 
 				aMonitor.done();
+//				fetchMissingReviewInfo();
 				return status;
 			}
 		};
@@ -566,10 +581,67 @@
 		job.schedule();
 		
 		return null;
-		
-		
 	}
 
+    /**
+     * Perform the requested query and convert the resulting tasks in R4EGerritTask:s
+     * 
+     * @param repository the tasks repository
+     * @param queryType	the query
+     * 
+     * @return a list of R4EGerritTask:s
+     * @throws R4EQueryException
+     */
+    private R4EGerritTask[] getReviewTasks(TaskRepository repository, String queryType) throws R4EQueryException {
+
+    	// Format the query id
+    	String queryId = rtv.getTitle() + " - " + queryType;
+
+    	// Retrieve the query from the repository (if previously defined)
+    	Set<RepositoryQuery> queries = TasksUiInternal.getTaskList().getQueries();
+    	RepositoryQuery query = null;
+    	for (RepositoryQuery rquery : queries) {
+    		if (rquery.getRepositoryUrl().equals(repository.getRepositoryUrl()) && rquery.getSummary().equals(queryId)) {
+    			query = rquery;
+    			break;
+    		}
+    	}
+
+    	// If not found, create one and save it
+    	if (query == null) {
+        	IRepositoryModel repositoryModel = TasksUi.getRepositoryModel();
+        	query = (RepositoryQuery) repositoryModel.createRepositoryQuery(repository);
+        	query.setSummary(queryId);
+            query.setAttribute(GerritQuery.TYPE, queryType);
+    		query.setAttribute(GerritQuery.PROJECT, null);
+    		query.setAttribute(GerritQuery.QUERY_STRING, null);
+            TasksUiInternal.getTaskList().addQuery(query);
+    	}
+    	
+        // Execute the query and wait for the job completion
+        GerritConnector connector = GerritCorePlugin.getDefault().getConnector();
+        try {
+            Job job = TasksUiInternal.synchronizeQuery(connector, query, null, true);
+			job.join();
+		} catch (Exception e) {
+		}
+
+        // Convert the resulting tasks in R4EGerritTask:s
+        Collection<ITask> tasks = query.getChildren();
+        List<R4EGerritTask> reviews = new ArrayList<R4EGerritTask>();
+        for (ITask task : tasks) {
+        	try {
+				TaskData taskData = connector.getTaskData(repository, task.getTaskId(), new NullProgressMonitor());
+	            R4EGerritTask review = new R4EGerritTask(taskData);
+	            if (review.getAttribute(R4EGerritTask.DATE_COMPLETION) == null) {
+	                reviews.add(review);
+	            }
+			} catch (CoreException e) {
+			}
+        }
+        return reviews.toArray(new R4EGerritTask[0]);
+    }
+	
 //	/**
 //	 * Reset the data in the table.
 //	 * 
@@ -610,7 +682,196 @@
 			fRepositoryResulLabel.setText(aSt);
 		}
 	}
-	
-	
+
+	// ------------------------------------------------------------------------
+	// Review data updates
+    // ------------------------------------------------------------------------
+    // Background:
+	//
+	// The general query returns the list of reviews with some but not all the
+	// data required to fill a table entry - the remaining data is retrieved
+	// from the server using detailed review queries, one per review.
+	//
+	// Since there can be a large number of reviews to fetch, it can be very
+	// time consuming to retrieve ALL the detailed reviews. This is mitigated
+	// by retrieving the details of the visible reviews only.
+	//
+	// However, this requires a little bit of plumbing, namely:
+	//   - Identify the reviews to fetch (the visible ones)
+	//   - Format and send the corresponding detailed review requests
+	//   - Update the table as each request reply comes in
+    // ------------------------------------------------------------------------
+    
+    /**
+     * Add the listeners that trigger the review summary updates
+     * 
+     * @param table the table widget
+     */
+    private void addListeners(final Table table) {
+
+//        // Key scrolling
+//        table.addKeyListener(new KeyListener() {
+//            @Override
+//            public void keyReleased(KeyEvent e) {
+//                trace("keyReleased");
+////                fetchMissingReviewInfo();
+//            }
+//            @Override
+//            public void keyPressed(KeyEvent e) {
+//            }
+//        });
+
+//        // Mouse scrolling
+//        table.addMouseWheelListener(new MouseWheelListener() {
+//            @Override
+//            public void mouseScrolled(MouseEvent e) {
+//                trace("mouseScrolled");
+////                fetchMissingReviewInfo();
+//            }
+//        });
+
+//        // Scrollbar handling
+//        ScrollBar scrollbar = table.getVerticalBar();
+//        scrollbar.addSelectionListener(new SelectionListener() {
+//            @Override
+//            public void widgetSelected(SelectionEvent e) {
+//                trace("ScrollBar event");
+//                int top = table.getTopIndex();
+//                System.out.println("top=" + top + ", detail=" + e.detail);
+////                fetchMissingReviewInfo();
+////                table.setTopIndex(top);
+////                table.showItem(table.getItem(top + e.detail));
+//            }
+//            @Override
+//            public void widgetDefaultSelected(SelectionEvent e) {
+//            }
+//        });
+
+//        // Table resizing
+//        table.addControlListener(new ControlListener() {
+//            @Override
+//            public void controlResized(ControlEvent e) {
+//                trace("tableResized");
+////                fetchMissingReviewInfo();
+//            }
+//            @Override
+//            public void controlMoved(ControlEvent e) {
+//            }
+//        });
+
+    }
+
+//    /**
+//     * Fetch and display the detailed data of visible reviews
+//     */
+//    private void updateVisibleReviews() {
+//        List<String> reviewIds = getVisibleReviewIds();
+//        for (String id : reviewIds) {
+//            R4EGerritReviewData review = fReviewItem.getReview(id);
+//            if (review != null && !review.hasDetails()) {
+//                R4EGerritQueryUtils.getReviewDetails(fTaskRepository, review);
+//                refresh();  // Refresh every time? Arguable.
+//            }
+//        }
+//    }
+    
+//    /**
+//     * Fetch and display the detailed data of the missing (visible) reviews
+//     */
+//    private Job job = null;
+//    private void fetchMissingReviewInfo() {
+//
+//        trace("updateVisibleReviews");
+//
+//        if (job != null && job.getState() != Job.NONE && job.getThread() != null) {
+//            trace("Killing job #" + job.getThread().getId());
+//            job.cancel();
+//        }
+//
+//        final List<String> reviewIds = new ArrayList<String>();
+//        getVisibleReviewIds(reviewIds);
+//
+//        job = new Job("Fetch review data...") {
+//            @Override
+//            protected IStatus run(IProgressMonitor monitor) {
+//                trace("Starting job");
+//                for (String id : reviewIds) {
+//                    if (monitor.isCanceled()) {
+//                        trace("Canceling job");
+//                        break;
+//                    }
+//                    R4EGerritReviewData review = fReviewItem.getReview(id);
+//                    if (review != null && !review.hasDetails()) {
+//                        trace("Get review details for: " + id);
+//                        R4EGerritQueryUtils.getReviewDetails(fTaskRepository, review);
+//                        review.hasDetails(true);
+//                        refresh();  // More selective refresh?
+//                    }
+//                }
+//                trace("Completing job");
+//                return Status.OK_STATUS;
+//            }
+//        };
+//        
+//        trace("Scheduling job");
+//        job.schedule();
+//    }
+//
+//    
+//    /**
+//     * @return the list of review IDs that are currently visible
+//     */
+//    volatile Boolean semaphore = false;
+//    private void getVisibleReviewIds(final List<String> reviewIds) {
+//        trace("getVisibleReviewIds: enter");
+//        boolean mySemaphore = false;
+//        synchronized(semaphore) {
+//            if (!semaphore) {
+//                mySemaphore = semaphore = true;
+//            }
+//        }
+//        if (mySemaphore) {
+//            Display.getDefault().syncExec(new Runnable() {
+//                @Override
+//                public void run() {
+//                    Table table = fViewer.getTable();
+//                    int tableHeight = table.getClientArea().height;
+//                    int headerHeight = table.getHeaderHeight();
+//                    int itemHeight = table.getItemHeight();
+//                    int nbReviewsVisible = (tableHeight - headerHeight) / itemHeight + 1;
+//
+//                    int topIndex = table.getTopIndex();
+//                    int nbReviewsTotal = table.getItemCount();
+//                    for (int i = 0; i < nbReviewsVisible; i++) {
+//                        int index = topIndex + i;
+//                        if (index < nbReviewsTotal) {
+//                            TableItem item = table.getItem(index);
+//                            if (item != null) {
+//                                reviewIds.add(item.getText(1));
+//                            }
+//                        }
+//                    }
+//                }
+//            });
+//            semaphore = false;
+//        }
+//        trace("getVisibleReviewIds: exit");
+//    }
+//
+//    /**
+//     * Refresh the table content with the new data
+//     */
+//    private void refresh() {
+//        Display.getDefault().syncExec(new Runnable() {
+//            @Override
+//            public void run() {
+//                fViewer.refresh();
+//            }
+//        });
+//    }
+    
+//    private void trace(String msg) {
+//        System.out.println("[" + System.currentTimeMillis() + "] " + "T=" + Thread.currentThread().getId() + " " + msg);
+//    }
 
 }
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/R4EGerritPlugin.java b/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/R4EGerritPlugin.java
index 1410fe5..88acace 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/R4EGerritPlugin.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/R4EGerritPlugin.java
@@ -27,7 +27,7 @@
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Version;
 
-// import utils.Tracer;
+//import utils.Tracer;
 
 /**
  * @author Jacques Bouthillier
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritQueryUtils.java b/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritQueryUtils.java
index 1731905..2fbc297 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritQueryUtils.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritQueryUtils.java
@@ -15,7 +15,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.mylyn.internal.gerrit.core.GerritConnector;
@@ -24,7 +23,6 @@
 import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery;
 import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
 import org.eclipse.mylyn.tasks.core.TaskRepository;
-import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
 import org.eclipse.mylyn.tasks.core.data.TaskData;
 
 /**
@@ -48,7 +46,7 @@
      * @param query the query
      * @return the list of reviews matching the query
      */
-    public static R4EGerritReviewData[] getReviewList(TaskRepository repository, String queryType) throws R4EQueryException {
+    public static R4EGerritTask[] getReviewList(TaskRepository repository, String queryType) throws R4EQueryException {
 
         // Format the query
         IRepositoryQuery query = new RepositoryQuery(repository.getConnectorKind(), "query"); //$NON-NLS-1$
@@ -64,51 +62,32 @@
         }        
 
         // Extract the result
-        List<R4EGerritReviewData> reviews = new ArrayList<R4EGerritReviewData>();
+        List<R4EGerritTask> reviews = new ArrayList<R4EGerritTask>();
         List<TaskData> tasksData = resultCollector.getResults();
         for (TaskData taskData : tasksData) {
-            R4EGerritReviewData review = new R4EGerritReviewData(taskData);
-            if (review.getAttribute(R4EGerritReviewData.DATE_COMPLETION) == null) {
+            R4EGerritTask review = new R4EGerritTask(taskData);
+            if (review.getAttribute(R4EGerritTask.DATE_COMPLETION) == null) {
                 reviews.add(review);
             }
         }
-        return reviews.toArray(new R4EGerritReviewData[0]);
+        return reviews.toArray(new R4EGerritTask[0]);
     }
 
-    /**
-     * Updates the review data with detailed information from the repository
-     * 
-     * @param repository the repository
-     * @param reviewData the original (partial) review data
-     */
-    public static void getReviewDetails(TaskRepository repository, R4EGerritReviewData reviewData) {
-        GerritConnector connector = GerritCorePlugin.getDefault().getConnector();
-        try {
-            TaskData taskData = connector.getTaskData(repository, reviewData.getAttribute(R4EGerritReviewData.TASK_ID), new NullProgressMonitor());
-            reviewData.setAttribute(R4EGerritReviewData.OWNER,   getValue(taskData.getRoot().getAttribute(R4EGerritReviewData.OWNER)));
-            reviewData.setAttribute(R4EGerritReviewData.PROJECT, getValue(taskData.getRoot().getAttribute(R4EGerritReviewData.PROJECT)));
-            reviewData.setAttribute(R4EGerritReviewData.BRANCH,  getValue(taskData.getRoot().getAttribute(R4EGerritReviewData.BRANCH)));
-        } catch (CoreException e) {
-            // TODO Log an error
-            e.printStackTrace();
-        }
-    }
-
-    /*
-     * Extract the first value from the specified task attributes list.
-     * 
-     * @param taskAttribute
-     * @return the first value in the list (if any)
-     */
-    private static String getValue(TaskAttribute taskAttribute) {
-        if (taskAttribute != null) {
-            List<String> values = taskAttribute.getValues();
-            if (values.size() > 0) {
-                return values.get(0);
-            }
-        }
-        return null;
-    }
+//    /*
+//     * Extract the first value from the specified task attributes list.
+//     * 
+//     * @param taskAttribute
+//     * @return the first value in the list (if any)
+//     */
+//    private static String getValue(TaskAttribute taskAttribute) {
+//        if (taskAttribute != null) {
+//            List<String> values = taskAttribute.getValues();
+//            if (values.size() > 0) {
+//                return values.get(0);
+//            }
+//        }
+//        return null;
+//    }
 
     //-------------------------------------------------------------------------
     // Attributes
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritReviewData.java b/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritTask.java
similarity index 69%
rename from org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritReviewData.java
rename to org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritTask.java
index 55cc07d..7ee9b97 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritReviewData.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritTask.java
@@ -15,23 +15,23 @@
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.eclipse.mylyn.internal.gerrit.core.GerritQueryResultSchema;
 import org.eclipse.mylyn.internal.gerrit.core.GerritTaskSchema;
+import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
 import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
 import org.eclipse.mylyn.tasks.core.data.TaskData;
 
 /**
- * A Gerrit review data entry.
+ * An R4E Gerrit review task
  *  
  * @author Francois Chouinard
  * @version 0.1
  */
 @SuppressWarnings("restriction")
-public class R4EGerritReviewData {
+public class R4EGerritTask extends AbstractTask {
 
     //-------------------------------------------------------------------------
     // Constants
@@ -90,43 +90,45 @@
     /**
      * Gerrit Review flags
      */
-    public static final String REVIEW_FLAG_STAR = "org.eclipse.gerrit.Starred";
-    public static final String REVIEW_FLAG_CI   = "org.eclipse.gerrit.Checked";
-    public static final String REVIEW_FLAG_CR   = "org.eclipse.gerrit.Reviewed";
-    public static final String REVIEW_FLAG_V    = "org.eclipse.gerrit.Verified";
+    public static final String IS_STARRED    = GerritTaskSchema.getDefault().IS_STARRED.getKey();
+    public static final String REVIEW_STATE  = GerritTaskSchema.getDefault().REVIEW_STATE.getKey();
+    public static final String VERIFY_STATE  = GerritTaskSchema.getDefault().VERIFY_STATE.getKey();
 
     /**
      * Date format
      */
-    private static SimpleDateFormat FORMAT_TODAY = new SimpleDateFormat("h:mm a");
-    private static SimpleDateFormat FORMAT_FULL  = new SimpleDateFormat("MMM d");
+    private static SimpleDateFormat FORMAT_HOUR  = new SimpleDateFormat("h:mm a");
+    private static SimpleDateFormat FORMAT_MONTH = new SimpleDateFormat("MMM d");
+    private static SimpleDateFormat FORMAT_FULL  = new SimpleDateFormat("MMM d, yyyy");
 
     //-------------------------------------------------------------------------
     // Attributes
     //-------------------------------------------------------------------------
 
-    /*
-     * Map of review attributes 
-     */
-    private Map<String, String> fReviewAttributes;
-
+    // The connector kind
+    private final String fConnectorKind;
+    
     //-------------------------------------------------------------------------
     // Constructor
     //-------------------------------------------------------------------------
 
     /**
      * Construct an R4EGerritReviewSumamry from a Gerrit query result. Some
-     * fields my be missing from the task data.
+     * fields may be missing from the task data.
      * 
-     * @param result the Gerrit query result
+     * @param taskData the Gerrit task data
      */
-    public R4EGerritReviewData(final TaskData result) {
-        TaskAttribute root = result.getRoot();
-        Map<String, TaskAttribute> attributes = root.getAttributes();
+    public R4EGerritTask(final TaskData taskData) {
+    	super(taskData.getRepositoryUrl(), taskData.getTaskId(),
+    			taskData.getRoot().getAttribute(TaskAttribute.SUMMARY).getValue() + 
+    	 " [" + taskData.getRoot().getAttribute(TaskAttribute.TASK_KEY).getValue() + "]");
 
-        fReviewAttributes = new HashMap<String, String>();
-        
-        setAttribute(TASK_ID,           result.getTaskId());
+    	fConnectorKind = taskData.getConnectorKind();
+
+    	TaskAttribute root = taskData.getRoot();
+    	Map<String, TaskAttribute> attributes = root.getAttributes();
+
+    	setAttribute(TASK_ID,           taskData.getTaskId());
         setAttribute(SHORT_CHANGE_ID,   getValue(attributes.get(SHORT_CHANGE_ID)));
         setAttribute(CHANGE_ID,         getValue(attributes.get(CHANGE_ID)));
         setAttribute(SUBJECT,           getValue(attributes.get(SUBJECT)));
@@ -139,10 +141,9 @@
         setAttribute(DATE_MODIFICATION, getValue(attributes.get(DATE_MODIFICATION)));
         setAttribute(DATE_COMPLETION,   getValue(attributes.get(DATE_COMPLETION)));
 
-        setAttribute(REVIEW_FLAG_STAR,  getValue(attributes.get(REVIEW_FLAG_STAR)));
-        setAttribute(REVIEW_FLAG_CI,    getValue(attributes.get(REVIEW_FLAG_CI)));
-        setAttribute(REVIEW_FLAG_CR,    getValue(attributes.get(REVIEW_FLAG_CR)));
-        setAttribute(REVIEW_FLAG_V,     getValue(attributes.get(REVIEW_FLAG_V)));
+        setAttribute(IS_STARRED,        getValue(attributes.get(IS_STARRED)));
+        setAttribute(REVIEW_STATE,      getValue(attributes.get(REVIEW_STATE)));
+        setAttribute(VERIFY_STATE,      getValue(attributes.get(VERIFY_STATE)));
     }
 
     /*
@@ -166,21 +167,6 @@
     //-------------------------------------------------------------------------
 
     /**
-     * @param key the review attribute key
-     * @param value the review attribute value
-     */
-    public void setAttribute(String key, String value) {
-        fReviewAttributes.put(key, value);
-    }
-
-    /**
-     * @return the requested review attribute
-     */
-    public String getAttribute(String key) {
-        return fReviewAttributes.get(key);
-    }
-
-    /**
      * Format the requested Gerrit Review attribute as a date string.
      * As in the Gerrit web UI, the output format depends on the date
      * relation with 'today':
@@ -200,7 +186,7 @@
         }
 
         // Retrieve the date
-        String rawDate = fReviewAttributes.get(key);
+        String rawDate = getAttribute(key);
         if (rawDate == null) {
             return "";
         }
@@ -208,10 +194,12 @@
         // Format the date
         Date date = new Date(Long.parseLong(rawDate));
         if (isToday(date)) {
-            return FORMAT_TODAY.format(date);
-        } else {
-            return FORMAT_FULL.format(date);
+            return FORMAT_HOUR.format(date);
         }
+        if (isThisYear(date)) {
+            return FORMAT_MONTH.format(date);
+        }
+        return FORMAT_FULL.format(date);
     }
 
     /**
@@ -224,8 +212,6 @@
         Calendar cal1 = Calendar.getInstance(); // today
         Calendar cal2 = Calendar.getInstance();
         cal2.setTime(date);
-        int year = cal2.get(Calendar.YEAR);
-        int day  = cal2.get(Calendar.DAY_OF_YEAR);
 
         boolean sameDay =
             (cal1.get(Calendar.YEAR)        == cal2.get(Calendar.YEAR) &&
@@ -234,6 +220,34 @@
         return sameDay;
     }
 
+    /**
+     * Indicates if a date is 'this year' 
+     * 
+     * @param date the date to check
+     * @return true if same year as today
+     */
+    private boolean isThisYear(Date date) {
+        Calendar cal1 = Calendar.getInstance(); // today
+        Calendar cal2 = Calendar.getInstance();
+        cal2.setTime(date);
+
+        return cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR);
+    }
+
+    //-------------------------------------------------------------------------
+    // AbstractTask
+    //-------------------------------------------------------------------------
+
+	@Override
+	public boolean isLocal() {
+		return false;
+	}
+
+	@Override
+	public String getConnectorKind() {
+		return fConnectorKind;
+	}
+
     //-------------------------------------------------------------------------
     // Object
     //-------------------------------------------------------------------------
@@ -244,18 +258,17 @@
     @Override
     public String toString() {
         StringBuffer buffer = new StringBuffer();
-        buffer.append("TaskID  = ").append(getAttribute(R4EGerritReviewData.TASK_ID)).append("\n");
-        buffer.append("ShortID = ").append(getAttribute(R4EGerritReviewData.SHORT_CHANGE_ID)).append("\n");
-        buffer.append("ChangeID= ").append(getAttribute(R4EGerritReviewData.CHANGE_ID)).append("\n");
-        buffer.append("Subject = ").append(getAttribute(R4EGerritReviewData.SUBJECT)).append("\n");
-        buffer.append("Owner   = ").append(getAttribute(R4EGerritReviewData.OWNER)).append("\n");
-        buffer.append("Project = ").append(getAttribute(R4EGerritReviewData.PROJECT)).append("\n");
-        buffer.append("Branch  = ").append(getAttribute(R4EGerritReviewData.BRANCH)).append("\n");
-        buffer.append("Updated = ").append(getAttributeAsDate(R4EGerritReviewData.DATE_MODIFICATION)).append("\n");
-        buffer.append("STAR = ").append(getAttribute(R4EGerritReviewData.REVIEW_FLAG_STAR))
-              .append(", CR = ").append(getAttribute(R4EGerritReviewData.REVIEW_FLAG_CR))
-              .append(", IC = ").append(getAttribute(R4EGerritReviewData.REVIEW_FLAG_CI))
-              .append(", Ve = ").append(getAttribute(R4EGerritReviewData.REVIEW_FLAG_V)).append("\n");
+        buffer.append("TaskID  = ").append(getAttribute(R4EGerritTask.TASK_ID)).append("\n");
+        buffer.append("ShortID = ").append(getAttribute(R4EGerritTask.SHORT_CHANGE_ID)).append("\n");
+        buffer.append("ChangeID= ").append(getAttribute(R4EGerritTask.CHANGE_ID)).append("\n");
+        buffer.append("Subject = ").append(getAttribute(R4EGerritTask.SUBJECT)).append("\n");
+        buffer.append("Owner   = ").append(getAttribute(R4EGerritTask.OWNER)).append("\n");
+        buffer.append("Project = ").append(getAttribute(R4EGerritTask.PROJECT)).append("\n");
+        buffer.append("Branch  = ").append(getAttribute(R4EGerritTask.BRANCH)).append("\n");
+        buffer.append("Updated = ").append(getAttributeAsDate(R4EGerritTask.DATE_MODIFICATION)).append("\n");
+        buffer.append("STAR = ").append(getAttribute(R4EGerritTask.IS_STARRED))
+              .append(", CRVW = ").append(getAttribute(R4EGerritTask.REVIEW_STATE))
+              .append(", VRIF = ").append(getAttribute(R4EGerritTask.VERIFY_STATE)).append("\n");
         return buffer.toString();
     }
 
diff --git a/org.eclipse.mylyn.reviews.r4e-target/r4e-dev-eclipse4.2.target b/org.eclipse.mylyn.reviews.r4e-target/r4e-dev-eclipse4.2.target
index a6ea925..774caf7 100644
--- a/org.eclipse.mylyn.reviews.r4e-target/r4e-dev-eclipse4.2.target
+++ b/org.eclipse.mylyn.reviews.r4e-target/r4e-dev-eclipse4.2.target
@@ -43,7 +43,6 @@
 <unit id="org.objenesis" version="1.0.0.v201105211943"/>
 <unit id="org.junit" version="4.8.2.v4_8_2_v20110321-1705"/>
 <unit id="org.junit.source" version="4.8.2.v4_8_2_v20110321-1705"/>
-<unit id="com.google.guava" version="10.0.1.v201203051515"/>
 <unit id="javax.servlet" version="2.5.0.v201103041518"/>
 <unit id="javax.el" version="2.2.0.v201108011116"/>
 <unit id="org.antlr.runtime" version="3.0.0.v200803061811"/>
diff --git a/org.eclipse.mylyn.reviews.r4e.connector.tests/R4E Connector Core Tests.launch b/org.eclipse.mylyn.reviews.r4e.connector.tests/R4E Connector Core Tests.launch
deleted file mode 100644
index 8dddcd8..0000000
--- a/org.eclipse.mylyn.reviews.r4e.connector.tests/R4E Connector Core Tests.launch
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.pde.ui.JunitLaunchConfig">
-<booleanAttribute key="append.args" value="true"/>
-<stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/>
-<booleanAttribute key="askclear" value="false"/>
-<booleanAttribute key="automaticAdd" value="false"/>
-<booleanAttribute key="automaticValidate" value="false"/>
-<stringAttribute key="bootstrap" value=""/>
-<stringAttribute key="checked" value="[NONE]"/>
-<booleanAttribute key="clearConfig" value="true"/>
-<booleanAttribute key="clearws" value="true"/>
-<booleanAttribute key="clearwslog" value="false"/>
-<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
-<booleanAttribute key="default" value="false"/>
-<booleanAttribute key="includeOptional" value="false"/>
-<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/org.eclipse.mylyn.reviews.r4e.connector.tests"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="4"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
-<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
-</listAttribute>
-<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value="=org.eclipse.mylyn.reviews.r4e.connector.tests"/>
-<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
-<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
-<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
-<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value=""/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.mylyn.reviews.r4e.connector.tests"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="pde.version" value="3.3"/>
-<stringAttribute key="product" value="org.eclipse.platform.ide"/>
-<booleanAttribute key="run_in_ui_thread" value="false"/>
-<stringAttribute key="selected_target_plugins" value="com.ibm.icu@default:default,com.jcraft.jsch@default:default,com.sun.syndication@default:default,javax.activation@default:default,javax.annotation@default:default,javax.inject@default:default,javax.mail@default:default,javax.xml@default:default,org.apache.batik.css@default:default,org.apache.batik.util.gui@default:default,org.apache.batik.util@default:default,org.apache.commons.codec@default:default,org.apache.commons.httpclient@default:default,org.apache.commons.io@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.lucene.analysis@default:default,org.apache.lucene.core*2.9.1.v201101211721@default:default,org.eclipse.ant.core@default:default,org.eclipse.birt.jetty.overlay@default:false,org.eclipse.compare.core@default:default,org.eclipse.compare@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.net@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.debug.core@default:default,org.eclipse.e4.core.commands@default:default,org.eclipse.e4.core.contexts@default:default,org.eclipse.e4.core.di.extensions@default:default,org.eclipse.e4.core.di@default:default,org.eclipse.e4.core.services@default:default,org.eclipse.e4.ui.bindings@default:default,org.eclipse.e4.ui.css.core@default:default,org.eclipse.e4.ui.css.swt.theme@default:default,org.eclipse.e4.ui.css.swt@default:default,org.eclipse.e4.ui.di@default:default,org.eclipse.e4.ui.model.workbench@default:default,org.eclipse.e4.ui.services@default:default,org.eclipse.e4.ui.widgets@default:default,org.eclipse.e4.ui.workbench.renderers.swt@default:default,org.eclipse.e4.ui.workbench.swt@default:default,org.eclipse.e4.ui.workbench3@default:default,org.eclipse.e4.ui.workbench@default:default,org.eclipse.egit.core@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.event@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.security@default:default,org.eclipse.equinox.util@default:default,org.eclipse.help.base@default:default,org.eclipse.help@default:default,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.jdt.core@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface.text@default:default,org.eclipse.jface@default:default,org.eclipse.jgit@default:default,org.eclipse.mylyn.commons.core@default:default,org.eclipse.mylyn.commons.identity.core@default:default,org.eclipse.mylyn.commons.net@default:default,org.eclipse.mylyn.commons.notifications.core@default:default,org.eclipse.mylyn.commons.notifications.feed@default:default,org.eclipse.mylyn.commons.notifications.ui@default:default,org.eclipse.mylyn.commons.repositories.core@default:default,org.eclipse.mylyn.commons.repositories.ui@default:default,org.eclipse.mylyn.commons.screenshots@default:default,org.eclipse.mylyn.commons.sdk.util@default:default,org.eclipse.mylyn.commons.ui@default:default,org.eclipse.mylyn.commons.workbench@default:default,org.eclipse.mylyn.context.core@default:default,org.eclipse.mylyn.monitor.core@default:default,org.eclipse.mylyn.monitor.ui@default:default,org.eclipse.mylyn.tasks.core@default:default,org.eclipse.mylyn.tasks.ui@default:default,org.eclipse.mylyn.tests.util@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.platform@default:default,org.eclipse.swt@default:default,org.eclipse.team.core@default:default,org.eclipse.team.ui@default:default,org.eclipse.text@default:default,org.eclipse.ui.browser@default:default,org.eclipse.ui.cheatsheets@default:default,org.eclipse.ui.editors@default:default,org.eclipse.ui.forms@default:default,org.eclipse.ui.ide.application@default:default,org.eclipse.ui.ide@default:default,org.eclipse.ui.intro@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.ui.views@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.hamcrest.core@default:default,org.hamcrest.integration@default:default,org.hamcrest.library@default:default,org.hamcrest.text@default:default,org.hamcrest@default:default,org.jdom@default:default,org.junit@default:default,org.mockito@default:default,org.objenesis@default:default,org.w3c.css.sac@default:default,org.w3c.dom.smil@default:default,org.w3c.dom.svg@default:default"/>
-<stringAttribute key="selected_workspace_plugins" value="org.eclipse.mylyn.reviews.VCalendar@default:default,org.eclipse.mylyn.reviews.frame.ui@default:default,org.eclipse.mylyn.reviews.notifications@default:default,org.eclipse.mylyn.reviews.r4e.connector.tests@default:false,org.eclipse.mylyn.reviews.r4e.connector@default:default,org.eclipse.mylyn.reviews.r4e.core.tests@default:default,org.eclipse.mylyn.reviews.r4e.core@default:default,org.eclipse.mylyn.reviews.r4e.mail.smtp@default:default,org.eclipse.mylyn.reviews.r4e.transform@default:default,org.eclipse.mylyn.reviews.r4e.ui@default:default"/>
-<booleanAttribute key="show_selected_only" value="false"/>
-<stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>
-<booleanAttribute key="tracing" value="false"/>
-<booleanAttribute key="useCustomFeatures" value="false"/>
-<booleanAttribute key="useDefaultConfig" value="true"/>
-<booleanAttribute key="useDefaultConfigArea" value="false"/>
-<booleanAttribute key="useProduct" value="false"/>
-</launchConfiguration>
diff --git a/org.eclipse.mylyn.reviews.r4e.ui.tests/src/org/eclipse/mylyn/reviews/r4e/ui/tests/R4ETestCase.java b/org.eclipse.mylyn.reviews.r4e.ui.tests/src/org/eclipse/mylyn/reviews/r4e/ui/tests/R4ETestCase.java
index 0ae8778..d132361 100644
--- a/org.eclipse.mylyn.reviews.r4e.ui.tests/src/org/eclipse/mylyn/reviews/r4e/ui/tests/R4ETestCase.java
+++ b/org.eclipse.mylyn.reviews.r4e.ui.tests/src/org/eclipse/mylyn/reviews/r4e/ui/tests/R4ETestCase.java
@@ -12,7 +12,6 @@
  * 
  * Contributors:
  *   Sebastien Dubois - Created for Mylyn Review R4E project
- *   
  ******************************************************************************/
 
 package org.eclipse.mylyn.reviews.r4e.ui.tests;
diff --git a/pom.xml b/pom.xml
index 2568e5f..5a7c62b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -195,7 +195,7 @@
      <module>org.eclipse.mylyn.reviews.r4e.ui</module>
      <module>org.eclipse.mylyn.reviews.r4e.upgrade</module>
      <module>org.eclipse.mylyn.reviews.VCalendar</module>
-     <!--  module>org.eclipse.mylyn.reviews.r4e.ui.tests</module -->
+     <!--   module>org.eclipse.mylyn.reviews.r4e.ui.tests</module -->
      <module>org.eclipse.mylyn.reviews.connector</module>
      <module>org.eclipse.mylyn.reviews.connector.ui</module>
      <module>org.eclipse.mylyn.reviews.connector.tests</module>