diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.debug/.classpath b/org.eclipse.mylyn.reviews.r4e-gerrit.debug/.classpath
deleted file mode 100644
index 4c62a80..0000000
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.debug/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.debug/.project b/org.eclipse.mylyn.reviews.r4e-gerrit.debug/.project
deleted file mode 100644
index 6bc31c3..0000000
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.debug/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.mylyn.reviews.r4e-gerrit.debug</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.debug/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.mylyn.reviews.r4e-gerrit.debug/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 8000cd6..0000000
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.debug/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,11 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.debug/META-INF/MANIFEST.MF b/org.eclipse.mylyn.reviews.r4e-gerrit.debug/META-INF/MANIFEST.MF
deleted file mode 100644
index 77433e7..0000000
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.debug/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,12 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: R4EDebug
-Bundle-SymbolicName: org.eclipse.mylyn.reviews.r4e-gerrit.debug
-Bundle-Version: 0.2.0.qualifier
-Bundle-Activator: org.eclipse.mylyn.reviews.r4e_gerrit.debug.R4EGerritDebugActivator
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime
-Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Export-Package: org.eclipse.mylyn.reviews.r4e_gerrit.debug,
- org.eclipse.mylyn.reviews.r4e_gerrit.debug.utils
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.debug/build.properties b/org.eclipse.mylyn.reviews.r4e-gerrit.debug/build.properties
deleted file mode 100644
index 34d2e4d..0000000
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.debug/build.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.debug/src/org/eclipse/mylyn/reviews/r4e_gerrit/debug/R4EGerritDebugActivator.java b/org.eclipse.mylyn.reviews.r4e-gerrit.debug/src/org/eclipse/mylyn/reviews/r4e_gerrit/debug/R4EGerritDebugActivator.java
deleted file mode 100644
index 000dd4d..0000000
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.debug/src/org/eclipse/mylyn/reviews/r4e_gerrit/debug/R4EGerritDebugActivator.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.eclipse.mylyn.reviews.r4e_gerrit.debug;
-
-import org.eclipse.mylyn.reviews.r4e_gerrit.debug.utils.Tracer;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-
-/**
- * The activator class controls the plug-in life cycle
- */
-public class R4EGerritDebugActivator extends AbstractUIPlugin {
-
-	// ------------------------------------------------------------------------
-	// Member variables
-	// ------------------------------------------------------------------------
-
-	/**
-	 * Field Tracer.
-	 */
-	public static Tracer Ftracer;
-
-	// The plug-in ID
-	public static final String PLUGIN_ID = "org.eclipse.mylyn.reviews.r4e-gerrit.debug"; //$NON-NLS-1$
-
-	// The shared instance
-	private static R4EGerritDebugActivator fPlugin;
-	
-	// ------------------------------------------------------------------------
-	// Constructors
-	// ------------------------------------------------------------------------
-	/**
-	 * The constructor
-	 */
-	public R4EGerritDebugActivator() {
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-		fPlugin = this;
-		Ftracer = new Tracer();
-		Ftracer.init(PLUGIN_ID);
-		Ftracer.traceDebug("plugin started");
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext context) throws Exception {
-		fPlugin = null;
-		super.stop(context);
-	}
-
-	/**
-	 * Returns the shared instance
-	 *
-	 * @return the shared instance
-	 */
-	public static R4EGerritDebugActivator getDefault() {
-		return fPlugin;
-	}
-	
-//	public static Tracer  initTracer(String aPluginId) {
-//		Ftracer = new Tracer();
-//		Ftracer.init(aPluginId);
-//		Ftracer.traceDebug("plugin started");
-//		return Ftracer;
-//	}
-
-}
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.debug/src/org/eclipse/mylyn/reviews/r4e_gerrit/debug/utils/Tracer.java b/org.eclipse.mylyn.reviews.r4e-gerrit.debug/src/org/eclipse/mylyn/reviews/r4e_gerrit/debug/utils/Tracer.java
deleted file mode 100644
index b8afef7..0000000
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.debug/src/org/eclipse/mylyn/reviews/r4e_gerrit/debug/utils/Tracer.java
+++ /dev/null
@@ -1,340 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 Ericsson AB and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Ericsson AB - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylyn.reviews.r4e_gerrit.debug.utils;
-
-import java.io.BufferedWriter;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-import org.eclipse.core.runtime.Platform;
-
-// ESCA-JAVA0100:
-/**
- * This class implements a simple trace facility using Eclipse that can be used to send debugging output to the console
- * and/or to file. It supports various levels of tracing
- * 
- * @author Sebastien Dubois
- */
-public class Tracer {
-
-	// ------------------------------------------------------------------------
-	// Constants
-	// ------------------------------------------------------------------------
-
-	static final int DEFAULT_STACK_TRACE_ELEMENT = 3;
-
-	// ------------------------------------------------------------------------
-	// Member variables
-	// ------------------------------------------------------------------------
-
-	static boolean ERROR = false;
-
-	static boolean WARNING = false;
-
-	static boolean INFO = false;
-
-	static boolean DEBUG = false;
-
-	private String fPluginID;
-
-	private BufferedWriter fTraceFile;
-
-	private SimpleDateFormat fTimeFormat;
-
-	private StringBuilder fTraceMessage;
-
-	private boolean fLogToConsole;
-
-	// ------------------------------------------------------------------------
-	// Constructors
-	// ------------------------------------------------------------------------
-
-	public Tracer() {
-		fTraceFile = null;
-		fTimeFormat = new SimpleDateFormat("HH:mm:ss:SSS");
-		fTraceMessage = new StringBuilder();
-		fLogToConsole = true;
-	}
-
-	// ------------------------------------------------------------------------
-	// Methods
-	// ------------------------------------------------------------------------
-
-	/**
-	 * Initialize the tracer object
-	 * 
-	 * @param aPluginId
-	 *            - the calling plugin ID (as a String object)
-	 */
-	public void init(String aPluginId) {
-
-		String traceKey = null;
-		fPluginID = aPluginId;
-
-		// Initialize tracer members from .options plugin file
-		traceKey = Platform.getDebugOption(fPluginID + "/error");
-		if (traceKey != null) {
-			ERROR = (Boolean.valueOf(traceKey)).booleanValue();
-		}
-
-		traceKey = Platform.getDebugOption(fPluginID + "/warning");
-		if (traceKey != null) {
-			WARNING = (Boolean.valueOf(traceKey)).booleanValue();
-		}
-
-		traceKey = Platform.getDebugOption(fPluginID + "/info");
-		if (traceKey != null) {
-			INFO = (Boolean.valueOf(traceKey)).booleanValue();
-		}
-
-		traceKey = Platform.getDebugOption(fPluginID + "/debug");
-		if (traceKey != null) {
-			DEBUG = (Boolean.valueOf(traceKey)).booleanValue();
-		}
-
-		traceKey = Platform.getDebugOption(fPluginID + "/consoleLog");
-		if (traceKey != null) {
-			fLogToConsole = (Boolean.valueOf(traceKey)).booleanValue();
-		}
-
-		traceKey = Platform.getDebugOption(fPluginID + "/logfile");
-		if (traceKey != null) {
-			try {
-				fTraceFile = new BufferedWriter(new FileWriter(traceKey));
-			} catch (IOException e) {
-				// ESCA-JAVA0265:
-				e.printStackTrace();
-			}
-		}
-	}
-
-	/**
-	 * Close the trace output logfile (if used)
-	 */
-	public void closeLogfile() {
-		if (fTraceFile == null) {
-			return;
-		}
-
-		try {
-			fTraceFile.close();
-			fTraceFile = null;
-		} catch (IOException e) {
-			// ESCA-JAVA0265:
-			e.printStackTrace();
-		}
-	}
-
-	/**
-	 * @param newValue
-	 * @return
-	 */
-	public static boolean setError(boolean newValue) {
-		boolean oldValue = ERROR;
-		ERROR = newValue;
-		return oldValue;
-	}
-
-	/**
-	 * @param newValue
-	 * @return
-	 */
-	public static boolean setDebug(boolean newValue) {
-		boolean oldValue = DEBUG;
-		DEBUG = newValue;
-		return oldValue;
-	}
-
-	/**
-	 * @param newValue
-	 * @return
-	 */
-	public static boolean setInfo(boolean newValue) {
-		boolean oldValue = INFO;
-		INFO = newValue;
-		return oldValue;
-	}
-
-	/**
-	 * @param newValue
-	 * @return
-	 */
-	public static boolean setWarning(boolean newValue) {
-		boolean oldValue = WARNING;
-		WARNING = newValue;
-		return oldValue;
-	}
-
-	public static boolean isError() {
-		return ERROR;
-	}
-
-	public static boolean isDebug() {
-		return DEBUG;
-	}
-
-	public static boolean isInfo() {
-		return INFO;
-	}
-
-	public static boolean isWarning() {
-		return WARNING;
-	}
-
-	/**
-	 * Output an error trace
-	 * 
-	 * @param aMsg
-	 *            - the trace message to output
-	 */
-	public void traceError(String aMsg) {
-		if (ERROR) {
-			fTraceMessage.setLength(0);
-			// Timestamp
-			writeTimestamp(fTraceMessage);
-			fTraceMessage.append(" E");
-			writeThread(fTraceMessage);
-			writeLocation(fTraceMessage);
-			fTraceMessage.append(aMsg);
-			outputTrace(fTraceMessage);
-		}
-	}
-
-	/**
-	 * Output a warning trace
-	 * 
-	 * @param aMsg
-	 *            - the trace message to output
-	 */
-	public void traceWarning(String aMsg) {
-		if (WARNING) {
-			fTraceMessage.setLength(0);
-			// Timestamp
-			writeTimestamp(fTraceMessage);
-			fTraceMessage.append(" W");
-			writeThread(fTraceMessage);
-			writeLocation(fTraceMessage);
-			fTraceMessage.append(aMsg);
-			outputTrace(fTraceMessage);
-		}
-	}
-
-	/**
-	 * Output an info trace
-	 * 
-	 * @param aMsg
-	 *            - the trace message to output
-	 */
-	public void traceInfo(String aMsg) {
-		if (INFO) {
-			fTraceMessage.setLength(0);
-			// Timestamp
-			writeTimestamp(fTraceMessage);
-			fTraceMessage.append(" I");
-			writeThread(fTraceMessage);
-			writeLocation(fTraceMessage);
-			fTraceMessage.append(aMsg);
-			outputTrace(fTraceMessage);
-		}
-	}
-
-	/**
-	 * Output a debug trace
-	 * 
-	 * @param aMsg
-	 *            - the trace message to output
-	 */
-	public void traceDebug(String aMsg) {
-		if (DEBUG) {
-			fTraceMessage.setLength(0);
-			// Timestamp
-			writeTimestamp(fTraceMessage);
-			fTraceMessage.append(" D");
-			writeThread(fTraceMessage);
-			writeLocation(fTraceMessage);
-			fTraceMessage.append(aMsg);
-			outputTrace(fTraceMessage);
-		}
-	}
-
-	/**
-	 * Write timestamp header
-	 * 
-	 * @param aSb
-	 *            - the StringBuilder object (trace line) to append to
-	 */
-	private void writeTimestamp(StringBuilder aSb) {
-		aSb.append("[" + fTimeFormat.format(new Date()) + "]");
-	}
-
-	/**
-	 * Write thread header
-	 * 
-	 * @param aSb
-	 *            - the StringBuilder object (trace line) to append to
-	 */
-	private static void writeThread(StringBuilder aSb) {
-		aSb.append(" T=" + Thread.currentThread().getName());
-	}
-
-	/**
-	 * Write location header
-	 * 
-	 * @param aSb
-	 *            - the StringBuilder object (trace line) to append to
-	 */
-	private static void writeLocation(StringBuilder aSb) {
-		int traceElement = DEFAULT_STACK_TRACE_ELEMENT;
-		// ESCA-JAVA0067:
-		final StackTraceElement e[] = Thread.currentThread().getStackTrace();
-		if (e != null) {
-			traceElement = traceElement >= e.length ? e.length - 1 : traceElement;
-			StackTraceElement s = e[traceElement];
-			if (s != null) {
-				String simpleClassName = s.getClassName();
-				String[] clsNameSegs = simpleClassName.split("\\.");
-				if (clsNameSegs.length > 0) {
-					simpleClassName = clsNameSegs[clsNameSegs.length - 1];
-				}
-				aSb.append(" " + simpleClassName + ":" + s.getLineNumber() + " (" + s.getMethodName() + "): ");
-			}
-		}
-	}
-
-	/**
-	 * Write trace to console/file
-	 * 
-	 * @param aSb
-	 *            - the StringBuilder object (trace line) to output
-	 */
-	private void outputTrace(StringBuilder aSb) {
-
-		if (fLogToConsole) {
-			// ESCA-JAVA0266:
-			System.out.println(aSb);
-		}
-
-		if (fTraceFile != null) {
-			try {
-				fTraceFile.write(aSb.toString());
-				fTraceFile.newLine();
-				fTraceFile.flush();
-			} catch (IOException e) {
-				// ESCA-JAVA0265:
-				e.printStackTrace();
-			}
-		}
-	}
-
-}
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/AddGerritSiteHandler.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/AddGerritSiteHandler.java
index d6403ad..913f07b 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/AddGerritSiteHandler.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/AddGerritSiteHandler.java
@@ -159,7 +159,7 @@
 			public IStatus run(final IProgressMonitor aMonitor) {
 				aMonitor.beginTask(COMMAND_MESSAGE, IProgressMonitor.UNKNOWN);
 						
-				final TaskRepository taskRepository = getTaskRepository(fServerUtil.getLastSavedGerritServer()); 
+				TaskRepository taskRepository = getTaskRepository(fServerUtil.getLastSavedGerritServer()); 
 				
 				R4EGerritPlugin.Ftracer.traceInfo("repository:   " + taskRepository.getUrl()); //$NON-NLS-1$
 				
@@ -174,6 +174,7 @@
 				});
 				
 				//When the wizard is closed
