Merge branch 'hotfix-1.0.4' into develop
diff --git a/bundles/org.eclipse.emf.emfstore.branding/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.branding/META-INF/MANIFEST.MF
index f0a05bc..6efd412 100644
--- a/bundles/org.eclipse.emf.emfstore.branding/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.branding/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMFStore Branding
 Bundle-SymbolicName: org.eclipse.emf.emfstore.branding
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-Activator: org.eclipse.emf.emfstore.branding.Activator
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.ui;bundle-version="[3.5.0,4.0.0)"
diff --git a/bundles/org.eclipse.emf.emfstore.branding/pom.xml b/bundles/org.eclipse.emf.emfstore.branding/pom.xml
index 302d887..0c58f35 100644
--- a/bundles/org.eclipse.emf.emfstore.branding/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.branding/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.branding</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.client.model.edit/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.client.model.edit/META-INF/MANIFEST.MF
index e2a740e..f9dbfed 100644
--- a/bundles/org.eclipse.emf.emfstore.client.model.edit/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.client.model.edit/META-INF/MANIFEST.MF
@@ -2,14 +2,14 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMFStore Client Model Edit
 Bundle-SymbolicName: org.eclipse.emf.emfstore.client.model.edit;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.emf.emfstore.internal.client.model.provider.ClientModelEditPlugin$Implementation
 Bundle-Vendor: Eclipse Modeling Project
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Export-Package: 
- org.eclipse.emf.emfstore.internal.client.model.provider;version="1.0.2";
+ org.eclipse.emf.emfstore.internal.client.model.provider;version="1.0.4";
   uses:="org.eclipse.emf.ecore,
    org.eclipse.emf.emfstore.internal.common.model.provider,
    org.eclipse.emf.common.util,
@@ -17,9 +17,9 @@
    org.eclipse.emf.edit.provider,
    org.eclipse.emf.common.notify,
    org.eclipse.emf.emfstore.internal.client.model.util"
-Require-Bundle: org.eclipse.emf.emfstore.server.model.edit;bundle-version="[1.0.2,2.0.0)",
- org.eclipse.emf.emfstore.client;bundle-version="[1.0.2,2.0.0)";visibility:=reexport,
+Require-Bundle: org.eclipse.emf.emfstore.server.model.edit;bundle-version="[1.0.4,2.0.0)",
+ org.eclipse.emf.emfstore.client;bundle-version="[1.0.4,2.0.0)";visibility:=reexport,
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.emf.emfstore.common.model.edit;bundle-version="[1.0.2,2.0.0)",
+ org.eclipse.emf.emfstore.common.model.edit;bundle-version="[1.0.4,2.0.0)",
  org.eclipse.emf.edit;bundle-version="[2.5.0,3.0.0)"
 Bundle-ActivationPolicy: lazy
diff --git a/bundles/org.eclipse.emf.emfstore.client.model.edit/pom.xml b/bundles/org.eclipse.emf.emfstore.client.model.edit/pom.xml
index 3361a47..89bebcf 100644
--- a/bundles/org.eclipse.emf.emfstore.client.model.edit/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.client.model.edit/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.client.model.edit</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.client.transaction/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.client.transaction/META-INF/MANIFEST.MF
index 54c3215..7d385f9 100644
--- a/bundles/org.eclipse.emf.emfstore.client.transaction/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.client.transaction/META-INF/MANIFEST.MF
@@ -2,9 +2,9 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMFStore Transaction
 Bundle-SymbolicName: org.eclipse.emf.emfstore.client.transaction;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-Vendor: Eclipse Modeling Project
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Require-Bundle: org.eclipse.emf.emfstore.client;bundle-version="[1.0.2,2.0.0)",
+Require-Bundle: org.eclipse.emf.emfstore.client;bundle-version="[1.0.4,2.0.0)",
  org.eclipse.emf.transaction;bundle-version="[1.3.0,2.0.0)";visibility:=reexport
-Export-Package: org.eclipse.emf.emfstore.internal.client.transaction;version="1.0.2";x-internal:=true
+Export-Package: org.eclipse.emf.emfstore.internal.client.transaction;version="1.0.4";x-internal:=true
diff --git a/bundles/org.eclipse.emf.emfstore.client.transaction/pom.xml b/bundles/org.eclipse.emf.emfstore.client.transaction/pom.xml
index ddc7836..e77410a 100644
--- a/bundles/org.eclipse.emf.emfstore.client.transaction/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.client.transaction/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.client.transaction</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator/META-INF/MANIFEST.MF
index f670ea3..bda3627 100644
--- a/bundles/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: HistoryBrowserComparator
 Bundle-SymbolicName: org.eclipse.emf.emfstore.client.ui.historybrowsercomparator;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-Vendor: Eclipse Modeling Project
 Require-Bundle: org.eclipse.emf.compare;bundle-version="[1.3.3,2.0.0)";visibility:=reexport,
@@ -11,6 +11,6 @@
  org.eclipse.emf.compare.ui;bundle-version="[1.3.3,2.0.0)";visibility:=reexport,
  org.eclipse.emf.compare.diff.edit;bundle-version="[1.3.3,2.0.0)",
  org.eclipse.compare;bundle-version="[3.5.300,4.0.0)";visibility:=reexport,
- org.eclipse.emf.emfstore.client;bundle-version="[1.0.2,2.0.0)",
- org.eclipse.emf.emfstore.client.ui;bundle-version="[1.0.2,2.0.0)"
-Export-Package: org.eclipse.emf.emfstore.client.ui.historybrowsercomparator;version="1.0.2";x-internal:=true
+ org.eclipse.emf.emfstore.client;bundle-version="[1.0.4,2.0.0)",
+ org.eclipse.emf.emfstore.client.ui;bundle-version="[1.0.4,2.0.0)"
+Export-Package: org.eclipse.emf.emfstore.client.ui.historybrowsercomparator;version="1.0.4";x-internal:=true
diff --git a/bundles/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator/pom.xml b/bundles/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator/pom.xml
index a4ca681..76ca1cd 100644
--- a/bundles/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.client.ui.historybrowsercomparator</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.client.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.client.ui/META-INF/MANIFEST.MF
index 018a81e..6c8942f 100644
--- a/bundles/org.eclipse.emf.emfstore.client.ui/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.client.ui/META-INF/MANIFEST.MF
@@ -2,49 +2,49 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMFStore Client UI
 Bundle-SymbolicName: org.eclipse.emf.emfstore.client.ui;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-Activator: org.eclipse.emf.emfstore.internal.client.ui.Activator
 Require-Bundle: org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.emf.emfstore.client.model.edit;bundle-version="[1.0.2,2.0.0)",
+ org.eclipse.emf.emfstore.client.model.edit;bundle-version="[1.0.4,2.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.emf.edit;bundle-version="[2.5.0,3.0.0)",
- org.eclipse.emf.emfstore.server.model.edit;bundle-version="[1.0.2,2.0.0)"
+ org.eclipse.emf.emfstore.server.model.edit;bundle-version="[1.0.4,2.0.0)"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-Vendor: Eclipse Modeling Project
 Bundle-ClassPath: .,
  lib/dmp.jar
-Export-Package: org.eclipse.emf.emfstore.client.ui;version="1.0.2";
+Export-Package: org.eclipse.emf.emfstore.client.ui;version="1.0.4";
   uses:="org.eclipse.emf.ecore,
    org.eclipse.emf.emfstore.client,
    org.eclipse.swt.widgets,
    org.eclipse.emf.emfstore.server.model.versionspec",
- org.eclipse.emf.emfstore.internal.client.ui;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.common;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.controller;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.decorators;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.dialogs;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.dialogs.login;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.dialogs.merge;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.dialogs.merge.ui;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.dialogs.merge.ui.components;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.dialogs.merge.ui.widgets;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.dialogs.merge.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.epackages;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.exceptions;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.handlers;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.handlers.exportimport;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.testers;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.views.changes;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.views.emfstorebrowser.dialogs.admin;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.views.emfstorebrowser.dialogs.admin.acimport;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.views.emfstorebrowser.dialogs.admin.acimport.wizard;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.views.emfstorebrowser.views;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.views.historybrowserview;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.views.historybrowserview.graph;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.ui.views.scm;version="1.0.2";x-internal:=true,
- org.eclipse.wb.swt;version="1.0.2";x-internal:=true;uses:="org.eclipse.jface.resource,org.eclipse.swt.graphics"
+ org.eclipse.emf.emfstore.internal.client.ui;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.common;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.controller;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.decorators;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.dialogs;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.dialogs.login;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.dialogs.merge;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.dialogs.merge.ui;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.dialogs.merge.ui.components;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.dialogs.merge.ui.widgets;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.dialogs.merge.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.epackages;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.exceptions;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.handlers;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.handlers.exportimport;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.testers;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.views.changes;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.views.emfstorebrowser.dialogs.admin;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.views.emfstorebrowser.dialogs.admin.acimport;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.views.emfstorebrowser.dialogs.admin.acimport.wizard;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.views.emfstorebrowser.views;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.views.historybrowserview;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.views.historybrowserview.graph;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.ui.views.scm;version="1.0.4";x-internal:=true,
+ org.eclipse.wb.swt;version="1.0.4";x-internal:=true;uses:="org.eclipse.jface.resource,org.eclipse.swt.graphics"
 Import-Package: org.eclipse.core.commands;version="0.0.0",
  org.eclipse.emf.edit.ui.provider;version="0.0.0",
  org.eclipse.jface.action;version="0.0.0",
diff --git a/bundles/org.eclipse.emf.emfstore.client.ui/pom.xml b/bundles/org.eclipse.emf.emfstore.client.ui/pom.xml
index 1230457..3c3f746 100644
--- a/bundles/org.eclipse.emf.emfstore.client.ui/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.client.ui/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.client.ui</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.client/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.client/META-INF/MANIFEST.MF
index 4142ba9..76088be 100644
--- a/bundles/org.eclipse.emf.emfstore.client/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.client/META-INF/MANIFEST.MF
@@ -2,58 +2,58 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMFStore Client
 Bundle-SymbolicName: org.eclipse.emf.emfstore.client;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-ClassPath: .
 Bundle-Vendor: Eclipse Modeling Project
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Require-Bundle: org.eclipse.emf.edit;bundle-version="[2.5.0,3.0.0)";visibility:=reexport,
- org.eclipse.emf.emfstore.server;bundle-version="[1.0.2,2.0.0)";visibility:=reexport,
- org.eclipse.emf.emfstore.migration;bundle-version="[1.0.2,2.0.0)"
+ org.eclipse.emf.emfstore.server;bundle-version="[1.0.4,2.0.0)";visibility:=reexport,
+ org.eclipse.emf.emfstore.migration;bundle-version="[1.0.4,2.0.0)"
 Bundle-ActivationPolicy: lazy
 Bundle-Activator: org.eclipse.emf.emfstore.internal.client.model.Activator
 Import-Package: org.apache.commons.codec.binary;version="1.3.0"
-Export-Package: org.eclipse.emf.emfstore.client;version="1.0.2",
- org.eclipse.emf.emfstore.client.callbacks;version="1.0.2",
- org.eclipse.emf.emfstore.client.changetracking;version="1.0.2",
- org.eclipse.emf.emfstore.client.exceptions;version="1.0.2",
- org.eclipse.emf.emfstore.client.handler;version="1.0.2",
- org.eclipse.emf.emfstore.client.observer;version="1.0.2",
- org.eclipse.emf.emfstore.client.provider;version="1.0.2",
- org.eclipse.emf.emfstore.client.sessionprovider;version="1.0.2",
- org.eclipse.emf.emfstore.client.util;version="1.0.2",
- org.eclipse.emf.emfstore.internal.client.accesscontrol;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.ui",
- org.eclipse.emf.emfstore.internal.client.common;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.ui",
- org.eclipse.emf.emfstore.internal.client.configuration;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.client.ui",
- org.eclipse.emf.emfstore.internal.client.importexport;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.client.ui",
- org.eclipse.emf.emfstore.internal.client.importexport.impl;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.test",
- org.eclipse.emf.emfstore.internal.client.model;version="1.0.2";
+Export-Package: org.eclipse.emf.emfstore.client;version="1.0.4",
+ org.eclipse.emf.emfstore.client.callbacks;version="1.0.4",
+ org.eclipse.emf.emfstore.client.changetracking;version="1.0.4",
+ org.eclipse.emf.emfstore.client.exceptions;version="1.0.4",
+ org.eclipse.emf.emfstore.client.handler;version="1.0.4",
+ org.eclipse.emf.emfstore.client.observer;version="1.0.4",
+ org.eclipse.emf.emfstore.client.provider;version="1.0.4",
+ org.eclipse.emf.emfstore.client.sessionprovider;version="1.0.4",
+ org.eclipse.emf.emfstore.client.util;version="1.0.4",
+ org.eclipse.emf.emfstore.internal.client.accesscontrol;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.ui",
+ org.eclipse.emf.emfstore.internal.client.common;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.ui",
+ org.eclipse.emf.emfstore.internal.client.configuration;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.client.ui",
+ org.eclipse.emf.emfstore.internal.client.importexport;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.client.ui",
+ org.eclipse.emf.emfstore.internal.client.importexport.impl;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.test",
+ org.eclipse.emf.emfstore.internal.client.model;version="1.0.4";
   x-friends:="org.eclipse.emf.emfstore.client.ui,
    org.eclipse.emf.emfstore.client.model.edit,
    org.eclipse.emf.emfstore.client.test,
    org.eclipse.emf.emfstore.client.transaction,
    org.eclipse.emf.emfstore.example.merging",
- org.eclipse.emf.emfstore.internal.client.model.changeTracking;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.model.changeTracking.commands;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.transaction,org.eclipse.emf.emfstore.client.test",
- org.eclipse.emf.emfstore.internal.client.model.changeTracking.merging;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.example.merging",
- org.eclipse.emf.emfstore.internal.client.model.changeTracking.merging.conflict;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.client.ui",
- org.eclipse.emf.emfstore.internal.client.model.changeTracking.merging.conflict.conflicts;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.test",
- org.eclipse.emf.emfstore.internal.client.model.changeTracking.merging.conflict.options;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.ui",
- org.eclipse.emf.emfstore.internal.client.model.changeTracking.merging.util;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.ui",
- org.eclipse.emf.emfstore.internal.client.model.changeTracking.notification.filter;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.client.model.changeTracking.notification.recording;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.test",
- org.eclipse.emf.emfstore.internal.client.model.connectionmanager;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.example.helloworld",
- org.eclipse.emf.emfstore.internal.client.model.connectionmanager.xmlrpc;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.test",
- org.eclipse.emf.emfstore.internal.client.model.controller;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.example.merging",
- org.eclipse.emf.emfstore.internal.client.model.exceptions;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.client.test",
- org.eclipse.emf.emfstore.internal.client.model.filetransfer;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.test",
- org.eclipse.emf.emfstore.internal.client.model.impl;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.client.ui",
- org.eclipse.emf.emfstore.internal.client.model.impl.api;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.example.merging",
- org.eclipse.emf.emfstore.internal.client.model.util;version="1.0.2";
+ org.eclipse.emf.emfstore.internal.client.model.changeTracking;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.model.changeTracking.commands;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.transaction,org.eclipse.emf.emfstore.client.test",
+ org.eclipse.emf.emfstore.internal.client.model.changeTracking.merging;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.example.merging",
+ org.eclipse.emf.emfstore.internal.client.model.changeTracking.merging.conflict;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.client.ui",
+ org.eclipse.emf.emfstore.internal.client.model.changeTracking.merging.conflict.conflicts;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.test",
+ org.eclipse.emf.emfstore.internal.client.model.changeTracking.merging.conflict.options;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.ui",
+ org.eclipse.emf.emfstore.internal.client.model.changeTracking.merging.util;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.ui",
+ org.eclipse.emf.emfstore.internal.client.model.changeTracking.notification.filter;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.client.model.changeTracking.notification.recording;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.test",
+ org.eclipse.emf.emfstore.internal.client.model.connectionmanager;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.example.helloworld",
+ org.eclipse.emf.emfstore.internal.client.model.connectionmanager.xmlrpc;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.test",
+ org.eclipse.emf.emfstore.internal.client.model.controller;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.example.merging",
+ org.eclipse.emf.emfstore.internal.client.model.exceptions;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.client.test",
+ org.eclipse.emf.emfstore.internal.client.model.filetransfer;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.test",
+ org.eclipse.emf.emfstore.internal.client.model.impl;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.client.ui",
+ org.eclipse.emf.emfstore.internal.client.model.impl.api;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.example.merging",
+ org.eclipse.emf.emfstore.internal.client.model.util;version="1.0.4";
   x-friends:="org.eclipse.emf.emfstore.client.ui,
    org.eclipse.emf.emfstore.client.model.edit,
    org.eclipse.emf.emfstore.client.test,
    org.eclipse.emf.emfstore.client.transaction,
    org.eclipse.emf.emfstore.example.merging",
- org.eclipse.emf.emfstore.internal.client.observers;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.client.ui",
- org.eclipse.emf.emfstore.internal.client.properties;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.test"
+ org.eclipse.emf.emfstore.internal.client.observers;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.client.ui",
+ org.eclipse.emf.emfstore.internal.client.properties;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.test"
diff --git a/bundles/org.eclipse.emf.emfstore.client/pom.xml b/bundles/org.eclipse.emf.emfstore.client/pom.xml
index ae5cc5c..abcad1b 100644
--- a/bundles/org.eclipse.emf.emfstore.client/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.client/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.client</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/changeTracking/merging/DecisionManager.java b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/changeTracking/merging/DecisionManager.java
index ed29de0..ca64a3c 100644
--- a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/changeTracking/merging/DecisionManager.java
+++ b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/changeTracking/merging/DecisionManager.java
@@ -29,6 +29,7 @@
 import java.util.List;
 import java.util.Set;
 
+import org.apache.commons.lang.StringUtils;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EObject;
@@ -133,8 +134,9 @@
 	}
 
 	/**
-	 * BEGIN FACTORY TODO: EXTRACT FACTORY CLASS.
+	 * BEGIN FACTORY TODO EXTRACT FACTORY CLASS.
 	 */
+
 	// BEGIN COMPLEX CODE
 	private void createConflicts(Set<ConflictBucket> conflictBucket) {
 		// Create Conflicts from ConflictBucket
@@ -226,7 +228,6 @@
 		if (isMultiRef(conf.getMyOperation())) {
 			return new MultiReferenceSetConflict(conf, this, true);
 		}
-
 		return new MultiReferenceSetConflict(conf, this, false);
 	}
 
@@ -234,16 +235,16 @@
 		if (isMultiRefSet(conf.getMyOperation())) {
 			return new MultiReferenceSetSingleConflict(conf, this, true);
 		}
-
 		return new MultiReferenceSetSingleConflict(conf, this, false);
+
 	}
 
 	private VisualConflict createMultiSingle(ConflictBucket conf) {
 		if (isMultiRef(conf.getMyOperation())) {
 			return new MultiReferenceSingleConflict(conf, this, true);
 		}
-
 		return new MultiReferenceSingleConflict(conf, this, false);
+
 	}
 
 	private VisualConflict createMultiRefSetSet(ConflictBucket conf) {
@@ -258,7 +259,6 @@
 		if (((MultiAttributeOperation) conf.getMyOperation()).isAdd()) {
 			return new MultiAttributeConflict(conf, this, true);
 		}
-
 		return new MultiAttributeConflict(conf, this, false);
 	}
 
@@ -266,24 +266,24 @@
 		if (isMultiAtt(conf.getMyOperation())) {
 			return new MultiAttributeSetConflict(conf, this, true);
 		}
-
 		return new MultiAttributeSetConflict(conf, this, false);
+
 	}
 
 	private VisualConflict createMultiAttMove(ConflictBucket conf) {
 		if (isMultiAtt(conf.getMyOperation())) {
 			return new MultiAttributeMoveConflict(conf, this, true);
 		}
-
 		return new MultiAttributeMoveConflict(conf, this, false);
+
 	}
 
 	private VisualConflict createMultiAttMoveSet(ConflictBucket conf) {
 		if (isMultiAttSet(conf.getMyOperation())) {
 			return new MultiAttributeMoveSetConflict(conf, this, true);
 		}
-
 		return new MultiAttributeMoveSetConflict(conf, this, false);
+
 	}
 
 	private VisualConflict createReferenceCompVSSingleMulti(ConflictBucket conf) {
@@ -291,9 +291,9 @@
 			return createRefFromSub(conf, ((CompositeOperation) conf.getMyOperation()).getSubOperations(),
 				Arrays.asList(conf.getTheirOperation()));
 		}
-
 		return createRefFromSub(conf, Arrays.asList(conf.getMyOperation()),
 			((CompositeOperation) conf.getTheirOperation()).getSubOperations());
+
 	}
 
 	private VisualConflict createReferenceConflict(ConflictBucket conf) {
@@ -335,7 +335,6 @@
 		if (((MultiReferenceOperation) conf.getMyOperation()).isAdd()) {
 			return new MultiReferenceConflict(conf, this, true);
 		}
-
 		return new MultiReferenceConflict(conf, this, false);
 	}
 
@@ -343,7 +342,6 @@
 		if (isDelete(conf.getMyOperation())) {
 			return new DeletionConflict(conf, true, this);
 		}
-
 		return new DeletionConflict(conf, false, this);
 	}
 
@@ -351,7 +349,6 @@
 		if (isComposite(conf.getMyOperation())) {
 			return new CompositeConflict(conf, this, true);
 		}
-
 		return new CompositeConflict(conf, this, false);
 	}
 
@@ -483,7 +480,7 @@
 		// }
 		// }
 		// MKCD
-		return "";
+		return StringUtils.EMPTY;
 	}
 
 	private Integer myLeafOperationCount;
diff --git a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/filetransfer/FileDownloadJob.java b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/filetransfer/FileDownloadJob.java
index e3112a7..0b810e8 100644
--- a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/filetransfer/FileDownloadJob.java
+++ b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/filetransfer/FileDownloadJob.java
@@ -39,13 +39,13 @@
 	 * @param status the status to which this download job will report its progress
 	 * @param transferManager the transfer manager administering the download.
 	 * @param fileId the id of the file to be transferred
-	 * @param transferVisibleToUser progress bar yes/no
+	 * @param isTriggeredByUI progress bar yes/no
 	 */
 	FileDownloadJob(FileDownloadStatus status, FileTransferManager transferManager, FileIdentifier fileId,
-		boolean transferVisibleToUser) {
+		boolean isTriggeredByUI) {
 		super(transferManager, new FileTransferInformation(fileId, FileTransferInformation.UNKOWN_SIZE),
 			"File Download");
-		setUser(transferVisibleToUser);
+		setUser(isTriggeredByUI);
 		this.status = status;
 	}
 
@@ -71,6 +71,8 @@
 		} catch (final RuntimeException e) {
 			// END SUPRESS CATCH EXCEPTION
 			return registerException(e);
+		} finally {
+			monitor.done();
 		}
 		return Status.OK_STATUS;
 	}
diff --git a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/filetransfer/FileTransferManager.java b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/filetransfer/FileTransferManager.java
index 4f99c76..92056ee 100644
--- a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/filetransfer/FileTransferManager.java
+++ b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/filetransfer/FileTransferManager.java
@@ -198,7 +198,8 @@
 	 * 
 	 * @throws FileTransferException in case the given file identifier is {@code null}
 	 */
