[bugzilla 384447] Refactoring the IntentRepositoryManagerContribution extensiblity : now using extension points
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/plugin.xml b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/plugin.xml
index 837dd92..dc46364 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/plugin.xml
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/plugin.xml
@@ -101,5 +101,11 @@
              repositoryStructurerClass="org.eclipse.mylyn.docs.intent.client.ui.cdo.repository.IntentRepositoryCDORestructurer">
        </Repository>
     </extension>
+    <extension
+          point="org.eclipse.mylyn.docs.intent.collab.common.repositorymanagercontribution">
+       <repositorymanagercontribution
+             class="org.eclipse.mylyn.docs.intent.client.ui.cdo.repository.IntentCDOBasedRepositoryManagerContribution">
+       </repositorymanagercontribution>
+    </extension>
 
 </plugin>
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/Activator.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/Activator.java
index c4bea0a..aca1d21 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/Activator.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/Activator.java
@@ -11,8 +11,6 @@
 package org.eclipse.mylyn.docs.intent.client.ui.cdo;
 
 import org.eclipse.emf.cdo.util.CDOUtil;
-import org.eclipse.mylyn.docs.intent.client.ui.cdo.repository.IntentCDOBasedRepositoryManagerContribution;
-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
 
@@ -29,8 +27,6 @@
 	// The shared instance
 	private static Activator plugin;
 
-	private IntentCDOBasedRepositoryManagerContribution repositoryManagerContribution;
-
 	/**
 	 * The Activator constructor.
 	 */
@@ -46,11 +42,6 @@
 		super.start(context);
 		plugin = this;
 
-		// Register the RepositoryManagerContribution allowing to handle CDORepositories
-		repositoryManagerContribution = new IntentCDOBasedRepositoryManagerContribution();
-		IntentRepositoryManager.INSTANCE
-				.addIntentRepositoryManagerContribution(repositoryManagerContribution);
-
 		// Allow legacy mode, in case Modeling Units describe non cdo-native models (like ECore)
 		CDOUtil.setLegacyModeDefault(true);
 	}
