Improving notification mechanism of the WorkspaceAdapter&Session : now using serialization differences instead of resource.setModified to compute the state of the resources to save. Also improving the compiler, the indexer and the synchronizer notifications
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/launcher/CompilerCreator.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/launcher/CompilerCreator.java
index 0860125..76afaeb 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/launcher/CompilerCreator.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/launcher/CompilerCreator.java
@@ -10,8 +10,8 @@
  *******************************************************************************/

 package org.eclipse.mylyn.docs.intent.client.compiler.launcher;

 

-import java.util.ArrayList;

-import java.util.Collection;

+import com.google.common.collect.Lists;

+

 import java.util.LinkedHashSet;

 import java.util.Set;

 

@@ -57,7 +57,7 @@
 	public static CompilerRepositoryClient createCompilerClient(Repository repository)

 			throws RepositoryConnectionException {

 

-		// Step 1 : initialize the listened types

+		// Step 1: initialize the listened types

 		Set<EStructuralFeature> listenedTypes = new LinkedHashSet<EStructuralFeature>();

 

 		listenedTypes.add(IntentDocumentPackage.eINSTANCE.getIntentSection_ModelingUnits());

@@ -71,20 +71,15 @@
 		listenedTypes.remove(GenericUnitPackage.eINSTANCE.getGenericUnit_Instructions());

 		listenedTypes.remove(GenericUnitPackage.eINSTANCE.getGenericUnit_UnitName());

 

-		// Step 2 : defining all the resource that once been saved should not cause a session warning

-		Collection<String> resourcesToIgnorePaths = new ArrayList<String>();

-		resourcesToIgnorePaths.add(IntentLocations.INTENT_FOLDER);

-

-		// Step 3 : create the adapter and the handler for these types

+		// Step 2: create the adapter and the handler for these types

 		final RepositoryAdapter repositoryAdapter = repository.createRepositoryAdapter();

 

-		repositoryAdapter.setSendSessionWarningBeforeSaving(resourcesToIgnorePaths);

 		RepositoryObjectHandler handler = new ReadWriteRepositoryObjectHandlerImpl(repositoryAdapter);

 

 		Notificator notificator = new TypeNotificator(listenedTypes);

 		handler.addNotificator(notificator);

 

-		// Step 4 : create the compiler

+		// Step 3: create the compiler

 		CompilerRepositoryClient compilerClient = new CompilerRepositoryClient();

 		compilerClient.setRepository(repository);

 		compilerClient.addRepositoryObjectHandler(handler);

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/repositoryconnection/CompilationJob.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/repositoryconnection/CompilationJob.java
index ffe68bf..f93d2c7 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/repositoryconnection/CompilationJob.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/repositoryconnection/CompilationJob.java
@@ -10,6 +10,8 @@
  *******************************************************************************/

 package org.eclipse.mylyn.docs.intent.client.compiler.repositoryconnection;

 

+import com.google.common.collect.Lists;

+

 import java.util.ArrayList;

 import java.util.List;

 

@@ -166,19 +168,25 @@
 	public void saveCompilationInformations(RepositoryAdapter repositoryAdapter,

 			IntentCompilerInformationHolder compilationInformationHolder, IProgressMonitor monitor) {

 		repositoryAdapter.openSaveContext();

+

+		// We merge the local compilation manager with the remote

 		CompilerInformationsSaver saver = new CompilerInformationsSaver(monitor);

 		if (monitor != null && !monitor.isCanceled()) {

-			saver.saveOnRepository(compilationInformationHolder, repositoryObjectHandler);

-		}

-		try {

-			repositoryAdapter.save();

-		} catch (ReadOnlyException e) {

-			// We are sure that this compiler isn't in read-only mode

-		} catch (SaveException e) {

+

 			try {

-				repositoryAdapter.undo();

-			} catch (ReadOnlyException e1) {

+				saver.saveOnRepository(compilationInformationHolder, repositoryObjectHandler);

+				repositoryAdapter.setSendSessionWarningBeforeSaving(Lists

+						.newArrayList(IntentLocations.INTENT_FOLDER));

+				repositoryAdapter.save();

+			} catch (ReadOnlyException e) {

 				// We are sure that this compiler isn't in read-only mode

+			} catch (SaveException e) {

+				IntentLogger.getInstance().log(LogType.ERROR, "Compiler failed to save changes", e);

+				try {

+					repositoryAdapter.undo();

+				} catch (ReadOnlyException e1) {

+					// We are sure that this compiler isn't in read-only mode

+				}

 			}

 		}

 		repositoryAdapter.closeContext();

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/saver/CompilerInformationsSaver.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/saver/CompilerInformationsSaver.java
index 4937d44..747f03e 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/saver/CompilerInformationsSaver.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/saver/CompilerInformationsSaver.java
@@ -15,16 +15,19 @@
 
 import java.math.BigInteger;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.ListIterator;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.emf.cdo.util.ObjectNotFoundException;
 import org.eclipse.emf.common.util.BasicEList;
 import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.mylyn.docs.intent.client.compiler.utils.IntentCompilerInformationHolder;
@@ -364,17 +367,10 @@
 	 */
 	private void mergeCompilationStatusManager(CompilationStatusManager localStatusManager,
 			CompilationStatusManager repositoryStatusManager, Resource statusManagerResource) {
-
 		// Step 1 : Cleaning repositoryRootModel
 		// Step 1.1 : removing dangling references
 		removeDanglingReferences(repositoryStatusManager, statusManagerResource);
 
-		List<IntentGenericElement> genEl = new ArrayList<IntentGenericElement>();
-		for (CompilationStatus compilationStatus : repositoryStatusManager.getCompilationStatusList()) {
-			genEl.add(compilationStatus.getTarget());
-		}
-
-		List<EObject> cleanTargets = new ArrayList<EObject>();
 		// Step 2 : adding all the new compilation status
 		for (ModelingUnit mu : localStatusManager.getModelingUnitToStatusList().keySet()) {
 			for (CompilationStatus status : localStatusManager.getModelingUnitToStatusList().get(mu)) {
@@ -383,36 +379,24 @@
 							.get(mu), status)) {
 
 						if (!repositoryStatusManager.getCompilationStatusList().contains(status)) {
-							repositoryStatusManager.getCompilationStatusList().add(status);
-							if (!status.getTarget().getCompilationStatus().contains(status)) {
-								if (!cleanTargets.contains(status.getTarget())) {
-									cleanTargets.add(status.getTarget());
-									status.getTarget().getCompilationStatus().clear();
-								}
+							if (status.getTarget() != null
+									&& !status.getTarget().getCompilationStatus().contains(status)) {
 								status.getTarget().getCompilationStatus().add(status);
 							}
-						}
-						if (repositoryStatusManager.getModelingUnitToStatusList().get(mu) == null) {
-							repositoryStatusManager.getModelingUnitToStatusList().put(mu,
-									new BasicEList<CompilationStatus>());
-						}
-						try {
-							repositoryStatusManager.getModelingUnitToStatusList().get(mu).add(status);
-						} catch (NullPointerException e) {
-							// TODO remove this catch, only for test
-							e.printStackTrace();
-						}
+							repositoryStatusManager.getCompilationStatusList().add(status);
 
+							if (repositoryStatusManager.getModelingUnitToStatusList().get(mu) == null) {
+								repositoryStatusManager.getModelingUnitToStatusList().put(mu,
+										new BasicEList<CompilationStatus>());
+							}
+							repositoryStatusManager.getModelingUnitToStatusList().get(mu).add(status);
+						}
 					}
 				}
 			}
 		}
 
-		genEl = new ArrayList<IntentGenericElement>();
-		for (CompilationStatus compilationStatus : repositoryStatusManager.getCompilationStatusList()) {
-			genEl.add(compilationStatus.getTarget());
-
-		}
+		repositoryStatusManager.setValidationTime(BigInteger.valueOf(System.currentTimeMillis()));
 	}
 
 	/**
@@ -422,20 +406,31 @@
 	 *            the compilationSatusManager from which remove the dangling references
 	 * @param statusManagerResource
 	 *            the resource containing the repositoryStatusManager
-	 * @return the modified CompilationStatusManager
 	 */
-	private CompilationStatusManager removeDanglingReferences(
-			CompilationStatusManager repositoryStatusManager, Resource statusManagerResource) {
+	private void removeDanglingReferences(CompilationStatusManager repositoryStatusManager,
+			Resource statusManagerResource) {
 		CompilationStatusManager manager = repositoryStatusManager;
-		try {
-			manager.getCompilationStatusList().clear();
-			manager.getModelingUnitToStatusList().clear();
-		} catch (ObjectNotFoundException notFoundException) {
-			statusManagerResource.getContents().clear();
-			manager = CompilerFactory.eINSTANCE.createCompilationStatusManager();
-			statusManagerResource.getContents().add(manager);
+		Collection<URI> changedModelingUnits = Sets.newLinkedHashSet();
+
+		ListIterator<Entry<ModelingUnit, EList<CompilationStatus>>> entries = manager
+				.getModelingUnitToStatusList().listIterator();
+		while (entries.hasNext()) {
+			Entry<ModelingUnit, EList<CompilationStatus>> entry = entries.next();
+			if (entry.getKey() == null || entry.getKey().eResource() == null) {
+				manager.getCompilationStatusList().removeAll(entry.getValue());
+				entries.remove();
+			} else {
+				ListIterator<CompilationStatus> statusList = entry.getValue().listIterator();
+				while (statusList.hasNext()) {
+					CompilationStatus status = statusList.next();
+					if (status.getTarget() != null && status.getTarget().eResource() != null) {
+						status.getTarget().getCompilationStatus().remove(status);
+					}
+					changedModelingUnits.add(entry.getKey().eResource().getURI());
+					statusList.remove();
+				}
+			}
 		}
-		return manager;
 	}
 
 }
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.indexer/META-INF/MANIFEST.MF b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/META-INF/MANIFEST.MF
index a7a63de..8a99728 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.indexer/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/META-INF/MANIFEST.MF
@@ -7,7 +7,8 @@
 Bundle-Vendor: %providerName
 Require-Bundle: org.eclipse.mylyn.docs.intent.core,
  org.eclipse.mylyn.docs.intent.collab,
- org.eclipse.mylyn.docs.intent.collab.common
+ org.eclipse.mylyn.docs.intent.collab.common,
+ com.google.guava
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Export-Package: org.eclipse.mylyn.docs.intent.client.indexer,
  org.eclipse.mylyn.docs.intent.client.indexer.launcher
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.indexer/src/org/eclipse/mylyn/docs/intent/client/indexer/IndexerRepositoryClient.java b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/src/org/eclipse/mylyn/docs/intent/client/indexer/IndexerRepositoryClient.java
index 24eeeef..76c71b0 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.indexer/src/org/eclipse/mylyn/docs/intent/client/indexer/IndexerRepositoryClient.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/src/org/eclipse/mylyn/docs/intent/client/indexer/IndexerRepositoryClient.java
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.mylyn.docs.intent.client.indexer;
 
+import com.google.common.collect.Lists;
+
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
@@ -67,6 +69,8 @@
 					repositoryAdapter.openSaveContext();
 					indexComputor.computeIndex(index, document);
 					try {
+						repositoryAdapter.setSendSessionWarningBeforeSaving(Lists
+								.newArrayList(IntentLocations.INTENT_FOLDER));
 						repositoryAdapter.save();
 					} catch (SaveException e) {
 						IntentLogger.getInstance().log(LogType.ERROR, "Indexer failed to save changes", e);
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/SynchronizeRepositoryJob.java b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/SynchronizeRepositoryJob.java
index 269117e..fd228c2 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/SynchronizeRepositoryJob.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/SynchronizeRepositoryJob.java
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.mylyn.docs.intent.client.synchronizer;
 
+import com.google.common.collect.Lists;
+
 import java.util.ArrayList;
 import java.util.Collection;
 
@@ -18,6 +20,7 @@
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.emf.common.util.BasicMonitor;
+import org.eclipse.mylyn.docs.intent.collab.common.location.IntentLocations;
 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.handlers.adapters.IntentCommand;
@@ -102,23 +105,33 @@
 		}
 
 		if (!monitor.isCanceled()) {
-			client.addAllStatusToTargetElement(statusList);
-			// We add these status to the targets Element
+
 			try {
-				repositoryAdapter.save();
+				// We add these status to the targets Element
+				client.addAllStatusToTargetElement(statusList);
+				if (monitor != null && !monitor.isCanceled()) {
+
+					// A warning should be sent to the session so that the compiler cannot be notified of
+					// changes made by the synchronizer on modeling units
+					repositoryAdapter.setSendSessionWarningBeforeSaving(Lists
+							.newArrayList(IntentLocations.INTENT_FOLDER));
+					repositoryAdapter.save();
+
+					IntentLogger.getInstance().log(
+							LogType.LIFECYCLE,
+							"[Synchronizer] Synchronization ended, detected " + statusList.size()
+									+ " synchronization issues");
+				}
 			} catch (ReadOnlyException e) {
 				// As we have just opened a save context, we are sure that this will never happens
 			} catch (SaveException e) {
+				IntentLogger.getInstance().log(LogType.ERROR, "Synchronizer failed to save changes", e);
 				try {
 					repositoryAdapter.undo();
 				} catch (ReadOnlyException e1) {
 					// As we have just opened a save context, we are sure that this will never happens
 				}
 			}
-			IntentLogger.getInstance().log(
-					LogType.LIFECYCLE,
-					"[Synchronizer] Synchronization ended, detected " + statusList.size()
-							+ " synchronization issues");
 		}
 	}
 }
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/SynchronizerRepositoryClient.java b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/SynchronizerRepositoryClient.java
index 9ac46ed..e1cd59d 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/SynchronizerRepositoryClient.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/SynchronizerRepositoryClient.java
@@ -64,10 +64,13 @@
 	/**

 	 * Adds all the given compilationStatus to their targets instructions.

 	 * 

+	 * @param repositoryAdapter

+	 *            the repository adapter

 	 * @param statusList

 	 *            the list of status to add

 	 */

 	public void addAllStatusToTargetElement(final Collection<? extends CompilationStatus> statusList) {

+

 		// Step 1: removing all old synchronization status

 		CompilationStatusManager statusManager = getStatusManager();

 		Iterator<SynchronizerCompilationStatus> iterator2 = Iterables.filter(

@@ -75,7 +78,9 @@
 		Collection<SynchronizerCompilationStatus> toRemove = Sets.newLinkedHashSet();

 		while (iterator2.hasNext()) {

 			SynchronizerCompilationStatus oldStatus = iterator2.next();

-			oldStatus.getTarget().getCompilationStatus().remove(oldStatus);

+			if (oldStatus.getTarget() != null) {

+				oldStatus.getTarget().getCompilationStatus().remove(oldStatus);

+			}

 			statusManager.getModelingUnitToStatusList().remove(oldStatus);

 			toRemove.add(oldStatus);

 		}

@@ -84,8 +89,10 @@
 		// Step 2 : for each status to add

 		for (CompilationStatus status : statusList) {

 			// We add it to its target and to the status manager

-			status.getTarget().getCompilationStatus().add(status);

-			statusManager.getCompilationStatusList().add(status);

+			if (status.getTarget() != null) {

+				status.getTarget().getCompilationStatus().add(status);

+				statusManager.getCompilationStatusList().add(status);

+			}

 		}

 	}

 

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/launcher/SynchronizerCreator.java b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/launcher/SynchronizerCreator.java
index 1ba97cf..64cc114 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/launcher/SynchronizerCreator.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/launcher/SynchronizerCreator.java
@@ -10,8 +10,6 @@
  *******************************************************************************/

 package org.eclipse.mylyn.docs.intent.client.synchronizer.launcher;

 

-import java.util.ArrayList;

-import java.util.Collection;

 import java.util.Iterator;

 import java.util.LinkedHashSet;

 import java.util.Set;

@@ -68,9 +66,6 @@
 		final RepositoryAdapter repositoryAdapter = repository.createRepositoryAdapter();

 		Set<EObject> listenedElements = new LinkedHashSet<EObject>();

 

-		Collection<String> resourcesToIgnorePaths = new ArrayList<String>();

-		resourcesToIgnorePaths.add(IntentLocations.INTENT_FOLDER);

-		repositoryAdapter.setSendSessionWarningBeforeSaving(resourcesToIgnorePaths);

 		repositoryAdapter.openSaveContext();

 		try {

 			final Resource traceabilityResource = repositoryAdapter

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 fdc36fe..c49f718 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
@@ -21,6 +21,8 @@
 import org.eclipse.emf.ecore.EObject;

 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.logger.IIntentLogger.LogType;

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

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

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

 import org.eclipse.mylyn.docs.intent.collab.handlers.impl.AbstractRepositoryClient;

@@ -112,6 +114,8 @@
 			res = new ProjectExplorerRefreshJob(project, null);

 		}

 		updateProblemView();

+		IntentLogger.getInstance().log(LogType.LIFECYCLE,

+				"[ProjectExplorer Refresher] Project explorer and Problem view refreshed");

 		return res;

 	}

 

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/UpdateProblemsViewJob.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/UpdateProblemsViewJob.java
index d53fd02..122ddfc 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/UpdateProblemsViewJob.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/UpdateProblemsViewJob.java
@@ -23,6 +23,7 @@
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.mylyn.docs.intent.collab.common.location.IntentLocations;
 import org.eclipse.mylyn.docs.intent.collab.common.logger.IIntentLogger.LogType;
 import org.eclipse.mylyn.docs.intent.collab.common.logger.IntentLogger;
@@ -68,7 +69,6 @@
 		Resource intentDocumentResource = adapter.getResource(IntentLocations.INTENT_INDEX);
 		String platformString = intentDocumentResource.getURI().toPlatformString(true);
 		IFile intentDocumentFile = (IFile)ResourcesPlugin.getWorkspace().getRoot().findMember(platformString);