-	public FileDownloadStatus getFile(FileIdentifier fileIdentifier) throws FileTransferException {
+	public FileDownloadStatus getFile(FileIdentifier fileIdentifier, boolean isTriggeredByUI)
+		throws FileTransferException {
 
 		if (fileIdentifier == null) {
 			throw new FileTransferException("File identifier may not be null,");
@@ -211,7 +212,7 @@
 		}
 
 		// Otherwise, start a download
-		return startDownload(fileIdentifier);
+		return startDownload(fileIdentifier, isTriggeredByUI);
 	}
 
 	/**
@@ -224,10 +225,10 @@
 	 *            a progress monitor for the download
 	 * @return the status
 	 */
-	private FileDownloadStatus startDownload(FileIdentifier fileIdentifier) {
+	private FileDownloadStatus startDownload(FileIdentifier fileIdentifier, boolean isTriggeredByUI) {
 		final FileDownloadStatus fds = FileDownloadStatus.Factory.createNew(projectSpace, fileIdentifier);
 		// TODO Check if true is correct here
-		final FileDownloadJob job = new FileDownloadJob(fds, this, fileIdentifier, true);
+		final FileDownloadJob job = new FileDownloadJob(fds, this, fileIdentifier, isTriggeredByUI);
 		job.schedule();
 		return fds;
 	}
diff --git a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/impl/ProjectSpaceBase.java b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/impl/ProjectSpaceBase.java
index 87a1410..5161916 100644
--- a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/impl/ProjectSpaceBase.java
+++ b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/impl/ProjectSpaceBase.java
@@ -434,7 +434,7 @@
 	 * @see org.eclipse.emf.emfstore.internal.client.model.ProjectSpace#getFile(org.eclipse.emf.emfstore.internal.server.model.FileIdentifier)
 	 */
 	public FileDownloadStatus getFile(FileIdentifier fileIdentifier) throws FileTransferException {
-		return fileTransferManager.getFile(fileIdentifier);
+		return fileTransferManager.getFile(fileIdentifier, false);
 	}
 
 	/**
diff --git a/bundles/org.eclipse.emf.emfstore.common.model.edit/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.common.model.edit/META-INF/MANIFEST.MF
index 4b6fb5f..300a462 100644
--- a/bundles/org.eclipse.emf.emfstore.common.model.edit/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.common.model.edit/META-INF/MANIFEST.MF
@@ -2,14 +2,14 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMFStore Common Model Edit
 Bundle-SymbolicName: org.eclipse.emf.emfstore.common.model.edit;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.emf.emfstore.internal.common.model.provider.CommonEditPlugin$Implementation
 Bundle-Vendor: Eclipse Modeling Project
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Export-Package: org.eclipse.emf.emfstore.internal.common.model.provider;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server.model.edit,org.eclipse.emf.emfstore.client.model.edit,org.eclipse.emf.emfstore.client.test"
+Export-Package: org.eclipse.emf.emfstore.internal.common.model.provider;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server.model.edit,org.eclipse.emf.emfstore.client.model.edit,org.eclipse.emf.emfstore.client.test"
 Require-Bundle: org.eclipse.emf.edit;bundle-version="[2.5.0,3.0.0)",
- org.eclipse.emf.emfstore.common.model;bundle-version="[1.0.2,2.0.0)";visibility:=reexport,
+ org.eclipse.emf.emfstore.common.model;bundle-version="[1.0.4,2.0.0)";visibility:=reexport,
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)"
 Bundle-ActivationPolicy: lazy
diff --git a/bundles/org.eclipse.emf.emfstore.common.model.edit/pom.xml b/bundles/org.eclipse.emf.emfstore.common.model.edit/pom.xml
index 1c32602..940062c 100644
--- a/bundles/org.eclipse.emf.emfstore.common.model.edit/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.common.model.edit/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.common.model.edit</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.common.model/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.common.model/META-INF/MANIFEST.MF
index 6fbb9f2..d0eeccb 100644
--- a/bundles/org.eclipse.emf.emfstore.common.model/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.common.model/META-INF/MANIFEST.MF
@@ -2,19 +2,19 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMFStore Common Model
 Bundle-SymbolicName: org.eclipse.emf.emfstore.common.model;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-ClassPath: .
 Bundle-Vendor: Eclipse Modeling Project
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Require-Bundle: org.eclipse.emf.emfstore.common;bundle-version="[1.0.2,2.0.0)";visibility:=reexport,
+Require-Bundle: org.eclipse.emf.emfstore.common;bundle-version="[1.0.4,2.0.0)";visibility:=reexport,
  org.eclipse.emf.ecore;bundle-version="[2.5.0,3.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.emf.ecore.xmi;bundle-version="[2.5.0,3.0.0)"
 Bundle-ActivationPolicy: lazy
-Export-Package: org.eclipse.emf.emfstore.common.model;version="1.0.2",
- org.eclipse.emf.emfstore.common.model.util;version="1.0.2",
- org.eclipse.emf.emfstore.internal.common.model;version="1.0.2";
+Export-Package: org.eclipse.emf.emfstore.common.model;version="1.0.4",
+ org.eclipse.emf.emfstore.common.model.util;version="1.0.4",
+ org.eclipse.emf.emfstore.internal.common.model;version="1.0.4";
   x-friends:="org.eclipse.emf.emfstore.client.test,
    org.eclipse.emf.emfstore.common.model.edit,
    org.eclipse.emf.emfstore.server,
@@ -25,14 +25,14 @@
    org.eclipse.emf.emfstore.server.model.edit,
    org.eclipse.emf.emfstore.client.ui,
    org.eclipse.emf.emfstore.example.merging",
- org.eclipse.emf.emfstore.internal.common.model.impl;version="1.0.2";
+ org.eclipse.emf.emfstore.internal.common.model.impl;version="1.0.4";
   x-friends:="org.eclipse.emf.emfstore.server.model,
    org.eclipse.emf.emfstore.client,
    org.eclipse.emf.emfstore.client.test,
    org.eclipse.emf.emfstore.server,
    org.eclipse.emf.emfstore.client.ui",
- org.eclipse.emf.emfstore.internal.common.model.impl.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.common.model.util;version="1.0.2";
+ org.eclipse.emf.emfstore.internal.common.model.impl.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.common.model.util;version="1.0.4";
   x-friends:="org.eclipse.emf.emfstore.common.model.edit,
    org.eclipse.emf.emfstore.server,
    org.eclipse.emf.emfstore.server.model,
diff --git a/bundles/org.eclipse.emf.emfstore.common.model/pom.xml b/bundles/org.eclipse.emf.emfstore.common.model/pom.xml
index ef4ade3..750b464 100644
--- a/bundles/org.eclipse.emf.emfstore.common.model/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.common.model/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.common.model</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/impl/IdEObjectCollectionImpl.java b/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/impl/IdEObjectCollectionImpl.java
index 4b1c403..1c831b9 100644
--- a/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/impl/IdEObjectCollectionImpl.java
+++ b/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/impl/IdEObjectCollectionImpl.java
@@ -1,856 +1,869 @@
-/*******************************************************************************

- * Copyright (c) 2008-2011 Chair for Applied Software Engineering,

- * Technische Universitaet Muenchen.

- * 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:

- * Maximilian Koegel, Edgar Mueller - initial API and implementation

- ******************************************************************************/

-package org.eclipse.emf.emfstore.internal.common.model.impl;

-

-import java.io.IOException;

-import java.util.Collection;

-import java.util.Collections;

-import java.util.HashSet;

-import java.util.LinkedHashMap;

-import java.util.LinkedHashSet;

-import java.util.Map;

-import java.util.Set;

-

-import org.eclipse.emf.common.util.EList;

-import org.eclipse.emf.common.util.TreeIterator;

-import org.eclipse.emf.ecore.EClass;

-import org.eclipse.emf.ecore.EObject;

-import org.eclipse.emf.ecore.EReference;

-import org.eclipse.emf.ecore.EStructuralFeature.Setting;

-import org.eclipse.emf.ecore.impl.EObjectImpl;

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

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

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

-import org.eclipse.emf.ecore.xmi.XMIResource;

-import org.eclipse.emf.emfstore.common.extensionpoint.ESExtensionElement;

-import org.eclipse.emf.emfstore.common.extensionpoint.ESExtensionPoint;

-import org.eclipse.emf.emfstore.common.model.ESModelElementIdGenerator;

-import org.eclipse.emf.emfstore.internal.common.ESDisposable;

-import org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection;

-import org.eclipse.emf.emfstore.internal.common.model.ModelElementId;

-import org.eclipse.emf.emfstore.internal.common.model.ModelFactory;

-import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil;

-

-/**

- * Implementation of an ID based storage mechanism for {@link EObject}s.

- * 

- * @author emueller

- * @author mkoegel

- */

-public abstract class IdEObjectCollectionImpl extends EObjectImpl implements IdEObjectCollection, ESDisposable {

-

-	/**

-	 * The extension point id to configure the {@link ESModelElementIdGenerator}.

-	 */

-	public static final String MODELELEMENTID_GENERATOR_EXTENSIONPOINT = "org.eclipse.emf.emfstore.common.model.modelelementIdGenerator";

-

-	/**

-	 * The attribute identifying the class of the {@link ESModelElementIdGenerator} extension point.

-	 */

-	public static final String MODELELEMENTID_GENERATOR_CLASS_ATTRIBUTE = "class";

-

-	// Caches

-	private Map<EObject, String> eObjectToIdMap;

-	private Map<String, EObject> idToEObjectMap;

-

-	// These caches will be used to assign specific IDs to newly created EObjects.

-	// Additionally, IDs of deleted model elements will also be put into these caches, in case

-	// the deleted elements will be restored during a command.

-	private Map<EObject, String> allocatedEObjectToIdMap;

-	private Map<String, EObject> allocatedIdToEObjectMap;

-

-	private boolean cachesInitialized;

-

-	/**

-	 * A {@link ESModelElementIdGenerator} for other plugins to register a special ID generation.

-	 */

-	private ESModelElementIdGenerator<ModelElementId> modelElementIdGenerator;

-

-	/**

-	 * Constructor.

-	 */

-	public IdEObjectCollectionImpl() {

-		eObjectToIdMap = new LinkedHashMap<EObject, String>();

-		idToEObjectMap = new LinkedHashMap<String, EObject>();

-

-		allocatedEObjectToIdMap = new LinkedHashMap<EObject, String>();

-		allocatedIdToEObjectMap = new LinkedHashMap<String, EObject>();

-

-		ESExtensionElement element = new ESExtensionPoint(MODELELEMENTID_GENERATOR_EXTENSIONPOINT)

-			.getElementWithHighestPriority();

-		if (element != null) {

-			modelElementIdGenerator = element.getClass(MODELELEMENTID_GENERATOR_CLASS_ATTRIBUTE,

-				ESModelElementIdGenerator.class);

-		}

-	}

-

-	/**

-	 * Constructor. Adds the contents of the given {@link XMIResource} as model

-	 * elements to the collection. If the {@link XMIResource} also has XMI IDs

-	 * assigned to the {@link EObject}s it contains, they will be used for

-	 * creating the {@link ModelElementId}s within the project, if not, the {@link ModelElementId}s will get created on

-	 * the fly.

-	 * 

-	 * @param xmiResource

-	 *            a {@link XMIResource}

-	 * @throws IOException

-	 *             if the given {@link XMIResource} could not be loaded

-	 */

-	public IdEObjectCollectionImpl(XMIResource xmiResource) throws IOException {

-		this();

-		boolean resourceHasIds = false;

-		try {

-			if (!xmiResource.isLoaded()) {

-				ModelUtil.loadResource(xmiResource, ModelUtil.getResourceLogger());

-			}

-		} catch (IOException e) {

-			ModelUtil.logException(String.format("XMIResource %s could not be loaded.", xmiResource.getURI()), e);

-			throw e;

-		}

-		TreeIterator<EObject> it = xmiResource.getAllContents();

-		while (it.hasNext()) {

-			EObject eObject = it.next();

-

-			if (ModelUtil.isIgnoredDatatype(eObject)) {

-				continue;

-			}

-

-			String id = xmiResource.getID(eObject);

-			ModelElementId eObjectId = getNewModelElementID();

-

-			if (id != null) {

-				eObjectId.setId(id);

-				resourceHasIds = true;

-			} else {

-				xmiResource.setID(eObject, eObjectId.getId());

-			}

-

-			putIntoCaches(eObject, eObjectId.getId());

-		}

-

-		if (resourceHasIds) {

-			cachesInitialized = true;

-		}

-

-		EList<EObject> contents = xmiResource.getContents();

-		setModelElements(contents);

-

-		if (!resourceHasIds) {

-			// save, in order to write IDs back into resource

-			ModelUtil.saveResource(xmiResource, ModelUtil.getResourceLogger());

-		}

-	}

-

-	/**

-	 * 

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#getModelElements()

-	 */

-	public abstract EList<EObject> getModelElements();

-

-	/**

-	 * Sets the model elements of this collection.

-	 * 

-	 * @param modelElements

-	 *            the new list of model elements the collection should hold

-	 */

-	protected abstract void setModelElements(EList<EObject> modelElements);

-

-	/**

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#addModelElement(org.eclipse.emf.ecore.EObject)

-	 */

-	public void addModelElement(EObject eObject) {

-		getModelElements().add(eObject);

-	}

-

-	/**

-	 * 

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#containsInstance(org.eclipse.emf.ecore.EObject)

-	 */

-	public boolean contains(EObject modelElement) {

-		return getEObjectsCache().contains(modelElement);

-	}

-

-	/**

-	 * 

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#contains(org.eclipse.emf.emfstore.internal.common.model.ModelElementId)

-	 */

-	public boolean contains(ModelElementId id) {

-		if (!isCacheInitialized()) {

-			initMapping();

-		}

-		return getIdToEObjectCache().containsKey(id);

-	}

-

-	/**

-	 * 

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#getDeletedModelElementId(org.eclipse.emf.ecore.EObject)

-	 */

-	public ModelElementId getDeletedModelElementId(EObject deletedModelElement) {

-

-		String id = allocatedEObjectToIdMap.get(deletedModelElement);

-

-		if (id != null) {

-			ModelElementId modelElementId = ModelFactory.eINSTANCE.createModelElementId();

-			modelElementId.setId(id);

-			return modelElementId;

-		}

-

-		return ModelUtil.getSingletonModelElementId(deletedModelElement);

-	}

-

-	/**

-	 * Get the deleted model element with the given id from the collection.

-	 * 

-	 * @param modelElementId

-	 *            a {@link ModelElementId}

-	 * @return the deleted model element or null if it is not in the project

-	 */

-	public EObject getDeletedModelElement(ModelElementId modelElementId) {

-

-		if (modelElementId == null) {

-			return null;

-		}

-

-		EObject eObject = allocatedIdToEObjectMap.get(modelElementId);

-		return eObject != null ? eObject : ModelUtil.getSingleton(modelElementId);

-	}

-

-	/**

-	 * 

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#getModelElementId(org.eclipse.emf.ecore.EObject)

-	 */

-	public ModelElementId getModelElementId(EObject eObject) {

-

-		// EObject _is_ project -> assign magic ModelElementId

-		if (this == eObject) {

-			ModelElementId modelElementId = getNewModelElementID();

-			modelElementId.setId("001");

-			return modelElementId;

-		}

-

-		if (!eObjectToIdMap.containsKey(eObject) && !isCacheInitialized()) {

-

-			// EObject contained in project, load ID from resource

-			try {

-				Resource resource = eObject.eResource();

-

-				// EM: is this a potential error case we have to consider?

-				if (!(resource instanceof XMIResource)) {

-					return null;

-				}

-

-				XMIResource xmiResource = (XMIResource) resource;

-				ModelUtil.loadResource(xmiResource, ModelUtil.getResourceLogger());

-				ModelElementId modelElementId = getNewModelElementID();

-				String id = xmiResource.getID(eObject);

-

-				if (id != null) {

-					// change generated ID if one has been found in the resource

-					modelElementId.setId(id);

-				}

-

-				eObjectToIdMap.put(eObject, modelElementId.getId());

-				return modelElementId;

-

-			} catch (IOException e) {

-				throw new RuntimeException("Couldn't load resource for model element " + eObject);

-			}

-		}

-

-		String id = eObjectToIdMap.get(eObject);

-		ModelElementId modelElementId = getNewModelElementID();

-		modelElementId.setId(id);

-

-		return id != null ? modelElementId : ModelUtil.getSingletonModelElementId(eObject);

-	}

-

-	/**

-	 * 

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#getModelElement(org.eclipse.emf.emfstore.internal.common.model.ModelElementId)

-	 */

-	public EObject getModelElement(ModelElementId modelElementId) {

-

-		if (modelElementId == null) {

-			return null;

-		}

-

-		if (!isCacheInitialized()) {

-			initMapping();

-		}

-

-		EObject eObject = getIdToEObjectCache().get(modelElementId.getId());

-

-		return eObject != null ? eObject : ModelUtil.getSingleton(modelElementId);

-	}

-

-	/**

-	 * 

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#deleteModelElement(org.eclipse.emf.ecore.EObject)

-	 */

-	public void deleteModelElement(final EObject modelElement) {

-		if (!this.contains(modelElement)) {

-			throw new IllegalArgumentException("Cannot delete a model element that is not contained in this project.");

-		}

-

-		// remove cross references

-		ModelUtil.deleteOutgoingCrossReferences(this, modelElement);

-		Collection<Setting> crossReferences = UsageCrossReferencer.find(modelElement, this);

-		ModelUtil.deleteIncomingCrossReferencesFromParent(crossReferences, modelElement);

-

-		// remove containment

-		EObject containerModelElement = ModelUtil.getContainerModelElement(modelElement);

-		if (containerModelElement == null) {

-			// removeModelElementAndChildrenFromCache(modelElement);

-			// getEobjectsIdMap().remove(modelElement);

-			this.getModelElements().remove(modelElement);

-		} else {

-			EReference containmentFeature = modelElement.eContainmentFeature();

-			if (containmentFeature.isMany()) {

-				EList<?> containmentList = (EList<?>) containerModelElement.eGet(containmentFeature);

-				containmentList.remove(modelElement);

-			} else {

-				containerModelElement.eSet(containmentFeature, null);

-			}

-

-			removeModelElementAndChildrenFromResource(modelElement);

-		}

-	}

-

-	/**

-	 * Removes the the given {@link EObject} and all its contained children from

-	 * their respective {@link XMIResource}s.

-	 * 

-	 * @param eObject

-	 *            the {@link EObject} to remove

-	 */

-	public void removeModelElementAndChildrenFromResource(EObject eObject) {

-		Set<EObject> children = ModelUtil.getAllContainedModelElements(eObject, false);

-		for (EObject child : children) {

-			removeModelElementFromResource(child);

-		}

-		removeModelElementFromResource(eObject);

-

-	}

-

-	/**

-	 * Removes the the given {@link EObject} from its {@link XMIResource}.

-	 * 

-	 * @param xmiResource

-	 *            the {@link EObject}'s resource

-	 * @param eObject

-	 *            the {@link EObject} to remove

-	 */

-	private void removeModelElementFromResource(EObject eObject) {

-

-		if (!(eObject.eResource() instanceof XMIResource)) {

-			return;

-		}

-

-		XMIResource xmiResource = (XMIResource) eObject.eResource();

-

-		if (xmiResource.getURI() == null) {

-			return;

-		}

-

-		xmiResource.setID(eObject, null);

-

-		try {

-			ModelUtil.saveResource(xmiResource, ModelUtil.getResourceLogger());

-		} catch (IOException e) {

-			throw new RuntimeException("XMI Resource for model element " + eObject + " could not be saved. "

-				+ "Reason: " + e.getMessage());

-		}

-	}

-

-	/**

-	 * Returns the {@link ModelElementId} for the given model element. If no

-	 * such ID exists, a new one will be created.

-	 * 

-	 * @param modelElement

-	 *            a model element to fetch a {@link ModelElementId} for

-	 * @return the {@link ModelElementId} for the given model element

-	 */

-	private ModelElementId getIdForModelElement(EObject modelElement) {

-

-		Resource resource = modelElement.eResource();

-

-		if (resource != null && resource instanceof XMIResource) {

-			// resource available, read ID

-			XMIResource xmiResource = (XMIResource) resource;

-			try {

-				ModelUtil.loadResource(xmiResource, ModelUtil.getResourceLogger());

-			} catch (IOException e) {

-				throw new RuntimeException("Resource of model element " + modelElement + " couldn't be loaded");

-			}

-			String id = xmiResource.getID(modelElement);

-			if (id != null) {

-				ModelElementId objId = getNewModelElementID();

-				objId.setId(id);

-				return objId;

-			}

-		}

-

-		// create new ID

-		return getNewModelElementID();

-	}

-

-	/**

-	 * 

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#getAllModelElements()

-	 */

-	public Set<EObject> getAllModelElements() {

-		if (!isCacheInitialized()) {

-			initMapping();

-		}

-

-		return Collections.unmodifiableSet(eObjectToIdMap.keySet());

-	}

-

-	/**

-	 * 

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#getAllModelElementsByClass(org.eclipse.emf.ecore.EClass,

-	 *      org.eclipse.emf.common.util.EList)

-	 */

-	public <T extends EObject> EList<T> getAllModelElementsByClass(EClass modelElementClass, EList<T> list) {

-		return getAllModelElementsByClass(modelElementClass, list, true);

-	}

-

-	/**

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.internal.common.model.Project#getModelElementsByClass(org.eclipse.emf.ecore.EClass)

-	 * @generated NOT

-	 */

-	// cast below is guarded by sanity check

-	@SuppressWarnings("unchecked")

-	public <T extends EObject> EList<T> getModelElementsByClass(EClass modelElementClass, EList<T> list) {

-

-		for (EObject modelElement : this.getModelElements()) {

-			if (modelElementClass.isInstance(modelElement)) {

-				list.add((T) modelElement);

-			}

-		}

-		return list;

-	}

-

-	/**

-	 * 

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#getAllModelElementsByClass(org.eclipse.emf.ecore.EClass,

-	 *      org.eclipse.emf.common.util.EList, java.lang.Boolean)

-	 */

-	// two casts below are guarded by initial sanity check and if statement

-	@SuppressWarnings("unchecked")

-	public <T extends EObject> EList<T> getAllModelElementsByClass(EClass modelElementClass, EList<T> list,

-		Boolean subclasses) {

-

-		if (subclasses) {

-			for (EObject modelElement : getAllModelElements()) {

-				if (modelElementClass.isInstance(modelElement)) {

-					list.add((T) modelElement);

-				}

-			}

-		} else {

-			for (EObject modelElement : getAllModelElements()) {

-				if (modelElement.eClass() == modelElementClass) {

-					list.add((T) modelElement);

-				}

-			}

-		}

-

-		return list;

-	}

-

-	/**

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.common.model.ESObjectContainer#getAllModelElementsByClass(java.lang.Class)

-	 */

-	public <T extends EObject> Set<T> getAllModelElementsByClass(Class<T> modelElementClass) {

-		return getAllModelElementsByClass(modelElementClass, true);

-	}

-

-	/**

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.common.model.ESObjectContainer#getAllModelElementsByClass(java.lang.Class,

-	 *      java.lang.Boolean)

-	 */

-	@SuppressWarnings("unchecked")

-	public <T extends EObject> Set<T> getAllModelElementsByClass(Class<T> modelElementClass, Boolean includeSubclasses) {

-		LinkedHashSet<T> result = new LinkedHashSet<T>();

-		if (includeSubclasses) {

-			for (EObject modelElement : getAllModelElements()) {

-				if (modelElementClass.isInstance(modelElement)) {

-					result.add((T) modelElement);

-				}

-			}

-		} else {

-			for (EObject modelElement : getAllModelElements()) {

-				if (modelElement.getClass() == modelElementClass) {

-					result.add((T) modelElement);

-				}

-			}

-		}

-		return result;

-	}

-

-	/**

-	 * Whether the cache has been initialized.

-	 * 

-	 * @return true, if the cache is initialized, false otherwise

-	 */

-	protected boolean isCacheInitialized() {

-		return cachesInitialized;

-	}

-

-	/**

-	 * Returns the cache that maps {@link ModelElementId} to model elements.

-	 * 

-	 * @return a map containing mappings from {@link ModelElementId}s to model

-	 *         element

-	 */

-	protected Map<String, EObject> getIdToEObjectCache() {

-		if (!isCacheInitialized()) {

-			initMapping();

-		}

-

-		return idToEObjectMap;

-	}

-

-	/**

-	 * Returns the model element cache.

-	 * 

-	 * @return a set containing all model elements

-	 */

-	protected Set<EObject> getEObjectsCache() {

-		if (!isCacheInitialized()) {

-			initMapping();

-		}

-

-		return eObjectToIdMap.keySet();

-	}

-

-	/**

-	 * 

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#initMapping()

-	 */

-	public void initMapping() {

-

-		if (isCacheInitialized()) {

-			return;

-		}

-

-		for (EObject modelElement : getModelElements()) {

-			putModelElementIntoCache(modelElement);

-		}

-

-		cachesInitialized = true;

-	}

-

-	/**

-	 * Puts the given model element into the collections' caches.

-	 * 

-	 * @param modelElement

-	 *            the model element which should be added to the caches

-	 */

-	protected void putModelElementIntoCache(EObject modelElement) {

-

-		// put model element into cache

-		ModelElementId modelElementId = getIdForModelElement(modelElement);

-		putIntoCaches(modelElement, modelElementId.getId());

-

-		// put children of model element into cache

-		TreeIterator<EObject> it = modelElement.eAllContents();

-

-		while (it.hasNext()) {

-			EObject obj = it.next();

-			ModelElementId id = getIdForModelElement(obj);

-			putIntoCaches(obj, id.getId());

-		}

-	}

-

-	/**

-	 * Adds a model element and all its children to the caches.

-	 * 

-	 * @param modelElement

-	 *            the model element, that should get added to the caches

-	 */

-	protected void addModelElementAndChildrenToCache(EObject modelElement) {

-

-		HashSet<String> removableIds = new LinkedHashSet<String>();

-

-		Set<EObject> containedModelElements = ModelUtil.getAllContainedModelElements(modelElement, false);

-		containedModelElements.add(modelElement);

-

-		for (EObject child : containedModelElements) {

-

-			// first check whether ID should be reassigned

-			String childId = allocatedEObjectToIdMap.get(child);

-

-			if (childId == null) {

-				// if not, create a new ID

-				childId = getNewModelElementID().getId();

-			} else {

-				removableIds.add(childId);

-			}

-

-			if (isCacheInitialized()) {

-				putIntoCaches(child, childId);

-			}

-		}

-

-		// remove all IDs that are in use now

-		for (String modelElementId : removableIds) {

-			EObject eObject = allocatedIdToEObjectMap.get(modelElementId);

-			allocatedEObjectToIdMap.remove(eObject);

-		}

-

-		allocatedIdToEObjectMap.keySet().removeAll(removableIds);

-	}

-

-	/**

-	 * 

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#initCaches(java.util.Map, java.util.Map)

-	 */

-	public void initMapping(Map<EObject, String> eObjectToIdMap, Map<String, EObject> idToEObjectMap) {

-		cachesInitialized = true;

-		this.eObjectToIdMap = eObjectToIdMap;

-		this.idToEObjectMap = idToEObjectMap;

-	}

-

-	/**

-	 * Creates a mapping for the given model element and the given {@link ModelElementId} within the cache.

-	 * 

-	 * @param modelElement

-	 *            a model element

-	 * @param modelElementId

-	 *            a {@link ModelElementId}

-	 */

-	protected void putIntoCaches(EObject modelElement, String modelElementId) {

-		eObjectToIdMap.put(modelElement, modelElementId);

-		idToEObjectMap.put(modelElementId, modelElement);

-	}

-

-	/**

-	 * Copies the collection.

-	 * 

-	 * @param <T>

-	 *            a collection type

-	 * @return the copied collection instance

-	 */

-	@SuppressWarnings("unchecked")

-	public <T extends IdEObjectCollection> T copy() {

-		Copier copier = new IdEObjectCollectionCopier();

-		T result = (T) copier.copy(this);

-		((IdEObjectCollectionImpl) result).cachesInitialized = true;

-		copier.copyReferences();

-		return result;

-	}

-

-	/**

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#dispose()

-	 */

-	public void dispose() {

-		eObjectToIdMap.clear();

-		idToEObjectMap.clear();

-		clearAllocatedCaches();

-		cachesInitialized = false;

-	}

-

-	/**

-	 * Removes a model element and all its children from the cache.

-	 * 

-	 * @param modelElement

-	 *            a model element to be removed from the cache

-	 */

-	protected void removeModelElementAndChildrenFromCache(EObject modelElement) {

-

-		if (allocatedEObjectToIdMap.containsKey(modelElement)) {

-			return;

-		}

-

-		removeFromCaches(modelElement);

-

-		for (EObject child : ModelUtil.getAllContainedModelElements(modelElement, false)) {

-			removeFromCaches(child);

-		}

-	}

-

-	/**

-	 * Removes the given model element from the caches.

-	 * 

-	 * @param modelElement

-	 *            t#he model element to be removed from the caches

-	 */

-	private void removeFromCaches(EObject modelElement) {

-		if (isCacheInitialized()) {

-			ModelElementId id = this.getModelElementId(modelElement);

-

-			putIntoAllocatedCaches(modelElement, id);

-

-			getEObjectsCache().remove(modelElement);

-			getIdToEObjectCache().remove(id.getId());

-		}

-	}

-

-	/**

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#allocateModelElementIds(java.util.Map)

-	 */

-	public void allocateModelElementIds(Map<EObject, ModelElementId> eObjectToIdMapping) {

-		for (Map.Entry<EObject, ModelElementId> entry : eObjectToIdMapping.entrySet()) {

-			EObject modelElement = entry.getKey();

-			ModelElementId modelElementId = entry.getValue();

-

-			Boolean isAlreadyContained = getModelElement(modelElementId) != null;

-

-			if (isAlreadyContained) {

-				eObjectToIdMap.put(modelElement, modelElementId.getId());

-				idToEObjectMap.put(modelElementId.getId(), modelElement);

-			}

-

-			// do this even if the model element is already contained;

-			// this is the case when a copied instance of the model element gets

-			// added again

-			putIntoAllocatedCaches(modelElement, modelElementId);

-		}

-	}

-

-	/**

-	 * 

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#disallocateModelElementIds(java.util.Set)

-	 */

-	public void disallocateModelElementIds(Set<ModelElementId> modelElementIds) {

-		for (ModelElementId modelElementId : modelElementIds) {

-			allocatedIdToEObjectMap.remove(modelElementId.getId());

-			allocatedEObjectToIdMap.values().remove(modelElementId.getId());

-		}

-	}

-

-	/**

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#forceClearAllocatedCaches()

-	 */

-	public void clearAllocatedCaches() {

-		allocatedEObjectToIdMap.clear();

-		allocatedIdToEObjectMap.clear();

-	}

-

-	private void putIntoAllocatedCaches(EObject modelElement, ModelElementId modelElementId) {

-		allocatedEObjectToIdMap.put(modelElement, modelElementId.getId());

-		allocatedIdToEObjectMap.put(modelElementId.getId(), modelElement);

-	}

-

-	/**

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.common.model.ESModelElementIdToEObjectMapping#getEObjectId(org.eclipse.emf.ecore.EObject)

-	 */

-	public String getEObjectId(EObject eObject) {

-		ModelElementId modelElementId = getModelElementId(eObject);

-

-		if (modelElementId != null) {

-			return modelElementId.getId();

-		}

-

-		return null;

-	}

-

-	private ModelElementId getNewModelElementID() {

-		// if there is registered modelElementIdGenerator, use it

-		if (modelElementIdGenerator != null) {

-			ESModelElementIdImpl modelElementId =

-				(ESModelElementIdImpl) modelElementIdGenerator.generateModelElementId(this);

-			return modelElementId.toInternalAPI();

-		}

-

-		// else create it via ModelFactory

-		return ModelFactory.eINSTANCE.createModelElementId();

-	}

-

-	/**

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.common.model.ESModelElementIdToEObjectMapping#get(org.eclipse.emf.emfstore.internal.common.model.ModelElementId)

-	 */

-	public EObject get(ModelElementId modelElementId) {

-		EObject modelElement = getModelElement(modelElementId);

-		if (modelElement != null) {

-			return modelElement;

-		}

-		return getDeletedModelElement(modelElementId);

-	}

-

-	/**

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#getIdToEObjectMapping()

-	 */

-	public Map<String, EObject> getIdToEObjectMapping() {

-		Map<String, EObject> mapping = new LinkedHashMap<String, EObject>(idToEObjectMap);

-		mapping.putAll(new LinkedHashMap<String, EObject>(allocatedIdToEObjectMap));

-		return mapping;

-	}

-

-	/**

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#getEObjectToIdMapping()

-	 */

-	public Map<EObject, String> getEObjectToIdMapping() {

-		Map<EObject, String> mapping = new LinkedHashMap<EObject, String>(eObjectToIdMap);

-		mapping.putAll(new LinkedHashMap<EObject, String>(allocatedEObjectToIdMap));

-		return mapping;

-	}

-

-	/**

-	 * {@inheritDoc}

-	 * 

-	 * @see org.eclipse.emf.emfstore.common.model.ESObjectContainer#removeModelElement(org.eclipse.emf.ecore.EObject)

-	 */

-	public void removeModelElement(EObject modelElement) {

-		getModelElements().remove(modelElement);

-	}

-

+/*******************************************************************************
+ * Copyright (c) 2008-2011 Chair for Applied Software Engineering,
+ * Technische Universitaet Muenchen.
+ * 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:
+ * Maximilian Koegel, Edgar Mueller - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.internal.common.model.impl;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature.Setting;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil.Copier;
+import org.eclipse.emf.ecore.util.EcoreUtil.UsageCrossReferencer;
+import org.eclipse.emf.ecore.xmi.XMIResource;
+import org.eclipse.emf.emfstore.common.extensionpoint.ESExtensionElement;
+import org.eclipse.emf.emfstore.common.extensionpoint.ESExtensionPoint;
+import org.eclipse.emf.emfstore.common.model.ESModelElementIdGenerator;
+import org.eclipse.emf.emfstore.internal.common.ESDisposable;
+import org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection;
+import org.eclipse.emf.emfstore.internal.common.model.ModelElementId;
+import org.eclipse.emf.emfstore.internal.common.model.ModelFactory;
+import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil;
+
+/**
+ * Implementation of an ID based storage mechanism for {@link EObject}s.
+ * 
+ * @author emueller
+ * @author mkoegel
+ */
+public abstract class IdEObjectCollectionImpl extends EObjectImpl implements IdEObjectCollection, ESDisposable {
+
+	/**
+	 * The extension point id to configure the {@link ESModelElementIdGenerator}.
+	 */
+	public static final String MODELELEMENTID_GENERATOR_EXTENSIONPOINT = "org.eclipse.emf.emfstore.common.model.modelelementIdGenerator";
+
+	/**
+	 * The attribute identifying the class of the {@link ESModelElementIdGenerator} extension point.
+	 */
+	public static final String MODELELEMENTID_GENERATOR_CLASS_ATTRIBUTE = "class";
+
+	// Caches
+	private Map<EObject, String> eObjectToIdMap;
+	private Map<String, EObject> idToEObjectMap;
+
+	// These caches will be used to assign specific IDs to newly created EObjects.
+	// Additionally, IDs of deleted model elements will also be put into these caches, in case
+	// the deleted elements will be restored during a command.
+	private final Map<EObject, String> allocatedEObjectToIdMap;
+	private final Map<String, EObject> allocatedIdToEObjectMap;
+
+	private boolean cachesInitialized;
+
+	/**
+	 * A {@link ESModelElementIdGenerator} for other plugins to register a special ID generation.
+	 */
+	private ESModelElementIdGenerator<ModelElementId> modelElementIdGenerator;
+
+	/**
+	 * Constructor.
+	 */
+	public IdEObjectCollectionImpl() {
+		eObjectToIdMap = new LinkedHashMap<EObject, String>();
+		idToEObjectMap = new LinkedHashMap<String, EObject>();
+
+		allocatedEObjectToIdMap = new LinkedHashMap<EObject, String>();
+		allocatedIdToEObjectMap = new LinkedHashMap<String, EObject>();
+
+		final ESExtensionElement element = new ESExtensionPoint(MODELELEMENTID_GENERATOR_EXTENSIONPOINT)
+			.getElementWithHighestPriority();
+		if (element != null) {
+			modelElementIdGenerator = element.getClass(MODELELEMENTID_GENERATOR_CLASS_ATTRIBUTE,
+				ESModelElementIdGenerator.class);
+		}
+	}
+
+	/**
+	 * Constructor. Adds the contents of the given {@link XMIResource} as model
+	 * elements to the collection. If the {@link XMIResource} also has XMI IDs
+	 * assigned to the {@link EObject}s it contains, they will be used for
+	 * creating the {@link ModelElementId}s within the project, if not, the {@link ModelElementId}s will get created on
+	 * the fly.
+	 * 
+	 * @param xmiResource
+	 *            a {@link XMIResource}
+	 * @throws IOException
+	 *             if the given {@link XMIResource} could not be loaded
+	 */
+	public IdEObjectCollectionImpl(XMIResource xmiResource) throws IOException {
+		this();
+		boolean resourceHasIds = false;
+		try {
+			if (!xmiResource.isLoaded()) {
+				ModelUtil.loadResource(xmiResource, ModelUtil.getResourceLogger());
+			}
+		} catch (final IOException e) {
+			ModelUtil.logException(String.format("XMIResource %s could not be loaded.", xmiResource.getURI()), e);
+			throw e;
+		}
+		final TreeIterator<EObject> it = xmiResource.getAllContents();
+		while (it.hasNext()) {
+			final EObject eObject = it.next();
+
+			if (ModelUtil.isIgnoredDatatype(eObject)) {
+				continue;
+			}
+
+			final String id = xmiResource.getID(eObject);
+			final ModelElementId eObjectId = getNewModelElementID();
+
+			if (id != null) {
+				eObjectId.setId(id);
+				resourceHasIds = true;
+			} else {
+				xmiResource.setID(eObject, eObjectId.getId());
+			}
+
+			putIntoCaches(eObject, eObjectId.getId());
+		}
+
+		if (resourceHasIds) {
+			cachesInitialized = true;
+		}
+
+		final EList<EObject> contents = xmiResource.getContents();
+		setModelElements(contents);
+
+		if (!resourceHasIds) {
+			// save, in order to write IDs back into resource
+			ModelUtil.saveResource(xmiResource, ModelUtil.getResourceLogger());
+		}
+	}
+
+	/**
+	 * 
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#getModelElements()
+	 */
+	public abstract EList<EObject> getModelElements();
+
+	/**
+	 * Sets the model elements of this collection.
+	 * 
+	 * @param modelElements
+	 *            the new list of model elements the collection should hold
+	 */
+	protected abstract void setModelElements(EList<EObject> modelElements);
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#addModelElement(org.eclipse.emf.ecore.EObject)
+	 */
+	public void addModelElement(EObject eObject) {
+		getModelElements().add(eObject);
+	}
+
+	/**
+	 * 
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#contains(org.eclipse.emf.ecore.EObject)
+	 */
+	public boolean contains(EObject modelElement) {
+		return getEObjectsCache().contains(modelElement);
+	}
+
+	/**
+	 * 
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#contains(org.eclipse.emf.emfstore.internal.common.model.ModelElementId)
+	 */
+	public boolean contains(ModelElementId id) {
+		if (!isCacheInitialized()) {
+			initMapping();
+		}
+		return getIdToEObjectCache().containsKey(id);
+	}
+
+	/**
+	 * Returns the ID of a deleted model element.
+	 * <b>NOTE</b>: If commands are used, IDs of deleted model elements are only available during command execution.
+	 * If commands aren't used IDs of deleted model elements remain as long available until either a share,
+	 * a commit or an update happens.
+	 * 
+	 * @param deletedModelElement
+	 *            the model element that has been deleted
+	 * @return the ID of the deleted model element or {@code null} if no such ID exists
+	 */
+	public ModelElementId getDeletedModelElementId(EObject deletedModelElement) {
+
+		final String id = allocatedEObjectToIdMap.get(deletedModelElement);
+
+		if (id != null) {
+			final ModelElementId modelElementId = ModelFactory.eINSTANCE.createModelElementId();
+			modelElementId.setId(id);
+			return modelElementId;
+		}
+
+		return ModelUtil.getSingletonModelElementId(deletedModelElement);
+	}
+
+	/**
+	 * Returns the deleted model element by means of an ID.
+	 * <b>NOTE</b>: If commands are used, deleted model elements are only available during command execution.
+	 * If commands aren't used IDs of deleted model elements remain as long available until either a share,
+	 * a commit or an update happens.
+	 * 
+	 * @param deletedModelElementId
+	 *            the ID of an already deleted model element
+	 * @return the deleted model element or {@code null} if no such element exists
+	 */
+	public EObject getDeletedModelElement(ModelElementId deletedModelElementId) {
+
+		if (deletedModelElementId == null) {
+			return null;
+		}
+
+		final EObject eObject = allocatedIdToEObjectMap.get(deletedModelElementId);
+		return eObject != null ? eObject : ModelUtil.getSingleton(deletedModelElementId);
+	}
+
+	/**
+	 * 
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#getModelElementId(org.eclipse.emf.ecore.EObject)
+	 */
+	public ModelElementId getModelElementId(EObject eObject) {
+
+		// EObject _is_ project -> assign magic ModelElementId
+		if (this == eObject) {
+			final ModelElementId modelElementId = getNewModelElementID();
+			modelElementId.setId("001");
+			return modelElementId;
+		}
+
+		if (!eObjectToIdMap.containsKey(eObject) && !isCacheInitialized()) {
+
+			// EObject contained in project, load ID from resource
+			try {
+				final Resource resource = eObject.eResource();
+
+				// EM: is this a potential error case we have to consider?
+				if (!(resource instanceof XMIResource)) {
+					return null;
+				}
+
+				final XMIResource xmiResource = (XMIResource) resource;
+				ModelUtil.loadResource(xmiResource, ModelUtil.getResourceLogger());
+				final ModelElementId modelElementId = getNewModelElementID();
+				final String id = xmiResource.getID(eObject);
+
+				if (id != null) {
+					// change generated ID if one has been found in the resource
+					modelElementId.setId(id);
+				}
+
+				eObjectToIdMap.put(eObject, modelElementId.getId());
+				return modelElementId;
+
+			} catch (final IOException e) {
+				throw new RuntimeException("Couldn't load resource for model element " + eObject);
+			}
+		}
+
+		final String id = eObjectToIdMap.get(eObject);
+		final ModelElementId modelElementId = getNewModelElementID();
+		modelElementId.setId(id);
+
+		return id != null ? modelElementId : ModelUtil.getSingletonModelElementId(eObject);
+	}
+
+	/**
+	 * 
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#getModelElement(org.eclipse.emf.emfstore.internal.common.model.ModelElementId)
+	 */
+	public EObject getModelElement(ModelElementId modelElementId) {
+
+		if (modelElementId == null) {
+			return null;
+		}
+
+		if (!isCacheInitialized()) {
+			initMapping();
+		}
+
+		final EObject eObject = getIdToEObjectCache().get(modelElementId.getId());
+
+		return eObject != null ? eObject : ModelUtil.getSingleton(modelElementId);
+	}
+
+	/**
+	 * 
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#deleteModelElement(org.eclipse.emf.ecore.EObject)
+	 */
+	public void deleteModelElement(final EObject modelElement) {
+		if (!this.contains(modelElement)) {
+			throw new IllegalArgumentException("Cannot delete a model element that is not contained in this project.");
+		}
+
+		// remove cross references
+		ModelUtil.deleteOutgoingCrossReferences(this, modelElement);
+		final Collection<Setting> crossReferences = UsageCrossReferencer.find(modelElement, this);
+		ModelUtil.deleteIncomingCrossReferencesFromParent(crossReferences, modelElement);
+
+		// remove containment
+		final EObject containerModelElement = ModelUtil.getContainerModelElement(modelElement);
+		if (containerModelElement == null) {
+			// removeModelElementAndChildrenFromCache(modelElement);
+			// getEobjectsIdMap().remove(modelElement);
+			getModelElements().remove(modelElement);
+		} else {
+			final EReference containmentFeature = modelElement.eContainmentFeature();
+			if (containmentFeature.isMany()) {
+				final EList<?> containmentList = (EList<?>) containerModelElement.eGet(containmentFeature);
+				containmentList.remove(modelElement);
+			} else {
+				containerModelElement.eSet(containmentFeature, null);
+			}
+
+			removeModelElementAndChildrenFromResource(modelElement);
+		}
+	}
+
+	/**
+	 * Removes the the given {@link EObject} and all its contained children from
+	 * their respective {@link XMIResource}s.
+	 * 
+	 * @param eObject
+	 *            the {@link EObject} to remove
+	 */
+	public void removeModelElementAndChildrenFromResource(EObject eObject) {
+		final Set<EObject> children = ModelUtil.getAllContainedModelElements(eObject, false);
+		for (final EObject child : children) {
+			removeModelElementFromResource(child);
+		}
+		removeModelElementFromResource(eObject);
+
+	}
+
+	/**
+	 * Removes the the given {@link EObject} from its {@link XMIResource}.
+	 * 
+	 * @param xmiResource
+	 *            the {@link EObject}'s resource
+	 * @param eObject
+	 *            the {@link EObject} to remove
+	 */
+	private void removeModelElementFromResource(EObject eObject) {
+
+		if (!(eObject.eResource() instanceof XMIResource)) {
+			return;
+		}
+
+		final XMIResource xmiResource = (XMIResource) eObject.eResource();
+
+		if (xmiResource.getURI() == null) {
+			return;
+		}
+
+		xmiResource.setID(eObject, null);
+
+		try {
+			ModelUtil.saveResource(xmiResource, ModelUtil.getResourceLogger());
+		} catch (final IOException e) {
+			throw new RuntimeException("XMI Resource for model element " + eObject + " could not be saved. "
+				+ "Reason: " + e.getMessage());
+		}
+	}
+
+	/**
+	 * Returns the {@link ModelElementId} for the given model element. If no
+	 * such ID exists, a new one will be created.
+	 * 
+	 * @param modelElement
+	 *            a model element to fetch a {@link ModelElementId} for
+	 * @return the {@link ModelElementId} for the given model element
+	 */
+	private ModelElementId getIdForModelElement(EObject modelElement) {
+
+		final Resource resource = modelElement.eResource();
+
+		if (resource != null && resource instanceof XMIResource) {
+			// resource available, read ID
+			final XMIResource xmiResource = (XMIResource) resource;
+			try {
+				ModelUtil.loadResource(xmiResource, ModelUtil.getResourceLogger());
+			} catch (final IOException e) {
+				throw new RuntimeException("Resource of model element " + modelElement + " couldn't be loaded");
+			}
+			final String id = xmiResource.getID(modelElement);
+			if (id != null) {
+				final ModelElementId objId = getNewModelElementID();
+				objId.setId(id);
+				return objId;
+			}
+		}
+
+		// create new ID
+		return getNewModelElementID();
+	}
+
+	/**
+	 * 
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#getAllModelElements()
+	 */
+	public Set<EObject> getAllModelElements() {
+		if (!isCacheInitialized()) {
+			initMapping();
+		}
+
+		return Collections.unmodifiableSet(eObjectToIdMap.keySet());
+	}
+
+	/**
+	 * 
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#getAllModelElementsByClass(org.eclipse.emf.ecore.EClass,
+	 *      org.eclipse.emf.common.util.EList)
+	 */
+	public <T extends EObject> EList<T> getAllModelElementsByClass(EClass modelElementClass, EList<T> list) {
+		return getAllModelElementsByClass(modelElementClass, list, true);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.internal.common.model.Project#getModelElementsByClass(org.eclipse.emf.ecore.EClass)
+	 * @generated NOT
+	 */
+	// cast below is guarded by sanity check
+	@SuppressWarnings("unchecked")
+	public <T extends EObject> EList<T> getModelElementsByClass(EClass modelElementClass, EList<T> list) {
+
+		for (final EObject modelElement : getModelElements()) {
+			if (modelElementClass.isInstance(modelElement)) {
+				list.add((T) modelElement);
+			}
+		}
+		return list;
+	}
+
+	/**
+	 * 
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#getAllModelElementsByClass(org.eclipse.emf.ecore.EClass,
+	 *      org.eclipse.emf.common.util.EList, java.lang.Boolean)
+	 */
+	// two casts below are guarded by initial sanity check and if statement
+	@SuppressWarnings("unchecked")
+	public <T extends EObject> EList<T> getAllModelElementsByClass(EClass modelElementClass, EList<T> list,
+		Boolean subclasses) {
+
+		if (subclasses) {
+			for (final EObject modelElement : getAllModelElements()) {
+				if (modelElementClass.isInstance(modelElement)) {
+					list.add((T) modelElement);
+				}
+			}
+		} else {
+			for (final EObject modelElement : getAllModelElements()) {
+				if (modelElement.eClass() == modelElementClass) {
+					list.add((T) modelElement);
+				}
+			}
+		}
+
+		return list;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.common.model.ESObjectContainer#getAllModelElementsByClass(java.lang.Class)
+	 */
+	public <T extends EObject> Set<T> getAllModelElementsByClass(Class<T> modelElementClass) {
+		return getAllModelElementsByClass(modelElementClass, true);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.common.model.ESObjectContainer#getAllModelElementsByClass(java.lang.Class,
+	 *      java.lang.Boolean)
+	 */
+	@SuppressWarnings("unchecked")
+	public <T extends EObject> Set<T> getAllModelElementsByClass(Class<T> modelElementClass, Boolean includeSubclasses) {
+		final LinkedHashSet<T> result = new LinkedHashSet<T>();
+		if (includeSubclasses) {
+			for (final EObject modelElement : getAllModelElements()) {
+				if (modelElementClass.isInstance(modelElement)) {
+					result.add((T) modelElement);
+				}
+			}
+		} else {
+			for (final EObject modelElement : getAllModelElements()) {
+				if (modelElement.getClass() == modelElementClass) {
+					result.add((T) modelElement);
+				}
+			}
+		}
+		return result;
+	}
+
+	/**
+	 * Whether the cache has been initialized.
+	 * 
+	 * @return true, if the cache is initialized, false otherwise
+	 */
+	protected boolean isCacheInitialized() {
+		return cachesInitialized;
+	}
+
+	/**
+	 * Returns the cache that maps {@link ModelElementId} to model elements.
+	 * 
+	 * @return a map containing mappings from {@link ModelElementId}s to model
+	 *         element
+	 */
+	protected Map<String, EObject> getIdToEObjectCache() {
+		if (!isCacheInitialized()) {
+			initMapping();
+		}
+
+		return idToEObjectMap;
+	}
+
+	/**
+	 * Returns the model element cache.
+	 * 
+	 * @return a set containing all model elements
+	 */
+	protected Set<EObject> getEObjectsCache() {
+		if (!isCacheInitialized()) {
+			initMapping();
+		}
+
+		return eObjectToIdMap.keySet();
+	}
+
+	/**
+	 * 
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#initMapping()
+	 */
+	public void initMapping() {
+
+		if (isCacheInitialized()) {
+			return;
+		}
+
+		for (final EObject modelElement : getModelElements()) {
+			putModelElementIntoCache(modelElement);
+		}
+
+		cachesInitialized = true;
+	}
+
+	/**
+	 * Puts the given model element into the collections' caches.
+	 * 
+	 * @param modelElement
+	 *            the model element which should be added to the caches
+	 */
+	protected void putModelElementIntoCache(EObject modelElement) {
+
+		// put model element into cache
+		final ModelElementId modelElementId = getIdForModelElement(modelElement);
+		putIntoCaches(modelElement, modelElementId.getId());
+
+		// put children of model element into cache
+		final TreeIterator<EObject> it = modelElement.eAllContents();
+
+		while (it.hasNext()) {
+			final EObject obj = it.next();
+			final ModelElementId id = getIdForModelElement(obj);
+			putIntoCaches(obj, id.getId());
+		}
+	}
+
+	/**
+	 * Adds a model element and all its children to the caches.
+	 * 
+	 * @param modelElement
+	 *            the model element, that should get added to the caches
+	 */
+	protected void addModelElementAndChildrenToCache(EObject modelElement) {
+
+		final HashSet<String> removableIds = new LinkedHashSet<String>();
+
+		final Set<EObject> containedModelElements = ModelUtil.getAllContainedModelElements(modelElement, false);
+		containedModelElements.add(modelElement);
+
+		for (final EObject child : containedModelElements) {
+
+			// first check whether ID should be reassigned
+			String childId = allocatedEObjectToIdMap.get(child);
+
+			if (childId == null) {
+				// if not, create a new ID
+				childId = getNewModelElementID().getId();
+			} else {
+				removableIds.add(childId);
+			}
+
+			if (isCacheInitialized()) {
+				putIntoCaches(child, childId);
+			}
+		}
+
+		// remove all IDs that are in use now
+		for (final String modelElementId : removableIds) {
+			final EObject eObject = allocatedIdToEObjectMap.get(modelElementId);
+			allocatedEObjectToIdMap.remove(eObject);
+		}
+
+		allocatedIdToEObjectMap.keySet().removeAll(removableIds);
+	}
+
+	/**
+	 * 
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#initMapping(java.util.Map, java.util.Map)
+	 */
+	public void initMapping(Map<EObject, String> eObjectToIdMap, Map<String, EObject> idToEObjectMap) {
+		cachesInitialized = true;
+		this.eObjectToIdMap = eObjectToIdMap;
+		this.idToEObjectMap = idToEObjectMap;
+	}
+
+	/**
+	 * Creates a mapping for the given model element and the given {@link ModelElementId} within the cache.
+	 * 
+	 * @param modelElement
+	 *            a model element
+	 * @param modelElementId
+	 *            a {@link ModelElementId}
+	 */
+	protected void putIntoCaches(EObject modelElement, String modelElementId) {
+		// never overwrite existing IDs
+		if (!eObjectToIdMap.containsKey(modelElement)) {
+			eObjectToIdMap.put(modelElement, modelElementId);
+			idToEObjectMap.put(modelElementId, modelElement);
+		}
+	}
+
+	/**
+	 * Copies the collection.
+	 * 
+	 * @param <T>
+	 *            a collection type
+	 * @return the copied collection instance
+	 */
+	@SuppressWarnings("unchecked")
+	public <T extends IdEObjectCollection> T copy() {
+		final Copier copier = new IdEObjectCollectionCopier();
+		final T result = (T) copier.copy(this);
+		((IdEObjectCollectionImpl) result).cachesInitialized = true;
+		copier.copyReferences();
+		return result;
+	}
+
+	/**
+	 * 
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.internal.common.ESDisposable#dispose()
+	 */
+	public void dispose() {
+		eObjectToIdMap.clear();
+		idToEObjectMap.clear();
+		clearAllocatedCaches();
+		cachesInitialized = false;
+	}
+
+	/**
+	 * Removes a model element and all its children from the cache.
+	 * 
+	 * @param modelElement
+	 *            a model element to be removed from the cache
+	 */
+	protected void removeModelElementAndChildrenFromCache(EObject modelElement) {
+
+		if (allocatedEObjectToIdMap.containsKey(modelElement)) {
+			return;
+		}
+
+		removeFromCaches(modelElement);
+
+		for (final EObject child : ModelUtil.getAllContainedModelElements(modelElement, false)) {
+			removeFromCaches(child);
+		}
+	}
+
+	/**
+	 * Removes the given model element from the caches.
+	 * 
+	 * @param modelElement
+	 *            t#he model element to be removed from the caches
+	 */
+	private void removeFromCaches(EObject modelElement) {
+		if (isCacheInitialized()) {
+			final ModelElementId id = getModelElementId(modelElement);
+
+			putIntoAllocatedCaches(modelElement, id);
+
+			getEObjectsCache().remove(modelElement);
+			getIdToEObjectCache().remove(id.getId());
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#allocateModelElementIds(java.util.Map)
+	 */
+	public void allocateModelElementIds(Map<EObject, ModelElementId> eObjectToIdMapping) {
+		for (final Map.Entry<EObject, ModelElementId> entry : eObjectToIdMapping.entrySet()) {
+			final EObject modelElement = entry.getKey();
+			final ModelElementId modelElementId = entry.getValue();
+
+			final Boolean isAlreadyContained = getModelElement(modelElementId) != null;
+
+			if (isAlreadyContained) {
+				eObjectToIdMap.put(modelElement, modelElementId.getId());
+				idToEObjectMap.put(modelElementId.getId(), modelElement);
+			}
+
+			// do this even if the model element is already contained;
+			// this is the case when a copied instance of the model element gets
+			// added again
+			putIntoAllocatedCaches(modelElement, modelElementId);
+		}
+	}
+
+	/**
+	 * 
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#disallocateModelElementIds(java.util.Set)
+	 */
+	public void disallocateModelElementIds(Set<ModelElementId> modelElementIds) {
+		for (final ModelElementId modelElementId : modelElementIds) {
+			allocatedIdToEObjectMap.remove(modelElementId.getId());
+			allocatedEObjectToIdMap.values().remove(modelElementId.getId());
+		}
+	}
+
+	/**
+	 * 
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#clearAllocatedCaches()
+	 */
+	public void clearAllocatedCaches() {
+		allocatedEObjectToIdMap.clear();
+		allocatedIdToEObjectMap.clear();
+	}
+
+	private void putIntoAllocatedCaches(EObject modelElement, ModelElementId modelElementId) {
+		allocatedEObjectToIdMap.put(modelElement, modelElementId.getId());
+		allocatedIdToEObjectMap.put(modelElementId.getId(), modelElement);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.common.model.ESModelElementIdToEObjectMapping#getEObjectId(org.eclipse.emf.ecore.EObject)
+	 */
+	public String getEObjectId(EObject eObject) {
+		final ModelElementId modelElementId = getModelElementId(eObject);
+
+		if (modelElementId != null) {
+			return modelElementId.getId();
+		}
+
+		return null;
+	}
+
+	private ModelElementId getNewModelElementID() {
+		// if there is registered modelElementIdGenerator, use it
+		if (modelElementIdGenerator != null) {
+			final ESModelElementIdImpl modelElementId =
+				(ESModelElementIdImpl) modelElementIdGenerator.generateModelElementId(this);
+			return modelElementId.toInternalAPI();
+		}
+
+		// else create it via ModelFactory
+		return ModelFactory.eINSTANCE.createModelElementId();
+	}
+
+	/**
+	 * 
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.common.model.ESIdToEObjectMapping#get(java.lang.Object)
+	 */
+	public EObject get(ModelElementId modelElementId) {
+		final EObject modelElement = getModelElement(modelElementId);
+		if (modelElement != null) {
+			return modelElement;
+		}
+		return getDeletedModelElement(modelElementId);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#getIdToEObjectMapping()
+	 */
+	public Map<String, EObject> getIdToEObjectMapping() {
+		final Map<String, EObject> mapping = new LinkedHashMap<String, EObject>(idToEObjectMap);
+		mapping.putAll(new LinkedHashMap<String, EObject>(allocatedIdToEObjectMap));
+		return mapping;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection#getEObjectToIdMapping()
+	 */
+	public Map<EObject, String> getEObjectToIdMapping() {
+		final Map<EObject, String> mapping = new LinkedHashMap<EObject, String>(eObjectToIdMap);
+		mapping.putAll(new LinkedHashMap<EObject, String>(allocatedEObjectToIdMap));
+		return mapping;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.emfstore.common.model.ESObjectContainer#removeModelElement(org.eclipse.emf.ecore.EObject)
+	 */
+	public void removeModelElement(EObject modelElement) {
+		getModelElements().remove(modelElement);
+	}
+
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/impl/NotifiableIdEObjectCollectionImpl.java b/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/impl/NotifiableIdEObjectCollectionImpl.java
index 059c064..c4a405b 100644
--- a/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/impl/NotifiableIdEObjectCollectionImpl.java
+++ b/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/impl/NotifiableIdEObjectCollectionImpl.java
@@ -178,6 +178,11 @@
 
 	@Override
 	public void initMapping() {
+
+		if (isCacheInitialized()) {
+			return;
+		}
+
 		super.initMapping();
 		if (changeNotifier == null) {
 			changeNotifier = new EObjectChangeNotifier(this, this);
diff --git a/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/impl/ProjectImpl.java b/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/impl/ProjectImpl.java
index b308e75..2b301be 100644
--- a/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/impl/ProjectImpl.java
+++ b/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/impl/ProjectImpl.java
@@ -7,10 +7,7 @@
  * http://www.eclipse.org/legal/epl-v10.html
  * 
  * Contributors:
- * naughton
- * shterev
- * emueller
- * koegel
+ * Helmut Naughton, Maximilian Koegel, Edgar Mueller - initial API and implementation
  ******************************************************************************/
 package org.eclipse.emf.emfstore.internal.common.model.impl;
 
@@ -197,8 +194,6 @@
 		return super.eIsSet(featureID);
 	}
 
-	// begin of custom code
-
 	/**
 	 * this methods implements the adapter interface which is needed by the
 	 * navigator.
@@ -258,6 +253,10 @@
 	@Override
 	public void initMapping() {
 
+		if (isCacheInitialized()) {
+			return;
+		}
+
 		for (final EObject modelElement : getCutElements()) {
 			putModelElementIntoCache(modelElement);
 		}
diff --git a/bundles/org.eclipse.emf.emfstore.common/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.common/META-INF/MANIFEST.MF
index 8a46ea0..94cdcb9 100644
--- a/bundles/org.eclipse.emf.emfstore.common/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.common/META-INF/MANIFEST.MF
@@ -2,22 +2,22 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMFStore Common
 Bundle-SymbolicName: org.eclipse.emf.emfstore.common;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-Activator: org.eclipse.emf.emfstore.internal.common.Activator
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)";visibility:=reexport,
  org.eclipse.emf.ecore;bundle-version="[2.5.0,3.0.0)";visibility:=reexport,
  org.eclipse.emf.ecore.xmi;bundle-version="[2.5.0,3.0.0)";visibility:=reexport
 Bundle-ActivationPolicy: lazy
-Export-Package: org.apache.commons.io;version="1.0.2",
+Export-Package: org.apache.commons.io;version="1.0.4",
  org.apache.commons.io.comparator;version="2.0.1",
  org.apache.commons.io.filefilter;version="2.0.1",
  org.apache.commons.io.input;version="2.0.1",
  org.apache.commons.io.monitor;version="2.0.1",
- org.apache.commons.io.output;version="1.0.2",
- org.apache.commons.lang;version="1.0.2",
- org.eclipse.emf.emfstore.common;version="1.0.2",
- org.eclipse.emf.emfstore.common.extensionpoint;version="1.0.2",
- org.eclipse.emf.emfstore.internal.common;version="1.0.2";
+ org.apache.commons.io.output;version="1.0.4",
+ org.apache.commons.lang;version="1.0.4",
+ org.eclipse.emf.emfstore.common;version="1.0.4",
+ org.eclipse.emf.emfstore.common.extensionpoint;version="1.0.4",
+ org.eclipse.emf.emfstore.internal.common;version="1.0.4";
   x-friends:="org.eclipse.emf.emfstore.server.model,
    org.eclipse.emf.emfstore.client,
    org.eclipse.emf.emfstore.client.test,
@@ -25,7 +25,7 @@
    org.eclipse.emf.emfstore.client.ui,
    org.eclipse.emf.emfstore.example.merging,
    org.eclipse.emf.emfstore.common.model",
- org.eclipse.emf.emfstore.internal.common.api;version="1.0.2";
+ org.eclipse.emf.emfstore.internal.common.api;version="1.0.4";
   x-friends:="org.eclipse.emf.emfstore.client.ui,
    org.eclipse.emf.emfstore.server,
    org.eclipse.emf.emfstore.server.model,
@@ -34,7 +34,7 @@
    org.eclipse.emf.emfstore.common.model,
    org.eclipse.emf.emfstore.ecore,
    org.eclipse.emf.emfstore.example.merging",
- org.eclipse.emf.emfstore.internal.common.observer;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.client.test"
+ org.eclipse.emf.emfstore.internal.common.observer;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.client.test"
 Bundle-Vendor: Eclipse Modeling Project
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-ClassPath: lib/commons-io-2.0.1.jar,
diff --git a/bundles/org.eclipse.emf.emfstore.common/pom.xml b/bundles/org.eclipse.emf.emfstore.common/pom.xml
index 9646160..b7f8934 100644
--- a/bundles/org.eclipse.emf.emfstore.common/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.common/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.common</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.ecore/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.ecore/META-INF/MANIFEST.MF
index ee28d83..ec53ae9 100644
--- a/bundles/org.eclipse.emf.emfstore.ecore/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.ecore/META-INF/MANIFEST.MF
@@ -2,13 +2,13 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMFStore ECore Integration
 Bundle-SymbolicName: org.eclipse.emf.emfstore.ecore;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.emf.emfstore.internal.ecore.Activator
-Require-Bundle: org.eclipse.emf.emfstore.common.model;bundle-version="[1.0.2,2.0.0)",
+Require-Bundle: org.eclipse.emf.emfstore.common.model;bundle-version="[1.0.4,2.0.0)",
  org.eclipse.emf.ecore;bundle-version="[2.5.0,3.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-Vendor: Eclipse Modeling Project
-Export-Package: org.eclipse.emf.emfstore.internal.ecore;version="1.0.2";x-internal:=true
+Export-Package: org.eclipse.emf.emfstore.internal.ecore;version="1.0.4";x-internal:=true
diff --git a/bundles/org.eclipse.emf.emfstore.ecore/pom.xml b/bundles/org.eclipse.emf.emfstore.ecore/pom.xml
index 3be7ea2..7aa1f5d 100644
--- a/bundles/org.eclipse.emf.emfstore.ecore/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.ecore/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.ecore</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF
index 2a68210..ad85b93 100644
--- a/bundles/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF
@@ -2,11 +2,11 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Example Hello World
 Bundle-SymbolicName: org.eclipse.emf.emfstore.example.helloworld;singleton:=true
-Bundle-Version: 1.0.2.qualifier
-Require-Bundle: org.eclipse.emf.emfstore.examplemodel;bundle-version="[1.0.2,2.0.0)",
+Bundle-Version: 1.0.4.qualifier
+Require-Bundle: org.eclipse.emf.emfstore.examplemodel;bundle-version="[1.0.4,2.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.emf.emfstore.client.model.edit;bundle-version="[1.0.2,2.0.0)",
+ org.eclipse.emf.emfstore.client.model.edit;bundle-version="[1.0.4,2.0.0)",
  org.eclipse.emf.ecore;bundle-version="[2.5.0,3.0.0)"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-Vendor: Eclipse Modeling Project
-Export-Package: org.eclipse.emf.emfstore.example.helloworld;version="1.0.2"
+Export-Package: org.eclipse.emf.emfstore.example.helloworld;version="1.0.4"
diff --git a/bundles/org.eclipse.emf.emfstore.example.helloworld/pom.xml b/bundles/org.eclipse.emf.emfstore.example.helloworld/pom.xml
index edb814b..47e75eb 100644
--- a/bundles/org.eclipse.emf.emfstore.example.helloworld/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.example.helloworld/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.example.helloworld</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.example.installer/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.example.installer/META-INF/MANIFEST.MF
index 3629956..845f7bc 100644
--- a/bundles/org.eclipse.emf.emfstore.example.installer/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.example.installer/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMFStore example installer
 Bundle-SymbolicName: org.eclipse.emf.emfstore.example.installer;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-Vendor: Eclipse Modeling Project
 Require-Bundle: org.eclipse.ui;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
diff --git a/bundles/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF
index 4249857..38c4dce 100644
--- a/bundles/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF
@@ -2,11 +2,11 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Example Hello World
 Bundle-SymbolicName: org.eclipse.emf.emfstore.example.helloworld;singleton:=true
-Bundle-Version: 1.0.2.qualifie
-Require-Bundle: org.eclipse.emf.emfstore.examplemodel;bundle-version="[1.0.2,2.0.0)",
+Bundle-Version: 1.0.4.qualifie
+Require-Bundle: org.eclipse.emf.emfstore.examplemodel;bundle-version="[1.0.4,2.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.emf.emfstore.client.model.edit;bundle-version="[1.0.2,2.0.0)",
+ org.eclipse.emf.emfstore.client.model.edit;bundle-version="[1.0.4,2.0.0)",
  org.eclipse.emf.ecore;bundle-version="[2.5.0,3.0.0)"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-Vendor: Eclipse Modeling Project
-Export-Package: org.eclipse.emf.emfstore.example.helloworld;version="1.0.2";uses:="org.eclipse.emf.emfstore.client,org.eclipse.equinox.app"
+Export-Package: org.eclipse.emf.emfstore.example.helloworld;version="1.0.4";uses:="org.eclipse.emf.emfstore.client,org.eclipse.equinox.app"
diff --git a/bundles/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF
index a2f8e0a..a651ba3 100644
--- a/bundles/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF
@@ -2,13 +2,13 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Example Merging client
 Bundle-SymbolicName: org.eclipse.emf.emfstore.example.merging;singleton:=true
-Bundle-Version: 1.0.2.qualifier
-Require-Bundle: org.eclipse.emf.emfstore.examplemodel;bundle-version="[1.0.2,2.0.0)",
+Bundle-Version: 1.0.4.qualifier
+Require-Bundle: org.eclipse.emf.emfstore.examplemodel;bundle-version="[1.0.4,2.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.emf.emfstore.client.model.edit;bundle-version="[1.0.2,2.0.0)",
+ org.eclipse.emf.emfstore.client.model.edit;bundle-version="[1.0.4,2.0.0)",
  org.eclipse.emf.ecore;bundle-version="[2.5.0,3.0.0)",
- org.eclipse.emf.emfstore.example.helloworld;bundle-version="[1.0.2,2.0.0)",
- org.eclipse.emf.emfstore.server;bundle-version="[1.0.2,2.0.0)"
+ org.eclipse.emf.emfstore.example.helloworld;bundle-version="[1.0.4,2.0.0)",
+ org.eclipse.emf.emfstore.server;bundle-version="[1.0.4,2.0.0)"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-Vendor: Eclipse Modeling Project
-Export-Package: org.eclipse.emf.emfstore.example.merging;version="1.0.2";uses:="org.eclipse.emf.emfstore.client,org.eclipse.equinox.app"
+Export-Package: org.eclipse.emf.emfstore.example.merging;version="1.0.4";uses:="org.eclipse.emf.emfstore.client,org.eclipse.equinox.app"
diff --git a/bundles/org.eclipse.emf.emfstore.example.installer/pom.xml b/bundles/org.eclipse.emf.emfstore.example.installer/pom.xml
index ce585c3..c72c47a 100644
--- a/bundles/org.eclipse.emf.emfstore.example.installer/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.example.installer/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.example.installer</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF
index 1fa2f17..10a29a0 100644
--- a/bundles/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF
@@ -2,13 +2,13 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Example Merging client
 Bundle-SymbolicName: org.eclipse.emf.emfstore.example.merging;singleton:=true
-Bundle-Version: 1.0.2.qualifier
-Require-Bundle: org.eclipse.emf.emfstore.examplemodel;bundle-version="[1.0.2,2.0.0)",
+Bundle-Version: 1.0.4.qualifier
+Require-Bundle: org.eclipse.emf.emfstore.examplemodel;bundle-version="[1.0.4,2.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.emf.emfstore.client.model.edit;bundle-version="[1.0.2,2.0.0)",
+ org.eclipse.emf.emfstore.client.model.edit;bundle-version="[1.0.4,2.0.0)",
  org.eclipse.emf.ecore;bundle-version="[2.5.0,3.0.0)",
- org.eclipse.emf.emfstore.example.helloworld;bundle-version="[1.0.2,2.0.0)",
- org.eclipse.emf.emfstore.server;bundle-version="[1.0.2,2.0.0)"
+ org.eclipse.emf.emfstore.example.helloworld;bundle-version="[1.0.4,2.0.0)",
+ org.eclipse.emf.emfstore.server;bundle-version="[1.0.4,2.0.0)"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-Vendor: Eclipse Modeling Project
-Export-Package: org.eclipse.emf.emfstore.example.merging;version="1.0.2"
+Export-Package: org.eclipse.emf.emfstore.example.merging;version="1.0.4"
diff --git a/bundles/org.eclipse.emf.emfstore.example.merging/pom.xml b/bundles/org.eclipse.emf.emfstore.example.merging/pom.xml
index 1986bdc..0e6541b 100644
--- a/bundles/org.eclipse.emf.emfstore.example.merging/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.example.merging/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.example.merging</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.example.sessionprovider/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.example.sessionprovider/META-INF/MANIFEST.MF
index 16e1084..5f0b799 100644
--- a/bundles/org.eclipse.emf.emfstore.example.sessionprovider/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.example.sessionprovider/META-INF/MANIFEST.MF
@@ -2,13 +2,13 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Example SessionProvider
 Bundle-SymbolicName: org.eclipse.emf.emfstore.example.sessionprovider;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-Activator: org.eclipse.emf.emfstore.exampleclient.Activator
-Require-Bundle: org.eclipse.emf.emfstore.client;bundle-version="[1.0.2,2.0.0)",
- org.eclipse.emf.emfstore.examplemodel;bundle-version="[1.0.2,2.0.0)",
+Require-Bundle: org.eclipse.emf.emfstore.client;bundle-version="[1.0.4,2.0.0)",
+ org.eclipse.emf.emfstore.examplemodel;bundle-version="[1.0.4,2.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.emf.ecore;bundle-version="[2.5.0,3.0.0)"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-Vendor: Eclipse Modeling Project
-Export-Package: org.eclipse.emf.emfstore.exampleclient;version="1.0.2";x-internal:=true
+Export-Package: org.eclipse.emf.emfstore.exampleclient;version="1.0.4";x-internal:=true
diff --git a/bundles/org.eclipse.emf.emfstore.example.sessionprovider/pom.xml b/bundles/org.eclipse.emf.emfstore.example.sessionprovider/pom.xml
index 069dcdc..5d4f66f 100644
--- a/bundles/org.eclipse.emf.emfstore.example.sessionprovider/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.example.sessionprovider/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.example.sessionprovider</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.examplemodel.edit/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.examplemodel.edit/META-INF/MANIFEST.MF
index c17e3b3..bb35ea5 100644
--- a/bundles/org.eclipse.emf.emfstore.examplemodel.edit/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.examplemodel.edit/META-INF/MANIFEST.MF
@@ -2,14 +2,14 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMFStore Bowling Example Model Edit
 Bundle-SymbolicName: org.eclipse.emf.emfstore.examplemodel.edit;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.emf.emfstore.bowling.provider.BowlingEditPlugin$Implementation
 Bundle-Vendor: Eclipse Modeling Project
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Export-Package: org.eclipse.emf.emfstore.bowling.provider;version="1.0.2"
+Export-Package: org.eclipse.emf.emfstore.bowling.provider;version="1.0.4"
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.emf.emfstore.examplemodel;visibility:=reexport;bundle-version="[1.0.2,2.0.0)",
+ org.eclipse.emf.emfstore.examplemodel;bundle-version="[1.0.4,2.0.0)";visibility:=reexport,
  org.eclipse.emf.edit;bundle-version="[2.5.0,3.0.0)"
 Bundle-ActivationPolicy: lazy
diff --git a/bundles/org.eclipse.emf.emfstore.examplemodel.edit/pom.xml b/bundles/org.eclipse.emf.emfstore.examplemodel.edit/pom.xml
index 8f67e21..3a018cb 100644
--- a/bundles/org.eclipse.emf.emfstore.examplemodel.edit/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.examplemodel.edit/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.examplemodel.edit</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.examplemodel/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.examplemodel/META-INF/MANIFEST.MF
index 18cb032..e929c30 100644
--- a/bundles/org.eclipse.emf.emfstore.examplemodel/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.examplemodel/META-INF/MANIFEST.MF
@@ -2,14 +2,14 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.emf.emfstore.examplemodel;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-ClassPath: .
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Export-Package: org.eclipse.emf.emfstore.bowling;version="1.0.2",
- org.eclipse.emf.emfstore.bowling.impl;version="1.0.2",
- org.eclipse.emf.emfstore.bowling.util;version="1.0.2"
+Export-Package: org.eclipse.emf.emfstore.bowling;version="1.0.4",
+ org.eclipse.emf.emfstore.bowling.impl;version="1.0.4",
+ org.eclipse.emf.emfstore.bowling.util;version="1.0.4"
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.emf.ecore;bundle-version="[2.5.0,3.0.0)"
 Bundle-ActivationPolicy: lazy
diff --git a/bundles/org.eclipse.emf.emfstore.examplemodel/pom.xml b/bundles/org.eclipse.emf.emfstore.examplemodel/pom.xml
index dca18b3..b424a25 100644
--- a/bundles/org.eclipse.emf.emfstore.examplemodel/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.examplemodel/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.examplemodel</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.fuzzy.emf.edit/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.fuzzy.emf.edit/META-INF/MANIFEST.MF
index d39415e..3ffbdbd 100644
--- a/bundles/org.eclipse.emf.emfstore.fuzzy.emf.edit/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.fuzzy.emf.edit/META-INF/MANIFEST.MF
@@ -2,13 +2,13 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Fuzzy EMF Edit plugin
 Bundle-SymbolicName: org.eclipse.emf.emfstore.fuzzy.emf.edit;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.emf.emfstore.fuzzy.emf.config.provider.ConfigEditPlugin$Implementation
 Bundle-Vendor: Eclipse Modeling Project
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Export-Package: org.eclipse.emf.emfstore.fuzzy.emf.config.provider;version="1.0.2"
-Require-Bundle: org.eclipse.emf.emfstore.fuzzy.emf;bundle-version="[1.0.2,2.0.0)";visibility:=reexport,
+Export-Package: org.eclipse.emf.emfstore.fuzzy.emf.config.provider;version="1.0.4"
+Require-Bundle: org.eclipse.emf.emfstore.fuzzy.emf;bundle-version="[1.0.4,2.0.0)";visibility:=reexport,
  org.eclipse.emf.edit;bundle-version="[2.5.0,3.0.0)";visibility:=reexport
 Bundle-ActivationPolicy: lazy
diff --git a/bundles/org.eclipse.emf.emfstore.fuzzy.emf.edit/pom.xml b/bundles/org.eclipse.emf.emfstore.fuzzy.emf.edit/pom.xml
index 69e6cf5..0daa4ff 100644
--- a/bundles/org.eclipse.emf.emfstore.fuzzy.emf.edit/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.fuzzy.emf.edit/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.fuzzy.emf.edit</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.fuzzy.emf.editor/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.fuzzy.emf.editor/META-INF/MANIFEST.MF
index d660695..bb8d5ee 100644
--- a/bundles/org.eclipse.emf.emfstore.fuzzy.emf.editor/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.fuzzy.emf.editor/META-INF/MANIFEST.MF
@@ -2,15 +2,15 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMFDataProvider Editor
 Bundle-SymbolicName: org.eclipse.emf.emfstore.fuzzy.emf.editor;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.emf.emfstore.fuzzy.emf.config.presentation.ConfigEditorPlugin$Implementation
 Bundle-Vendor: Eclipse Modeling Project
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Export-Package: org.eclipse.emf.emfstore.fuzzy.emf.config.presentation;version="1.0.2"
+Export-Package: org.eclipse.emf.emfstore.fuzzy.emf.config.presentation;version="1.0.4"
 Require-Bundle: org.eclipse.core.resources;bundle-version="[3.7.0,4.0.0)";visibility:=reexport,
- org.eclipse.emf.emfstore.fuzzy.emf.edit;bundle-version="[1.0.2,2.0.0)";visibility:=reexport,
+ org.eclipse.emf.emfstore.fuzzy.emf.edit;bundle-version="[1.0.4,2.0.0)";visibility:=reexport,
  org.eclipse.emf.edit.ui;bundle-version="[2.5.0,3.0.0)";visibility:=reexport,
  org.eclipse.ui.ide;bundle-version="[3.7.0,4.0.0)";visibility:=reexport
 Bundle-ActivationPolicy: lazy
diff --git a/bundles/org.eclipse.emf.emfstore.fuzzy.emf.editor/pom.xml b/bundles/org.eclipse.emf.emfstore.fuzzy.emf.editor/pom.xml
index 4934add..f6b8d26 100644
--- a/bundles/org.eclipse.emf.emfstore.fuzzy.emf.editor/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.fuzzy.emf.editor/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.fuzzy.emf.editor</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.fuzzy.emf.example/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.fuzzy.emf.example/META-INF/MANIFEST.MF
index 12e1d20..e4fc948 100644
--- a/bundles/org.eclipse.emf.emfstore.fuzzy.emf.example/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.fuzzy.emf.example/META-INF/MANIFEST.MF
@@ -2,8 +2,8 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Example Plugin for the Fuzzy EMF Testing
 Bundle-SymbolicName: org.eclipse.emf.emfstore.fuzzy.emf.example
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-Vendor: Eclipse Modeling Project
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Require-Bundle: org.eclipse.emf.emfstore.fuzzy.emf;bundle-version="[1.0.2,2.0.0)";visibility:=reexport
-Export-Package: org.eclipse.emf.emfstore.fuzzy.emf.example;version="1.0.2";x-internal:=true
+Require-Bundle: org.eclipse.emf.emfstore.fuzzy.emf;bundle-version="[1.0.4,2.0.0)";visibility:=reexport
+Export-Package: org.eclipse.emf.emfstore.fuzzy.emf.example;version="1.0.4";x-internal:=true
diff --git a/bundles/org.eclipse.emf.emfstore.fuzzy.emf.example/pom.xml b/bundles/org.eclipse.emf.emfstore.fuzzy.emf.example/pom.xml
index be8a9c5..23e67df 100644
--- a/bundles/org.eclipse.emf.emfstore.fuzzy.emf.example/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.fuzzy.emf.example/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.fuzzy.emf.example</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.fuzzy.emf/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.fuzzy.emf/META-INF/MANIFEST.MF
index 7041f5b..58a27ae 100644
--- a/bundles/org.eclipse.emf.emfstore.fuzzy.emf/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.fuzzy.emf/META-INF/MANIFEST.MF
@@ -2,21 +2,21 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMFDataProvider for FuzzyTestRunner
 Bundle-SymbolicName: org.eclipse.emf.emfstore.fuzzy.emf;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-ClassPath: .,
  lib/dom4j-1.6.1.jar
 Bundle-Localization: plugin
-Export-Package: org.eclipse.emf.emfstore.fuzzy.emf;version="1.0.2",
- org.eclipse.emf.emfstore.fuzzy.emf.config;version="1.0.2",
- org.eclipse.emf.emfstore.fuzzy.emf.config.impl;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.fuzzy.emf.config.util;version="1.0.2",
- org.eclipse.emf.emfstore.fuzzy.emf.diff;version="1.0.2"
-Require-Bundle: org.eclipse.emf.emfstore.modelmutator;bundle-version="[1.0.2,2.0.0)";visibility:=reexport,
- org.eclipse.emf.emfstore.fuzzy;bundle-version="[1.0.2,2.0.0)";visibility:=reexport,
+Export-Package: org.eclipse.emf.emfstore.fuzzy.emf;version="1.0.4",
+ org.eclipse.emf.emfstore.fuzzy.emf.config;version="1.0.4",
+ org.eclipse.emf.emfstore.fuzzy.emf.config.impl;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.fuzzy.emf.config.util;version="1.0.4",
+ org.eclipse.emf.emfstore.fuzzy.emf.diff;version="1.0.4"
+Require-Bundle: org.eclipse.emf.emfstore.modelmutator;bundle-version="[1.0.4,2.0.0)";visibility:=reexport,
+ org.eclipse.emf.emfstore.fuzzy;bundle-version="[1.0.4,2.0.0)";visibility:=reexport,
  org.eclipse.emf.ecore;bundle-version="[2.5.0,3.0.0)";visibility:=reexport,
  org.eclipse.emf.ecore.xmi;bundle-version="[2.5.0,3.0.0)";visibility:=reexport,
  org.eclipse.core.runtime;bundle-version="[3.7.0,4.0.0)";visibility:=reexport,
  org.eclipse.emf.edit;bundle-version="[2.5.0,3.0.0)";visibility:=reexport,
- org.eclipse.emf.emfstore.client.test;bundle-version="[1.0.2,2.0.0)"
+ org.eclipse.emf.emfstore.client.test;bundle-version="[1.0.4,2.0.0)"
 Bundle-Vendor: Eclipse Modeling Project
diff --git a/bundles/org.eclipse.emf.emfstore.fuzzy.emf/pom.xml b/bundles/org.eclipse.emf.emfstore.fuzzy.emf/pom.xml
index b132b79..8d2660d 100644
--- a/bundles/org.eclipse.emf.emfstore.fuzzy.emf/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.fuzzy.emf/pom.xml
@@ -5,12 +5,12 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.fuzzy.emf</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
   
   <build>
diff --git a/bundles/org.eclipse.emf.emfstore.fuzzy/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.fuzzy/META-INF/MANIFEST.MF
index 4489cc9..cf4233a 100644
--- a/bundles/org.eclipse.emf.emfstore.fuzzy/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.fuzzy/META-INF/MANIFEST.MF
@@ -2,11 +2,11 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Fuzzy JUnit Testing Framework
 Bundle-SymbolicName: org.eclipse.emf.emfstore.fuzzy;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-ClassPath: .
 Bundle-Vendor: Eclipse Modeling Project
 Bundle-Localization: plugin
-Export-Package: org.eclipse.emf.emfstore.fuzzy;version="1.0.2"
+Export-Package: org.eclipse.emf.emfstore.fuzzy;version="1.0.4"
 Require-Bundle: org.junit;bundle-version="[4.10.0,5.0.0)";visibility:=reexport
 Eclipse-LazyStart: true
 Bundle-ActivationPolicy: lazy
diff --git a/bundles/org.eclipse.emf.emfstore.fuzzy/pom.xml b/bundles/org.eclipse.emf.emfstore.fuzzy/pom.xml
index 1a8e555..7fbd52c 100644
--- a/bundles/org.eclipse.emf.emfstore.fuzzy/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.fuzzy/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.fuzzy</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.migration/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.migration/META-INF/MANIFEST.MF
index 4958fba..a3d4d6e 100644
--- a/bundles/org.eclipse.emf.emfstore.migration/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.migration/META-INF/MANIFEST.MF
@@ -2,13 +2,13 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMFStore Migration
 Bundle-SymbolicName: org.eclipse.emf.emfstore.migration;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-Vendor: Eclipse Modeling Project
-Require-Bundle: org.eclipse.emf.emfstore.common.model;bundle-version="[1.0.2,2.0.0)",
+Require-Bundle: org.eclipse.emf.emfstore.common.model;bundle-version="[1.0.4,2.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.emf.ecore.xmi;bundle-version="[2.5.0,3.0.0)"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-ActivationPolicy: lazy
-Export-Package: org.eclipse.emf.emfstore.internal.migration;version="1.0.2";
+Export-Package: org.eclipse.emf.emfstore.internal.migration;version="1.0.4";
   x-friends:="org.eclipse.emf.emfstore.client,
    org.eclipse.emf.emfstore.server";uses:="org.eclipse.core.runtime"
diff --git a/bundles/org.eclipse.emf.emfstore.migration/pom.xml b/bundles/org.eclipse.emf.emfstore.migration/pom.xml
index 284331d..304a621 100644
--- a/bundles/org.eclipse.emf.emfstore.migration/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.migration/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.migration</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.modelmutator/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.modelmutator/META-INF/MANIFEST.MF
index e8bc9d3..ddc8d1c 100644
--- a/bundles/org.eclipse.emf.emfstore.modelmutator/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.modelmutator/META-INF/MANIFEST.MF
@@ -2,10 +2,10 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMF ModelMutator
 Bundle-SymbolicName: org.eclipse.emf.emfstore.modelmutator
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-Vendor: Eclipse Modeling Project
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Export-Package: org.eclipse.emf.emfstore.internal.modelmutator.api;version="1.0.2",
- org.eclipse.emf.emfstore.internal.modelmutator.intern;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.modelmutator.intern.attribute;version="1.0.2";x-internal:=true
+Export-Package: org.eclipse.emf.emfstore.internal.modelmutator.api;version="1.0.4",
+ org.eclipse.emf.emfstore.internal.modelmutator.intern;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.modelmutator.intern.attribute;version="1.0.4";x-internal:=true
 Require-Bundle: org.eclipse.emf.edit;bundle-version="[2.5.0,3.0.0)"
diff --git a/bundles/org.eclipse.emf.emfstore.modelmutator/pom.xml b/bundles/org.eclipse.emf.emfstore.modelmutator/pom.xml
index 2348ed4..2ce7403 100644
--- a/bundles/org.eclipse.emf.emfstore.modelmutator/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.modelmutator/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.modelmutator</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.server.model.edit/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.server.model.edit/META-INF/MANIFEST.MF
index 7a148b5..33ebe14 100644
--- a/bundles/org.eclipse.emf.emfstore.server.model.edit/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.server.model.edit/META-INF/MANIFEST.MF
@@ -2,23 +2,23 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMFStore Model Edit
 Bundle-SymbolicName: org.eclipse.emf.emfstore.server.model.edit;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.emf.emfstore.internal.server.model.provider.ServerEditPlugin$Implementation
 Bundle-Vendor: Eclipse Modeling Project
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Export-Package: org.eclipse.emf.emfstore.internal.server.model.accesscontrol.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.server.model.accesscontrol.roles.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.server.model.provider;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.model.edit,org.eclipse.emf.emfstore.client.test",
- org.eclipse.emf.emfstore.internal.server.model.url.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.server.model.versioning.events.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.server.model.versioning.events.server.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.server.model.versioning.operations.provider;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.ui",
- org.eclipse.emf.emfstore.internal.server.model.versioning.operations.semantic.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.server.model.versioning.provider;version="1.0.2";x-internal:=true
-Require-Bundle: org.eclipse.emf.emfstore.server.model;bundle-version="[1.0.2,2.0.0)";visibility:=reexport,
- org.eclipse.emf.emfstore.common.model.edit;bundle-version="[1.0.2,2.0.0)",
+Export-Package: org.eclipse.emf.emfstore.internal.server.model.accesscontrol.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.server.model.accesscontrol.roles.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.server.model.provider;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.model.edit,org.eclipse.emf.emfstore.client.test",
+ org.eclipse.emf.emfstore.internal.server.model.url.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.server.model.versioning.events.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.server.model.versioning.events.server.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.server.model.versioning.operations.provider;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.ui",
+ org.eclipse.emf.emfstore.internal.server.model.versioning.operations.semantic.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.server.model.versioning.provider;version="1.0.4";x-internal:=true
+Require-Bundle: org.eclipse.emf.emfstore.server.model;bundle-version="[1.0.4,2.0.0)";visibility:=reexport,
+ org.eclipse.emf.emfstore.common.model.edit;bundle-version="[1.0.4,2.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.emf.edit;bundle-version="[2.5.0,3.0.0)"
 Bundle-ActivationPolicy: lazy
diff --git a/bundles/org.eclipse.emf.emfstore.server.model.edit/pom.xml b/bundles/org.eclipse.emf.emfstore.server.model.edit/pom.xml
index d5fd94f..b85a0ef 100644
--- a/bundles/org.eclipse.emf.emfstore.server.model.edit/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.server.model.edit/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.server.model.edit</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.server.model/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.server.model/META-INF/MANIFEST.MF
index 2340ed0..6e2bbeb 100644
--- a/bundles/org.eclipse.emf.emfstore.server.model/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.server.model/META-INF/MANIFEST.MF
@@ -2,44 +2,44 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMFStore Server Model
 Bundle-SymbolicName: org.eclipse.emf.emfstore.server.model;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-ClassPath: .
 Bundle-Vendor: Eclipse Modeling Project
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Export-Package: org.eclipse.emf.emfstore.internal.server.model;version="1.0.2";
+Export-Package: org.eclipse.emf.emfstore.internal.server.model;version="1.0.4";
   x-friends:="org.eclipse.emf.emfstore.server,
    org.eclipse.emf.emfstore.client,
    org.eclipse.emf.emfstore.client.ui,
    org.eclipse.emf.emfstore.client.model.edit,
    org.eclipse.emf.emfstore.client.test,
    org.eclipse.emf.emfstore.server.model.edit",
- org.eclipse.emf.emfstore.internal.server.model.accesscontrol;version="1.0.2";
+ org.eclipse.emf.emfstore.internal.server.model.accesscontrol;version="1.0.4";
   x-friends:="org.eclipse.emf.emfstore.server,
    org.eclipse.emf.emfstore.client,
    org.eclipse.emf.emfstore.client.model.edit,
    org.eclipse.emf.emfstore.client.test,
    org.eclipse.emf.emfstore.client.ui,
    org.eclipse.emf.emfstore.server.model.edit",
- org.eclipse.emf.emfstore.internal.server.model.accesscontrol.impl;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server",
- org.eclipse.emf.emfstore.internal.server.model.accesscontrol.roles;version="1.0.2";
+ org.eclipse.emf.emfstore.internal.server.model.accesscontrol.impl;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server",
+ org.eclipse.emf.emfstore.internal.server.model.accesscontrol.roles;version="1.0.4";
   x-friends:="org.eclipse.emf.emfstore.server,
    org.eclipse.emf.emfstore.client,
    org.eclipse.emf.emfstore.client.test,
    org.eclipse.emf.emfstore.server.model.edit,
    org.eclipse.emf.emfstore.client.ui",
- org.eclipse.emf.emfstore.internal.server.model.accesscontrol.roles.impl;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server",
- org.eclipse.emf.emfstore.internal.server.model.accesscontrol.roles.util;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.server.model.edit",
- org.eclipse.emf.emfstore.internal.server.model.accesscontrol.util;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.server.model.edit",
- org.eclipse.emf.emfstore.internal.server.model.impl;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.client",
- org.eclipse.emf.emfstore.internal.server.model.impl.api;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.client.test",
- org.eclipse.emf.emfstore.internal.server.model.impl.api.query;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.client.test",
- org.eclipse.emf.emfstore.internal.server.model.impl.api.versionspec;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.client.test",
- org.eclipse.emf.emfstore.internal.server.model.url;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.server.model.edit",
- org.eclipse.emf.emfstore.internal.server.model.url.impl;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server",
- org.eclipse.emf.emfstore.internal.server.model.url.util;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.server.model.edit",
- org.eclipse.emf.emfstore.internal.server.model.util;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.server.model.edit",
- org.eclipse.emf.emfstore.internal.server.model.versioning;version="1.0.2";
+ org.eclipse.emf.emfstore.internal.server.model.accesscontrol.roles.impl;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server",
+ org.eclipse.emf.emfstore.internal.server.model.accesscontrol.roles.util;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.server.model.edit",
+ org.eclipse.emf.emfstore.internal.server.model.accesscontrol.util;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.server.model.edit",
+ org.eclipse.emf.emfstore.internal.server.model.impl;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.client",
+ org.eclipse.emf.emfstore.internal.server.model.impl.api;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.client.test",
+ org.eclipse.emf.emfstore.internal.server.model.impl.api.query;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.client.test",
+ org.eclipse.emf.emfstore.internal.server.model.impl.api.versionspec;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.client.test",
+ org.eclipse.emf.emfstore.internal.server.model.url;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.server.model.edit",
+ org.eclipse.emf.emfstore.internal.server.model.url.impl;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server",
+ org.eclipse.emf.emfstore.internal.server.model.url.util;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.server.model.edit",
+ org.eclipse.emf.emfstore.internal.server.model.util;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.server.model.edit",
+ org.eclipse.emf.emfstore.internal.server.model.versioning;version="1.0.4";
   x-friends:="org.eclipse.emf.emfstore.client,
    org.eclipse.emf.emfstore.client.model.edit,
    org.eclipse.emf.emfstore.client.test,
@@ -47,14 +47,14 @@
    org.eclipse.emf.emfstore.server,
    org.eclipse.emf.emfstore.server.model.edit,
    org.eclipse.emf.emfstore.example.merging",
- org.eclipse.emf.emfstore.internal.server.model.versioning.events;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.server.model.edit",
- org.eclipse.emf.emfstore.internal.server.model.versioning.events.impl;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server",
- org.eclipse.emf.emfstore.internal.server.model.versioning.events.server;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.server.model.edit",
- org.eclipse.emf.emfstore.internal.server.model.versioning.events.server.impl;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server",
- org.eclipse.emf.emfstore.internal.server.model.versioning.events.server.util;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.server.model.edit",
- org.eclipse.emf.emfstore.internal.server.model.versioning.events.util;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.server.model.edit",
- org.eclipse.emf.emfstore.internal.server.model.versioning.impl;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.client",
- org.eclipse.emf.emfstore.internal.server.model.versioning.operations;version="1.0.2";
+ org.eclipse.emf.emfstore.internal.server.model.versioning.events;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.server.model.edit",
+ org.eclipse.emf.emfstore.internal.server.model.versioning.events.impl;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server",
+ org.eclipse.emf.emfstore.internal.server.model.versioning.events.server;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.server.model.edit",
+ org.eclipse.emf.emfstore.internal.server.model.versioning.events.server.impl;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server",
+ org.eclipse.emf.emfstore.internal.server.model.versioning.events.server.util;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.server.model.edit",
+ org.eclipse.emf.emfstore.internal.server.model.versioning.events.util;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.server.model.edit",
+ org.eclipse.emf.emfstore.internal.server.model.versioning.impl;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.client",
+ org.eclipse.emf.emfstore.internal.server.model.versioning.operations;version="1.0.4";
   x-friends:="org.eclipse.emf.emfstore.server,
    org.eclipse.emf.emfstore.client.model.edit,
    org.eclipse.emf.emfstore.client.ui,
@@ -62,25 +62,25 @@
    org.eclipse.emf.emfstore.client,
    org.eclipse.emf.emfstore.server.model.edit,
    org.eclipse.emf.emfstore.example.merging",
- org.eclipse.emf.emfstore.internal.server.model.versioning.operations.impl;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.client.test",
- org.eclipse.emf.emfstore.internal.server.model.versioning.operations.semantic;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.server.model.edit",
- org.eclipse.emf.emfstore.internal.server.model.versioning.operations.semantic.impl;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server",
- org.eclipse.emf.emfstore.internal.server.model.versioning.operations.semantic.util;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.server.model.edit",
- org.eclipse.emf.emfstore.internal.server.model.versioning.operations.util;version="1.0.2";
+ org.eclipse.emf.emfstore.internal.server.model.versioning.operations.impl;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.client.test",
+ org.eclipse.emf.emfstore.internal.server.model.versioning.operations.semantic;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.server.model.edit",
+ org.eclipse.emf.emfstore.internal.server.model.versioning.operations.semantic.impl;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server",
+ org.eclipse.emf.emfstore.internal.server.model.versioning.operations.semantic.util;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.server.model.edit",
+ org.eclipse.emf.emfstore.internal.server.model.versioning.operations.util;version="1.0.4";
   x-friends:="org.eclipse.emf.emfstore.server,
    org.eclipse.emf.emfstore.client,
    org.eclipse.emf.emfstore.client.test,
    org.eclipse.emf.emfstore.server.model.edit,
    org.eclipse.emf.emfstore.client.ui",
- org.eclipse.emf.emfstore.internal.server.model.versioning.util;version="1.0.2";
+ org.eclipse.emf.emfstore.internal.server.model.versioning.util;version="1.0.4";
   x-friends:="org.eclipse.emf.emfstore.server,
    org.eclipse.emf.emfstore.client.test,
    org.eclipse.emf.emfstore.server.model.edit,
    org.eclipse.emf.emfstore.client.ui",
- org.eclipse.emf.emfstore.server.model;version="1.0.2",
- org.eclipse.emf.emfstore.server.model.query;version="1.0.2",
- org.eclipse.emf.emfstore.server.model.versionspec;version="1.0.2"
-Require-Bundle: org.eclipse.emf.emfstore.common.model;bundle-version="[1.0.2,2.0.0)";visibility:=reexport,
+ org.eclipse.emf.emfstore.server.model;version="1.0.4",
+ org.eclipse.emf.emfstore.server.model.query;version="1.0.4",
+ org.eclipse.emf.emfstore.server.model.versionspec;version="1.0.4"
+Require-Bundle: org.eclipse.emf.emfstore.common.model;bundle-version="[1.0.4,2.0.0)";visibility:=reexport,
  org.eclipse.emf.ecore;bundle-version="[2.5.0,3.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.emf.ecore.xmi;bundle-version="[2.5.0,3.0.0)"
diff --git a/bundles/org.eclipse.emf.emfstore.server.model/pom.xml b/bundles/org.eclipse.emf.emfstore.server.model/pom.xml
index d5e68a0..9ff09e2 100644
--- a/bundles/org.eclipse.emf.emfstore.server.model/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.server.model/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.server.model</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.server/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.server/META-INF/MANIFEST.MF
index cd0fbc6..65e6a87 100644
--- a/bundles/org.eclipse.emf.emfstore.server/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.emfstore.server/META-INF/MANIFEST.MF
@@ -2,14 +2,14 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMFStore Server
 Bundle-SymbolicName: org.eclipse.emf.emfstore.server;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-Activator: org.eclipse.emf.emfstore.internal.server.Activator
 Bundle-Vendor: Eclipse Modeling Project
 Require-Bundle: org.apache.commons.codec;bundle-version="[1.3.0,2.0.0)",
- org.eclipse.emf.emfstore.server.model;bundle-version="[1.0.2,2.0.0)";visibility:=reexport,
- org.eclipse.emf.emfstore.migration;bundle-version="[1.0.2,2.0.0)",
- org.eclipse.emf.emfstore.common;bundle-version="[1.0.2,2.0.0)";visibility:=reexport,
- org.eclipse.emf.emfstore.common.model;bundle-version="[1.0.2,2.0.0)";visibility:=reexport,
+ org.eclipse.emf.emfstore.server.model;bundle-version="[1.0.4,2.0.0)";visibility:=reexport,
+ org.eclipse.emf.emfstore.migration;bundle-version="[1.0.4,2.0.0)",
+ org.eclipse.emf.emfstore.common;bundle-version="[1.0.4,2.0.0)";visibility:=reexport,
+ org.eclipse.emf.emfstore.common.model;bundle-version="[1.0.4,2.0.0)";visibility:=reexport,
  org.eclipse.emf.ecore;bundle-version="[2.5.0,3.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.emf.ecore.xmi;bundle-version="[2.5.0,3.0.0)"
@@ -30,30 +30,30 @@
  org.apache.xmlrpc.server;version="3.1.3",
  org.apache.xmlrpc.util;version="3.1.3",
  org.apache.xmlrpc.webserver;version="3.1.3",
- org.eclipse.emf.emfstore.internal.server;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.client.ui",
- org.eclipse.emf.emfstore.internal.server.accesscontrol;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.test",
- org.eclipse.emf.emfstore.internal.server.accesscontrol.authentication;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.test",
- org.eclipse.emf.emfstore.internal.server.accesscontrol.authentication.factory;version="1.0.2",
- org.eclipse.emf.emfstore.internal.server.accesscontrol.authentication.verifiers;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.test",
- org.eclipse.emf.emfstore.internal.server.conflictDetection;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.client.ui",
- org.eclipse.emf.emfstore.internal.server.connection;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.test",
- org.eclipse.emf.emfstore.internal.server.connection.xmlrpc;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client",
- org.eclipse.emf.emfstore.internal.server.connection.xmlrpc.util;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client",
- org.eclipse.emf.emfstore.internal.server.core;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client.test",
- org.eclipse.emf.emfstore.internal.server.core.helper;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.server.core.subinterfaces;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.server.eventmanager;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.server.exceptions;version="1.0.2";
+ org.eclipse.emf.emfstore.internal.server;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.client.ui",
+ org.eclipse.emf.emfstore.internal.server.accesscontrol;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.test",
+ org.eclipse.emf.emfstore.internal.server.accesscontrol.authentication;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.test",
+ org.eclipse.emf.emfstore.internal.server.accesscontrol.authentication.factory;version="1.0.4",
+ org.eclipse.emf.emfstore.internal.server.accesscontrol.authentication.verifiers;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.test",
+ org.eclipse.emf.emfstore.internal.server.conflictDetection;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.client.ui",
+ org.eclipse.emf.emfstore.internal.server.connection;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.test",
+ org.eclipse.emf.emfstore.internal.server.connection.xmlrpc;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client",
+ org.eclipse.emf.emfstore.internal.server.connection.xmlrpc.util;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client",
+ org.eclipse.emf.emfstore.internal.server.core;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client.test",
+ org.eclipse.emf.emfstore.internal.server.core.helper;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.server.core.subinterfaces;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.server.eventmanager;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.server.exceptions;version="1.0.4";
   x-friends:="org.eclipse.emf.emfstore.client,
    org.eclipse.emf.emfstore.client.ui,
    org.eclipse.emf.emfstore.client.test,
    org.eclipse.emf.emfstore.example.merging",
- org.eclipse.emf.emfstore.internal.server.filetransfer;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.client.test",
- org.eclipse.emf.emfstore.internal.server.impl.api;version="1.0.2";x-friends:="org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.client.ui",
- org.eclipse.emf.emfstore.internal.server.startup;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.internal.server.storage;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.server;version="1.0.2",
- org.eclipse.emf.emfstore.server.exceptions;version="1.0.2",
- org.eclipse.emf.emfstore.server.observer;version="1.0.2"
+ org.eclipse.emf.emfstore.internal.server.filetransfer;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.client.test",
+ org.eclipse.emf.emfstore.internal.server.impl.api;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.client.ui",
+ org.eclipse.emf.emfstore.internal.server.startup;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.internal.server.storage;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.server;version="1.0.4",
+ org.eclipse.emf.emfstore.server.exceptions;version="1.0.4",
+ org.eclipse.emf.emfstore.server.observer;version="1.0.4"
 Bundle-ActivationPolicy: lazy
 Import-Package: org.apache.commons.logging;version="[1.0.0,2.0.0)"
diff --git a/bundles/org.eclipse.emf.emfstore.server/pom.xml b/bundles/org.eclipse.emf.emfstore.server/pom.xml
index 36da590..6c9f80f 100644
--- a/bundles/org.eclipse.emf.emfstore.server/pom.xml
+++ b/bundles/org.eclipse.emf.emfstore.server/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.server</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/authentication/verifiers/AbstractAuthenticationControl.java b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/authentication/verifiers/AbstractAuthenticationControl.java
index e716d33..0f442a7 100644
--- a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/authentication/verifiers/AbstractAuthenticationControl.java
+++ b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/authentication/verifiers/AbstractAuthenticationControl.java
@@ -12,7 +12,6 @@
  ******************************************************************************/
 package org.eclipse.emf.emfstore.internal.server.accesscontrol.authentication.verifiers;
 
-import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil;
 import org.eclipse.emf.emfstore.internal.server.ServerConfiguration;
 import org.eclipse.emf.emfstore.internal.server.accesscontrol.AuthenticationControl;
 import org.eclipse.emf.emfstore.internal.server.connection.ServerKeyStoreManager;
@@ -145,38 +144,8 @@
 	 */
 	// TODO include client name in verification
 	protected void checkClientVersion(ClientVersionInfo clientVersionInfo) throws ClientVersionOutOfDateException {
-
-		if (clientVersionInfo == null) {
-			throw new ClientVersionOutOfDateException("No client version recieved.");
-		}
-
-		final String[] versions = ServerConfiguration.getSplittedProperty(ServerConfiguration.ACCEPTED_VERSIONS);
-
-		if (versions == null) {
-			final String msg = "No server versions supplied";
-			ModelUtil.logWarning(msg, new ClientVersionOutOfDateException(msg));
-			return;
-		}
-
-		for (final String str : versions) {
-			if (str.equals(clientVersionInfo.getVersion()) || str.equals(ServerConfiguration.ACCEPTED_VERSIONS_ANY)) {
-				return;
-			}
-		}
-
-		final StringBuffer version = new StringBuffer();
-
-		for (final String str : versions) {
-			if (versions.length == 1) {
-				version.append(str + ". ");
-			} else {
-				version.append(str + ", ");
-			}
-		}
-
-		version.replace(version.length() - 2, version.length(), ".");
-
-		throw new ClientVersionOutOfDateException("Client version: " + clientVersionInfo.getVersion()
-			+ " - Accepted versions: " + version);
+		VersionVerifier.verify(
+			ServerConfiguration.getSplittedProperty(ServerConfiguration.ACCEPTED_VERSIONS),
+			clientVersionInfo);
 	}
 }
diff --git a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/authentication/verifiers/VersionVerifier.java b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/authentication/verifiers/VersionVerifier.java
new file mode 100644
index 0000000..e1fe85c
--- /dev/null
+++ b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/authentication/verifiers/VersionVerifier.java
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (c) 2011-2013 EclipseSource Muenchen GmbH and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Edgar - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.internal.server.accesscontrol.authentication.verifiers;
+
+import java.util.regex.Pattern;
+
+import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil;
+import org.eclipse.emf.emfstore.internal.server.ServerConfiguration;
+import org.eclipse.emf.emfstore.internal.server.exceptions.ClientVersionOutOfDateException;
+import org.eclipse.emf.emfstore.internal.server.model.ClientVersionInfo;
+
+/**
+ * <p>
+ * Utility class to verify the client version. When specifying the allowed versions, clients may either specify an array
+ * containing all allowed version numbers or specify a single wildcard version.
+ * </p>
+ * 
+ * <p>
+ * A wildcard version is specified via the '*' letter. All other letters known from regular expressions are not
+ * considered.
+ * </p>
+ * 
+ * <p>
+ * For instance the wildcard version 1.2.3.x would accept all 1.2.3 versions independently of the actual qualifier where
+ * {@code x} stand for a qualifier. Multiple wildcard versions are <b>not</b> allowed
+ * </p>
+ * 
+ * 
+ * @author emueller
+ * 
+ */
+public final class VersionVerifier {
+
+	private VersionVerifier() {
+	}
+
+	/**
+	 * Verifies the client version against a set of allowed versions.
+	 * 
+	 * @param versions
+	 *            the list of accepted versions or a single wildcard version like '1.2.3.*'
+	 * 
+	 * @param clientVersionInfo
+	 *            the client version to verify
+	 * @throws ClientVersionOutOfDateException
+	 *             in case the client version is out of date
+	 */
+	public static void verify(String[] versions, ClientVersionInfo clientVersionInfo)
+		throws ClientVersionOutOfDateException {
+
+		if (clientVersionInfo == null) {
+			throw new ClientVersionOutOfDateException("No client version received.");
+		}
+
+		if (versions == null) {
+			final String msg = "No server versions supplied";
+			ModelUtil.logWarning(msg, new ClientVersionOutOfDateException(msg));
+			return;
+		}
+
+		if (isWildcardVersion(versions)) {
+			matchesWildcard(versions[0], clientVersionInfo);
+		} else {
+			for (final String version : versions) {
+				if (matchesClientVersion(version, clientVersionInfo) || matchesAny(version)) {
+					return;
+				}
+			}
+
+			final StringBuffer acceptedVersions = new StringBuffer();
+
+			for (final String str : versions) {
+				if (versions.length == 1) {
+					acceptedVersions.append(str + ". ");
+				} else {
+					acceptedVersions.append(str + ", ");
+				}
+			}
+
+			acceptedVersions.replace(acceptedVersions.length() - 2, acceptedVersions.length(), ".");
+
+			throw new ClientVersionOutOfDateException("Client version: " + clientVersionInfo.getVersion()
+				+ " - Accepted versions: " + acceptedVersions);
+		}
+	}
+
+	private static void matchesWildcard(final String version, final ClientVersionInfo clientVersionInfo)
+		throws ClientVersionOutOfDateException {
+		final int index = version.lastIndexOf('*');
+		final String quoted = Pattern.quote(version.substring(0, index));
+		final String end = Pattern.quote(version.substring(index + 1, version.length()));
+		if (!clientVersionInfo.getVersion().matches(quoted + ".*" + end)) {
+			throw new ClientVersionOutOfDateException("Client version: " + clientVersionInfo.getVersion()
+				+ " - Accepted versions: " + version);
+		}
+	}
+
+	private static boolean isWildcardVersion(String[] versions) {
+		return versions.length == 1 && versions[0].contains("*");
+	}
+
+	private static boolean matchesClientVersion(final String version, final ClientVersionInfo clientVersionInfo) {
+		return version.equals(clientVersionInfo.getVersion());
+	}
+
+	private static boolean matchesAny(final String version) {
+		return version.equals(ServerConfiguration.ACCEPTED_VERSIONS_ANY);
+	}
+}
diff --git a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/conflictDetection/ReservationToConflictBucketCandidateMap.java b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/conflictDetection/ReservationToConflictBucketCandidateMap.java
index 4d986d8..69149a5 100644
--- a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/conflictDetection/ReservationToConflictBucketCandidateMap.java
+++ b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/conflictDetection/ReservationToConflictBucketCandidateMap.java
@@ -7,10 +7,18 @@
  * http://www.eclipse.org/legal/epl-v10.html
  * 
  * Contributors:
- * Maximilian Koegel
+ * Maximilian Koegel - initial API and implementation
+ * Edgar Mueller - custom reservation set modifiers
+ * Edgar Mueller - Bug 418183: recognizing conflicts on map entries
  ******************************************************************************/
 package org.eclipse.emf.emfstore.internal.server.conflictDetection;
 
+import static org.eclipse.emf.emfstore.internal.server.model.versioning.operations.util.OperationUtil.isMultiMoveRef;
+import static org.eclipse.emf.emfstore.internal.server.model.versioning.operations.util.OperationUtil.isMultiRef;
+import static org.eclipse.emf.emfstore.internal.server.model.versioning.operations.util.OperationUtil.isMultiRefSet;
+
+import java.text.MessageFormat;
+import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.Map;
@@ -21,30 +29,29 @@
 import org.eclipse.emf.emfstore.internal.common.ExtensionRegistry;
 import org.eclipse.emf.emfstore.internal.common.model.ModelElementId;
 import org.eclipse.emf.emfstore.internal.common.model.ModelElementIdToEObjectMapping;
+import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil;
 import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.AbstractOperation;
 import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.CompositeOperation;
 import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.ContainmentType;
 import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.CreateDeleteOperation;
 import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.FeatureOperation;
-import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.MultiReferenceMoveOperation;
-import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.MultiReferenceOperation;
-import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.MultiReferenceSetOperation;
 import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.ReferenceOperation;
+import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.SingleReferenceOperation;
 
 /**
- * Map from modelelements and their features to conflict candidate buckets.
+ * Map from model elements and their features to conflict candidate buckets.
  * 
  * @author mkoegel
- * 
+ * @author emueller
  */
 public class ReservationToConflictBucketCandidateMap {
 
-	private static ReservationSetModifier reservationSetModifier = initCustomReservationModifier();
+	private static ReservationSetModifier reservationSetModifier = initCustomReservationSetModifier();
 	private final ReservationSet reservationToConflictMap;
 	private final Set<ConflictBucketCandidate> conflictBucketCandidates;
-	private final Map<String, Map.Entry<?, ?>> createdMapEntries;
+	private final Map<String, Integer> idToKeyHashCode;
 
-	private static ReservationSetModifier initCustomReservationModifier() {
+	private static ReservationSetModifier initCustomReservationSetModifier() {
 
 		return ExtensionRegistry.INSTANCE.get(
 			ReservationSetModifier.ID,
@@ -65,7 +72,7 @@
 	public ReservationToConflictBucketCandidateMap() {
 		reservationToConflictMap = new ReservationSet();
 		conflictBucketCandidates = new LinkedHashSet<ConflictBucketCandidate>();
-		createdMapEntries = new LinkedHashMap<String, Map.Entry<?, ?>>();
+		idToKeyHashCode = new LinkedHashMap<String, Integer>();
 
 	}
 
@@ -100,7 +107,7 @@
 				if (featureName.equals(FeatureNameReservationMap.EXISTENCE_FEATURE)) {
 					continue;
 				}
-				// we do not care about existence reservations since they will not colide with any other features
+				// we do not care about existence reservations since they will not collide with any other features
 
 				// handle normal feature reservations without opposite
 				if (!reservationSet.hasOppositeReservations(modelElement, featureName)) {
@@ -197,7 +204,8 @@
 	public void scanOperationReservations(AbstractOperation operation, int priority,
 		ModelElementIdToEObjectMapping idToEObjectMapping, boolean isMyOperation) {
 
-		ReservationSet reservationSet = extractReservationFromOperation(operation, new ReservationSet());
+		ReservationSet reservationSet = extractReservationFromOperation(operation, new ReservationSet(),
+			idToEObjectMapping);
 		reservationSet = addCustomReservations(operation, reservationSet, idToEObjectMapping);
 		final ConflictBucketCandidate conflictBucketCandidate = new ConflictBucketCandidate();
 		conflictBucketCandidates.add(conflictBucketCandidate);
@@ -211,12 +219,12 @@
 	}
 
 	private ReservationSet extractReservationFromOperation(final AbstractOperation operation,
-		ReservationSet reservationSet) {
+		ReservationSet reservationSet, ModelElementIdToEObjectMapping idToEObjectMapping) {
 
 		if (operation instanceof CompositeOperation) {
 			final CompositeOperation compositeOperation = (CompositeOperation) operation;
 			for (final AbstractOperation subOperation : compositeOperation.getSubOperations()) {
-				extractReservationFromOperation(subOperation, reservationSet);
+				extractReservationFromOperation(subOperation, reservationSet, idToEObjectMapping);
 			}
 			return reservationSet;
 		} else if (operation instanceof CreateDeleteOperation) {
@@ -231,27 +239,85 @@
 			} else {
 				// check for map entries
 				for (final EObject eObject : createDeleteOperation.getEObjectToIdMap().keySet()) {
-					if (eObject instanceof Map.Entry<?, ?>) {
-						final String id = createDeleteOperation.getEObjectToIdMap().get(eObject).getId();
-						final Map.Entry<?, ?> mapEntry = (Entry<?, ?>) eObject;
-						createdMapEntries.put(id, mapEntry);
+					if (!isMapEntry(eObject)) {
+						continue;
 					}
+					handleMapEntry((Entry<?, ?>) eObject, createDeleteOperation, idToEObjectMapping);
 				}
 			}
 
 			// handle suboperations
 			for (final AbstractOperation subOperation : createDeleteOperation.getSubOperations()) {
-				extractReservationFromOperation(subOperation, reservationSet);
+				extractReservationFromOperation(subOperation, reservationSet, idToEObjectMapping);
 			}
 			return reservationSet;
 		} else if (operation instanceof FeatureOperation) {
-			handleFeatureOperation(operation, reservationSet);
+			handleFeatureOperation(operation, reservationSet, idToEObjectMapping);
 			return reservationSet;
 		}
 		throw new IllegalStateException("Unkown operation type: " + operation.getClass().getCanonicalName());
 	}
 
-	private void handleFeatureOperation(AbstractOperation operation, ReservationSet reservationSet) {
+	private boolean isMapEntry(EObject eObject) {
+		return eObject instanceof Map.Entry<?, ?>;
+	}
+
+	private void handleMapEntry(final Map.Entry<?, ?> mapEntry, CreateDeleteOperation createDeleteOperation,
+		ModelElementIdToEObjectMapping idToEObjectMapping) {
+		final String mapEntryId = createDeleteOperation.getEObjectToIdMap().get(mapEntry).getId();
+
+		if (mapEntry.getKey() != null) {
+			idToKeyHashCode.put(mapEntryId, new Integer(mapEntry.getKey().hashCode()));
+			return;
+		}
+
+		// if entry's key is null, fetch sub operation, check feature name for key, and resolve ID to get a
+		// string representation for the key
+		final ReferenceOperation keyReferenceOperation = getKeyReferenceOperation(createDeleteOperation);
+
+		if (keyReferenceOperation != null) {
+			final Set<ModelElementId> otherInvolvedModelElements = keyReferenceOperation
+				.getOtherInvolvedModelElements();
+			final Iterator<ModelElementId> iterator = otherInvolvedModelElements.iterator();
+			if (iterator.hasNext()) {
+				final ModelElementId otherId = iterator.next();
+				final EObject key = idToEObjectMapping.get(otherId);
+				if (key != null) {
+					idToKeyHashCode.put(mapEntryId, new Integer(key.hashCode()));
+				} else {
+					ModelUtil.logWarning("Key is null. Can not be used for conflict detection.");
+				}
+			}
+		} else {
+			ModelUtil.logWarning(
+				MessageFormat.format("Single reference sub operation of create operation {0} is missing",
+					createDeleteOperation.getOperationId()));
+		}
+	}
+
+	/**
+	 * Tries to find the operation that set's the key attribute of a map entry.
+	 * 
+	 * @param createDeleteOperation
+	 * @return
+	 */
+	private ReferenceOperation getKeyReferenceOperation(CreateDeleteOperation createDeleteOperation) {
+		for (final AbstractOperation op : createDeleteOperation.getSubOperations()) {
+			if (!SingleReferenceOperation.class.isInstance(op)) {
+				continue;
+			}
+
+			final SingleReferenceOperation singleReferenceOperation = SingleReferenceOperation.class.cast(op);
+			if (singleReferenceOperation.getFeatureName().equals("key")) {
+				return singleReferenceOperation;
+			}
+		}
+
+		return null;
+	}
+
+	private void handleFeatureOperation(AbstractOperation operation, ReservationSet reservationSet,
+		ModelElementIdToEObjectMapping idToEObjectMapping) {
 		final FeatureOperation featureOperation = (FeatureOperation) operation;
 		final String modelElementId = featureOperation.getModelElementId().getId();
 		final String featureName = featureOperation.getFeatureName();
@@ -269,18 +335,24 @@
 				}
 			}
 		}
-		if (featureOperation instanceof MultiReferenceOperation
-			|| featureOperation instanceof MultiReferenceSetOperation
-			|| featureOperation instanceof MultiReferenceMoveOperation) {
+		if (isMultiRef(featureOperation) || isMultiRefSet(featureOperation) || isMultiMoveRef(featureOperation)) {
+
 			for (final ModelElementId otherModelElement : featureOperation.getOtherInvolvedModelElements()) {
+
 				reservationSet.addMultiReferenceWithOppositeReservation(modelElementId, featureName,
 					otherModelElement.getId());
 
+				Integer hashCode = null;
+
 				if (isCreatedMapEntry(otherModelElement)) {
-					final Map.Entry<?, ?> mapEntry = getCreatedMapEntry(otherModelElement);
-					// FIXME: currently we only can handle keys which have a valid string representation
+					hashCode = getKeyHashCode(otherModelElement);
+				} else if (isMapEntry(idToEObjectMapping.get(otherModelElement))) {
+					hashCode = getKeyHashCode(idToEObjectMapping, otherModelElement);
+				}
+
+				if (hashCode != null) {
 					reservationSet.addMapKeyReservation(modelElementId, featureName,
-						mapEntry.getKey().toString());
+						hashCode.toString());
 				}
 			}
 		} else {
@@ -289,12 +361,20 @@
 		return;
 	}
 
-	private Map.Entry<?, ?> getCreatedMapEntry(ModelElementId otherModelElement) {
-		return createdMapEntries.get(otherModelElement);
+	private Integer getKeyHashCode(ModelElementIdToEObjectMapping idToEObjectMapping, ModelElementId keyId) {
+		final Map.Entry<?, ?> mapEntry = (Entry<?, ?>) idToEObjectMapping.get(keyId);
+		if (mapEntry.getKey() != null) {
+			return new Integer(mapEntry.getKey().hashCode());
+		}
+		return null;
+	}
+
+	private Integer getKeyHashCode(ModelElementId keyId) {
+		return idToKeyHashCode.get(keyId);
 	}
 
 	private boolean isCreatedMapEntry(ModelElementId modelElementId) {
-		return createdMapEntries.containsKey(modelElementId.getId());
+		return idToKeyHashCode.containsKey(modelElementId.getId());
 	}
 
 	/**
diff --git a/features/org.eclipse.emf.emfstore.backchannel.feature/feature.xml b/features/org.eclipse.emf.emfstore.backchannel.feature/feature.xml
index 179f18e..3a561fb 100644
--- a/features/org.eclipse.emf.emfstore.backchannel.feature/feature.xml
+++ b/features/org.eclipse.emf.emfstore.backchannel.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.emf.emfstore.backchannel.feature"
       label="EMFStore Backchannel"
-      version="1.0.2.qualifier"
+      version="1.0.4.qualifier"
       provider-name="Eclipse Modeling Project"
       plugin="org.eclipse.emf.emfstore.branding">
 
diff --git a/features/org.eclipse.emf.emfstore.client.feature/feature.xml b/features/org.eclipse.emf.emfstore.client.feature/feature.xml
index 7a22cd9..c31aa1c 100644
--- a/features/org.eclipse.emf.emfstore.client.feature/feature.xml
+++ b/features/org.eclipse.emf.emfstore.client.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.emf.emfstore.client.feature"
       label="EMFStore Client"
-      version="1.0.2.qualifier"
+      version="1.0.4.qualifier"
       provider-name="Eclipse Modeling Project"
       plugin="org.eclipse.emf.emfstore.client">
 
diff --git a/features/org.eclipse.emf.emfstore.client.feature/pom.xml b/features/org.eclipse.emf.emfstore.client.feature/pom.xml
index 672da63..5b12801 100644
--- a/features/org.eclipse.emf.emfstore.client.feature/pom.xml
+++ b/features/org.eclipse.emf.emfstore.client.feature/pom.xml
@@ -5,12 +5,12 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.client.feature</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
   <build>
diff --git a/features/org.eclipse.emf.emfstore.client.transaction.feature/feature.xml b/features/org.eclipse.emf.emfstore.client.transaction.feature/feature.xml
index 03ab049..d3fb9ef 100644
--- a/features/org.eclipse.emf.emfstore.client.transaction.feature/feature.xml
+++ b/features/org.eclipse.emf.emfstore.client.transaction.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.emf.emfstore.client.transaction.feature"
       label="EMFStore Transaction Support"
-      version="1.0.2.qualifier"
+      version="1.0.4.qualifier"
       provider-name="Eclipse Modeling Project"
       plugin="org.eclipse.emf.emfstore.client.transaction">
 
diff --git a/features/org.eclipse.emf.emfstore.client.transaction.feature/pom.xml b/features/org.eclipse.emf.emfstore.client.transaction.feature/pom.xml
index 8960906..6cb0ac0 100644
--- a/features/org.eclipse.emf.emfstore.client.transaction.feature/pom.xml
+++ b/features/org.eclipse.emf.emfstore.client.transaction.feature/pom.xml
@@ -5,12 +5,12 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.client.transaction.feature</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
   <build>
diff --git a/features/org.eclipse.emf.emfstore.client.ui.errorreporting.feature/feature.xml b/features/org.eclipse.emf.emfstore.client.ui.errorreporting.feature/feature.xml
index b98c6c0..d53dbd1 100644
--- a/features/org.eclipse.emf.emfstore.client.ui.errorreporting.feature/feature.xml
+++ b/features/org.eclipse.emf.emfstore.client.ui.errorreporting.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.emf.emfstore.client.ui.errorreporting.feature"
       label="Error Reporting Support"
-      version="1.0.2.qualifier"
+      version="1.0.4.qualifier"
       provider-name="Eclipse Modeling Project"
       plugin="org.eclipse.emf.emfstore.branding">
 
diff --git a/features/org.eclipse.emf.emfstore.client.ui.feature/feature.xml b/features/org.eclipse.emf.emfstore.client.ui.feature/feature.xml
index 435bd53..35e4d0a 100644
--- a/features/org.eclipse.emf.emfstore.client.ui.feature/feature.xml
+++ b/features/org.eclipse.emf.emfstore.client.ui.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.emf.emfstore.client.ui.feature"
       label="EMFStore Client UI"
-      version="1.0.2.qualifier"
+      version="1.0.4.qualifier"
       provider-name="Eclipse Modeling Project"
       plugin="org.eclipse.emf.emfstore.client.ui">
 
diff --git a/features/org.eclipse.emf.emfstore.client.ui.feature/pom.xml b/features/org.eclipse.emf.emfstore.client.ui.feature/pom.xml
index 11aa0ac..584f8d0 100644
--- a/features/org.eclipse.emf.emfstore.client.ui.feature/pom.xml
+++ b/features/org.eclipse.emf.emfstore.client.ui.feature/pom.xml
@@ -5,12 +5,12 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.client.ui.feature</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
   <build>
diff --git a/features/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator.feature/feature.xml b/features/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator.feature/feature.xml
index 7477947..e4751a5 100644
--- a/features/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator.feature/feature.xml
+++ b/features/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.emf.emfstore.client.ui.historybrowsercomparator.feature"
       label="HistoryBrowserComparator"
-      version="1.0.2.qualifier"
+      version="1.0.4.qualifier"
       provider-name="Eclipse Modeling Project"
       plugin="org.eclipse.emf.emfstore.client.ui.historybrowsercomparator">
 
diff --git a/features/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator.feature/pom.xml b/features/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator.feature/pom.xml
index 35e4704..ae177e3 100644
--- a/features/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator.feature/pom.xml
+++ b/features/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator.feature/pom.xml
@@ -5,12 +5,12 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.client.ui.historybrowsercomparator.feature</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
   <build>
diff --git a/features/org.eclipse.emf.emfstore.common.feature/feature.xml b/features/org.eclipse.emf.emfstore.common.feature/feature.xml
index ea26dbc..71eadb8 100644
--- a/features/org.eclipse.emf.emfstore.common.feature/feature.xml
+++ b/features/org.eclipse.emf.emfstore.common.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.emf.emfstore.common.feature"
       label="EMFStore Common"
-      version="1.0.2.qualifier"
+      version="1.0.4.qualifier"
       provider-name="Eclipse Modeling Project"
       plugin="org.eclipse.emf.emfstore.common">
 
diff --git a/features/org.eclipse.emf.emfstore.common.feature/pom.xml b/features/org.eclipse.emf.emfstore.common.feature/pom.xml
index 022c48c..6d13ad2 100644
--- a/features/org.eclipse.emf.emfstore.common.feature/pom.xml
+++ b/features/org.eclipse.emf.emfstore.common.feature/pom.xml
@@ -5,12 +5,12 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.common.feature</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
   <build>
diff --git a/features/org.eclipse.emf.emfstore.ecore.feature/feature.xml b/features/org.eclipse.emf.emfstore.ecore.feature/feature.xml
index 4e05936..b3344b4 100644
--- a/features/org.eclipse.emf.emfstore.ecore.feature/feature.xml
+++ b/features/org.eclipse.emf.emfstore.ecore.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.emf.emfstore.ecore.feature"
       label="EMFStore Ecore"
-      version="1.0.2.qualifier"
+      version="1.0.4.qualifier"
       provider-name="Eclipse Modeling Project"
       plugin="org.eclipse.emf.emfstore.ecore">
 
diff --git a/features/org.eclipse.emf.emfstore.ecore.feature/pom.xml b/features/org.eclipse.emf.emfstore.ecore.feature/pom.xml
index e1a7857..ebb48a2 100644
--- a/features/org.eclipse.emf.emfstore.ecore.feature/pom.xml
+++ b/features/org.eclipse.emf.emfstore.ecore.feature/pom.xml
@@ -5,12 +5,12 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.ecore.feature</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
   <build>
diff --git a/features/org.eclipse.emf.emfstore.ecp.feature/feature.xml b/features/org.eclipse.emf.emfstore.ecp.feature/feature.xml
index 9f63d23..cc71d70 100644
--- a/features/org.eclipse.emf.emfstore.ecp.feature/feature.xml
+++ b/features/org.eclipse.emf.emfstore.ecp.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.emf.emfstore.ecp.feature"
       label="EMFStore ECP Integration"
-      version="1.0.2.qualifier"
+      version="1.0.4.qualifier"
       provider-name="Eclipse Modeling Project">
 
    <description url="http://emfstore.org ">
diff --git a/features/org.eclipse.emf.emfstore.ecp.feature/pom.xml b/features/org.eclipse.emf.emfstore.ecp.feature/pom.xml
index 99bbafc..abb3b1a 100644
--- a/features/org.eclipse.emf.emfstore.ecp.feature/pom.xml
+++ b/features/org.eclipse.emf.emfstore.ecp.feature/pom.xml
@@ -5,12 +5,12 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.ecp.feature</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
   <build>
diff --git a/features/org.eclipse.emf.emfstore.example.feature/feature.xml b/features/org.eclipse.emf.emfstore.example.feature/feature.xml
index 514a9b1..f8c7c23 100644
--- a/features/org.eclipse.emf.emfstore.example.feature/feature.xml
+++ b/features/org.eclipse.emf.emfstore.example.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.emf.emfstore.example.feature"
       label="EMFStore Code Examples"
-      version="1.0.2.qualifier"
+      version="1.0.4.qualifier"
       provider-name="Eclipse Modeling Project"
       plugin="org.eclipse.emf.emfstore.example.installer">
 
diff --git a/features/org.eclipse.emf.emfstore.example.feature/pom.xml b/features/org.eclipse.emf.emfstore.example.feature/pom.xml
index b414c87..463a1a2 100644
--- a/features/org.eclipse.emf.emfstore.example.feature/pom.xml
+++ b/features/org.eclipse.emf.emfstore.example.feature/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.example.feature</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 </project>
diff --git a/features/org.eclipse.emf.emfstore.fuzzy.feature/feature.xml b/features/org.eclipse.emf.emfstore.fuzzy.feature/feature.xml
index dd49830..d7d3519 100644
--- a/features/org.eclipse.emf.emfstore.fuzzy.feature/feature.xml
+++ b/features/org.eclipse.emf.emfstore.fuzzy.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.emf.emfstore.fuzzy.feature"
       label="Fuzzy Testing"
-      version="1.0.2.qualifier"
+      version="1.0.4.qualifier"
       provider-name="Eclipse Modeling Project"
       plugin="org.eclipse.emf.emfstore.branding">
 
diff --git a/features/org.eclipse.emf.emfstore.fuzzy.feature/pom.xml b/features/org.eclipse.emf.emfstore.fuzzy.feature/pom.xml
index 34ee4fd..7b272f9 100644
--- a/features/org.eclipse.emf.emfstore.fuzzy.feature/pom.xml
+++ b/features/org.eclipse.emf.emfstore.fuzzy.feature/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.fuzzy.feature</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 </project>
diff --git a/features/org.eclipse.emf.emfstore.fuzzy.test.feature/feature.xml b/features/org.eclipse.emf.emfstore.fuzzy.test.feature/feature.xml
index f695627..05a8c7e 100644
--- a/features/org.eclipse.emf.emfstore.fuzzy.test.feature/feature.xml
+++ b/features/org.eclipse.emf.emfstore.fuzzy.test.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.emf.emfstore.fuzzy.test.feature"
       label="EMFStore Fuzzy Tests"
-      version="1.0.2.qualifier"
+      version="1.0.4.qualifier"
       provider-name="Eclipse Modeling Project">
 
    <description url="http://www.example.com/description">
diff --git a/features/org.eclipse.emf.emfstore.fuzzy.test.feature/pom.xml b/features/org.eclipse.emf.emfstore.fuzzy.test.feature/pom.xml
index e11715f..ebe8b6c 100644
--- a/features/org.eclipse.emf.emfstore.fuzzy.test.feature/pom.xml
+++ b/features/org.eclipse.emf.emfstore.fuzzy.test.feature/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.fuzzy.test.feature</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 </project>
diff --git a/features/org.eclipse.emf.emfstore.modelmutator.feature/feature.xml b/features/org.eclipse.emf.emfstore.modelmutator.feature/feature.xml
index daf0c9e..c843bf0 100644
--- a/features/org.eclipse.emf.emfstore.modelmutator.feature/feature.xml
+++ b/features/org.eclipse.emf.emfstore.modelmutator.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.emf.emfstore.modelmutator.feature"
       label="Model Mutator"
-      version="1.0.2.qualifier"
+      version="1.0.4.qualifier"
       provider-name="Eclipse Modeling Project"
       plugin="org.eclipse.emf.emfstore.modelmutator">
 
diff --git a/features/org.eclipse.emf.emfstore.modelmutator.feature/pom.xml b/features/org.eclipse.emf.emfstore.modelmutator.feature/pom.xml
index 352f994..b8c408f 100644
--- a/features/org.eclipse.emf.emfstore.modelmutator.feature/pom.xml
+++ b/features/org.eclipse.emf.emfstore.modelmutator.feature/pom.xml
@@ -5,12 +5,12 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.modelmutator.feature</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
   <build>
diff --git a/features/org.eclipse.emf.emfstore.perspective.feature/feature.xml b/features/org.eclipse.emf.emfstore.perspective.feature/feature.xml
index f451f2d..d1c6a00 100644
--- a/features/org.eclipse.emf.emfstore.perspective.feature/feature.xml
+++ b/features/org.eclipse.emf.emfstore.perspective.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.emf.emfstore.perspective.feature"
       label="EMFStore Perspective"
-      version="1.0.2.qualifier"
+      version="1.0.4.qualifier"
       provider-name="Eclipse Modeling Project"
       plugin="org.eclipse.emf.emfstore.branding">
 
diff --git a/features/org.eclipse.emf.emfstore.perspective.feature/pom.xml b/features/org.eclipse.emf.emfstore.perspective.feature/pom.xml
index 21e02f3..33f9979 100644
--- a/features/org.eclipse.emf.emfstore.perspective.feature/pom.xml
+++ b/features/org.eclipse.emf.emfstore.perspective.feature/pom.xml
@@ -5,12 +5,12 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.perspective.feature</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
   <build>
diff --git a/features/org.eclipse.emf.emfstore.sdk.feature/feature.xml b/features/org.eclipse.emf.emfstore.sdk.feature/feature.xml
index 0e2c6c6..383beaa 100644
--- a/features/org.eclipse.emf.emfstore.sdk.feature/feature.xml
+++ b/features/org.eclipse.emf.emfstore.sdk.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.emf.emfstore.sdk.feature"
       label="EMFStore SDK"
-      version="1.0.2.qualifier"
+      version="1.0.4.qualifier"
       provider-name="Eclipse Modeling Project"
       plugin="org.eclipse.emf.emfstore.branding">
 
diff --git a/features/org.eclipse.emf.emfstore.sdk.feature/pom.xml b/features/org.eclipse.emf.emfstore.sdk.feature/pom.xml
index 42f0a6c..e697d3b 100644
--- a/features/org.eclipse.emf.emfstore.sdk.feature/pom.xml
+++ b/features/org.eclipse.emf.emfstore.sdk.feature/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.sdk.feature</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 </project>
diff --git a/features/org.eclipse.emf.emfstore.server.feature/feature.xml b/features/org.eclipse.emf.emfstore.server.feature/feature.xml
index 5a3a312..9a5f33a 100644
--- a/features/org.eclipse.emf.emfstore.server.feature/feature.xml
+++ b/features/org.eclipse.emf.emfstore.server.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.emf.emfstore.server.feature"
       label="EMFStore Server"
-      version="1.0.2.qualifier"
+      version="1.0.4.qualifier"
       provider-name="Eclipse Modeling Project"
       plugin="org.eclipse.emf.emfstore.server">
 
diff --git a/features/org.eclipse.emf.emfstore.server.feature/pom.xml b/features/org.eclipse.emf.emfstore.server.feature/pom.xml
index 99b695a..376cba6 100644
--- a/features/org.eclipse.emf.emfstore.server.feature/pom.xml
+++ b/features/org.eclipse.emf.emfstore.server.feature/pom.xml
@@ -5,12 +5,12 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.server.feature</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
   <build>
diff --git a/features/org.eclipse.emf.emfstore.test.feature/feature.xml b/features/org.eclipse.emf.emfstore.test.feature/feature.xml
index 6cc6b7c..f1f9f64 100644
--- a/features/org.eclipse.emf.emfstore.test.feature/feature.xml
+++ b/features/org.eclipse.emf.emfstore.test.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.emf.emfstore.test.feature"
       label="EMFStore Tests"
-      version="1.0.2.qualifier"
+      version="1.0.4.qualifier"
       provider-name="Eclipse Modeling Project"
       plugin="org.eclipse.emf.emfstore.branding">
 
diff --git a/releng/_target/pom.xml b/releng/_target/pom.xml
index 952b37f..4c8a54b 100644
--- a/releng/_target/pom.xml
+++ b/releng/_target/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>emfstore</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-target-definition</packaging>
 </project>
\ No newline at end of file
diff --git a/releng/emfstore-parent/pom.xml b/releng/emfstore-parent/pom.xml
index bac246d..64049a6 100644
--- a/releng/emfstore-parent/pom.xml
+++ b/releng/emfstore-parent/pom.xml
@@ -5,7 +5,7 @@
 
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>emfstore-parent</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <properties>
@@ -13,7 +13,7 @@
     <junit-version>4.8.2</junit-version>
     <maven-checkstyle-version>2.10</maven-checkstyle-version>
     <jacoco-version>0.5.7.201204190339</jacoco-version>
-	<emfstore-version>1.0.2-SNAPSHOT</emfstore-version>
+	<emfstore-version>1.0.4-SNAPSHOT</emfstore-version>
 	<!-- Properties to enable jacoco code coverage analysis with sonar -->
 	<sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
 	<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
diff --git a/releng/org.eclipse.emf.emfstore.p2repository/category.xml b/releng/org.eclipse.emf.emfstore.p2repository/category.xml
index 1fb572f..2ddfd03 100644
--- a/releng/org.eclipse.emf.emfstore.p2repository/category.xml
+++ b/releng/org.eclipse.emf.emfstore.p2repository/category.xml
@@ -18,19 +18,19 @@
    <feature id="org.eclipse.emf.emfstore.example.feature" version="0.0.0">
       <category name="org.eclipse.emf.emfstore.core"/>
    </feature>
-   <feature url="features/org.eclipse.emf.emfstore.client.transaction.feature_1.0.2.qualifier.jar" id="org.eclipse.emf.emfstore.client.transaction.feature" version="1.0.2.qualifier">
+   <feature url="features/org.eclipse.emf.emfstore.client.transaction.feature_1.0.4.qualifier.jar" id="org.eclipse.emf.emfstore.client.transaction.feature" version="1.0.4.qualifier">
       <category name="org.eclipse.emf.emfstore.other"/>
    </feature>
-   <feature url="features/org.eclipse.emf.emfstore.modelmutator.feature_1.0.2.qualifier.jar" id="org.eclipse.emf.emfstore.modelmutator.feature" version="1.0.2.qualifier">
+   <feature url="features/org.eclipse.emf.emfstore.modelmutator.feature_1.0.4.qualifier.jar" id="org.eclipse.emf.emfstore.modelmutator.feature" version="1.0.4.qualifier">
       <category name="org.eclipse.emf.emfstore.other"/>
    </feature>
-   <feature url="features/org.eclipse.emf.emfstore.ecore.feature_1.0.2.qualifier.jar" id="org.eclipse.emf.emfstore.ecore.feature" version="1.0.2.qualifier">
+   <feature url="features/org.eclipse.emf.emfstore.ecore.feature_1.0.4.qualifier.jar" id="org.eclipse.emf.emfstore.ecore.feature" version="1.0.4.qualifier">
       <category name="org.eclipse.emf.emfstore.other"/>
    </feature>
-   <feature url="features/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator.feature_1.0.2.qualifier.jar" id="org.eclipse.emf.emfstore.client.ui.historybrowsercomparator.feature" version="1.0.2.qualifier">
+   <feature url="features/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator.feature_1.0.4.qualifier.jar" id="org.eclipse.emf.emfstore.client.ui.historybrowsercomparator.feature" version="1.0.4.qualifier">
       <category name="org.eclipse.emf.emfstore.other"/>
    </feature>
-   <feature url="features/org.eclipse.emf.emfstore.sdk.feature_1.0.2.qualifier.jar" id="org.eclipse.emf.emfstore.sdk.feature" version="1.0.2.qualifier">
+   <feature url="features/org.eclipse.emf.emfstore.sdk.feature_1.0.4.qualifier.jar" id="org.eclipse.emf.emfstore.sdk.feature" version="1.0.4.qualifier">
       <category name="org.eclipse.emfstore.sdk"/>
    </feature>
    <category-def name="org.eclipse.emf.emfstore.core" label="EMFStore Core Features">
diff --git a/releng/org.eclipse.emf.emfstore.p2repository/pom.xml b/releng/org.eclipse.emf.emfstore.p2repository/pom.xml
index ade7def..12503f7 100644
--- a/releng/org.eclipse.emf.emfstore.p2repository/pom.xml
+++ b/releng/org.eclipse.emf.emfstore.p2repository/pom.xml
@@ -5,11 +5,11 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.p2repository</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-repository</packaging>
 </project>
diff --git a/releng/org.eclipse.emf.emfstore.products/pom.xml b/releng/org.eclipse.emf.emfstore.products/pom.xml
index 8b84f96..a74b08f 100644
--- a/releng/org.eclipse.emf.emfstore.products/pom.xml
+++ b/releng/org.eclipse.emf.emfstore.products/pom.xml
@@ -5,12 +5,12 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.products</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-repository</packaging>
 
   <build>
diff --git a/tests/org.eclipse.emf.emfstore.client.test.alltests/META-INF/MANIFEST.MF b/tests/org.eclipse.emf.emfstore.client.test.alltests/META-INF/MANIFEST.MF
index 6423014..9b53e4e 100644
--- a/tests/org.eclipse.emf.emfstore.client.test.alltests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.emf.emfstore.client.test.alltests/META-INF/MANIFEST.MF
@@ -2,11 +2,11 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: All EMFStore Client Tests
 Bundle-SymbolicName: org.eclipse.emf.emfstore.client.test.alltests
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-Activator: org.eclipse.emf.emfstore.client.test.alltests.Activator
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.7.0,4.0.0)",
- org.eclipse.emf.emfstore.client.test;bundle-version="[1.0.2,2.0.0)",
- org.eclipse.emf.emfstore.client.test.ui;bundle-version="[1.0.2,2.0.0)"
+ org.eclipse.emf.emfstore.client.test;bundle-version="[1.0.4,2.0.0)",
+ org.eclipse.emf.emfstore.client.test.ui;bundle-version="[1.0.4,2.0.0)"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Export-Package: org.eclipse.emf.emfstore.client.test.alltests;version="1.0.2";x-internal:=true
+Export-Package: org.eclipse.emf.emfstore.client.test.alltests;version="1.0.4";x-internal:=true
diff --git a/tests/org.eclipse.emf.emfstore.client.test.alltests/pom.xml b/tests/org.eclipse.emf.emfstore.client.test.alltests/pom.xml
index ec24493..1ea559d 100644
--- a/tests/org.eclipse.emf.emfstore.client.test.alltests/pom.xml
+++ b/tests/org.eclipse.emf.emfstore.client.test.alltests/pom.xml
@@ -6,13 +6,13 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
 
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.client.test.alltests</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
 
   <build>
diff --git a/tests/org.eclipse.emf.emfstore.client.test.ui/META-INF/MANIFEST.MF b/tests/org.eclipse.emf.emfstore.client.test.ui/META-INF/MANIFEST.MF
index ddb1fbe..aa06ddc 100644
--- a/tests/org.eclipse.emf.emfstore.client.test.ui/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.emf.emfstore.client.test.ui/META-INF/MANIFEST.MF
@@ -2,12 +2,12 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMFStore Client UI Tests
 Bundle-SymbolicName: org.eclipse.emf.emfstore.client.test.ui;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-Vendor: Eclipse Modeling Project
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Require-Bundle: org.eclipse.emf.emfstore.client.test;bundle-version="[1.0.2,2.0.0)",
- org.eclipse.emf.emfstore.client.ui;bundle-version="[1.0.2,2.0.0)",
+Require-Bundle: org.eclipse.emf.emfstore.client.test;bundle-version="[1.0.4,2.0.0)",
+ org.eclipse.emf.emfstore.client.ui;bundle-version="[1.0.4,2.0.0)",
  org.eclipse.ui;bundle-version="[3.0.0,4.0.0)",
  org.eclipse.swtbot.eclipse.core;bundle-version="[2.1.0,3.0.0)",
  org.eclipse.swtbot.eclipse.finder;bundle-version="[2.1.0,3.0.0)",
@@ -16,5 +16,5 @@
 Bundle-ActivationPolicy: lazy
 Bundle-Activator: org.eclipse.emf.emfstore.client.test.ui.Activator
 Bundle-ClassPath: .
-Export-Package: org.eclipse.emf.emfstore.client.test.ui;version="1.0.2",
- org.eclipse.emf.emfstore.client.test.ui.controllers;version="1.0.2"
+Export-Package: org.eclipse.emf.emfstore.client.test.ui;version="1.0.4",
+ org.eclipse.emf.emfstore.client.test.ui.controllers;version="1.0.4"
diff --git a/tests/org.eclipse.emf.emfstore.client.test.ui/pom.xml b/tests/org.eclipse.emf.emfstore.client.test.ui/pom.xml
index 39c8c7f..ad6cad1 100644
--- a/tests/org.eclipse.emf.emfstore.client.test.ui/pom.xml
+++ b/tests/org.eclipse.emf.emfstore.client.test.ui/pom.xml
@@ -6,13 +6,13 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
 
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.client.test.ui</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
   
 </project>
diff --git a/tests/org.eclipse.emf.emfstore.client.test/META-INF/MANIFEST.MF b/tests/org.eclipse.emf.emfstore.client.test/META-INF/MANIFEST.MF
index 33ad0e3..e104e24 100644
--- a/tests/org.eclipse.emf.emfstore.client.test/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.emf.emfstore.client.test/META-INF/MANIFEST.MF
@@ -2,115 +2,115 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: EMFStore Client Tests
 Bundle-SymbolicName: org.eclipse.emf.emfstore.client.test;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.4.qualifier
 Bundle-Vendor: Eclipse Modeling Project
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Require-Bundle: org.eclipse.emf.emfstore.client;bundle-version="[1.0.2,2.0.0)";visibility:=reexport,
- org.eclipse.emf.emfstore.client.model.edit;bundle-version="[1.0.2,2.0.0)";visibility:=reexport,
- org.eclipse.emf.emfstore.modelmutator;bundle-version="[1.0.2,2.0.0)";visibility:=reexport,
- org.eclipse.emf.emfstore.examplemodel;bundle-version="[1.0.2,2.0.0)";visibility:=reexport,
- org.eclipse.emf.emfstore.common.model.edit;bundle-version="[1.0.2,2.0.0)",
- org.eclipse.emf.emfstore.server.model.edit;bundle-version="[1.0.2,2.0.0)",
+Require-Bundle: org.eclipse.emf.emfstore.client;bundle-version="[1.0.4,2.0.0)";visibility:=reexport,
+ org.eclipse.emf.emfstore.client.model.edit;bundle-version="[1.0.4,2.0.0)";visibility:=reexport,
+ org.eclipse.emf.emfstore.modelmutator;bundle-version="[1.0.4,2.0.0)";visibility:=reexport,
+ org.eclipse.emf.emfstore.examplemodel;bundle-version="[1.0.4,2.0.0)";visibility:=reexport,
+ org.eclipse.emf.emfstore.common.model.edit;bundle-version="[1.0.4,2.0.0)",
+ org.eclipse.emf.emfstore.server.model.edit;bundle-version="[1.0.4,2.0.0)",
  org.eclipse.core.resources;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.emf.emfstore.example.merging;bundle-version="[1.0.2,2.0.0)",
- org.eclipse.emf.emfstore.example.helloworld;bundle-version="[1.0.2,2.0.0)",
+ org.eclipse.emf.emfstore.example.merging;bundle-version="[1.0.4,2.0.0)",
+ org.eclipse.emf.emfstore.example.helloworld;bundle-version="[1.0.4,2.0.0)",
  org.junit;bundle-version="[4.10.0,5.0.0)";visibility:=reexport
 Bundle-ActivationPolicy: lazy
 Bundle-Activator: org.eclipse.emf.emfstore.client.test.Activator
-Export-Package: org.eclipse.emf.emfstore.client.test;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.api;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.caching;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.changeTracking;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.changeTracking.canonization;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.changeTracking.commands;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.changeTracking.notification;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.changeTracking.operations;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.changeTracking.recording;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.changeTracking.topology;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.common;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.common.extensionregistry;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.common.observerbus;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.common.observerbus.assets;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.config;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.conflictDetection;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.conflictDetection.merging;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.integration;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.integration.forward;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.integration.reversibility;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.memory;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.activity;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.activity.impl;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.activity.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.activity.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.attachment;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.attachment.impl;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.attachment.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.attachment.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.bug;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.bug.impl;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.bug.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.bug.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.change;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.change.impl;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.change.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.change.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.classes;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.classes.impl;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.classes.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.classes.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.component;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.component.impl;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.component.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.component.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.document;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.document.impl;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.document.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.document.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.impl;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.meeting;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.meeting.impl;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.meeting.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.meeting.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.organization;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.organization.impl;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.organization.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.organization.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.profile;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.profile.impl;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.profile.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.profile.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.rationale;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.rationale.impl;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.rationale.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.rationale.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.release;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.release.impl;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.release.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.release.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.requirement;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.requirement.impl;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.requirement.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.requirement.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.state;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.state.impl;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.state.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.state.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.task;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.task.impl;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.task.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.task.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.util.impl;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.util.provider;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.model.util.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.performance;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.persistence;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.server;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.server.api;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.server.api.util;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.testmodel;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.testmodel.impl;version="1.0.2";x-internal:=true,
- org.eclipse.emf.emfstore.client.test.testmodel.util;version="1.0.2";x-internal:=true
+Export-Package: org.eclipse.emf.emfstore.client.test;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.api;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.caching;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.changeTracking;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.changeTracking.canonization;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.changeTracking.commands;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.changeTracking.notification;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.changeTracking.operations;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.changeTracking.recording;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.changeTracking.topology;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.common;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.common.extensionregistry;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.common.observerbus;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.common.observerbus.assets;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.config;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.conflictDetection;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.conflictDetection.merging;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.integration;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.integration.forward;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.integration.reversibility;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.memory;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.activity;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.activity.impl;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.activity.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.activity.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.attachment;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.attachment.impl;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.attachment.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.attachment.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.bug;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.bug.impl;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.bug.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.bug.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.change;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.change.impl;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.change.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.change.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.classes;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.classes.impl;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.classes.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.classes.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.component;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.component.impl;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.component.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.component.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.document;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.document.impl;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.document.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.document.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.impl;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.meeting;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.meeting.impl;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.meeting.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.meeting.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.organization;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.organization.impl;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.organization.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.organization.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.profile;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.profile.impl;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.profile.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.profile.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.rationale;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.rationale.impl;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.rationale.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.rationale.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.release;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.release.impl;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.release.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.release.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.requirement;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.requirement.impl;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.requirement.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.requirement.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.state;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.state.impl;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.state.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.state.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.task;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.task.impl;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.task.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.task.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.util.impl;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.util.provider;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.model.util.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.performance;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.persistence;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.server;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.server.api;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.server.api.util;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.testmodel;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.testmodel.impl;version="1.0.4";x-internal:=true,
+ org.eclipse.emf.emfstore.client.test.testmodel.util;version="1.0.4";x-internal:=true
diff --git a/tests/org.eclipse.emf.emfstore.client.test/pom.xml b/tests/org.eclipse.emf.emfstore.client.test/pom.xml
index 5a6a951..4e772a4 100644
--- a/tests/org.eclipse.emf.emfstore.client.test/pom.xml
+++ b/tests/org.eclipse.emf.emfstore.client.test/pom.xml
@@ -6,13 +6,13 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
 
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.client.test</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
 </project>
diff --git a/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/TestLogListener.java b/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/TestLogListener.java
new file mode 100644
index 0000000..b8ddf12
--- /dev/null
+++ b/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/TestLogListener.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2011 Chair for Applied Software Engineering,
+ * Technische Universitaet Muenchen.
+ * 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:
+ * Edgar Mueller - intial API and implementation
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.client.test;
+
+import org.eclipse.core.runtime.ILogListener;
+import org.eclipse.core.runtime.IStatus;
+
+/**
+ * Utility class that may be used to verify that a certain log message
+ * has been logged.
+ * 
+ * @author emueller
+ * 
+ */
+public class TestLogListener implements ILogListener {
+
+	private final String expectedMessage;
+	private boolean didReceive;
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param expectedMessage
+	 *            the message that is expected to be logged.
+	 */
+	public TestLogListener(String expectedMessage) {
+		this.expectedMessage = expectedMessage;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.core.runtime.ILogListener#logging(org.eclipse.core.runtime.IStatus, java.lang.String)
+	 */
+	public void logging(IStatus status, String plugin) {
+		if (status.getMessage().contains(expectedMessage)) {
+			didReceive = true;
+		}
+	}
+
+	/**
+	 * Whether the listener received the exepected message.
+	 * 
+	 * @return {@code true}, if the listener did receive the expected message, {@code false} otherwise
+	 */
+	public boolean didReceive() {
+		return didReceive;
+	}
+}
\ No newline at end of file
diff --git a/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/common/AllCommonTests.java b/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/common/AllCommonTests.java
index 879055f..1e62d33 100644
--- a/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/common/AllCommonTests.java
+++ b/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/common/AllCommonTests.java
@@ -1,22 +1,29 @@
-/*******************************************************************************

- * Copyright (c) 2012-2013 EclipseSource Muenchen GmbH and others.

- * 

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- * 

- * Contributors:

- ******************************************************************************/

-package org.eclipse.emf.emfstore.client.test.common;

-

-import org.eclipse.emf.emfstore.client.test.common.extensionregistry.ExtensionRegistryTest;

-import org.eclipse.emf.emfstore.client.test.common.observerbus.ObserverBusTest;

-import org.junit.runner.RunWith;

-import org.junit.runners.Suite;

-

-@RunWith(Suite.class)

-@Suite.SuiteClasses({ ObserverBusTest.class, ExtensionRegistryTest.class })

-public class AllCommonTests {

-

-}

+/*******************************************************************************
+ * Copyright (c) 2012-2013 EclipseSource Muenchen GmbH and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Otto von Wesendonk, Edgar Mueller - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.client.test.common;
+
+import org.eclipse.emf.emfstore.client.test.common.extensionregistry.ExtensionRegistryTest;
+import org.eclipse.emf.emfstore.client.test.common.observerbus.ObserverBusTest;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+/**
+ * Test suite for common functionality used by the server as well as the client.
+ * 
+ * @author ovonwesen
+ * @author emueller
+ */
+@RunWith(Suite.class)
+@Suite.SuiteClasses({ ObserverBusTest.class, ExtensionRegistryTest.class, ProjectCacheTest.class })
+public class AllCommonTests {
+
+}
diff --git a/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/persistence/ProjectCacheTest.java b/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/common/ProjectCacheTest.java
similarity index 74%
rename from tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/persistence/ProjectCacheTest.java
rename to tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/common/ProjectCacheTest.java
index 6dbf6fa..e6847b0 100644
--- a/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/persistence/ProjectCacheTest.java
+++ b/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/common/ProjectCacheTest.java
@@ -1,197 +1,247 @@
-/*******************************************************************************

- * Copyright (c) 2012-2013 EclipseSource Muenchen GmbH and others.

- * 

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- * 

- * Contributors:

- ******************************************************************************/

-package org.eclipse.emf.emfstore.client.test.persistence;

-

-import static org.junit.Assert.assertNotNull;

-import static org.junit.Assert.assertNull;

-

-import org.eclipse.emf.emfstore.client.test.WorkspaceTest;

-import org.eclipse.emf.emfstore.client.test.testmodel.TestElement;

-import org.eclipse.emf.emfstore.client.test.testmodel.TestElementContainer;

-import org.eclipse.emf.emfstore.client.test.testmodel.TestmodelFactory;

-import org.eclipse.emf.emfstore.internal.client.model.util.EMFStoreCommand;

-import org.eclipse.emf.emfstore.internal.common.model.Project;

-import org.junit.Test;

-

-public class ProjectCacheTest extends WorkspaceTest {

-

-	@Test

-	public void testGetIdForCutElement() {

-

-		final Project project = getProject();

-		final TestElement cutElement = getTestElement();

-		final TestElement element = getTestElement();

-		new EMFStoreCommand() {

-

-			@Override

-			protected void doRun() {

-				project.getCutElements().add(cutElement);

-				project.addModelElement(element);

-

-			}

-		}.run(false);

-

-		assertNotNull(project.getModelElementId(element));

-		assertNotNull(project.getModelElementId(cutElement));

-	}

-

-	@Test

-	public void testGetNoIdForDeletedElement() {

-

-		final Project project = getProject();

-		final TestElement element = getTestElement();

-

-		new EMFStoreCommand() {

-

-			@Override

-			protected void doRun() {

-				project.addModelElement(element);

-			}

-		}.run(false);

-

-		new EMFStoreCommand() {

-

-			@Override

-			protected void doRun() {

-				project.deleteModelElement(element);

-			}

-		}.run(false);

-

-		assertNull(project.getModelElementId(element));

-	}

-

-	@Test

-	public void testSwitchContainerInDifferentCommands() {

-

-		final Project project = getProject();

-		final TestElement element = getTestElement();

-		final TestElementContainer container = TestmodelFactory.eINSTANCE.createTestElementContainer();

-		container.getElements().add(element);

-

-		new EMFStoreCommand() {

-			@Override

-			protected void doRun() {

-				project.addModelElement(container);

-				clearOperations();

-			}

-		}.run(false);

-

-		new EMFStoreCommand() {

-			@Override

-			protected void doRun() {

-				element.setContainer(null);

-			}

-		}.run(false);

-

-		new EMFStoreCommand() {

-			@Override

-			protected void doRun() {

-				container.getElements().add(element);

-			}

-		}.run(false);

-

-	}

-

-	@Test

-	public void testSwitchContainerViaElement() {

-

-		final Project project = getProject();

-		final TestElement element = getTestElement();

-		final TestElementContainer container = TestmodelFactory.eINSTANCE.createTestElementContainer();

-		container.getElements().add(element);

-		final TestElementContainer container2 = TestmodelFactory.eINSTANCE.createTestElementContainer();

-

-		new EMFStoreCommand() {

-

-			@Override

-			protected void doRun() {

-				project.addModelElement(container);

-				project.addModelElement(container2);

-				clearOperations();

-			}

-		}.run(false);

-

-		new EMFStoreCommand() {

-			@Override

-			protected void doRun() {

-				element.setContainer(container2);

-			}

-		}.run(false);

-

-	}

-

-	@Test

-	public void testSwitchContainerViaContainer() {

-

-		final Project project = getProject();

-		final TestElement element = getTestElement();

-		final TestElementContainer container = TestmodelFactory.eINSTANCE.createTestElementContainer();

-		container.getElements().add(element);

-		final TestElementContainer container2 = TestmodelFactory.eINSTANCE.createTestElementContainer();

-

-		new EMFStoreCommand() {

-

-			@Override

-			protected void doRun() {

-				project.addModelElement(container);

-				project.addModelElement(container2);

-				clearOperations();

-			}

-		}.run(false);

-

-		new EMFStoreCommand() {

-			@Override

-			protected void doRun() {

-				container.getElements().remove(element);

-				container2.getElements().add(element);

-			}

-		}.run(false);

-	}

-

-	@Test

-	public void testElementLosesItsContainer() {

-

-		final Project project = getProject();

-		final TestElement element = getTestElement();

-		final TestElementContainer container = TestmodelFactory.eINSTANCE.createTestElementContainer();

-		container.getElements().add(element);

-

-		new EMFStoreCommand() {

-			@Override

-			protected void doRun() {

-				project.addModelElement(container);

-				clearOperations();

-			}

-		}.run(false);

-

-		new EMFStoreCommand() {

-			@Override

-			protected void doRun() {

-				container.getElements().add(element);

-			}

-		}.run(false);

-

-		new EMFStoreCommand() {

-			@Override

-			protected void doRun() {

-				element.setContainer(container);

-			}

-		}.run(false);

-

-		new EMFStoreCommand() {

-			@Override

-			protected void doRun() {

-				container.getElements().remove(element);

-				element.setContainer(null);

-			}

-		}.run(false);

-	}

-}

+/*******************************************************************************
+ * Copyright (c) 2012-2013 EclipseSource Muenchen GmbH and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.client.test.common;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.emfstore.client.test.WorkspaceTest;
+import org.eclipse.emf.emfstore.client.test.testmodel.TestElement;
+import org.eclipse.emf.emfstore.client.test.testmodel.TestElementContainer;
+import org.eclipse.emf.emfstore.client.test.testmodel.TestmodelFactory;
+import org.eclipse.emf.emfstore.internal.client.model.util.EMFStoreCommand;
+import org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection;
+import org.eclipse.emf.emfstore.internal.common.model.ModelElementId;
+import org.eclipse.emf.emfstore.internal.common.model.Project;
+import org.eclipse.emf.emfstore.internal.common.model.util.IdEObjectCollectionChangeObserver;
+import org.junit.Test;
+
+public class ProjectCacheTest extends WorkspaceTest {
+
+	@Test
+	public void testGetIdForCutElement() {
+
+		final Project project = getProject();
+		final TestElement cutElement = getTestElement();
+		final TestElement element = getTestElement();
+		new EMFStoreCommand() {
+
+			@Override
+			protected void doRun() {
+				project.getCutElements().add(cutElement);
+				project.addModelElement(element);
+
+			}
+		}.run(false);
+
+		assertNotNull(project.getModelElementId(element));
+		assertNotNull(project.getModelElementId(cutElement));
+	}
+
+	@Test
+	public void testAddingObserverMustNotOverwriteExistingIDsWhileExecutingCommand() {
+
+		final ModelElementId[] cutElementIWhileCommand = new ModelElementId[1];
+
+		final Project project = getProject();
+		final TestElement cutElement = getTestElement();
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				project.getCutElements().add(cutElement);
+				cutElementIWhileCommand[0] = project.getModelElementId(cutElement);
+				project.addIdEObjectCollectionChangeObserver(createDummyObserver());
+			}
+		}.run(false);
+
+		assertEquals(cutElementIWhileCommand[0], project.getModelElementId(cutElement));
+	}
+
+	private IdEObjectCollectionChangeObserver createDummyObserver() {
+		return new IdEObjectCollectionChangeObserver() {
+
+			public void notify(Notification notification, IdEObjectCollection collection, EObject modelElement) {
+				// TODO Auto-generated method stub
+
+			}
+
+			public void modelElementRemoved(IdEObjectCollection collection, EObject eObject) {
+				// TODO Auto-generated method stub
+
+			}
+
+			public void modelElementAdded(IdEObjectCollection collection, EObject eObject) {
+				// TODO Auto-generated method stub
+
+			}
+
+			public void collectionDeleted(IdEObjectCollection collection) {
+				// TODO Auto-generated method stub
+
+			}
+		};
+	}
+
+	@Test
+	public void testGetNoIdForDeletedElement() {
+
+		final Project project = getProject();
+		final TestElement element = getTestElement();
+
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				project.addModelElement(element);
+			}
+		}.run(false);
+
+		new EMFStoreCommand() {
+
+			@Override
+			protected void doRun() {
+				project.deleteModelElement(element);
+			}
+		}.run(false);
+
+		assertNull(project.getModelElementId(element));
+	}
+
+	@Test
+	public void testSwitchContainerInDifferentCommands() {
+
+		final Project project = getProject();
+		final TestElement element = getTestElement();
+		final TestElementContainer container = TestmodelFactory.eINSTANCE.createTestElementContainer();
+		container.getElements().add(element);
+
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				project.addModelElement(container);
+				clearOperations();
+			}
+		}.run(false);
+
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				element.setContainer(null);
+			}
+		}.run(false);
+
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				container.getElements().add(element);
+			}
+		}.run(false);
+
+	}
+
+	@Test
+	public void testSwitchContainerViaElement() {
+
+		final Project project = getProject();
+		final TestElement element = getTestElement();
+		final TestElementContainer container = TestmodelFactory.eINSTANCE.createTestElementContainer();
+		container.getElements().add(element);
+		final TestElementContainer container2 = TestmodelFactory.eINSTANCE.createTestElementContainer();
+
+		new EMFStoreCommand() {
+
+			@Override
+			protected void doRun() {
+				project.addModelElement(container);
+				project.addModelElement(container2);
+				clearOperations();
+			}
+		}.run(false);
+
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				element.setContainer(container2);
+			}
+		}.run(false);
+
+	}
+
+	@Test
+	public void testSwitchContainerViaContainer() {
+
+		final Project project = getProject();
+		final TestElement element = getTestElement();
+		final TestElementContainer container = TestmodelFactory.eINSTANCE.createTestElementContainer();
+		container.getElements().add(element);
+		final TestElementContainer container2 = TestmodelFactory.eINSTANCE.createTestElementContainer();
+
+		new EMFStoreCommand() {
+
+			@Override
+			protected void doRun() {
+				project.addModelElement(container);
+				project.addModelElement(container2);
+				clearOperations();
+			}
+		}.run(false);
+
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				container.getElements().remove(element);
+				container2.getElements().add(element);
+			}
+		}.run(false);
+	}
+
+	@Test
+	public void testElementLosesItsContainer() {
+
+		final Project project = getProject();
+		final TestElement element = getTestElement();
+		final TestElementContainer container = TestmodelFactory.eINSTANCE.createTestElementContainer();
+		container.getElements().add(element);
+
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				project.addModelElement(container);
+				clearOperations();
+			}
+		}.run(false);
+
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				container.getElements().add(element);
+			}
+		}.run(false);
+
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				element.setContainer(container);
+			}
+		}.run(false);
+
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				container.getElements().remove(element);
+				element.setContainer(null);
+			}
+		}.run(false);
+	}
+
+}
diff --git a/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/conflictDetection/ConflictDetectionMapTest.java b/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/conflictDetection/ConflictDetectionMapTest.java
index 6802ac8..6b4e5b4 100644
--- a/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/conflictDetection/ConflictDetectionMapTest.java
+++ b/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/conflictDetection/ConflictDetectionMapTest.java
@@ -18,16 +18,26 @@
 import java.util.Set;
 import java.util.concurrent.Callable;
 
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.emfstore.client.test.TestLogListener;
 import org.eclipse.emf.emfstore.client.test.testmodel.TestElement;
 import org.eclipse.emf.emfstore.client.test.testmodel.TestmodelFactory;
+import org.eclipse.emf.emfstore.client.test.testmodel.impl.TestElementToStringMapImpl;
+import org.eclipse.emf.emfstore.client.test.testmodel.impl.TestmodelFactoryImpl;
 import org.eclipse.emf.emfstore.client.util.RunESCommand;
 import org.eclipse.emf.emfstore.internal.client.model.exceptions.ChangeConflictException;
 import org.eclipse.emf.emfstore.internal.client.model.impl.ProjectSpaceBase;
 import org.eclipse.emf.emfstore.internal.common.model.ModelElementId;
+import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil;
 import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.AbstractOperation;
+import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.CreateDeleteOperation;
+import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.SingleReferenceOperation;
 import org.junit.Test;
 
 /**
+ * Conflict detection tests for map entries.
+ * 
  * @author emueller
  */
 public class ConflictDetectionMapTest extends ConflictDetectionTest {
@@ -38,6 +48,372 @@
 	 * @throws ChangeConflictException
 	 */
 	@Test
+	public void testConflictCreateVSCreateMapEntryNonContainedKey() throws ChangeConflictException {
+
+		final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
+		final TestElement key = TestmodelFactory.eINSTANCE.createTestElement();
+		addTestElement(testElement);
+		addTestElement(key);
+
+		final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
+		final ModelElementId keyId = getProjectSpace().getProject().getModelElementId(key);
+		clonedProjectSpace = (ProjectSpaceBase) cloneProjectSpace(getProjectSpace());
+		final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
+			modelElementId);
+		final TestElement clonedKey = (TestElement) clonedProjectSpace.getProject().getModelElement(keyId);
+
+		updateMapEntryNonContainedKey(testElement, key, "bar");
+		updateMapEntryNonContainedKey(clonedTestElement, clonedKey, "quux");
+
+		final Set<AbstractOperation> conflicts = getConflicts(
+			getProjectSpace().getLocalChangePackage().getOperations(),
+			clonedProjectSpace.getLocalChangePackage().getOperations(), getProject());
+
+		assertTrue(conflicts.size() > 0);
+
+	}
+
+	/**
+	 * Tests if creating map entries with the same key conflict.
+	 * 
+	 * @throws ChangeConflictException
+	 */
+	@Test
+	public void testConflictCreateVsMoveNonContainedKey() throws ChangeConflictException {
+
+		final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
+		final TestElement key = TestmodelFactory.eINSTANCE.createTestElement();
+		final TestmodelFactoryImpl factory = (TestmodelFactoryImpl) TestmodelFactory.eINSTANCE;
+		final TestElementToStringMapImpl newEntry = (TestElementToStringMapImpl) factory.createTestElementToStringMap();
+		addTestElement(testElement);
+		addTestElement(key);
+		RunESCommand.run(new Callable<Void>() {
+			public Void call() throws Exception {
+				getProject().getModelElements().add(newEntry);
+				clearOperations();
+				return null;
+			}
+		});
+
+		final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
+		final ModelElementId keyId = getProjectSpace().getProject().getModelElementId(key);
+		final ModelElementId newEntryId = getProjectSpace().getProject().getModelElementId(newEntry);
+		clonedProjectSpace = (ProjectSpaceBase) cloneProjectSpace(getProjectSpace());
+		final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
+			modelElementId);
+		final TestElementToStringMapImpl clonedNewEntry = (TestElementToStringMapImpl) clonedProjectSpace.getProject()
+			.getModelElement(newEntryId);
+
+		final TestElement clonedKey = (TestElement) clonedProjectSpace.getProject().getModelElement(keyId);
+
+		RunESCommand.run(new Callable<Void>() {
+			public Void call() throws Exception {
+				newEntry.setKey(key);
+				testElement.getElementToStringMap().add(newEntry);
+				return null;
+			}
+		});
+
+		RunESCommand.run(new Callable<Void>() {
+			public Void call() throws Exception {
+				clonedNewEntry.setKey(clonedKey);
+				clonedTestElement.getElementToStringMap().add(clonedNewEntry);
+				return null;
+			}
+		});
+
+		final Set<AbstractOperation> conflicts = getConflicts(
+			getProjectSpace().getLocalChangePackage().getOperations(),
+			clonedProjectSpace.getLocalChangePackage().getOperations(), getProject());
+
+		assertTrue(conflicts.size() > 0);
+
+	}
+
+	/**
+	 * Tests if creating map entries with the same key conflict.
+	 * 
+	 * @throws ChangeConflictException
+	 */
+	@Test
+	public void testConflictCreateVSCreateMapEntryNonContainedKeySingleRefSubOpMissing() throws ChangeConflictException {
+
+		final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
+		final TestElement key = TestmodelFactory.eINSTANCE.createTestElement();
+		addTestElement(testElement);
+		addTestElement(key);
+
+		final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
+		final ModelElementId keyId = getProjectSpace().getProject().getModelElementId(key);
+		clonedProjectSpace = (ProjectSpaceBase) cloneProjectSpace(getProjectSpace());
+		final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
+			modelElementId);
+		final TestElement clonedKey = (TestElement) clonedProjectSpace.getProject().getModelElement(keyId);
+
+		updateMapEntryNonContainedKey(testElement, key, "bar");
+		updateMapEntryNonContainedKey(clonedTestElement, clonedKey, "quux");
+
+		final EList<AbstractOperation> operations = getProjectSpace().getLocalChangePackage().getOperations();
+		final CreateDeleteOperation createDeleteOperation = CreateDeleteOperation.class.cast(operations.get(0));
+		createDeleteOperation.getSubOperations().clear();
+
+		// expect part of the log message
+		final TestLogListener logListener = new TestLogListener("Single reference sub operation of create operation");
+		Platform.getLog(Platform
+			.getBundle("org.eclipse.emf.emfstore.common.model")).addLogListener(logListener);
+
+		getConflicts(
+			getProjectSpace().getLocalChangePackage().getOperations(),
+			clonedProjectSpace.getLocalChangePackage().getOperations(), getProject());
+
+		assertTrue(logListener.didReceive());
+	}
+
+	/**
+	 * Tests if creating map entries with the same key conflict.
+	 * 
+	 * @throws ChangeConflictException
+	 */
+	@Test
+	public void testConflictCreateVSCreateMapEntryNonContainedKeyKeyIsNull() throws ChangeConflictException {
+
+		final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
+		final TestElement key = TestmodelFactory.eINSTANCE.createTestElement();
+		addTestElement(testElement);
+		addTestElement(key);
+
+		final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
+		final ModelElementId keyId = getProjectSpace().getProject().getModelElementId(key);
+		clonedProjectSpace = (ProjectSpaceBase) cloneProjectSpace(getProjectSpace());
+		final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
+			modelElementId);
+		final TestElement clonedKey = (TestElement) clonedProjectSpace.getProject().getModelElement(keyId);
+
+		updateMapEntryNonContainedKey(testElement, key, "bar");
+		updateMapEntryNonContainedKey(clonedTestElement, clonedKey, "quux");
+
+		final List<AbstractOperation> operations = ModelUtil.clone(
+			getProjectSpace().getLocalChangePackage().getOperations());
+		final CreateDeleteOperation createDeleteOperation = CreateDeleteOperation.class.cast(operations.get(0));
+		final SingleReferenceOperation singleReferenceOperation = SingleReferenceOperation.class.cast(
+			createDeleteOperation.getSubOperations().get(0));
+		// causes null to be returned when trying to find the key
+		singleReferenceOperation.getOtherInvolvedModelElements().iterator().next().setId("foo");
+
+		final List<AbstractOperation> operations2 = ModelUtil.clone(
+			clonedProjectSpace.getLocalChangePackage().getOperations());
+		// causes null to be returned when trying to find the key
+		singleReferenceOperation.getOtherInvolvedModelElements().iterator().next().setId("bar");
+
+		RunESCommand.run(new Callable<Void>() {
+			public Void call() throws Exception {
+				getProject().getModelElements().remove(key);
+				clonedProjectSpace.getProject().getModelElements().remove(clonedKey);
+				return null;
+			}
+		});
+
+		// expect part of the log message
+		final TestLogListener logListener = new TestLogListener("Key is null. Can not be used for conflict detection.");
+		Platform.getLog(Platform
+			.getBundle("org.eclipse.emf.emfstore.common.model")).addLogListener(logListener);
+
+		getConflicts(operations, operations2, getProject());
+
+		assertTrue(logListener.didReceive());
+	}
+
+	@Test
+	public void testNonConflictingCreateVsCreate() {
+		final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
+		final TestElement key = TestmodelFactory.eINSTANCE.createTestElement();
+		final TestElement secondKey = TestmodelFactory.eINSTANCE.createTestElement();
+		addTestElement(testElement);
+		addTestElement(key);
+		addTestElement(secondKey);
+
+		final ModelElementId testElementId = getProject().getModelElementId(testElement);
+		final ModelElementId secondKeyId = getProject().getModelElementId(secondKey);
+
+		clonedProjectSpace = (ProjectSpaceBase) cloneProjectSpace(getProjectSpace());
+		final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
+			testElementId);
+		final TestElement clonedSecondKey = (TestElement) clonedProjectSpace.getProject().getModelElement(secondKeyId);
+
+		updateMapEntryNonContainedKey(testElement, key, "foo");
+		updateMapEntryNonContainedKey(clonedTestElement, clonedSecondKey, "bar");
+
+		final List<AbstractOperation> ops1 = getProjectSpace().getOperations();
+		final List<AbstractOperation> ops2 = clonedProjectSpace.getOperations();
+
+		final Set<AbstractOperation> conflicts = getConflicts(ops1, ops2, getProject());
+
+		assertEquals(0, conflicts.size());
+	}
+
+	@Test
+	public void testNonConflictingRemoveVsRemove() {
+		final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
+		final TestElement key = TestmodelFactory.eINSTANCE.createTestElement();
+		final TestElement secondKey = TestmodelFactory.eINSTANCE.createTestElement();
+		addTestElement(testElement);
+		addTestElement(key);
+		addTestElement(secondKey);
+
+		final ModelElementId testElementId = getProject().getModelElementId(testElement);
+		final ModelElementId secondKeyId = getProject().getModelElementId(secondKey);
+
+		clonedProjectSpace = (ProjectSpaceBase) cloneProjectSpace(getProjectSpace());
+		final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
+			testElementId);
+		final TestElement clonedSecondKey = (TestElement) clonedProjectSpace.getProject().getModelElement(secondKeyId);
+
+		updateMapEntryNonContainedKey(testElement, key, "foo");
+		updateMapEntryNonContainedKey(clonedTestElement, clonedSecondKey, "bar");
+
+		clearOperations();
+
+		RunESCommand.run(new Callable<Void>() {
+			public Void call() throws Exception {
+				testElement.getElementToStringMap().clear();
+				clonedTestElement.getElementToStringMap().clear();
+				return null;
+			}
+		});
+
+		final List<AbstractOperation> ops1 = getProjectSpace().getOperations();
+		final List<AbstractOperation> ops2 = clonedProjectSpace.getOperations();
+
+		final Set<AbstractOperation> conflicts = getConflicts(ops1, ops2, getProject());
+
+		assertEquals(0, conflicts.size());
+	}
+
+	@Test
+	public void testConflictCreateVSDeleteMapEntryNonContainedKey() throws ChangeConflictException {
+
+		final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
+		final TestElement key = TestmodelFactory.eINSTANCE.createTestElement();
+		addTestElement(testElement);
+		addTestElement(key);
+
+		final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
+		final ModelElementId keyId = getProjectSpace().getProject().getModelElementId(key);
+
+		updateMapEntryNonContainedKey(testElement, key, "bar");
+		clearOperations();
+		clonedProjectSpace = (ProjectSpaceBase) cloneProjectSpace(getProjectSpace());
+		final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
+			modelElementId);
+		final TestElement clonedKey = (TestElement) clonedProjectSpace.getProject().getModelElement(keyId);
+
+		updateMapEntryNonContainedKey(testElement, key, "bar2");
+		deleteMapEntryNonContainedKey(clonedTestElement, clonedKey);
+
+		final List<AbstractOperation> ops1 = getProjectSpace().getOperations();
+		final List<AbstractOperation> ops2 = clonedProjectSpace.getOperations();
+
+		final Set<AbstractOperation> conflicts = getConflicts(ops1, ops2, getProject());
+
+		assertTrue(conflicts.size() > 0);
+	}
+
+	@Test
+	public void testConflictUpdateVSUpdateMapEntryNonContainedKey() {
+
+		final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
+		final TestElement key = TestmodelFactory.eINSTANCE.createTestElement();
+		addTestElement(testElement);
+		addTestElement(key);
+
+		final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
+		final ModelElementId keyId = getProjectSpace().getProject().getModelElementId(key);
+
+		updateMapEntryNonContainedKey(testElement, key, "bar");
+		clearOperations();
+		clonedProjectSpace = (ProjectSpaceBase) cloneProjectSpace(getProjectSpace());
+		final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
+			modelElementId);
+		final TestElement clonedKey = (TestElement) clonedProjectSpace.getProject().getModelElement(
+			keyId);
+
+		updateMapEntryNonContainedKey(testElement, key, "hello1");
+		updateMapEntryNonContainedKey(clonedTestElement, clonedKey, "hello2");
+
+		final List<AbstractOperation> ops1 = getProjectSpace().getOperations();
+		final List<AbstractOperation> ops2 = clonedProjectSpace.getOperations();
+
+		final Set<AbstractOperation> conflicts = getConflicts(ops1, ops2, getProject());
+
+		assertTrue(conflicts.size() > 0);
+	}
+
+	@Test
+	public void testConflictUpdateVSDeleteMapEntryNonContainedKey() throws ChangeConflictException {
+
+		final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
+		final TestElement key = TestmodelFactory.eINSTANCE.createTestElement();
+		addTestElement(testElement);
+		addTestElement(key);
+
+		final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
+		final ModelElementId keyId = getProjectSpace().getProject().getModelElementId(key);
+
+		updateMapEntryNonContainedKey(testElement, key, "bar");
+		clearOperations();
+		clonedProjectSpace = (ProjectSpaceBase) cloneProjectSpace(getProjectSpace());
+		final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
+			modelElementId);
+		final TestElement clonedKey = (TestElement) clonedProjectSpace.getProject().getModelElement(
+			keyId);
+
+		updateMapEntryNonContainedKey(testElement, key, "hello1");
+		deleteMapEntryNonContainedKey(clonedTestElement, clonedKey);
+
+		final List<AbstractOperation> ops1 = getProjectSpace().getOperations();
+		final List<AbstractOperation> ops2 = clonedProjectSpace.getOperations();
+
+		final Set<AbstractOperation> conflicts = getConflicts(ops1, ops2, getProject());
+
+		assertTrue(conflicts.size() > 0);
+	}
+
+	@Test
+	public void testConflictDeleteVSDeleteMapEntryNonContainedKey() {
+
+		final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
+		final TestElement key = TestmodelFactory.eINSTANCE.createTestElement();
+		addTestElement(testElement);
+		addTestElement(key);
+
+		final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
+		final ModelElementId keyId = getProjectSpace().getProject().getModelElementId(key);
+
+		updateMapEntryNonContainedKey(testElement, key, "bar");
+		clearOperations();
+		clonedProjectSpace = (ProjectSpaceBase) cloneProjectSpace(getProjectSpace());
+		final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
+			modelElementId);
+		final TestElement clonedKey = (TestElement) clonedProjectSpace.getProject().getModelElement(
+			keyId);
+
+		deleteMapEntryNonContainedKey(testElement, key);
+		deleteMapEntryNonContainedKey(clonedTestElement, clonedKey);
+
+		final List<AbstractOperation> ops1 = getProjectSpace().getOperations();
+		final List<AbstractOperation> ops2 = clonedProjectSpace.getOperations();
+
+		final Set<AbstractOperation> conflicts = getConflicts(ops1, ops2, getProject());
+
+		assertEquals(1, conflicts.size());
+	}
+
+	/**
+	 * Tests if creating map entries with the same key conflict.
+	 * 
+	 * @throws ChangeConflictException
+	 */
+	@Test
 	public void testConflictCreateVSCreateMapEntry() throws ChangeConflictException {
 
 		final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
@@ -168,6 +544,15 @@
 		});
 	}
 
+	private void deleteMapEntryNonContainedKey(final TestElement testElement, final TestElement key) {
+		RunESCommand.run(new Callable<Void>() {
+			public Void call() throws Exception {
+				testElement.getElementToStringMap().remove(key);
+				return null;
+			}
+		});
+	}
+
 	private void updateMapEntry(final TestElement testElement, final String key, final String value) {
 		RunESCommand.run(new Callable<Void>() {
 			public Void call() throws Exception {
@@ -177,6 +562,15 @@
 		});
 	}
 
+	private void updateMapEntryNonContainedKey(final TestElement testElement, final TestElement key, final String value) {
+		RunESCommand.run(new Callable<Void>() {
+			public Void call() throws Exception {
+				testElement.getElementToStringMap().put(key, value);
+				return null;
+			}
+		});
+	}
+
 	private void addTestElement(final TestElement testElement) {
 		RunESCommand.run(new Callable<Void>() {
 			public Void call() throws Exception {
diff --git a/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/conflictDetection/ConflictDetectionTest.java b/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/conflictDetection/ConflictDetectionTest.java
index 1c97e7c..4361205 100644
--- a/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/conflictDetection/ConflictDetectionTest.java
+++ b/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/conflictDetection/ConflictDetectionTest.java
@@ -96,12 +96,12 @@
 		return conflictSet.getConflictBuckets().size() > 0;
 	}
 
-	public Set<AbstractOperation> getConflicts(List<AbstractOperation> ops1, List<AbstractOperation> ops2) {
+	public Set<AbstractOperation> getConflicts(List<AbstractOperation> ops1, List<AbstractOperation> ops2,
+		Project project) {
 		final ChangePackage changePackage1 = VersioningFactory.eINSTANCE.createChangePackage();
 		changePackage1.getOperations().addAll(ops1);
 		final ChangePackage changePackage2 = VersioningFactory.eINSTANCE.createChangePackage();
 		changePackage2.getOperations().addAll(ops2);
-		final Project project = ModelFactory.eINSTANCE.createProject();
 		final ChangeConflictSet conflicts = new ConflictDetector().calculateConflicts(Arrays.asList(changePackage1),
 			Arrays.asList(changePackage2), project);
 		final LinkedHashSet<AbstractOperation> result = new LinkedHashSet<AbstractOperation>();
@@ -112,6 +112,10 @@
 		return result;
 	}
 
+	public Set<AbstractOperation> getConflicts(List<AbstractOperation> ops1, List<AbstractOperation> ops2) {
+		return getConflicts(ops1, ops2, ModelFactory.eINSTANCE.createProject());
+	}
+
 	public <T extends AbstractOperation> AbstractOperation myCheckAndGetOperation(
 		final Class<? extends AbstractOperation> clazz) {
 		return new EMFStoreCommandWithResult<AbstractOperation>() {
diff --git a/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/persistence/AllPersistenceTests.java b/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/persistence/AllPersistenceTests.java
index 0f9ec3b..9b9111a 100644
--- a/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/persistence/AllPersistenceTests.java
+++ b/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/persistence/AllPersistenceTests.java
@@ -1,26 +1,26 @@
-/*******************************************************************************

- * Copyright (c) 2012-2013 EclipseSource Muenchen GmbH and others.

- * 

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- * 

- * Contributors:

- * emueller

- ******************************************************************************/

-package org.eclipse.emf.emfstore.client.test.persistence;

-

-import org.junit.runner.RunWith;

-import org.junit.runners.Suite;

-

-/**

- * Test Suite for running all tests of workspace.

- * 

- * @author emueller

- */

-@RunWith(Suite.class)

-@Suite.SuiteClasses({ ImportExportTest.class, PersistenceTest.class, ProjectCacheTest.class })

-public class AllPersistenceTests {

-

-}

+/*******************************************************************************
+ * Copyright (c) 2012-2013 EclipseSource Muenchen GmbH and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * emueller
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.client.test.persistence;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+/**
+ * Test Suite for running all tests of workspace.
+ * 
+ * @author emueller
+ */
+@RunWith(Suite.class)
+@Suite.SuiteClasses({ ImportExportTest.class, PersistenceTest.class })
+public class AllPersistenceTests {
+
+}
diff --git a/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/server/VersionVerifierTest.java b/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/server/VersionVerifierTest.java
new file mode 100644
index 0000000..a555c78
--- /dev/null
+++ b/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/server/VersionVerifierTest.java
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * Copyright (c) 2011-2013 EclipseSource Muenchen GmbH and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Edgar - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.client.test.server;
+
+import static org.junit.Assert.assertEquals;
+
+import org.eclipse.emf.emfstore.internal.server.ServerConfiguration;
+import org.eclipse.emf.emfstore.internal.server.accesscontrol.authentication.verifiers.VersionVerifier;
+import org.eclipse.emf.emfstore.internal.server.exceptions.ClientVersionOutOfDateException;
+import org.eclipse.emf.emfstore.internal.server.model.ClientVersionInfo;
+import org.eclipse.emf.emfstore.internal.server.model.ModelFactory;
+import org.junit.Test;
+
+/**
+ * @author Edgar
+ * 
+ */
+public class VersionVerifierTest {
+
+	private static final String[] ACCEPTED_VERSION_1_2_3 = new String[] { "1.2.3" };
+	private static final String[] ACCEPTED_VERSION_1_2_4 = new String[] { "1.2.4" };
+	private static final String[] WILDCARD_VERSION = new String[] { "1.2.4.*" };
+	private static final String[] WILDCARD_VERSION_WITH_SUFFIX = new String[] { "1.2.4.*FOO" };
+	private static final String[] ANY_VERSION = new String[] { ServerConfiguration.ACCEPTED_VERSIONS_ANY };
+	private static final String[] ACCEPTED_VERSIONS = new String[] {
+		ACCEPTED_VERSION_1_2_3[0], ACCEPTED_VERSION_1_2_4[0] };
+
+	private static ClientVersionInfo createVersionInfo(String version) {
+		final ClientVersionInfo clientVersionInfo = ModelFactory.eINSTANCE.createClientVersionInfo();
+		clientVersionInfo.setVersion(version);
+		return clientVersionInfo;
+	}
+
+	@Test(expected = ClientVersionOutOfDateException.class)
+	public void testVerifyNull() throws ClientVersionOutOfDateException {
+		VersionVerifier.verify(ACCEPTED_VERSIONS, null);
+	}
+
+	@Test
+	public void testSupplyNoVersions() throws ClientVersionOutOfDateException {
+		VersionVerifier.verify(null, createVersionInfo("1.2.3"));
+	}
+
+	@Test
+	public void testMathesOneOfMany() throws ClientVersionOutOfDateException {
+		VersionVerifier.verify(ACCEPTED_VERSION_1_2_3, createVersionInfo("1.2.3"));
+	}
+
+	@Test
+	public void testMathesOne() throws ClientVersionOutOfDateException {
+		VersionVerifier.verify(ACCEPTED_VERSIONS, createVersionInfo("1.2.3"));
+	}
+
+	@Test
+	public void testMatchesWildcard() throws ClientVersionOutOfDateException {
+		VersionVerifier.verify(WILDCARD_VERSION, createVersionInfo("1.2.4.1"));
+		VersionVerifier.verify(WILDCARD_VERSION, createVersionInfo("1.2.4.1xyz"));
+	}
+
+	@Test(expected = ClientVersionOutOfDateException.class)
+	public void testMatchesNotWildcard1() throws ClientVersionOutOfDateException {
+		VersionVerifier.verify(WILDCARD_VERSION, createVersionInfo("1.2.3.1"));
+	}
+
+	@Test(expected = ClientVersionOutOfDateException.class)
+	public void testMatchesNotWildcard2() throws ClientVersionOutOfDateException {
+		VersionVerifier.verify(WILDCARD_VERSION, createVersionInfo("1.2.3.4.1xyz"));
+	}
+
+	@Test(expected = ClientVersionOutOfDateException.class)
+	public void testMatchesNotWildcard3() throws ClientVersionOutOfDateException {
+		VersionVerifier.verify(WILDCARD_VERSION, createVersionInfo("1.2.3.4"));
+	}
+
+	@Test
+	public void testMatchesWildcardWithSuffix() throws ClientVersionOutOfDateException {
+		VersionVerifier.verify(WILDCARD_VERSION_WITH_SUFFIX, createVersionInfo("1.2.4.1xyzFOO"));
+		VersionVerifier.verify(WILDCARD_VERSION_WITH_SUFFIX, createVersionInfo("1.2.4.1FOO"));
+	}
+
+	@Test(expected = ClientVersionOutOfDateException.class)
+	public void testMatchesNotWildcardWithSuffix1() throws ClientVersionOutOfDateException {
+		VersionVerifier.verify(WILDCARD_VERSION_WITH_SUFFIX, createVersionInfo("1.2.4.1xyz"));
+	}
+
+	@Test(expected = ClientVersionOutOfDateException.class)
+	public void testMatchesNotWildcardWithSuffix2() throws ClientVersionOutOfDateException {
+		VersionVerifier.verify(WILDCARD_VERSION_WITH_SUFFIX, createVersionInfo("1.2.4FOO"));
+	}
+
+	@Test(expected = ClientVersionOutOfDateException.class)
+	public void testMatchesNotWildcardWithSuffix3() throws ClientVersionOutOfDateException {
+		VersionVerifier.verify(WILDCARD_VERSION_WITH_SUFFIX, createVersionInfo("1X2.4FOO"));
+	}
+
+	@Test
+	public void testMatchesAny() throws ClientVersionOutOfDateException {
+		VersionVerifier.verify(ANY_VERSION, createVersionInfo("abc"));
+	}
+
+	@Test
+	public void testInspectClientVersionOutOfDateMessage() {
+		try {
+			VersionVerifier.verify(ACCEPTED_VERSION_1_2_3, createVersionInfo("1.1.1"));
+		} catch (final ClientVersionOutOfDateException ex) {
+			assertEquals("Client version: " + "1.1.1"
+				+ " - Accepted versions: " + "1.2.3.", ex.getMessage());
+		}
+	}
+
+	@Test
+	public void testInspectClientVersionOutOfDateMessages() {
+		try {
+			VersionVerifier.verify(ACCEPTED_VERSIONS, createVersionInfo("1.1.1"));
+		} catch (final ClientVersionOutOfDateException ex) {
+			assertEquals("Client version: " + "1.1.1"
+				+ " - Accepted versions: " + "1.2.3, 1.2.4.", ex.getMessage());
+		}
+	}
+}
diff --git a/tests/org.eclipse.emf.emfstore.fuzzy.emf.test/META-INF/MANIFEST.MF b/tests/org.eclipse.emf.emfstore.fuzzy.emf.test/META-INF/MANIFEST.MF
index b6a4bc1..a5129ed 100644
--- a/tests/org.eclipse.emf.emfstore.fuzzy.emf.test/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.emf.emfstore.fuzzy.emf.test/META-INF/MANIFEST.MF
@@ -2,10 +2,10 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Tests for EMFDataprovider
 Bundle-SymbolicName: org.eclipse.emf.emfstore.fuzzy.emf.test;singleton:=true
-Bundle-Version: 1.0.2.qualifier
-Require-Bundle: org.eclipse.emf.emfstore.fuzzy.emf;bundle-version="[1.0.2,2.0.0)";visibility:=reexport,
- org.eclipse.emf.emfstore.client.test;bundle-version="[1.0.2,2.0.0)";visibility:=reexport
+Bundle-Version: 1.0.4.qualifier
+Require-Bundle: org.eclipse.emf.emfstore.fuzzy.emf;bundle-version="[1.0.4,2.0.0)";visibility:=reexport,
+ org.eclipse.emf.emfstore.client.test;bundle-version="[1.0.4,2.0.0)";visibility:=reexport
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-ClassPath: .
 Bundle-Vendor: Eclipse Modeling Project
-Export-Package: org.eclipse.emf.emfstore.fuzzy.emf.test;version="1.0.2";x-internal:=true
+Export-Package: org.eclipse.emf.emfstore.fuzzy.emf.test;version="1.0.4";x-internal:=true
diff --git a/tests/org.eclipse.emf.emfstore.fuzzy.emf.test/pom.xml b/tests/org.eclipse.emf.emfstore.fuzzy.emf.test/pom.xml
index 63a4eeb..b8fabf6 100644
--- a/tests/org.eclipse.emf.emfstore.fuzzy.emf.test/pom.xml
+++ b/tests/org.eclipse.emf.emfstore.fuzzy.emf.test/pom.xml
@@ -5,12 +5,12 @@
   <parent>
     <groupId>org.eclipse.emf.emfstore</groupId>
     <artifactId>emfstore-parent</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.0.4-SNAPSHOT</version>
     <relativePath>../../releng/emfstore-parent/</relativePath>
   </parent>
   <groupId>org.eclipse.emf.emfstore</groupId>
   <artifactId>org.eclipse.emf.emfstore.fuzzy.emf.test</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.4-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
   
   <build>