+				taskRepository = wizard.getRepository();//Possibility the taskRepository has changed
 				if (taskRepository.getUrl().isEmpty() || 
 						taskRepository.getUrl().endsWith(R4EUIConstants.DEFAULT_REPOSITORY)) {
 					//User selected the Cancel button
@@ -181,6 +182,12 @@
 				} else {
 				    R4EGerritPlugin.Ftracer.traceInfo("AFTER: repository: :  FINISH " ); //$NON-NLS-1$		
 					fServerUtil.saveLastGerritServer(taskRepository.getUrl());
+					//Test if we already have the Gerrit server in our internal map
+					TaskRepository taskRepositoryTmp = fServerUtil.getTaskRepo (taskRepository.getUrl());
+					if (taskRepositoryTmp == null) {
+						//Need to re-map our internal Gerrit Repo
+						fServerUtil.mapConfiguredGerritServer();
+					}
 					/*****************************************************/
 					/*                                                   */
 					/*    Now, we need to get the Gerrit repo data       */
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/utils/R4EGerritServerUtility.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/utils/R4EGerritServerUtility.java
index 9a96781..0106c52 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/utils/R4EGerritServerUtility.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/utils/R4EGerritServerUtility.java
@@ -106,7 +106,7 @@
 	 * Map the configured Gerrit server found in the TaskList
 	 * @return Map<TaskRepository, String>
 	 */
-	private Map<TaskRepository, String> mapConfiguredGerritServer () {
+	public Map<TaskRepository, String> mapConfiguredGerritServer () {
 		//Reset the list of Gerrit server
 		fResultTask.clear();
 		
@@ -389,25 +389,25 @@
 	 * 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" ); 			
-		}
+//		//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" ); 			
+//		}
 	}
 //
 //    /**