@@ -63,10 +54,6 @@
 	public void stop(BundleContext context) throws Exception {
 		plugin = null;
 		super.stop(context);
-
-		// Unregister the RepositoryManagerContribution allowing to handle IProject
-		IntentRepositoryManager.INSTANCE
-				.removeIntentRepositoryManagerContribution(repositoryManagerContribution);
 	}
 
 	/**
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/handlers/InitializeContent.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/handlers/InitializeContent.java
index ea2e91a..70bbbed 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/handlers/InitializeContent.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/handlers/InitializeContent.java
@@ -13,7 +13,7 @@
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryInitializer;
+import org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryInitializer;
 
 /**
  * Handler that print a widget allowing the user to select the Intent element to open.
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/handlers/ShowIndexHandler.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/handlers/ShowIndexHandler.java
index 63a8f25..29a1384 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/handlers/ShowIndexHandler.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/handlers/ShowIndexHandler.java
@@ -15,7 +15,7 @@
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.mylyn.docs.intent.client.ui.utils.IntentEditorOpener;
-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager;
+import org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryManager;
 import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;
 
 /**
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/launcher/IntentCDOManager.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/launcher/IntentCDOManager.java
index 45fa208..bb0fe07 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/launcher/IntentCDOManager.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/launcher/IntentCDOManager.java
@@ -23,9 +23,9 @@
 import org.eclipse.mylyn.docs.intent.client.synchronizer.SynchronizerRepositoryClient;

 import org.eclipse.mylyn.docs.intent.client.synchronizer.launcher.SynchronizerCreator;

 import org.eclipse.mylyn.docs.intent.client.synchronizer.listeners.GeneratedElementListener;

-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager;

 import org.eclipse.mylyn.docs.intent.collab.common.logger.IIntentLogger.LogType;

 import org.eclipse.mylyn.docs.intent.collab.common.logger.IntentLogger;

+import org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryManager;

 import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.ReadOnlyException;

 import org.eclipse.mylyn.docs.intent.collab.repository.Repository;

 import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/repository/IntentCDOBasedRepositoryManagerContribution.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/repository/IntentCDOBasedRepositoryManagerContribution.java
index 484bfda..89c1d1f 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/repository/IntentCDOBasedRepositoryManagerContribution.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/repository/IntentCDOBasedRepositoryManagerContribution.java
@@ -12,7 +12,7 @@
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.mylyn.docs.intent.collab.cdo.repository.CDOConfig;
-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManagerContribution;
+import org.eclipse.mylyn.docs.intent.collab.common.repository.contribution.IntentRepositoryManagerContribution;
 import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryStructurer;
 import org.eclipse.mylyn.docs.intent.collab.repository.Repository;
 import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;
@@ -30,7 +30,7 @@
 	/**
 	 * {@inheritDoc}
 	 * 
-	 * @see org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManagerContribution#canCreateRepository(java.lang.String)
+	 * @see org.eclipse.mylyn.docs.intent.collab.common.repository.contribution.IntentRepositoryManagerContribution#canCreateRepository(java.lang.String)
 	 */
 	public boolean canCreateRepository(String identifier) {
 		return identifier.contains("cdo:/");
@@ -39,7 +39,7 @@
 	/**
 	 * {@inheritDoc}
 	 * 
-	 * @see org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManagerContribution#createRepository(java.lang.String)
+	 * @see org.eclipse.mylyn.docs.intent.collab.common.repository.contribution.IntentRepositoryManagerContribution#createRepository(java.lang.String)
 	 */
 	public Repository createRepository(String identifier) throws RepositoryConnectionException {
 		String repositoryType = "org.eclipse.mylyn.docs.intent.collab.cdo.repository";
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/plugin.xml b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/plugin.xml
index 62c7d3c..2701c19 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/plugin.xml
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/plugin.xml
@@ -293,6 +293,12 @@
              type="java.lang.Object">

        </propertyTester>

     </extension>

+    <extension

+          point="org.eclipse.mylyn.docs.intent.collab.common.repositorymanagercontribution">

+       <repositorymanagercontribution

+             class="org.eclipse.mylyn.docs.intent.client.ui.ide.repository.IntentProjectBasedRepositoryManagerContribution">

+       </repositorymanagercontribution>

+    </extension>

    

    

    

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/Activator.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/Activator.java
index 128d1c5..5c27097 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/Activator.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/Activator.java
@@ -17,9 +17,6 @@
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.mylyn.docs.intent.client.ui.ide.builder.IntentProjectListener;
-import org.eclipse.mylyn.docs.intent.client.ui.ide.repository.IntentProjectBasedRepositoryManagerContribution;
-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager;
-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManagerContribution;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
 
@@ -45,8 +42,6 @@
 	 */
 	private static Activator plugin;
 
-	private IntentRepositoryManagerContribution repositoryManagerContribution;
-
 	/**
 	 * The constructor.
 	 */
@@ -62,11 +57,6 @@
 		super.start(context);
 		plugin = this;
 
-		// Register the RepositoryManagerContribution allowing to handle IProject
-		repositoryManagerContribution = new IntentProjectBasedRepositoryManagerContribution();
-		IntentRepositoryManager.INSTANCE
-				.addIntentRepositoryManagerContribution(repositoryManagerContribution);
-
 		// Awakes the listener if necessary
 		final Job activateListenerJob = new Job("Activating intent projects listener") {
 			@Override
@@ -91,10 +81,6 @@
 		IWorkspace workspace = ResourcesPlugin.getWorkspace();
 		workspace.removeResourceChangeListener(intentProjectListener);
 
-		// Unregister the RepositoryManagerContribution allowing to handle IProject
-		IntentRepositoryManager.INSTANCE
-				.removeIntentRepositoryManagerContribution(repositoryManagerContribution);
-
 		plugin = null;
 		super.stop(context);
 	}
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/builder/IntentBuilderDeltaVisitor.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/builder/IntentBuilderDeltaVisitor.java
index 3bcea33..1b5ebc9 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/builder/IntentBuilderDeltaVisitor.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/builder/IntentBuilderDeltaVisitor.java
@@ -21,7 +21,7 @@
 import org.eclipse.core.resources.IResourceDelta;
 import org.eclipse.core.resources.IResourceDeltaVisitor;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager;
+import org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryManager;
 
 /**
  * Visitor used by the Intent builder.
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/OpenEditorAction.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/OpenEditorAction.java
index 4b161da..6d41063 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/OpenEditorAction.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/OpenEditorAction.java
@@ -20,7 +20,7 @@
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.mylyn.docs.intent.client.ui.logger.IntentUiLogger;
 import org.eclipse.mylyn.docs.intent.client.ui.utils.IntentEditorOpener;
-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager;
+import org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryManager;
 import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;
 import org.eclipse.mylyn.docs.intent.core.document.IntentGenericElement;
 import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexEntry;
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/ProjectExplorerRefresher.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/ProjectExplorerRefresher.java
index 722aee5..aec3126 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/ProjectExplorerRefresher.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/ProjectExplorerRefresher.java
@@ -19,11 +19,11 @@
 import org.eclipse.core.runtime.CoreException;

 import org.eclipse.core.runtime.jobs.Job;

 import org.eclipse.emf.ecore.EObject;

-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager;

 import org.eclipse.mylyn.docs.intent.collab.common.logger.IIntentLogger.LogType;

 import org.eclipse.mylyn.docs.intent.collab.common.logger.IntentLogger;

 import org.eclipse.mylyn.docs.intent.collab.common.query.CompilationStatusQuery;

 import org.eclipse.mylyn.docs.intent.collab.common.query.IndexQuery;

+import org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryManager;

 import org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryObjectHandler;

 import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.ReadOnlyException;

 import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter;

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/RepositoryContentProvider.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/RepositoryContentProvider.java
index e43f880..636dec0 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/RepositoryContentProvider.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/RepositoryContentProvider.java
@@ -16,9 +16,9 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager;
 import org.eclipse.mylyn.docs.intent.collab.common.location.IntentLocations;
 import org.eclipse.mylyn.docs.intent.collab.common.query.IndexQuery;
+import org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryManager;
 import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter;
 import org.eclipse.mylyn.docs.intent.collab.ide.repository.WorkspaceConfig;
 import org.eclipse.mylyn.docs.intent.collab.repository.Repository;
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/ShowProblemInEditorHandler.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/ShowProblemInEditorHandler.java
index dd8ea13..5c3b4cc 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/ShowProblemInEditorHandler.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/ShowProblemInEditorHandler.java
@@ -21,8 +21,8 @@
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.mylyn.docs.intent.client.ui.logger.IntentUiLogger;
 import org.eclipse.mylyn.docs.intent.client.ui.utils.IntentEditorOpener;
-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager;
 import org.eclipse.mylyn.docs.intent.collab.common.location.IntentLocations;
+import org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryManager;
 import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter;
 import org.eclipse.mylyn.docs.intent.collab.repository.Repository;
 import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/projectmanager/IntentProjectManager.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/projectmanager/IntentProjectManager.java
index c833186..35c347d 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/projectmanager/IntentProjectManager.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/projectmanager/IntentProjectManager.java
@@ -24,9 +24,9 @@
 import org.eclipse.mylyn.docs.intent.client.ui.ide.builder.IntentNature;

 import org.eclipse.mylyn.docs.intent.client.ui.ide.generatedelementlistener.IDEGeneratedElementListener;

 import org.eclipse.mylyn.docs.intent.client.ui.ide.navigator.ProjectExplorerRefresher;

-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager;

 import org.eclipse.mylyn.docs.intent.collab.common.logger.IIntentLogger.LogType;

 import org.eclipse.mylyn.docs.intent.collab.common.logger.IntentLogger;

+import org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryManager;

 import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.ReadOnlyException;

 import org.eclipse.mylyn.docs.intent.collab.repository.Repository;

 import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/propertytester/IsAssociatedToIntentDocumentTester.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/propertytester/IsAssociatedToIntentDocumentTester.java
index 9f3be2c..1b5e9d8 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/propertytester/IsAssociatedToIntentDocumentTester.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/propertytester/IsAssociatedToIntentDocumentTester.java
@@ -20,8 +20,8 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.mylyn.docs.intent.client.ui.ide.builder.IntentNature;
-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager;
 import org.eclipse.mylyn.docs.intent.collab.common.location.IntentLocations;
+import org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryManager;
 import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter;
 import org.eclipse.mylyn.docs.intent.collab.repository.Repository;
 import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/repository/IntentProjectBasedRepositoryManagerContribution.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/repository/IntentProjectBasedRepositoryManagerContribution.java
index e22fc42..1940444 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/repository/IntentProjectBasedRepositoryManagerContribution.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/repository/IntentProjectBasedRepositoryManagerContribution.java
@@ -14,7 +14,7 @@
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManagerContribution;
+import org.eclipse.mylyn.docs.intent.collab.common.repository.contribution.IntentRepositoryManagerContribution;
 import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryStructurer;
 import org.eclipse.mylyn.docs.intent.collab.repository.Repository;
 import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;
@@ -32,7 +32,7 @@
 	/**
 	 * {@inheritDoc}
 	 * 
-	 * @see org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManagerContribution#canCreateRepository(java.lang.String)
+	 * @see org.eclipse.mylyn.docs.intent.collab.common.repository.contribution.IntentRepositoryManagerContribution#canCreateRepository(java.lang.String)
 	 */
 	public boolean canCreateRepository(String identifier) {
 		return !identifier.contains("/");
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/wizards/NewIntentProjectWizard.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/wizards/NewIntentProjectWizard.java
index 9b47bbf..4f46424 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/wizards/NewIntentProjectWizard.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/wizards/NewIntentProjectWizard.java
@@ -25,8 +25,8 @@
 import org.eclipse.mylyn.docs.intent.client.ui.ide.builder.ToggleNatureAction;

 import org.eclipse.mylyn.docs.intent.client.ui.logger.IntentUiLogger;

 import org.eclipse.mylyn.docs.intent.client.ui.utils.IntentEditorOpener;

-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryInitializer;

-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager;

+import org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryInitializer;

+import org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryManager;

 import org.eclipse.mylyn.docs.intent.collab.repository.Repository;

 import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;

 import org.eclipse.swt.widgets.Composite;

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui/src/org/eclipse/mylyn/docs/intent/client/ui/editor/IntentEditorInput.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui/src/org/eclipse/mylyn/docs/intent/client/ui/editor/IntentEditorInput.java
index bcefae8..8e5214c 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui/src/org/eclipse/mylyn/docs/intent/client/ui/editor/IntentEditorInput.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui/src/org/eclipse/mylyn/docs/intent/client/ui/editor/IntentEditorInput.java
@@ -20,9 +20,9 @@
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.mylyn.docs.intent.client.ui.IntentEditorActivator;
 import org.eclipse.mylyn.docs.intent.client.ui.logger.IntentUiLogger;
-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager;
 import org.eclipse.mylyn.docs.intent.collab.common.logger.IIntentLogger.LogType;
 import org.eclipse.mylyn.docs.intent.collab.common.logger.IntentLogger;
+import org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryManager;
 import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.ReadOnlyException;
 import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter;
 import org.eclipse.mylyn.docs.intent.collab.repository.Repository;
diff --git a/plugins/org.eclipse.mylyn.docs.intent.collab.common/META-INF/MANIFEST.MF b/plugins/org.eclipse.mylyn.docs.intent.collab.common/META-INF/MANIFEST.MF
index 3abd645..cc5bee0 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.collab.common/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.mylyn.docs.intent.collab.common/META-INF/MANIFEST.MF
@@ -8,7 +8,9 @@
 Export-Package: org.eclipse.mylyn.docs.intent.collab.common,
  org.eclipse.mylyn.docs.intent.collab.common.location,
  org.eclipse.mylyn.docs.intent.collab.common.logger,
- org.eclipse.mylyn.docs.intent.collab.common.query
+ org.eclipse.mylyn.docs.intent.collab.common.query,
+ org.eclipse.mylyn.docs.intent.collab.common.repository,
+ org.eclipse.mylyn.docs.intent.collab.common.repository.contribution
 Bundle-Vendor: %providerName
 Require-Bundle: org.eclipse.mylyn.docs.intent.collab,
  com.google.guava;bundle-version="10.0.1",
diff --git a/plugins/org.eclipse.mylyn.docs.intent.collab.common/plugin.xml b/plugins/org.eclipse.mylyn.docs.intent.collab.common/plugin.xml
index 42ec0ec..e174e6b 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.collab.common/plugin.xml
+++ b/plugins/org.eclipse.mylyn.docs.intent.collab.common/plugin.xml
@@ -2,5 +2,6 @@
 <?eclipse version="3.4"?>
 <plugin>
    <extension-point id="intentlogger" name="org.eclipse.mylyn.docs.intent.collab.common.intentlogger" schema="schema/intentlogger.exsd"/>
+   <extension-point id="repositorymanagercontribution" name="org.eclipse.mylyn.docs.intent.collab.common.repositorymanagercontribution" schema="schema/repositorymanagerextension.exsd"/>
 
 </plugin>
diff --git a/plugins/org.eclipse.mylyn.docs.intent.collab.common/schema/repositorymanagerextension.exsd b/plugins/org.eclipse.mylyn.docs.intent.collab.common/schema/repositorymanagerextension.exsd
new file mode 100644
index 0000000..7fd9cfe
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.collab.common/schema/repositorymanagerextension.exsd
@@ -0,0 +1,117 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.mylyn.docs.intent.collab.common" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.mylyn.docs.intent.collab.common" id="repositorymanagerextension" name="org.eclipse.mylyn.docs.intent.collab.common.repositorymanagerextension"/>
+      </appinfo>
+      <documentation>
+         This extension point allows to provide custom IntentRepositoryManagerContributions
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="repositorymanagercontribution"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="repositorymanagercontribution">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.mylyn.docs.intent.collab.common.repository.contribution.IntentRepositoryManagerContribution"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         Copyright (c) 2010, 2011 Obeo, France.
+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: 
+   Obeo - initial API and implementation
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/IntentRepositoryActivator.java b/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/IntentRepositoryActivator.java
index a22186f..936b7a2 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/IntentRepositoryActivator.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/IntentRepositoryActivator.java
@@ -1,4 +1,5 @@
 package org.eclipse.mylyn.docs.intent.collab.common;
+
 /*******************************************************************************
  * Copyright (c) 2010, 2011 Obeo.
  * All rights reserved. This program and the accompanying materials
@@ -11,6 +12,7 @@
  *******************************************************************************/
 import org.eclipse.core.runtime.Plugin;
 import org.eclipse.mylyn.docs.intent.collab.common.internal.logger.IntentLoggerRegistryListener;
+import org.eclipse.mylyn.docs.intent.collab.common.internal.repository.contribution.IntentRepositoryManagerContributionRegistryListener;
 import org.osgi.framework.BundleContext;
 
 /**
@@ -22,6 +24,8 @@
 
 	private IntentLoggerRegistryListener loggerRegistryListener = new IntentLoggerRegistryListener();
 
+	private IntentRepositoryManagerContributionRegistryListener repositoryContributionsRegistryListener = new IntentRepositoryManagerContributionRegistryListener();
+
 	/**
 	 * {@inheritDoc}
 	 * 
@@ -31,8 +35,9 @@
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
 
-		// Initializing registry listener for the logger extension point
+		// Initializing registry listener for all extension points
 		loggerRegistryListener.init();
+		repositoryContributionsRegistryListener.init();
 	}
 
 	/**
@@ -42,8 +47,9 @@
 	 */
 	@Override
 	public void stop(BundleContext context) throws Exception {
-		// Initializing registry listener for the logger extension point
+		// Initializing registry listener for all extension points
 		loggerRegistryListener.dispose();
+		repositoryContributionsRegistryListener.dispose();
 
 		super.stop(context);
 	}
diff --git a/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/internal/IntentRepositoryManagerImpl.java b/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/internal/IntentRepositoryManagerImpl.java
index 05b6b18..9f92a86 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/internal/IntentRepositoryManagerImpl.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/internal/IntentRepositoryManagerImpl.java
@@ -11,17 +11,15 @@
  *******************************************************************************/

 package org.eclipse.mylyn.docs.intent.collab.common.internal;

 

-import com.google.common.collect.Sets;

-

-import java.util.Collection;

 import java.util.HashMap;

 import java.util.Iterator;

 import java.util.Map;

 

 import org.eclipse.core.runtime.Assert;

 import org.eclipse.core.runtime.CoreException;

-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager;

-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManagerContribution;

+import org.eclipse.mylyn.docs.intent.collab.common.internal.repository.contribution.IntentRepositoryManagerContributionRegistry;

+import org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryManager;

+import org.eclipse.mylyn.docs.intent.collab.common.repository.contribution.IntentRepositoryManagerContribution;

 import org.eclipse.mylyn.docs.intent.collab.repository.Repository;

 import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;

 

@@ -37,9 +35,6 @@
  */

 public final class IntentRepositoryManagerImpl implements IntentRepositoryManager {

 

-	private static Collection<IntentRepositoryManagerContribution> managerContributions = Sets

-			.newLinkedHashSet();

-

 	/**

 	 * The list of created repositories, associated to the corresponding project.

 	 */

@@ -51,7 +46,7 @@
 	 * {@inheritDoc}

 	 * 

 	 * @throws CoreException

-	 * @see org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager#getRepository(java.lang.String)

+	 * @see org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryManager#getRepository(java.lang.String)

 	 */

 	public synchronized Repository getRepository(String identifier) throws RepositoryConnectionException,

 			CoreException {

@@ -67,8 +62,8 @@
 			}

 

 			// then delegating the repository creation to a registered repository manager

-			for (Iterator<IntentRepositoryManagerContribution> iterator = managerContributions.iterator(); iterator

-					.hasNext() && repository == null;) {

+			for (Iterator<IntentRepositoryManagerContribution> iterator = IntentRepositoryManagerContributionRegistry

+					.getRepositoryManagerContributions().iterator(); iterator.hasNext() && repository == null;) {

 				IntentRepositoryManagerContribution repositoryManagerContribution = iterator.next();

 				if (repositoryManagerContribution.canCreateRepository(normalizedIdentifier)) {

 					repository = repositoryManagerContribution.createRepository(normalizedIdentifier);

@@ -86,7 +81,7 @@
 	/**

 	 * {@inheritDoc}

 	 * 

-	 * @see org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager#isManagedProject(java.lang.String)

+	 * @see org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryManager#isManagedProject(java.lang.String)

 	 */

 	public synchronized boolean isManagedProject(String identifier) {

 		String normalizedIdentifier = normalizeIdentifier(identifier);

@@ -96,7 +91,7 @@
 	/**

 	 * {@inheritDoc}

 	 * 

-	 * @see org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager#deleteRepository(java.lang.String)

+	 * @see org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryManager#deleteRepository(java.lang.String)

 	 */

 	public synchronized void deleteRepository(String identifier) {

 		String normalizedIdentifier = normalizeIdentifier(identifier);

@@ -104,24 +99,6 @@
 	}

 

 	/**

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager#addIntentRepositoryManagerContribution(org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManagerContribution)

-	 */

-	public void addIntentRepositoryManagerContribution(IntentRepositoryManagerContribution contribution) {

-		managerContributions.add(contribution);

-	}

-

-	/**

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager#removeIntentRepositoryManagerContribution(org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManagerContribution)

-	 */

-	public void removeIntentRepositoryManagerContribution(IntentRepositoryManagerContribution contribution) {

-		managerContributions.remove(contribution);

-	}

-

-	/**

 	 * Returns the normalized form of the given identifier (e.g. if identifier is of the form

 	 * platform:/resource/PROJECT_NAME/..., returns PROJECT_NAME

 	 * 

diff --git a/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/internal/repository/contribution/IntentRepositoryManagerContributionDescriptor.java b/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/internal/repository/contribution/IntentRepositoryManagerContributionDescriptor.java
new file mode 100644
index 0000000..37af668
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/internal/repository/contribution/IntentRepositoryManagerContributionDescriptor.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 Obeo.
+ * 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:
+ *     Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.mylyn.docs.intent.collab.common.internal.repository.contribution;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.mylyn.docs.intent.collab.common.logger.IIntentLogger.LogType;
+import org.eclipse.mylyn.docs.intent.collab.common.logger.IntentLogger;
+import org.eclipse.mylyn.docs.intent.collab.common.repository.contribution.IntentRepositoryManagerContribution;
+
+/**
+ * Describes an extension as contibuted to the
+ * {@link IntentRepositoryManagerContributionRegistryListener#INTENT_REPOSITORY_MANAGER_CONTRIBUTION_EXTENSION_POINT}
+ * extension point.
+ * 
+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>
+ */
+public class IntentRepositoryManagerContributionDescriptor {
+
+	/**
+	 * Name of the attribute corresponding to the contributed class's path.
+	 */
+	public static final String REPOSITORY_MANAGER_CONTRIBUTION_CLASS_NAME = "class";
+
+	/**
+	 * Configuration element of this descriptor .
+	 */
+	private final IConfigurationElement element;
+
+	/**
+	 * The path of the contributed class.
+	 */
+	private String extensionClassName;
+
+	/**
+	 * The {@link IntentRepositoryManagerContribution} described by this descriptor.
+	 */
+	private IntentRepositoryManagerContribution extension;
+
+	/**
+	 * Instantiates a descriptor with all information.
+	 * 
+	 * @param configuration
+	 *            Configuration element from which to create this descriptor.
+	 */
+	public IntentRepositoryManagerContributionDescriptor(IConfigurationElement configuration) {
+		element = configuration;
+		extensionClassName = configuration.getAttribute(REPOSITORY_MANAGER_CONTRIBUTION_CLASS_NAME);
+	}
+
+	/**
+	 * Creates an instance of this descriptor's {@link IntentRepositoryManagerContribution} .
+	 * 
+	 * @return A new instance of this descriptor's {@link IntentRepositoryManagerContribution}.
+	 */
+	public IntentRepositoryManagerContribution createRepositoryManagerContribution() {
+		try {
+			extension = (IntentRepositoryManagerContribution)element
+					.createExecutableExtension(REPOSITORY_MANAGER_CONTRIBUTION_CLASS_NAME);
+		} catch (CoreException e) {
+			IntentLogger.getInstance().log(LogType.ERROR,
+					"Could not create repository manager contribution " + extensionClassName, e);
+		}
+		return extension;
+	}
+
+	/**
+	 * Returns the fully qualified name of the contributed class.
+	 * 
+	 * @return the fully qualified name of the contributed class
+	 */
+	public String getExtensionClassName() {
+		return extensionClassName;
+	}
+}
diff --git a/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/internal/repository/contribution/IntentRepositoryManagerContributionRegistry.java b/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/internal/repository/contribution/IntentRepositoryManagerContributionRegistry.java
new file mode 100644
index 0000000..80f84c3
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/internal/repository/contribution/IntentRepositoryManagerContributionRegistry.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 Obeo.
+ * 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:
+ *     Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.mylyn.docs.intent.collab.common.internal.repository.contribution;
+
+import com.google.common.collect.Maps;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.eclipse.mylyn.docs.intent.collab.common.repository.contribution.IntentRepositoryManagerContribution;
+
+/**
+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>
+ */
+public class IntentRepositoryManagerContributionRegistry {
+
+	/**
+	 * All the registered IntentRepositoryManagerContributions.
+	 */
+	private static final Map<IntentRepositoryManagerContributionDescriptor, IntentRepositoryManagerContribution> declaredRepositoryManagerContributions = Maps
+			.newLinkedHashMap();
+
+	/**
+	 * Utility classes don't need a default constructor.
+	 */
+	private IntentRepositoryManagerContributionRegistry() {
+
+	}
+
+	/**
+	 * Returns all declared Repository Manager Contributions (instanciates it if needed).
+	 */
+	public static Collection<IntentRepositoryManagerContribution> getRepositoryManagerContributions() {
+		for (Entry<IntentRepositoryManagerContributionDescriptor, IntentRepositoryManagerContribution> descriptorToContribution : declaredRepositoryManagerContributions
+				.entrySet()) {
+			if (descriptorToContribution.getValue() == null) {
+				descriptorToContribution.setValue(descriptorToContribution.getKey()
+						.createRepositoryManagerContribution());
+			}
+		}
+		return declaredRepositoryManagerContributions.values();
+	}
+
+	/**
+	 * Registers the given repository manager contribution descriptor.
+	 * 
+	 * @param IntentRepositoryManagerContributionDescriptor
+	 *            the repository manager contribution descriptor to registor
+	 */
+	public static void addRepositoryManagerContribution(
+			IntentRepositoryManagerContributionDescriptor IntentRepositoryManagerContributionDescriptor) {
+		declaredRepositoryManagerContributions.put(IntentRepositoryManagerContributionDescriptor, null);
+	}
+
+	/**
+	 * Removes a phantom from the registry.
+	 * 
+	 * @param extensionClassName
+	 *            Qualified class name of the sync element which corresponding phantom is to be removed from
+	 *            the registry.
+	 */
+	public static void removeExtension(String extensionClassName) {
+		for (IntentRepositoryManagerContributionDescriptor extension : declaredRepositoryManagerContributions
+				.keySet()) {
+			if (extension.getExtensionClassName().equals(extensionClassName)) {
+				declaredRepositoryManagerContributions.remove(extension);
+			}
+		}
+	}
+
+	/**
+	 * Clears all registered IntentRepositoryManagerContributions.
+	 */
+	public static void clearContributedRepositoryManagerContributions() {
+		declaredRepositoryManagerContributions.clear();
+
+	}
+}
diff --git a/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/internal/repository/contribution/IntentRepositoryManagerContributionRegistryListener.java b/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/internal/repository/contribution/IntentRepositoryManagerContributionRegistryListener.java
new file mode 100644
index 0000000..ddd9d62
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/internal/repository/contribution/IntentRepositoryManagerContributionRegistryListener.java
@@ -0,0 +1,151 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 Obeo.
+ * 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:
+ *     Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.mylyn.docs.intent.collab.common.internal.repository.contribution;
+
+import com.google.common.collect.Sets;
+
+import java.util.Set;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionDelta;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IRegistryChangeEvent;
+import org.eclipse.core.runtime.IRegistryChangeListener;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.mylyn.docs.intent.collab.common.logger.IIntentLogger.LogType;
+import org.eclipse.mylyn.docs.intent.collab.common.logger.IntentLogger;
+
+/**
+ * This listener allows to be aware of contribution changes against the
+ * {@link IntentRepositoryManagerRegistryListener#INTENT_REPOSITORY_MANAGER_CONTRIBUTION_EXTENSION_POINT}
+ * extension point.
+ * 
+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>
+ */
+public class IntentRepositoryManagerContributionRegistryListener implements IRegistryChangeListener {
+
+	/** Name of the extension point to parse for extensions. */
+	public static final String INTENT_REPOSITORY_MANAGER_CONTRIBUTION_EXTENSION_POINT = "org.eclipse.mylyn.docs.intent.collab.common.repositorymanagercontribution"; //$NON-NLS-1$
+
+	/** Name of the extension point's tag. */
+	private static final String REPOSITORY_MANAGER_CONTRIBUTION_TAG = "repositorymanagercontribution"; //$NON-NLS-1$
+
+	/**
+	 * Register this listener and parse initial contributions.
+	 */
+	public void init() {
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		registry.addRegistryChangeListener(this, INTENT_REPOSITORY_MANAGER_CONTRIBUTION_EXTENSION_POINT);
+		parseInitialContributions();
+	}
+
+	/**
+	 * Parses a single extension contribution.
+	 * 
+	 * @param extension
+	 *            Parses the given extension and adds its contribution to the registry.
+	 */
+	private void parseExtension(IExtension extension) {
+		final IConfigurationElement[] configElements = extension.getConfigurationElements();
+		for (IConfigurationElement elem : configElements) {
+			if (REPOSITORY_MANAGER_CONTRIBUTION_TAG.equals(elem.getName())) {
+				try {
+					IntentRepositoryManagerContributionRegistry
+							.addRepositoryManagerContribution(new IntentRepositoryManagerContributionDescriptor(
+									elem));
+				} catch (IllegalArgumentException e) {
+					IntentLogger.getInstance().log(LogType.ERROR,
+							"Could not create repository manager contribution " + elem.getValue(), e);
+				}
+			}
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.core.runtime.IRegistryEventListener#added(org.eclipse.core.runtime.IExtensionPoint[])
+	 */
+	public void added(IExtensionPoint[] extensionPoints) {
+		for (IExtensionPoint extensionPoint : extensionPoints) {
+			for (IExtension extension : extensionPoint.getExtensions()) {
+				parseExtension(extension);
+			}
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.core.runtime.IRegistryChangeListener#registryChanged(org.eclipse.core.runtime.IRegistryChangeEvent)
+	 */
+	public void registryChanged(IRegistryChangeEvent event) {
+		Set<IExtension> addedExtensions = Sets.newLinkedHashSet();
+		for (IExtensionDelta extensionDelta : event.getExtensionDeltas()) {
+			addedExtensions.add(extensionDelta.getExtension());
+		}
+		added(addedExtensions.toArray(new IExtension[addedExtensions.size()]));
+	}
+
+	/**
+	 * Behavior when the given extensions are added.
+	 * 
+	 * @param extensions
+	 *            the added extensions
+	 */
+	public void added(IExtension[] extensions) {
+		for (IExtension extension : extensions) {
+			parseExtension(extension);
+		}
+	}
+
+	/**
+	 * Though this listener reacts to the extension point changes, there could have been contributions before
+	 * it's been registered. This will parse these initial contributions.
+	 */
+	public void parseInitialContributions() {
+		final IExtensionRegistry registry = Platform.getExtensionRegistry();
+
+		for (IExtension extension : registry.getExtensionPoint(
+				INTENT_REPOSITORY_MANAGER_CONTRIBUTION_EXTENSION_POINT).getExtensions()) {
+			parseExtension(extension);
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.core.runtime.IRegistryEventListener#removed(org.eclipse.core.runtime.IExtension[])
+	 */
+	public void removed(IExtension[] extensions) {
+		for (IExtension extension : extensions) {
+			final IConfigurationElement[] configElements = extension.getConfigurationElements();
+			for (IConfigurationElement elem : configElements) {
+				if (REPOSITORY_MANAGER_CONTRIBUTION_TAG.equals(elem.getName())) {
+					final String extensionClassName = elem
+							.getAttribute(IntentRepositoryManagerContributionDescriptor.REPOSITORY_MANAGER_CONTRIBUTION_CLASS_NAME);
+					IntentRepositoryManagerContributionRegistry.removeExtension(extensionClassName);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Remove this listener and flush the contributions registry.
+	 */
+	public void dispose() {
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		registry.removeRegistryChangeListener(this);
+		IntentRepositoryManagerContributionRegistry.clearContributedRepositoryManagerContributions();
+	}
+}
diff --git a/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/IntentRepositoryInitializer.java b/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/repository/IntentRepositoryInitializer.java
similarity index 98%
rename from plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/IntentRepositoryInitializer.java
rename to plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/repository/IntentRepositoryInitializer.java
index f158592..160ffec 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/IntentRepositoryInitializer.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/repository/IntentRepositoryInitializer.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     Obeo - initial API and implementation
  *******************************************************************************/
-package org.eclipse.mylyn.docs.intent.collab.common;
+package org.eclipse.mylyn.docs.intent.collab.common.repository;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/IntentRepositoryManager.java b/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/repository/IntentRepositoryManager.java
similarity index 76%
rename from plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/IntentRepositoryManager.java
rename to plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/repository/IntentRepositoryManager.java
index 20654fc..e49379a 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/IntentRepositoryManager.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/repository/IntentRepositoryManager.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     Obeo - initial API and implementation
  *******************************************************************************/
-package org.eclipse.mylyn.docs.intent.collab.common;
+package org.eclipse.mylyn.docs.intent.collab.common.repository;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.mylyn.docs.intent.collab.common.internal.IntentRepositoryManagerImpl;
@@ -57,21 +57,4 @@
 	 */
 	void deleteRepository(String identifier);
 
-	/**
-	 * Adds the given {@link IntentRepositoryManagerContribution} to this {@link IntentRepositoryManager},
-	 * that will use it to delegate Repositories creations.
-	 * 
-	 * @param contribution
-	 *            the contributed {@link IntentRepositoryManagerContribution}
-	 */
-	void addIntentRepositoryManagerContribution(IntentRepositoryManagerContribution contribution);
-
-	/**
-	 * Removes the given {@link IntentRepositoryManagerContribution}.
-	 * 
-	 * @param contribution
-	 *            the contributed {@link IntentRepositoryManagerContribution} to delete
-	 */
-	void removeIntentRepositoryManagerContribution(IntentRepositoryManagerContribution contribution);
-
 }
diff --git a/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/IntentRepositoryManagerContribution.java b/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/repository/contribution/IntentRepositoryManagerContribution.java
similarity index 91%
rename from plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/IntentRepositoryManagerContribution.java
rename to plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/repository/contribution/IntentRepositoryManagerContribution.java
index 72efb66..0e3e0a4 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/IntentRepositoryManagerContribution.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.collab.common/src/org/eclipse/mylyn/docs/intent/collab/common/repository/contribution/IntentRepositoryManagerContribution.java
@@ -8,8 +8,9 @@
  * Contributors:
  *     Obeo - initial API and implementation
  *******************************************************************************/
-package org.eclipse.mylyn.docs.intent.collab.common;
+package org.eclipse.mylyn.docs.intent.collab.common.repository.contribution;
 
+import org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryManager;
 import org.eclipse.mylyn.docs.intent.collab.repository.Repository;
 import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;
 
diff --git a/plugins/org.eclipse.mylyn.docs.intent.exporter.ui/src/org/eclipse/mylyn/docs/intent/exporter/ui/popup/actions/ExportIntentDocumentationAction.java b/plugins/org.eclipse.mylyn.docs.intent.exporter.ui/src/org/eclipse/mylyn/docs/intent/exporter/ui/popup/actions/ExportIntentDocumentationAction.java
index 239dfd2..4af30ee 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.exporter.ui/src/org/eclipse/mylyn/docs/intent/exporter/ui/popup/actions/ExportIntentDocumentationAction.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.exporter.ui/src/org/eclipse/mylyn/docs/intent/exporter/ui/popup/actions/ExportIntentDocumentationAction.java
@@ -35,8 +35,8 @@
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.window.Window;
 import org.eclipse.mylyn.docs.intent.client.ui.logger.IntentUiLogger;
-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager;
 import org.eclipse.mylyn.docs.intent.collab.common.query.IntentDocumentQuery;
+import org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryManager;
 import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.ReadOnlyException;
 import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter;
 import org.eclipse.mylyn.docs.intent.collab.repository.Repository;
diff --git a/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/util/AbstractIntentUITest.java b/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/util/AbstractIntentUITest.java
index 97c7e1b..216e7e1 100644
--- a/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/util/AbstractIntentUITest.java
+++ b/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/util/AbstractIntentUITest.java
@@ -43,9 +43,9 @@
 import org.eclipse.mylyn.docs.intent.client.ui.ide.builder.ToggleNatureAction;

 import org.eclipse.mylyn.docs.intent.client.ui.preferences.IntentPreferenceConstants;

 import org.eclipse.mylyn.docs.intent.client.ui.utils.IntentEditorOpener;

-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryInitializer;

-import org.eclipse.mylyn.docs.intent.collab.common.IntentRepositoryManager;

 import org.eclipse.mylyn.docs.intent.collab.common.query.IntentDocumentQuery;

+import org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryInitializer;

+import org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryManager;

 import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter;

 import org.eclipse.mylyn.docs.intent.collab.repository.Repository;

 import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;