diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui/src/org/eclipse/mylyn/docs/intent/client/ui/utils/IntentEditorOpener.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui/src/org/eclipse/mylyn/docs/intent/client/ui/utils/IntentEditorOpener.java
index d72fac3..db6a43f 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui/src/org/eclipse/mylyn/docs/intent/client/ui/utils/IntentEditorOpener.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui/src/org/eclipse/mylyn/docs/intent/client/ui/utils/IntentEditorOpener.java
@@ -57,16 +57,17 @@
 	 * @param readOnlyMode
 	 *            indicates if the editor should be opened in readOnly mode.
 	 */
-	public static void openIntentEditor(final Repository repository, boolean readOnlyMode) {
+	public static IntentEditor openIntentEditor(final Repository repository, boolean readOnlyMode) {
 		try {
 			final RepositoryAdapter repositoryAdapter = repository.createRepositoryAdapter();
 
 			openContext(repositoryAdapter, readOnlyMode);
 			IntentDocument elementToOpen = new IntentDocumentQuery(repositoryAdapter)
 					.getOrCreateIntentDocument();
-			openIntentEditor(repositoryAdapter, elementToOpen, false, elementToOpen, false);
+			return openIntentEditor(repositoryAdapter, elementToOpen, false, elementToOpen, false);
 		} catch (PartInitException e) {
 			IntentUiLogger.logError(e);
+			return null;
 		}
 	}
 
diff --git a/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/cdo/CDOIntegrationTest.java b/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/cdo/CDOIntegrationTest.java
index 0a6d4c3..ab96d90 100644
--- a/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/cdo/CDOIntegrationTest.java
+++ b/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/cdo/CDOIntegrationTest.java
@@ -10,7 +10,10 @@
  *******************************************************************************/
 package org.eclipse.mylyn.docs.intent.client.ui.test.unit.cdo;
 
+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.test.unit.cdo.util.AbstractIntentCDOTest;
+import org.eclipse.mylyn.docs.intent.client.ui.utils.IntentEditorOpener;
 import org.eclipse.mylyn.docs.intent.collab.common.location.IntentLocations;
 import org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryManager;
 import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.IntentCommand;
@@ -80,43 +83,44 @@
 	 * 
 	 * @throws Exception
 	 */
-	// public void testRemoteChangesIntegrationInsideEditor() throws Exception {
-	// Local user opens an editor on an Intent document
-	// setUpIntentProject("myIntentProject", INTENT_ABSTRACT_RESOURCE_DOCUMENT_PATH, false);
-	// waitForAllOperationsInUIThread();
-	// IntentEditor editor = openIntentEditor(getIntentDocument());
-	// waitForAllOperationsInUIThread();
-	// String initialContent = ((IntentEditorDocument)editor.getDocumentProvider().getDocument(
-	// editor.getEditorInput())).get();
+	public void testRemoteChangesIntegrationInsideEditor() throws Exception {
+		// Local user opens an editor on an Intent document
+		setUpIntentProject("myIntentProject", INTENT_ABSTRACT_RESOURCE_DOCUMENT_PATH, false);
+		IntentEditor editor = IntentEditorOpener.openIntentEditor(
+				IntentRepositoryManager.INSTANCE.getRepository(getIntentRepositoryIdentifier()), false);
+		waitForAllOperationsInUIThread();
+		String initialContent = ((IntentEditorDocument)editor.getDocumentProvider().getDocument(
+				editor.getEditorInput())).get();
 
-	// Remote user adds an untitle chapter
-	// final RepositoryAdapter remoteUser = IntentRepositoryManager.INSTANCE.getRepository(
-	// "cdo:/myIntentProject").createRepositoryAdapter();
-	// remoteUser.openSaveContext();
-	// remoteUser.execute(new IntentCommand() {
-	//
-	// public void execute() {
-	// IntentDocument remoteIntentDocument;
-	// try {
-	// remoteIntentDocument = (IntentDocument)remoteUser
-	// .getOrCreateResource(IntentLocations.INTENT_INDEX).getContents().iterator()
-	// .next();
-	// remoteIntentDocument.getChapters().add(
-	// IntentDocumentFactory.eINSTANCE.createIntentChapter());
-	// } catch (ReadOnlyException e) {
-	// fail(e.getMessage());
-	// }
-	// }
-	// });
-	// remoteUser.save();
-	// remoteUser.closeContext();
-	// waitForAllOperationsInUIThread();
+		// Remote user adds an untitled chapter
+		final RepositoryAdapter remoteUser = IntentRepositoryManager.INSTANCE.getRepository(
+				getIntentRepositoryIdentifier()).createRepositoryAdapter();
+		remoteUser.openSaveContext();
+		remoteUser.execute(new IntentCommand() {
 
-	// Local user should see the new chapter
-	// assertNotSame(initialContent,
-	// ((IntentEditorDocument)editor.getDocumentProvider().getDocument(editor.getEditorInput()))
-	// .get());
-	//
-	// editor.close(false);
-	// }
+			public void execute() {
+				IntentDocument remoteIntentDocument;
+				try {
+					remoteIntentDocument = (IntentDocument)remoteUser
+							.getOrCreateResource(IntentLocations.INTENT_INDEX).getContents().iterator()
+							.next();
+					remoteIntentDocument.getChapters().add(
+							IntentDocumentFactory.eINSTANCE.createIntentChapter());
+				} catch (ReadOnlyException e) {
+					fail(e.getMessage());
+				}
+			}
+		});
+		remoteUser.save();
+		remoteUser.closeContext();
+		waitForAllOperationsInUIThread();
+
+		// Local user should see the new chapter
+		assertNotSame(initialContent,
+				((IntentEditorDocument)editor.getDocumentProvider().getDocument(editor.getEditorInput()))
+						.get());
+		// Local user's editor should not be dirty
+		assertFalse("Editor should not be dirty after remote changes integration", editor.isDirty());
+		editor.close(false);
+	}
 }
diff --git a/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/cdo/util/AbstractIntentCDOTest.java b/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/cdo/util/AbstractIntentCDOTest.java
index bd4a29e..f2eeaa0 100644
--- a/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/cdo/util/AbstractIntentCDOTest.java
+++ b/tests/org.eclipse.mylyn.docs.intent.client.ui.test/src/org/eclipse/mylyn/docs/intent/client/ui/test/unit/cdo/util/AbstractIntentCDOTest.java
@@ -50,6 +50,11 @@
 	protected void tearDown() throws Exception {
 		super.tearDown();
 
+		// Delete intent repository
+		IntentRepositoryManager.INSTANCE.getRepository(getIntentRepositoryIdentifier()).closeSession();
+		IntentRepositoryManager.INSTANCE.deleteRepository(getIntentRepositoryIdentifier());
+		waitForAllOperationsInUIThread();
+
 		// Stopping the CDOServer
 		IntentCDORepository.stop();
 	}
@@ -112,4 +117,5 @@
 	protected void additionalSetUpOperations() {
 
 	}
+
 }