-
 		if (intentDocumentFile != null && !(statusResource.getContents().isEmpty())) {
 
 			// Step 1: delete currently defined markers
@@ -107,10 +107,10 @@
 	private void createMarkerFromStatus(CompilationStatus status) {
 		IMarker marker = null;
 		try {
-			if (project.isAccessible() && !status.eIsProxy() && !status.getTarget().eIsProxy()
-					&& status.eResource() != null && status.getTarget().eResource() != null) {
+			if (project.isAccessible() && !status.eIsProxy() && status.getTarget() != null
+					&& !status.getTarget().eIsProxy() && status.eResource() != null
+					&& status.getTarget().eResource() != null) {
 				marker = project.createMarker("org.eclipse.core.resources.problemmarker");
-
 				if (status.getSeverity() == CompilationStatusSeverity.WARNING) {
 					marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING);
 				} else if (status.getSeverity() == CompilationStatusSeverity.INFO) {
@@ -124,8 +124,7 @@
 					markerMessage = "[Sync] " + markerMessage;
 				}
 				marker.setAttribute(IMarker.MESSAGE, markerMessage);
-				marker.setAttribute(IMarker.LOCATION, status.eResource().getURI() + "#"
-						+ status.getTarget().eResource().getURIFragment(status));
+				marker.setAttribute(IMarker.LOCATION, EcoreUtil.getURI(status).toString());
 				marker.setAttribute(IMarker.SOURCE_ID, "Intent");
 			}
 		} catch (CoreException e) {
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/repository/IntentWorkspaceRepositoryStructurer.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/repository/IntentWorkspaceRepositoryStructurer.java
index 1c3a2f7..bb741c4 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/repository/IntentWorkspaceRepositoryStructurer.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/repository/IntentWorkspaceRepositoryStructurer.java
@@ -10,10 +10,6 @@
  *******************************************************************************/

 package org.eclipse.mylyn.docs.intent.client.ui.ide.repository;

 

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

-

-import java.util.Collection;

-

 import org.eclipse.emf.ecore.EObject;

 import org.eclipse.emf.ecore.resource.Resource;

 import org.eclipse.mylyn.docs.intent.collab.common.location.IntentLocations;

@@ -54,17 +50,15 @@
 	 * @see org.eclipse.mylyn.docs.intent.collab.ide.adapters.DefaultWorkspaceRepositoryStructurer#structure(org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter)

 	 */

 	@Override

-	public Collection<String> structure(RepositoryAdapter repositoryAdapter) throws ReadOnlyException {

+	public void structure(RepositoryAdapter repositoryAdapter) throws ReadOnlyException {

 		super.structure(repositoryAdapter);

 		WorkspaceAdapter workspaceAdapter = (WorkspaceAdapter)repositoryAdapter;

 

 		// We start splitting the elements from the IntentDocument

-		Collection<String> modifiedResources = Sets.newLinkedHashSet();

 		Resource documentResource = workspaceAdapter.getResource(IntentLocations.INTENT_INDEX);

 		for (EObject document : documentResource.getContents()) {

-			modifiedResources.addAll(splitElementAndSons(workspaceAdapter, document));

+			splitElementAndSons(workspaceAdapter, document);

 		}

-		return modifiedResources;

 	}

 

 	/**

@@ -78,9 +72,9 @@
 	 * @throws ReadOnlyException

 	 *             if the current context associated to the given adapter is read-only

 	 */

-	protected Collection<? extends String> splitElementAndSons(WorkspaceAdapter workspaceAdapter,

-			EObject element) throws ReadOnlyException {

-		Collection<String> modifiedResources = Sets.newLinkedHashSet();

+	protected void splitElementAndSons(WorkspaceAdapter workspaceAdapter, EObject element)

+			throws ReadOnlyException {

+

 		if (isElementToSplit(element)) {

 

 			// The resource path should check the following structure :

@@ -95,29 +89,19 @@
 			// Then we ensure that the element is stored at the expected location

 			if (isInSameResourceThanContainer

 					|| !(isStoredAtExpectedLocation(element, workspaceAdapter, newResourcePath))) {

-				if (element.eResource().getContents().isEmpty()) {

-					String oldResourcePath = element.eResource().getURI().toString();

-					if (oldResourcePath.indexOf(".repository") != -1) {

-						oldResourcePath = oldResourcePath.substring(oldResourcePath.indexOf(".repository"))

-								.replace(".repository/", "");

-					}

-					modifiedResources.add(oldResourcePath);

-				}

+

 				// Place the element in a new resource

 				Resource newResource = workspaceAdapter.getOrCreateResource(newResourcePath);

 				newResource.getContents().add(element);

-				newResource.setTrackingModification(true);

-				modifiedResources.add(newResourcePath);

 			}

 

 			// Do the same for all children of the given element

 			for (EObject containedElement : element.eContents()) {

 				if (!containedElement.eIsProxy()) {

-					modifiedResources.addAll(splitElementAndSons(workspaceAdapter, containedElement));

+					splitElementAndSons(workspaceAdapter, containedElement);

 				}

 			}

 		}

-		return modifiedResources;

 	}

 

 	/**

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui/src/org/eclipse/mylyn/docs/intent/client/ui/editor/annotation/IntentAnnotationModelManager.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui/src/org/eclipse/mylyn/docs/intent/client/ui/editor/annotation/IntentAnnotationModelManager.java
index 523da54..85b235f 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui/src/org/eclipse/mylyn/docs/intent/client/ui/editor/annotation/IntentAnnotationModelManager.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui/src/org/eclipse/mylyn/docs/intent/client/ui/editor/annotation/IntentAnnotationModelManager.java
@@ -146,14 +146,18 @@
 		// For each compilationStatus associated to the given element

 		Iterator<CompilationStatus> compilationStatusIterator = handledCompilationStatus.keySet().iterator();

 		while (compilationStatusIterator.hasNext()) {

-			boolean removeCurrentStatus = false;

 			CompilationStatus currentStatus = compilationStatusIterator.next();

-			Object currentStatusTargetID = adapter.getIDFromElement(currentStatus.getTarget());

-			Object elementID = adapter.getIDFromElement(element);

-			removeCurrentStatus = currentStatusTargetID == null;

+			boolean removeCurrentStatus = currentStatus == null || currentStatus.getTarget() == null;

+			Object currentStatusTargetID = null;

+			Object elementID = null;

+			if (!removeCurrentStatus) {

+				currentStatusTargetID = adapter.getIDFromElement(currentStatus.getTarget());

+				elementID = adapter.getIDFromElement(element);

+				removeCurrentStatus = currentStatusTargetID == null;

+			}

 			// If the status is concerning the given element

 			// FIXME find a way to determine those targets

-			if (currentStatusTargetID != null && currentStatusTargetID.equals(elementID)) {

+			if (!removeCurrentStatus && currentStatusTargetID.equals(elementID)) {

 				if (isCompilerAnnotation(this.handledCompilationStatus.get(currentStatus).getType())) {

 					// If the currentElement doesn't contain this status any more

 					if (!element.getCompilationStatus().contains(currentStatus)) {

diff --git a/plugins/org.eclipse.mylyn.docs.intent.collab.cdo/src/org/eclipse/mylyn/docs/intent/collab/cdo/adapters/CDOAdapter.java b/plugins/org.eclipse.mylyn.docs.intent.collab.cdo/src/org/eclipse/mylyn/docs/intent/collab/cdo/adapters/CDOAdapter.java
index 1b700be..f3ef748 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.collab.cdo/src/org/eclipse/mylyn/docs/intent/collab/cdo/adapters/CDOAdapter.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.collab.cdo/src/org/eclipse/mylyn/docs/intent/collab/cdo/adapters/CDOAdapter.java
@@ -21,10 +21,12 @@
 import org.eclipse.emf.cdo.common.id.CDOID;
 import org.eclipse.emf.cdo.session.CDOSession;
 import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CDOURIUtil;
 import org.eclipse.emf.cdo.util.CommitException;
 import org.eclipse.emf.cdo.util.ReadOnlyException;
 import org.eclipse.emf.cdo.view.CDOAdapterPolicy;
 import org.eclipse.emf.cdo.view.CDOView;
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.resource.Resource;
@@ -351,6 +353,15 @@
 	/**
 	 * {@inheritDoc}
 	 * 
+	 * @see org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter#getResourcePath(org.eclipse.emf.common.util.URI)
+	 */
+	public String getResourcePath(URI resourceURI) {
+		return CDOURIUtil.extractResourcePath(resourceURI);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
 	 * @see org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter#execute(org.eclipse.mylyn.docs.intent.collab.handlers.adapters.IntentCommand)
 	 */
 	public void execute(IntentCommand command) {
diff --git a/plugins/org.eclipse.mylyn.docs.intent.collab.ide/src/org/eclipse/mylyn/docs/intent/collab/ide/adapters/DefaultWorkspaceRepositoryStructurer.java b/plugins/org.eclipse.mylyn.docs.intent.collab.ide/src/org/eclipse/mylyn/docs/intent/collab/ide/adapters/DefaultWorkspaceRepositoryStructurer.java
index e9383ed..8e53545 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.collab.ide/src/org/eclipse/mylyn/docs/intent/collab/ide/adapters/DefaultWorkspaceRepositoryStructurer.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.collab.ide/src/org/eclipse/mylyn/docs/intent/collab/ide/adapters/DefaultWorkspaceRepositoryStructurer.java
@@ -10,10 +10,6 @@
  *******************************************************************************/
 package org.eclipse.mylyn.docs.intent.collab.ide.adapters;
 
-import com.google.common.collect.Sets;
-
-import java.util.Collection;
-
 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.handlers.adapters.RepositoryStructurer;
@@ -34,13 +30,12 @@
 	 * 
 	 * @see org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryStructurer#structure(org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter)
 	 */
-	public Collection<String> structure(RepositoryAdapter repositoryAdapter) throws ReadOnlyException {
+	public void structure(RepositoryAdapter repositoryAdapter) throws ReadOnlyException {
 		if (!(repositoryAdapter instanceof WorkspaceAdapter)) {
 			throw new IllegalArgumentException("Cannot Strucure the repository using a "
 					+ repositoryAdapter.getClass().getName() + " : must be "
 					+ WorkspaceAdapter.class.getName());
 		}
 		// the default implementation is to do nothing
-		return Sets.newLinkedHashSet();
 	}
 }
diff --git a/plugins/org.eclipse.mylyn.docs.intent.collab.ide/src/org/eclipse/mylyn/docs/intent/collab/ide/adapters/RemoveDanglingReferences.java b/plugins/org.eclipse.mylyn.docs.intent.collab.ide/src/org/eclipse/mylyn/docs/intent/collab/ide/adapters/RemoveDanglingReferences.java
new file mode 100644
index 0000000..aa5920d
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.collab.ide/src/org/eclipse/mylyn/docs/intent/collab/ide/adapters/RemoveDanglingReferences.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * Copyright (c) 2010-2012 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.ide.adapters;
+
+import java.util.Collection;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EStructuralFeature.Setting;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.EcoreUtil.CrossReferencer;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+
+/**
+ * A command in charge of deleting all dangling references.
+ * 
+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>
+ */
+public class RemoveDanglingReferences extends RecordingCommand {
+
+	/**
+	 * The element that should be cleaned.
+	 */
+	private final EObject root;
+
+	/**
+	 * Create a new {@link RemoveDanglingReferences} command.
+	 * 
+	 * @param domain
+	 *            the editing domain.
+	 * @param root
+	 *            the root element that should be cleaned
+	 */
+	public RemoveDanglingReferences(final TransactionalEditingDomain domain, final EObject root) {
+		super(domain);
+		this.root = root;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.transaction.RecordingCommand#doExecute()
+	 */
+	@Override
+	protected void doExecute() {
+		removeDanglingReferences(root);
+	}
+
+	/**
+	 * Remove all dangling references of all objects that are contained by the root element.
+	 * 
+	 * @param root
+	 *            the root element
+	 */
+	public void removeDanglingReferences(final EObject root) {
+		if (root.eResource() != null && root.eResource().getResourceSet() != null) {
+			removeDanglingReferences(new DanglingReferencesDetector(root.eResource()));
+		}
+	}
+
+	/**
+	 * Removes all dangling references from all the elements in the given resourceSet.
+	 * 
+	 * @param resourceSet
+	 *            The resourceSet which is to be cleaned of dangling references.
+	 */
+	public void removeDanglingReferences(final ResourceSet resourceSet) {
+		removeDanglingReferences(new DanglingReferencesDetector(resourceSet));
+	}
+
+	private void removeDanglingReferences(CrossReferencer referencer) {
+		for (Map.Entry<EObject, Collection<Setting>> entry : referencer.entrySet()) {
+			for (EStructuralFeature.Setting value : entry.getValue()) {
+				try {
+					EcoreUtil.remove(value, entry.getKey());
+				} catch (final UnsupportedOperationException e) {
+					// we know some time the setting is unsettable, just ignore
+					// that cases
+				} catch (final NullPointerException e) {
+					// we don't want to clean unresolved proxies in the model,
+					// so let's ignore Exceptions coming from that.
+				}
+			}
+		}
+	}
+
+	/**
+	 * Specific {@link CrossReferencer} to detect dangling references.
+	 */
+	private static class DanglingReferencesDetector extends EcoreUtil.CrossReferencer {
+
+		private static final long serialVersionUID = 616050158241084372L;
+
+		/**
+		 * Creates an instance for the given resource.
+		 * 
+		 * @param resource
+		 *            the resource to cross reference.
+		 */
+		public DanglingReferencesDetector(Resource eResource) {
+			super(eResource);
+			crossReference();
+			done();
+		}
+
+		/**
+		 * Creates an instance for the given resource set.
+		 * 
+		 * @param resourceSet
+		 *            the resource set to cross reference.
+		 */
+		public DanglingReferencesDetector(ResourceSet resourceSet) {
+			super(resourceSet);
+			crossReference();
+			done();
+		}
+
+		/**
+		 * {@inheritDoc}
+		 * 
+		 * @see org.eclipse.emf.ecore.util.EcoreUtil.CrossReferencer#crossReference(org.eclipse.emf.ecore.EObject,
+		 *      org.eclipse.emf.ecore.EReference, org.eclipse.emf.ecore.EObject)
+		 */
+		@Override
+		protected boolean crossReference(final EObject eObject, final EReference eReference,
+				final EObject crossReferencedEObject) {
+			// A reference is dangling if the referenced object is not attached to a resource
+			return crossReferencedEObject.eResource() == null;
+		}
+	}
+}
diff --git a/plugins/org.eclipse.mylyn.docs.intent.collab.ide/src/org/eclipse/mylyn/docs/intent/collab/ide/adapters/WorkspaceAdapter.java b/plugins/org.eclipse.mylyn.docs.intent.collab.ide/src/org/eclipse/mylyn/docs/intent/collab/ide/adapters/WorkspaceAdapter.java
index d4a4e41..30c5eb0 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.collab.ide/src/org/eclipse/mylyn/docs/intent/collab/ide/adapters/WorkspaceAdapter.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.collab.ide/src/org/eclipse/mylyn/docs/intent/collab/ide/adapters/WorkspaceAdapter.java
@@ -12,8 +12,12 @@
 

 import com.google.common.base.Predicate;

 import com.google.common.collect.Lists;

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

 

+import java.io.File;

 import java.io.IOException;

+import java.io.InputStream;

+import java.io.OutputStream;

 import java.util.ArrayList;

 import java.util.Collection;

 import java.util.ConcurrentModificationException;

@@ -30,6 +34,8 @@
 import org.eclipse.emf.ecore.EObject;

 import org.eclipse.emf.ecore.EStructuralFeature;

 import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.URIConverter;

+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;

 import org.eclipse.emf.ecore.util.EcoreUtil;

 import org.eclipse.emf.ecore.xmi.XMLResource;

 import org.eclipse.emf.ecore.xmi.impl.XMLParserPoolImpl;

@@ -139,15 +145,8 @@
 	public static Map<String, Object> getSaveOptions() {

 		if (saveOptions == null) {

 			saveOptions = new HashMap<String, Object>();

-			// We want the resource to be saved only if changes have been detected.

-			// In order to make the system as scalable as possible,

-			// We use a fileBuffer instead of a memory buffer

-			// saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED,

-			// Resource.OPTION_SAVE_ONLY_IF_CHANGED_FILE_BUFFER);

 			// We do not format the document when saving (less human-readable but faster to save and to load)

 			saveOptions.put(XMLResource.OPTION_FORMATTED, false);

-

-			// TODO If scalability problems occur, should use XMLResource.OPTION_USE_FILE_BUFFER

 		}

 		return saveOptions;

 	}

@@ -203,58 +202,52 @@
 					"Cannot save with a read-only context. The context should have been started with the 'openSaveContext' method.");

 		}

 

-		// First of all, we use the documentStructurer to structure the resource set

+		// Step 1: we use the documentStructurer to structure the resource set

 		if (documentStructurer != null) {

-			this.resourcesToIgnorePaths.addAll(documentStructurer.structure(WorkspaceAdapter.this));

+			documentStructurer.structure(WorkspaceAdapter.this);

 		}

 		final Collection<Resource> resources = Lists.newArrayList(this.repository.getResourceSet()

 				.getResources());

-

+		SaveException saveException = null;

 		try {

 			for (Resource resource : resources) {

 

-				// We only save the resource if it has been modified

 				try {

-					if (resource.isModified() || resource.getContents().isEmpty()) {

-

-						// We make sure the session isn't still reacting to previous saves

-						while (((WorkspaceSession)this.repository.getOrCreateSession()).isProcessingDelta()) {

-							try {

-								Thread.sleep(TIME_TO_WAIT_BEFORE_CHECKING_SESSIONDELTA);

-							} catch (InterruptedException e) {

-								throw new SaveException(e.getMessage());

+					if (!removeDanglingElements(resource) && hasDifferentSerialization(resource)) {

+						try {

+							// We make sure the session isn't still reacting to previous saves

+							while (((WorkspaceSession)this.repository.getOrCreateSession())

+									.isProcessingDelta()) {

+								try {

+									Thread.sleep(TIME_TO_WAIT_BEFORE_CHECKING_SESSIONDELTA);

+								} catch (InterruptedException e) {

+									throw new SaveException(e.getMessage());

+								}

 							}

-						}

 

-						// We send a warning to the WorkspaceSession if necessary

-						treatSessionWarning(resource);

+							// Step 2: we send a warning to the WorkspaceSession if necessary

+							treatSessionWarning(resource);

 

-						// We finally save this resource

-						if (resource.getContents().isEmpty()) {

-							resource.delete(null);

-						} else {

-							resource.save(getSaveOptions());

-							resource.setTrackingModification(true);

-						}

+							// Step 3: save the resource

 

-					} else {

-						// Removing dangling references

-						Iterator<EObject> iterator = resource.getContents().iterator();

-						while (iterator.hasNext()) {

-							EObject root = iterator.next();

-							if (root.eContainer() != null && root.eContainer().eResource() == null) {

-								iterator.remove();

+							if (resource.getContents().isEmpty()) {

+								// if the resource is empty, we delete it

+								resource.delete(getSaveOptions());

+							} else {

+								resource.save(getSaveOptions());

 							}

-						}

-						if (resource.getContents().isEmpty()) {

-							resource.delete(null);

+						} catch (IOException e) {

+							removeDanglingElements(resource);

+						} catch (RepositoryConnectionException e) {

+							saveException = new SaveException(e.getMessage());

 						}

 					}

-				} catch (IOException e) {

-					throw new SaveException(e.getMessage());

 				} catch (RepositoryConnectionException e) {

-					throw new SaveException(e.getMessage());

+					saveException = new SaveException(e.getMessage());

+				} catch (IOException e) {

+					saveException = new SaveException(e.getMessage());

 				}

+

 			}

 

 		} catch (ConcurrentModificationException cme) {

@@ -262,10 +255,78 @@
 			// FIXME : can we make a better choice ? The causes of this exception don't seem obvious

 			save();

 		}

+		if (saveException != null) {

+			throw saveException;

+		}

 

 	}

 

 	/**

+	 * Returns true if the resource will get a different serialization than the one on the disk.

+	 * 

+	 * @param options

+	 *            save options.

+	 * @return true if the resource will get a different serialization than the one on the disk.

+	 * @throws IOException

+	 *             on error while saving.

+	 */

+	public boolean hasDifferentSerialization(final Resource resourcetoSave) throws IOException {

+		// CHECKSTYLE:OFF : code coming from

+		// ResourceImpl.saveOnlyIfChangedWithFileBuffer

+		resourcetoSave.eSetDeliver(false);

+		final File temporaryFile = File.createTempFile("ResourceSaveHelper", null);

+		boolean equal = true;

+		try {

+			final URI temporaryFileURI = URI.createFileURI(temporaryFile.getPath());

+

+			final URIConverter uriConverter = resourcetoSave.getResourceSet() == null ? new ResourceSetImpl()

+					.getURIConverter() : resourcetoSave.getResourceSet().getURIConverter();

+			final OutputStream temporaryFileOutputStream = uriConverter.createOutputStream(temporaryFileURI);

+			try {

+				resourcetoSave.save(temporaryFileOutputStream, getSaveOptions());

+			} finally {

+				temporaryFileOutputStream.close();

+			}

+

+			InputStream oldContents = null;

+			try {

+				oldContents = uriConverter.createInputStream(resourcetoSave.getURI());

+			} catch (final IOException exception) {

+				equal = false;

+			}

+			final byte[] newContentBuffer = new byte[4000];

+			if (oldContents != null) {

+				try {

+					final InputStream newContents = uriConverter.createInputStream(temporaryFileURI);

+					try {

+						final byte[] oldContentBuffer = new byte[4000];

+						LOOP: for (int oldLength = oldContents.read(oldContentBuffer), newLength = newContents

+								.read(newContentBuffer); (equal = oldLength == newLength) && oldLength > 0; oldLength = oldContents

+								.read(oldContentBuffer), newLength = newContents.read(newContentBuffer)) {

+							for (int i = 0; i < oldLength; ++i) {

+								if (oldContentBuffer[i] != newContentBuffer[i]) {

+									equal = false;

+									break LOOP;

+								}

+							}

+						}

+					} finally {

+						newContents.close();

+					}

+				} finally {

+					oldContents.close();

+				}

+			}

+		} finally {

+			temporaryFile.delete();

+			resourcetoSave.eSetDeliver(true);

+		}

+		// CHECKSTYLE:ON

+

+		return !equal;

+	}

+

+	/**

 	 * Determine if a warning should be sent to the WorkspaceSession before saving the given resource and send

 	 * this warning.

 	 * <p>

@@ -438,9 +499,6 @@
 		// We calculate the Repository URI corresponding to the given path

 		URI uri = this.repository.getURIMatchingPath(repositoryRelativePath);

 		final Resource resource = this.repository.getResourceSet().getResource(uri, loadResourceOnDemand);

-		if (resource != null) {

-			resource.setTrackingModification(true);

-		}

 		return resource;

 	}

 

@@ -472,7 +530,6 @@
 				}

 			}

 		}

-		returnedResource.setTrackingModification(true);

 		return returnedResource;

 	}

 

@@ -551,9 +608,6 @@
 		if (elementToReload.eIsProxy()) {

 			resolve = EcoreUtil.resolve(elementToReload, this.repository.getResourceSet());

 		}

-		for (Resource resource : this.repository.getResourceSet().getResources()) {

-			resource.setTrackingModification(true);

-		}

 		return resolve;

 	}

 

@@ -577,4 +631,69 @@
 		}

 	}

 

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter#getResourcePath(org.eclipse.emf.common.util.URI)

+	 */

+	public String getResourcePath(URI resourceURI) {

+		return resourceURI.toString().replace("." + resourceURI.fileExtension(), "")

+				.replace("platform:/resource", "")

+				.replace(this.repository.getWorkspaceConfig().getRepositoryAbsolutePath(), "");

+	}

+

+	/**

+	 * Removes the dangling references contained in the given resource and saves the resource (without

+	 * notifying other clients).

+	 * 

+	 * @param resource

+	 *            the resource to clean

+	 * @return true if the given resource contained dangling references (and hence was cleaned and saved),

+	 *         false otherwise

+	 * @throws SaveException

+	 *             if resource cannot be save

+	 * @throws RepositoryConnectionException

+	 *             if repository cannot be accessed

+	 */

+	private boolean removeDanglingElements(Resource resource) throws SaveException,

+			RepositoryConnectionException {

+

+		// Step 1: detect dangling references

+		Collection<EObject> objectsToRemove = Sets.newLinkedHashSet();

+		Iterator<EObject> iterator = resource.getContents().iterator();

+		while (iterator.hasNext()) {

+			EObject root = iterator.next();

+			if (root.eContainer() != null && root.eContainer().eResource() == null) {

+				objectsToRemove.add(root);

+			}

+		}

+

+		try {

+			if (!objectsToRemove.isEmpty()) {

+				// Step 2: save or delete the resource if empty

+				treatSessionWarning(resource);

+				if (resource.getContents().size() <= objectsToRemove.size()) {

+					resource.delete(getSaveOptions());

+				} else {

+					for (EObject objectToRemove : objectsToRemove) {

+						EcoreUtil.remove(objectToRemove);

+					}

+					for (EObject nonDanglingElement : resource.getContents()) {

+						new RemoveDanglingReferences(this.repository.getEditingDomain(), nonDanglingElement)

+								.execute();

+					}

+					resource.save(getSaveOptions());

+				}

+				return true;

+			} else {

+				for (EObject nonDanglingElement : resource.getContents()) {

+					new RemoveDanglingReferences(this.repository.getEditingDomain(), nonDanglingElement)

+							.execute();

+				}

+			}

+		} catch (IOException ioE) {

+			throw new SaveException(ioE.getMessage());

+		}

+		return false;

+	}

 }

diff --git a/plugins/org.eclipse.mylyn.docs.intent.collab.ide/src/org/eclipse/mylyn/docs/intent/collab/ide/repository/WorkspaceSession.java b/plugins/org.eclipse.mylyn.docs.intent.collab.ide/src/org/eclipse/mylyn/docs/intent/collab/ide/repository/WorkspaceSession.java
index 5fc9691..1d1a872 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.collab.ide/src/org/eclipse/mylyn/docs/intent/collab/ide/repository/WorkspaceSession.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.collab.ide/src/org/eclipse/mylyn/docs/intent/collab/ide/repository/WorkspaceSession.java
@@ -48,7 +48,7 @@
 	/**

 	 * Resources that had been saved but for which we didn't receive any notification yet.

 	 */

-	protected Collection<Resource> savedResources = new ArrayList<Resource>();

+	protected Collection<Resource> savedResources = Sets.newLinkedHashSet();

 

 	/**

 	 * The {@link WorkspaceRepository} associated to this session.

@@ -179,31 +179,29 @@
 		// For each changed resources

 		for (final Resource changedResource : changedResources) {

 

-			if (changedResource.isLoaded()) {

-				repositoryAdapter.execute(new IntentCommand() {

+			repositoryAdapter.execute(new IntentCommand() {

 

-					public void execute() {

-						// TODO [DISABLED]

-						// this make the resource unstable, some commands launched within the bad timing will

-						// have side

-						// effects

-						// we want to reload the resource if it has been modified by another tool, but not if

-						// it has been

-						// modified by a client

-						// temporary workaround: disabling

-						// System.out.println("Reloading " + changedResource + "...");

-						// // We reload this resource (if it's loaded, otherwise we simply do nothing)

-						//

-						// reloadResource(changedResource);

-						//

-						// System.out.println(changedResource + " reloaded.");

+				public void execute() {

+					// TODO [DISABLED]

+					// this make the resource unstable, some commands launched within the bad timing will

+					// have side

+					// effects

+					// we want to reload the resource if it has been modified by another tool, but not if

+					// it has been

+					// modified by a client

+					// temporary workaround: disabling

+					// System.out.println("Reloading " + changedResource + "...");

+					// // We reload this resource (if it's loaded, otherwise we simply do nothing)

+					//

+					// reloadResource(changedResource);

+					//

+					// System.out.println(changedResource + " reloaded.");

 

-						// Finally, we notify the listeners of this session

-						notifyListeners(changedResource);

-					}

+					// Finally, we notify the listeners of this session

+					notifyListeners(changedResource);

+				}

 

-				});

-			}

+			});

 		}

 	}

 

@@ -283,7 +281,7 @@
 	private void notifyListeners(Resource resource) {

 

 		// Step 1 : notifying type listeners

-		for (WorkspaceTypeListener listener : this.workspaceSessionListeners) {

+		for (WorkspaceTypeListener listener : Sets.newLinkedHashSet(this.workspaceSessionListeners)) {

 			listener.notifyResourceChanged(resource);

 		}

 

diff --git a/plugins/org.eclipse.mylyn.docs.intent.collab/src/org/eclipse/mylyn/docs/intent/collab/handlers/adapters/RepositoryAdapter.java b/plugins/org.eclipse.mylyn.docs.intent.collab/src/org/eclipse/mylyn/docs/intent/collab/handlers/adapters/RepositoryAdapter.java
index c61b7a6..dedaf7c 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.collab/src/org/eclipse/mylyn/docs/intent/collab/handlers/adapters/RepositoryAdapter.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.collab/src/org/eclipse/mylyn/docs/intent/collab/handlers/adapters/RepositoryAdapter.java
@@ -13,6 +13,7 @@
 import java.util.Collection;
 import java.util.Set;
 
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.resource.Resource;
@@ -81,6 +82,15 @@
 	Resource getResource(String repositoryRelativePath);
 
 	/**
+	 * Returns the repository path corresponding to the Resource located at the given URI.
+	 * 
+	 * @param resourceURI
+	 *            the resourceURI
+	 * @return the repository path corresponding to the Resource located at the given URI
+	 */
+	String getResourcePath(URI resourceURI);
+
+	/**
 	 * Creates the resource located at the given path ; if a resource already exists, returns it.
 	 * 
 	 * @param path
diff --git a/plugins/org.eclipse.mylyn.docs.intent.collab/src/org/eclipse/mylyn/docs/intent/collab/handlers/adapters/RepositoryStructurer.java b/plugins/org.eclipse.mylyn.docs.intent.collab/src/org/eclipse/mylyn/docs/intent/collab/handlers/adapters/RepositoryStructurer.java
index 70ca01a..742cfbb 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.collab/src/org/eclipse/mylyn/docs/intent/collab/handlers/adapters/RepositoryStructurer.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.collab/src/org/eclipse/mylyn/docs/intent/collab/handlers/adapters/RepositoryStructurer.java
@@ -10,7 +10,6 @@
  *******************************************************************************/
 package org.eclipse.mylyn.docs.intent.collab.handlers.adapters;
 
-import java.util.Collection;
 
 /**
  * Repository Structurer used to restructure automaticly the resources contained in the repository :
@@ -36,9 +35,8 @@
 	 * 
 	 * @param repositoryAdapter
 	 *            the RepositoryAdapter to use for restructuring the repository.
-	 * @return the pathes of the modified resources
 	 * @throws ReadOnlyException
 	 *             if the current context associated to the given adapter is read-only
 	 */
-	Collection<String> structure(RepositoryAdapter repositoryAdapter) throws ReadOnlyException;
+	void structure(RepositoryAdapter repositoryAdapter) throws ReadOnlyException;
 }
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/model/compilerInformations.ecore b/plugins/org.eclipse.mylyn.docs.intent.core/model/compilerInformations.ecore
index 6b10473..0e469d3 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/model/compilerInformations.ecore
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/model/compilerInformations.ecore
@@ -68,7 +68,7 @@
   </eClassifiers>

   <eClassifiers xsi:type="ecore:EClass" name="CompilationStatus">

     <eStructuralFeatures xsi:type="ecore:EReference" name="target" lowerBound="1"

-        eType="ecore:EClass document.ecore#//IntentGenericElement"/>

+        eType="ecore:EClass document.ecore#//IntentGenericElement" eOpposite="document.ecore#//IntentGenericElement/compilationStatus"/>

     <eStructuralFeatures xsi:type="ecore:EAttribute" name="message" lowerBound="1"

         eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

     <eStructuralFeatures xsi:type="ecore:EAttribute" name="severity" lowerBound="1"

@@ -80,6 +80,7 @@
         upperBound="-1" eType="#//CompilationStatus"/>

     <eStructuralFeatures xsi:type="ecore:EReference" name="modelingUnitToStatusList"

         upperBound="-1" eType="#//ModelingUnitToStatusList" containment="true"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="validationTime" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>

   </eClassifiers>

   <eClassifiers xsi:type="ecore:EClass" name="CompilationInformationHolder">

     <eStructuralFeatures xsi:type="ecore:EReference" name="generatedElementList" upperBound="-1"

diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/model/document.ecore b/plugins/org.eclipse.mylyn.docs.intent.core/model/document.ecore
index ed227bc..070db60 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/model/document.ecore
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/model/document.ecore
@@ -4,7 +4,10 @@
     nsPrefix="intentDocument">

   <eClassifiers xsi:type="ecore:EClass" name="IntentGenericElement">

     <eStructuralFeatures xsi:type="ecore:EReference" name="compilationStatus" upperBound="-1"

-        eType="ecore:EClass compilerInformations.ecore#//CompilationStatus" containment="true"/>

+        eType="ecore:EClass compilerInformations.ecore#//CompilationStatus" containment="true"

+        eOpposite="compilerInformations.ecore#//CompilationStatus/target"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="indexEntry" eType="ecore:EClass indexer.ecore#//IntentIndexEntry"

+        eOpposite="indexer.ecore#//IntentIndexEntry/referencedElement"/>

   </eClassifiers>

   <eClassifiers xsi:type="ecore:EClass" name="IntentStructuredElement" abstract="true"

       eSuperTypes="../../org.eclipse.mylyn.docs.intent.markup/model/markup.ecore#//Section #//IntentGenericElement">

diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/model/indexer.ecore b/plugins/org.eclipse.mylyn.docs.intent.core/model/indexer.ecore
index 0e9c106..3881c46 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/model/indexer.ecore
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/model/indexer.ecore
@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<ecore:EPackage xmi:version="2.0"
-    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="indexer"
-    nsURI="http://www.eclipse.org/intent/indexer/0.7" nsPrefix="intentIndexer">
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="indexer" nsURI="http://www.eclipse.org/intent/indexer/0.7" nsPrefix="intentIndexer">
   <eClassifiers xsi:type="ecore:EClass" name="IntentIndex">
     <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1"
         eType="#//IntentIndexEntry" containment="true"/>
@@ -10,7 +8,8 @@
   <eClassifiers xsi:type="ecore:EClass" name="IntentIndexEntry">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" lowerBound="1" eType="#//INDEX_ENTRY_TYPE"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="referencedElement" eType="ecore:EClass document.ecore#//IntentGenericElement"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referencedElement" eType="ecore:EClass document.ecore#//IntentGenericElement"
+        eOpposite="document.ecore#//IntentGenericElement/indexEntry"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="subEntries" upperBound="-1"
         eType="#//IntentIndexEntry" containment="true"/>
   </eClassifiers>
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/model/indexer.genmodel b/plugins/org.eclipse.mylyn.docs.intent.core/model/indexer.genmodel
deleted file mode 100644
index ee78466..0000000
--- a/plugins/org.eclipse.mylyn.docs.intent.core/model/indexer.genmodel
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<genmodel:GenModel xmi:version="2.0"
-    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
-    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.mylyn.docs.intent.core/src-gen"
-    modelPluginID="org.eclipse.mylyn.docs.intent.core" modelName="Indexer" rootExtendsInterface="org.eclipse.emf.cdo.CDOObject"
-    rootExtendsClass="org.eclipse.emf.internal.cdo.CDOObjectImpl" reflectiveDelegation="true"
-    importerID="org.eclipse.emf.importer.cdo" featureDelegation="Reflective" containmentProxies="true"
-    complianceLevel="5.0" copyrightFields="false" usedGenPackages="../../org.eclipse.mylyn.docs.intent.markup/model/markupCDO.genmodel#//markup intent.genmodel#//modelingunit intent.genmodel#//genericunit intent.genmodel#//document intent.genmodel#//compiler intent.genmodel#//descriptionunit">
-  <foreignModel>indexer.ecore</foreignModel>
-  <modelPluginVariables>CDO=org.eclipse.emf.cdo</modelPluginVariables>
-  <genPackages prefix="IntentIndexer" basePackage="org.eclipse.mylyn.docs.intent.core"
-      disposableProviderFactory="true" ecorePackage="indexer.ecore#/">
-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="indexer.ecore#//INDEX_ENTRY_TYPE">
-      <genEnumLiterals ecoreEnumLiteral="indexer.ecore#//INDEX_ENTRY_TYPE/IntentDocument"/>
-      <genEnumLiterals ecoreEnumLiteral="indexer.ecore#//INDEX_ENTRY_TYPE/IntentChapter"/>
-      <genEnumLiterals ecoreEnumLiteral="indexer.ecore#//INDEX_ENTRY_TYPE/IntentSection"/>
-    </genEnums>
-    <genClasses ecoreClass="indexer.ecore#//IntentIndex">
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference indexer.ecore#//IntentIndex/entries"/>
-    </genClasses>
-    <genClasses ecoreClass="indexer.ecore#//IntentIndexEntry">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute indexer.ecore#//IntentIndexEntry/name"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute indexer.ecore#//IntentIndexEntry/type"/>
-      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference indexer.ecore#//IntentIndexEntry/referencedElement"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference indexer.ecore#//IntentIndexEntry/subEntries"/>
-    </genClasses>
-  </genPackages>
-</genmodel:GenModel>
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/model/intent.genmodel b/plugins/org.eclipse.mylyn.docs.intent.core/model/intent.genmodel
index 976bb70..98b9c91 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/model/intent.genmodel
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/model/intent.genmodel
@@ -7,115 +7,23 @@
     featureDelegation="Reflective" containmentProxies="true" complianceLevel="5.0"

     copyrightFields="false" usedGenPackages="../../org.eclipse.mylyn.docs.intent.markup/model/markupCDO.genmodel#//markup"

     classNamePattern="">

-  <foreignModel>modelingUnit.ecore</foreignModel>

+  <foreignModel>indexer.ecore</foreignModel>

   <modelPluginVariables>CDO=org.eclipse.emf.cdo</modelPluginVariables>

-  <genPackages prefix="ModelingUnit" basePackage="org.eclipse.mylyn.docs.intent.core"

-      disposableProviderFactory="true" ecorePackage="modelingUnit.ecore#/">

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="modelingUnit.ecore#//AffectationOperator">

-      <genEnumLiterals ecoreEnumLiteral="modelingUnit.ecore#//AffectationOperator/SINGLE_VALUED_AFFECTATION"/>

-      <genEnumLiterals ecoreEnumLiteral="modelingUnit.ecore#//AffectationOperator/MULTI_VALUED_AFFECTATION"/>

+  <genPackages prefix="IntentIndexer" basePackage="org.eclipse.mylyn.docs.intent.core"

+      disposableProviderFactory="true" ecorePackage="indexer.ecore#/">

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="indexer.ecore#//INDEX_ENTRY_TYPE">

+      <genEnumLiterals ecoreEnumLiteral="indexer.ecore#//INDEX_ENTRY_TYPE/IntentDocument"/>

+      <genEnumLiterals ecoreEnumLiteral="indexer.ecore#//INDEX_ENTRY_TYPE/IntentChapter"/>

+      <genEnumLiterals ecoreEnumLiteral="indexer.ecore#//INDEX_ENTRY_TYPE/IntentSection"/>

     </genEnums>

-    <genClasses ecoreClass="modelingUnit.ecore#//KeyValForAnnotation">

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//KeyValForAnnotation/key"/>

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//KeyValForAnnotation/value"/>

+    <genClasses ecoreClass="indexer.ecore#//IntentIndex">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference indexer.ecore#//IntentIndex/entries"/>

     </genClasses>

-    <genClasses ecoreClass="modelingUnit.ecore#//ModelingUnit">

-      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//ModelingUnit/usedBy"/>

-      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//ModelingUnit/seeAlso"/>

-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//ModelingUnit/resource"/>

-    </genClasses>

-    <genClasses image="false" ecoreClass="modelingUnit.ecore#//ModelingUnitInstruction"/>

-    <genClasses ecoreClass="modelingUnit.ecore#//ResourceReference">

-      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//ResourceReference/referencedElement"/>

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//ResourceReference/lineBreak"/>

-    </genClasses>

-    <genClasses ecoreClass="modelingUnit.ecore#//ModelingUnitInstructionReference">

-      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//ModelingUnitInstructionReference/referencedElement"/>

-    </genClasses>

-    <genClasses ecoreClass="modelingUnit.ecore#//InstanciationInstructionReference">

-      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//InstanciationInstructionReference/referencedElement"/>

-    </genClasses>

-    <genClasses ecoreClass="modelingUnit.ecore#//ResourceDeclaration">

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//ResourceDeclaration/uri"/>

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//ResourceDeclaration/name"/>

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//ResourceDeclaration/contentType"/>

-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//ResourceDeclaration/content"/>

-    </genClasses>

-    <genClasses ecoreClass="modelingUnit.ecore#//IntentSectionReferenceinModelingUnit"/>

-    <genClasses ecoreClass="modelingUnit.ecore#//LabelinModelingUnit"/>

-    <genClasses ecoreClass="modelingUnit.ecore#//AnnotationDeclaration">

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//AnnotationDeclaration/annotationID"/>

-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//AnnotationDeclaration/map"/>

-    </genClasses>

-    <genClasses ecoreClass="modelingUnit.ecore#//TypeReference">

-      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//TypeReference/resolvedType"/>

-    </genClasses>

-    <genClasses image="false" ecoreClass="modelingUnit.ecore#//InstanceLevelInstruction">

-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//InstanceLevelInstruction/metaType"/>

-    </genClasses>

-    <genClasses ecoreClass="modelingUnit.ecore#//InstanciationInstruction">

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//InstanciationInstruction/name"/>

-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//InstanciationInstruction/structuralFeatures"/>

-    </genClasses>

-    <genClasses ecoreClass="modelingUnit.ecore#//StructuralFeatureAffectation">

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//StructuralFeatureAffectation/name"/>

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//StructuralFeatureAffectation/usedOperator"/>

-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//StructuralFeatureAffectation/values"/>

-    </genClasses>

-    <genClasses image="false" ecoreClass="modelingUnit.ecore#//ValueForStructuralFeature"/>

-    <genClasses ecoreClass="modelingUnit.ecore#//NativeValueForStructuralFeature">

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//NativeValueForStructuralFeature/value"/>

-    </genClasses>

-    <genClasses ecoreClass="modelingUnit.ecore#//NewObjectValueForStructuralFeature">

-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//NewObjectValueForStructuralFeature/value"/>

-    </genClasses>

-    <genClasses ecoreClass="modelingUnit.ecore#//ReferenceValueForStructuralFeature">

-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//ReferenceValueForStructuralFeature/referencedElement"/>

-      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//ReferenceValueForStructuralFeature/referencedMetaType"/>

-    </genClasses>

-    <genClasses ecoreClass="modelingUnit.ecore#//ContributionInstruction">

-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//ContributionInstruction/referencedElement"/>

-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//ContributionInstruction/contributions"/>

-    </genClasses>

-  </genPackages>

-  <genPackages prefix="GenericUnit" basePackage="org.eclipse.mylyn.docs.intent.core"

-      disposableProviderFactory="true" ecorePackage="genericUnit.ecore#/">

-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="genericUnit.ecore#//TypeLabel">

-      <genEnumLiterals ecoreEnumLiteral="genericUnit.ecore#//TypeLabel/LAZY"/>

-      <genEnumLiterals ecoreEnumLiteral="genericUnit.ecore#//TypeLabel/EXPLICIT"/>

-    </genEnums>

-    <genClasses image="false" ecoreClass="genericUnit.ecore#//GenericUnit">

-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference genericUnit.ecore#//GenericUnit/instructions"/>

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//GenericUnit/unitName"/>

-    </genClasses>

-    <genClasses image="false" ecoreClass="genericUnit.ecore#//UnitInstruction">

-      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference genericUnit.ecore#//UnitInstruction/unit"/>

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//UnitInstruction/lineBreak"/>

-    </genClasses>

-    <genClasses ecoreClass="genericUnit.ecore#//UnitInstructionReference">

-      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference genericUnit.ecore#//UnitInstructionReference/referencedElement"/>

-    </genClasses>

-    <genClasses ecoreClass="genericUnit.ecore#//LabelDeclarationReference">

-      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference genericUnit.ecore#//LabelDeclarationReference/referencedElement"/>

-    </genClasses>

-    <genClasses ecoreClass="genericUnit.ecore#//IntentSectionReferenceInstruction">

-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference genericUnit.ecore#//IntentSectionReferenceInstruction/referencedObject"/>

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//IntentSectionReferenceInstruction/textToPrint"/>

-    </genClasses>

-    <genClasses ecoreClass="genericUnit.ecore#//LabelDeclaration">

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//LabelDeclaration/labelValue"/>

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//LabelDeclaration/textToPrint"/>

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//LabelDeclaration/type"/>

-    </genClasses>

-    <genClasses ecoreClass="genericUnit.ecore#//LabelReferenceInstruction">

-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference genericUnit.ecore#//LabelReferenceInstruction/referencedLabel"/>

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//LabelReferenceInstruction/type"/>

-    </genClasses>

-    <genClasses ecoreClass="genericUnit.ecore#//AdressedAnnotation">

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//AdressedAnnotation/receiver"/>

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//AdressedAnnotation/source"/>

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//AdressedAnnotation/message"/>

-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//AdressedAnnotation/type"/>

+    <genClasses ecoreClass="indexer.ecore#//IntentIndexEntry">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute indexer.ecore#//IntentIndexEntry/name"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute indexer.ecore#//IntentIndexEntry/type"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference indexer.ecore#//IntentIndexEntry/referencedElement"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference indexer.ecore#//IntentIndexEntry/subEntries"/>

     </genClasses>

   </genPackages>

   <genPackages prefix="IntentDocument" basePackage="org.eclipse.mylyn.docs.intent.core"

@@ -128,6 +36,7 @@
     <genDataTypes ecoreDataType="document.ecore#//URI"/>

     <genClasses ecoreClass="document.ecore#//IntentGenericElement">

       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference document.ecore#//IntentGenericElement/compilationStatus"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference document.ecore#//IntentGenericElement/indexEntry"/>

     </genClasses>

     <genClasses image="false" ecoreClass="document.ecore#//IntentStructuredElement">

       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute document.ecore#//IntentStructuredElement/formattedTitle"/>

@@ -239,6 +148,7 @@
     <genClasses ecoreClass="compilerInformations.ecore#//CompilationStatusManager">

       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference compilerInformations.ecore#//CompilationStatusManager/compilationStatusList"/>

       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference compilerInformations.ecore#//CompilationStatusManager/modelingUnitToStatusList"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute compilerInformations.ecore#//CompilationStatusManager/validationTime"/>

     </genClasses>

     <genClasses ecoreClass="compilerInformations.ecore#//CompilationInformationHolder">

       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference compilerInformations.ecore#//CompilationInformationHolder/generatedElementList"/>

@@ -275,6 +185,46 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute compilerInformations.ecore#//SynchronizerCompilationStatus/compiledResourceState"/>

     </genClasses>

   </genPackages>

+  <genPackages prefix="GenericUnit" basePackage="org.eclipse.mylyn.docs.intent.core"

+      disposableProviderFactory="true" ecorePackage="genericUnit.ecore#/">

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="genericUnit.ecore#//TypeLabel">

+      <genEnumLiterals ecoreEnumLiteral="genericUnit.ecore#//TypeLabel/LAZY"/>

+      <genEnumLiterals ecoreEnumLiteral="genericUnit.ecore#//TypeLabel/EXPLICIT"/>

+    </genEnums>

+    <genClasses image="false" ecoreClass="genericUnit.ecore#//GenericUnit">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference genericUnit.ecore#//GenericUnit/instructions"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//GenericUnit/unitName"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="genericUnit.ecore#//UnitInstruction">

+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference genericUnit.ecore#//UnitInstruction/unit"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//UnitInstruction/lineBreak"/>

+    </genClasses>

+    <genClasses ecoreClass="genericUnit.ecore#//UnitInstructionReference">

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference genericUnit.ecore#//UnitInstructionReference/referencedElement"/>

+    </genClasses>

+    <genClasses ecoreClass="genericUnit.ecore#//LabelDeclarationReference">

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference genericUnit.ecore#//LabelDeclarationReference/referencedElement"/>

+    </genClasses>

+    <genClasses ecoreClass="genericUnit.ecore#//IntentSectionReferenceInstruction">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference genericUnit.ecore#//IntentSectionReferenceInstruction/referencedObject"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//IntentSectionReferenceInstruction/textToPrint"/>

+    </genClasses>

+    <genClasses ecoreClass="genericUnit.ecore#//LabelDeclaration">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//LabelDeclaration/labelValue"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//LabelDeclaration/textToPrint"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//LabelDeclaration/type"/>

+    </genClasses>

+    <genClasses ecoreClass="genericUnit.ecore#//LabelReferenceInstruction">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference genericUnit.ecore#//LabelReferenceInstruction/referencedLabel"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//LabelReferenceInstruction/type"/>

+    </genClasses>

+    <genClasses ecoreClass="genericUnit.ecore#//AdressedAnnotation">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//AdressedAnnotation/receiver"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//AdressedAnnotation/source"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//AdressedAnnotation/message"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute genericUnit.ecore#//AdressedAnnotation/type"/>

+    </genClasses>

+  </genPackages>

   <genPackages prefix="DescriptionUnit" basePackage="org.eclipse.mylyn.docs.intent.core"

       disposableProviderFactory="true" ecorePackage="descriptionUnit.ecore#/">

     <genClasses ecoreClass="descriptionUnit.ecore#//DescriptionUnit"/>

@@ -283,4 +233,73 @@
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference descriptionUnit.ecore#//DescriptionBloc/descriptionBloc"/>

     </genClasses>

   </genPackages>

+  <genPackages prefix="ModelingUnit" basePackage="org.eclipse.mylyn.docs.intent.core"

+      disposableProviderFactory="true" ecorePackage="modelingUnit.ecore#/">

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="modelingUnit.ecore#//AffectationOperator">

+      <genEnumLiterals ecoreEnumLiteral="modelingUnit.ecore#//AffectationOperator/SINGLE_VALUED_AFFECTATION"/>

+      <genEnumLiterals ecoreEnumLiteral="modelingUnit.ecore#//AffectationOperator/MULTI_VALUED_AFFECTATION"/>

+    </genEnums>

+    <genClasses ecoreClass="modelingUnit.ecore#//KeyValForAnnotation">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//KeyValForAnnotation/key"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//KeyValForAnnotation/value"/>

+    </genClasses>

+    <genClasses ecoreClass="modelingUnit.ecore#//ModelingUnit">

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//ModelingUnit/usedBy"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//ModelingUnit/seeAlso"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//ModelingUnit/resource"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="modelingUnit.ecore#//ModelingUnitInstruction"/>

+    <genClasses ecoreClass="modelingUnit.ecore#//ResourceReference">

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//ResourceReference/referencedElement"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//ResourceReference/lineBreak"/>

+    </genClasses>

+    <genClasses ecoreClass="modelingUnit.ecore#//ModelingUnitInstructionReference">

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//ModelingUnitInstructionReference/referencedElement"/>

+    </genClasses>

+    <genClasses ecoreClass="modelingUnit.ecore#//InstanciationInstructionReference">

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//InstanciationInstructionReference/referencedElement"/>

+    </genClasses>

+    <genClasses ecoreClass="modelingUnit.ecore#//ResourceDeclaration">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//ResourceDeclaration/uri"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//ResourceDeclaration/name"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//ResourceDeclaration/contentType"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//ResourceDeclaration/content"/>

+    </genClasses>

+    <genClasses ecoreClass="modelingUnit.ecore#//IntentSectionReferenceinModelingUnit"/>

+    <genClasses ecoreClass="modelingUnit.ecore#//LabelinModelingUnit"/>

+    <genClasses ecoreClass="modelingUnit.ecore#//AnnotationDeclaration">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//AnnotationDeclaration/annotationID"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//AnnotationDeclaration/map"/>

+    </genClasses>

+    <genClasses ecoreClass="modelingUnit.ecore#//TypeReference">

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//TypeReference/resolvedType"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="modelingUnit.ecore#//InstanceLevelInstruction">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//InstanceLevelInstruction/metaType"/>

+    </genClasses>

+    <genClasses ecoreClass="modelingUnit.ecore#//InstanciationInstruction">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//InstanciationInstruction/name"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//InstanciationInstruction/structuralFeatures"/>

+    </genClasses>

+    <genClasses ecoreClass="modelingUnit.ecore#//StructuralFeatureAffectation">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//StructuralFeatureAffectation/name"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//StructuralFeatureAffectation/usedOperator"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//StructuralFeatureAffectation/values"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="modelingUnit.ecore#//ValueForStructuralFeature"/>

+    <genClasses ecoreClass="modelingUnit.ecore#//NativeValueForStructuralFeature">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelingUnit.ecore#//NativeValueForStructuralFeature/value"/>

+    </genClasses>

+    <genClasses ecoreClass="modelingUnit.ecore#//NewObjectValueForStructuralFeature">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//NewObjectValueForStructuralFeature/value"/>

+    </genClasses>

+    <genClasses ecoreClass="modelingUnit.ecore#//ReferenceValueForStructuralFeature">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//ReferenceValueForStructuralFeature/referencedElement"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//ReferenceValueForStructuralFeature/referencedMetaType"/>

+    </genClasses>

+    <genClasses ecoreClass="modelingUnit.ecore#//ContributionInstruction">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//ContributionInstruction/referencedElement"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelingUnit.ecore#//ContributionInstruction/contributions"/>

+    </genClasses>

+  </genPackages>

 </genmodel:GenModel>

diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/CompilationStatus.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/CompilationStatus.java
index 99f9754..00937fe 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/CompilationStatus.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/CompilationStatus.java
@@ -34,25 +34,27 @@
  */
 public interface CompilationStatus extends CDOObject {
 	/**
-	 * Returns the value of the '<em><b>Target</b></em>' reference.
+	 * Returns the value of the '<em><b>Target</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.mylyn.docs.intent.core.document.IntentGenericElement#getCompilationStatus <em>Compilation Status</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <p>
 	 * If the meaning of the '<em>Target</em>' reference isn't clear, there really should be more of a
 	 * description here...
 	 * </p>
 	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Target</em>' reference.
+	 * @return the value of the '<em>Target</em>' container reference.
 	 * @see #setTarget(IntentGenericElement)
 	 * @see org.eclipse.mylyn.docs.intent.core.compiler.CompilerPackage#getCompilationStatus_Target()
-	 * @model required="true"
+	 * @see org.eclipse.mylyn.docs.intent.core.document.IntentGenericElement#getCompilationStatus
+	 * @model opposite="compilationStatus" required="true" transient="false"
 	 * @generated
 	 */
 	IntentGenericElement getTarget();
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatus#getTarget <em>Target</em>}' reference.
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatus#getTarget <em>Target</em>}' container reference.
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Target</em>' reference.
+	 * @param value the new value of the '<em>Target</em>' container reference.
 	 * @see #getTarget()
 	 * @generated
 	 */
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/CompilationStatusManager.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/CompilationStatusManager.java
index a1309a7..36733ac 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/CompilationStatusManager.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/CompilationStatusManager.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.mylyn.docs.intent.core.compiler;
 
+import java.math.BigInteger;
 import org.eclipse.emf.cdo.CDOObject;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.EMap;
@@ -24,6 +25,7 @@
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatusManager#getCompilationStatusList <em>Compilation Status List</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatusManager#getModelingUnitToStatusList <em>Modeling Unit To Status List</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatusManager#getValidationTime <em>Validation Time</em>}</li>
  * </ul>
  * </p>
  *
@@ -67,4 +69,30 @@
 	 */
 	EMap<ModelingUnit, EList<CompilationStatus>> getModelingUnitToStatusList();
 
+	/**
+	 * Returns the value of the '<em><b>Validation Time</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Validation Time</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Validation Time</em>' attribute.
+	 * @see #setValidationTime(BigInteger)
+	 * @see org.eclipse.mylyn.docs.intent.core.compiler.CompilerPackage#getCompilationStatusManager_ValidationTime()
+	 * @model
+	 * @generated
+	 */
+	BigInteger getValidationTime();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatusManager#getValidationTime <em>Validation Time</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Validation Time</em>' attribute.
+	 * @see #getValidationTime()
+	 * @generated
+	 */
+	void setValidationTime(BigInteger value);
+
 } // CompilationStatusManager
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/CompilerPackage.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/CompilerPackage.java
index e641de3..9841fbf 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/CompilerPackage.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/CompilerPackage.java
@@ -467,13 +467,22 @@
 	int COMPILATION_STATUS_MANAGER__MODELING_UNIT_TO_STATUS_LIST = 1;
 
 	/**
+	 * The feature id for the '<em><b>Validation Time</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPILATION_STATUS_MANAGER__VALIDATION_TIME = 2;
+
+	/**
 	 * The number of structural features of the '<em>Compilation Status Manager</em>' class. <!--
 	 * begin-user-doc --> <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 * @ordered
 	 */
-	int COMPILATION_STATUS_MANAGER_FEATURE_COUNT = 2;
+	int COMPILATION_STATUS_MANAGER_FEATURE_COUNT = 3;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.mylyn.docs.intent.core.compiler.impl.CompilationInformationHolderImpl <em>Compilation Information Holder</em>}' class.
@@ -723,7 +732,7 @@
 	int SYNCHRONIZER_COMPILATION_STATUS = 16;
 
 	/**
-	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * The feature id for the '<em><b>Target</b></em>' container reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -1229,6 +1238,17 @@
 	EReference getCompilationStatusManager_ModelingUnitToStatusList();
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatusManager#getValidationTime <em>Validation Time</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Validation Time</em>'.
+	 * @see org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatusManager#getValidationTime()
+	 * @see #getCompilationStatusManager()
+	 * @generated
+	 */
+	EAttribute getCompilationStatusManager_ValidationTime();
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.intent.core.compiler.CompilationInformationHolder <em>Compilation Information Holder</em>}'.
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for class '<em>Compilation Information Holder</em>'.
@@ -1830,7 +1850,7 @@
 		EClass COMPILATION_STATUS = eINSTANCE.getCompilationStatus();
 
 		/**
-		 * The meta object literal for the '<em><b>Target</b></em>' reference feature.
+		 * The meta object literal for the '<em><b>Target</b></em>' container reference feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
 		 * @generated
@@ -1888,6 +1908,15 @@
 				.getCompilationStatusManager_ModelingUnitToStatusList();
 
 		/**
+		 * The meta object literal for the '<em><b>Validation Time</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute COMPILATION_STATUS_MANAGER__VALIDATION_TIME = eINSTANCE
+				.getCompilationStatusManager_ValidationTime();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.mylyn.docs.intent.core.compiler.impl.CompilationInformationHolderImpl <em>Compilation Information Holder</em>}' class.
 		 * <!-- begin-user-doc --> <!-- end-user-doc -->
 		 * @see org.eclipse.mylyn.docs.intent.core.compiler.impl.CompilationInformationHolderImpl
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/impl/CompilationStatusManagerImpl.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/impl/CompilationStatusManagerImpl.java
index 50c70a9..0704c73 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/impl/CompilationStatusManagerImpl.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/impl/CompilationStatusManagerImpl.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.mylyn.docs.intent.core.compiler.impl;
 
+import java.math.BigInteger;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.EMap;
 import org.eclipse.emf.ecore.EClass;
@@ -27,6 +28,7 @@
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.intent.core.compiler.impl.CompilationStatusManagerImpl#getCompilationStatusList <em>Compilation Status List</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.intent.core.compiler.impl.CompilationStatusManagerImpl#getModelingUnitToStatusList <em>Modeling Unit To Status List</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.intent.core.compiler.impl.CompilationStatusManagerImpl#getValidationTime <em>Validation Time</em>}</li>
  * </ul>
  * </p>
  *
@@ -79,4 +81,22 @@
 				CompilerPackage.Literals.COMPILATION_STATUS_MANAGER__MODELING_UNIT_TO_STATUS_LIST, true);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BigInteger getValidationTime() {
+		return (BigInteger)eGet(CompilerPackage.Literals.COMPILATION_STATUS_MANAGER__VALIDATION_TIME, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setValidationTime(BigInteger newValidationTime) {
+		eSet(CompilerPackage.Literals.COMPILATION_STATUS_MANAGER__VALIDATION_TIME, newValidationTime);
+	}
+
 } // CompilationStatusManagerImpl
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/impl/CompilerFactoryImpl.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/impl/CompilerFactoryImpl.java
index b931575..07ac7d0 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/impl/CompilerFactoryImpl.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/impl/CompilerFactoryImpl.java
@@ -20,6 +20,7 @@
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.impl.EFactoryImpl;
 import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.mylyn.docs.intent.core.compiler.*;
 import org.eclipse.mylyn.docs.intent.core.compiler.CompilationInformationHolder;
 import org.eclipse.mylyn.docs.intent.core.compiler.CompilationMessageType;
 import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatus;
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/impl/CompilerPackageImpl.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/impl/CompilerPackageImpl.java
index ae3a12d..41a1f62 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/impl/CompilerPackageImpl.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/impl/CompilerPackageImpl.java
@@ -38,6 +38,8 @@
 import org.eclipse.mylyn.docs.intent.core.document.impl.IntentDocumentPackageImpl;
 import org.eclipse.mylyn.docs.intent.core.genericunit.GenericUnitPackage;
 import org.eclipse.mylyn.docs.intent.core.genericunit.impl.GenericUnitPackageImpl;
+import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexerPackage;
+import org.eclipse.mylyn.docs.intent.core.indexer.impl.IntentIndexerPackageImpl;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnitPackage;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.impl.ModelingUnitPackageImpl;
 import org.eclipse.mylyn.docs.intent.markup.markup.MarkupPackage;
@@ -219,32 +221,37 @@
 		MarkupPackage.eINSTANCE.eClass();
 
 		// Obtain or create and register interdependencies
-		ModelingUnitPackageImpl theModelingUnitPackage = (ModelingUnitPackageImpl)(EPackage.Registry.INSTANCE
-				.getEPackage(ModelingUnitPackage.eNS_URI) instanceof ModelingUnitPackageImpl ? EPackage.Registry.INSTANCE
-				.getEPackage(ModelingUnitPackage.eNS_URI) : ModelingUnitPackage.eINSTANCE);
-		GenericUnitPackageImpl theGenericUnitPackage = (GenericUnitPackageImpl)(EPackage.Registry.INSTANCE
-				.getEPackage(GenericUnitPackage.eNS_URI) instanceof GenericUnitPackageImpl ? EPackage.Registry.INSTANCE
-				.getEPackage(GenericUnitPackage.eNS_URI) : GenericUnitPackage.eINSTANCE);
+		IntentIndexerPackageImpl theIntentIndexerPackage = (IntentIndexerPackageImpl)(EPackage.Registry.INSTANCE
+				.getEPackage(IntentIndexerPackage.eNS_URI) instanceof IntentIndexerPackageImpl ? EPackage.Registry.INSTANCE
+				.getEPackage(IntentIndexerPackage.eNS_URI) : IntentIndexerPackage.eINSTANCE);
 		IntentDocumentPackageImpl theIntentDocumentPackage = (IntentDocumentPackageImpl)(EPackage.Registry.INSTANCE
 				.getEPackage(IntentDocumentPackage.eNS_URI) instanceof IntentDocumentPackageImpl ? EPackage.Registry.INSTANCE
 				.getEPackage(IntentDocumentPackage.eNS_URI) : IntentDocumentPackage.eINSTANCE);
+		GenericUnitPackageImpl theGenericUnitPackage = (GenericUnitPackageImpl)(EPackage.Registry.INSTANCE
+				.getEPackage(GenericUnitPackage.eNS_URI) instanceof GenericUnitPackageImpl ? EPackage.Registry.INSTANCE
+				.getEPackage(GenericUnitPackage.eNS_URI) : GenericUnitPackage.eINSTANCE);
 		DescriptionUnitPackageImpl theDescriptionUnitPackage = (DescriptionUnitPackageImpl)(EPackage.Registry.INSTANCE
 				.getEPackage(DescriptionUnitPackage.eNS_URI) instanceof DescriptionUnitPackageImpl ? EPackage.Registry.INSTANCE
 				.getEPackage(DescriptionUnitPackage.eNS_URI) : DescriptionUnitPackage.eINSTANCE);
+		ModelingUnitPackageImpl theModelingUnitPackage = (ModelingUnitPackageImpl)(EPackage.Registry.INSTANCE
+				.getEPackage(ModelingUnitPackage.eNS_URI) instanceof ModelingUnitPackageImpl ? EPackage.Registry.INSTANCE
+				.getEPackage(ModelingUnitPackage.eNS_URI) : ModelingUnitPackage.eINSTANCE);
 
 		// Create package meta-data objects
 		theCompilerPackage.createPackageContents();
-		theModelingUnitPackage.createPackageContents();
-		theGenericUnitPackage.createPackageContents();
+		theIntentIndexerPackage.createPackageContents();
 		theIntentDocumentPackage.createPackageContents();
+		theGenericUnitPackage.createPackageContents();
 		theDescriptionUnitPackage.createPackageContents();
+		theModelingUnitPackage.createPackageContents();
 
 		// Initialize created meta-data
 		theCompilerPackage.initializePackageContents();
-		theModelingUnitPackage.initializePackageContents();
-		theGenericUnitPackage.initializePackageContents();
+		theIntentIndexerPackage.initializePackageContents();
 		theIntentDocumentPackage.initializePackageContents();
+		theGenericUnitPackage.initializePackageContents();
 		theDescriptionUnitPackage.initializePackageContents();
+		theModelingUnitPackage.initializePackageContents();
 
 		// Mark meta-data to indicate it can't be changed
 		theCompilerPackage.freeze();
@@ -543,6 +550,15 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getCompilationStatusManager_ValidationTime() {
+		return (EAttribute)compilationStatusManagerEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
@@ -876,6 +892,7 @@
 		createEReference(compilationStatusManagerEClass, COMPILATION_STATUS_MANAGER__COMPILATION_STATUS_LIST);
 		createEReference(compilationStatusManagerEClass,
 				COMPILATION_STATUS_MANAGER__MODELING_UNIT_TO_STATUS_LIST);
+		createEAttribute(compilationStatusManagerEClass, COMPILATION_STATUS_MANAGER__VALIDATION_TIME);
 
 		compilationInformationHolderEClass = createEClass(COMPILATION_INFORMATION_HOLDER);
 		createEReference(compilationInformationHolderEClass,
@@ -1066,9 +1083,9 @@
 		initEClass(compilationStatusEClass, CompilationStatus.class, "CompilationStatus", !IS_ABSTRACT,
 				!IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getCompilationStatus_Target(), theIntentDocumentPackage.getIntentGenericElement(),
-				null, "target", null, 1, 1, CompilationStatus.class, !IS_TRANSIENT, !IS_VOLATILE,
-				IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED,
-				IS_ORDERED);
+				theIntentDocumentPackage.getIntentGenericElement_CompilationStatus(), "target", null, 1, 1,
+				CompilationStatus.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+				IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getCompilationStatus_Message(), ecorePackage.getEString(), "message", null, 1, 1,
 				CompilationStatus.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
 				IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -1089,6 +1106,9 @@
 				this.getModelingUnitToStatusList(), null, "modelingUnitToStatusList", null, 0, -1,
 				CompilationStatusManager.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
 				IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getCompilationStatusManager_ValidationTime(), ecorePackage.getEBigInteger(),
+				"validationTime", null, 0, 1, CompilationStatusManager.class, !IS_TRANSIENT, !IS_VOLATILE,
+				IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(compilationInformationHolderEClass, CompilationInformationHolder.class,
 				"CompilationInformationHolder", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/util/CompilerAdapterFactory.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/util/CompilerAdapterFactory.java
index 371e94e..0d7db4f 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/util/CompilerAdapterFactory.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/util/CompilerAdapterFactory.java
@@ -18,6 +18,7 @@
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClassifier;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.mylyn.docs.intent.core.compiler.*;
 import org.eclipse.mylyn.docs.intent.core.compiler.CompilationInformationHolder;
 import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatus;
 import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatusManager;
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/util/CompilerSwitch.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/util/CompilerSwitch.java
index a0b5298..40cf3bb 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/util/CompilerSwitch.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/compiler/util/CompilerSwitch.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.util.Switch;
+import org.eclipse.mylyn.docs.intent.core.compiler.*;
 import org.eclipse.mylyn.docs.intent.core.compiler.CompilationInformationHolder;
 import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatus;
 import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatusManager;
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/descriptionunit/DescriptionUnitPackage.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/descriptionunit/DescriptionUnitPackage.java
index edeb8e2..8cc2edc 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/descriptionunit/DescriptionUnitPackage.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/descriptionunit/DescriptionUnitPackage.java
@@ -78,6 +78,15 @@
 	int DESCRIPTION_UNIT__COMPILATION_STATUS = GenericUnitPackage.GENERIC_UNIT__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DESCRIPTION_UNIT__INDEX_ENTRY = GenericUnitPackage.GENERIC_UNIT__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Instructions</b></em>' containment reference list.
 	 * <!-- begin-user-doc
 	 * --> <!-- end-user-doc -->
@@ -123,6 +132,15 @@
 	int DESCRIPTION_UNIT_INSTRUCTION__COMPILATION_STATUS = GenericUnitPackage.UNIT_INSTRUCTION__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DESCRIPTION_UNIT_INSTRUCTION__INDEX_ENTRY = GenericUnitPackage.UNIT_INSTRUCTION__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Unit</b></em>' container reference.
 	 * <!-- begin-user-doc --> <!--
 	 * end-user-doc -->
@@ -168,6 +186,15 @@
 	int DESCRIPTION_BLOC__COMPILATION_STATUS = DESCRIPTION_UNIT_INSTRUCTION__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DESCRIPTION_BLOC__INDEX_ENTRY = DESCRIPTION_UNIT_INSTRUCTION__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Unit</b></em>' container reference.
 	 * <!-- begin-user-doc --> <!--
 	 * end-user-doc -->
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/descriptionunit/impl/DescriptionUnitFactoryImpl.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/descriptionunit/impl/DescriptionUnitFactoryImpl.java
index 61bc794..b5de738 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/descriptionunit/impl/DescriptionUnitFactoryImpl.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/descriptionunit/impl/DescriptionUnitFactoryImpl.java
@@ -15,6 +15,7 @@
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.impl.EFactoryImpl;
 import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.mylyn.docs.intent.core.descriptionunit.*;
 import org.eclipse.mylyn.docs.intent.core.descriptionunit.DescriptionBloc;
 import org.eclipse.mylyn.docs.intent.core.descriptionunit.DescriptionUnit;
 import org.eclipse.mylyn.docs.intent.core.descriptionunit.DescriptionUnitFactory;
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/descriptionunit/impl/DescriptionUnitPackageImpl.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/descriptionunit/impl/DescriptionUnitPackageImpl.java
index 9818f99..919c732 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/descriptionunit/impl/DescriptionUnitPackageImpl.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/descriptionunit/impl/DescriptionUnitPackageImpl.java
@@ -25,6 +25,8 @@
 import org.eclipse.mylyn.docs.intent.core.document.impl.IntentDocumentPackageImpl;
 import org.eclipse.mylyn.docs.intent.core.genericunit.GenericUnitPackage;
 import org.eclipse.mylyn.docs.intent.core.genericunit.impl.GenericUnitPackageImpl;
+import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexerPackage;
+import org.eclipse.mylyn.docs.intent.core.indexer.impl.IntentIndexerPackageImpl;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnitPackage;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.impl.ModelingUnitPackageImpl;
 import org.eclipse.mylyn.docs.intent.markup.markup.MarkupPackage;
@@ -111,32 +113,37 @@
 		MarkupPackage.eINSTANCE.eClass();
 
 		// Obtain or create and register interdependencies
-		ModelingUnitPackageImpl theModelingUnitPackage = (ModelingUnitPackageImpl)(EPackage.Registry.INSTANCE
-				.getEPackage(ModelingUnitPackage.eNS_URI) instanceof ModelingUnitPackageImpl ? EPackage.Registry.INSTANCE
-				.getEPackage(ModelingUnitPackage.eNS_URI) : ModelingUnitPackage.eINSTANCE);
-		GenericUnitPackageImpl theGenericUnitPackage = (GenericUnitPackageImpl)(EPackage.Registry.INSTANCE
-				.getEPackage(GenericUnitPackage.eNS_URI) instanceof GenericUnitPackageImpl ? EPackage.Registry.INSTANCE
-				.getEPackage(GenericUnitPackage.eNS_URI) : GenericUnitPackage.eINSTANCE);
+		IntentIndexerPackageImpl theIntentIndexerPackage = (IntentIndexerPackageImpl)(EPackage.Registry.INSTANCE
+				.getEPackage(IntentIndexerPackage.eNS_URI) instanceof IntentIndexerPackageImpl ? EPackage.Registry.INSTANCE
+				.getEPackage(IntentIndexerPackage.eNS_URI) : IntentIndexerPackage.eINSTANCE);
 		IntentDocumentPackageImpl theIntentDocumentPackage = (IntentDocumentPackageImpl)(EPackage.Registry.INSTANCE
 				.getEPackage(IntentDocumentPackage.eNS_URI) instanceof IntentDocumentPackageImpl ? EPackage.Registry.INSTANCE
 				.getEPackage(IntentDocumentPackage.eNS_URI) : IntentDocumentPackage.eINSTANCE);
 		CompilerPackageImpl theCompilerPackage = (CompilerPackageImpl)(EPackage.Registry.INSTANCE
 				.getEPackage(CompilerPackage.eNS_URI) instanceof CompilerPackageImpl ? EPackage.Registry.INSTANCE
 				.getEPackage(CompilerPackage.eNS_URI) : CompilerPackage.eINSTANCE);
+		GenericUnitPackageImpl theGenericUnitPackage = (GenericUnitPackageImpl)(EPackage.Registry.INSTANCE
+				.getEPackage(GenericUnitPackage.eNS_URI) instanceof GenericUnitPackageImpl ? EPackage.Registry.INSTANCE
+				.getEPackage(GenericUnitPackage.eNS_URI) : GenericUnitPackage.eINSTANCE);
+		ModelingUnitPackageImpl theModelingUnitPackage = (ModelingUnitPackageImpl)(EPackage.Registry.INSTANCE
+				.getEPackage(ModelingUnitPackage.eNS_URI) instanceof ModelingUnitPackageImpl ? EPackage.Registry.INSTANCE
+				.getEPackage(ModelingUnitPackage.eNS_URI) : ModelingUnitPackage.eINSTANCE);
 
 		// Create package meta-data objects
 		theDescriptionUnitPackage.createPackageContents();
-		theModelingUnitPackage.createPackageContents();
-		theGenericUnitPackage.createPackageContents();
+		theIntentIndexerPackage.createPackageContents();
 		theIntentDocumentPackage.createPackageContents();
 		theCompilerPackage.createPackageContents();
+		theGenericUnitPackage.createPackageContents();
+		theModelingUnitPackage.createPackageContents();
 
 		// Initialize created meta-data
 		theDescriptionUnitPackage.initializePackageContents();
-		theModelingUnitPackage.initializePackageContents();
-		theGenericUnitPackage.initializePackageContents();
+		theIntentIndexerPackage.initializePackageContents();
 		theIntentDocumentPackage.initializePackageContents();
 		theCompilerPackage.initializePackageContents();
+		theGenericUnitPackage.initializePackageContents();
+		theModelingUnitPackage.initializePackageContents();
 
 		// Mark meta-data to indicate it can't be changed
 		theDescriptionUnitPackage.freeze();
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/descriptionunit/util/DescriptionUnitAdapterFactory.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/descriptionunit/util/DescriptionUnitAdapterFactory.java
index f8813ce..12e5a7c 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/descriptionunit/util/DescriptionUnitAdapterFactory.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/descriptionunit/util/DescriptionUnitAdapterFactory.java
@@ -14,6 +14,7 @@
 import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.mylyn.docs.intent.core.descriptionunit.*;
 import org.eclipse.mylyn.docs.intent.core.descriptionunit.DescriptionBloc;
 import org.eclipse.mylyn.docs.intent.core.descriptionunit.DescriptionUnit;
 import org.eclipse.mylyn.docs.intent.core.descriptionunit.DescriptionUnitInstruction;
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/descriptionunit/util/DescriptionUnitSwitch.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/descriptionunit/util/DescriptionUnitSwitch.java
index d56fef4..ea069ba 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/descriptionunit/util/DescriptionUnitSwitch.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/descriptionunit/util/DescriptionUnitSwitch.java
@@ -13,6 +13,7 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.util.Switch;
+import org.eclipse.mylyn.docs.intent.core.descriptionunit.*;
 import org.eclipse.mylyn.docs.intent.core.descriptionunit.DescriptionBloc;
 import org.eclipse.mylyn.docs.intent.core.descriptionunit.DescriptionUnit;
 import org.eclipse.mylyn.docs.intent.core.descriptionunit.DescriptionUnitInstruction;
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/IntentDocumentPackage.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/IntentDocumentPackage.java
index 8b40059..6a2c324 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/IntentDocumentPackage.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/IntentDocumentPackage.java
@@ -87,13 +87,22 @@
 	int INTENT_GENERIC_ELEMENT__COMPILATION_STATUS = 0;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTENT_GENERIC_ELEMENT__INDEX_ENTRY = 1;
+
+	/**
 	 * The number of structural features of the '<em>Intent Generic Element</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int INTENT_GENERIC_ELEMENT_FEATURE_COUNT = 1;
+	int INTENT_GENERIC_ELEMENT_FEATURE_COUNT = 2;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.mylyn.docs.intent.core.document.impl.AnnotationMappingImpl <em>Annotation Mapping</em>}' class.
@@ -161,13 +170,22 @@
 	int INTENT_STRUCTURED_ELEMENT__COMPILATION_STATUS = MarkupPackage.SECTION_FEATURE_COUNT + 0;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTENT_STRUCTURED_ELEMENT__INDEX_ENTRY = MarkupPackage.SECTION_FEATURE_COUNT + 1;
+
+	/**
 	 * The feature id for the '<em><b>Formatted Title</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int INTENT_STRUCTURED_ELEMENT__FORMATTED_TITLE = MarkupPackage.SECTION_FEATURE_COUNT + 1;
+	int INTENT_STRUCTURED_ELEMENT__FORMATTED_TITLE = MarkupPackage.SECTION_FEATURE_COUNT + 2;
 
 	/**
 	 * The number of structural features of the '<em>Intent Structured Element</em>' class.
@@ -176,7 +194,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int INTENT_STRUCTURED_ELEMENT_FEATURE_COUNT = MarkupPackage.SECTION_FEATURE_COUNT + 2;
+	int INTENT_STRUCTURED_ELEMENT_FEATURE_COUNT = MarkupPackage.SECTION_FEATURE_COUNT + 3;
 
 	/**
 	 * The feature id for the '<em><b>Key</b></em>' attribute.
@@ -363,6 +381,15 @@
 	int INTENT_DOCUMENT__COMPILATION_STATUS = INTENT_STRUCTURED_ELEMENT__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTENT_DOCUMENT__INDEX_ENTRY = INTENT_STRUCTURED_ELEMENT__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Formatted Title</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -454,6 +481,15 @@
 	int INTENT_SUB_SECTION_CONTAINER__COMPILATION_STATUS = INTENT_STRUCTURED_ELEMENT__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTENT_SUB_SECTION_CONTAINER__INDEX_ENTRY = INTENT_STRUCTURED_ELEMENT__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Formatted Title</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -563,6 +599,15 @@
 	int INTENT_CHAPTER__COMPILATION_STATUS = INTENT_SUB_SECTION_CONTAINER__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTENT_CHAPTER__INDEX_ENTRY = INTENT_SUB_SECTION_CONTAINER__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Formatted Title</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -672,6 +717,15 @@
 	int INTENT_SECTION__COMPILATION_STATUS = INTENT_SUB_SECTION_CONTAINER__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTENT_SECTION__INDEX_ENTRY = INTENT_SUB_SECTION_CONTAINER__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Formatted Title</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -867,6 +921,17 @@
 	EReference getIntentGenericElement_CompilationStatus();
 
 	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.mylyn.docs.intent.core.document.IntentGenericElement#getIndexEntry <em>Index Entry</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Index Entry</em>'.
+	 * @see org.eclipse.mylyn.docs.intent.core.document.IntentGenericElement#getIndexEntry()
+	 * @see #getIntentGenericElement()
+	 * @generated
+	 */
+	EReference getIntentGenericElement_IndexEntry();
+
+	/**
 	 * Returns the meta object for class '{@link java.util.Map.Entry <em>Annotation Mapping</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1262,6 +1327,14 @@
 				.getIntentGenericElement_CompilationStatus();
 
 		/**
+		 * The meta object literal for the '<em><b>Index Entry</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference INTENT_GENERIC_ELEMENT__INDEX_ENTRY = eINSTANCE.getIntentGenericElement_IndexEntry();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.mylyn.docs.intent.core.document.impl.AnnotationMappingImpl <em>Annotation Mapping</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/IntentGenericElement.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/IntentGenericElement.java
index 09930be..7488dff 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/IntentGenericElement.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/IntentGenericElement.java
@@ -13,6 +13,7 @@
 import org.eclipse.emf.cdo.CDOObject;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatus;
+import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexEntry;
 
 /**
  * <!-- begin-user-doc -->
@@ -23,6 +24,7 @@
  * The following features are supported:
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.intent.core.document.IntentGenericElement#getCompilationStatus <em>Compilation Status</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.intent.core.document.IntentGenericElement#getIndexEntry <em>Index Entry</em>}</li>
  * </ul>
  * </p>
  *
@@ -35,6 +37,7 @@
 	/**
 	 * Returns the value of the '<em><b>Compilation Status</b></em>' containment reference list.
 	 * The list contents are of type {@link org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatus}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatus#getTarget <em>Target</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <p>
 	 * If the meaning of the '<em>Compilation Status</em>' containment reference list isn't clear,
@@ -43,9 +46,38 @@
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Compilation Status</em>' containment reference list.
 	 * @see org.eclipse.mylyn.docs.intent.core.document.IntentDocumentPackage#getIntentGenericElement_CompilationStatus()
-	 * @model containment="true" resolveProxies="true"
+	 * @see org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatus#getTarget
+	 * @model opposite="target" containment="true" resolveProxies="true"
 	 * @generated
 	 */
 	EList<CompilationStatus> getCompilationStatus();
 
+	/**
+	 * Returns the value of the '<em><b>Index Entry</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexEntry#getReferencedElement <em>Referenced Element</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Index Entry</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Index Entry</em>' reference.
+	 * @see #setIndexEntry(IntentIndexEntry)
+	 * @see org.eclipse.mylyn.docs.intent.core.document.IntentDocumentPackage#getIntentGenericElement_IndexEntry()
+	 * @see org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexEntry#getReferencedElement
+	 * @model opposite="referencedElement"
+	 * @generated
+	 */
+	IntentIndexEntry getIndexEntry();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.intent.core.document.IntentGenericElement#getIndexEntry <em>Index Entry</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Index Entry</em>' reference.
+	 * @see #getIndexEntry()
+	 * @generated
+	 */
+	void setIndexEntry(IntentIndexEntry value);
+
 } // IntentGenericElement
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/impl/IntentDocumentFactoryImpl.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/impl/IntentDocumentFactoryImpl.java
index bb4db33..346059d 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/impl/IntentDocumentFactoryImpl.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/impl/IntentDocumentFactoryImpl.java
@@ -18,6 +18,7 @@
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.impl.EFactoryImpl;
 import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.mylyn.docs.intent.core.document.*;
 import org.eclipse.mylyn.docs.intent.core.document.IntentChapter;
 import org.eclipse.mylyn.docs.intent.core.document.IntentDocument;
 import org.eclipse.mylyn.docs.intent.core.document.IntentDocumentFactory;
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/impl/IntentDocumentPackageImpl.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/impl/IntentDocumentPackageImpl.java
index 7c23b94..246bd50 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/impl/IntentDocumentPackageImpl.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/impl/IntentDocumentPackageImpl.java
@@ -38,6 +38,8 @@
 import org.eclipse.mylyn.docs.intent.core.document.IntentSubSectionContainer;
 import org.eclipse.mylyn.docs.intent.core.genericunit.GenericUnitPackage;
 import org.eclipse.mylyn.docs.intent.core.genericunit.impl.GenericUnitPackageImpl;
+import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexerPackage;
+import org.eclipse.mylyn.docs.intent.core.indexer.impl.IntentIndexerPackageImpl;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnitPackage;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.impl.ModelingUnitPackageImpl;
 import org.eclipse.mylyn.docs.intent.markup.markup.MarkupPackage;
@@ -194,32 +196,37 @@
 		MarkupPackage.eINSTANCE.eClass();
 
 		// Obtain or create and register interdependencies
-		ModelingUnitPackageImpl theModelingUnitPackage = (ModelingUnitPackageImpl)(EPackage.Registry.INSTANCE
-				.getEPackage(ModelingUnitPackage.eNS_URI) instanceof ModelingUnitPackageImpl ? EPackage.Registry.INSTANCE
-				.getEPackage(ModelingUnitPackage.eNS_URI) : ModelingUnitPackage.eINSTANCE);
-		GenericUnitPackageImpl theGenericUnitPackage = (GenericUnitPackageImpl)(EPackage.Registry.INSTANCE
-				.getEPackage(GenericUnitPackage.eNS_URI) instanceof GenericUnitPackageImpl ? EPackage.Registry.INSTANCE
-				.getEPackage(GenericUnitPackage.eNS_URI) : GenericUnitPackage.eINSTANCE);
+		IntentIndexerPackageImpl theIntentIndexerPackage = (IntentIndexerPackageImpl)(EPackage.Registry.INSTANCE
+				.getEPackage(IntentIndexerPackage.eNS_URI) instanceof IntentIndexerPackageImpl ? EPackage.Registry.INSTANCE
+				.getEPackage(IntentIndexerPackage.eNS_URI) : IntentIndexerPackage.eINSTANCE);
 		CompilerPackageImpl theCompilerPackage = (CompilerPackageImpl)(EPackage.Registry.INSTANCE
 				.getEPackage(CompilerPackage.eNS_URI) instanceof CompilerPackageImpl ? EPackage.Registry.INSTANCE
 				.getEPackage(CompilerPackage.eNS_URI) : CompilerPackage.eINSTANCE);
+		GenericUnitPackageImpl theGenericUnitPackage = (GenericUnitPackageImpl)(EPackage.Registry.INSTANCE
+				.getEPackage(GenericUnitPackage.eNS_URI) instanceof GenericUnitPackageImpl ? EPackage.Registry.INSTANCE
+				.getEPackage(GenericUnitPackage.eNS_URI) : GenericUnitPackage.eINSTANCE);
 		DescriptionUnitPackageImpl theDescriptionUnitPackage = (DescriptionUnitPackageImpl)(EPackage.Registry.INSTANCE
 				.getEPackage(DescriptionUnitPackage.eNS_URI) instanceof DescriptionUnitPackageImpl ? EPackage.Registry.INSTANCE
 				.getEPackage(DescriptionUnitPackage.eNS_URI) : DescriptionUnitPackage.eINSTANCE);
+		ModelingUnitPackageImpl theModelingUnitPackage = (ModelingUnitPackageImpl)(EPackage.Registry.INSTANCE
+				.getEPackage(ModelingUnitPackage.eNS_URI) instanceof ModelingUnitPackageImpl ? EPackage.Registry.INSTANCE
+				.getEPackage(ModelingUnitPackage.eNS_URI) : ModelingUnitPackage.eINSTANCE);
 
 		// Create package meta-data objects
 		theIntentDocumentPackage.createPackageContents();
-		theModelingUnitPackage.createPackageContents();
-		theGenericUnitPackage.createPackageContents();
+		theIntentIndexerPackage.createPackageContents();
 		theCompilerPackage.createPackageContents();
+		theGenericUnitPackage.createPackageContents();
 		theDescriptionUnitPackage.createPackageContents();
+		theModelingUnitPackage.createPackageContents();
 
 		// Initialize created meta-data
 		theIntentDocumentPackage.initializePackageContents();
-		theModelingUnitPackage.initializePackageContents();
-		theGenericUnitPackage.initializePackageContents();
+		theIntentIndexerPackage.initializePackageContents();
 		theCompilerPackage.initializePackageContents();
+		theGenericUnitPackage.initializePackageContents();
 		theDescriptionUnitPackage.initializePackageContents();
+		theModelingUnitPackage.initializePackageContents();
 
 		// Mark meta-data to indicate it can't be changed
 		theIntentDocumentPackage.freeze();
@@ -252,6 +259,15 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public EReference getIntentGenericElement_IndexEntry() {
+		return (EReference)intentGenericElementEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public EClass getAnnotationMapping() {
 		return annotationMappingEClass;
 	}
@@ -575,6 +591,7 @@
 		// Create classes and their features
 		intentGenericElementEClass = createEClass(INTENT_GENERIC_ELEMENT);
 		createEReference(intentGenericElementEClass, INTENT_GENERIC_ELEMENT__COMPILATION_STATUS);
+		createEReference(intentGenericElementEClass, INTENT_GENERIC_ELEMENT__INDEX_ENTRY);
 
 		intentStructuredElementEClass = createEClass(INTENT_STRUCTURED_ELEMENT);
 		createEAttribute(intentStructuredElementEClass, INTENT_STRUCTURED_ELEMENT__FORMATTED_TITLE);
@@ -652,6 +669,8 @@
 		// Obtain other dependent packages
 		CompilerPackage theCompilerPackage = (CompilerPackage)EPackage.Registry.INSTANCE
 				.getEPackage(CompilerPackage.eNS_URI);
+		IntentIndexerPackage theIntentIndexerPackage = (IntentIndexerPackage)EPackage.Registry.INSTANCE
+				.getEPackage(IntentIndexerPackage.eNS_URI);
 		MarkupPackage theMarkupPackage = (MarkupPackage)EPackage.Registry.INSTANCE
 				.getEPackage(MarkupPackage.eNS_URI);
 		GenericUnitPackage theGenericUnitPackage = (GenericUnitPackage)EPackage.Registry.INSTANCE
@@ -679,8 +698,13 @@
 		initEClass(intentGenericElementEClass, IntentGenericElement.class, "IntentGenericElement",
 				!IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getIntentGenericElement_CompilationStatus(),
-				theCompilerPackage.getCompilationStatus(), null, "compilationStatus", null, 0, -1,
-				IntentGenericElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+				theCompilerPackage.getCompilationStatus(), theCompilerPackage.getCompilationStatus_Target(),
+				"compilationStatus", null, 0, -1, IntentGenericElement.class, !IS_TRANSIENT, !IS_VOLATILE,
+				IS_CHANGEABLE, IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED,
+				IS_ORDERED);
+		initEReference(getIntentGenericElement_IndexEntry(), theIntentIndexerPackage.getIntentIndexEntry(),
+				theIntentIndexerPackage.getIntentIndexEntry_ReferencedElement(), "indexEntry", null, 0, 1,
+				IntentGenericElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
 				IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(intentStructuredElementEClass, IntentStructuredElement.class, "IntentStructuredElement",
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/impl/IntentGenericElementImpl.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/impl/IntentGenericElementImpl.java
index d5ede5c..9c1d437 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/impl/IntentGenericElementImpl.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/impl/IntentGenericElementImpl.java
@@ -16,6 +16,7 @@
 import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatus;
 import org.eclipse.mylyn.docs.intent.core.document.IntentDocumentPackage;
 import org.eclipse.mylyn.docs.intent.core.document.IntentGenericElement;
+import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexEntry;
 
 /**
  * <!-- begin-user-doc -->
@@ -25,6 +26,7 @@
  * The following features are implemented:
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.intent.core.document.impl.IntentGenericElementImpl#getCompilationStatus <em>Compilation Status</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.intent.core.document.impl.IntentGenericElementImpl#getIndexEntry <em>Index Entry</em>}</li>
  * </ul>
  * </p>
  *
@@ -71,4 +73,23 @@
 				IntentDocumentPackage.Literals.INTENT_GENERIC_ELEMENT__COMPILATION_STATUS, true);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IntentIndexEntry getIndexEntry() {
+		return (IntentIndexEntry)eGet(IntentDocumentPackage.Literals.INTENT_GENERIC_ELEMENT__INDEX_ENTRY,
+				true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIndexEntry(IntentIndexEntry newIndexEntry) {
+		eSet(IntentDocumentPackage.Literals.INTENT_GENERIC_ELEMENT__INDEX_ENTRY, newIndexEntry);
+	}
+
 } //IntentGenericElementImpl
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/impl/IntentStructuredElementImpl.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/impl/IntentStructuredElementImpl.java
index 3a04f2c..87f5157 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/impl/IntentStructuredElementImpl.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/impl/IntentStructuredElementImpl.java
@@ -16,6 +16,7 @@
 import org.eclipse.mylyn.docs.intent.core.document.IntentDocumentPackage;
 import org.eclipse.mylyn.docs.intent.core.document.IntentGenericElement;
 import org.eclipse.mylyn.docs.intent.core.document.IntentStructuredElement;
+import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexEntry;
 import org.eclipse.mylyn.docs.intent.markup.markup.impl.SectionImpl;
 
 /**
@@ -26,6 +27,7 @@
  * The following features are implemented:
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.intent.core.document.impl.IntentStructuredElementImpl#getCompilationStatus <em>Compilation Status</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.intent.core.document.impl.IntentStructuredElementImpl#getIndexEntry <em>Index Entry</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.intent.core.document.impl.IntentStructuredElementImpl#getFormattedTitle <em>Formatted Title</em>}</li>
  * </ul>
  * </p>
@@ -68,6 +70,25 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public IntentIndexEntry getIndexEntry() {
+		return (IntentIndexEntry)eGet(IntentDocumentPackage.Literals.INTENT_GENERIC_ELEMENT__INDEX_ENTRY,
+				true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIndexEntry(IntentIndexEntry newIndexEntry) {
+		eSet(IntentDocumentPackage.Literals.INTENT_GENERIC_ELEMENT__INDEX_ENTRY, newIndexEntry);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public String getFormattedTitle() {
 		return (String)eGet(IntentDocumentPackage.Literals.INTENT_STRUCTURED_ELEMENT__FORMATTED_TITLE, true);
 	}
@@ -92,6 +113,8 @@
 			switch (derivedFeatureID) {
 				case IntentDocumentPackage.INTENT_STRUCTURED_ELEMENT__COMPILATION_STATUS:
 					return IntentDocumentPackage.INTENT_GENERIC_ELEMENT__COMPILATION_STATUS;
+				case IntentDocumentPackage.INTENT_STRUCTURED_ELEMENT__INDEX_ENTRY:
+					return IntentDocumentPackage.INTENT_GENERIC_ELEMENT__INDEX_ENTRY;
 				default:
 					return -1;
 			}
@@ -110,6 +133,8 @@
 			switch (baseFeatureID) {
 				case IntentDocumentPackage.INTENT_GENERIC_ELEMENT__COMPILATION_STATUS:
 					return IntentDocumentPackage.INTENT_STRUCTURED_ELEMENT__COMPILATION_STATUS;
+				case IntentDocumentPackage.INTENT_GENERIC_ELEMENT__INDEX_ENTRY:
+					return IntentDocumentPackage.INTENT_STRUCTURED_ELEMENT__INDEX_ENTRY;
 				default:
 					return -1;
 			}
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/util/IntentDocumentAdapterFactory.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/util/IntentDocumentAdapterFactory.java
index 738e16e..fd9bd1a 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/util/IntentDocumentAdapterFactory.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/util/IntentDocumentAdapterFactory.java
@@ -16,6 +16,7 @@
 import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.mylyn.docs.intent.core.document.*;
 import org.eclipse.mylyn.docs.intent.core.document.IntentChapter;
 import org.eclipse.mylyn.docs.intent.core.document.IntentDocument;
 import org.eclipse.mylyn.docs.intent.core.document.IntentDocumentPackage;
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/util/IntentDocumentSwitch.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/util/IntentDocumentSwitch.java
index 06cc251..3aea875 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/util/IntentDocumentSwitch.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/document/util/IntentDocumentSwitch.java
@@ -15,6 +15,7 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.util.Switch;
+import org.eclipse.mylyn.docs.intent.core.document.*;
 import org.eclipse.mylyn.docs.intent.core.document.IntentChapter;
 import org.eclipse.mylyn.docs.intent.core.document.IntentDocument;
 import org.eclipse.mylyn.docs.intent.core.document.IntentDocumentPackage;
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/genericunit/GenericUnitPackage.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/genericunit/GenericUnitPackage.java
index 14bb1e4..60368cf 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/genericunit/GenericUnitPackage.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/genericunit/GenericUnitPackage.java
@@ -86,6 +86,15 @@
 	int GENERIC_UNIT__COMPILATION_STATUS = IntentDocumentPackage.INTENT_GENERIC_ELEMENT__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GENERIC_UNIT__INDEX_ENTRY = IntentDocumentPackage.INTENT_GENERIC_ELEMENT__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Instructions</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -132,6 +141,15 @@
 	int UNIT_INSTRUCTION__COMPILATION_STATUS = IntentDocumentPackage.INTENT_GENERIC_ELEMENT__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UNIT_INSTRUCTION__INDEX_ENTRY = IntentDocumentPackage.INTENT_GENERIC_ELEMENT__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Unit</b></em>' container reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -252,6 +270,15 @@
 	int INTENT_SECTION_REFERENCE_INSTRUCTION__COMPILATION_STATUS = UNIT_INSTRUCTION__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTENT_SECTION_REFERENCE_INSTRUCTION__INDEX_ENTRY = UNIT_INSTRUCTION__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Unit</b></em>' container reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -316,6 +343,15 @@
 	int LABEL_DECLARATION__COMPILATION_STATUS = UNIT_INSTRUCTION__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LABEL_DECLARATION__INDEX_ENTRY = UNIT_INSTRUCTION__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Unit</b></em>' container reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -389,6 +425,15 @@
 	int LABEL_REFERENCE_INSTRUCTION__COMPILATION_STATUS = UNIT_INSTRUCTION__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LABEL_REFERENCE_INSTRUCTION__INDEX_ENTRY = UNIT_INSTRUCTION__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Unit</b></em>' container reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -453,6 +498,15 @@
 	int ADRESSED_ANNOTATION__COMPILATION_STATUS = UNIT_INSTRUCTION__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ADRESSED_ANNOTATION__INDEX_ENTRY = UNIT_INSTRUCTION__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Unit</b></em>' container reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/genericunit/impl/GenericUnitFactoryImpl.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/genericunit/impl/GenericUnitFactoryImpl.java
index 83db3e8..6050a3d 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/genericunit/impl/GenericUnitFactoryImpl.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/genericunit/impl/GenericUnitFactoryImpl.java
@@ -16,6 +16,7 @@
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.impl.EFactoryImpl;
 import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.mylyn.docs.intent.core.genericunit.*;
 import org.eclipse.mylyn.docs.intent.core.genericunit.AdressedAnnotation;
 import org.eclipse.mylyn.docs.intent.core.genericunit.GenericUnitFactory;
 import org.eclipse.mylyn.docs.intent.core.genericunit.GenericUnitPackage;
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/genericunit/impl/GenericUnitPackageImpl.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/genericunit/impl/GenericUnitPackageImpl.java
index e295f8c..1d123f6 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/genericunit/impl/GenericUnitPackageImpl.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/genericunit/impl/GenericUnitPackageImpl.java
@@ -33,6 +33,8 @@
 import org.eclipse.mylyn.docs.intent.core.genericunit.TypeLabel;
 import org.eclipse.mylyn.docs.intent.core.genericunit.UnitInstruction;
 import org.eclipse.mylyn.docs.intent.core.genericunit.UnitInstructionReference;
+import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexerPackage;
+import org.eclipse.mylyn.docs.intent.core.indexer.impl.IntentIndexerPackageImpl;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnitPackage;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.impl.ModelingUnitPackageImpl;
 import org.eclipse.mylyn.docs.intent.markup.markup.MarkupPackage;
@@ -160,9 +162,9 @@
 		MarkupPackage.eINSTANCE.eClass();
 
 		// Obtain or create and register interdependencies
-		ModelingUnitPackageImpl theModelingUnitPackage = (ModelingUnitPackageImpl)(EPackage.Registry.INSTANCE
-				.getEPackage(ModelingUnitPackage.eNS_URI) instanceof ModelingUnitPackageImpl ? EPackage.Registry.INSTANCE
-				.getEPackage(ModelingUnitPackage.eNS_URI) : ModelingUnitPackage.eINSTANCE);
+		IntentIndexerPackageImpl theIntentIndexerPackage = (IntentIndexerPackageImpl)(EPackage.Registry.INSTANCE
+				.getEPackage(IntentIndexerPackage.eNS_URI) instanceof IntentIndexerPackageImpl ? EPackage.Registry.INSTANCE
+				.getEPackage(IntentIndexerPackage.eNS_URI) : IntentIndexerPackage.eINSTANCE);
 		IntentDocumentPackageImpl theIntentDocumentPackage = (IntentDocumentPackageImpl)(EPackage.Registry.INSTANCE
 				.getEPackage(IntentDocumentPackage.eNS_URI) instanceof IntentDocumentPackageImpl ? EPackage.Registry.INSTANCE
 				.getEPackage(IntentDocumentPackage.eNS_URI) : IntentDocumentPackage.eINSTANCE);
@@ -172,20 +174,25 @@
 		DescriptionUnitPackageImpl theDescriptionUnitPackage = (DescriptionUnitPackageImpl)(EPackage.Registry.INSTANCE
 				.getEPackage(DescriptionUnitPackage.eNS_URI) instanceof DescriptionUnitPackageImpl ? EPackage.Registry.INSTANCE
 				.getEPackage(DescriptionUnitPackage.eNS_URI) : DescriptionUnitPackage.eINSTANCE);
+		ModelingUnitPackageImpl theModelingUnitPackage = (ModelingUnitPackageImpl)(EPackage.Registry.INSTANCE
+				.getEPackage(ModelingUnitPackage.eNS_URI) instanceof ModelingUnitPackageImpl ? EPackage.Registry.INSTANCE
+				.getEPackage(ModelingUnitPackage.eNS_URI) : ModelingUnitPackage.eINSTANCE);
 
 		// Create package meta-data objects
 		theGenericUnitPackage.createPackageContents();
-		theModelingUnitPackage.createPackageContents();
+		theIntentIndexerPackage.createPackageContents();
 		theIntentDocumentPackage.createPackageContents();
 		theCompilerPackage.createPackageContents();
 		theDescriptionUnitPackage.createPackageContents();
+		theModelingUnitPackage.createPackageContents();
 
 		// Initialize created meta-data
 		theGenericUnitPackage.initializePackageContents();
-		theModelingUnitPackage.initializePackageContents();
+		theIntentIndexerPackage.initializePackageContents();
 		theIntentDocumentPackage.initializePackageContents();
 		theCompilerPackage.initializePackageContents();
 		theDescriptionUnitPackage.initializePackageContents();
+		theModelingUnitPackage.initializePackageContents();
 
 		// Mark meta-data to indicate it can't be changed
 		theGenericUnitPackage.freeze();
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/genericunit/util/GenericUnitAdapterFactory.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/genericunit/util/GenericUnitAdapterFactory.java
index ecae4df..7f3043c 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/genericunit/util/GenericUnitAdapterFactory.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/genericunit/util/GenericUnitAdapterFactory.java
@@ -16,6 +16,7 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.mylyn.docs.intent.core.document.IntentGenericElement;
 import org.eclipse.mylyn.docs.intent.core.document.IntentReference;
+import org.eclipse.mylyn.docs.intent.core.genericunit.*;
 import org.eclipse.mylyn.docs.intent.core.genericunit.AdressedAnnotation;
 import org.eclipse.mylyn.docs.intent.core.genericunit.GenericUnit;
 import org.eclipse.mylyn.docs.intent.core.genericunit.GenericUnitPackage;
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/genericunit/util/GenericUnitSwitch.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/genericunit/util/GenericUnitSwitch.java
index 289a722..fef51d6 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/genericunit/util/GenericUnitSwitch.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/genericunit/util/GenericUnitSwitch.java
@@ -15,6 +15,7 @@
 import org.eclipse.emf.ecore.util.Switch;
 import org.eclipse.mylyn.docs.intent.core.document.IntentGenericElement;
 import org.eclipse.mylyn.docs.intent.core.document.IntentReference;
+import org.eclipse.mylyn.docs.intent.core.genericunit.*;
 import org.eclipse.mylyn.docs.intent.core.genericunit.AdressedAnnotation;
 import org.eclipse.mylyn.docs.intent.core.genericunit.GenericUnit;
 import org.eclipse.mylyn.docs.intent.core.genericunit.GenericUnitPackage;
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/INDEX_ENTRY_TYPE.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/INDEX_ENTRY_TYPE.java
index 18a2b33..2650591 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/INDEX_ENTRY_TYPE.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/INDEX_ENTRY_TYPE.java
@@ -107,12 +107,9 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	private static final INDEX_ENTRY_TYPE[] VALUES_ARRAY =
-		new INDEX_ENTRY_TYPE[] {
-			INTENT_DOCUMENT,
-			INTENT_CHAPTER,
-			INTENT_SECTION,
-		};
+	private static final INDEX_ENTRY_TYPE[] VALUES_ARRAY = new INDEX_ENTRY_TYPE[] {INTENT_DOCUMENT,
+			INTENT_CHAPTER, INTENT_SECTION,
+	};
 
 	/**
 	 * A public read-only list of all the '<em><b>INDEX ENTRY TYPE</b></em>' enumerators.
@@ -120,7 +117,8 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public static final List<INDEX_ENTRY_TYPE> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+	public static final List<INDEX_ENTRY_TYPE> VALUES = Collections.unmodifiableList(Arrays
+			.asList(VALUES_ARRAY));
 
 	/**
 	 * Returns the '<em><b>INDEX ENTRY TYPE</b></em>' literal with the specified literal value.
@@ -162,9 +160,12 @@
 	 */
 	public static INDEX_ENTRY_TYPE get(int value) {
 		switch (value) {
-			case INTENT_DOCUMENT_VALUE: return INTENT_DOCUMENT;
-			case INTENT_CHAPTER_VALUE: return INTENT_CHAPTER;
-			case INTENT_SECTION_VALUE: return INTENT_SECTION;
+			case INTENT_DOCUMENT_VALUE:
+				return INTENT_DOCUMENT;
+			case INTENT_CHAPTER_VALUE:
+				return INTENT_CHAPTER;
+			case INTENT_SECTION_VALUE:
+				return INTENT_SECTION;
 		}
 		return null;
 	}
@@ -208,7 +209,7 @@
 	 * @generated
 	 */
 	public int getValue() {
-	  return value;
+		return value;
 	}
 
 	/**
@@ -217,7 +218,7 @@
 	 * @generated
 	 */
 	public String getName() {
-	  return name;
+		return name;
 	}
 
 	/**
@@ -226,7 +227,7 @@
 	 * @generated
 	 */
 	public String getLiteral() {
-	  return literal;
+		return literal;
 	}
 
 	/**
@@ -239,5 +240,5 @@
 	public String toString() {
 		return literal;
 	}
-	
+
 } //INDEX_ENTRY_TYPE
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/IntentIndexEntry.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/IntentIndexEntry.java
index 459f7b0..7238f3a 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/IntentIndexEntry.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/IntentIndexEntry.java
@@ -92,6 +92,7 @@
 
 	/**
 	 * Returns the value of the '<em><b>Referenced Element</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.mylyn.docs.intent.core.document.IntentGenericElement#getIndexEntry <em>Index Entry</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <p>
 	 * If the meaning of the '<em>Referenced Element</em>' reference list isn't clear,
@@ -101,7 +102,8 @@
 	 * @return the value of the '<em>Referenced Element</em>' reference.
 	 * @see #setReferencedElement(IntentGenericElement)
 	 * @see org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexerPackage#getIntentIndexEntry_ReferencedElement()
-	 * @model
+	 * @see org.eclipse.mylyn.docs.intent.core.document.IntentGenericElement#getIndexEntry
+	 * @model opposite="indexEntry"
 	 * @generated
 	 */
 	IntentGenericElement getReferencedElement();
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/IntentIndexerFactory.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/IntentIndexerFactory.java
index 811d1f7..03b56e5 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/IntentIndexerFactory.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/IntentIndexerFactory.java
@@ -27,7 +27,8 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	IntentIndexerFactory eINSTANCE = org.eclipse.mylyn.docs.intent.core.indexer.impl.IntentIndexerFactoryImpl.init();
+	IntentIndexerFactory eINSTANCE = org.eclipse.mylyn.docs.intent.core.indexer.impl.IntentIndexerFactoryImpl
+			.init();
 
 	/**
 	 * Returns a new object of class '<em>Intent Index</em>'.
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/IntentIndexerPackage.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/IntentIndexerPackage.java
index 3a60107..19e3ceb 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/IntentIndexerPackage.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/IntentIndexerPackage.java
@@ -62,7 +62,8 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	IntentIndexerPackage eINSTANCE = org.eclipse.mylyn.docs.intent.core.indexer.impl.IntentIndexerPackageImpl.init();
+	IntentIndexerPackage eINSTANCE = org.eclipse.mylyn.docs.intent.core.indexer.impl.IntentIndexerPackageImpl
+			.init();
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.mylyn.docs.intent.core.indexer.impl.IntentIndexImpl <em>Intent Index</em>}' class.
@@ -147,7 +148,6 @@
 	 */
 	int INTENT_INDEX_ENTRY_FEATURE_COUNT = 4;
 
-
 	/**
 	 * The meta object id for the '{@link org.eclipse.mylyn.docs.intent.core.indexer.INDEX_ENTRY_TYPE <em>INDEX ENTRY TYPE</em>}' enum.
 	 * <!-- begin-user-doc -->
@@ -158,7 +158,6 @@
 	 */
 	int INDEX_ENTRY_TYPE = 2;
 
-
 	/**
 	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.intent.core.indexer.IntentIndex <em>Intent Index</em>}'.
 	 * <!-- begin-user-doc -->
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/impl/IntentIndexEntryImpl.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/impl/IntentIndexEntryImpl.java
index a8459be..7a4f0eb 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/impl/IntentIndexEntryImpl.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/impl/IntentIndexEntryImpl.java
@@ -106,7 +106,8 @@
 	 * @generated
 	 */
 	public IntentGenericElement getReferencedElement() {
-		return (IntentGenericElement)eGet(IntentIndexerPackage.Literals.INTENT_INDEX_ENTRY__REFERENCED_ELEMENT, true);
+		return (IntentGenericElement)eGet(
+				IntentIndexerPackage.Literals.INTENT_INDEX_ENTRY__REFERENCED_ELEMENT, true);
 	}
 
 	/**
@@ -125,7 +126,8 @@
 	 */
 	@SuppressWarnings("unchecked")
 	public EList<IntentIndexEntry> getSubEntries() {
-		return (EList<IntentIndexEntry>)eGet(IntentIndexerPackage.Literals.INTENT_INDEX_ENTRY__SUB_ENTRIES, true);
+		return (EList<IntentIndexEntry>)eGet(IntentIndexerPackage.Literals.INTENT_INDEX_ENTRY__SUB_ENTRIES,
+				true);
 	}
 
 } //IntentIndexEntryImpl
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/impl/IntentIndexerFactoryImpl.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/impl/IntentIndexerFactoryImpl.java
index 6fd5ce7..9230047 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/impl/IntentIndexerFactoryImpl.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/impl/IntentIndexerFactoryImpl.java
@@ -16,6 +16,7 @@
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.impl.EFactoryImpl;
 import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.mylyn.docs.intent.core.indexer.*;
 import org.eclipse.mylyn.docs.intent.core.indexer.INDEX_ENTRY_TYPE;
 import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndex;
 import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexEntry;
@@ -37,12 +38,12 @@
 	 */
 	public static IntentIndexerFactory init() {
 		try {
-			IntentIndexerFactory theIntentIndexerFactory = (IntentIndexerFactory)EPackage.Registry.INSTANCE.getEFactory("http://www.eclipse.org/intent/indexer/0.7"); 
+			IntentIndexerFactory theIntentIndexerFactory = (IntentIndexerFactory)EPackage.Registry.INSTANCE
+					.getEFactory("http://www.eclipse.org/intent/indexer/0.7");
 			if (theIntentIndexerFactory != null) {
 				return theIntentIndexerFactory;
 			}
-		}
-		catch (Exception exception) {
+		} catch (Exception exception) {
 			EcorePlugin.INSTANCE.log(exception);
 		}
 		return new IntentIndexerFactoryImpl();
@@ -66,10 +67,13 @@
 	@Override
 	public EObject create(EClass eClass) {
 		switch (eClass.getClassifierID()) {
-			case IntentIndexerPackage.INTENT_INDEX: return (EObject)createIntentIndex();
-			case IntentIndexerPackage.INTENT_INDEX_ENTRY: return (EObject)createIntentIndexEntry();
+			case IntentIndexerPackage.INTENT_INDEX:
+				return (EObject)createIntentIndex();
+			case IntentIndexerPackage.INTENT_INDEX_ENTRY:
+				return (EObject)createIntentIndexEntry();
 			default:
-				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+				throw new IllegalArgumentException("The class '" + eClass.getName()
+						+ "' is not a valid classifier");
 		}
 	}
 
@@ -84,7 +88,8 @@
 			case IntentIndexerPackage.INDEX_ENTRY_TYPE:
 				return createINDEX_ENTRY_TYPEFromString(eDataType, initialValue);
 			default:
-				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName()
+						+ "' is not a valid classifier");
 		}
 	}
 
@@ -99,7 +104,8 @@
 			case IntentIndexerPackage.INDEX_ENTRY_TYPE:
 				return convertINDEX_ENTRY_TYPEToString(eDataType, instanceValue);
 			default:
-				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName()
+						+ "' is not a valid classifier");
 		}
 	}
 
@@ -130,7 +136,9 @@
 	 */
 	public INDEX_ENTRY_TYPE createINDEX_ENTRY_TYPEFromString(EDataType eDataType, String initialValue) {
 		INDEX_ENTRY_TYPE result = INDEX_ENTRY_TYPE.get(initialValue);
-		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+		if (result == null)
+			throw new IllegalArgumentException("The value '" + initialValue
+					+ "' is not a valid enumerator of '" + eDataType.getName() + "'");
 		return result;
 	}
 
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/impl/IntentIndexerPackageImpl.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/impl/IntentIndexerPackageImpl.java
index 33551ce..0b9d6b9 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/impl/IntentIndexerPackageImpl.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/impl/IntentIndexerPackageImpl.java
@@ -17,14 +17,20 @@
 import org.eclipse.emf.ecore.EReference;
 import org.eclipse.emf.ecore.impl.EPackageImpl;
 import org.eclipse.mylyn.docs.intent.core.compiler.CompilerPackage;
+import org.eclipse.mylyn.docs.intent.core.compiler.impl.CompilerPackageImpl;
 import org.eclipse.mylyn.docs.intent.core.descriptionunit.DescriptionUnitPackage;
+import org.eclipse.mylyn.docs.intent.core.descriptionunit.impl.DescriptionUnitPackageImpl;
 import org.eclipse.mylyn.docs.intent.core.document.IntentDocumentPackage;
+import org.eclipse.mylyn.docs.intent.core.document.impl.IntentDocumentPackageImpl;
 import org.eclipse.mylyn.docs.intent.core.genericunit.GenericUnitPackage;
+import org.eclipse.mylyn.docs.intent.core.genericunit.impl.GenericUnitPackageImpl;
 import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndex;
 import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexEntry;
 import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexerFactory;
 import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexerPackage;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnitPackage;
+import org.eclipse.mylyn.docs.intent.core.modelingunit.impl.ModelingUnitPackageImpl;
+import org.eclipse.mylyn.docs.intent.markup.markup.MarkupPackage;
 
 /**
  * <!-- begin-user-doc -->
@@ -93,30 +99,55 @@
 	 * @generated
 	 */
 	public static IntentIndexerPackage init() {
-		if (isInited) return (IntentIndexerPackage)EPackage.Registry.INSTANCE.getEPackage(IntentIndexerPackage.eNS_URI);
+		if (isInited)
+			return (IntentIndexerPackage)EPackage.Registry.INSTANCE.getEPackage(IntentIndexerPackage.eNS_URI);
 
 		// Obtain or create and register package
-		IntentIndexerPackageImpl theIntentIndexerPackage = (IntentIndexerPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof IntentIndexerPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new IntentIndexerPackageImpl());
+		IntentIndexerPackageImpl theIntentIndexerPackage = (IntentIndexerPackageImpl)(EPackage.Registry.INSTANCE
+				.get(eNS_URI) instanceof IntentIndexerPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI)
+				: new IntentIndexerPackageImpl());
 
 		isInited = true;
 
 		// Initialize simple dependencies
-		ModelingUnitPackage.eINSTANCE.eClass();
-		GenericUnitPackage.eINSTANCE.eClass();
-		IntentDocumentPackage.eINSTANCE.eClass();
-		CompilerPackage.eINSTANCE.eClass();
-		DescriptionUnitPackage.eINSTANCE.eClass();
+		MarkupPackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		IntentDocumentPackageImpl theIntentDocumentPackage = (IntentDocumentPackageImpl)(EPackage.Registry.INSTANCE
+				.getEPackage(IntentDocumentPackage.eNS_URI) instanceof IntentDocumentPackageImpl ? EPackage.Registry.INSTANCE
+				.getEPackage(IntentDocumentPackage.eNS_URI) : IntentDocumentPackage.eINSTANCE);
+		CompilerPackageImpl theCompilerPackage = (CompilerPackageImpl)(EPackage.Registry.INSTANCE
+				.getEPackage(CompilerPackage.eNS_URI) instanceof CompilerPackageImpl ? EPackage.Registry.INSTANCE
+				.getEPackage(CompilerPackage.eNS_URI) : CompilerPackage.eINSTANCE);
+		GenericUnitPackageImpl theGenericUnitPackage = (GenericUnitPackageImpl)(EPackage.Registry.INSTANCE
+				.getEPackage(GenericUnitPackage.eNS_URI) instanceof GenericUnitPackageImpl ? EPackage.Registry.INSTANCE
+				.getEPackage(GenericUnitPackage.eNS_URI) : GenericUnitPackage.eINSTANCE);
+		DescriptionUnitPackageImpl theDescriptionUnitPackage = (DescriptionUnitPackageImpl)(EPackage.Registry.INSTANCE
+				.getEPackage(DescriptionUnitPackage.eNS_URI) instanceof DescriptionUnitPackageImpl ? EPackage.Registry.INSTANCE
+				.getEPackage(DescriptionUnitPackage.eNS_URI) : DescriptionUnitPackage.eINSTANCE);
+		ModelingUnitPackageImpl theModelingUnitPackage = (ModelingUnitPackageImpl)(EPackage.Registry.INSTANCE
+				.getEPackage(ModelingUnitPackage.eNS_URI) instanceof ModelingUnitPackageImpl ? EPackage.Registry.INSTANCE
+				.getEPackage(ModelingUnitPackage.eNS_URI) : ModelingUnitPackage.eINSTANCE);
 
 		// Create package meta-data objects
 		theIntentIndexerPackage.createPackageContents();
+		theIntentDocumentPackage.createPackageContents();
+		theCompilerPackage.createPackageContents();
+		theGenericUnitPackage.createPackageContents();
+		theDescriptionUnitPackage.createPackageContents();
+		theModelingUnitPackage.createPackageContents();
 
 		// Initialize created meta-data
 		theIntentIndexerPackage.initializePackageContents();
+		theIntentDocumentPackage.initializePackageContents();
+		theCompilerPackage.initializePackageContents();
+		theGenericUnitPackage.initializePackageContents();
+		theDescriptionUnitPackage.initializePackageContents();
+		theModelingUnitPackage.initializePackageContents();
 
 		// Mark meta-data to indicate it can't be changed
 		theIntentIndexerPackage.freeze();
 
-  
 		// Update the registry and return the package
 		EPackage.Registry.INSTANCE.put(IntentIndexerPackage.eNS_URI, theIntentIndexerPackage);
 		return theIntentIndexerPackage;
@@ -218,7 +249,8 @@
 	 * @generated
 	 */
 	public void createPackageContents() {
-		if (isCreated) return;
+		if (isCreated)
+			return;
 		isCreated = true;
 
 		// Create classes and their features
@@ -250,7 +282,8 @@
 	 * @generated
 	 */
 	public void initializePackageContents() {
-		if (isInitialized) return;
+		if (isInitialized)
+			return;
 		isInitialized = true;
 
 		// Initialize package
@@ -259,7 +292,8 @@
 		setNsURI(eNS_URI);
 
 		// Obtain other dependent packages
-		IntentDocumentPackage theIntentDocumentPackage = (IntentDocumentPackage)EPackage.Registry.INSTANCE.getEPackage(IntentDocumentPackage.eNS_URI);
+		IntentDocumentPackage theIntentDocumentPackage = (IntentDocumentPackage)EPackage.Registry.INSTANCE
+				.getEPackage(IntentDocumentPackage.eNS_URI);
 
 		// Create type parameters
 
@@ -268,20 +302,38 @@
 		// Add supertypes to classes
 
 		// Initialize classes and features; add operations and parameters
-		initEClass(intentIndexEClass, IntentIndex.class, "IntentIndex", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEReference(getIntentIndex_Entries(), this.getIntentIndexEntry(), null, "entries", null, 0, -1, IntentIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEClass(intentIndexEClass, IntentIndex.class, "IntentIndex", !IS_ABSTRACT, !IS_INTERFACE,
+				IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getIntentIndex_Entries(), this.getIntentIndexEntry(), null, "entries", null, 0, -1,
+				IntentIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+				IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
-		initEClass(intentIndexEntryEClass, IntentIndexEntry.class, "IntentIndexEntry", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEAttribute(getIntentIndexEntry_Name(), ecorePackage.getEString(), "name", null, 0, 1, IntentIndexEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEAttribute(getIntentIndexEntry_Type(), this.getINDEX_ENTRY_TYPE(), "type", null, 1, 1, IntentIndexEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEReference(getIntentIndexEntry_ReferencedElement(), theIntentDocumentPackage.getIntentGenericElement(), null, "referencedElement", null, 0, 1, IntentIndexEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEReference(getIntentIndexEntry_SubEntries(), this.getIntentIndexEntry(), null, "subEntries", null, 0, -1, IntentIndexEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEClass(intentIndexEntryEClass, IntentIndexEntry.class, "IntentIndexEntry", !IS_ABSTRACT,
+				!IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getIntentIndexEntry_Name(), ecorePackage.getEString(), "name", null, 0, 1,
+				IntentIndexEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+				IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIntentIndexEntry_Type(), this.getINDEX_ENTRY_TYPE(), "type", null, 1, 1,
+				IntentIndexEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+				IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getIntentIndexEntry_ReferencedElement(),
+				theIntentDocumentPackage.getIntentGenericElement(),
+				theIntentDocumentPackage.getIntentGenericElement_IndexEntry(), "referencedElement", null, 0,
+				1, IntentIndexEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+				IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getIntentIndexEntry_SubEntries(), this.getIntentIndexEntry(), null, "subEntries",
+				null, 0, -1, IntentIndexEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+				IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		// Initialize enums and add enum literals
-		initEEnum(indeX_ENTRY_TYPEEEnum, org.eclipse.mylyn.docs.intent.core.indexer.INDEX_ENTRY_TYPE.class, "INDEX_ENTRY_TYPE");
-		addEEnumLiteral(indeX_ENTRY_TYPEEEnum, org.eclipse.mylyn.docs.intent.core.indexer.INDEX_ENTRY_TYPE.INTENT_DOCUMENT);
-		addEEnumLiteral(indeX_ENTRY_TYPEEEnum, org.eclipse.mylyn.docs.intent.core.indexer.INDEX_ENTRY_TYPE.INTENT_CHAPTER);
-		addEEnumLiteral(indeX_ENTRY_TYPEEEnum, org.eclipse.mylyn.docs.intent.core.indexer.INDEX_ENTRY_TYPE.INTENT_SECTION);
+		initEEnum(indeX_ENTRY_TYPEEEnum, org.eclipse.mylyn.docs.intent.core.indexer.INDEX_ENTRY_TYPE.class,
+				"INDEX_ENTRY_TYPE");
+		addEEnumLiteral(indeX_ENTRY_TYPEEEnum,
+				org.eclipse.mylyn.docs.intent.core.indexer.INDEX_ENTRY_TYPE.INTENT_DOCUMENT);
+		addEEnumLiteral(indeX_ENTRY_TYPEEEnum,
+				org.eclipse.mylyn.docs.intent.core.indexer.INDEX_ENTRY_TYPE.INTENT_CHAPTER);
+		addEEnumLiteral(indeX_ENTRY_TYPEEEnum,
+				org.eclipse.mylyn.docs.intent.core.indexer.INDEX_ENTRY_TYPE.INTENT_SECTION);
 
 		// Create resource
 		createResource(eNS_URI);
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/util/IntentIndexerAdapterFactory.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/util/IntentIndexerAdapterFactory.java
index 5966c3c..1829b3a 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/util/IntentIndexerAdapterFactory.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/util/IntentIndexerAdapterFactory.java
@@ -14,6 +14,7 @@
 import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.mylyn.docs.intent.core.indexer.*;
 import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndex;
 import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexEntry;
 import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexerPackage;
@@ -72,21 +73,22 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	protected IntentIndexerSwitch<Adapter> modelSwitch =
-		new IntentIndexerSwitch<Adapter>() {
-			@Override
-			public Adapter caseIntentIndex(IntentIndex object) {
-				return createIntentIndexAdapter();
-			}
-			@Override
-			public Adapter caseIntentIndexEntry(IntentIndexEntry object) {
-				return createIntentIndexEntryAdapter();
-			}
-			@Override
-			public Adapter defaultCase(EObject object) {
-				return createEObjectAdapter();
-			}
-		};
+	protected IntentIndexerSwitch<Adapter> modelSwitch = new IntentIndexerSwitch<Adapter>() {
+		@Override
+		public Adapter caseIntentIndex(IntentIndex object) {
+			return createIntentIndexAdapter();
+		}
+
+		@Override
+		public Adapter caseIntentIndexEntry(IntentIndexEntry object) {
+			return createIntentIndexEntryAdapter();
+		}
+
+		@Override
+		public Adapter defaultCase(EObject object) {
+			return createEObjectAdapter();
+		}
+	};
 
 	/**
 	 * Creates an adapter for the <code>target</code>.
@@ -101,7 +103,6 @@
 		return modelSwitch.doSwitch((EObject)target);
 	}
 
-
 	/**
 	 * Creates a new adapter for an object of class '{@link org.eclipse.mylyn.docs.intent.core.indexer.IntentIndex <em>Intent Index</em>}'.
 	 * <!-- begin-user-doc -->
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/util/IntentIndexerSwitch.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/util/IntentIndexerSwitch.java
index 0d5fb6f..68070b8 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/util/IntentIndexerSwitch.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/indexer/util/IntentIndexerSwitch.java
@@ -14,6 +14,9 @@
 
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.util.Switch;
+import org.eclipse.mylyn.docs.intent.core.indexer.*;
 import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndex;
 import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexEntry;
 import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexerPackage;
@@ -31,7 +34,7 @@
  * @see org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexerPackage
  * @generated
  */
-public class IntentIndexerSwitch<T> {
+public class IntentIndexerSwitch<T> extends Switch<T> {
 	/**
 	 * The cached model package
 	 * <!-- begin-user-doc -->
@@ -53,14 +56,16 @@
 	}
 
 	/**
-	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * Checks whether this is a switch for the given package.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @parameter ePackage the package in question.
+	 * @return whether this is a switch for the given package.
 	 * @generated
 	 */
-	public T doSwitch(EObject theEObject) {
-		return doSwitch(theEObject.eClass(), theEObject);
+	@Override
+	protected boolean isSwitchFor(EPackage ePackage) {
+		return ePackage == modelPackage;
 	}
 
 	/**
@@ -70,41 +75,25 @@
 	 * @return the first non-null result returned by a <code>caseXXX</code> call.
 	 * @generated
 	 */
-	protected T doSwitch(EClass theEClass, EObject theEObject) {
-		if (theEClass.eContainer() == modelPackage) {
-			return doSwitch(theEClass.getClassifierID(), theEObject);
-		}
-		else {
-			List<EClass> eSuperTypes = theEClass.getESuperTypes();
-			return
-				eSuperTypes.isEmpty() ?
-					defaultCase(theEObject) :
-					doSwitch(eSuperTypes.get(0), theEObject);
-		}
-	}
-
-	/**
-	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the first non-null result returned by a <code>caseXXX</code> call.
-	 * @generated
-	 */
+	@Override
 	protected T doSwitch(int classifierID, EObject theEObject) {
 		switch (classifierID) {
 			case IntentIndexerPackage.INTENT_INDEX: {
 				IntentIndex intentIndex = (IntentIndex)theEObject;
 				T result = caseIntentIndex(intentIndex);
-				if (result == null) result = defaultCase(theEObject);
+				if (result == null)
+					result = defaultCase(theEObject);
 				return result;
 			}
 			case IntentIndexerPackage.INTENT_INDEX_ENTRY: {
 				IntentIndexEntry intentIndexEntry = (IntentIndexEntry)theEObject;
 				T result = caseIntentIndexEntry(intentIndexEntry);
-				if (result == null) result = defaultCase(theEObject);
+				if (result == null)
+					result = defaultCase(theEObject);
 				return result;
 			}
-			default: return defaultCase(theEObject);
+			default:
+				return defaultCase(theEObject);
 		}
 	}
 
@@ -149,6 +138,7 @@
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
 	 * @generated
 	 */
+	@Override
 	public T defaultCase(EObject object) {
 		return null;
 	}
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/modelingunit/ModelingUnitPackage.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/modelingunit/ModelingUnitPackage.java
index fc4e6e2..2b9e52a 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/modelingunit/ModelingUnitPackage.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/modelingunit/ModelingUnitPackage.java
@@ -124,6 +124,15 @@
 	int MODELING_UNIT__COMPILATION_STATUS = GenericUnitPackage.GENERIC_UNIT__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODELING_UNIT__INDEX_ENTRY = GenericUnitPackage.GENERIC_UNIT__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Instructions</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -197,6 +206,15 @@
 	int MODELING_UNIT_INSTRUCTION__COMPILATION_STATUS = GenericUnitPackage.UNIT_INSTRUCTION__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODELING_UNIT_INSTRUCTION__INDEX_ENTRY = GenericUnitPackage.UNIT_INSTRUCTION__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Unit</b></em>' container reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -363,6 +381,15 @@
 	int RESOURCE_DECLARATION__COMPILATION_STATUS = MODELING_UNIT_INSTRUCTION__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RESOURCE_DECLARATION__INDEX_ENTRY = MODELING_UNIT_INSTRUCTION__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Unit</b></em>' container reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -445,6 +472,15 @@
 	int INTENT_SECTION_REFERENCEIN_MODELING_UNIT__COMPILATION_STATUS = GenericUnitPackage.INTENT_SECTION_REFERENCE_INSTRUCTION__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTENT_SECTION_REFERENCEIN_MODELING_UNIT__INDEX_ENTRY = GenericUnitPackage.INTENT_SECTION_REFERENCE_INSTRUCTION__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Unit</b></em>' container reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -527,6 +563,15 @@
 	int LABELIN_MODELING_UNIT__COMPILATION_STATUS = GenericUnitPackage.LABEL_DECLARATION__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LABELIN_MODELING_UNIT__INDEX_ENTRY = GenericUnitPackage.LABEL_DECLARATION__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Unit</b></em>' container reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -618,6 +663,15 @@
 	int ANNOTATION_DECLARATION__COMPILATION_STATUS = MODELING_UNIT_INSTRUCTION__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ANNOTATION_DECLARATION__INDEX_ENTRY = MODELING_UNIT_INSTRUCTION__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Unit</b></em>' container reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -737,6 +791,15 @@
 	int INSTANCE_LEVEL_INSTRUCTION__COMPILATION_STATUS = MODELING_UNIT_INSTRUCTION__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INSTANCE_LEVEL_INSTRUCTION__INDEX_ENTRY = MODELING_UNIT_INSTRUCTION__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Unit</b></em>' container reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -792,6 +855,15 @@
 	int INSTANCIATION_INSTRUCTION__COMPILATION_STATUS = INSTANCE_LEVEL_INSTRUCTION__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INSTANCIATION_INSTRUCTION__INDEX_ENTRY = INSTANCE_LEVEL_INSTRUCTION__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Unit</b></em>' container reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -865,6 +937,15 @@
 	int STRUCTURAL_FEATURE_AFFECTATION__COMPILATION_STATUS = INSTANCE_LEVEL_INSTRUCTION__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRUCTURAL_FEATURE_AFFECTATION__INDEX_ENTRY = INSTANCE_LEVEL_INSTRUCTION__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Unit</b></em>' container reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -947,6 +1028,15 @@
 	int VALUE_FOR_STRUCTURAL_FEATURE__COMPILATION_STATUS = MODELING_UNIT_INSTRUCTION__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VALUE_FOR_STRUCTURAL_FEATURE__INDEX_ENTRY = MODELING_UNIT_INSTRUCTION__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Unit</b></em>' container reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -993,6 +1083,15 @@
 	int NATIVE_VALUE_FOR_STRUCTURAL_FEATURE__COMPILATION_STATUS = VALUE_FOR_STRUCTURAL_FEATURE__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NATIVE_VALUE_FOR_STRUCTURAL_FEATURE__INDEX_ENTRY = VALUE_FOR_STRUCTURAL_FEATURE__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Unit</b></em>' container reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1048,6 +1147,15 @@
 	int NEW_OBJECT_VALUE_FOR_STRUCTURAL_FEATURE__COMPILATION_STATUS = VALUE_FOR_STRUCTURAL_FEATURE__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NEW_OBJECT_VALUE_FOR_STRUCTURAL_FEATURE__INDEX_ENTRY = VALUE_FOR_STRUCTURAL_FEATURE__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Unit</b></em>' container reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1103,6 +1211,15 @@
 	int REFERENCE_VALUE_FOR_STRUCTURAL_FEATURE__COMPILATION_STATUS = VALUE_FOR_STRUCTURAL_FEATURE__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REFERENCE_VALUE_FOR_STRUCTURAL_FEATURE__INDEX_ENTRY = VALUE_FOR_STRUCTURAL_FEATURE__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Unit</b></em>' container reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1167,6 +1284,15 @@
 	int CONTRIBUTION_INSTRUCTION__COMPILATION_STATUS = MODELING_UNIT_INSTRUCTION__COMPILATION_STATUS;
 
 	/**
+	 * The feature id for the '<em><b>Index Entry</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CONTRIBUTION_INSTRUCTION__INDEX_ENTRY = MODELING_UNIT_INSTRUCTION__INDEX_ENTRY;
+
+	/**
 	 * The feature id for the '<em><b>Unit</b></em>' container reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/modelingunit/impl/ModelingUnitFactoryImpl.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/modelingunit/impl/ModelingUnitFactoryImpl.java
index 4bb9f47..df00978 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/modelingunit/impl/ModelingUnitFactoryImpl.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/modelingunit/impl/ModelingUnitFactoryImpl.java
@@ -18,6 +18,7 @@
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.impl.EFactoryImpl;
 import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.mylyn.docs.intent.core.modelingunit.*;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.AffectationOperator;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.AnnotationDeclaration;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.ContributionInstruction;
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/modelingunit/impl/ModelingUnitPackageImpl.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/modelingunit/impl/ModelingUnitPackageImpl.java
index 2a46281..07d2cc0 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/modelingunit/impl/ModelingUnitPackageImpl.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/modelingunit/impl/ModelingUnitPackageImpl.java
@@ -26,6 +26,8 @@
 import org.eclipse.mylyn.docs.intent.core.document.impl.IntentDocumentPackageImpl;
 import org.eclipse.mylyn.docs.intent.core.genericunit.GenericUnitPackage;
 import org.eclipse.mylyn.docs.intent.core.genericunit.impl.GenericUnitPackageImpl;
+import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexerPackage;
+import org.eclipse.mylyn.docs.intent.core.indexer.impl.IntentIndexerPackageImpl;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.AffectationOperator;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.AnnotationDeclaration;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.ContributionInstruction;
@@ -249,31 +251,36 @@
 		MarkupPackage.eINSTANCE.eClass();
 
 		// Obtain or create and register interdependencies
-		GenericUnitPackageImpl theGenericUnitPackage = (GenericUnitPackageImpl)(EPackage.Registry.INSTANCE
-				.getEPackage(GenericUnitPackage.eNS_URI) instanceof GenericUnitPackageImpl ? EPackage.Registry.INSTANCE
-				.getEPackage(GenericUnitPackage.eNS_URI) : GenericUnitPackage.eINSTANCE);
+		IntentIndexerPackageImpl theIntentIndexerPackage = (IntentIndexerPackageImpl)(EPackage.Registry.INSTANCE
+				.getEPackage(IntentIndexerPackage.eNS_URI) instanceof IntentIndexerPackageImpl ? EPackage.Registry.INSTANCE
+				.getEPackage(IntentIndexerPackage.eNS_URI) : IntentIndexerPackage.eINSTANCE);
 		IntentDocumentPackageImpl theIntentDocumentPackage = (IntentDocumentPackageImpl)(EPackage.Registry.INSTANCE
 				.getEPackage(IntentDocumentPackage.eNS_URI) instanceof IntentDocumentPackageImpl ? EPackage.Registry.INSTANCE
 				.getEPackage(IntentDocumentPackage.eNS_URI) : IntentDocumentPackage.eINSTANCE);
 		CompilerPackageImpl theCompilerPackage = (CompilerPackageImpl)(EPackage.Registry.INSTANCE
 				.getEPackage(CompilerPackage.eNS_URI) instanceof CompilerPackageImpl ? EPackage.Registry.INSTANCE
 				.getEPackage(CompilerPackage.eNS_URI) : CompilerPackage.eINSTANCE);
+		GenericUnitPackageImpl theGenericUnitPackage = (GenericUnitPackageImpl)(EPackage.Registry.INSTANCE
+				.getEPackage(GenericUnitPackage.eNS_URI) instanceof GenericUnitPackageImpl ? EPackage.Registry.INSTANCE
+				.getEPackage(GenericUnitPackage.eNS_URI) : GenericUnitPackage.eINSTANCE);
 		DescriptionUnitPackageImpl theDescriptionUnitPackage = (DescriptionUnitPackageImpl)(EPackage.Registry.INSTANCE
 				.getEPackage(DescriptionUnitPackage.eNS_URI) instanceof DescriptionUnitPackageImpl ? EPackage.Registry.INSTANCE
 				.getEPackage(DescriptionUnitPackage.eNS_URI) : DescriptionUnitPackage.eINSTANCE);
 
 		// Create package meta-data objects
 		theModelingUnitPackage.createPackageContents();
-		theGenericUnitPackage.createPackageContents();
+		theIntentIndexerPackage.createPackageContents();
 		theIntentDocumentPackage.createPackageContents();
 		theCompilerPackage.createPackageContents();
+		theGenericUnitPackage.createPackageContents();
 		theDescriptionUnitPackage.createPackageContents();
 
 		// Initialize created meta-data
 		theModelingUnitPackage.initializePackageContents();
-		theGenericUnitPackage.initializePackageContents();
+		theIntentIndexerPackage.initializePackageContents();
 		theIntentDocumentPackage.initializePackageContents();
 		theCompilerPackage.initializePackageContents();
+		theGenericUnitPackage.initializePackageContents();
 		theDescriptionUnitPackage.initializePackageContents();
 
 		// Mark meta-data to indicate it can't be changed
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/modelingunit/util/ModelingUnitAdapterFactory.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/modelingunit/util/ModelingUnitAdapterFactory.java
index 1a9cb7e..4a8d250 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/modelingunit/util/ModelingUnitAdapterFactory.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/modelingunit/util/ModelingUnitAdapterFactory.java
@@ -22,6 +22,7 @@
 import org.eclipse.mylyn.docs.intent.core.genericunit.IntentSectionReferenceInstruction;
 import org.eclipse.mylyn.docs.intent.core.genericunit.LabelDeclaration;
 import org.eclipse.mylyn.docs.intent.core.genericunit.UnitInstruction;
+import org.eclipse.mylyn.docs.intent.core.modelingunit.*;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.AnnotationDeclaration;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.ContributionInstruction;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.InstanceLevelInstruction;
diff --git a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/modelingunit/util/ModelingUnitSwitch.java b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/modelingunit/util/ModelingUnitSwitch.java
index b605440..dd954c0 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/modelingunit/util/ModelingUnitSwitch.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.core/src-gen/org/eclipse/mylyn/docs/intent/core/modelingunit/util/ModelingUnitSwitch.java
@@ -21,6 +21,7 @@
 import org.eclipse.mylyn.docs.intent.core.genericunit.IntentSectionReferenceInstruction;
 import org.eclipse.mylyn.docs.intent.core.genericunit.LabelDeclaration;
 import org.eclipse.mylyn.docs.intent.core.genericunit.UnitInstruction;
+import org.eclipse.mylyn.docs.intent.core.modelingunit.*;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.AnnotationDeclaration;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.ContributionInstruction;
 import org.eclipse.mylyn.docs.intent.core.modelingunit.InstanceLevelInstruction;
diff --git a/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/suite/UITestSuite.java b/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/suite/UITestSuite.java
index dfe6f50..ebf43d2 100644
--- a/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/suite/UITestSuite.java
+++ b/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/suite/UITestSuite.java
@@ -88,8 +88,8 @@
 		final TestSuite scenarioSuite = new TestSuite("Simple End-User Scenarios");
 		scenarioSuite.addTestSuite(CompilerNotificationsTest.class);
 		scenarioSuite.addTestSuite(IntentAbstractResourceTest.class);
-		scenarioSuite.addTestSuite(IntentProjectReopeningTest.class);
 		scenarioSuite.addTestSuite(IntentDocumentationUpdateDoesNotCauseResolvingIssuesTest.class);
+		scenarioSuite.addTestSuite(IntentProjectReopeningTest.class);
 		uiTestSuite.addTest(scenarioSuite);
 
 		// Complete use case testSuite
diff --git a/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/repository/IntentRepositoryStructurerTest.java b/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/repository/IntentRepositoryStructurerTest.java
index 2823b74..0e2cfee 100644
--- a/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/repository/IntentRepositoryStructurerTest.java
+++ b/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/repository/IntentRepositoryStructurerTest.java
@@ -60,8 +60,9 @@
 		// => all previous content should be stored in new resources
 		IntentEditorDocument document = (IntentEditorDocument)editor.getDocumentProvider().getDocument(
 				editor.getEditorInput());
-		document.set("Document {\n\tChapter {\n\tNew Chapter\n\tNew Chapter\n\tSection {\n\t}\n\t}\n"
-				+ document.get().replace("Document {", ""));
+		String newDoc = "Document {\n\tChapter New Chapter{\n\tNew chapter.\n\tSection {\n\t}\n\t}\n"
+				+ document.get().replace("Document {", "");
+		document.set(newDoc);
 
 		editor.doSave(new NullProgressMonitor());
 		waitForAllOperationsInUIThread();
diff --git a/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/scenario/CompilerNotificationsTest.java b/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/scenario/CompilerNotificationsTest.java
index 83232bd..b538d25 100644
--- a/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/scenario/CompilerNotificationsTest.java
+++ b/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/scenario/CompilerNotificationsTest.java
@@ -49,6 +49,7 @@
 		// Step 2 : open an editor on the root document
 		editor = openIntentEditor();
 		document = (IntentEditorDocument)editor.getDocumentProvider().getDocument(editor.getEditorInput());
+		waitForAllOperationsInUIThread();
 	}
 
 	public void testCompilerIsNotifiedWhenModifyingMU() {
diff --git a/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/scenario/IntentAbstractResourceTest.java b/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/scenario/IntentAbstractResourceTest.java
index 49d86c3..5fceff4 100644
--- a/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/scenario/IntentAbstractResourceTest.java
+++ b/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/scenario/IntentAbstractResourceTest.java
@@ -77,7 +77,7 @@
 		// save

 		editor.doSave(new NullProgressMonitor());

 		// and wait the synchronizer to be notified

-		waitForSynchronizer();

+		waitForCompiler();

 

 		// Step 3 : we check that no synchronization error has been detected

 		assertFalse("An abstract resource should not be handled by the Intent synchronizer",

diff --git a/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/scenario/IntentProjectReopeningTest.java b/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/scenario/IntentProjectReopeningTest.java
index f0b568c..2f40da0 100644
--- a/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/scenario/IntentProjectReopeningTest.java
+++ b/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/scenario/IntentProjectReopeningTest.java
@@ -18,6 +18,7 @@
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.mylyn.docs.intent.client.ui.editor.IntentEditor;
 import org.eclipse.mylyn.docs.intent.client.ui.editor.IntentEditorDocument;
 import org.eclipse.mylyn.docs.intent.client.ui.ide.builder.ToggleNatureAction;
@@ -78,7 +79,9 @@
 		waitForAllOperationsInUIThread();
 
 		document.set(newContent);
+		repositoryListener.clearPreviousEntries();
 		editor.doSave(new NullProgressMonitor());
+		waitForIndexer();
 		waitForAllOperationsInUIThread();
 
 		IntentDocument newDocument = reopenProjectAndGetDocument();
@@ -101,6 +104,7 @@
 		if (documentResource != null && documentResource.getContents().iterator().hasNext()
 				&& documentResource.getContents().iterator().next() instanceof IntentStructuredElement) {
 			if (documentResource.getContents().iterator().next() instanceof IntentDocument) {
+				EcoreUtil.resolveAll(documentResource.getResourceSet());
 				newDocument = (IntentDocument)documentResource.getContents().iterator().next();
 			}
 		}
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 5951814..e1c13b9 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
@@ -253,6 +253,10 @@
 			// Step 3 : registering the repository listener

 			registerRepositoryListener();

 

+			// Step 4: waiting for synchronizer to pass

+			repositoryListener.clearPreviousEntries();

+			waitForSynchronizer();

+

 		} catch (CoreException e) {

 			AssertionFailedError error = new AssertionFailedError("Failed to create Intent project");

 			error.setStackTrace(e.getStackTrace());

@@ -456,6 +460,13 @@
 	}

 

 	/**

+	 * Wait for the project explorer refresher to complete work.

+	 */

+	protected void waitForProjectExplorerRefresher() {

+		waitForProjectExplorerRefresher(true);

+	}

+

+	/**

 	 * Ensures that the synchronizer has been launched or not, according to the given boolean.

 	 * 

 	 * @param compilerShouldBeNotified

@@ -498,6 +509,27 @@
 	}

 

 	/**

+	 * Ensures that the project explorer refreshed has been launched or not, according to the given boolean.

+	 * 

+	 * @param refresherShouldBeNotified

+	 *            indicates whether the indexer should be notified or not

+	 */

+	protected void waitForProjectExplorerRefresher(boolean refresherShouldBeNotified) {

+		waitForAllOperationsInUIThread();

+		assertNotNull(

+				"Cannot wait for Project Explorer Refresher : you need to initialize a repository listener by calling the registerRepositoryListener() method",

+				repositoryListener);

+		if (refresherShouldBeNotified) {

+			assertTrue("Time out : Project Explorer Refresher should have handle changes but did not",

+					repositoryListener.waitForModificationOn("Project Explorer Refresher"));

+		} else {

+			assertFalse("Project Explorer Refresher should not have been notifed",

+					repositoryListener.waitForModificationOn("Project Explorer Refresher"));

+		}

+		waitForAllOperationsInUIThread();

+	}

+

+	/**

 	 * Ensures that the compiler has been launched or not, according to the given boolean.

 	 * 

 	 * @param compilerShouldBeNotified

diff --git a/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/util/RepositoryListenerForTests.java b/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/util/RepositoryListenerForTests.java
index dc6cda3..766ef4d 100644
--- a/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/util/RepositoryListenerForTests.java
+++ b/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/util/RepositoryListenerForTests.java
@@ -64,6 +64,7 @@
 		clientsMessages.put("Indexer", Sets.<String> newLinkedHashSet());

 		clientsMessages.put("Compiler", Sets.<String> newLinkedHashSet());

 		clientsMessages.put("Synchronizer", Sets.<String> newLinkedHashSet());

+		clientsMessages.put("Project Explorer Refresher", Sets.<String> newLinkedHashSet());

 	}

 

 	/**

diff --git a/tests/org.eclipse.mylyn.docs.intent.collab.test/src/org/eclipse/mylyn/docs/intent/collab/test/structurer/TestRepositoryStructurer.java b/tests/org.eclipse.mylyn.docs.intent.collab.test/src/org/eclipse/mylyn/docs/intent/collab/test/structurer/TestRepositoryStructurer.java
index 801592c..464b44a 100644
--- a/tests/org.eclipse.mylyn.docs.intent.collab.test/src/org/eclipse/mylyn/docs/intent/collab/test/structurer/TestRepositoryStructurer.java
+++ b/tests/org.eclipse.mylyn.docs.intent.collab.test/src/org/eclipse/mylyn/docs/intent/collab/test/structurer/TestRepositoryStructurer.java
@@ -10,10 +10,6 @@
  *******************************************************************************/
 package org.eclipse.mylyn.docs.intent.collab.test.structurer;
 
-import com.google.common.collect.Sets;
-
-import java.util.Collection;
-
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.ReadOnlyException;
 import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter;
@@ -43,7 +39,7 @@
 	 * 
 	 * @see org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryStructurer#structure(org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter)
 	 */
-	public Collection<String> structure(RepositoryAdapter repositoryAdapter) throws ReadOnlyException {
+	public void structure(RepositoryAdapter repositoryAdapter) throws ReadOnlyException {
 		// We first get the Test Index
 		Resource indexResource = repositoryAdapter.getResource(TestCollabSettings.TEST_INDEX);
 		TestIndex testIndex = (TestIndex)indexResource.getContents().get(0);
@@ -53,7 +49,6 @@
 			// We structure (i.e place in the correct resource) the reference element
 			placeCorrectly(repositoryAdapter, entry);
 		}
-		return Sets.newLinkedHashSet();
 	}
 
 	/**