moved projects into subfolders
diff --git a/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/.classpath b/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/.classpath
new file mode 100644
index 0000000..87e7173
--- /dev/null
+++ b/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry exported="true" kind="lib" path="bin/"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/.project b/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/.project
new file mode 100644
index 0000000..9a55eb9
--- /dev/null
+++ b/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.emf.emfstore.server.backchannel</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>net.sf.eclipsecs.core.CheckstyleBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>

+	</natures>

+</projectDescription>

diff --git a/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/build.properties b/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/build.properties
new file mode 100644
index 0000000..79f4b47
--- /dev/null
+++ b/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/build.properties
@@ -0,0 +1,7 @@
+output.. = bin/
+bin.includes = META-INF/,\
+               plugin.xml,\
+               bin/,\
+               .
+src.includes = bin/
+source.. = src/
diff --git a/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/plugin.xml b/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/plugin.xml
new file mode 100644
index 0000000..15b0a16
--- /dev/null
+++ b/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/plugin.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         point="org.eclipse.emf.emfstore.server.poststartuplistener">
+      <listener
+            class="org.eclipse.emf.emfstore.server.backchannel.BachchannelInitiator">
+      </listener>
+   </extension>
+
+</plugin>
diff --git a/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/pom.xml b/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/pom.xml
new file mode 100644
index 0000000..ec342a0
--- /dev/null
+++ b/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.eclipse.emf.emfstore</groupId>
+    <artifactId>emfstore-parent</artifactId>
+    <version>0.9.3-SNAPSHOT</version>
+    <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+  </parent>
+  <groupId>org.eclipse.emf.emfstore</groupId>
+  <artifactId>org.eclipse.emf.emfstore.server.backchannel</artifactId>
+  <version>0.9.3-SNAPSHOT</version>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.checkstyle b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.checkstyle
new file mode 100644
index 0000000..2f2667a
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+  <fileset name="all" enabled="true" check-config-name="emfstoreStyle" local="false">
+    <file-match-pattern match-pattern="." include-pattern="true"/>
+  </fileset>
+</fileset-config>
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.classpath b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.classpath
new file mode 100644
index 0000000..2d1a430
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.project b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.project
new file mode 100644
index 0000000..796f4f5
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.emf.emfstore.client.ui.errorreporting</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>net.sf.eclipsecs.core.CheckstyleBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>

+	</natures>

+</projectDescription>

diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.settings/org.eclipse.jdt.core.prefs b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..ef029ba
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Thu Aug 23 11:06:00 CEST 2012

+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5

+org.eclipse.jdt.core.compiler.compliance=1.5

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.5

diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/META-INF/MANIFEST.MF b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e68ecef
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Error Reporting Plugin
+Bundle-SymbolicName: org.eclipse.emf.emfstore.client.ui.errorreporting;singleton:=true
+Bundle-Version: 0.9.3.qualifier
+Bundle-Activator: org.eclipse.emf.emfstore.client.ui.errorreporting.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.emf.emfstore.client
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Vendor: Eclipse Modeling Project
+Export-Package: org.eclipse.emf.emfstore.client.ui.errorreporting
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/build.properties b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/build.properties
new file mode 100644
index 0000000..ecdb8a5
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/build.properties
@@ -0,0 +1,6 @@
+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .,\

+               plugin.xml,\

+               schema/

diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/plugin.xml b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/plugin.xml
new file mode 100644
index 0000000..fa6da77
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/plugin.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.2"?>

+<plugin>

+   <extension-point id="org.eclipse.emf.emfstore.client.ui.errorreporting" name="customLog" schema="schema/org.eclipse.emf.emfstore.ui.errorreporting.exsd"/>

+   <extension

+         point="org.eclipse.ui.commands">

+      <command

+            id="org.eclipse.emf.emfstore.ui.createErrorLog"

+            name="Create Error Log">

+      </command>

+   </extension>

+   <extension

+         id="org.eclipse.emf.emfstore.ui.createErrorLog"

+         point="org.eclipse.ui.handlers">

+      <handler

+            class="org.eclipse.emf.emfstore.client.ui.errorreporting.MailBugHandler"

+            commandId="org.eclipse.emf.emfstore.ui.createErrorLog">

+      </handler>

+   </extension>

+   <extension

+         point="org.eclipse.emf.emfstore.client.exceptionObserver">

+      <observer

+            exceptionObserver="org.eclipse.emf.emfstore.client.ui.errorreporting.EmfStoreExceptionObserver">

+      </observer>

+   </extension>

+   <extension

+         point="org.eclipse.ui.statusHandlers">

+      <statusHandler

+            class="org.eclipse.emf.emfstore.client.ui.errorreporting.EmfStoreStatusHandler"

+            id="org.eclipse.emf.emfstore.ui.statusHandler">

+      </statusHandler>

+   </extension>

+   <extension

+         point="org.eclipse.ui.preferencePages">

+      <page

+            class="org.eclipse.emf.emfstore.client.ui.errorreporting.ErrorReportingPreferencePage"

+            id="org.eclipse.emf.emfstore.client.ui.errorreporting.preferencePage"

+            name="Error Reporting">

+      </page>

+   </extension>
+</plugin>

diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/schema/org.eclipse.emf.emfstore.ui.errorreporting.exsd b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/schema/org.eclipse.emf.emfstore.ui.errorreporting.exsd
new file mode 100644
index 0000000..d03b919
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/schema/org.eclipse.emf.emfstore.ui.errorreporting.exsd
@@ -0,0 +1,131 @@
+<?xml version='1.0' encoding='UTF-8'?>

+<!-- Schema file written by PDE -->

+<schema targetNamespace="org.eclipse.emf.emfstore.client.ui.errorreporting" xmlns="http://www.w3.org/2001/XMLSchema">

+<annotation>

+      <appInfo>

+         <meta.schema plugin="org.eclipse.emf.emfstore.client.ui.errorreporting" id="org.eclipse.emf.emfstore.client.ui.errorreporting.customLog" name="org.eclipse.emf.emfstore.client.ui.errorreporting.customLog"/>

+      </appInfo>

+      <documentation>

+         [Enter description of this extension point.]

+      </documentation>

+   </annotation>

+

+   <element name="extension">

+      <annotation>

+         <appInfo>

+            <meta.element />

+         </appInfo>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="loggable" minOccurs="0" maxOccurs="unbounded"/>

+            <element ref="options" minOccurs="0" maxOccurs="1"/>

+            <element ref="configurationProvider"/>

+         </sequence>

+         <attribute name="point" type="string" use="required">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="id" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="name" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+               <appInfo>

+                  <meta.attribute translatable="true"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="loggable">

+      <complexType>

+         <attribute name="loggableClass" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+               <appInfo>

+                  <meta.attribute kind="java" basedOn=":org.eclipse.emf.emfstore.client.ui.errorreporting.ILoggable"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="options">

+      <complexType>

+         <attribute name="enabled" type="boolean">

+            <annotation>

+               <documentation>

+                  Whether the error reporting feature is enabled.

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="configurationProvider">

+      <complexType>

+         <attribute name="providerClass" type="string" use="required">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+               <appInfo>

+                  <meta.attribute kind="java" basedOn=":org.eclipse.emf.emfstore.client.ui.errorreporting.MailBugConfigurationProvider"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         [Enter the first release in which this extension point appears.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="examples"/>

+      </appInfo>

+      <documentation>

+         [Enter extension point usage example here.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="apiinfo"/>

+      </appInfo>

+      <documentation>

+         [Enter API information here.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="implementation"/>

+      </appInfo>

+      <documentation>

+         [Enter information about supplied implementation of this extension point.]

+      </documentation>

+   </annotation>

+

+

+</schema>

diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/Activator.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/Activator.java
new file mode 100644
index 0000000..6840187
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/Activator.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.ui.errorreporting;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * Activator class for the error reporting plugin.
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * Error reporting plugin ID.
+	 */
+	public static final String PLUGIN_ID = "org.eclipse.emf.emfstore.client.ui.errorreporting"; //$NON-NLS-1$
+
+	private static Activator plugin;
+
+	/**
+	 * Constructor.
+	 */
+	public Activator() {
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	// BEGIN SUPRESS CATCH EXCEPTION
+	public void start(BundleContext context) throws Exception {
+		// END SUPRESS CATCH EXCEPTION
+		super.start(context);
+		plugin = this;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	// BEGIN SUPRESS CATCH EXCEPTION
+	public void stop(BundleContext context) throws Exception {
+		// END SUPRESS CATCH EXCEPTION
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance.
+	 * 
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/DefaultMailBugConfigurationProvider.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/DefaultMailBugConfigurationProvider.java
new file mode 100644
index 0000000..be42d19
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/DefaultMailBugConfigurationProvider.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.ui.errorreporting;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
+import org.eclipse.emf.emfstore.common.CommonUtil;
+
+/**
+ * Error reporting configuration provider with default values.<br/>
+ * Only the E-Mail address must be configured.
+ * 
+ * @author emueller
+ * 
+ */
+public abstract class DefaultMailBugConfigurationProvider implements IMailBugConfigurationProvider {
+
+	private static final String EMAIL_BODY = "Thank you for reporting this bug. Please help us to fix the problem by following these steps:\n\n"
+		+ "1. Give a summary\n"
+		+ "<Description>\n\n"
+		+ "2. Describe steps to reproduce the error\n"
+		+ "\t1. <Step 1>\n" + "\t2. <Step 2>\n\n";
+
+	private static final String EMAIL_BODY_ADDITIONAL_TEXT = "3. Paste (Ctrl+v) the content of the clipboard below (parts of the log file have been copied to it)\n"
+		+ "\t<Content from Log File>";
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public String getEmailSubject() {
+		return "EMFStore Error Report";
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public String getEmailBody(boolean errorDiagnosisCaptured) {
+
+		StringBuffer body = new StringBuffer(EMAIL_BODY);
+
+		if (errorDiagnosisCaptured) {
+			try {
+				body.append(URLEncoder.encode(EMAIL_BODY_ADDITIONAL_TEXT, CommonUtil.getEncoding()));
+			} catch (UnsupportedEncodingException e) {
+				// ignore
+			}
+		}
+
+		return body.toString();
+	}
+
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/EmfStoreExceptionObserver.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/EmfStoreExceptionObserver.java
new file mode 100644
index 0000000..abef653
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/EmfStoreExceptionObserver.java
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.ui.errorreporting;
+
+import java.text.MessageFormat;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.emfstore.client.model.Configuration;
+import org.eclipse.emf.emfstore.client.model.exceptions.MissingCommandException;
+import org.eclipse.emf.emfstore.client.model.observers.ExceptionObserver;
+import org.eclipse.emf.emfstore.client.model.util.WorkspaceUtil;
+import org.eclipse.emf.emfstore.common.extensionpoint.ExtensionPoint;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * An exception observer that collects logs.
+ * 
+ * @author Maximilian Koegel
+ */
+public class EmfStoreExceptionObserver implements ExceptionObserver {
+
+	private static EmfStoreExceptionObserver instance;
+	private Set<ExceptionLog> exceptionLogs;
+	private Boolean enabled;
+
+	/**
+	 * Constructor.
+	 */
+	public EmfStoreExceptionObserver() {
+		instance = this;
+		exceptionLogs = new HashSet<ExceptionLog>();
+		ExtensionPoint extensionPoint = new ExtensionPoint(Activator.PLUGIN_ID);
+		enabled = extensionPoint.getBoolean("enabled", true);
+	}
+
+	/**
+	 * Returns the instance.
+	 * 
+	 * @return the instance
+	 */
+	public static EmfStoreExceptionObserver getInstance() {
+		if (instance == null) {
+			instance = new EmfStoreExceptionObserver();
+		}
+		return instance;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public boolean handleError(RuntimeException e) {
+
+		if (!enabled) {
+			return false;
+		}
+
+		if (Configuration.isDebugMode()) {
+
+			MailBugHandler bugHandler = new MailBugHandler();
+
+			try {
+				bugHandler.execute(new ExecutionEvent());
+			} catch (ExecutionException exception) {
+				WorkspaceUtil.handleException(exception);
+			}
+
+			ErrorDialog
+				.openError(
+					PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
+					"DEBUG MODE ACTIVE: An Error Occured",
+					MessageFormat
+						.format(
+							"This error message only appears if debug mode is active. \n"
+								+ "Although this error message might be an error itself, it might help to find bugs faster. \n"
+								+ "The most recent log has been copied to the clipboard, please add it to the bug report. Thanks! \n"
+								+ "To disable, launch without {0}={1} switch.", Configuration.DEBUG_SWITCH,
+							Configuration.DEBUG_SWITCH_ENABLED_VALUE), new Status(Status.ERROR,
+						"org.eclipse.emf.emfstore.client", "An error occured.", e));
+
+			throw e;
+		}
+
+		// MissingCommandException should only be logged if the debug switch is not set
+		if (e.getCause() instanceof MissingCommandException) {
+			return true;
+		}
+
+		for (ExceptionLog exceptionLog : exceptionLogs) {
+			exceptionLog.addException(e);
+		}
+
+		return true;
+	}
+
+	/**
+	 * Adds a log.
+	 * 
+	 * @param log
+	 *            the log being added
+	 */
+	public void addLog(ExceptionLog log) {
+		exceptionLogs.add(log);
+	}
+
+	/**
+	 * Removes a log.
+	 * 
+	 * @param log
+	 *            the log to be removed
+	 */
+	public void removeLog(ExceptionLog log) {
+		exceptionLogs.remove(log);
+	}
+
+	/**
+	 * Returns the log.
+	 * 
+	 * @return the log
+	 */
+	public ExceptionLog getLog() {
+		return new ExceptionLog(this);
+	}
+
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/EmfStoreStatusHandler.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/EmfStoreStatusHandler.java
new file mode 100644
index 0000000..f39e5be
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/EmfStoreStatusHandler.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.ui.errorreporting;
+
+import org.eclipse.ui.statushandlers.WorkbenchErrorHandler;
+import org.eclipse.ui.statushandlers.WorkbenchStatusDialogManager;
+
+/**
+ * Status handler for enabling the submission of a bug via mail.
+ * 
+ * @author Maximilian Koegel
+ */
+public class EmfStoreStatusHandler extends WorkbenchErrorHandler {
+
+	@Override
+	protected void configureStatusDialog(WorkbenchStatusDialogManager statusDialog) {
+		super.configureStatusDialog(statusDialog);
+		statusDialog.enableDefaultSupportArea(true);
+		statusDialog.setSupportAreaProvider(new MailBugStatusAreaProvider());
+	}
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ErrorReportingPreferencePage.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ErrorReportingPreferencePage.java
new file mode 100644
index 0000000..2567d08
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ErrorReportingPreferencePage.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.ui.errorreporting;
+
+import java.io.File;
+
+import org.eclipse.jface.preference.DirectoryFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * Preference page for error reporting feature.
+ * 
+ * @author emueller
+ * 
+ */
+public class ErrorReportingPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
+
+	private DirectoryFieldEditor zipPathEditor;
+
+	/**
+	 * Default constructor.
+	 */
+	public ErrorReportingPreferencePage() {
+		super(GRID);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void init(IWorkbench workbench) {
+		setPreferenceStore(Activator.getDefault().getPreferenceStore());
+		getPreferenceStore().setDefault(ErrorReportingPreferences.ZIP_PATH_KEY,
+			ErrorReportingPreferences.ZIP_PATH_DEFAULT);
+	}
+
+	private boolean validateZipPath(String zipPath) {
+		return new File(zipPath).exists();
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	protected void createFieldEditors() {
+		zipPathEditor = new DirectoryFieldEditor(ErrorReportingPreferences.ZIP_PATH_KEY, "&Zip path:",
+			getFieldEditorParent());
+		addField(zipPathEditor);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	protected void checkState() {
+
+		super.checkState();
+		boolean validZipPath = validateZipPath(zipPathEditor.getStringValue());
+
+		if (validZipPath) {
+			setValid(true);
+			setErrorMessage(null);
+		} else {
+			setValid(false);
+			setErrorMessage("Invalid zip path. \n");
+		}
+
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void propertyChange(PropertyChangeEvent event) {
+
+		if (event.getProperty().equals("field_editor_value")) {
+			checkState();
+		}
+
+	}
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ErrorReportingPreferences.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ErrorReportingPreferences.java
new file mode 100644
index 0000000..81c7d82
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ErrorReportingPreferences.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.ui.errorreporting;
+
+import java.io.File;
+import java.util.Arrays;
+
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * Preference keys and default values for error reporting feature.
+ * 
+ * @author emueller
+ * 
+ */
+public final class ErrorReportingPreferences {
+
+	private ErrorReportingPreferences() {
+
+	}
+
+	/**
+	 * The qualifier of the preferences used by the error reporting feature.
+	 */
+	public static final String QUALIFIER = "org.eclipse.emf.emfstore.client.ui.errorreporting";
+
+	/**
+	 * Preference key for the zip path.
+	 */
+	public static final String ZIP_PATH_KEY = "zipPath";
+
+	/**
+	 * Default value for the zip path.
+	 */
+	public static final String ZIP_PATH_DEFAULT = StringUtils.join(
+		Arrays.asList(System.getProperty("user.home"), "Desktop"), File.separatorChar);
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ErrorReportingUtil.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ErrorReportingUtil.java
new file mode 100644
index 0000000..e537923
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ErrorReportingUtil.java
@@ -0,0 +1,352 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.ui.errorreporting;
+
+import java.awt.AWTException;
+import java.awt.HeadlessException;
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.awt.Toolkit;
+import java.awt.image.BufferedImage;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.lang.management.ManagementFactory;
+import java.lang.management.RuntimeMXBean;
+import java.text.MessageFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+import javax.imageio.ImageIO;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.output.ByteArrayOutputStream;
+import org.apache.commons.lang.StringUtils;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.emfstore.client.model.Configuration;
+import org.eclipse.emf.emfstore.client.model.util.WorkspaceUtil;
+import org.eclipse.emf.emfstore.common.extensionpoint.ExtensionElement;
+import org.eclipse.emf.emfstore.common.extensionpoint.ExtensionPoint;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.statushandlers.StatusAdapter;
+
+/**
+ * Utility class for capturing system specific information for debugging purposes.
+ * 
+ * @author emueller
+ */
+public final class ErrorReportingUtil {
+
+	private static final String CUSTOMLOG_EXTENSION_POINT_ID = "org.eclipse.emf.emfstore.client.ui.errorreporting";
+	private static final String SCREENSHOT_FOLDER_NAME = "screenshots";
+	private static final String DEFAULT_SCREENSHOT_PREFIX = "emfstore-screenshot-";
+	private static final String DEFAULT_SYSINFO_PREFIX = "emfstore-sysinfo-";
+	private static final String SYSINFO_SUFFIX = "txt";
+
+	private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
+
+	/**
+	 * Private constructor.
+	 */
+	private ErrorReportingUtil() {
+
+	}
+
+	private static String getLogText() {
+
+		String filename = Platform.getLogFileLocation().toOSString();
+		File log = new File(filename);
+
+		try {
+			String version = Configuration.getClientVersion().getVersion();
+			String logFileContent = FileUtils.readFileToString(log);
+
+			StringBuffer result = new StringBuffer(16384);
+			result.append(MessageFormat.format("EMFStore client {0}. Log copied at {1}\n\n", version, SimpleDateFormat
+				.getDateTimeInstance().format(new Date())));
+			result.append(logFileContent);
+
+			return result.toString();
+		} catch (IOException ex) {
+			WorkspaceUtil.logException("Exception while copying log to clipboard", ex);
+		}
+
+		return null;
+	}
+
+	/**
+	 * Copies the content of the current log file to the clipboard.
+	 * 
+	 * @param window
+	 *            the window that is used to determine which Display to copy to
+	 */
+	public static void copyLogToClipboard(IWorkbenchWindow window) {
+		String text = getLogText();
+		Clipboard clipboard = null;
+
+		if (text == null) {
+			return;
+		}
+
+		try {
+			clipboard = new Clipboard(window.getShell().getDisplay());
+			clipboard.setContents(new Object[] { text }, new Transfer[] { TextTransfer.getInstance() });
+		} finally {
+			if (clipboard != null) {
+				clipboard.dispose();
+			}
+		}
+	}
+
+	/**
+	 * Creates the error diagnosis file.
+	 * 
+	 * @param date
+	 *            the date that will be written to the error diagnosis file in order to indicate when the
+	 *            file was created
+	 * @param path
+	 *            the parent path under which the error diagnosis file will be put
+	 * @param statusAdapter
+	 *            a status adapter that may contain the most recent stack trace, that will be copied
+	 *            into the error diagnosis file
+	 * @return the absolute path to the created error diagnosis file
+	 */
+	public static String captureSysInfo(Date date, String path, StatusAdapter statusAdapter) {
+
+		File temp = new File(path);
+		FileWriter fileWriter = null;
+		BufferedWriter bufferedWriter = null;
+
+		temp.deleteOnExit();
+
+		try {
+			Runtime runtime = Runtime.getRuntime();
+			RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
+			fileWriter = new FileWriter(temp);
+
+			bufferedWriter = new BufferedWriter(fileWriter);
+			bufferedWriter.write(MessageFormat.format("Log file created on {0}\n", new Date()));
+			bufferedWriter.write(MessageFormat.format("Client version: {0} {1}\n", Configuration.getClientVersion()
+				.getName(), Configuration.getClientVersion().getVersion()));
+			bufferedWriter.write("List of open editors:\n");
+
+			if (getOpenEditorIDs().size() == 0) {
+				bufferedWriter.write("\t<None>\n");
+			} else {
+				for (String viewId : getOpenEditorIDs()) {
+					bufferedWriter.write(MessageFormat.format("\t{0}\n", viewId));
+				}
+			}
+
+			bufferedWriter.write(MessageFormat.format("Working directory: {0}", System.getProperty("user.dir")));
+			bufferedWriter.write(MessageFormat.format("System user: {0}", System.getProperty("user.name")));
+			bufferedWriter.write(MessageFormat.format("Memory usage: {0}/{1} MB",
+				toMb(runtime.totalMemory() - runtime.freeMemory()), toMb(runtime.maxMemory())));
+			bufferedWriter.write(MessageFormat.format("Available processors (cores): {0}\n",
+				runtime.availableProcessors()));
+			bufferedWriter.write(MessageFormat.format("Java version: {0}", System.getProperty("java.version")));
+			bufferedWriter.write(MessageFormat.format("OS version: {0}", System.getProperty("os.version")));
+			bufferedWriter.write("VM Startup parameters:\n");
+
+			for (String vmArg : runtimeMXBean.getInputArguments()) {
+				bufferedWriter.write(MessageFormat.format("\t{0}\n", vmArg));
+			}
+
+			ExtensionPoint extPoint = new ExtensionPoint(CUSTOMLOG_EXTENSION_POINT_ID);
+			for (ExtensionElement el : extPoint.getExtensionElements()) {
+				ILoggable loggable = el.getClass("loggableClass", ILoggable.class);
+
+				if (loggable == null) {
+					continue;
+				}
+
+				bufferedWriter.write(loggable.getLoggable());
+			}
+
+			if (statusAdapter != null) {
+				bufferedWriter.write(MessageFormat.format("Stacktrace: {0}\n", getStatus(statusAdapter)));
+			}
+
+			return temp.getAbsolutePath();
+		} catch (IOException e) {
+			WorkspaceUtil.logException("Error while writing error diagnosis file: ", e);
+		} finally {
+			try {
+				if (bufferedWriter != null) {
+					bufferedWriter.close();
+				}
+
+				if (fileWriter != null) {
+					fileWriter.close();
+				}
+			} catch (IOException e) {
+				WorkspaceUtil.logException("Error while closing error diagnosis stream.", e);
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * Creates the error diagnosis file.
+	 * 
+	 * @param date
+	 *            the date that will be written to the error diagnosis file in order to indicate when the
+	 *            file was created
+	 * @param path
+	 *            the parent path under which the error diagnosis file will be put
+	 * @return the absolute path to the created error diagnosis file
+	 */
+	public static String captureSysInfo(Date date, String path) {
+		return captureSysInfo(date, path, null);
+	}
+
+	/**
+	 * Returns a list of strings containing the IDs of all opened editors.
+	 * 
+	 * @return a list of strings containing the IDs of all opened editors
+	 */
+	private static List<String> getOpenEditorIDs() {
+
+		List<String> openedEditors = new ArrayList<String>();
+		IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+
+		for (IEditorReference editorRef : activePage.getEditorReferences()) {
+			openedEditors.add(editorRef.getId());
+		}
+
+		return openedEditors;
+	}
+
+	private static String getStatus(StatusAdapter statusAdapter) {
+		StringBuilder sb = new StringBuilder();
+		addException(sb, statusAdapter.getStatus());
+		String logText = sb.toString();
+		if (logText == null || logText.length() == 0) {
+			logText = "Could not find exception";
+		}
+		return logText;
+	}
+
+	private static void addException(StringBuilder collector, IStatus iStatus) {
+		if (iStatus instanceof MultiStatus) {
+			MultiStatus ms = (MultiStatus) iStatus;
+			IStatus[] children = ms.getChildren();
+			for (IStatus childStatus : children) {
+				addException(collector, childStatus);
+			}
+		} else {
+			Throwable ex = iStatus.getException();
+			if (ex != null) {
+				ByteArrayOutputStream baos = new ByteArrayOutputStream();
+				PrintWriter pw = new PrintWriter(baos);
+				ex.printStackTrace(pw);
+				pw.flush();
+				collector.append(new String(baos.toByteArray()));
+			}
+		}
+	}
+
+	private static int toMb(long value) {
+		return (int) (value / 1024 / 1024);
+	}
+
+	/**
+	 * Returns the path to the file that contains error diagnosis and system specific information.
+	 * 
+	 * @param date
+	 *            the date to be used as a part of the constructed path
+	 * @return the constructed path
+	 */
+	public static String getSysInfoPath(Date date) {
+		String errorDiagnosisFilename = DEFAULT_SYSINFO_PREFIX + formatDate(date) + "." + SYSINFO_SUFFIX;
+		return StringUtils.join(Arrays.asList(Configuration.getErrorLogDirectory(), errorDiagnosisFilename),
+			File.separatorChar);
+	}
+
+	/**
+	 * Formats the given date.
+	 * 
+	 * @param date
+	 *            the date to be formatted
+	 * @return the formatted date
+	 */
+	public static String formatDate(Date date) {
+		return format.format(date);
+	}
+
+	/**
+	 * Takes a screenshot.
+	 * 
+	 * @param screenshotPath
+	 *            the path under which the screenshot will be put
+	 * @param format
+	 *            the format of the screenshot being created
+	 * @return the path to the taken screenshot
+	 */
+	public static String makeScreenshot(String screenshotPath, ScreenshotFormat format) {
+
+		try {
+			BufferedImage bufferedImage = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit()
+				.getScreenSize()));
+			File temp = new File(screenshotPath);
+			temp.deleteOnExit();
+			ImageIO.write(bufferedImage, format.getType(), temp);
+			return temp.getAbsolutePath();
+		} catch (HeadlessException e) {
+			WorkspaceUtil.logException("Could not create screenshot.", e);
+		} catch (AWTException e) {
+			WorkspaceUtil.logException("Could not create screenshot.", e);
+		} catch (IOException e) {
+			WorkspaceUtil.logException("Could not create screenshot.", e);
+		}
+
+		return null;
+	}
+
+	/**
+	 * Returns the screenshot path.
+	 * 
+	 * @param date
+	 *            the date that will be part of the screenshot name
+	 * @param format
+	 *            the format of the screenshot
+	 * @return the constructed path to the screenshot
+	 */
+	public static String getScreenshotPath(Date date, ScreenshotFormat format) {
+		String screenShotFilename = DEFAULT_SCREENSHOT_PREFIX + formatDate(date) + "." + format.getType();
+		return StringUtils.join(Arrays.asList(getScreenshotFolder(), screenShotFilename), File.separatorChar);
+	}
+
+	private static String getScreenshotFolder() {
+		File screenshotDir = new File(StringUtils.join(
+			Arrays.asList(Configuration.getErrorLogDirectory(), SCREENSHOT_FOLDER_NAME), File.separatorChar));
+
+		if (!screenshotDir.exists()) {
+			screenshotDir.mkdir();
+		}
+
+		return screenshotDir.getAbsolutePath();
+	}
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ExceptionLog.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ExceptionLog.java
new file mode 100644
index 0000000..fb9d8bf
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ExceptionLog.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.ui.errorreporting;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Class for logging exceptions.
+ * 
+ * @author Maximilian Koegel
+ */
+public class ExceptionLog {
+
+	private List<Exception> exceptions;
+	private EmfStoreExceptionObserver exceptionObserver;
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param exceptionObserver
+	 *            the exception that is used to notify this class when to add exceptions
+	 */
+	public ExceptionLog(EmfStoreExceptionObserver exceptionObserver) {
+		this.exceptions = new ArrayList<Exception>();
+		this.exceptionObserver = exceptionObserver;
+		exceptionObserver.addLog(this);
+	}
+
+	/**
+	 * Adds and exception to the log.
+	 * 
+	 * @param exception
+	 *            the exception to be added
+	 */
+	public void addException(Exception exception) {
+		exceptions.add(exception);
+	}
+
+	/**
+	 * Destroys the exception log.
+	 * 
+	 * @return the list of collected exceptions
+	 */
+	public List<Exception> destroy() {
+		exceptionObserver.removeLog(this);
+		return exceptions;
+	}
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ILoggable.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ILoggable.java
new file mode 100644
index 0000000..5b82705
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ILoggable.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.ui.errorreporting;
+
+/**
+ * Interface for adding information to the error diagnosis and system information file that
+ * is created via {@link ErrorReportingUtil#captureSysInfo(java.util.Date, String)}.
+ * 
+ * @author emueller
+ */
+public interface ILoggable {
+
+	/**
+	 * Returns the string to be logged.
+	 * 
+	 * @return the string to be logged
+	 */
+	String getLoggable();
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/IMailBugConfigurationProvider.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/IMailBugConfigurationProvider.java
new file mode 100644
index 0000000..5b9cced
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/IMailBugConfigurationProvider.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.ui.errorreporting;
+
+/**
+ * Interface used for error reporting feature.
+ * 
+ * @author emueller
+ * 
+ */
+public interface IMailBugConfigurationProvider {
+
+	/**
+	 * Returns the E-Mail address used for error reporting.
+	 * 
+	 * @return the E-Mail address
+	 */
+	String getEmailAddress();
+
+	/**
+	 * Returns the E-Mail subject used within the error reporting feature.
+	 * 
+	 * @return the E-Mail subject
+	 */
+	String getEmailSubject();
+
+	/**
+	 * Returns the E-Mail body text used within the error reporting feature.
+	 * 
+	 * @param errorDiagnosisCaptured
+	 *            whether error diagnosis information has been captured
+	 * 
+	 * @return the E-Mail message body
+	 */
+	String getEmailBody(boolean errorDiagnosisCaptured);
+
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/LogFilenameFilter.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/LogFilenameFilter.java
new file mode 100644
index 0000000..6da9229
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/LogFilenameFilter.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.ui.errorreporting;
+
+import java.io.File;
+import java.io.FilenameFilter;
+
+/**
+ * Filter for log files.
+ */
+public class LogFilenameFilter implements FilenameFilter {
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public boolean accept(File file, String name) {
+		return name.toLowerCase().endsWith(".log");
+	}
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/MailBugHandler.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/MailBugHandler.java
new file mode 100644
index 0000000..01c63ac
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/MailBugHandler.java
@@ -0,0 +1,276 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.ui.errorreporting;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.InvocationTargetException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.text.MessageFormat;
+import java.util.Arrays;
+import java.util.Date;
+
+import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang.StringUtils;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.emfstore.client.model.Configuration;
+import org.eclipse.emf.emfstore.client.model.util.WorkspaceUtil;
+import org.eclipse.emf.emfstore.common.CommonUtil;
+import org.eclipse.emf.emfstore.common.extensionpoint.ExtensionPoint;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.browser.IWebBrowser;
+import org.eclipse.ui.browser.IWorkbenchBrowserSupport;
+import org.eclipse.ui.progress.IProgressService;
+import org.eclipse.ui.statushandlers.StatusAdapter;
+
+/**
+ * Handler for submitting a bug via mail.
+ * 
+ * @author emueller
+ */
+public class MailBugHandler extends AbstractHandler implements IWorkbenchWindowActionDelegate {
+
+	private IWorkbenchWindow window;
+	private StatusAdapter statusAdapter;
+	private IMailBugConfigurationProvider configurationProvider;
+
+	/**
+	 * Constructor.
+	 */
+	public MailBugHandler() {
+		this.window = null;
+		this.statusAdapter = null;
+		initConfigurationProvider();
+	}
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param window
+	 *            a window that is used to determine the shell
+	 * @param statusAdapter
+	 *            a status adapter that may contain the most recent stack trace
+	 */
+	public MailBugHandler(IWorkbenchWindow window, StatusAdapter statusAdapter) {
+		this.window = window;
+		this.statusAdapter = statusAdapter;
+		initConfigurationProvider();
+	}
+
+	private void initConfigurationProvider() {
+		ExtensionPoint extensionPoint = new ExtensionPoint(Activator.PLUGIN_ID);
+		configurationProvider = extensionPoint.getClass("providerClass", IMailBugConfigurationProvider.class);
+		if (configurationProvider == null) {
+			throw new IllegalStateException("Error reporting configuration provider extension point not configured");
+		}
+	}
+
+	private void archive(final Date currentDate, IProgressMonitor monitor, String[] paths) throws FileNotFoundException {
+		monitor.beginTask("Creating error report...", paths.length);
+		try {
+			ZipHandle zipHandle = ZipHandle.openZipHandle(getZipPathname(currentDate));
+
+			for (String path : paths) {
+				File file = new File(path);
+
+				if (!file.exists()) {
+					continue;
+				}
+
+				if (file.isDirectory()) {
+					zipHandle.addFile(StringUtils.EMPTY, path + "/");
+				} else {
+					zipHandle.addFile(StringUtils.EMPTY, path);
+				}
+
+				monitor.worked(1);
+			}
+
+			zipHandle.close();
+		} catch (IOException e) {
+			MessageDialog.openError(window.getShell(), "Error while creating zip", MessageFormat.format(
+				"An error occurred while trying to archive the workspace folder {0}: {1}",
+				Configuration.getErrorLogDirectory(), e.getMessage()));
+		}
+
+		monitor.done();
+	}
+
+	private String getZipPathname(Date currentDate) {
+		String zipPath = Platform.getPreferencesService().getString(ErrorReportingPreferences.QUALIFIER,
+			ErrorReportingPreferences.ZIP_PATH_KEY, ErrorReportingPreferences.ZIP_PATH_DEFAULT, null);
+
+		if (zipPath.endsWith(File.separator)) {
+			zipPath = zipPath.substring(0, zipPath.length() - 2);
+		}
+
+		return StringUtils.join(
+			Arrays.asList(zipPath, ZipHandle.ZIP_PREFIX + ErrorReportingUtil.formatDate(currentDate) + ".zip"),
+			File.separatorChar);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void dispose() {
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void init(IWorkbenchWindow window) {
+		this.window = window;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+
+	}
+
+	/**
+	 * Display an error message.
+	 */
+	private void openWebBrowserError(final String href, final Throwable t) {
+		String title = "Send Bug Report";
+		String msg = "Unable to open URL " + href + " exception: " + t.getLocalizedMessage();
+		MessageDialog.openError(window.getShell(), title, msg);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+
+		final Date date = new Date();
+		boolean shouldCaptureErrorDiagnosis = openShouldCreateErrorReportDialog(date);
+
+		if (shouldCaptureErrorDiagnosis) {
+			IProgressService progressService = PlatformUI.getWorkbench().getProgressService();
+			try {
+				progressService.run(false, false, new IRunnableWithProgress() {
+					public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+						try {
+							String screenshotPath = ErrorReportingUtil.makeScreenshot(
+								ErrorReportingUtil.getScreenshotPath(date, ScreenshotFormat.JPG), ScreenshotFormat.JPG);
+							String sysInfoPath = ErrorReportingUtil.captureSysInfo(date,
+								ErrorReportingUtil.getSysInfoPath(date), statusAdapter);
+							IPath logFolder = Platform.getLogFileLocation().removeLastSegments(1);
+							String[] logFiles = getLogFilePaths(logFolder);
+
+							archive(date, monitor, (String[]) ArrayUtils.addAll(new String[] { screenshotPath,
+								sysInfoPath, Configuration.getWorkspaceDirectory() }, logFiles));
+						} catch (FileNotFoundException exception) {
+							WorkspaceUtil.logException("Could not capture error diagnosis information.", exception);
+						}
+					}
+
+				});
+			} catch (InvocationTargetException exception) {
+				WorkspaceUtil.logException("Could not capture error diagnosis information.", exception);
+			} catch (InterruptedException exception) {
+				WorkspaceUtil.logException("Could not capture error diagnosis information.", exception);
+			}
+		}
+
+		ErrorReportingUtil.copyLogToClipboard(PlatformUI.getWorkbench().getActiveWorkbenchWindow());
+
+		String url;
+
+		try {
+			url = buildUrl(shouldCaptureErrorDiagnosis);
+		} catch (UnsupportedEncodingException e) {
+			MessageDialog.openError(window.getShell(), "Could not create E-Mail", e.getMessage());
+			return null;
+		}
+
+		IWorkbenchBrowserSupport support = PlatformUI.getWorkbench().getBrowserSupport();
+
+		try {
+			IWebBrowser browser = support.getExternalBrowser();
+			browser.openURL(new URL(url));
+		} catch (MalformedURLException exception) {
+			openWebBrowserError(url, exception);
+		} catch (PartInitException exception) {
+			openWebBrowserError(url, exception);
+		}
+
+		return null;
+	}
+
+	private String buildUrl(boolean shouldCaptureErrorDiagnosis) throws UnsupportedEncodingException {
+
+		StringBuffer url = new StringBuffer("mailto:");
+		String email = configurationProvider.getEmailAddress();
+		String subject = configurationProvider.getEmailSubject();
+		String body = configurationProvider.getEmailBody(shouldCaptureErrorDiagnosis);
+
+		url.append(email + "?");
+		url.append("subject=" + URLEncoder.encode(subject, CommonUtil.getEncoding()) + "&");
+		url.append("body=" + URLEncoder.encode(body.toString(), CommonUtil.getEncoding()));
+
+		return url.toString();
+	}
+
+	private String[] getLogFilePaths(IPath logFolder) {
+		String[] logFiles = new File(logFolder.toOSString()).list(new LogFilenameFilter());
+
+		for (int i = 0; i < logFiles.length; i++) {
+			logFiles[i] = logFolder.toOSString() + File.separatorChar + logFiles[i];
+		}
+
+		return logFiles;
+	}
+
+	private boolean openShouldCreateErrorReportDialog(final Date date) {
+		return MessageDialog.openQuestion(window == null ? Display.getDefault().getActiveShell() : window.getShell(),
+			"Error diagnosis information capture", MessageFormat.format(
+				"Would you like to capture error diagnosis information?\n"
+					+ "The data will be stored in a zip file under \"{0}\".", getZipPathname(date)));
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void run(IAction action) {
+		execute();
+	}
+
+	/**
+	 * Executes the handler.
+	 */
+	public void execute() {
+		try {
+			execute(new ExecutionEvent());
+		} catch (ExecutionException e) {
+			WorkspaceUtil.logException(e.getMessage(), e);
+		}
+	}
+
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/MailBugStatusAreaProvider.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/MailBugStatusAreaProvider.java
new file mode 100644
index 0000000..22b3410
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/MailBugStatusAreaProvider.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.ui.errorreporting;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Link;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.statushandlers.AbstractStatusAreaProvider;
+import org.eclipse.ui.statushandlers.StatusAdapter;
+
+/**
+ * Status area provider for sending a bug report via mail.
+ * 
+ * @author Maximilian Koegel
+ * 
+ */
+public class MailBugStatusAreaProvider extends AbstractStatusAreaProvider {
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public Control createSupportArea(final Composite parent, final StatusAdapter statusAdapter) {
+		Link link = new Link(parent, SWT.NONE);
+		IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+		final MailBugHandler bugHandler = new MailBugHandler(window, statusAdapter);
+		link.setText("Please <a>send us a bug report</a>. Clicking\nthe link will create a new mail with\nyour default mail program. Before\nsending the mail please follow the\ninstructions in the mail body.");
+		link.setToolTipText("Mail a bug report");
+		link.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				bugHandler.execute();
+			}
+		});
+		Dialog.applyDialogFont(link);
+		return parent;
+	}
+
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ScreenshotFormat.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ScreenshotFormat.java
new file mode 100644
index 0000000..99457fa
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ScreenshotFormat.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.ui.errorreporting;
+
+/**
+ * Represents the format of a screenshot.
+ * 
+ * @author emueller
+ * 
+ */
+public enum ScreenshotFormat {
+
+	/**
+	 * JPG format.
+	 */
+	JPG("jpg");
+
+	private final String type;
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param type
+	 *            the format type
+	 */
+	ScreenshotFormat(String type) {
+		this.type = type;
+	}
+
+	/**
+	 * Returns the format type as a string.
+	 * 
+	 * @return the format type as a string
+	 */
+	public String getType() {
+		return type;
+	}
+
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ZipHandle.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ZipHandle.java
new file mode 100644
index 0000000..2023337
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ZipHandle.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.ui.errorreporting;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import org.apache.commons.io.IOUtils;
+
+/**
+ * A zip handle for creating zip files.
+ * 
+ * @author emueller
+ */
+public final class ZipHandle {
+
+	/**
+	 * The prefix that will be used as part of the zip file.
+	 */
+	public static final String ZIP_PREFIX = "EMFStoreErrorLog_";
+
+	private final ZipOutputStream zipOutputStream;
+	private final FileOutputStream fileOutputStream;
+	private final BufferedOutputStream bufferedOutputStream;
+
+	private ZipHandle(FileOutputStream fileOutputStream, BufferedOutputStream bufferedOutputStream,
+		ZipOutputStream zipOutputStream) {
+		this.fileOutputStream = fileOutputStream;
+		this.bufferedOutputStream = bufferedOutputStream;
+		this.zipOutputStream = zipOutputStream;
+	}
+
+	/**
+	 * Adds a file to the zip.
+	 * 
+	 * @param base
+	 *            the base name of the file being added
+	 * @param path
+	 *            the actual path of file to be added to the zip
+	 * @throws IOException in case the file could not be added
+	 */
+	public void addFile(String base, String path) throws IOException {
+
+		if (path == null) {
+			return;
+		}
+
+		addFileToZip(zipOutputStream, path, base);
+	}
+
+	/**
+	 * Closes the handle.
+	 * 
+	 * @throws IOException in case anything goes wrong during the closing of the handle
+	 */
+	public void close() throws IOException {
+		if (zipOutputStream != null) {
+			zipOutputStream.finish();
+			zipOutputStream.close();
+		}
+
+		if (bufferedOutputStream != null) {
+			bufferedOutputStream.close();
+		}
+
+		if (fileOutputStream != null) {
+			fileOutputStream.close();
+		}
+	}
+
+	/**
+	 * Creates a zip entry for the path specified with a name built from the base passed in and the file/directory
+	 * name. If the path is a directory, a recursive call is made such that the full directory is added to the zip.
+	 * 
+	 * @param zipOutputStream
+	 *            the zip file's output stream
+	 * @param path
+	 *            the filesystem path of the file/directory being added
+	 * @param base
+	 *            the base prefix to for the name of the zip file entry
+	 * 
+	 * @throws IOException in case of an error during addition of the file to the zip
+	 */
+	private void addFileToZip(ZipOutputStream zipOutputStream, String path, String base) throws IOException {
+		File file = new File(path);
+		String entryName = base + file.getName();
+		ZipEntry zipEntry = new ZipEntry(entryName);
+
+		if (file.isFile()) {
+			zipOutputStream.putNextEntry(zipEntry);
+			FileInputStream fileInputStream = null;
+			try {
+				fileInputStream = new FileInputStream(file);
+				IOUtils.copy(fileInputStream, zipOutputStream);
+			} finally {
+			}
+		} else {
+			File[] children = file.listFiles();
+
+			if (children != null) {
+				for (File child : children) {
+					addFileToZip(zipOutputStream, child.getAbsolutePath(), entryName + "/");
+				}
+			}
+		}
+	}
+
+	/**
+	 * Opens up a zip handle.
+	 * 
+	 * @param zipPath
+	 *            the path of the zip file being created
+	 * @return the created zip handle
+	 * @throws FileNotFoundException in case intial zip file creation fails
+	 */
+	public static ZipHandle openZipHandle(String zipPath) throws FileNotFoundException {
+		FileOutputStream fileOutputStream = null;
+		BufferedOutputStream bufferedOutputStream = null;
+		ZipOutputStream zipOutputStream = null;
+
+		fileOutputStream = new FileOutputStream(new File(zipPath));
+		bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
+		zipOutputStream = new ZipOutputStream(bufferedOutputStream);
+		ZipHandle zipHandle = new ZipHandle(fileOutputStream, bufferedOutputStream, zipOutputStream);
+		return zipHandle;
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.checkstyle b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.checkstyle
new file mode 100644
index 0000000..2f2667a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+  <fileset name="all" enabled="true" check-config-name="emfstoreStyle" local="false">
+    <file-match-pattern match-pattern="." include-pattern="true"/>
+  </fileset>
+</fileset-config>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.classpath b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.project b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.project
new file mode 100644
index 0000000..f3aa095
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.project
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.emfstore.example.helloworld</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+	</natures>
+</projectDescription>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..6b299b1
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,10 @@
+#Mon Mar 05 15:28:54 CET 2012
+M=org.eclipse.emf.emfstore.exampleclient/.settings/org.eclipse.jdt.core.prefs
+Unstaged=changes after reset\:
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..65ae177
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Example Hello World
+Bundle-SymbolicName: org.eclipse.emf.emfstore.example.helloworld;singleton:=true
+Bundle-Version: 0.9.3.qualifier
+Bundle-Activator: org.eclipse.emf.emfstore.exampleclient.Activator
+Require-Bundle: org.eclipse.emf.emfstore.examplemodel,
+ org.eclipse.emf.emfstore.client.ui,
+ org.eclipse.ui;bundle-version="3.5.0"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Vendor: Eclipse Modeling Project
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/build.properties b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/build.properties
new file mode 100644
index 0000000..7a13ae8
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/build.properties
@@ -0,0 +1,6 @@
+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .,\

+               plugin.xml,\

+               src/

diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/launch/EMFStore Example Client helloworld.launch b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/launch/EMFStore Example Client helloworld.launch
new file mode 100644
index 0000000..54ea0ff
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/launch/EMFStore Example Client helloworld.launch
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>

+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">

+<setAttribute key="additional_plugins"/>

+<booleanAttribute key="append.args" value="true"/>

+<stringAttribute key="application" value="org.eclipse.emf.emfstore.example.helloworld.example"/>

+<booleanAttribute key="askclear" value="true"/>

+<booleanAttribute key="automaticAdd" value="false"/>

+<booleanAttribute key="automaticValidate" value="false"/>

+<stringAttribute key="bootstrap" value=""/>

+<stringAttribute key="checked" value="[NONE]"/>

+<booleanAttribute key="clearConfig" value="false"/>

+<booleanAttribute key="clearws" value="false"/>

+<booleanAttribute key="clearwslog" value="false"/>

+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/EMFStore ExampleClient - merging"/>

+<booleanAttribute key="default" value="false"/>

+<stringAttribute key="featureDefaultLocation" value="workspace"/>

+<stringAttribute key="featurePluginResolution" value="workspace"/>

+<booleanAttribute key="includeOptional" value="false"/>

+<stringAttribute key="location" value="${workspace_loc}/../runtime-helloworld"/>

+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>

+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>

+<stringAttribute key="pde.version" value="3.3"/>

+<stringAttribute key="product" value="org.eclipse.platform.ide"/>

+<setAttribute key="selected_features">

+<setEntry value="org.eclipse.amalgam.discovery:default"/>

+<setEntry value="org.eclipse.cvs.source:default"/>

+<setEntry value="org.eclipse.cvs:default"/>

+<setEntry value="org.eclipse.draw2d.sdk:default"/>

+<setEntry value="org.eclipse.draw2d.source:default"/>

+<setEntry value="org.eclipse.draw2d:default"/>

+<setEntry value="org.eclipse.egit.psf:default"/>

+<setEntry value="org.eclipse.egit:default"/>

+<setEntry value="org.eclipse.emf.cdo.epp:default"/>

+<setEntry value="org.eclipse.emf.cdo.server:default"/>

+<setEntry value="org.eclipse.emf.cdo:default"/>

+<setEntry value="org.eclipse.emf.codegen.ecore.source:default"/>

+<setEntry value="org.eclipse.emf.codegen.ecore.ui.source:default"/>

+<setEntry value="org.eclipse.emf.codegen.ecore.ui:default"/>

+<setEntry value="org.eclipse.emf.codegen.ecore:default"/>

+<setEntry value="org.eclipse.emf.codegen.source:default"/>

+<setEntry value="org.eclipse.emf.codegen.ui.source:default"/>

+<setEntry value="org.eclipse.emf.codegen.ui:default"/>

+<setEntry value="org.eclipse.emf.codegen:default"/>

+<setEntry value="org.eclipse.emf.common.ui.source:default"/>

+<setEntry value="org.eclipse.emf.common.ui:default"/>

+<setEntry value="org.eclipse.emf.common:default"/>

+<setEntry value="org.eclipse.emf.compare.doc:default"/>

+<setEntry value="org.eclipse.emf.compare.sdk:default"/>

+<setEntry value="org.eclipse.emf.compare.source:default"/>

+<setEntry value="org.eclipse.emf.compare.ui.capabilities:default"/>

+<setEntry value="org.eclipse.emf.compare:default"/>

+<setEntry value="org.eclipse.emf.converter.source:default"/>

+<setEntry value="org.eclipse.emf.converter:default"/>

+<setEntry value="org.eclipse.emf.databinding.edit.source:default"/>

+<setEntry value="org.eclipse.emf.databinding.edit:default"/>

+<setEntry value="org.eclipse.emf.databinding.source:default"/>

+<setEntry value="org.eclipse.emf.databinding:default"/>

+<setEntry value="org.eclipse.emf.doc.source:default"/>

+<setEntry value="org.eclipse.emf.doc:default"/>

+<setEntry value="org.eclipse.emf.ecore.edit.source:default"/>

+<setEntry value="org.eclipse.emf.ecore.edit:default"/>

+<setEntry value="org.eclipse.emf.ecore.editor.source:default"/>

+<setEntry value="org.eclipse.emf.ecore.editor:default"/>

+<setEntry value="org.eclipse.emf.ecore:default"/>

+<setEntry value="org.eclipse.emf.ecoretools.doc:default"/>

+<setEntry value="org.eclipse.emf.ecoretools.sdk:default"/>

+<setEntry value="org.eclipse.emf.ecoretools.source:default"/>

+<setEntry value="org.eclipse.emf.ecoretools.utils.source:default"/>

+<setEntry value="org.eclipse.emf.ecoretools.utils:default"/>

+<setEntry value="org.eclipse.emf.ecoretools:default"/>

+<setEntry value="org.eclipse.emf.edit.source:default"/>

+<setEntry value="org.eclipse.emf.edit.ui.source:default"/>

+<setEntry value="org.eclipse.emf.edit.ui:default"/>

+<setEntry value="org.eclipse.emf.edit:default"/>

+<setEntry value="org.eclipse.emf.eef.codegen.ecore:default"/>

+<setEntry value="org.eclipse.emf.emfstore.site:default"/>

+<setEntry value="org.eclipse.emf.mapping.ecore.editor.source:default"/>

+<setEntry value="org.eclipse.emf.mapping.ecore.editor:default"/>

+<setEntry value="org.eclipse.emf.mapping.ecore.source:default"/>

+<setEntry value="org.eclipse.emf.mapping.ecore:default"/>

+<setEntry value="org.eclipse.emf.mapping.source:default"/>

+<setEntry value="org.eclipse.emf.mapping.ui.source:default"/>

+<setEntry value="org.eclipse.emf.mapping.ui:default"/>

+<setEntry value="org.eclipse.emf.mapping:default"/>

+<setEntry value="org.eclipse.emf.query.doc:default"/>

+<setEntry value="org.eclipse.emf.query.ocl.source:default"/>

+<setEntry value="org.eclipse.emf.query.ocl:default"/>

+<setEntry value="org.eclipse.emf.query.sdk:default"/>

+<setEntry value="org.eclipse.emf.query.source:default"/>

+<setEntry value="org.eclipse.emf.query:default"/>

+<setEntry value="org.eclipse.emf.sdk:default"/>

+<setEntry value="org.eclipse.emf.source:default"/>

+<setEntry value="org.eclipse.emf.transaction.doc:default"/>

+<setEntry value="org.eclipse.emf.transaction.sdk:default"/>

+<setEntry value="org.eclipse.emf.transaction.source:default"/>

+<setEntry value="org.eclipse.emf.transaction:default"/>

+<setEntry value="org.eclipse.emf.validation.doc:default"/>

+<setEntry value="org.eclipse.emf.validation.ocl.source:default"/>

+<setEntry value="org.eclipse.emf.validation.ocl:default"/>

+<setEntry value="org.eclipse.emf.validation.sdk:default"/>

+<setEntry value="org.eclipse.emf.validation.source:default"/>

+<setEntry value="org.eclipse.emf.validation:default"/>

+<setEntry value="org.eclipse.emf.workspace.doc:default"/>

+<setEntry value="org.eclipse.emf.workspace.source:default"/>

+<setEntry value="org.eclipse.emf.workspace:default"/>

+<setEntry value="org.eclipse.emf:default"/>

+<setEntry value="org.eclipse.epp.mpc:default"/>

+<setEntry value="org.eclipse.epp.package.common.feature:default"/>

+<setEntry value="org.eclipse.epp.package.modeling.feature:default"/>

+<setEntry value="org.eclipse.epp.usagedata.feature:default"/>

+<setEntry value="org.eclipse.equinox.p2.core.feature.source:default"/>

+<setEntry value="org.eclipse.equinox.p2.core.feature:default"/>

+<setEntry value="org.eclipse.equinox.p2.discovery.feature:default"/>

+<setEntry value="org.eclipse.equinox.p2.extras.feature.source:default"/>

+<setEntry value="org.eclipse.equinox.p2.extras.feature:default"/>

+<setEntry value="org.eclipse.equinox.p2.rcp.feature.source:default"/>

+<setEntry value="org.eclipse.equinox.p2.rcp.feature:default"/>

+<setEntry value="org.eclipse.equinox.p2.user.ui.source:default"/>

+<setEntry value="org.eclipse.equinox.p2.user.ui:default"/>

+<setEntry value="org.eclipse.gef.sdk:default"/>

+<setEntry value="org.eclipse.gef.source:default"/>

+<setEntry value="org.eclipse.gef:default"/>

+<setEntry value="org.eclipse.gmf.examples.runtime.ui.pde:default"/>

+<setEntry value="org.eclipse.gmf.runtime.notation:default"/>

+<setEntry value="org.eclipse.gmf.runtime.sdk:default"/>

+<setEntry value="org.eclipse.gmf.runtime.thirdparty.source:default"/>

+<setEntry value="org.eclipse.gmf.runtime.thirdparty:default"/>

+<setEntry value="org.eclipse.gmf.source:default"/>

+<setEntry value="org.eclipse.gmf:default"/>

+<setEntry value="org.eclipse.help.source:default"/>

+<setEntry value="org.eclipse.help:default"/>

+<setEntry value="org.eclipse.jdt.source:default"/>

+<setEntry value="org.eclipse.jdt:default"/>

+<setEntry value="org.eclipse.jgit:default"/>

+<setEntry value="org.eclipse.mylyn.bugzilla_feature:default"/>

+<setEntry value="org.eclipse.mylyn.context_feature:default"/>

+<setEntry value="org.eclipse.mylyn.ide_feature:default"/>

+<setEntry value="org.eclipse.mylyn.java_feature:default"/>

+<setEntry value="org.eclipse.mylyn.pde_feature:default"/>

+<setEntry value="org.eclipse.mylyn.team_feature:default"/>

+<setEntry value="org.eclipse.mylyn.wikitext_feature:default"/>

+<setEntry value="org.eclipse.mylyn_feature:default"/>

+<setEntry value="org.eclipse.net4j.db.derby:default"/>

+<setEntry value="org.eclipse.net4j.db.h2:default"/>

+<setEntry value="org.eclipse.net4j.db:default"/>

+<setEntry value="org.eclipse.net4j:default"/>

+<setEntry value="org.eclipse.ocl.all.sdk:default"/>

+<setEntry value="org.eclipse.ocl.all:default"/>

+<setEntry value="org.eclipse.ocl.core.sdk:default"/>

+<setEntry value="org.eclipse.ocl.doc:default"/>

+<setEntry value="org.eclipse.ocl.edit.source:default"/>

+<setEntry value="org.eclipse.ocl.edit:default"/>

+<setEntry value="org.eclipse.ocl.source:default"/>

+<setEntry value="org.eclipse.ocl.uml.source:default"/>

+<setEntry value="org.eclipse.ocl.uml:default"/>

+<setEntry value="org.eclipse.ocl:default"/>

+<setEntry value="org.eclipse.pde.source:default"/>

+<setEntry value="org.eclipse.pde:default"/>

+<setEntry value="org.eclipse.platform.source:default"/>

+<setEntry value="org.eclipse.platform:default"/>

+<setEntry value="org.eclipse.rcp.source:default"/>

+<setEntry value="org.eclipse.rcp:default"/>

+<setEntry value="org.eclipse.sdk:default"/>

+<setEntry value="org.eclipse.uml2.doc:default"/>

+<setEntry value="org.eclipse.uml2.examples.source:default"/>

+<setEntry value="org.eclipse.uml2.examples:default"/>

+<setEntry value="org.eclipse.uml2.sdk:default"/>

+<setEntry value="org.eclipse.uml2.source:default"/>

+<setEntry value="org.eclipse.uml2:default"/>

+<setEntry value="org.eclipse.xsd.doc.source:default"/>

+<setEntry value="org.eclipse.xsd.doc:default"/>

+<setEntry value="org.eclipse.xsd.ecore.converter.source:default"/>

+<setEntry value="org.eclipse.xsd.ecore.converter:default"/>

+<setEntry value="org.eclipse.xsd.edit.source:default"/>

+<setEntry value="org.eclipse.xsd.edit:default"/>

+<setEntry value="org.eclipse.xsd.editor.source:default"/>

+<setEntry value="org.eclipse.xsd.editor:default"/>

+<setEntry value="org.eclipse.xsd.mapping.editor.source:default"/>

+<setEntry value="org.eclipse.xsd.mapping.editor:default"/>

+<setEntry value="org.eclipse.xsd.mapping.source:default"/>

+<setEntry value="org.eclipse.xsd.mapping:default"/>

+<setEntry value="org.eclipse.xsd.sdk:default"/>

+<setEntry value="org.eclipse.xsd.source:default"/>

+<setEntry value="org.eclipse.xsd:default"/>

+</setAttribute>

+<stringAttribute key="selected_target_plugins" value="com.ibm.icu@default:default,org.apache.commons.codec@default:default,org.apache.commons.logging*1.1.1.v201101211721@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem.win32.x86_64@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.net.win32.x86_64@default:default,org.eclipse.core.net@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit@default:default,org.eclipse.emf.transaction@default:default,org.eclipse.emf.validation@default:default,org.eclipse.emf.workspace@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.security.win32.x86_64@default:default,org.eclipse.equinox.security@default:default,org.eclipse.help@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface.text@default:default,org.eclipse.jface@default:default,org.eclipse.osgi@-1:true,org.eclipse.swt.win32.win32.x86_64@default:default,org.eclipse.swt@default:default,org.eclipse.team.core@default:default,org.eclipse.text@default:default,org.eclipse.ui.ide.application@default:default,org.eclipse.ui.ide@default:default,org.eclipse.ui.win32@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default"/>

+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.emf.emfstore.client@default:default,org.eclipse.emf.emfstore.common.model@default:default,org.eclipse.emf.emfstore.common@default:default,org.eclipse.emf.emfstore.example.helloworld@default:default,org.eclipse.emf.emfstore.examplemodel@default:default,org.eclipse.emf.emfstore.migration@default:default,org.eclipse.emf.emfstore.server.model@default:default,org.eclipse.emf.emfstore.server@default:default"/>

+<booleanAttribute key="show_selected_only" value="false"/>

+<stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>

+<booleanAttribute key="tracing" value="false"/>

+<booleanAttribute key="useCustomFeatures" value="false"/>

+<booleanAttribute key="useDefaultConfig" value="true"/>

+<booleanAttribute key="useDefaultConfigArea" value="true"/>

+<booleanAttribute key="useProduct" value="false"/>

+</launchConfiguration>

diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/launch/EMFStore Example Server helloworld.launch b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/launch/EMFStore Example Server helloworld.launch
new file mode 100644
index 0000000..4411123
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/launch/EMFStore Example Server helloworld.launch
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<setAttribute key="additional_plugins">
+<setEntry value="org.eclipse.emf.emfstore.examplemodel:0.8.9.M909:default:true"/>
+</setAttribute>
+<booleanAttribute key="append.args" value="true"/>
+<booleanAttribute key="askclear" value="true"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bad_container_name" value="/emfstore.launch"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="false"/>
+<booleanAttribute key="clearws" value="false"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/EMFStore Server with ExampleModel"/>
+<booleanAttribute key="default" value="false"/>
+<stringAttribute key="featureDefaultLocation" value="workspace"/>
+<stringAttribute key="featurePluginResolution" value="workspace"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../runtime-org.eclipse.emf.emfstore.server.server"/>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx1024m"/>
+<booleanAttribute key="pde.generated.config" value="false"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.emf.emfstore.server.server"/>
+<setAttribute key="selected_features"/>
+<stringAttribute key="selected_target_plugins" value="javax.servlet@default:default,org.apache.commons.codec@default:default,org.apache.commons.logging*1.1.1.v201101211721@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.emfstore.common.model@default:default,org.eclipse.emf.emfstore.common@default:default,org.eclipse.emf.emfstore.examplemodel@default:default,org.eclipse.emf.emfstore.migration@default:default,org.eclipse.emf.emfstore.server.model@default:default,org.eclipse.emf.emfstore.server@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.team.core@default:default"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useProduct" value="true"/>
+<booleanAttribute key="usefeatures" value="false"/>
+</launchConfiguration>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/plugin.xml b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/plugin.xml
new file mode 100644
index 0000000..2bd78a4
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/plugin.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.4"?>

+<plugin>

+   <extension

+         id="example"

+         point="org.eclipse.core.runtime.applications">

+      <application

+            cardinality="singleton-global"

+            thread="main"

+            visible="true">

+         <run

+               class="org.eclipse.emf.emfstore.exampleclient.Application">

+         </run>

+      </application>

+   </extension>

+</plugin>

diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/pom.xml b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/pom.xml
new file mode 100644
index 0000000..b3de793
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/pom.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.eclipse.emf.emfstore</groupId>
+    <artifactId>emfstore-parent</artifactId>
+    <version>0.9.3-SNAPSHOT</version>
+    <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+  </parent>
+  <artifactId>org.eclipse.emf.emfstore.example.helloworld</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Activator.java b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Activator.java
new file mode 100644
index 0000000..2577f88
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Activator.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * 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:
+ * Florian Pirchner
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.exampleclient;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * The plug-in ID.
+	 */
+	public static final String PLUGIN_ID = "exampleClient";
+
+	// The shared instance
+	private static Activator plugin;
+
+	/**
+	 * The constructor.
+	 */
+	public Activator() {
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	// BEGIN SUPRESS CATCH EXCEPTION
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	// END SUPRESS CATCH EXCEPTION
+
+	/**
+	 * Returns the shared instance.
+	 * 
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Application.java b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Application.java
new file mode 100644
index 0000000..07a0d62
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Application.java
@@ -0,0 +1,191 @@
+/*******************************************************************************
+ * 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:
+ * Florian Pirchner
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.exampleclient;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.emfstore.bowling.BowlingFactory;
+import org.eclipse.emf.emfstore.bowling.League;
+import org.eclipse.emf.emfstore.bowling.Player;
+import org.eclipse.emf.emfstore.client.model.ProjectSpace;
+import org.eclipse.emf.emfstore.client.model.Usersession;
+import org.eclipse.emf.emfstore.client.model.Workspace;
+import org.eclipse.emf.emfstore.client.model.WorkspaceManager;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreClientUtil;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommand;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommandWithResult;
+import org.eclipse.emf.emfstore.common.ConsoleProgressMonitor;
+import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException;
+import org.eclipse.emf.emfstore.server.model.ProjectInfo;
+import org.eclipse.emf.emfstore.server.model.versioning.LogMessage;
+import org.eclipse.emf.emfstore.server.model.versioning.VersioningFactory;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+
+/**
+ * An application that runs the demo.<br>
+ * Run a client that shows the basic features of the EMFstore
+ * If there is a problem with the connection to the server
+ * e.g. a network, a specific EMFStoreException will be thrown
+ */
+public class Application implements IApplication {
+
+	/**
+	 * {@inheritDoc}
+	 */
+	// BEGIN SUPRESS CATCH EXCEPTION
+	public Object start(IApplicationContext context) throws Exception {
+
+		// Run a client that shows the basic features of the EMFstore
+		// If there is a problem with the connection to the server
+		// e.g. a network, a specific EMFStoreException will be thrown
+		try {
+			runClient();
+
+		} catch (EmfStoreException e) {
+			System.out.println("No connection to server.");
+			System.out.println("Did you start the server? :-)");
+		}
+
+		return IApplication.EXIT_OK;
+	}
+
+	// END SUPRESS CATCH EXCEPTION
+
+	private void runClient() throws EmfStoreException {
+		System.out.println("Client starting...");
+
+		// The workspace is the core controler to access
+		// local and remote projects
+		final Workspace workspace = WorkspaceManager.getInstance().getCurrentWorkspace();
+
+		// A user session stores credentials for login
+		// Creates a user session with the default credentials
+		final Usersession usersession = new EMFStoreCommandWithResult<Usersession>() {
+			@Override
+			protected Usersession doRun() {
+				Usersession session = EMFStoreClientUtil.createUsersession();
+				try {
+					session.logIn();
+				} catch (EmfStoreException e) {
+					throw new RuntimeException(e);
+				}
+				return session;
+			}
+		}.run(false);
+
+		// Retrieves a list of existing (and accessible) projects
+		// on the sever and deletes them permanently (to have a
+		// clean set-up)
+		List<ProjectInfo> projectList;
+		projectList = workspace.getRemoteProjectList(usersession);
+		for (ProjectInfo projectInfo : projectList) {
+			workspace.deleteRemoteProject(usersession, projectInfo.getProjectId(), true);
+		}
+
+		// Create a project, share it with the server
+		final ProjectSpace project1 = new EMFStoreCommandWithResult<ProjectSpace>() {
+			@Override
+			protected ProjectSpace doRun() {
+				ProjectSpace project1 = workspace.createLocalProject("projectNo1", "My project");
+				try {
+					project1.shareProject(usersession, new ConsoleProgressMonitor());
+				} catch (EmfStoreException e) {
+					throw new RuntimeException(e);
+				}
+				return project1;
+			}
+		}.run(false);
+
+		// Create some EObjects and add them to the project
+		// (To the projects containment tree)
+		final League league1 = BowlingFactory.eINSTANCE.createLeague();
+		league1.setName("league");
+		league1.getPlayers().add(createPlayer("no. 1"));
+		league1.getPlayers().add(createPlayer("no. 2"));
+
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				project1.getProject().addModelElement(league1);
+			}
+		}.run(false);
+
+		// commit the changes of the project to the EMFStore
+		// including a commit message
+		final LogMessage logMessage = VersioningFactory.eINSTANCE.createLogMessage();
+		logMessage.setMessage("My Message");
+
+		final ProjectSpace project2 = new EMFStoreCommandWithResult<ProjectSpace>() {
+			@Override
+			protected ProjectSpace doRun() {
+				try {
+					project1.commit(logMessage, null, new ConsoleProgressMonitor());
+					System.out.println("Project 1 committed!");
+
+					// Check-out a second, independent copy of the project
+					// (simulating a second client)
+					return workspace.checkout(usersession, project1.getProjectInfo(), new NullProgressMonitor());
+				} catch (EmfStoreException e) {
+					throw new RuntimeException(e);
+				}
+			}
+		}.run(false);
+
+		final League league2 = (League) project2.getProject().getModelElements().get(0);
+		System.out.println("Project 2: League name is " + league2.getName());
+
+		// Apply changes in the second copy of the project
+		// and commit
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				try {
+					league2.setName("league_changed");
+					project2.commit(logMessage, null, new ConsoleProgressMonitor());
+				} catch (EmfStoreException e) {
+					throw new RuntimeException(e);
+				}
+			}
+		}.run(false);
+
+		System.out.println("Project 2 committed!");
+
+		// Update the first copy of the project
+		project1.update();
+		System.out.println("Project 1 updated!");
+		System.out.println("Project 1: League name is " + league1.getName());
+
+		System.out.println("Client run completed.");
+
+	}
+
+	/**
+	 * Creates a new instance of a player.
+	 * 
+	 * @param name
+	 * @return
+	 */
+	private Player createPlayer(String name) {
+		Player player = BowlingFactory.eINSTANCE.createPlayer();
+		player.setName(String.format("Player %s", name));
+		player.setEMail(String.format("%s@emfstore.org", name));
+		return player;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void stop() {
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/.checkstyle b/Fuzzy/org.eclipse.emf.emfstore.example.installer/.checkstyle
new file mode 100644
index 0000000..2f2667a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+  <fileset name="all" enabled="true" check-config-name="emfstoreStyle" local="false">
+    <file-match-pattern match-pattern="." include-pattern="true"/>
+  </fileset>
+</fileset-config>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/.classpath b/Fuzzy/org.eclipse.emf.emfstore.example.installer/.classpath
new file mode 100644
index 0000000..c835067
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/.classpath
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/.project b/Fuzzy/org.eclipse.emf.emfstore.example.installer/.project
new file mode 100644
index 0000000..6ec5e8c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/.project
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.emfstore.example.installer</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+	</natures>
+</projectDescription>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/.settings/org.eclipse.core.resources.prefs b/Fuzzy/org.eclipse.emf.emfstore.example.installer/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..25e3157
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1

+encoding/pom.xml=UTF8

diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.example.installer/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..fe79566
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Mon Apr 16 16:04:29 CEST 2012
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.example.installer/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ea48b0c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: EMFStore example installer
+Bundle-SymbolicName: org.eclipse.emf.emfstore.example.installer;singleton:=true
+Bundle-Version: 0.9.3.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)",
+ org.eclipse.emf.common.ui;bundle-version="[2.5.0,3.0.0)"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ActivationPolicy: lazy
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/build.properties b/Fuzzy/org.eclipse.emf.emfstore.example.installer/build.properties
new file mode 100644
index 0000000..9b9cdc3
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/build.properties
@@ -0,0 +1,5 @@
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               icons/,\
+               examples/
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/.classpath b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/.project b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/.project
new file mode 100644
index 0000000..365e44a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.emf.emfstore.example.helloworld</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+	</natures>

+</projectDescription>

diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..6b299b1
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,10 @@
+#Mon Mar 05 15:28:54 CET 2012
+M=org.eclipse.emf.emfstore.exampleclient/.settings/org.eclipse.jdt.core.prefs
+Unstaged=changes after reset\:
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e19bdc2
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: ExampleClient
+Bundle-SymbolicName: org.eclipse.emf.emfstore.example.helloworld;singleton:=true
+Bundle-Version: 0.9.3.qualifier

+Bundle-Activator: org.eclipse.emf.emfstore.exampleclient.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.emf.emfstore.client;bundle-version="0.9.3",
+ org.eclipse.emf.emfstore.examplemodel;bundle-version="0.9.3"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Vendor: Eclipse Modeling Project
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/build.properties b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/build.properties
new file mode 100644
index 0000000..7a13ae8
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/build.properties
@@ -0,0 +1,6 @@
+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .,\

+               plugin.xml,\

+               src/

diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/plugin.xml b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/plugin.xml
new file mode 100644
index 0000000..2bd78a4
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/plugin.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.4"?>

+<plugin>

+   <extension

+         id="example"

+         point="org.eclipse.core.runtime.applications">

+      <application

+            cardinality="singleton-global"

+            thread="main"

+            visible="true">

+         <run

+               class="org.eclipse.emf.emfstore.exampleclient.Application">

+         </run>

+      </application>

+   </extension>

+</plugin>

diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Activator.java b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Activator.java
new file mode 100644
index 0000000..7ddf909
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Activator.java
@@ -0,0 +1,63 @@
+/**
+ * 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:
+ ******************************************************************************/
+
+package org.eclipse.emf.emfstore.exampleclient;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * The plug-in ID.
+	 */
+	public static final String PLUGIN_ID = "exampleClient";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor.
+	 */
+	public Activator() {
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	// BEGIN SUPRESS CATCH EXCEPTION
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+	// END SUPRESS CATCH EXCEPTION
+
+	/**
+	 * Returns the shared instance.
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Application.java b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Application.java
new file mode 100644
index 0000000..9f2b9dc
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Application.java
@@ -0,0 +1,139 @@
+/**
+ * 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:
+ ******************************************************************************/
+
+package org.eclipse.emf.emfstore.exampleclient;
+
+import java.util.List;
+
+import org.eclipse.emf.emfstore.bowling.BowlingFactory;
+import org.eclipse.emf.emfstore.bowling.League;
+import org.eclipse.emf.emfstore.bowling.Player;
+import org.eclipse.emf.emfstore.client.model.ProjectSpace;
+import org.eclipse.emf.emfstore.client.model.Usersession;
+import org.eclipse.emf.emfstore.client.model.Workspace;
+import org.eclipse.emf.emfstore.client.model.WorkspaceManager;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreClientUtil;
+import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException;
+import org.eclipse.emf.emfstore.server.model.ProjectInfo;
+import org.eclipse.emf.emfstore.server.model.versioning.LogMessage;
+import org.eclipse.emf.emfstore.server.model.versioning.VersioningFactory;
+import org.eclipse.emf.emfstore.server.startup.ConsoleProgressMonitor;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+
+/**
+ * Example client.
+ */
+public class Application implements IApplication {
+	
+	/**
+	 * {@inheritDoc}
+	 */
+	// BEGIN SUPRESS CATCH EXCEPTION
+	public Object start(IApplicationContext context) throws Exception {		
+
+		// Run a client that shows the basic features of the EMFstore
+		// If there is a problem with the connection to the server
+		// e.g. a network, a specific EMFStoreException will be thrown
+		try {
+			runClient();
+
+		} catch (EmfStoreException e) {
+			System.out.println("No connection to server.");
+			System.out.println("Did you start the server? :-)");
+		}
+
+		return IApplication.EXIT_OK;
+	}
+	// END SUPRESS CATCH EXCEPTION
+
+	private void runClient() throws EmfStoreException {
+		System.out.println("Client starting...");
+
+		// The workspace is the core controler to access 
+		// local and remote projects
+		Workspace workspace = WorkspaceManager.getInstance()
+				.getCurrentWorkspace();
+		
+		// A user session stores credentials for login
+		// Creates a user session with the default credentials
+		Usersession usersession = EMFStoreClientUtil.createUsersession();
+		usersession.logIn();
+		
+		// Retrieves a list of existing (and accessible) projects
+		// on the sever and deletes them permanently (to have a
+		// clean set-up)
+		List<ProjectInfo> projectList;
+		projectList = workspace.getRemoteProjectList(usersession);
+		for (ProjectInfo projectInfo : projectList) {
+			workspace.deleteRemoteProject(usersession,
+					projectInfo.getProjectId(), true);
+		}
+
+		// Create a project, share it with the server	
+		ProjectSpace project1 = workspace.createLocalProject("projectNo1",
+				"My project");
+		project1.shareProject(usersession, new ConsoleProgressMonitor());
+
+		// Create some EObjects and add them to the project
+		// (To the projects containment tree)
+		League league1 = BowlingFactory.eINSTANCE.createLeague();
+		league1.setName("league");
+		league1.getPlayers().add(createPlayer("no. 1"));
+		league1.getPlayers().add(createPlayer("no. 2"));
+		project1.getProject().addModelElement(league1);
+
+		// commit the changes of the project to the EMFStore
+		// including a commit message
+		LogMessage logMessage = VersioningFactory.eINSTANCE.createLogMessage();
+		logMessage.setMessage("My Message");
+		project1.commit(logMessage, null, new ConsoleProgressMonitor());
+		System.out.println("Project 1 committed!");
+
+		// Check-out a second, independent copy of the project
+		// (simulating a second client)
+		ProjectSpace project2 = workspace.checkout(usersession,
+				project1.getProjectInfo());
+		League league2 = (League) project2.getProject().getModelElements()
+				.get(0);
+		System.out.println("Project 2: League name is "+league2.getName());
+		
+		// Apply changes in the second copy of the project
+		// and commit
+		league2.setName("league_changed");
+		project2.commit(logMessage, null, new ConsoleProgressMonitor());
+		System.out.println("Project 2 committed!");
+
+
+		// Update the first copy of the project
+		project1.update();
+		System.out.println("Project 1 updated!");
+		System.out.println("Project 1: League name is "+league1.getName());
+
+		
+		System.out.println("Client run completed.");
+
+	}
+
+	/**
+	 * Creates a new instance of a player.
+	 * 
+	 * @param name
+	 * @return
+	 */
+	private Player createPlayer(String name) {
+		Player player = BowlingFactory.eINSTANCE.createPlayer();
+		player.setName(String.format("Player %s", name));
+		player.setEMail(String.format("%s@emfstore.org", name));
+		return player;
+	}
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/.classpath b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/.classpath
new file mode 100644
index 0000000..2d1a430
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/.project b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/.project
new file mode 100644
index 0000000..1890b3b
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.emf.emfstore.example.merging</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+	</natures>

+</projectDescription>

diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..701928f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Thu Jan 26 20:34:00 CET 2012

+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5

+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve

+org.eclipse.jdt.core.compiler.compliance=1.5

+org.eclipse.jdt.core.compiler.debug.lineNumber=generate

+org.eclipse.jdt.core.compiler.debug.localVariable=generate

+org.eclipse.jdt.core.compiler.debug.sourceFile=generate

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.5

diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e89882c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Merging client
+Bundle-SymbolicName: org.eclipse.emf.emfstore.example.merging;singleton:=true
+Bundle-Version: 0.9.3.qualifier

+Bundle-Activator: org.eclipse.emf.emfstore.example.merging.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.emf.emfstore.client;bundle-version="0.9.3",
+ org.eclipse.emf.emfstore.examplemodel;bundle-version="0.9.3",

+ org.eclipse.emf.emfstore.client.ui;bundle-version="0.9.3"

+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Vendor: Eclipse Modeling Project
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/build.properties b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/build.properties
new file mode 100644
index 0000000..7a13ae8
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/build.properties
@@ -0,0 +1,6 @@
+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .,\

+               plugin.xml,\

+               src/

diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/plugin.xml b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/plugin.xml
new file mode 100644
index 0000000..91c04c8
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/plugin.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.4"?>

+<plugin>

+   <extension

+         id="merging"

+         point="org.eclipse.core.runtime.applications">

+      <application

+            cardinality="singleton-global"

+            thread="main"

+            visible="true">

+         <run

+               class="org.eclipse.emf.emfstore.example.merging.Application">

+         </run>

+      </application>

+   </extension>

+</plugin>

diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Activator.java b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Activator.java
new file mode 100644
index 0000000..f15fce4
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Activator.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.example.merging;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 *  The plug-in ID.
+	 */
+	public static final String PLUGIN_ID = "exampleClient";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor.
+	 */
+	public Activator() {
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	// BEGIN SUPRESS CATCH EXCEPTION
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+	// END SUPRESS CATCH EXCEPTION
+
+	/**
+	 * Returns the shared instance.
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Application.java b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Application.java
new file mode 100644
index 0000000..ab9e34b
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Application.java
@@ -0,0 +1,379 @@
+/**
+ * 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:
+ ******************************************************************************/
+
+package org.eclipse.emf.emfstore.example.merging;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.emfstore.bowling.BowlingFactory;
+import org.eclipse.emf.emfstore.bowling.BowlingPackage;
+import org.eclipse.emf.emfstore.bowling.League;
+import org.eclipse.emf.emfstore.bowling.Player;
+import org.eclipse.emf.emfstore.client.model.ProjectSpace;
+import org.eclipse.emf.emfstore.client.model.Usersession;
+import org.eclipse.emf.emfstore.client.model.Workspace;
+import org.eclipse.emf.emfstore.client.model.WorkspaceManager;
+import org.eclipse.emf.emfstore.client.model.controller.callbacks.UpdateCallback;
+import org.eclipse.emf.emfstore.client.model.exceptions.ChangeConflictException;
+import org.eclipse.emf.emfstore.client.model.observers.ConflictResolver;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreClientUtil;
+import org.eclipse.emf.emfstore.common.model.ModelElementId;
+import org.eclipse.emf.emfstore.common.model.Project;
+import org.eclipse.emf.emfstore.common.model.util.ModelUtil;
+import org.eclipse.emf.emfstore.server.exceptions.BaseVersionOutdatedException;
+import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException;
+import org.eclipse.emf.emfstore.server.model.ProjectInfo;
+import org.eclipse.emf.emfstore.server.model.versioning.ChangePackage;
+import org.eclipse.emf.emfstore.server.model.versioning.LogMessage;
+import org.eclipse.emf.emfstore.server.model.versioning.PrimaryVersionSpec;
+import org.eclipse.emf.emfstore.server.model.versioning.VersionSpec;
+import org.eclipse.emf.emfstore.server.model.versioning.VersioningFactory;
+import org.eclipse.emf.emfstore.server.model.versioning.operations.AbstractOperation;
+import org.eclipse.emf.emfstore.server.startup.ConsoleProgressMonitor;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+
+/**
+ * Merging example application.
+ */
+public class Application implements IApplication {
+	
+	private ProjectSpace project1;
+	private League league1;
+	private ProjectSpace project2;
+	private League league2;
+	private LogMessage logMessage;
+
+	/**
+	 * {@inheritDoc}
+	 */
+	// BEGIN SUPRESS CATCH EXCEPTION
+	public Object start(IApplicationContext context) throws Exception {
+		WorkspaceManager.init();
+
+		// Run a client that shows the merging feature of the EMFstore
+		// Please note: this is the programmatic way of merging
+		// EMFStore also provides a default UI for merging
+		// If there is a problem with the connection to the server
+		// e.g. a network, a specific EMFStoreException will be thrown
+		try {
+			runClient();
+		} catch (EmfStoreException e) {
+			System.out.println("No connection to server.");
+			System.out.println("Did you start the server? :-)");
+			e.printStackTrace();
+
+		}
+
+		return IApplication.EXIT_OK;
+	}
+	// END SUPRESS CATCH EXCEPTION
+
+	/**
+	 * Runs the application.
+	 * 
+	 * @throws EmfStoreException
+	 * 			in case any error occurs
+	 */
+	private void runClient() throws EmfStoreException {
+		System.out.println("Client starting...");
+
+		// Sets up the workspace by cleaning all contents
+		// Create a project with some EObjects and two
+		// identical copies. See hello world code example
+		// for more details
+		setupWorkspace();
+
+		// Change the value of the league in project 1 and commit
+		// the change
+		league1.setName("New Name 1");
+		league1.getPlayers().add(createPlayer("Player no. 4"));
+		project1.commit(logMessage, null, new ConsoleProgressMonitor());
+
+		// Changing the same value without calling
+		// project2.update() will cause a conflict
+		// also add one change which is non-conflicting
+		league2.setName("New Name 2");
+		league2.getPlayers().remove(0);
+
+		try {
+			project2.commit(logMessage, null, new ConsoleProgressMonitor());
+		} catch (BaseVersionOutdatedException e) {
+
+			System.out.println("\nCommit of project 2 failed.");
+
+			// define a conflict resolver to handle the conflicting changes on
+			// update
+			// the resolver will accept the name change of the league of project
+			// 2 to "New Name 2"
+			// reject the name change of project 1 and accept all other changes
+			final ConflictResolver conflictResolver = new ConflictResolver() {
+
+				private ChangePackage myChangePackage;
+				private List<ChangePackage> theirChangePackages;
+
+				public boolean resolveConflicts(Project project, List<ChangePackage> theirChangePackages,
+						ChangePackage myChangePackage, PrimaryVersionSpec baseVersion, PrimaryVersionSpec targetVersion) {
+
+					this.theirChangePackages = theirChangePackages;
+					this.myChangePackage = myChangePackage;
+					// declare that resolver will be able to resolve all
+					// conflicts
+					return true;
+				}
+
+				public List<AbstractOperation> getRejectedTheirs() {
+					// reject the first change in the change package of project
+					// 1 from the server, since it is the name change of the
+					// league to "New Name 1"
+					return Arrays.asList(theirChangePackages.get(0)
+							.getOperations().get(0));
+				}
+
+				public List<AbstractOperation> getAcceptedMine() {
+					// accept all my operations in project 2, including the name
+					// change to "New Name 2"
+					return myChangePackage.getOperations();
+				}
+			};
+
+			// create a callback object to drive the update and use our conflict
+			// resolver
+			UpdateCallback updateCallback = new UpdateCallback() {
+
+				public void noChangesOnServer() {
+					// do nothing if there are no changes on the server (we know
+					// there are changes anyway)
+				}
+
+				public boolean inspectChanges(ProjectSpace projectSpace, List<ChangePackage> changes) {
+					// accept incoming changes (we could cancel the update by
+					// returning false here)
+					return true;
+				}
+
+				public boolean conflictOccurred(
+						ChangeConflictException changeConflictException) {
+
+					// resolve conflicts by merging with our conflict resolver
+					try {
+						project2.merge(project2
+								.resolveVersionSpec(VersionSpec.HEAD_VERSION),
+								conflictResolver);
+					} catch (EmfStoreException e) {
+						// on any exceptions, declare conflicts as non-resolved
+						return false;
+					}
+
+					// conflicts have been resolved
+					return true;
+				}
+			};
+
+			// run update in project 2 with our callback
+			System.out.println("\nUpdate of project 2 with conflict resolver...");
+			project2.update(VersionSpec.HEAD_VERSION, updateCallback,
+					new ConsoleProgressMonitor());
+
+			// commit merge result in project 2
+			System.out.println("\nCommit of project 2 with merge result.");
+			project2.commit(logMessage, null, new ConsoleProgressMonitor());
+		}
+
+		// update project 1
+		System.out.println("\nUpdate of project 1 with merge result.");
+		project1.update();
+
+		System.out.println("\nLeague name in project 1 is now:"
+				+ league1.getName());
+
+		System.out.println("Client run completed.");
+
+	}
+
+	/**
+	 * Creates a default workspace and deletes all remote projects.
+	 * 
+	 * @throws EmfStoreException
+	 * 			in case any error occurs
+	 */
+	private void setupWorkspace() throws EmfStoreException {
+		// The workspace is the core controler to access
+		// local and remote projects
+		Workspace workspace = WorkspaceManager.getInstance()
+				.getCurrentWorkspace();
+
+		// A user session stores credentials for login
+		// Creates a user session with the default credentials
+		Usersession usersession = EMFStoreClientUtil.createUsersession();
+		usersession.logIn();
+
+		// Retrieves a list of existing (and accessible) projects
+		// on the sever and deletes them permanently (to have a
+		// clean set-up)
+		List<ProjectInfo> projectList;
+		projectList = workspace.getRemoteProjectList(usersession);
+		for (ProjectInfo projectInfo : projectList) {
+			workspace.deleteRemoteProject(usersession,
+					projectInfo.getProjectId(), true);
+		}
+
+		// Create a project, share it with the server
+		project1 = workspace.createLocalProject("projectNo1", "My project");
+		project1.shareProject(usersession, new ConsoleProgressMonitor());
+
+		// Create some EObjects and add them to the project
+		// (To the projects containment tree)
+		league1 = BowlingFactory.eINSTANCE.createLeague();
+		league1.setName("league");
+		league1.getPlayers().add(createPlayer("no. 1"));
+		league1.getPlayers().add(createPlayer("no. 2"));
+		project1.getProject().addModelElement(league1);
+
+		logMessage = VersioningFactory.eINSTANCE.createLogMessage();
+		logMessage.setMessage("My Message");
+		project1.commit(logMessage, null, new ConsoleProgressMonitor());
+		System.out.println("Project 1 committed!");
+
+		// Check-out a second, independent copy of the project
+		// (simulating a second client)
+		project2 = workspace.checkout(usersession, project1.getProjectInfo());
+		league2 = (League) project2.getProject().getModelElements().get(0);
+	}
+
+	/**
+	 * Handles the conflicting project2.
+	 * 
+	 * @param conflictingProject2 
+	 * 			the conflicting project
+	 */
+	protected void handleConflict(ProjectSpace conflictingProject2) {
+		try {
+			// inspect all changes
+			inspectChanges(conflictingProject2);
+
+			// merge the project2 with the current version
+			// and reject all changes from the server!
+			// Only changes from project2 are accepted!
+			conflictingProject2.merge(
+					ModelUtil.clone(project1.getBaseVersion()),
+					new ConflictResolver() {
+
+						private ArrayList<AbstractOperation> acceptedMine;
+						private ArrayList<AbstractOperation> rejectedTheirs;
+
+						public boolean resolveConflicts(Project project,
+								List<ChangePackage> theirChangePackages, ChangePackage myChangePackage,
+								PrimaryVersionSpec baseVersion, PrimaryVersionSpec targetVersion) {
+
+							// all local projects for project2 are accepted
+							acceptedMine = new ArrayList<AbstractOperation>();
+							acceptedMine.addAll(myChangePackage.getOperations());
+
+							// reject all operations executed on project1
+							rejectedTheirs = new ArrayList<AbstractOperation>();
+							for (ChangePackage change : theirChangePackages) {
+								rejectedTheirs.addAll(change.getOperations());
+							}
+							return true;
+						}
+
+						public List<AbstractOperation> getRejectedTheirs() {
+							return rejectedTheirs;
+						}
+
+						public List<AbstractOperation> getAcceptedMine() {
+							return acceptedMine;
+						}
+					});
+
+		} catch (EmfStoreException e) {
+			ModelUtil.logException(e);
+		}
+	}
+
+	/**
+	 * Inspects the changes occured.
+	 * 
+	 * @param conflictingProject
+	 * @throws EmfStoreException
+	 */
+	private void inspectChanges(ProjectSpace conflictingProject)
+			throws EmfStoreException {
+		// access and list all changes occured
+		List<ChangePackage> changes = conflictingProject.getChanges(
+				conflictingProject.getBaseVersion(), project1.getBaseVersion());
+
+		for (ChangePackage change : changes) {
+			System.out.println(change.getLogMessage().toString());
+
+			// use the elementId of the change to access the leagues of each
+			// local project
+			for (ModelElementId elementId : change
+					.getAllInvolvedModelElements()) {
+				EObject element = project1.getProject().getModelElement(
+						elementId);
+				if (element == null) {
+					element = project2.getProject().getModelElement(elementId);
+				}
+				switch (element.eClass().getClassifierID()) {
+				case BowlingPackage.PLAYER:
+					Player playerOfProject1 = (Player) project1.getProject()
+							.getModelElement(elementId);
+					Player playerOfProject2 = (Player) project2.getProject()
+							.getModelElement(elementId);
+					if (playerOfProject1 != null) {
+						System.out.println(String.format(
+								"Player of project1. Name is %s",
+								playerOfProject1.getName()));
+					}
+					if (playerOfProject2 != null) {
+						System.out.println(String.format(
+								"Player of project2. Name is %s",
+								playerOfProject2.getName()));
+					}
+					break;
+				case BowlingPackage.LEAGUE:
+					League leagueOfProject1 = (League) project1.getProject()
+							.getModelElement(elementId);
+					League leagueOfProject2 = (League) project2.getProject()
+							.getModelElement(elementId);
+					System.out.println(String.format(
+							"League of project1. Name is %s",
+							leagueOfProject1.getName()));
+					System.out.println(String.format(
+							"League of project2. Name is %s",
+							leagueOfProject2.getName()));
+					break;
+				default:
+						break;
+				}
+			}
+		}
+	}
+
+	/**
+	 * Creates a new instance of a player.
+	 * 
+	 * @param name
+	 * @return
+	 */
+	private Player createPlayer(String name) {
+		Player player = BowlingFactory.eINSTANCE.createPlayer();
+		player.setName(String.format("Player %s", name));
+		player.setEMail(String.format("%s@emfstore.org", name));
+		return player;
+	}
+	
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/icons/emfstore.png b/Fuzzy/org.eclipse.emf.emfstore.example.installer/icons/emfstore.png
new file mode 100644
index 0000000..5020e4c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/icons/emfstore.png
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/plugin.xml b/Fuzzy/org.eclipse.emf.emfstore.example.installer/plugin.xml
new file mode 100644
index 0000000..ab3b58d
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/plugin.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         point="org.eclipse.ui.newWizards">
+      <category
+            id="org.eclipse.emf.emfstore.examples.EMFStore"
+            name="EMFStore examples"
+            parentCategory="org.eclipse.ui.Examples">
+      </category>
+      <wizard
+            category="org.eclipse.ui.Examples/org.eclipse.emf.emfstore.examples.EMFStore"
+            class="org.eclipse.emf.common.ui.wizard.ExampleInstallerWizard"
+            icon="icons/emfstore.png"
+            id="org.eclipse.emf.emfstore.example.BasicEMFStoreExampleWizard"
+            name="Basic EMFStore example"
+            project="true">
+      </wizard>
+      <wizard
+            category="org.eclipse.ui.Examples/org.eclipse.emf.emfstore.examples.EMFStore"
+            class="org.eclipse.emf.common.ui.wizard.ExampleInstallerWizard"
+            icon="icons/emfstore.png"
+            id="org.eclipse.emf.emfstore.example.MergingEMFStoreExampleWizard"
+            name="Merging EMFStore example"
+            project="true">
+      </wizard>
+   </extension>
+   <extension
+         point="org.eclipse.emf.common.ui.examples">
+      <example
+            id="org.eclipse.emf.emfstore.example.BasicEMFStore"
+            wizardID="org.eclipse.emf.emfstore.example.BasicEMFStoreExampleWizard">
+         <projectDescriptor
+               contentURI="examples/org.eclipse.emf.emfstore.example.helloworld/"
+               description="A helloworld implementation of an EMFStore use case"
+               name="org.eclipse.emf.emfstore.example.helloworld">
+         </projectDescriptor>
+      </example>
+      <example
+            id="org.eclipse.emf.emfstore.example.MergingEMFStore"
+            wizardID="org.eclipse.emf.emfstore.example.MergingEMFStoreExampleWizard">
+         <projectDescriptor
+               contentURI="examples/org.eclipse.emf.emfstore.example.merging/"
+               description="A merging example of EMFStore"
+               name="org.eclipse.emf.emfstore.example.merging">
+         </projectDescriptor>
+      </example>
+   </extension>
+
+</plugin>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/pom.xml b/Fuzzy/org.eclipse.emf.emfstore.example.installer/pom.xml
new file mode 100644
index 0000000..72be946
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/pom.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.eclipse.emf.emfstore</groupId>
+    <artifactId>emfstore-parent</artifactId>
+    <version>0.9.3-SNAPSHOT</version>
+    <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+  </parent>
+  <artifactId>org.eclipse.emf.emfstore.example.installer</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/.checkstyle b/Fuzzy/org.eclipse.emf.emfstore.example.merging/.checkstyle
new file mode 100644
index 0000000..2f2667a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+  <fileset name="all" enabled="true" check-config-name="emfstoreStyle" local="false">
+    <file-match-pattern match-pattern="." include-pattern="true"/>
+  </fileset>
+</fileset-config>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/.classpath b/Fuzzy/org.eclipse.emf.emfstore.example.merging/.classpath
new file mode 100644
index 0000000..2d1a430
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/.project b/Fuzzy/org.eclipse.emf.emfstore.example.merging/.project
new file mode 100644
index 0000000..e49d5f3
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/.project
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.emfstore.example.merging</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+	</natures>
+</projectDescription>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.example.merging/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..701928f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Thu Jan 26 20:34:00 CET 2012

+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5

+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve

+org.eclipse.jdt.core.compiler.compliance=1.5

+org.eclipse.jdt.core.compiler.debug.lineNumber=generate

+org.eclipse.jdt.core.compiler.debug.localVariable=generate

+org.eclipse.jdt.core.compiler.debug.sourceFile=generate

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.5

diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..570d125
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Example Merging client
+Bundle-SymbolicName: org.eclipse.emf.emfstore.example.merging;singleton:=true
+Bundle-Version: 0.9.3.qualifier
+Bundle-Activator: org.eclipse.emf.emfstore.example.merging.Activator
+Require-Bundle: org.eclipse.emf.emfstore.examplemodel,
+ org.eclipse.emf.emfstore.client.ui,
+ org.eclipse.ui;bundle-version="3.5.0"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Vendor: Eclipse Modeling Project
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/build.properties b/Fuzzy/org.eclipse.emf.emfstore.example.merging/build.properties
new file mode 100644
index 0000000..7a13ae8
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/build.properties
@@ -0,0 +1,6 @@
+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .,\

+               plugin.xml,\

+               src/

diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/launch/EMFStore Example Client merging.launch b/Fuzzy/org.eclipse.emf.emfstore.example.merging/launch/EMFStore Example Client merging.launch
new file mode 100644
index 0000000..d5b6e41
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/launch/EMFStore Example Client merging.launch
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>

+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">

+<setAttribute key="additional_plugins"/>

+<booleanAttribute key="append.args" value="true"/>

+<stringAttribute key="application" value="org.eclipse.emf.emfstore.example.merging.merging"/>

+<booleanAttribute key="askclear" value="true"/>

+<booleanAttribute key="automaticAdd" value="false"/>

+<booleanAttribute key="automaticValidate" value="false"/>

+<stringAttribute key="bootstrap" value=""/>

+<stringAttribute key="checked" value="[NONE]"/>

+<booleanAttribute key="clearConfig" value="false"/>

+<booleanAttribute key="clearws" value="false"/>

+<booleanAttribute key="clearwslog" value="false"/>

+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/EMFStore ExampleClient - merging"/>

+<booleanAttribute key="default" value="false"/>

+<stringAttribute key="featureDefaultLocation" value="workspace"/>

+<stringAttribute key="featurePluginResolution" value="workspace"/>

+<booleanAttribute key="includeOptional" value="false"/>

+<stringAttribute key="location" value="${workspace_loc}/../runtime-New_configuration"/>

+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>

+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>

+<stringAttribute key="pde.version" value="3.3"/>

+<stringAttribute key="product" value="org.eclipse.platform.ide"/>

+<setAttribute key="selected_features">

+<setEntry value="org.eclipse.amalgam.discovery:default"/>

+<setEntry value="org.eclipse.cvs.source:default"/>

+<setEntry value="org.eclipse.cvs:default"/>

+<setEntry value="org.eclipse.draw2d.sdk:default"/>

+<setEntry value="org.eclipse.draw2d.source:default"/>

+<setEntry value="org.eclipse.draw2d:default"/>

+<setEntry value="org.eclipse.egit.psf:default"/>

+<setEntry value="org.eclipse.egit:default"/>

+<setEntry value="org.eclipse.emf.cdo.epp:default"/>

+<setEntry value="org.eclipse.emf.cdo.server:default"/>

+<setEntry value="org.eclipse.emf.cdo:default"/>

+<setEntry value="org.eclipse.emf.codegen.ecore.source:default"/>

+<setEntry value="org.eclipse.emf.codegen.ecore.ui.source:default"/>

+<setEntry value="org.eclipse.emf.codegen.ecore.ui:default"/>

+<setEntry value="org.eclipse.emf.codegen.ecore:default"/>

+<setEntry value="org.eclipse.emf.codegen.source:default"/>

+<setEntry value="org.eclipse.emf.codegen.ui.source:default"/>

+<setEntry value="org.eclipse.emf.codegen.ui:default"/>

+<setEntry value="org.eclipse.emf.codegen:default"/>

+<setEntry value="org.eclipse.emf.common.ui.source:default"/>

+<setEntry value="org.eclipse.emf.common.ui:default"/>

+<setEntry value="org.eclipse.emf.common:default"/>

+<setEntry value="org.eclipse.emf.compare.doc:default"/>

+<setEntry value="org.eclipse.emf.compare.sdk:default"/>

+<setEntry value="org.eclipse.emf.compare.source:default"/>

+<setEntry value="org.eclipse.emf.compare.ui.capabilities:default"/>

+<setEntry value="org.eclipse.emf.compare:default"/>

+<setEntry value="org.eclipse.emf.converter.source:default"/>

+<setEntry value="org.eclipse.emf.converter:default"/>

+<setEntry value="org.eclipse.emf.databinding.edit.source:default"/>

+<setEntry value="org.eclipse.emf.databinding.edit:default"/>

+<setEntry value="org.eclipse.emf.databinding.source:default"/>

+<setEntry value="org.eclipse.emf.databinding:default"/>

+<setEntry value="org.eclipse.emf.doc.source:default"/>

+<setEntry value="org.eclipse.emf.doc:default"/>

+<setEntry value="org.eclipse.emf.ecore.edit.source:default"/>

+<setEntry value="org.eclipse.emf.ecore.edit:default"/>

+<setEntry value="org.eclipse.emf.ecore.editor.source:default"/>

+<setEntry value="org.eclipse.emf.ecore.editor:default"/>

+<setEntry value="org.eclipse.emf.ecore:default"/>

+<setEntry value="org.eclipse.emf.ecoretools.doc:default"/>

+<setEntry value="org.eclipse.emf.ecoretools.sdk:default"/>

+<setEntry value="org.eclipse.emf.ecoretools.source:default"/>

+<setEntry value="org.eclipse.emf.ecoretools.utils.source:default"/>

+<setEntry value="org.eclipse.emf.ecoretools.utils:default"/>

+<setEntry value="org.eclipse.emf.ecoretools:default"/>

+<setEntry value="org.eclipse.emf.edit.source:default"/>

+<setEntry value="org.eclipse.emf.edit.ui.source:default"/>

+<setEntry value="org.eclipse.emf.edit.ui:default"/>

+<setEntry value="org.eclipse.emf.edit:default"/>

+<setEntry value="org.eclipse.emf.eef.codegen.ecore:default"/>

+<setEntry value="org.eclipse.emf.emfstore.site:default"/>

+<setEntry value="org.eclipse.emf.mapping.ecore.editor.source:default"/>

+<setEntry value="org.eclipse.emf.mapping.ecore.editor:default"/>

+<setEntry value="org.eclipse.emf.mapping.ecore.source:default"/>

+<setEntry value="org.eclipse.emf.mapping.ecore:default"/>

+<setEntry value="org.eclipse.emf.mapping.source:default"/>

+<setEntry value="org.eclipse.emf.mapping.ui.source:default"/>

+<setEntry value="org.eclipse.emf.mapping.ui:default"/>

+<setEntry value="org.eclipse.emf.mapping:default"/>

+<setEntry value="org.eclipse.emf.query.doc:default"/>

+<setEntry value="org.eclipse.emf.query.ocl.source:default"/>

+<setEntry value="org.eclipse.emf.query.ocl:default"/>

+<setEntry value="org.eclipse.emf.query.sdk:default"/>

+<setEntry value="org.eclipse.emf.query.source:default"/>

+<setEntry value="org.eclipse.emf.query:default"/>

+<setEntry value="org.eclipse.emf.sdk:default"/>

+<setEntry value="org.eclipse.emf.source:default"/>

+<setEntry value="org.eclipse.emf.transaction.doc:default"/>

+<setEntry value="org.eclipse.emf.transaction.sdk:default"/>

+<setEntry value="org.eclipse.emf.transaction.source:default"/>

+<setEntry value="org.eclipse.emf.transaction:default"/>

+<setEntry value="org.eclipse.emf.validation.doc:default"/>

+<setEntry value="org.eclipse.emf.validation.ocl.source:default"/>

+<setEntry value="org.eclipse.emf.validation.ocl:default"/>

+<setEntry value="org.eclipse.emf.validation.sdk:default"/>

+<setEntry value="org.eclipse.emf.validation.source:default"/>

+<setEntry value="org.eclipse.emf.validation:default"/>

+<setEntry value="org.eclipse.emf.workspace.doc:default"/>

+<setEntry value="org.eclipse.emf.workspace.source:default"/>

+<setEntry value="org.eclipse.emf.workspace:default"/>

+<setEntry value="org.eclipse.emf:default"/>

+<setEntry value="org.eclipse.epp.mpc:default"/>

+<setEntry value="org.eclipse.epp.package.common.feature:default"/>

+<setEntry value="org.eclipse.epp.package.modeling.feature:default"/>

+<setEntry value="org.eclipse.epp.usagedata.feature:default"/>

+<setEntry value="org.eclipse.equinox.p2.core.feature.source:default"/>

+<setEntry value="org.eclipse.equinox.p2.core.feature:default"/>

+<setEntry value="org.eclipse.equinox.p2.discovery.feature:default"/>

+<setEntry value="org.eclipse.equinox.p2.extras.feature.source:default"/>

+<setEntry value="org.eclipse.equinox.p2.extras.feature:default"/>

+<setEntry value="org.eclipse.equinox.p2.rcp.feature.source:default"/>

+<setEntry value="org.eclipse.equinox.p2.rcp.feature:default"/>

+<setEntry value="org.eclipse.equinox.p2.user.ui.source:default"/>

+<setEntry value="org.eclipse.equinox.p2.user.ui:default"/>

+<setEntry value="org.eclipse.gef.sdk:default"/>

+<setEntry value="org.eclipse.gef.source:default"/>

+<setEntry value="org.eclipse.gef:default"/>

+<setEntry value="org.eclipse.gmf.examples.runtime.ui.pde:default"/>

+<setEntry value="org.eclipse.gmf.runtime.notation:default"/>

+<setEntry value="org.eclipse.gmf.runtime.sdk:default"/>

+<setEntry value="org.eclipse.gmf.runtime.thirdparty.source:default"/>

+<setEntry value="org.eclipse.gmf.runtime.thirdparty:default"/>

+<setEntry value="org.eclipse.gmf.source:default"/>

+<setEntry value="org.eclipse.gmf:default"/>

+<setEntry value="org.eclipse.help.source:default"/>

+<setEntry value="org.eclipse.help:default"/>

+<setEntry value="org.eclipse.jdt.source:default"/>

+<setEntry value="org.eclipse.jdt:default"/>

+<setEntry value="org.eclipse.jgit:default"/>

+<setEntry value="org.eclipse.mylyn.bugzilla_feature:default"/>

+<setEntry value="org.eclipse.mylyn.context_feature:default"/>

+<setEntry value="org.eclipse.mylyn.ide_feature:default"/>

+<setEntry value="org.eclipse.mylyn.java_feature:default"/>

+<setEntry value="org.eclipse.mylyn.pde_feature:default"/>

+<setEntry value="org.eclipse.mylyn.team_feature:default"/>

+<setEntry value="org.eclipse.mylyn.wikitext_feature:default"/>

+<setEntry value="org.eclipse.mylyn_feature:default"/>

+<setEntry value="org.eclipse.net4j.db.derby:default"/>

+<setEntry value="org.eclipse.net4j.db.h2:default"/>

+<setEntry value="org.eclipse.net4j.db:default"/>

+<setEntry value="org.eclipse.net4j:default"/>

+<setEntry value="org.eclipse.ocl.all.sdk:default"/>

+<setEntry value="org.eclipse.ocl.all:default"/>

+<setEntry value="org.eclipse.ocl.core.sdk:default"/>

+<setEntry value="org.eclipse.ocl.doc:default"/>

+<setEntry value="org.eclipse.ocl.edit.source:default"/>

+<setEntry value="org.eclipse.ocl.edit:default"/>

+<setEntry value="org.eclipse.ocl.source:default"/>

+<setEntry value="org.eclipse.ocl.uml.source:default"/>

+<setEntry value="org.eclipse.ocl.uml:default"/>

+<setEntry value="org.eclipse.ocl:default"/>

+<setEntry value="org.eclipse.pde.source:default"/>

+<setEntry value="org.eclipse.pde:default"/>

+<setEntry value="org.eclipse.platform.source:default"/>

+<setEntry value="org.eclipse.platform:default"/>

+<setEntry value="org.eclipse.rcp.source:default"/>

+<setEntry value="org.eclipse.rcp:default"/>

+<setEntry value="org.eclipse.sdk:default"/>

+<setEntry value="org.eclipse.uml2.doc:default"/>

+<setEntry value="org.eclipse.uml2.examples.source:default"/>

+<setEntry value="org.eclipse.uml2.examples:default"/>

+<setEntry value="org.eclipse.uml2.sdk:default"/>

+<setEntry value="org.eclipse.uml2.source:default"/>

+<setEntry value="org.eclipse.uml2:default"/>

+<setEntry value="org.eclipse.xsd.doc.source:default"/>

+<setEntry value="org.eclipse.xsd.doc:default"/>

+<setEntry value="org.eclipse.xsd.ecore.converter.source:default"/>

+<setEntry value="org.eclipse.xsd.ecore.converter:default"/>

+<setEntry value="org.eclipse.xsd.edit.source:default"/>

+<setEntry value="org.eclipse.xsd.edit:default"/>

+<setEntry value="org.eclipse.xsd.editor.source:default"/>

+<setEntry value="org.eclipse.xsd.editor:default"/>

+<setEntry value="org.eclipse.xsd.mapping.editor.source:default"/>

+<setEntry value="org.eclipse.xsd.mapping.editor:default"/>

+<setEntry value="org.eclipse.xsd.mapping.source:default"/>

+<setEntry value="org.eclipse.xsd.mapping:default"/>

+<setEntry value="org.eclipse.xsd.sdk:default"/>

+<setEntry value="org.eclipse.xsd.source:default"/>

+<setEntry value="org.eclipse.xsd:default"/>

+</setAttribute>

+<stringAttribute key="selected_target_plugins" value="com.ibm.icu@default:default,org.apache.commons.codec@default:default,org.apache.commons.logging*1.1.1.v201101211721@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem.win32.x86_64@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.emf.common.ui@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit.ui@default:default,org.eclipse.emf.edit@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.help@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface@default:default,org.eclipse.osgi@-1:true,org.eclipse.swt.win32.win32.x86_64@default:default,org.eclipse.swt@default:default,org.eclipse.ui.forms@default:default,org.eclipse.ui.views@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default"/>

+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.emf.emfstore.client.model.edit@default:default,org.eclipse.emf.emfstore.client.ui@default:default,org.eclipse.emf.emfstore.client@default:default,org.eclipse.emf.emfstore.common.model.edit@default:default,org.eclipse.emf.emfstore.common.model@default:default,org.eclipse.emf.emfstore.common@default:default,org.eclipse.emf.emfstore.example.merging@default:default,org.eclipse.emf.emfstore.examplemodel@default:default,org.eclipse.emf.emfstore.migration@default:default,org.eclipse.emf.emfstore.server.model.edit@default:default,org.eclipse.emf.emfstore.server.model@default:default,org.eclipse.emf.emfstore.server@default:default"/>

+<booleanAttribute key="show_selected_only" value="false"/>

+<stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>

+<booleanAttribute key="tracing" value="false"/>

+<booleanAttribute key="useCustomFeatures" value="false"/>

+<booleanAttribute key="useDefaultConfig" value="true"/>

+<booleanAttribute key="useDefaultConfigArea" value="true"/>

+<booleanAttribute key="useProduct" value="false"/>

+</launchConfiguration>

diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/launch/EMFStore Example Server merging.launch b/Fuzzy/org.eclipse.emf.emfstore.example.merging/launch/EMFStore Example Server merging.launch
new file mode 100644
index 0000000..db9c5e8
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/launch/EMFStore Example Server merging.launch
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>

+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">

+<setAttribute key="additional_plugins"/>

+<booleanAttribute key="append.args" value="true"/>

+<stringAttribute key="application" value="org.eclipse.emf.emfstore.server.application"/>

+<booleanAttribute key="askclear" value="true"/>

+<booleanAttribute key="automaticAdd" value="false"/>

+<booleanAttribute key="automaticValidate" value="false"/>

+<stringAttribute key="bootstrap" value=""/>

+<stringAttribute key="checked" value="[NONE]"/>

+<booleanAttribute key="clearConfig" value="false"/>

+<booleanAttribute key="clearws" value="false"/>

+<booleanAttribute key="clearwslog" value="false"/>

+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/EMFStore ExampleClient - merging"/>

+<booleanAttribute key="default" value="false"/>

+<stringAttribute key="featureDefaultLocation" value="workspace"/>

+<stringAttribute key="featurePluginResolution" value="workspace"/>

+<booleanAttribute key="includeOptional" value="false"/>

+<stringAttribute key="location" value="${workspace_loc}/../runtime-merging"/>

+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>

+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>

+<stringAttribute key="pde.version" value="3.3"/>

+<stringAttribute key="product" value="org.eclipse.platform.ide"/>

+<setAttribute key="selected_features">

+<setEntry value="org.eclipse.amalgam.discovery:default"/>

+<setEntry value="org.eclipse.cvs.source:default"/>

+<setEntry value="org.eclipse.cvs:default"/>

+<setEntry value="org.eclipse.draw2d.sdk:default"/>

+<setEntry value="org.eclipse.draw2d.source:default"/>

+<setEntry value="org.eclipse.draw2d:default"/>

+<setEntry value="org.eclipse.egit.psf:default"/>

+<setEntry value="org.eclipse.egit:default"/>

+<setEntry value="org.eclipse.emf.cdo.epp:default"/>

+<setEntry value="org.eclipse.emf.cdo.server:default"/>

+<setEntry value="org.eclipse.emf.cdo:default"/>

+<setEntry value="org.eclipse.emf.codegen.ecore.source:default"/>

+<setEntry value="org.eclipse.emf.codegen.ecore.ui.source:default"/>

+<setEntry value="org.eclipse.emf.codegen.ecore.ui:default"/>

+<setEntry value="org.eclipse.emf.codegen.ecore:default"/>

+<setEntry value="org.eclipse.emf.codegen.source:default"/>

+<setEntry value="org.eclipse.emf.codegen.ui.source:default"/>

+<setEntry value="org.eclipse.emf.codegen.ui:default"/>

+<setEntry value="org.eclipse.emf.codegen:default"/>

+<setEntry value="org.eclipse.emf.common.ui.source:default"/>

+<setEntry value="org.eclipse.emf.common.ui:default"/>

+<setEntry value="org.eclipse.emf.common:default"/>

+<setEntry value="org.eclipse.emf.compare.doc:default"/>

+<setEntry value="org.eclipse.emf.compare.sdk:default"/>

+<setEntry value="org.eclipse.emf.compare.source:default"/>

+<setEntry value="org.eclipse.emf.compare.ui.capabilities:default"/>

+<setEntry value="org.eclipse.emf.compare:default"/>

+<setEntry value="org.eclipse.emf.converter.source:default"/>

+<setEntry value="org.eclipse.emf.converter:default"/>

+<setEntry value="org.eclipse.emf.databinding.edit.source:default"/>

+<setEntry value="org.eclipse.emf.databinding.edit:default"/>

+<setEntry value="org.eclipse.emf.databinding.source:default"/>

+<setEntry value="org.eclipse.emf.databinding:default"/>

+<setEntry value="org.eclipse.emf.doc.source:default"/>

+<setEntry value="org.eclipse.emf.doc:default"/>

+<setEntry value="org.eclipse.emf.ecore.edit.source:default"/>

+<setEntry value="org.eclipse.emf.ecore.edit:default"/>

+<setEntry value="org.eclipse.emf.ecore.editor.source:default"/>

+<setEntry value="org.eclipse.emf.ecore.editor:default"/>

+<setEntry value="org.eclipse.emf.ecore:default"/>

+<setEntry value="org.eclipse.emf.ecoretools.doc:default"/>

+<setEntry value="org.eclipse.emf.ecoretools.sdk:default"/>

+<setEntry value="org.eclipse.emf.ecoretools.source:default"/>

+<setEntry value="org.eclipse.emf.ecoretools.utils.source:default"/>

+<setEntry value="org.eclipse.emf.ecoretools.utils:default"/>

+<setEntry value="org.eclipse.emf.ecoretools:default"/>

+<setEntry value="org.eclipse.emf.edit.source:default"/>

+<setEntry value="org.eclipse.emf.edit.ui.source:default"/>

+<setEntry value="org.eclipse.emf.edit.ui:default"/>

+<setEntry value="org.eclipse.emf.edit:default"/>

+<setEntry value="org.eclipse.emf.eef.codegen.ecore:default"/>

+<setEntry value="org.eclipse.emf.emfstore.site:default"/>

+<setEntry value="org.eclipse.emf.mapping.ecore.editor.source:default"/>

+<setEntry value="org.eclipse.emf.mapping.ecore.editor:default"/>

+<setEntry value="org.eclipse.emf.mapping.ecore.source:default"/>

+<setEntry value="org.eclipse.emf.mapping.ecore:default"/>

+<setEntry value="org.eclipse.emf.mapping.source:default"/>

+<setEntry value="org.eclipse.emf.mapping.ui.source:default"/>

+<setEntry value="org.eclipse.emf.mapping.ui:default"/>

+<setEntry value="org.eclipse.emf.mapping:default"/>

+<setEntry value="org.eclipse.emf.query.doc:default"/>

+<setEntry value="org.eclipse.emf.query.ocl.source:default"/>

+<setEntry value="org.eclipse.emf.query.ocl:default"/>

+<setEntry value="org.eclipse.emf.query.sdk:default"/>

+<setEntry value="org.eclipse.emf.query.source:default"/>

+<setEntry value="org.eclipse.emf.query:default"/>

+<setEntry value="org.eclipse.emf.sdk:default"/>

+<setEntry value="org.eclipse.emf.source:default"/>

+<setEntry value="org.eclipse.emf.transaction.doc:default"/>

+<setEntry value="org.eclipse.emf.transaction.sdk:default"/>

+<setEntry value="org.eclipse.emf.transaction.source:default"/>

+<setEntry value="org.eclipse.emf.transaction:default"/>

+<setEntry value="org.eclipse.emf.validation.doc:default"/>

+<setEntry value="org.eclipse.emf.validation.ocl.source:default"/>

+<setEntry value="org.eclipse.emf.validation.ocl:default"/>

+<setEntry value="org.eclipse.emf.validation.sdk:default"/>

+<setEntry value="org.eclipse.emf.validation.source:default"/>

+<setEntry value="org.eclipse.emf.validation:default"/>

+<setEntry value="org.eclipse.emf.workspace.doc:default"/>

+<setEntry value="org.eclipse.emf.workspace.source:default"/>

+<setEntry value="org.eclipse.emf.workspace:default"/>

+<setEntry value="org.eclipse.emf:default"/>

+<setEntry value="org.eclipse.epp.mpc:default"/>

+<setEntry value="org.eclipse.epp.package.common.feature:default"/>

+<setEntry value="org.eclipse.epp.package.modeling.feature:default"/>

+<setEntry value="org.eclipse.epp.usagedata.feature:default"/>

+<setEntry value="org.eclipse.equinox.p2.core.feature.source:default"/>

+<setEntry value="org.eclipse.equinox.p2.core.feature:default"/>

+<setEntry value="org.eclipse.equinox.p2.discovery.feature:default"/>

+<setEntry value="org.eclipse.equinox.p2.extras.feature.source:default"/>

+<setEntry value="org.eclipse.equinox.p2.extras.feature:default"/>

+<setEntry value="org.eclipse.equinox.p2.rcp.feature.source:default"/>

+<setEntry value="org.eclipse.equinox.p2.rcp.feature:default"/>

+<setEntry value="org.eclipse.equinox.p2.user.ui.source:default"/>

+<setEntry value="org.eclipse.equinox.p2.user.ui:default"/>

+<setEntry value="org.eclipse.gef.sdk:default"/>

+<setEntry value="org.eclipse.gef.source:default"/>

+<setEntry value="org.eclipse.gef:default"/>

+<setEntry value="org.eclipse.gmf.examples.runtime.ui.pde:default"/>

+<setEntry value="org.eclipse.gmf.runtime.notation:default"/>

+<setEntry value="org.eclipse.gmf.runtime.sdk:default"/>

+<setEntry value="org.eclipse.gmf.runtime.thirdparty.source:default"/>

+<setEntry value="org.eclipse.gmf.runtime.thirdparty:default"/>

+<setEntry value="org.eclipse.gmf.source:default"/>

+<setEntry value="org.eclipse.gmf:default"/>

+<setEntry value="org.eclipse.help.source:default"/>

+<setEntry value="org.eclipse.help:default"/>

+<setEntry value="org.eclipse.jdt.source:default"/>

+<setEntry value="org.eclipse.jdt:default"/>

+<setEntry value="org.eclipse.jgit:default"/>

+<setEntry value="org.eclipse.mylyn.bugzilla_feature:default"/>

+<setEntry value="org.eclipse.mylyn.context_feature:default"/>

+<setEntry value="org.eclipse.mylyn.ide_feature:default"/>

+<setEntry value="org.eclipse.mylyn.java_feature:default"/>

+<setEntry value="org.eclipse.mylyn.pde_feature:default"/>

+<setEntry value="org.eclipse.mylyn.team_feature:default"/>

+<setEntry value="org.eclipse.mylyn.wikitext_feature:default"/>

+<setEntry value="org.eclipse.mylyn_feature:default"/>

+<setEntry value="org.eclipse.net4j.db.derby:default"/>

+<setEntry value="org.eclipse.net4j.db.h2:default"/>

+<setEntry value="org.eclipse.net4j.db:default"/>

+<setEntry value="org.eclipse.net4j:default"/>

+<setEntry value="org.eclipse.ocl.all.sdk:default"/>

+<setEntry value="org.eclipse.ocl.all:default"/>

+<setEntry value="org.eclipse.ocl.core.sdk:default"/>

+<setEntry value="org.eclipse.ocl.doc:default"/>

+<setEntry value="org.eclipse.ocl.edit.source:default"/>

+<setEntry value="org.eclipse.ocl.edit:default"/>

+<setEntry value="org.eclipse.ocl.source:default"/>

+<setEntry value="org.eclipse.ocl.uml.source:default"/>

+<setEntry value="org.eclipse.ocl.uml:default"/>

+<setEntry value="org.eclipse.ocl:default"/>

+<setEntry value="org.eclipse.pde.source:default"/>

+<setEntry value="org.eclipse.pde:default"/>

+<setEntry value="org.eclipse.platform.source:default"/>

+<setEntry value="org.eclipse.platform:default"/>

+<setEntry value="org.eclipse.rcp.source:default"/>

+<setEntry value="org.eclipse.rcp:default"/>

+<setEntry value="org.eclipse.sdk:default"/>

+<setEntry value="org.eclipse.uml2.doc:default"/>

+<setEntry value="org.eclipse.uml2.examples.source:default"/>

+<setEntry value="org.eclipse.uml2.examples:default"/>

+<setEntry value="org.eclipse.uml2.sdk:default"/>

+<setEntry value="org.eclipse.uml2.source:default"/>

+<setEntry value="org.eclipse.uml2:default"/>

+<setEntry value="org.eclipse.xsd.doc.source:default"/>

+<setEntry value="org.eclipse.xsd.doc:default"/>

+<setEntry value="org.eclipse.xsd.ecore.converter.source:default"/>

+<setEntry value="org.eclipse.xsd.ecore.converter:default"/>

+<setEntry value="org.eclipse.xsd.edit.source:default"/>

+<setEntry value="org.eclipse.xsd.edit:default"/>

+<setEntry value="org.eclipse.xsd.editor.source:default"/>

+<setEntry value="org.eclipse.xsd.editor:default"/>

+<setEntry value="org.eclipse.xsd.mapping.editor.source:default"/>

+<setEntry value="org.eclipse.xsd.mapping.editor:default"/>

+<setEntry value="org.eclipse.xsd.mapping.source:default"/>

+<setEntry value="org.eclipse.xsd.mapping:default"/>

+<setEntry value="org.eclipse.xsd.sdk:default"/>

+<setEntry value="org.eclipse.xsd.source:default"/>

+<setEntry value="org.eclipse.xsd:default"/>

+</setAttribute>

+<stringAttribute key="selected_target_plugins" value="org.apache.commons.codec@default:default,org.apache.commons.logging*1.1.1.v201101211721@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem.win32.x86_64@default:false,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.osgi@-1:true"/>

+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.emf.emfstore.common.model@default:default,org.eclipse.emf.emfstore.common@default:default,org.eclipse.emf.emfstore.examplemodel@default:default,org.eclipse.emf.emfstore.migration@default:default,org.eclipse.emf.emfstore.server.model@default:default,org.eclipse.emf.emfstore.server@default:default"/>

+<booleanAttribute key="show_selected_only" value="false"/>

+<stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>

+<booleanAttribute key="tracing" value="false"/>

+<booleanAttribute key="useCustomFeatures" value="false"/>

+<booleanAttribute key="useDefaultConfig" value="true"/>

+<booleanAttribute key="useDefaultConfigArea" value="true"/>

+<booleanAttribute key="useProduct" value="false"/>

+</launchConfiguration>

diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/plugin.xml b/Fuzzy/org.eclipse.emf.emfstore.example.merging/plugin.xml
new file mode 100644
index 0000000..91c04c8
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/plugin.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.4"?>

+<plugin>

+   <extension

+         id="merging"

+         point="org.eclipse.core.runtime.applications">

+      <application

+            cardinality="singleton-global"

+            thread="main"

+            visible="true">

+         <run

+               class="org.eclipse.emf.emfstore.example.merging.Application">

+         </run>

+      </application>

+   </extension>

+</plugin>

diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/pom.xml b/Fuzzy/org.eclipse.emf.emfstore.example.merging/pom.xml
new file mode 100644
index 0000000..3453f96
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/pom.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.eclipse.emf.emfstore</groupId>
+    <artifactId>emfstore-parent</artifactId>
+    <version>0.9.3-SNAPSHOT</version>
+    <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+  </parent>
+  <artifactId>org.eclipse.emf.emfstore.example.merging</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Activator.java b/Fuzzy/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Activator.java
new file mode 100644
index 0000000..75666d5
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Activator.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * 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:
+ * Florian Pirchner
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.example.merging;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * The plug-in ID.
+	 */
+	public static final String PLUGIN_ID = "org.eclipse.emf.emfstore.example.merging";
+
+	// The shared instance
+	private static Activator plugin;
+
+	/**
+	 * The constructor.
+	 */
+	public Activator() {
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	// BEGIN SUPRESS CATCH EXCEPTION
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	// END SUPRESS CATCH EXCEPTION
+
+	/**
+	 * Returns the shared instance.
+	 * 
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Application.java b/Fuzzy/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Application.java
new file mode 100644
index 0000000..07dc258
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Application.java
@@ -0,0 +1,381 @@
+/*******************************************************************************
+ * Copyright 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.example.merging;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.emfstore.bowling.BowlingFactory;
+import org.eclipse.emf.emfstore.bowling.League;
+import org.eclipse.emf.emfstore.bowling.Player;
+import org.eclipse.emf.emfstore.client.model.ProjectSpace;
+import org.eclipse.emf.emfstore.client.model.Usersession;
+import org.eclipse.emf.emfstore.client.model.Workspace;
+import org.eclipse.emf.emfstore.client.model.WorkspaceManager;
+import org.eclipse.emf.emfstore.client.model.changeTracking.merging.AbstractConflictResolver;
+import org.eclipse.emf.emfstore.client.model.changeTracking.merging.DecisionManager;
+import org.eclipse.emf.emfstore.client.model.controller.callbacks.UpdateCallback;
+import org.eclipse.emf.emfstore.client.model.exceptions.ChangeConflictException;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreClientUtil;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommand;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommandWithResult;
+import org.eclipse.emf.emfstore.common.ConsoleProgressMonitor;
+import org.eclipse.emf.emfstore.common.model.IModelElementIdToEObjectMapping;
+import org.eclipse.emf.emfstore.common.model.Project;
+import org.eclipse.emf.emfstore.server.exceptions.AccessControlException;
+import org.eclipse.emf.emfstore.server.exceptions.BaseVersionOutdatedException;
+import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException;
+import org.eclipse.emf.emfstore.server.model.ProjectInfo;
+import org.eclipse.emf.emfstore.server.model.versioning.ChangePackage;
+import org.eclipse.emf.emfstore.server.model.versioning.LogMessage;
+import org.eclipse.emf.emfstore.server.model.versioning.PrimaryVersionSpec;
+import org.eclipse.emf.emfstore.server.model.versioning.VersioningFactory;
+import org.eclipse.emf.emfstore.server.model.versioning.Versions;
+import org.eclipse.emf.emfstore.server.model.versioning.operations.AbstractOperation;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+
+/**
+ * An application that runs the demo.<br>
+ * Run a client that shows the merging feature of the EMFstore
+ * Please note: this is the programmatic way of merging
+ * EMFStore also provides a default UI for merging
+ * If there is a problem with the connection to the server
+ * e.g. a network, a specific EMFStoreException will be thrown
+ */
+public class Application implements IApplication {
+
+	private ProjectSpace project1;
+	private League league1;
+	private ProjectSpace project2;
+	private League league2;
+	private LogMessage logMessage;
+
+	/**
+	 * {@inheritDoc}
+	 */
+	// BEGIN SUPRESS CATCH EXCEPTION
+	public Object start(IApplicationContext context) throws Exception {
+		// END SUPRESS CATCH EXCEPTION
+
+		WorkspaceManager.init();
+
+		// Run a client that shows the merging feature of the EMFstore
+		// Please note: this is the programmatic way of merging
+		// EMFStore also provides a default UI for merging
+		// If there is a problem with the connection to the server
+		// e.g. a network, a specific EMFStoreException will be thrown
+		try {
+			runClient();
+		} catch (EmfStoreException e) {
+			System.out.println("No connection to server.");
+			System.out.println("Did you start the server? :-)");
+			e.printStackTrace();
+
+		}
+
+		return IApplication.EXIT_OK;
+	}
+
+	private void runClient() throws AccessControlException, EmfStoreException {
+		System.out.println("Client starting...");
+		// Sets up the workspace by cleaning all contents
+		// Create a project with some EObjects and two
+		// identical copies. See hello world code example
+		// for more details
+		setupWorkspace();
+
+		// Change the name of the league in project 1,add a new player and commit the change
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				league1.setName("New Name 1");
+				league1.getPlayers().add(createPlayer("Player no. 4"));
+			}
+		}.run(false);
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				try {
+					project1.commit(logMessage, null, new ConsoleProgressMonitor());
+				} catch (EmfStoreException e) {
+					throw new RuntimeException(e);
+				}
+			}
+		}.run(false);
+		
+		// Changing the name again value without calling
+		// project2.update() will cause a conflict on commit.
+		// also add one change which is non-conflicting
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				league2.setName("New Name 2");
+				league2.getPlayers().remove(0);
+			}
+		}.run(false);
+
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				try {
+					project2.commit(logMessage, null, new ConsoleProgressMonitor());
+				} catch (BaseVersionOutdatedException e) {
+					System.out.println("\nCommit of project 2 failed.");
+			
+					// run update in project 2 with our own updateCallback.			
+					System.out.println("\nUpdate of project 2 with conflict resolver...");
+					try {
+						project2.update(Versions.createHEAD(), new MyUpdateCallback(), new ConsoleProgressMonitor());
+						// commit merge result in project 2
+						System.out.println("\nCommit of project 2 with merge result.");
+						project2.commit(logMessage, null, new ConsoleProgressMonitor());
+					} catch (EmfStoreException e1) {
+						throw new RuntimeException(e);
+					}
+				} catch (EmfStoreException e) {
+					throw new RuntimeException(e);
+				}
+			}
+		}.run(false);
+
+		// After having merged the two projects update local project 1
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				try {
+					System.out.println("\nUpdate of project 1 with merge result.");
+					project1.update();
+				} catch (EmfStoreException e) {
+					throw new RuntimeException(e);
+				}
+			}
+		}.run(false);
+
+		System.out.println("\nLeague name in project 1 is now:" + league1.getName());
+		System.out.println("Client run completed.");
+	}
+
+	/**
+	 * Creates a default workspace and deletes all remote projects.
+	 * 
+	 * @throws AccessControlException
+	 * @throws EmfStoreException
+	 */
+	private void setupWorkspace() throws AccessControlException, EmfStoreException {
+		// The workspace is the core controler to access
+		// local and remote projects
+		final Workspace workspace = WorkspaceManager.getInstance().getCurrentWorkspace();
+
+		// A user session stores credentials for login
+		// Creates a user session with the default credentials
+		final Usersession usersession = new EMFStoreCommandWithResult<Usersession>() {
+			@Override
+			protected Usersession doRun() {
+				Usersession session = EMFStoreClientUtil.createUsersession();
+				try {
+					session.logIn();
+				} catch (EmfStoreException e) {
+					throw new RuntimeException(e);
+				}
+				return session;
+			}
+		}.run(false);
+
+		// Retrieves a list of existing (and accessible) projects
+		// on the sever and deletes them permanently (to have a
+		// clean set-up)
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				try {
+					List<ProjectInfo> projectList = workspace.getRemoteProjectList(usersession);
+					for (ProjectInfo projectInfo : projectList) {
+						workspace.deleteRemoteProject(usersession, projectInfo.getProjectId(), true);
+					}
+				} catch (EmfStoreException e) {
+					throw new RuntimeException(e);
+				}
+			}
+		}.run(false);
+
+		// Create a project, share it with the server
+		project1 = new EMFStoreCommandWithResult<ProjectSpace>() {
+			@Override
+			protected ProjectSpace doRun() {
+				ProjectSpace project1 = workspace.createLocalProject("projectNo1", "My project");
+				try {
+					project1.shareProject(usersession, new ConsoleProgressMonitor());
+				} catch (EmfStoreException e) {
+					throw new RuntimeException(e);
+				}
+				return project1;
+			}
+		}.run(false);
+
+		// Create some EObjects and add them to the project
+		// (To the projects containment tree)
+		league1 = BowlingFactory.eINSTANCE.createLeague();
+		league1.setName("league");
+		league1.getPlayers().add(createPlayer("no. 1"));
+		league1.getPlayers().add(createPlayer("no. 2"));
+
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				project1.getProject().addModelElement(league1);
+			}
+		}.run(false);
+
+		logMessage = new EMFStoreCommandWithResult<LogMessage>() {
+			@Override
+			protected LogMessage doRun() {
+				try {
+					LogMessage result = VersioningFactory.eINSTANCE.createLogMessage();
+					result.setMessage("My Message");
+					project1.commit(result, null, new ConsoleProgressMonitor());
+					System.out.println("Project 1 committed!");
+					return result;
+				} catch (EmfStoreException e) {
+					throw new RuntimeException(e);
+				}
+			}
+		}.run(false);
+
+		// Check-out a second, independent copy of the project
+		// (simulating a second client)
+		project2 = new EMFStoreCommandWithResult<ProjectSpace>() {
+			@Override
+			protected ProjectSpace doRun() {
+				try {
+					return workspace.checkout(usersession, project1.getProjectInfo(), new NullProgressMonitor());
+				} catch (EmfStoreException e) {
+					throw new RuntimeException(e);
+				}
+			}
+		}.run(false);
+
+		league2 = (League) project2.getProject().getModelElements().get(0);
+	}
+
+	/**
+	 * Creates a new instance of a player.
+	 * 
+	 * @param name
+	 * @return
+	 */
+	private Player createPlayer(String name) {
+		Player player = BowlingFactory.eINSTANCE.createPlayer();
+		player.setName(String.format("Player %s", name));
+		player.setEMail(String.format("%s@emfstore.org", name));
+		return player;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void stop() {
+	}
+	
+	/**
+	 * An UpdateCallback to drive the update and use our own conflict resolver (MyConflictResolver).
+	 */
+	private class MyUpdateCallback implements UpdateCallback {
+		public void noChangesOnServer() {
+			// do nothing if there are no changes on the server (in this example we know
+			// there are changes anyway)
+		}
+
+		public boolean inspectChanges(ProjectSpace projectSpace, List<ChangePackage> changes,
+			IModelElementIdToEObjectMapping idToEObjectMapping) {
+			return true;
+		}
+
+		public boolean conflictOccurred(ChangeConflictException changeConflictException,
+			IProgressMonitor monitor) {
+			// resolve conflicts by merging with our conflict resolver
+			try {
+				project2.merge(project2.resolveVersionSpec(Versions.createHEAD()),
+					changeConflictException, new MyConflictResolver(false), this, monitor);
+			} catch (EmfStoreException e) {
+				// on any exceptions, declare conflicts as non-resolved
+				return false;
+			}
+			// conflicts have been resolved
+			return true;
+		}
+
+		public boolean checksumCheckFailed(ProjectSpace projectSpace, PrimaryVersionSpec versionSpec,
+			IProgressMonitor progressMonitor) throws EmfStoreException {
+			return true;
+		}
+	};
+	
+	/**
+	 * The MyConflictResolver will accept the name change of the league of project 2 to "New Name 2"
+	 * reject the name change of project 1 and accept all other changes.
+	 */
+	private class MyConflictResolver extends AbstractConflictResolver {
+		/**
+		 * Instantiates a new MyConflictResolver.
+		 *
+		 * @param isBranchMerge the is branch merge
+		 */
+		public MyConflictResolver(boolean isBranchMerge) {
+			super(isBranchMerge);
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.emf.emfstore.client.model.changeTracking.merging.AbstractConflictResolver#controlDecisionManager(org.eclipse.emf.emfstore.client.model.changeTracking.merging.DecisionManager)
+		 */
+		@Override
+		protected boolean controlDecisionManager(DecisionManager decisionManager) {
+			return true;
+		}
+
+		private ChangePackage myChangePackage;
+		private List<ChangePackage> theirChangePackages;
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.emf.emfstore.client.model.changeTracking.merging.AbstractConflictResolver#resolveConflicts(org.eclipse.emf.emfstore.common.model.Project, org.eclipse.emf.emfstore.client.model.exceptions.ChangeConflictException, org.eclipse.emf.emfstore.server.model.versioning.PrimaryVersionSpec, org.eclipse.emf.emfstore.server.model.versioning.PrimaryVersionSpec)
+		 */
+		@Override
+		public boolean resolveConflicts(Project project, ChangeConflictException conflictException,
+			PrimaryVersionSpec base, PrimaryVersionSpec target) {
+			this.theirChangePackages = conflictException.getNewPackages();
+			this.myChangePackage = conflictException.getMyChangePackages().get(0);
+			// declare that resolver will be able to resolve all conflicts
+			return true;
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.emf.emfstore.client.model.changeTracking.merging.AbstractConflictResolver#getRejectedTheirs()
+		 */
+		@Override
+		public List<AbstractOperation> getRejectedTheirs() {
+			// reject the first change in the change package of project
+			// 1 from the server, since it is the name change of the
+			// league to "New Name 1"
+			return Arrays.asList(theirChangePackages.get(0).getOperations().get(0));
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.emf.emfstore.client.model.changeTracking.merging.AbstractConflictResolver#getAcceptedMine()
+		 */
+		@Override
+		public List<AbstractOperation> getAcceptedMine() {
+			// accept all my operations in project 2, including the name change to "New Name 2"
+			return myChangePackage.getOperations();
+		}
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.checkstyle b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.checkstyle
new file mode 100644
index 0000000..2f2667a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+  <fileset name="all" enabled="true" check-config-name="emfstoreStyle" local="false">
+    <file-match-pattern match-pattern="." include-pattern="true"/>
+  </fileset>
+</fileset-config>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.classpath b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.project b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.project
new file mode 100644
index 0000000..13e3fed
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.project
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.emfstore.example.sessionprovider</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+	</natures>
+</projectDescription>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..6b299b1
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,10 @@
+#Mon Mar 05 15:28:54 CET 2012
+M=org.eclipse.emf.emfstore.exampleclient/.settings/org.eclipse.jdt.core.prefs
+Unstaged=changes after reset\:
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ac18dfd
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Example SessionProvider
+Bundle-SymbolicName: org.eclipse.emf.emfstore.example.sessionprovider;singleton:=true
+Bundle-Version: 0.9.3.qualifier
+Bundle-Activator: org.eclipse.emf.emfstore.exampleclient.Activator
+Require-Bundle: org.eclipse.emf.emfstore.client;bundle-version="0.9.0",
+ org.eclipse.emf.workspace;bundle-version="1.4.0",
+ org.eclipse.emf.emfstore.examplemodel
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Vendor: Eclipse Modeling Project
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/build.properties b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/build.properties
new file mode 100644
index 0000000..6f20375
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/build.properties
@@ -0,0 +1,5 @@
+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .,\

+               plugin.xml

diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/plugin.xml b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/plugin.xml
new file mode 100644
index 0000000..f340426
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/plugin.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.4"?>

+<plugin>

+   <extension

+         id="sessionprovider"

+         point="org.eclipse.core.runtime.applications">

+      <application

+            cardinality="singleton-global"

+            thread="main"

+            visible="true">

+         <run

+               class="org.eclipse.emf.emfstore.exampleclient.Application">

+         </run>

+      </application>

+   </extension>

+</plugin>

diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/pom.xml b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/pom.xml
new file mode 100644
index 0000000..4ed991b
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/pom.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.eclipse.emf.emfstore</groupId>
+    <artifactId>emfstore-parent</artifactId>
+    <version>0.9.3-SNAPSHOT</version>
+    <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+  </parent>
+  <artifactId>org.eclipse.emf.emfstore.example.sessionprovider</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/src/org/eclipse/emf/emfstore/exampleclient/Activator.java b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/src/org/eclipse/emf/emfstore/exampleclient/Activator.java
new file mode 100644
index 0000000..8539a0c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/src/org/eclipse/emf/emfstore/exampleclient/Activator.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * 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:
+ * Florian Pirchner
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.exampleclient;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ */
+public class Activator extends Plugin {
+
+	/**
+	 * The plug-in ID.
+	 */
+	public static final String PLUGIN_ID = "exampleClient";
+
+	// The shared instance
+	private static Activator plugin;
+
+	/**
+	 * The constructor.
+	 */
+	public Activator() {
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	// BEGIN SUPRESS CATCH EXCEPTION
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	// END SUPRESS CATCH EXCEPTION
+
+	/**
+	 * Returns the shared instance.
+	 * 
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/src/org/eclipse/emf/emfstore/exampleclient/Application.java b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/src/org/eclipse/emf/emfstore/exampleclient/Application.java
new file mode 100644
index 0000000..284d08c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/src/org/eclipse/emf/emfstore/exampleclient/Application.java
@@ -0,0 +1,178 @@
+/*******************************************************************************
+ * 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:
+ * Florian Pirchner
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.exampleclient;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.emfstore.bowling.BowlingFactory;
+import org.eclipse.emf.emfstore.bowling.League;
+import org.eclipse.emf.emfstore.bowling.Player;
+import org.eclipse.emf.emfstore.client.model.ProjectSpace;
+import org.eclipse.emf.emfstore.client.model.Usersession;
+import org.eclipse.emf.emfstore.client.model.Workspace;
+import org.eclipse.emf.emfstore.client.model.WorkspaceManager;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreClientUtil;
+import org.eclipse.emf.emfstore.common.model.util.ModelUtil;
+import org.eclipse.emf.emfstore.server.exceptions.AccessControlException;
+import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException;
+import org.eclipse.emf.emfstore.server.model.ProjectInfo;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+
+/**
+ * An application that runs the demo.<br>
+ * Run a client that shows the merging feature of the EMFstore
+ * Please note: this is the programmatic way of merging
+ * EMFStore also provides a default UI for merging
+ * If there is a problem with the connection to the server
+ * e.g. a network, a specific EMFStoreException will be thrown
+ */
+public class Application implements IApplication {
+
+	/**
+	 * {@inheritDoc}
+	 */
+	// BEGIN SUPRESS CATCH EXCEPTION
+	public Object start(IApplicationContext context) throws Exception {
+		WorkspaceManager.init();
+
+		// run a client that shows the basic features of the emf store
+		runClient();
+
+		return IApplication.EXIT_OK;
+	}
+
+	// END SUPRESS CATCH EXCEPTION
+
+	private void runClient() throws AccessControlException, EmfStoreException {
+		System.out.println("Client starting...");
+
+		try {
+
+			Workspace workspace = WorkspaceManager.getInstance().getCurrentWorkspace();
+			// create a default Usersession for the purpose of this
+			// tutorial.
+			// TODO - create server info
+			Usersession usersession = EMFStoreClientUtil.createUsersession();
+			usersession.logIn();
+			List<ProjectInfo> projectList;
+			// TODO server info parameter
+			projectList = workspace.getRemoteProjectList(usersession);
+
+			// TODO
+			// org.eclipse.emf.emfstore.client.test.TestSessionProvider
+			// schreiben
+			// Pwd per System.in prompten
+
+			for (ProjectInfo projectInfo : projectList) {
+				workspace.deleteRemoteProject(usersession, projectInfo.getProjectId(), true);
+			}
+
+			/*
+			 * Create a project, share it with the server, add a model element
+			 * to it and commit the changes.
+			 */
+
+			// create a new local project
+			// and share it with the server
+			ProjectSpace project1 = workspace.createLocalProject("projectNo1", "My project");
+			project1.shareProject(usersession, null);
+
+			// create a league
+			// and add 2 players to it
+			League league1 = BowlingFactory.eINSTANCE.createLeague();
+			league1.setName("league no. 1");
+			league1.getPlayers().add(createPlayer("no. 1"));
+			league1.getPlayers().add(createPlayer("no. 2"));
+			project1.getProject().addModelElement(league1);
+
+			// commit the changes of the project to the EMF
+			// Store
+			project1.commit(null, null, null);
+			System.out.println("Project 1: The \"league no. 1\" was sent to the server!");
+
+			/*
+			 * Now lets checkout the same project twice, modify the element and
+			 * commit the changes to the server.
+			 */
+			ProjectSpace project2 = workspace.checkout(usersession, project1.getProjectInfo(),
+				new NullProgressMonitor());
+			League league2 = (League) project2.getProject().getModelElements().get(0);
+			System.out.println(String.format("Project 2: League \"%s\" was checked out twice!", league1.getName()));
+			league2.setName("league no. 1 - changed");
+			// now lets try to commit
+			project2.commit(null, null, null);
+
+			/*
+			 * Lets check the value of the league contained in project 1. Then
+			 * we update the values from the server and check the contents
+			 * again.
+			 */
+			System.out.println(String.format("Project 1: Name of league is \"%s\"", league1.getName()));
+
+			// update from server
+			project1.update();
+
+			System.out.println(String.format("Project 1: Name of league is \"%s\" after update from server",
+				league1.getName()));
+
+			/*
+			 * Now lets create a conflict!
+			 */
+			System.out.println("Creating a conflict");
+			league1.setName("Not conflicting change");
+			project1.commit(null, null, null);
+
+			try {
+				league2.setName("Uuups - conflicting change");
+				project2.commit(null, null, null);
+			} catch (EmfStoreException e) {
+				System.out.println("That was a conflict since league1#name was changed and commited earlier!");
+
+				/*
+				 * Now lets revert the changes, update the project and change it
+				 * afterwards
+				 */
+				project2.revert();
+				project2.update();
+				league2.setName("Not conflicting anymore");
+				project2.commit(null, null, null);
+			}
+
+			System.out.println("Client run completed.");
+		} catch (AccessControlException e) {
+			ModelUtil.logException(e);
+		} catch (EmfStoreException e) {
+			ModelUtil.logException(e);
+		}
+	}
+
+	/**
+	 * Creates a new instance of a player.
+	 * 
+	 * @param name
+	 * @return
+	 */
+	private Player createPlayer(String name) {
+		Player player = BowlingFactory.eINSTANCE.createPlayer();
+		player.setName(String.format("Player %s", name));
+		player.setEMail(String.format("%s@emfstore.org", name));
+		return player;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void stop() {
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.checkstyle b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.checkstyle
new file mode 100644
index 0000000..2f2667a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+  <fileset name="all" enabled="true" check-config-name="emfstoreStyle" local="false">
+    <file-match-pattern match-pattern="." include-pattern="true"/>
+  </fileset>
+</fileset-config>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.classpath b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.classpath
new file mode 100644
index 0000000..472ee29
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.project b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.project
new file mode 100644
index 0000000..fd3a91e
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.emf.emfstore.fuzzy.emf.edit</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>net.sf.eclipsecs.core.CheckstyleBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>

+	</natures>

+</projectDescription>

diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..af0f20f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..8bf97e2
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Fuzzy EMF Edit plugin
+Bundle-SymbolicName: org.eclipse.emf.emfstore.fuzzy.emf.edit;singleton:=true
+Bundle-Version: 0.9.3.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
+Require-Bundle: org.eclipse.emf.emfstore.fuzzy.emf;visibility:=reexport,
+ org.eclipse.emf.edit;bundle-version="[2.5.0,3.0.0)";visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/build.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/build.properties
new file mode 100644
index 0000000..baa3b2a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/build.properties
@@ -0,0 +1,14 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+               icons/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateDiffReport_diffs_TestDiff.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateDiffReport_diffs_TestDiff.gif
new file mode 100644
index 0000000..ebeaeeb
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateDiffReport_diffs_TestDiff.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_DiffReport.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_DiffReport.gif
new file mode 100644
index 0000000..338a9a6
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_DiffReport.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_MutatorConfig.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_MutatorConfig.gif
new file mode 100644
index 0000000..dc3ca18
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_MutatorConfig.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_Root.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_Root.gif
new file mode 100644
index 0000000..9ea845b
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_Root.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestConfig.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestConfig.gif
new file mode 100644
index 0000000..21b4d39
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestConfig.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestDiff.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestDiff.gif
new file mode 100644
index 0000000..6203d5c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestDiff.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestResult.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestResult.gif
new file mode 100644
index 0000000..17db365
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestResult.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestRun.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestRun.gif
new file mode 100644
index 0000000..1875b13
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestRun.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestConfig_mutatorConfig_MutatorConfig.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestConfig_mutatorConfig_MutatorConfig.gif
new file mode 100644
index 0000000..c28f2e6
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestConfig_mutatorConfig_MutatorConfig.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestDiff_newResult_TestResult.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestDiff_newResult_TestResult.gif
new file mode 100644
index 0000000..5fb0c4c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestDiff_newResult_TestResult.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestDiff_oldResult_TestResult.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestDiff_oldResult_TestResult.gif
new file mode 100644
index 0000000..5fb0c4c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestDiff_oldResult_TestResult.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestRun_config_TestConfig.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestRun_config_TestConfig.gif
new file mode 100644
index 0000000..9073955
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestRun_config_TestConfig.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestRun_results_TestResult.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestRun_results_TestResult.gif
new file mode 100644
index 0000000..e178517
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestRun_results_TestResult.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/DiffReport.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/DiffReport.gif
new file mode 100644
index 0000000..14af8aa
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/DiffReport.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/MutatorConfig.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/MutatorConfig.gif
new file mode 100644
index 0000000..7bac4fd
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/MutatorConfig.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/Root.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/Root.gif
new file mode 100644
index 0000000..cb1755a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/Root.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestConfig.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestConfig.gif
new file mode 100644
index 0000000..c3370c7
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestConfig.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestDiff.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestDiff.gif
new file mode 100644
index 0000000..e4b530e
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestDiff.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestResult.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestResult.gif
new file mode 100644
index 0000000..136e3b2
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestResult.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestRun.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestRun.gif
new file mode 100644
index 0000000..739ebbf
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestRun.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/plugin.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/plugin.properties
new file mode 100644
index 0000000..26d8b12
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/plugin.properties
@@ -0,0 +1,64 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+pluginName = Config Edit Support
+providerName = www.example.org
+
+_UI_CreateChild_text = {0}
+_UI_CreateChild_text2 = {1} {0}
+_UI_CreateChild_text3 = {1}
+_UI_CreateChild_tooltip = Create New {0} Under {1} Feature
+_UI_CreateChild_description = Create a new child of type {0} for the {1} feature of the selected {2}.
+_UI_CreateSibling_description = Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent.
+
+_UI_PropertyDescriptor_description = The {0} of the {1}
+
+_UI_TestConfig_type = Test Config
+_UI_TestRun_type = Test Run
+_UI_TestResult_type = Test Result
+_UI_TestDiff_type = Test Diff
+_UI_DiffReport_type = Diff Report
+_UI_Root_type = Root
+_UI_MutatorConfig_type = Mutator Config
+_UI_Unknown_type = Object
+
+_UI_Unknown_datatype= Value
+
+_UI_TestConfig_seed_feature = Seed
+_UI_TestConfig_count_feature = Count
+_UI_TestConfig_testClass_feature = Test Class
+_UI_TestConfig_id_feature = Id
+_UI_TestConfig_mutatorConfig_feature = Mutator Config
+_UI_TestRun_config_feature = Config
+_UI_TestRun_time_feature = Time
+_UI_TestRun_results_feature = Results
+_UI_TestResult_seedCount_feature = Seed Count
+_UI_TestResult_testName_feature = Test Name
+_UI_TestResult_error_feature = Error
+_UI_TestResult_failure_feature = Failure
+_UI_TestResult_executionTime_feature = Execution Time
+_UI_TestDiff_lastUpdate_feature = Last Update
+_UI_TestDiff_config_feature = Config
+_UI_TestDiff_oldResult_feature = Old Result
+_UI_TestDiff_newResult_feature = New Result
+_UI_DiffReport_diffs_feature = Diffs
+_UI_Root_elements_feature = Elements
+_UI_MutatorConfig_nsURI_feature = Ns URI
+_UI_MutatorConfig_rootEClass_feature = Root EClass
+_UI_MutatorConfig_depth_feature = Depth
+_UI_MutatorConfig_width_feature = Width
+_UI_MutatorConfig_ignoreAndLog_feature = Ignore And Log
+_UI_MutatorConfig_doNotGenerateRoot_feature = Do Not Generate Root
+_UI_MutatorConfig_useEcoreUtilDelete_feature = Use Ecore Util Delete
+_UI_Unknown_feature = Unspecified
+
+_UI_MutatorConfig_eClassesToIgnore_feature = EClasses To Ignore
+_UI_MutatorConfig_eStructuralFeaturesToIgnore_feature = EStructural Features To Ignore
+_UI_MutatorConfig_ePackage_feature = EPackage
+_UI_MutatorConfig_minObjectsCount_feature = Min Objects Count
+_UI_MutatorConfig_useRemoveCommand_feature = Use Remove Command
+_UI_MutatorConfig_maxDeleteCount_feature = Max Delete Count
+_UI_MutatorConfig_ePackages_feature = EPackages
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/plugin.xml b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/plugin.xml
new file mode 100644
index 0000000..bdbbe1d
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/plugin.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id$
+-->
+
+<plugin>
+
+   <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+      <factory
+            uri="http://org/eclipse/emf/emfstore/fuzzy/emf/config"
+            class="org.eclipse.emf.emfstore.fuzzy.emf.config.provider.ConfigItemProviderAdapterFactory"
+            supportedTypes=
+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+               org.eclipse.emf.edit.provider.ITreeItemContentProvider
+               org.eclipse.emf.edit.provider.IItemLabelProvider
+               org.eclipse.emf.edit.provider.IItemPropertySource"/>
+   </extension>
+
+</plugin>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/pom.xml b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/pom.xml
new file mode 100644
index 0000000..f2e3d90
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.eclipse.emf.emfstore</groupId>
+    <artifactId>emfstore-parent</artifactId>
+    <version>0.9.3-SNAPSHOT</version>
+    <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+  </parent>
+  <groupId>org.eclipse.emf.emfstore</groupId>
+  <artifactId>org.eclipse.emf.emfstore.fuzzy.emf.edit</artifactId>
+  <version>0.9.3-SNAPSHOT</version>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/ConfigEditPlugin.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/ConfigEditPlugin.java
new file mode 100644
index 0000000..81485bc
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/ConfigEditPlugin.java
@@ -0,0 +1,103 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.provider;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the Config edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public final class ConfigEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public static final ConfigEditPlugin INSTANCE = new ConfigEditPlugin();
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	private static Implementation plugin;
+
+	/**
+	 * Create the instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public ConfigEditPlugin() {
+		super(new ResourceLocator[] {});
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getPluginResourceLocator() {
+		return plugin;
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	public static Implementation getPlugin() {
+		return plugin;
+	}
+
+	/**
+	 * The actual implementation of the Eclipse <b>Plugin</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public static class Implementation extends EclipsePlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/ConfigItemProviderAdapterFactory.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/ConfigItemProviderAdapterFactory.java
new file mode 100644
index 0000000..9c0229a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/ConfigItemProviderAdapterFactory.java
@@ -0,0 +1,395 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.provider;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.util.ConfigAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged
+ * fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class ConfigItemProviderAdapterFactory extends ConfigAdapterFactory implements ComposeableAdapterFactory,
+	IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public ConfigItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig}
+	 * instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected TestConfigItemProvider testConfigItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Adapter createTestConfigAdapter() {
+		if (testConfigItemProvider == null) {
+			testConfigItemProvider = new TestConfigItemProvider(this);
+		}
+
+		return testConfigItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun}
+	 * instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected TestRunItemProvider testRunItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Adapter createTestRunAdapter() {
+		if (testRunItemProvider == null) {
+			testRunItemProvider = new TestRunItemProvider(this);
+		}
+
+		return testRunItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult}
+	 * instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected TestResultItemProvider testResultItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Adapter createTestResultAdapter() {
+		if (testResultItemProvider == null) {
+			testResultItemProvider = new TestResultItemProvider(this);
+		}
+
+		return testResultItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff}
+	 * instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected TestDiffItemProvider testDiffItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Adapter createTestDiffAdapter() {
+		if (testDiffItemProvider == null) {
+			testDiffItemProvider = new TestDiffItemProvider(this);
+		}
+
+		return testDiffItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport}
+	 * instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected DiffReportItemProvider diffReportItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Adapter createDiffReportAdapter() {
+		if (diffReportItemProvider == null) {
+			diffReportItemProvider = new DiffReportItemProvider(this);
+		}
+
+		return diffReportItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.emf.emfstore.fuzzy.emf.config.Root}
+	 * instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected RootItemProvider rootItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.Root}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Adapter createRootAdapter() {
+		if (rootItemProvider == null) {
+			rootItemProvider = new RootItemProvider(this);
+		}
+
+		return rootItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig}
+	 * instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected MutatorConfigItemProvider mutatorConfigItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Adapter createMutatorConfigAdapter() {
+		if (mutatorConfigItemProvider == null) {
+			mutatorConfigItemProvider = new MutatorConfigItemProvider(this);
+		}
+
+		return mutatorConfigItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>) type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void dispose() {
+		if (testConfigItemProvider != null)
+			testConfigItemProvider.dispose();
+		if (testRunItemProvider != null)
+			testRunItemProvider.dispose();
+		if (testResultItemProvider != null)
+			testResultItemProvider.dispose();
+		if (testDiffItemProvider != null)
+			testDiffItemProvider.dispose();
+		if (diffReportItemProvider != null)
+			diffReportItemProvider.dispose();
+		if (rootItemProvider != null)
+			rootItemProvider.dispose();
+		if (mutatorConfigItemProvider != null)
+			mutatorConfigItemProvider.dispose();
+	}
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/DiffReportItemProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/DiffReportItemProvider.java
new file mode 100644
index 0000000..c580c57
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/DiffReportItemProvider.java
@@ -0,0 +1,176 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class DiffReportItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
+	IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public DiffReportItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(ConfigPackage.Literals.DIFF_REPORT__DIFFS);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns DiffReport.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/DiffReport"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_DiffReport_type");
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(DiffReport.class)) {
+		case ConfigPackage.DIFF_REPORT__DIFFS:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.DIFF_REPORT__DIFFS,
+			ConfigFactory.eINSTANCE.createTestDiff()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return ConfigEditPlugin.INSTANCE;
+	}
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/MutatorConfigItemProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/MutatorConfigItemProvider.java
new file mode 100644
index 0000000..36d0c16
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/MutatorConfigItemProvider.java
@@ -0,0 +1,307 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class MutatorConfigItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
+	IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public MutatorConfigItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addRootEClassPropertyDescriptor(object);
+			addMinObjectsCountPropertyDescriptor(object);
+			addIgnoreAndLogPropertyDescriptor(object);
+			addDoNotGenerateRootPropertyDescriptor(object);
+			addUseEcoreUtilDeletePropertyDescriptor(object);
+			addEClassesToIgnorePropertyDescriptor(object);
+			addEStructuralFeaturesToIgnorePropertyDescriptor(object);
+			addEPackagesPropertyDescriptor(object);
+			addMaxDeleteCountPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Root EClass feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addRootEClassPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+			getResourceLocator(),
+			getString("_UI_MutatorConfig_rootEClass_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_MutatorConfig_rootEClass_feature",
+				"_UI_MutatorConfig_type"), ConfigPackage.Literals.MUTATOR_CONFIG__ROOT_ECLASS, true, false, true, null,
+			null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Min Objects Count feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addMinObjectsCountPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+			getResourceLocator(),
+			getString("_UI_MutatorConfig_minObjectsCount_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_MutatorConfig_minObjectsCount_feature",
+				"_UI_MutatorConfig_type"), ConfigPackage.Literals.MUTATOR_CONFIG__MIN_OBJECTS_COUNT, true, false,
+			false, ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Ignore And Log feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addIgnoreAndLogPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+			getResourceLocator(),
+			getString("_UI_MutatorConfig_ignoreAndLog_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_MutatorConfig_ignoreAndLog_feature",
+				"_UI_MutatorConfig_type"), ConfigPackage.Literals.MUTATOR_CONFIG__IGNORE_AND_LOG, true, false, false,
+			ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Do Not Generate Root feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addDoNotGenerateRootPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+			getResourceLocator(),
+			getString("_UI_MutatorConfig_doNotGenerateRoot_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_MutatorConfig_doNotGenerateRoot_feature",
+				"_UI_MutatorConfig_type"), ConfigPackage.Literals.MUTATOR_CONFIG__DO_NOT_GENERATE_ROOT, true, false,
+			false, ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Use Ecore Util Delete feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addUseEcoreUtilDeletePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+			getResourceLocator(),
+			getString("_UI_MutatorConfig_useEcoreUtilDelete_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_MutatorConfig_useEcoreUtilDelete_feature",
+				"_UI_MutatorConfig_type"), ConfigPackage.Literals.MUTATOR_CONFIG__USE_ECORE_UTIL_DELETE, true, false,
+			false, ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the EClasses To Ignore feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addEClassesToIgnorePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+			getResourceLocator(),
+			getString("_UI_MutatorConfig_eClassesToIgnore_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_MutatorConfig_eClassesToIgnore_feature",
+				"_UI_MutatorConfig_type"), ConfigPackage.Literals.MUTATOR_CONFIG__ECLASSES_TO_IGNORE, true, false,
+			true, null, null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the EStructural Features To Ignore feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addEStructuralFeaturesToIgnorePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+			getResourceLocator(),
+			getString("_UI_MutatorConfig_eStructuralFeaturesToIgnore_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_MutatorConfig_eStructuralFeaturesToIgnore_feature",
+				"_UI_MutatorConfig_type"), ConfigPackage.Literals.MUTATOR_CONFIG__ESTRUCTURAL_FEATURES_TO_IGNORE, true,
+			false, true, null, null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the EPackages feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addEPackagesPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+			getResourceLocator(),
+			getString("_UI_MutatorConfig_ePackages_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_MutatorConfig_ePackages_feature",
+				"_UI_MutatorConfig_type"), ConfigPackage.Literals.MUTATOR_CONFIG__EPACKAGES, true, false, true, null,
+			null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Max Delete Count feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addMaxDeleteCountPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+			getResourceLocator(),
+			getString("_UI_MutatorConfig_maxDeleteCount_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_MutatorConfig_maxDeleteCount_feature",
+				"_UI_MutatorConfig_type"), ConfigPackage.Literals.MUTATOR_CONFIG__MAX_DELETE_COUNT, true, false, false,
+			ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This returns MutatorConfig.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/MutatorConfig"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		MutatorConfig mutatorConfig = (MutatorConfig) object;
+		return getString("_UI_MutatorConfig_type") + " " + mutatorConfig.getMinObjectsCount();
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(MutatorConfig.class)) {
+		case ConfigPackage.MUTATOR_CONFIG__MIN_OBJECTS_COUNT:
+		case ConfigPackage.MUTATOR_CONFIG__IGNORE_AND_LOG:
+		case ConfigPackage.MUTATOR_CONFIG__DO_NOT_GENERATE_ROOT:
+		case ConfigPackage.MUTATOR_CONFIG__USE_ECORE_UTIL_DELETE:
+		case ConfigPackage.MUTATOR_CONFIG__MAX_DELETE_COUNT:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return ConfigEditPlugin.INSTANCE;
+	}
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/RootItemProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/RootItemProvider.java
new file mode 100644
index 0000000..2ab5e2d
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/RootItemProvider.java
@@ -0,0 +1,194 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.Root;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.Root} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class RootItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
+	IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public RootItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(ConfigPackage.Literals.ROOT__ELEMENTS);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns Root.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Root"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_Root_type");
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Root.class)) {
+		case ConfigPackage.ROOT__ELEMENTS:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.ROOT__ELEMENTS,
+			ConfigFactory.eINSTANCE.createTestConfig()));
+
+		newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.ROOT__ELEMENTS,
+			ConfigFactory.eINSTANCE.createTestRun()));
+
+		newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.ROOT__ELEMENTS,
+			ConfigFactory.eINSTANCE.createTestResult()));
+
+		newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.ROOT__ELEMENTS,
+			ConfigFactory.eINSTANCE.createTestDiff()));
+
+		newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.ROOT__ELEMENTS,
+			ConfigFactory.eINSTANCE.createDiffReport()));
+
+		newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.ROOT__ELEMENTS,
+			ConfigFactory.eINSTANCE.createRoot()));
+
+		newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.ROOT__ELEMENTS,
+			ConfigFactory.eINSTANCE.createMutatorConfig()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return ConfigEditPlugin.INSTANCE;
+	}
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestConfigItemProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestConfigItemProvider.java
new file mode 100644
index 0000000..ccf4d74
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestConfigItemProvider.java
@@ -0,0 +1,254 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class TestConfigItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
+	IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public TestConfigItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSeedPropertyDescriptor(object);
+			addCountPropertyDescriptor(object);
+			addTestClassPropertyDescriptor(object);
+			addIdPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Seed feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addSeedPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+			getString("_UI_TestConfig_seed_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_TestConfig_seed_feature", "_UI_TestConfig_type"),
+			ConfigPackage.Literals.TEST_CONFIG__SEED, true, false, false, ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+			null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Count feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addCountPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+			getString("_UI_TestConfig_count_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_TestConfig_count_feature", "_UI_TestConfig_type"),
+			ConfigPackage.Literals.TEST_CONFIG__COUNT, true, false, false, ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+			null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Test Class feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addTestClassPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+			getString("_UI_TestConfig_testClass_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_TestConfig_testClass_feature", "_UI_TestConfig_type"),
+			ConfigPackage.Literals.TEST_CONFIG__TEST_CLASS, true, false, false,
+			ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Id feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addIdPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+			getString("_UI_TestConfig_id_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_TestConfig_id_feature", "_UI_TestConfig_type"),
+			ConfigPackage.Literals.TEST_CONFIG__ID, true, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+			null, null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(ConfigPackage.Literals.TEST_CONFIG__MUTATOR_CONFIG);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns TestConfig.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/TestConfig"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((TestConfig) object).getId();
+		return label == null || label.length() == 0 ? getString("_UI_TestConfig_type")
+			: getString("_UI_TestConfig_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(TestConfig.class)) {
+		case ConfigPackage.TEST_CONFIG__SEED:
+		case ConfigPackage.TEST_CONFIG__COUNT:
+		case ConfigPackage.TEST_CONFIG__TEST_CLASS:
+		case ConfigPackage.TEST_CONFIG__ID:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+			return;
+		case ConfigPackage.TEST_CONFIG__MUTATOR_CONFIG:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.TEST_CONFIG__MUTATOR_CONFIG,
+			ConfigFactory.eINSTANCE.createMutatorConfig()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return ConfigEditPlugin.INSTANCE;
+	}
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestDiffItemProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestDiffItemProvider.java
new file mode 100644
index 0000000..a3c4b91
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestDiffItemProvider.java
@@ -0,0 +1,245 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.provider;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class TestDiffItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
+	IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public TestDiffItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addLastUpdatePropertyDescriptor(object);
+			addConfigPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Last Update feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addLastUpdatePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+			getString("_UI_TestDiff_lastUpdate_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_TestDiff_lastUpdate_feature", "_UI_TestDiff_type"),
+			ConfigPackage.Literals.TEST_DIFF__LAST_UPDATE, true, false, false,
+			ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Config feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addConfigPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+			getString("_UI_TestDiff_config_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_TestDiff_config_feature", "_UI_TestDiff_type"),
+			ConfigPackage.Literals.TEST_DIFF__CONFIG, true, false, true, null, null, null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(ConfigPackage.Literals.TEST_DIFF__OLD_RESULT);
+			childrenFeatures.add(ConfigPackage.Literals.TEST_DIFF__NEW_RESULT);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns TestDiff.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/TestDiff"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		Date labelValue = ((TestDiff) object).getLastUpdate();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ? getString("_UI_TestDiff_type") : getString("_UI_TestDiff_type")
+			+ " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(TestDiff.class)) {
+		case ConfigPackage.TEST_DIFF__LAST_UPDATE:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+			return;
+		case ConfigPackage.TEST_DIFF__OLD_RESULT:
+		case ConfigPackage.TEST_DIFF__NEW_RESULT:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.TEST_DIFF__OLD_RESULT,
+			ConfigFactory.eINSTANCE.createTestResult()));
+
+		newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.TEST_DIFF__NEW_RESULT,
+			ConfigFactory.eINSTANCE.createTestResult()));
+	}
+
+	/**
+	 * This returns the label text for {@link org.eclipse.emf.edit.command.CreateChildCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String getCreateChildText(Object owner, Object feature, Object child, Collection<?> selection) {
+		Object childFeature = feature;
+		Object childObject = child;
+
+		boolean qualify = childFeature == ConfigPackage.Literals.TEST_DIFF__OLD_RESULT
+			|| childFeature == ConfigPackage.Literals.TEST_DIFF__NEW_RESULT;
+
+		if (qualify) {
+			return getString("_UI_CreateChild_text2", new Object[] { getTypeText(childObject),
+				getFeatureText(childFeature), getTypeText(owner) });
+		}
+		return super.getCreateChildText(owner, feature, child, selection);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return ConfigEditPlugin.INSTANCE;
+	}
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestResultItemProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestResultItemProvider.java
new file mode 100644
index 0000000..cff23f3
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestResultItemProvider.java
@@ -0,0 +1,232 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class TestResultItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
+	IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public TestResultItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSeedCountPropertyDescriptor(object);
+			addTestNamePropertyDescriptor(object);
+			addErrorPropertyDescriptor(object);
+			addFailurePropertyDescriptor(object);
+			addExecutionTimePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Seed Count feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addSeedCountPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+			getString("_UI_TestResult_seedCount_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_TestResult_seedCount_feature", "_UI_TestResult_type"),
+			ConfigPackage.Literals.TEST_RESULT__SEED_COUNT, true, false, false,
+			ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Test Name feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addTestNamePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+			getString("_UI_TestResult_testName_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_TestResult_testName_feature", "_UI_TestResult_type"),
+			ConfigPackage.Literals.TEST_RESULT__TEST_NAME, true, false, false,
+			ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Error feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addErrorPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+			getString("_UI_TestResult_error_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_TestResult_error_feature", "_UI_TestResult_type"),
+			ConfigPackage.Literals.TEST_RESULT__ERROR, true, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+			null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Failure feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addFailurePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+			getString("_UI_TestResult_failure_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_TestResult_failure_feature", "_UI_TestResult_type"),
+			ConfigPackage.Literals.TEST_RESULT__FAILURE, true, false, false,
+			ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Execution Time feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addExecutionTimePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+			getResourceLocator(),
+			getString("_UI_TestResult_executionTime_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_TestResult_executionTime_feature",
+				"_UI_TestResult_type"), ConfigPackage.Literals.TEST_RESULT__EXECUTION_TIME, true, false, false,
+			ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This returns TestResult.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/TestResult"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((TestResult) object).getTestName();
+		return label == null || label.length() == 0 ? getString("_UI_TestResult_type")
+			: getString("_UI_TestResult_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(TestResult.class)) {
+		case ConfigPackage.TEST_RESULT__SEED_COUNT:
+		case ConfigPackage.TEST_RESULT__TEST_NAME:
+		case ConfigPackage.TEST_RESULT__ERROR:
+		case ConfigPackage.TEST_RESULT__FAILURE:
+		case ConfigPackage.TEST_RESULT__EXECUTION_TIME:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return ConfigEditPlugin.INSTANCE;
+	}
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestRunItemProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestRunItemProvider.java
new file mode 100644
index 0000000..328eeba
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestRunItemProvider.java
@@ -0,0 +1,207 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.provider;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class TestRunItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
+	IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public TestRunItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addTimePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Time feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addTimePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+			((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+			getString("_UI_TestRun_time_feature"),
+			getString("_UI_PropertyDescriptor_description", "_UI_TestRun_time_feature", "_UI_TestRun_type"),
+			ConfigPackage.Literals.TEST_RUN__TIME, true, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+			null, null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(ConfigPackage.Literals.TEST_RUN__CONFIG);
+			childrenFeatures.add(ConfigPackage.Literals.TEST_RUN__RESULTS);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns TestRun.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/TestRun"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		Date labelValue = ((TestRun) object).getTime();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ? getString("_UI_TestRun_type") : getString("_UI_TestRun_type")
+			+ " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(TestRun.class)) {
+		case ConfigPackage.TEST_RUN__TIME:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+			return;
+		case ConfigPackage.TEST_RUN__CONFIG:
+		case ConfigPackage.TEST_RUN__RESULTS:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.TEST_RUN__CONFIG,
+			ConfigFactory.eINSTANCE.createTestConfig()));
+
+		newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.TEST_RUN__RESULTS,
+			ConfigFactory.eINSTANCE.createTestResult()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return ConfigEditPlugin.INSTANCE;
+	}
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.checkstyle b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.checkstyle
new file mode 100644
index 0000000..2f2667a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+  <fileset name="all" enabled="true" check-config-name="emfstoreStyle" local="false">
+    <file-match-pattern match-pattern="." include-pattern="true"/>
+  </fileset>
+</fileset-config>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.classpath b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.classpath
new file mode 100644
index 0000000..472ee29
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.project b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.project
new file mode 100644
index 0000000..261eae6
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.emf.emfstore.fuzzy.emf.editor</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>net.sf.eclipsecs.core.CheckstyleBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>

+	</natures>

+</projectDescription>

diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..af0f20f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ae55196
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: EMFDataProvider Editor
+Bundle-SymbolicName: org.eclipse.emf.emfstore.fuzzy.emf.editor;singleton:=true
+Bundle-Version: 0.9.3.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
+Require-Bundle: org.eclipse.core.resources;bundle-version="[3.7.0,4.0.0)";visibility:=reexport,
+ org.eclipse.emf.emfstore.fuzzy.emf.edit;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/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/build.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/build.properties
new file mode 100644
index 0000000..10c87a0
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/build.properties
@@ -0,0 +1,14 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+               icons/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/icons/full/obj16/ConfigModelFile.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/icons/full/obj16/ConfigModelFile.gif
new file mode 100644
index 0000000..8b3ad80
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/icons/full/obj16/ConfigModelFile.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/icons/full/wizban/NewConfig.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/icons/full/wizban/NewConfig.gif
new file mode 100644
index 0000000..33f212f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/icons/full/wizban/NewConfig.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/plugin.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/plugin.properties
new file mode 100644
index 0000000..6c5340c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/plugin.properties
@@ -0,0 +1,57 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+pluginName = Config Editor
+providerName = www.example.org
+
+_UI_ConfigEditor_menu = &Config Editor
+
+_UI_CreateChild_menu_item = &New Child
+_UI_CreateSibling_menu_item = N&ew Sibling
+
+_UI_ShowPropertiesView_menu_item = Show &Properties View
+_UI_RefreshViewer_menu_item = &Refresh
+
+_UI_SelectionPage_label = Selection
+_UI_ParentPage_label = Parent
+_UI_ListPage_label = List
+_UI_TreePage_label = Tree
+_UI_TablePage_label = Table
+_UI_TreeWithColumnsPage_label = Tree with Columns
+_UI_ObjectColumn_label = Object
+_UI_SelfColumn_label = Self
+
+_UI_NoObjectSelected = Selected Nothing
+_UI_SingleObjectSelected = Selected Object: {0}
+_UI_MultiObjectSelected = Selected {0} Objects
+
+_UI_OpenEditorError_label = Open Editor
+
+_UI_Wizard_category = Example EMF Model Creation Wizards
+
+_UI_CreateModelError_message = Problems encountered in file "{0}"
+
+_UI_ConfigModelWizard_label = Config Model
+_UI_ConfigModelWizard_description = Create a new Config model
+
+_UI_ConfigEditor_label = Config Model Editor
+
+_UI_ConfigEditorFilenameDefaultBase = My
+_UI_ConfigEditorFilenameExtensions = fuzzy
+
+_UI_Wizard_label = New
+
+_WARN_FilenameExtension = The file name must end in ''.{0}''
+_WARN_FilenameExtensions = The file name must have one of the following extensions: {0}
+
+_UI_ModelObject = &Model Object
+_UI_XMLEncoding = &XML Encoding
+_UI_XMLEncodingChoices = UTF-8 ASCII UTF-16 UTF-16BE UTF-16LE ISO-8859-1
+_UI_Wizard_initial_object_description = Select a model object to create
+
+_UI_FileConflict_label = File Conflict
+_WARN_FileConflict = There are unsaved changes that conflict with changes made outside the editor.  Do you wish to discard this editor's changes?
+
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/plugin.xml b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/plugin.xml
new file mode 100644
index 0000000..96bb383
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/plugin.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id$
+-->
+
+<plugin>
+
+   <extension point="org.eclipse.ui.newWizards">
+      <category
+            id="org.eclipse.emf.ecore.Wizard.category.ID"
+            name="%_UI_Wizard_category"/>
+      <wizard
+            id="org.eclipse.emf.emfstore.fuzzy.emf.config.presentation.ConfigModelWizardID"
+            name="%_UI_ConfigModelWizard_label"
+            class="org.eclipse.emf.emfstore.fuzzy.emf.config.presentation.ConfigModelWizard"
+            category="org.eclipse.emf.ecore.Wizard.category.ID"
+            icon="icons/full/obj16/ConfigModelFile.gif">
+         <description>%_UI_ConfigModelWizard_description</description>
+         <selection class="org.eclipse.core.resources.IResource"/>
+      </wizard>
+   </extension>
+
+   <extension point="org.eclipse.ui.editors">
+      <editor
+            id="org.eclipse.emf.emfstore.fuzzy.emf.config.presentation.ConfigEditorID"
+            name="%_UI_ConfigEditor_label"
+            icon="icons/full/obj16/ConfigModelFile.gif"
+            extensions="fuzzy"
+            class="org.eclipse.emf.emfstore.fuzzy.emf.config.presentation.ConfigEditor"
+            contributorClass="org.eclipse.emf.emfstore.fuzzy.emf.config.presentation.ConfigActionBarContributor">
+      </editor>
+   </extension>
+
+</plugin>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/pom.xml b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/pom.xml
new file mode 100644
index 0000000..1978223
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.eclipse.emf.emfstore</groupId>
+    <artifactId>emfstore-parent</artifactId>
+    <version>0.9.3-SNAPSHOT</version>
+    <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+  </parent>
+  <groupId>org.eclipse.emf.emfstore</groupId>
+  <artifactId>org.eclipse.emf.emfstore.fuzzy.emf.editor</artifactId>
+  <version>0.9.3-SNAPSHOT</version>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigActionBarContributor.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigActionBarContributor.java
new file mode 100644
index 0000000..9905102
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigActionBarContributor.java
@@ -0,0 +1,450 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.presentation;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Config model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class ConfigActionBarContributor extends EditingDomainActionBarContributor implements ISelectionChangedListener {
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction = new Action(
+		ConfigEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) {
+		@Override
+		public void run() {
+			try {
+				getPage().showView("org.eclipse.ui.views.PropertySheet");
+			} catch (PartInitException exception) {
+				ConfigEditorPlugin.INSTANCE.log(exception);
+			}
+		}
+	};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected IAction refreshViewerAction = new Action(
+		ConfigEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) {
+		@Override
+		public boolean isEnabled() {
+			return activeEditorPart instanceof IViewerProvider;
+		}
+
+		@Override
+		public void run() {
+			if (activeEditorPart instanceof IViewerProvider) {
+				Viewer viewer = ((IViewerProvider) activeEditorPart).getViewer();
+				if (viewer != null) {
+					viewer.refresh();
+				}
+			}
+		}
+	};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public ConfigActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		toolBarManager.add(new Separator("config-settings"));
+		toolBarManager.add(new Separator("config-additions"));
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(ConfigEditorPlugin.INSTANCE.getString("_UI_ConfigEditor_menu"),
+			"org.eclipse.emf.emfstore.fuzzy.emf.configMenuID");
+		menuManager.insertAfter("additions", submenuManager);
+		submenuManager.add(new Separator("settings"));
+		submenuManager.add(new Separator("actions"));
+		submenuManager.add(new Separator("additions"));
+		submenuManager.add(new Separator("additions-end"));
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(ConfigEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
+		submenuManager.insertBefore("additions", createChildMenuManager);
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(ConfigEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));
+		submenuManager.insertBefore("additions", createSiblingMenuManager);
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener(new IMenuListener() {
+			public void menuAboutToShow(IMenuManager menuManager) {
+				menuManager.updateAll(true);
+			}
+		});
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		} else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection) selection).size() == 1) {
+			Object object = ((IStructuredSelection) selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider) activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in
+	 * <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in
+	 * <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions,
+		String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				} else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem) contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem) contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(ConfigEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager);
+
+		submenuManager = new MenuManager(ConfigEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager);
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions"));
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction);
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());
+		menuManager.insertAfter("ui-actions", refreshViewerAction);
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigEditor.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigEditor.java
new file mode 100644
index 0000000..a7b4919
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigEditor.java
@@ -0,0 +1,1851 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.presentation;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.custom.CTabFolder;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.swt.layout.FillLayout;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.ui.dialogs.SaveAsDialog;
+
+import org.eclipse.ui.ide.IGotoMarker;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.ui.MarkerHelper;
+import org.eclipse.emf.common.ui.ViewerPane;
+
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EValidator;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.provider.ConfigItemProviderAdapterFactory;
+
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+/**
+ * This is an example of a Config model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class ConfigEditor extends MultiPageEditorPart implements IEditingDomainProvider, ISelectionProvider,
+	IMenuListener, IViewerProvider, IGotoMarker {
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected PropertySheetPage propertySheetPage;
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline.
+	 * The parent relation must be correctly defined for this to work.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This inverts the roll of parent and child in the content provider and show parents as a tree.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected TreeViewer parentViewer;
+
+	/**
+	 * This shows how a tree view works.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected TreeViewer treeViewer;
+
+	/**
+	 * This shows how a list view works.
+	 * A list viewer doesn't support icons.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected ListViewer listViewer;
+
+	/**
+	 * This shows how a table view works.
+	 * A table can be used as a list with icons.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected TableViewer tableViewer;
+
+	/**
+	 * This shows how a tree view with columns works.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected TreeViewer treeViewerWithColumns;
+
+	/**
+	 * This keeps track of the active viewer pane, in the book.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected ViewerPane currentViewerPane;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content
+	 * outline viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to
+	 * this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * The MarkerHelper is responsible for creating workspace resource markers presented
+	 * in Eclipse's Problems View.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected IPartListener partListener = new IPartListener() {
+		public void partActivated(IWorkbenchPart p) {
+			if (p instanceof ContentOutline) {
+				if (((ContentOutline) p).getCurrentPage() == contentOutlinePage) {
+					getActionBarContributor().setActiveEditor(ConfigEditor.this);
+
+					setCurrentViewer(contentOutlineViewer);
+				}
+			} else if (p instanceof PropertySheet) {
+				if (((PropertySheet) p).getCurrentPage() == propertySheetPage) {
+					getActionBarContributor().setActiveEditor(ConfigEditor.this);
+					handleActivate();
+				}
+			} else if (p == ConfigEditor.this) {
+				handleActivate();
+			}
+		}
+
+		public void partBroughtToTop(IWorkbenchPart p) {
+			// Ignore.
+		}
+
+		public void partClosed(IWorkbenchPart p) {
+			// Ignore.
+		}
+
+		public void partDeactivated(IWorkbenchPart p) {
+			// Ignore.
+		}
+
+		public void partOpened(IWorkbenchPart p) {
+			// Ignore.
+		}
+	};
+
+	/**
+	 * Resources that have been removed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = new EContentAdapter() {
+		@Override
+		public void notifyChanged(Notification notification) {
+			if (notification.getNotifier() instanceof Resource) {
+				switch (notification.getFeatureID(Resource.class)) {
+				case Resource.RESOURCE__IS_LOADED:
+				case Resource.RESOURCE__ERRORS:
+				case Resource.RESOURCE__WARNINGS: {
+					Resource resource = (Resource) notification.getNotifier();
+					Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+					if (diagnostic.getSeverity() != Diagnostic.OK) {
+						resourceToDiagnosticMap.put(resource, diagnostic);
+					} else {
+						resourceToDiagnosticMap.remove(resource);
+					}
+
+					if (updateProblemIndication) {
+						getSite().getShell().getDisplay().asyncExec(new Runnable() {
+							public void run() {
+								updateProblemIndication();
+							}
+						});
+					}
+					break;
+				}
+				}
+			} else {
+				super.notifyChanged(notification);
+			}
+		}
+
+		@Override
+		protected void setTarget(Resource target) {
+			basicSetTarget(target);
+		}
+
+		@Override
+		protected void unsetTarget(Resource target) {
+			basicUnsetTarget(target);
+		}
+	};
+
+	/**
+	 * This listens for workspace changes.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected IResourceChangeListener resourceChangeListener = new IResourceChangeListener() {
+		public void resourceChanged(IResourceChangeEvent event) {
+			IResourceDelta delta = event.getDelta();
+			try {
+				class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+					protected ResourceSet resourceSet = editingDomain.getResourceSet();
+					protected Collection<Resource> changedResources = new ArrayList<Resource>();
+					protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+					public boolean visit(IResourceDelta delta) {
+						if (delta.getResource().getType() == IResource.FILE) {
+							if (delta.getKind() == IResourceDelta.REMOVED || delta.getKind() == IResourceDelta.CHANGED
+								&& delta.getFlags() != IResourceDelta.MARKERS) {
+								Resource resource = resourceSet.getResource(
+									URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+								if (resource != null) {
+									if (delta.getKind() == IResourceDelta.REMOVED) {
+										removedResources.add(resource);
+									} else if (!savedResources.remove(resource)) {
+										changedResources.add(resource);
+									}
+								}
+							}
+						}
+
+						return true;
+					}
+
+					public Collection<Resource> getChangedResources() {
+						return changedResources;
+					}
+
+					public Collection<Resource> getRemovedResources() {
+						return removedResources;
+					}
+				}
+
+				final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+				delta.accept(visitor);
+
+				if (!visitor.getRemovedResources().isEmpty()) {
+					getSite().getShell().getDisplay().asyncExec(new Runnable() {
+						public void run() {
+							removedResources.addAll(visitor.getRemovedResources());
+							if (!isDirty()) {
+								getSite().getPage().closeEditor(ConfigEditor.this, false);
+							}
+						}
+					});
+				}
+
+				if (!visitor.getChangedResources().isEmpty()) {
+					getSite().getShell().getDisplay().asyncExec(new Runnable() {
+						public void run() {
+							changedResources.addAll(visitor.getChangedResources());
+							if (getSite().getPage().getActiveEditor() == ConfigEditor.this) {
+								handleActivate();
+							}
+						}
+					});
+				}
+			} catch (CoreException exception) {
+				ConfigEditorPlugin.INSTANCE.log(exception);
+			}
+		}
+	};
+
+	/**
+	 * Handles activation of the editor or it's associated views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+			editingDomain.getResourceToReadOnlyMap().clear();
+
+			// Refresh any actions that may become enabled or disabled.
+			//
+			setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(ConfigEditor.this, false);
+			} else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		} else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			if (isDirty()) {
+				changedResources.addAll(editingDomain.getResourceSet().getResources());
+			}
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(Collections.EMPTY_MAP);
+					} catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+
+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+				setSelection(StructuredSelection.EMPTY);
+			}
+
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic = new BasicDiagnostic(Diagnostic.OK,
+				"org.eclipse.emf.emfstore.fuzzy.emf.editor", 0, null, new Object[] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart) getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			} else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				problemEditorPart.setMarkerHelper(markerHelper);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				} catch (PartInitException exception) {
+					ConfigEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+
+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+				markerHelper.deleteMarkers(editingDomain.getResourceSet());
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					try {
+						markerHelper.createMarkers(diagnostic);
+					} catch (CoreException exception) {
+						ConfigEditorPlugin.INSTANCE.log(exception);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return MessageDialog.openQuestion(getSite().getShell(), getString("_UI_FileConflict_label"),
+			getString("_WARN_FileConflict"));
+	}
+
+	/**
+	 * This creates a model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public ConfigEditor() {
+		super();
+		initializeEditingDomain();
+	}
+
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void initializeEditingDomain() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ConfigItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with
+		// focus.
+		//
+		commandStack.addCommandStackListener(new CommandStackListener() {
+			public void commandStackChanged(final EventObject event) {
+				getContainer().getDisplay().asyncExec(new Runnable() {
+					public void run() {
+						firePropertyChange(IEditorPart.PROP_DIRTY);
+
+						// Try to select the affected objects.
+						//
+						Command mostRecentCommand = ((CommandStack) event.getSource()).getMostRecentCommand();
+						if (mostRecentCommand != null) {
+							setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+						}
+						if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+							propertySheetPage.refresh();
+						}
+					}
+				});
+			}
+		});
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			Runnable runnable = new Runnable() {
+				public void run() {
+					// Try to select the items in the current content viewer of the editor.
+					//
+					if (currentViewer != null) {
+						currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+					}
+				}
+			};
+			getSite().getShell().getDisplay().asyncExec(runnable);
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain} and for supporting
+	 * {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		@Override
+		public Object[] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		@Override
+		public Object[] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		@Override
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		@Override
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setCurrentViewerPane(ViewerPane viewerPane) {
+		if (currentViewerPane != viewerPane) {
+			if (currentViewerPane != null) {
+				currentViewerPane.showFocus(false);
+			}
+			currentViewerPane = viewerPane;
+		}
+		setCurrentViewer(currentViewerPane.getViewer());
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+	 * is the current one.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener = new ISelectionChangedListener() {
+					// This just notifies those things that are affected by the section.
+					//
+					public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+						setSelection(selectionChangedEvent.getSelection());
+					}
+				};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp");
+		contextMenu.add(new Separator("additions"));
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu = contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		} catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic = new BasicDiagnostic(Diagnostic.ERROR,
+				"org.eclipse.emf.emfstore.fuzzy.emf.editor", 0, getString("_UI_CreateModelError_message",
+					resource.getURI()), new Object[] { exception == null ? (Object) resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		} else if (exception != null) {
+			return new BasicDiagnostic(Diagnostic.ERROR, "org.eclipse.emf.emfstore.fuzzy.emf.editor", 0, getString(
+				"_UI_CreateModelError_message", resource.getURI()), new Object[] { exception });
+		} else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			{
+				ViewerPane viewerPane = new ViewerPane(getSite().getPage(), ConfigEditor.this) {
+					@Override
+					public Viewer createViewer(Composite composite) {
+						Tree tree = new Tree(composite, SWT.MULTI);
+						TreeViewer newTreeViewer = new TreeViewer(tree);
+						return newTreeViewer;
+					}
+
+					@Override
+					public void requestActivation() {
+						super.requestActivation();
+						setCurrentViewerPane(this);
+					}
+				};
+				viewerPane.createControl(getContainer());
+
+				selectionViewer = (TreeViewer) viewerPane.getViewer();
+				selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+
+				selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+				selectionViewer.setInput(editingDomain.getResourceSet());
+				selectionViewer.setSelection(
+					new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+				viewerPane.setTitle(editingDomain.getResourceSet());
+
+				new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+				createContextMenuFor(selectionViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_SelectionPage_label"));
+			}
+
+			// Create a page for the parent tree view.
+			//
+			{
+				ViewerPane viewerPane = new ViewerPane(getSite().getPage(), ConfigEditor.this) {
+					@Override
+					public Viewer createViewer(Composite composite) {
+						Tree tree = new Tree(composite, SWT.MULTI);
+						TreeViewer newTreeViewer = new TreeViewer(tree);
+						return newTreeViewer;
+					}
+
+					@Override
+					public void requestActivation() {
+						super.requestActivation();
+						setCurrentViewerPane(this);
+					}
+				};
+				viewerPane.createControl(getContainer());
+
+				parentViewer = (TreeViewer) viewerPane.getViewer();
+				parentViewer.setAutoExpandLevel(30);
+				parentViewer.setContentProvider(new ReverseAdapterFactoryContentProvider(adapterFactory));
+				parentViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				createContextMenuFor(parentViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_ParentPage_label"));
+			}
+
+			// This is the page for the list viewer
+			//
+			{
+				ViewerPane viewerPane = new ViewerPane(getSite().getPage(), ConfigEditor.this) {
+					@Override
+					public Viewer createViewer(Composite composite) {
+						return new ListViewer(composite);
+					}
+
+					@Override
+					public void requestActivation() {
+						super.requestActivation();
+						setCurrentViewerPane(this);
+					}
+				};
+				viewerPane.createControl(getContainer());
+				listViewer = (ListViewer) viewerPane.getViewer();
+				listViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				listViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				createContextMenuFor(listViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_ListPage_label"));
+			}
+
+			// This is the page for the tree viewer
+			//
+			{
+				ViewerPane viewerPane = new ViewerPane(getSite().getPage(), ConfigEditor.this) {
+					@Override
+					public Viewer createViewer(Composite composite) {
+						return new TreeViewer(composite);
+					}
+
+					@Override
+					public void requestActivation() {
+						super.requestActivation();
+						setCurrentViewerPane(this);
+					}
+				};
+				viewerPane.createControl(getContainer());
+				treeViewer = (TreeViewer) viewerPane.getViewer();
+				treeViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				treeViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				new AdapterFactoryTreeEditor(treeViewer.getTree(), adapterFactory);
+
+				createContextMenuFor(treeViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_TreePage_label"));
+			}
+
+			// This is the page for the table viewer.
+			//
+			{
+				ViewerPane viewerPane = new ViewerPane(getSite().getPage(), ConfigEditor.this) {
+					@Override
+					public Viewer createViewer(Composite composite) {
+						return new TableViewer(composite);
+					}
+
+					@Override
+					public void requestActivation() {
+						super.requestActivation();
+						setCurrentViewerPane(this);
+					}
+				};
+				viewerPane.createControl(getContainer());
+				tableViewer = (TableViewer) viewerPane.getViewer();
+
+				Table table = tableViewer.getTable();
+				TableLayout layout = new TableLayout();
+				table.setLayout(layout);
+				table.setHeaderVisible(true);
+				table.setLinesVisible(true);
+
+				TableColumn objectColumn = new TableColumn(table, SWT.NONE);
+				layout.addColumnData(new ColumnWeightData(3, 100, true));
+				objectColumn.setText(getString("_UI_ObjectColumn_label"));
+				objectColumn.setResizable(true);
+
+				TableColumn selfColumn = new TableColumn(table, SWT.NONE);
+				layout.addColumnData(new ColumnWeightData(2, 100, true));
+				selfColumn.setText(getString("_UI_SelfColumn_label"));
+				selfColumn.setResizable(true);
+
+				tableViewer.setColumnProperties(new String[] { "a", "b" });
+				tableViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				createContextMenuFor(tableViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_TablePage_label"));
+			}
+
+			// This is the page for the table tree viewer.
+			//
+			{
+				ViewerPane viewerPane = new ViewerPane(getSite().getPage(), ConfigEditor.this) {
+					@Override
+					public Viewer createViewer(Composite composite) {
+						return new TreeViewer(composite);
+					}
+
+					@Override
+					public void requestActivation() {
+						super.requestActivation();
+						setCurrentViewerPane(this);
+					}
+				};
+				viewerPane.createControl(getContainer());
+
+				treeViewerWithColumns = (TreeViewer) viewerPane.getViewer();
+
+				Tree tree = treeViewerWithColumns.getTree();
+				tree.setLayoutData(new FillLayout());
+				tree.setHeaderVisible(true);
+				tree.setLinesVisible(true);
+
+				TreeColumn objectColumn = new TreeColumn(tree, SWT.NONE);
+				objectColumn.setText(getString("_UI_ObjectColumn_label"));
+				objectColumn.setResizable(true);
+				objectColumn.setWidth(250);
+
+				TreeColumn selfColumn = new TreeColumn(tree, SWT.NONE);
+				selfColumn.setText(getString("_UI_SelfColumn_label"));
+				selfColumn.setResizable(true);
+				selfColumn.setWidth(200);
+
+				treeViewerWithColumns.setColumnProperties(new String[] { "a", "b" });
+				treeViewerWithColumns.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				treeViewerWithColumns.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				createContextMenuFor(treeViewerWithColumns);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_TreeWithColumnsPage_label"));
+			}
+
+			getSite().getShell().getDisplay().asyncExec(new Runnable() {
+				public void run() {
+					setActivePage(0);
+				}
+			});
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener(new ControlAdapter() {
+			boolean guard = false;
+
+			@Override
+			public void controlResized(ControlEvent event) {
+				if (!guard) {
+					guard = true;
+					hideTabs();
+					guard = false;
+				}
+			}
+		});
+
+		getSite().getShell().getDisplay().asyncExec(new Runnable() {
+			public void run() {
+				updateProblemIndication();
+			}
+		});
+	}
+
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, "");
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder) getContainer()).setTabHeight(1);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y + 6);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label"));
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder) getContainer()).setTabHeight(SWT.DEFAULT);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y - 6);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@SuppressWarnings("rawtypes")
+	@Override
+	public Object getAdapter(Class key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? getContentOutlinePage() : null;
+		} else if (key.equals(IPropertySheetPage.class)) {
+			return getPropertySheetPage();
+		} else if (key.equals(IGotoMarker.class)) {
+			return this;
+		} else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+						// Select the root object in the view.
+						//
+						contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet()
+							.getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager,
+					IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener(new ISelectionChangedListener() {
+				// This ensures that we handle selections correctly.
+				//
+				public void selectionChanged(SelectionChangedEvent event) {
+					handleContentOutlineSelection(event.getSelection());
+				}
+			});
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		if (propertySheetPage == null) {
+			propertySheetPage = new ExtendedPropertySheetPage(editingDomain) {
+				@Override
+				public void setSelectionToViewer(List<?> selection) {
+					ConfigEditor.this.setSelectionToViewer(selection);
+					ConfigEditor.this.setFocus();
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			};
+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		}
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (currentViewerPane != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection) selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				// If it's the selection viewer, then we want it to select the same selection as this selection.
+				//
+				if (currentViewerPane.getViewer() == selectionViewer) {
+					ArrayList<Object> selectionList = new ArrayList<Object>();
+					selectionList.add(selectedElement);
+					while (selectedElements.hasNext()) {
+						selectionList.add(selectedElements.next());
+					}
+
+					// Set the selection to the widget.
+					//
+					selectionViewer.setSelection(new StructuredSelection(selectionList));
+				} else {
+					// Set the input to the widget.
+					//
+					if (currentViewerPane.getViewer().getInput() != selectedElement) {
+						currentViewerPane.getViewer().setInput(selectedElement);
+						currentViewerPane.setTitle(selectedElement);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack) editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
+			// This is the method that gets invoked when the operation runs.
+			//
+			@Override
+			public void execute(IProgressMonitor monitor) {
+				// Save the resources to the file system.
+				//
+				boolean first = true;
+				for (Resource resource : editingDomain.getResourceSet().getResources()) {
+					if ((first || !resource.getContents().isEmpty() || isPersisted(resource))
+						&& !editingDomain.isReadOnly(resource)) {
+						try {
+							long timeStamp = resource.getTimeStamp();
+							resource.save(saveOptions);
+							if (resource.getTimeStamp() != timeStamp) {
+								savedResources.add(resource);
+							}
+						} catch (Exception exception) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+						first = false;
+					}
+				}
+			}
+		};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack) editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		} catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			ConfigEditorPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected boolean isPersisted(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		} catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+
+	/**
+	 * This always returns true because it is not currently supported.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		IPath path = saveAsDialog.getResult();
+		if (path != null) {
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor = getActionBars().getStatusLineManager() != null ? getActionBars()
+			.getStatusLineManager().getProgressMonitor() : new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void gotoMarker(IMarker marker) {
+		try {
+			if (marker.getType().equals(EValidator.MARKER)) {
+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+				if (uriAttribute != null) {
+					URI uri = URI.createURI(uriAttribute);
+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+					if (eObject != null) {
+						setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+					}
+				}
+			}
+		} catch (CoreException exception) {
+			ConfigEditorPlugin.INSTANCE.log(exception);
+		}
+	}
+
+	/**
+	 * This is called during startup.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener,
+			IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		if (currentViewerPane != null) {
+			currentViewerPane.setFocus();
+		} else {
+			getControl(getActivePage()).setFocus();
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ? contentOutlineStatusLineManager
+			: getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection) selection).toList();
+				switch (collection.size()) {
+				case 0: {
+					statusLineManager.setMessage(getString("_UI_NoObjectSelected"));
+					break;
+				}
+				case 1: {
+					String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+					statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text));
+					break;
+				}
+				default: {
+					statusLineManager.setMessage(getString("_UI_MultiObjectSelected",
+						Integer.toString(collection.size())));
+					break;
+				}
+				}
+			} else {
+				statusLineManager.setMessage("");
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return ConfigEditorPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return ConfigEditorPlugin.INSTANCE.getString(key, new Object[] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions
+	 * from the Edit menu.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener) getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor) getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		if (propertySheetPage != null) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return true;
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigEditorPlugin.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigEditorPlugin.java
new file mode 100644
index 0000000..9651194
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigEditorPlugin.java
@@ -0,0 +1,105 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.presentation;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the Config editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public final class ConfigEditorPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public static final ConfigEditorPlugin INSTANCE = new ConfigEditorPlugin();
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	private static Implementation plugin;
+
+	/**
+	 * Create the instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public ConfigEditorPlugin() {
+		super(new ResourceLocator[] {});
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getPluginResourceLocator() {
+		return plugin;
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	public static Implementation getPlugin() {
+		return plugin;
+	}
+
+	/**
+	 * The actual implementation of the Eclipse <b>Plugin</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public static class Implementation extends EclipseUIPlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigModelWizard.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigModelWizard.java
new file mode 100644
index 0000000..1793d4e
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigModelWizard.java
@@ -0,0 +1,662 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.presentation;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.StringTokenizer;
+
+import org.eclipse.emf.common.CommonPlugin;
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.ecore.xmi.XMLResource;
+
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.ModifyEvent;
+
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.ISetSelectionTarget;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.provider.ConfigEditPlugin;
+
+import org.eclipse.core.runtime.Path;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is a simple wizard for creating a new model file.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class ConfigModelWizard extends Wizard implements INewWizard {
+	/**
+	 * The supported extensions for created files.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public static final List<String> FILE_EXTENSIONS = Collections.unmodifiableList(Arrays
+		.asList(ConfigEditorPlugin.INSTANCE.getString("_UI_ConfigEditorFilenameExtensions").split("\\s*,\\s*")));
+
+	/**
+	 * A formatted list of supported file extensions, suitable for display.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public static final String FORMATTED_FILE_EXTENSIONS = ConfigEditorPlugin.INSTANCE.getString(
+		"_UI_ConfigEditorFilenameExtensions").replaceAll("\\s*,\\s*", ", ");
+
+	/**
+	 * This caches an instance of the model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected ConfigPackage configPackage = ConfigPackage.eINSTANCE;
+
+	/**
+	 * This caches an instance of the model factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected ConfigFactory configFactory = configPackage.getConfigFactory();
+
+	/**
+	 * This is the file creation page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected ConfigModelWizardNewFileCreationPage newFileCreationPage;
+
+	/**
+	 * This is the initial object creation page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected ConfigModelWizardInitialObjectCreationPage initialObjectCreationPage;
+
+	/**
+	 * Remember the selection during initialization for populating the default container.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected IStructuredSelection selection;
+
+	/**
+	 * Remember the workbench during initialization.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected IWorkbench workbench;
+
+	/**
+	 * Caches the names of the types that can be created as the root object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected List<String> initialObjectNames;
+
+	/**
+	 * This just records the information.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+		this.workbench = workbench;
+		this.selection = selection;
+		setWindowTitle(ConfigEditorPlugin.INSTANCE.getString("_UI_Wizard_label"));
+		setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(ConfigEditorPlugin.INSTANCE
+			.getImage("full/wizban/NewConfig")));
+	}
+
+	/**
+	 * Returns the names of the types that can be created as the root object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected Collection<String> getInitialObjectNames() {
+		if (initialObjectNames == null) {
+			initialObjectNames = new ArrayList<String>();
+			for (EClassifier eClassifier : configPackage.getEClassifiers()) {
+				if (eClassifier instanceof EClass) {
+					EClass eClass = (EClass) eClassifier;
+					if (!eClass.isAbstract()) {
+						initialObjectNames.add(eClass.getName());
+					}
+				}
+			}
+			Collections.sort(initialObjectNames, CommonPlugin.INSTANCE.getComparator());
+		}
+		return initialObjectNames;
+	}
+
+	/**
+	 * Create a new model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected EObject createInitialModel() {
+		EClass eClass = (EClass) configPackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());
+		EObject rootObject = configFactory.create(eClass);
+		return rootObject;
+	}
+
+	/**
+	 * Do the work after everything is specified.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean performFinish() {
+		try {
+			// Remember the file.
+			//
+			final IFile modelFile = getModelFile();
+
+			// Do the work within an operation.
+			//
+			WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
+				@Override
+				protected void execute(IProgressMonitor progressMonitor) {
+					try {
+						// Create a resource set
+						//
+						ResourceSet resourceSet = new ResourceSetImpl();
+
+						// Get the URI of the model file.
+						//
+						URI fileURI = URI.createPlatformResourceURI(modelFile.getFullPath().toString(), true);
+
+						// Create a resource for this file.
+						//
+						Resource resource = resourceSet.createResource(fileURI);
+
+						// Add the initial model object to the contents.
+						//
+						EObject rootObject = createInitialModel();
+						if (rootObject != null) {
+							resource.getContents().add(rootObject);
+						}
+
+						// Save the contents of the resource to the file system.
+						//
+						Map<Object, Object> options = new HashMap<Object, Object>();
+						options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding());
+						resource.save(options);
+					} catch (Exception exception) {
+						ConfigEditorPlugin.INSTANCE.log(exception);
+					} finally {
+						progressMonitor.done();
+					}
+				}
+			};
+
+			getContainer().run(false, false, operation);
+
+			// Select the new file resource in the current view.
+			//
+			IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+			IWorkbenchPage page = workbenchWindow.getActivePage();
+			final IWorkbenchPart activePart = page.getActivePart();
+			if (activePart instanceof ISetSelectionTarget) {
+				final ISelection targetSelection = new StructuredSelection(modelFile);
+				getShell().getDisplay().asyncExec(new Runnable() {
+					public void run() {
+						((ISetSelectionTarget) activePart).selectReveal(targetSelection);
+					}
+				});
+			}
+
+			// Open an editor on the new file.
+			//
+			try {
+				page.openEditor(new FileEditorInput(modelFile),
+					workbench.getEditorRegistry().getDefaultEditor(modelFile.getFullPath().toString()).getId());
+			} catch (PartInitException exception) {
+				MessageDialog.openError(workbenchWindow.getShell(),
+					ConfigEditorPlugin.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage());
+				return false;
+			}
+
+			return true;
+		} catch (Exception exception) {
+			ConfigEditorPlugin.INSTANCE.log(exception);
+			return false;
+		}
+	}
+
+	/**
+	 * This is the one page of the wizard.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public class ConfigModelWizardNewFileCreationPage extends WizardNewFileCreationPage {
+		/**
+		 * Pass in the selection.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		public ConfigModelWizardNewFileCreationPage(String pageId, IStructuredSelection selection) {
+			super(pageId, selection);
+		}
+
+		/**
+		 * The framework calls this to see if the file is correct.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		@Override
+		protected boolean validatePage() {
+			if (super.validatePage()) {
+				String extension = new Path(getFileName()).getFileExtension();
+				if (extension == null || !FILE_EXTENSIONS.contains(extension)) {
+					String key = FILE_EXTENSIONS.size() > 1 ? "_WARN_FilenameExtensions" : "_WARN_FilenameExtension";
+					setErrorMessage(ConfigEditorPlugin.INSTANCE.getString(key,
+						new Object[] { FORMATTED_FILE_EXTENSIONS }));
+					return false;
+				}
+				return true;
+			}
+			return false;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		public IFile getModelFile() {
+			return ResourcesPlugin.getWorkspace().getRoot().getFile(getContainerFullPath().append(getFileName()));
+		}
+	}
+
+	/**
+	 * This is the page where the type of object to create is selected.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public class ConfigModelWizardInitialObjectCreationPage extends WizardPage {
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		protected Combo initialObjectField;
+
+		/**
+		 * @generated
+		 *            <!-- begin-user-doc -->
+		 *            <!-- end-user-doc -->
+		 */
+		protected List<String> encodings;
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		protected Combo encodingField;
+
+		/**
+		 * Pass in the selection.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		public ConfigModelWizardInitialObjectCreationPage(String pageId) {
+			super(pageId);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		public void createControl(Composite parent) {
+			Composite composite = new Composite(parent, SWT.NONE);
+			{
+				GridLayout layout = new GridLayout();
+				layout.numColumns = 1;
+				layout.verticalSpacing = 12;
+				composite.setLayout(layout);
+
+				GridData data = new GridData();
+				data.verticalAlignment = GridData.FILL;
+				data.grabExcessVerticalSpace = true;
+				data.horizontalAlignment = GridData.FILL;
+				composite.setLayoutData(data);
+			}
+
+			Label containerLabel = new Label(composite, SWT.LEFT);
+			{
+				containerLabel.setText(ConfigEditorPlugin.INSTANCE.getString("_UI_ModelObject"));
+
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				containerLabel.setLayoutData(data);
+			}
+
+			initialObjectField = new Combo(composite, SWT.BORDER);
+			{
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				data.grabExcessHorizontalSpace = true;
+				initialObjectField.setLayoutData(data);
+			}
+
+			for (String objectName : getInitialObjectNames()) {
+				initialObjectField.add(getLabel(objectName));
+			}
+
+			if (initialObjectField.getItemCount() == 1) {
+				initialObjectField.select(0);
+			}
+			initialObjectField.addModifyListener(validator);
+
+			Label encodingLabel = new Label(composite, SWT.LEFT);
+			{
+				encodingLabel.setText(ConfigEditorPlugin.INSTANCE.getString("_UI_XMLEncoding"));
+
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				encodingLabel.setLayoutData(data);
+			}
+			encodingField = new Combo(composite, SWT.BORDER);
+			{
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				data.grabExcessHorizontalSpace = true;
+				encodingField.setLayoutData(data);
+			}
+
+			for (String encoding : getEncodings()) {
+				encodingField.add(encoding);
+			}
+
+			encodingField.select(0);
+			encodingField.addModifyListener(validator);
+
+			setPageComplete(validatePage());
+			setControl(composite);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		protected ModifyListener validator = new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				setPageComplete(validatePage());
+			}
+		};
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		protected boolean validatePage() {
+			return getInitialObjectName() != null && getEncodings().contains(encodingField.getText());
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		@Override
+		public void setVisible(boolean visible) {
+			super.setVisible(visible);
+			if (visible) {
+				if (initialObjectField.getItemCount() == 1) {
+					initialObjectField.clearSelection();
+					encodingField.setFocus();
+				} else {
+					encodingField.clearSelection();
+					initialObjectField.setFocus();
+				}
+			}
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		public String getInitialObjectName() {
+			String label = initialObjectField.getText();
+
+			for (String name : getInitialObjectNames()) {
+				if (getLabel(name).equals(label)) {
+					return name;
+				}
+			}
+			return null;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		public String getEncoding() {
+			return encodingField.getText();
+		}
+
+		/**
+		 * Returns the label for the specified type name.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		protected String getLabel(String typeName) {
+			try {
+				return ConfigEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type");
+			} catch (MissingResourceException mre) {
+				ConfigEditorPlugin.INSTANCE.log(mre);
+			}
+			return typeName;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		protected Collection<String> getEncodings() {
+			if (encodings == null) {
+				encodings = new ArrayList<String>();
+				for (StringTokenizer stringTokenizer = new StringTokenizer(
+					ConfigEditorPlugin.INSTANCE.getString("_UI_XMLEncodingChoices")); stringTokenizer.hasMoreTokens();) {
+					encodings.add(stringTokenizer.nextToken());
+				}
+			}
+			return encodings;
+		}
+	}
+
+	/**
+	 * The framework calls this to create the contents of the wizard.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void addPages() {
+		// Create a page, set the title, and the initial model file name.
+		//
+		newFileCreationPage = new ConfigModelWizardNewFileCreationPage("Whatever", selection);
+		newFileCreationPage.setTitle(ConfigEditorPlugin.INSTANCE.getString("_UI_ConfigModelWizard_label"));
+		newFileCreationPage.setDescription(ConfigEditorPlugin.INSTANCE.getString("_UI_ConfigModelWizard_description"));
+		newFileCreationPage.setFileName(ConfigEditorPlugin.INSTANCE.getString("_UI_ConfigEditorFilenameDefaultBase")
+			+ "." + FILE_EXTENSIONS.get(0));
+		addPage(newFileCreationPage);
+
+		// Try and get the resource selection to determine a current directory for the file dialog.
+		//
+		if (selection != null && !selection.isEmpty()) {
+			// Get the resource...
+			//
+			Object selectedElement = selection.iterator().next();
+			if (selectedElement instanceof IResource) {
+				// Get the resource parent, if its a file.
+				//
+				IResource selectedResource = (IResource) selectedElement;
+				if (selectedResource.getType() == IResource.FILE) {
+					selectedResource = selectedResource.getParent();
+				}
+
+				// This gives us a directory...
+				//
+				if (selectedResource instanceof IFolder || selectedResource instanceof IProject) {
+					// Set this for the container.
+					//
+					newFileCreationPage.setContainerFullPath(selectedResource.getFullPath());
+
+					// Make up a unique new name here.
+					//
+					String defaultModelBaseFilename = ConfigEditorPlugin.INSTANCE
+						.getString("_UI_ConfigEditorFilenameDefaultBase");
+					String defaultModelFilenameExtension = FILE_EXTENSIONS.get(0);
+					String modelFilename = defaultModelBaseFilename + "." + defaultModelFilenameExtension;
+					for (int i = 1; ((IContainer) selectedResource).findMember(modelFilename) != null; ++i) {
+						modelFilename = defaultModelBaseFilename + i + "." + defaultModelFilenameExtension;
+					}
+					newFileCreationPage.setFileName(modelFilename);
+				}
+			}
+		}
+		initialObjectCreationPage = new ConfigModelWizardInitialObjectCreationPage("Whatever2");
+		initialObjectCreationPage.setTitle(ConfigEditorPlugin.INSTANCE.getString("_UI_ConfigModelWizard_label"));
+		initialObjectCreationPage.setDescription(ConfigEditorPlugin.INSTANCE
+			.getString("_UI_Wizard_initial_object_description"));
+		addPage(initialObjectCreationPage);
+	}
+
+	/**
+	 * Get the file from the page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public IFile getModelFile() {
+		return newFileCreationPage.getModelFile();
+	}
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/.classpath b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/.project b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/.project
new file mode 100644
index 0000000..5e3bbd6
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.emfstore.fuzzy.emf.example</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+	</natures>
+</projectDescription>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..af0f20f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..82702a4
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Example Plugin for the Fuzzy EMF Testing (Incubation)
+Bundle-SymbolicName: org.eclipse.emf.emfstore.fuzzy.emf.example
+Bundle-Version: 0.9.3.qualifier
+Bundle-Vendor: Eclipse Modeling Project
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.emf.emfstore.fuzzy.emf;visibility:=reexport
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/build.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/build.properties
new file mode 100644
index 0000000..66e05e6
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               fuzzy/
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/fuzzy/fuzzy.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/fuzzy/fuzzy.properties
new file mode 100644
index 0000000..6d9398c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/fuzzy/fuzzy.properties
@@ -0,0 +1,4 @@
+fuzzy.emfdataprovider.configsFile=fuzzy/fuzzyConfig.fuzzy
+fuzzy.hudson.url=http://localhost
+fuzzy.hudson.port=8080
+fuzzy.hudson.job=Explorer
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/fuzzy/fuzzyConfig.fuzzy b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/fuzzy/fuzzyConfig.fuzzy
new file mode 100644
index 0000000..665d9e3
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/fuzzy/fuzzyConfig.fuzzy
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="ASCII"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:org.eclipse.emf.emfstore.fuzzy.emf.config="http://org/eclipse/emf/emfstore/fuzzy/emf/config">
+  <org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig seed="1" count="500" testClass="org.eclipse.emf.emfstore.fuzzy.emf.example.FuzzyTest" id="_r78GhIvSEeGC3oFJZ-5HoM">
+    <mutatorConfig>
+      <ePackages href="http://org/eclipse/example/bowling#/"/>
+    </mutatorConfig>
+  </org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig>
+</xmi:XMI>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/pom.xml b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/pom.xml
new file mode 100644
index 0000000..d20c59d
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.eclipse.emf.emfstore</groupId>
+    <artifactId>emfstore-parent</artifactId>
+    <version>0.9.3-SNAPSHOT</version>
+    <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+  </parent>
+  <groupId>org.eclipse.emf.emfstore</groupId>
+  <artifactId>org.eclipse.emf.emfstore.fuzzy.emf.example</artifactId>
+  <version>0.9.3-SNAPSHOT</version>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/src/org/eclipse/emf/emfstore/fuzzy/emf/example/FuzzyTest.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/src/org/eclipse/emf/emfstore/fuzzy/emf/example/FuzzyTest.java
new file mode 100644
index 0000000..02c58f0
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/src/org/eclipse/emf/emfstore/fuzzy/emf/example/FuzzyTest.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.example;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Data;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.DataProvider;
+import org.eclipse.emf.emfstore.fuzzy.FuzzyRunner;
+import org.eclipse.emf.emfstore.fuzzy.emf.EMFDataProvider;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Example test for the {@link FuzzyRunner}.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+@RunWith(FuzzyRunner.class)
+@DataProvider(EMFDataProvider.class)
+public class FuzzyTest {
+
+	@Data
+	private EObject root;
+
+	/**
+	 * Test to check if the {@link FuzzyRunner} is working.
+	 */
+	@Test
+	public void test() {
+		Assert.assertNotNull(root);
+	}
+}
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/.classpath b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/.project b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/.project
new file mode 100644
index 0000000..4380e7e
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.emfstore.fuzzy.emf.test</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+	</natures>
+</projectDescription>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..af0f20f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/AllFuzzyTests.launch b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/AllFuzzyTests.launch
new file mode 100644
index 0000000..18d8def
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/AllFuzzyTests.launch
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.JunitLaunchConfig">
+<booleanAttribute key="append.args" value="true"/>
+<stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/>
+<booleanAttribute key="askclear" value="false"/>
+<booleanAttribute key="automaticAdd" value="true"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="true"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
+<booleanAttribute key="default" value="false"/>
+<stringAttribute key="deselected_workspace_plugins" value="org.apache.commons.io,org.eclipse.emf.emfstore.branding,org.eclipse.emf.emfstore.client.test.edit,org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.ecore,org.eclipse.emf.emfstore.example.helloworld,org.eclipse.emf.emfstore.examplemodel,org.eclipse.emf.emfstore.examplemodel.edit,org.eclipse.emf.emfstore.fuzzy.emf.edit,org.eclipse.emf.emfstore.fuzzy.emf.editor,org.eclipse.emf.emfstore.fuzzy.emf.example,org.eclipse.emf.emfstore.perspective"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/AllFuzzyTests.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.emf.emfstore.fuzzy.emf.test.AllFuzzyTests"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.emf.emfstore.fuzzy.emf.test"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.platform.ide"/>
+<booleanAttribute key="run_in_ui_thread" value="true"/>
+<stringAttribute key="selected_target_plugins" value="com.ibm.icu@default:default,org.apache.commons.codec@default:default,org.apache.commons.logging@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.emf.common.ui@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.edit@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit.ui@default:default,org.eclipse.emf.edit@default:default,org.eclipse.emf.transaction@default:default,org.eclipse.emf.validation@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.help@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface.text@default:default,org.eclipse.jface@default:default,org.eclipse.osgi@-1:true,org.eclipse.swt.win32.win32.x86_64@default:false,org.eclipse.swt@default:default,org.eclipse.text@default:default,org.eclipse.ui.forms@default:default,org.eclipse.ui.ide@default:default,org.eclipse.ui.views@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.hamcrest.core@default:default,org.junit4@default:default,org.junit@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.emf.emfstore.client.model.edit@default:default,org.eclipse.emf.emfstore.client.test@default:default,org.eclipse.emf.emfstore.client.transaction@default:default,org.eclipse.emf.emfstore.client@default:default,org.eclipse.emf.emfstore.common.model.edit@default:default,org.eclipse.emf.emfstore.common.model@default:default,org.eclipse.emf.emfstore.common@default:default,org.eclipse.emf.emfstore.fuzzy.emf.test@default:default,org.eclipse.emf.emfstore.fuzzy.emf@default:default,org.eclipse.emf.emfstore.fuzzy@default:default,org.eclipse.emf.emfstore.migration@default:default,org.eclipse.emf.emfstore.modelmutator@default:default,org.eclipse.emf.emfstore.server.model.edit@default:default,org.eclipse.emf.emfstore.server.model@default:default,org.eclipse.emf.emfstore.server@default:default"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="false"/>
+<booleanAttribute key="useProduct" value="false"/>
+</launchConfiguration>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/AllFuzzyTestsFiltered.launch b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/AllFuzzyTestsFiltered.launch
new file mode 100644
index 0000000..8ce58c3
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/AllFuzzyTestsFiltered.launch
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.JunitLaunchConfig">
+<booleanAttribute key="append.args" value="true"/>
+<stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/>
+<booleanAttribute key="askclear" value="false"/>
+<booleanAttribute key="automaticAdd" value="true"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="true"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
+<booleanAttribute key="default" value="false"/>
+<stringAttribute key="deselected_workspace_plugins" value="org.apache.commons.io,org.eclipse.emf.emfstore.branding,org.eclipse.emf.emfstore.client.test.edit,org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.ecore,org.eclipse.emf.emfstore.example.helloworld,org.eclipse.emf.emfstore.examplemodel,org.eclipse.emf.emfstore.examplemodel.edit,org.eclipse.emf.emfstore.fuzzy.emf.edit,org.eclipse.emf.emfstore.fuzzy.emf.editor,org.eclipse.emf.emfstore.fuzzy.emf.example,org.eclipse.emf.emfstore.perspective"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/AllFuzzyTests.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.emf.emfstore.fuzzy.emf.test.AllFuzzyTests"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.emf.emfstore.fuzzy.emf.test"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m -DfilterTests=true"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.platform.ide"/>
+<booleanAttribute key="run_in_ui_thread" value="true"/>
+<stringAttribute key="selected_target_plugins" value="com.ibm.icu@default:default,org.apache.commons.codec@default:default,org.apache.commons.logging@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.emf.common.ui@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.edit@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit.ui@default:default,org.eclipse.emf.edit@default:default,org.eclipse.emf.transaction@default:default,org.eclipse.emf.validation@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.help@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface.text@default:default,org.eclipse.jface@default:default,org.eclipse.osgi@-1:true,org.eclipse.swt.win32.win32.x86_64@default:false,org.eclipse.swt@default:default,org.eclipse.text@default:default,org.eclipse.ui.forms@default:default,org.eclipse.ui.ide@default:default,org.eclipse.ui.views@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.hamcrest.core@default:default,org.junit4@default:default,org.junit@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.emf.emfstore.client.model.edit@default:default,org.eclipse.emf.emfstore.client.test@default:default,org.eclipse.emf.emfstore.client.transaction@default:default,org.eclipse.emf.emfstore.client@default:default,org.eclipse.emf.emfstore.common.model.edit@default:default,org.eclipse.emf.emfstore.common.model@default:default,org.eclipse.emf.emfstore.common@default:default,org.eclipse.emf.emfstore.fuzzy.emf.test@default:default,org.eclipse.emf.emfstore.fuzzy.emf@default:default,org.eclipse.emf.emfstore.fuzzy@default:default,org.eclipse.emf.emfstore.migration@default:default,org.eclipse.emf.emfstore.modelmutator@default:default,org.eclipse.emf.emfstore.server.model.edit@default:default,org.eclipse.emf.emfstore.server.model@default:default,org.eclipse.emf.emfstore.server@default:default"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="false"/>
+<booleanAttribute key="useProduct" value="false"/>
+</launchConfiguration>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..402bbcd
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Tests for EMFDataprovider (Incubation)
+Bundle-SymbolicName: org.eclipse.emf.emfstore.fuzzy.emf.test;singleton:=true
+Bundle-Version: 0.9.3.qualifier
+Require-Bundle: org.eclipse.emf.emfstore.fuzzy.emf;visibility:=reexport,
+ org.eclipse.emf.emfstore.client.test;visibility:=reexport
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ClassPath: .
+Bundle-Vendor: Eclipse Modeling Project
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/build.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/build.properties
new file mode 100644
index 0000000..86473f1
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               fuzzy/
+jars.compile.order = .
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/fuzzy/fuzzy.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/fuzzy/fuzzy.properties
new file mode 100644
index 0000000..c8e74a8
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/fuzzy/fuzzy.properties
@@ -0,0 +1,6 @@
+#fuzzy.emfdataprovider.configsFile=fuzzy/fuzzyConfig.xml
+fuzzy.hudson.url=https://hudson.eclipse.org/hudson
+#fuzzy.hudson.port=8080
+fuzzy.hudson.job=emf-emfstore-fuzzytests-explorer
+fuzzy.hudson.diffjob=emf-emfstore-fuzzytests-differ
+fuzzy.hudson.artifact.folder=/artifact/git/org.eclipse.emf.emfstore.other/
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/fuzzy/fuzzyConfig.fuzzy b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/fuzzy/fuzzyConfig.fuzzy
new file mode 100644
index 0000000..0d9218f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/fuzzy/fuzzyConfig.fuzzy
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ASCII"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:org.eclipse.emf.emfstore.fuzzy.emf.config="http://org/eclipse/emf/emfstore/fuzzy/emf/config">
+  <org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig seed="1" count="10" testClass="org.eclipse.emf.emfstore.fuzzy.emf.test.OperationApplyTest" id="_sLQasYvPEeG1B5HDFm-I-w">
+    <mutatorConfig minObjectsCount="10">
+      <rootEClass href="http://eclipse.org/emf/emfstore/common/model#//Project"/>
+      <eStructuralFeaturesToIgnore xsi:type="ecore:EReference" href="http://eclipse.org/emf/emfstore/common/model#//Project/cutElements"/>
+      <ePackages href="http://org/eclipse/example/bowling#/"/>
+    </mutatorConfig>
+  </org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig>
+  <org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig seed="1" count="10" testClass="org.eclipse.emf.emfstore.fuzzy.emf.test.OperationReverseTest" id="_sLQasYvPEeG1B5HDFm-I-w">
+    <mutatorConfig minObjectsCount="100">
+      <rootEClass href="http://eclipse.org/emf/emfstore/common/model#//Project"/>
+      <eStructuralFeaturesToIgnore xsi:type="ecore:EReference" href="http://eclipse.org/emf/emfstore/common/model#//Project/cutElements"/>
+      <ePackages href="http://org/eclipse/example/bowling#/"/>
+    </mutatorConfig>
+  </org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig>
+  <org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig seed="1" count="10" testClass="org.eclipse.emf.emfstore.fuzzy.emf.test.SerializationTest" id="_c24GhIvSEeGC3oFJZ-5j24">
+    <mutatorConfig minObjectsCount="100">
+      <rootEClass href="http://eclipse.org/emf/emfstore/common/model#//Project"/>
+      <eStructuralFeaturesToIgnore xsi:type="ecore:EReference" href="http://eclipse.org/emf/emfstore/common/model#//Project/cutElements"/>
+      <ePackages href="http://org/eclipse/example/bowling#/"/>
+    </mutatorConfig>
+  </org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig>
+  <org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig seed="1" count="10" testClass="org.eclipse.emf.emfstore.fuzzy.emf.test.ServerTest" id="_SCHGhIvSEeGC3oFJZ-5KUS">
+    <mutatorConfig minObjectsCount="100">
+      <rootEClass href="http://eclipse.org/emf/emfstore/common/model#//Project"/>
+      <eStructuralFeaturesToIgnore xsi:type="ecore:EReference" href="http://eclipse.org/emf/emfstore/common/model#//Project/cutElements"/>
+      <ePackages href="http://org/eclipse/example/bowling#/"/>
+    </mutatorConfig>
+  </org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig>
+  <org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig seed="1" count="5000" testClass="org.eclipse.emf.emfstore.fuzzy.emf.test.MutatorTest" id="_C11qUIvSEeGC3oFJZ-5VgQ">
+    <mutatorConfig>
+      <ePackages href="http://org/eclipse/example/bowling#/"/>
+    </mutatorConfig>
+  </org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig>
+  <org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig seed="2" count="1" testClass="org.eclipse.emf.emfstore.fuzzy.emf.test.BigMutationTest" id="_X34zhIvSEeGC3oFJZ-5VzL">
+    <mutatorConfig minObjectsCount="100000">
+      <ePackages href="http://org/eclipse/example/bowling#/"/>
+    </mutatorConfig>
+  </org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig>   
+</xmi:XMI>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/plugin.xml b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/plugin.xml
new file mode 100644
index 0000000..ea0197f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/plugin.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         point="org.eclipse.emf.emfstore.client.recording.options">
+      <RecordingOptions
+            cutOffIncomingCrossReferences="true">
+      </RecordingOptions>
+   </extension>
+   <extension
+         point="org.eclipse.emf.emfstore.client.inverseCrossReferenceCache">
+      <useInverseCrossReferenceCache
+            activated="true">
+      </useInverseCrossReferenceCache>
+   </extension>
+   <extension
+         point="org.eclipse.emf.emfstore.common.model.modelelementidgenerator">
+      <idgenerator
+            class="org.eclipse.emf.emfstore.fuzzy.emf.test.FuzzyModelElementIdGenerator">
+      </idgenerator>
+   </extension>
+
+</plugin>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/pom.xml b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/pom.xml
new file mode 100644
index 0000000..9c74ad4
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/pom.xml
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.eclipse.emf.emfstore</groupId>
+    <artifactId>emfstore-parent</artifactId>
+    <version>0.9.3-SNAPSHOT</version>
+    <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+  </parent>
+  <groupId>org.eclipse.emf.emfstore</groupId>
+  <artifactId>org.eclipse.emf.emfstore.fuzzy.emf.test</artifactId>
+  <version>0.9.3-SNAPSHOT</version>
+  <packaging>eclipse-test-plugin</packaging>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.eclipse.tycho</groupId>
+        <artifactId>tycho-surefire-plugin</artifactId>
+        <version>${tycho-version}</version>
+
+        <configuration>
+                   
+          <testSuite>org.eclipse.emf.emfstore.fuzzy.emf.test</testSuite>
+          <testClass>org.eclipse.emf.emfstore.fuzzy.emf.test.AllFuzzyTests</testClass>
+          <useUIHarness>true</useUIHarness>
+          <useUIThread>false</useUIThread>
+          
+          <argLine>-Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m -DrunFuzzyTests=${runFuzzyTests} -DfilterTests=${filterTests}</argLine>
+          <failIfNoTests>false</failIfNoTests>
+          <testFailureIgnore>true</testFailureIgnore>
+          
+          <dependencies> 
+          	<dependency>
+              <type>eclipse-plugin</type>
+              <artifactId>org.eclipse.emf.emfstore.fuzzy.emf</artifactId>
+              <version>0.0.0</version>
+            </dependency>   
+            <dependency>
+              <type>eclipse-plugin</type>
+              <artifactId>org.eclipse.emf.emfstore.fuzzy</artifactId>
+              <version>0.0.0</version>
+            </dependency>        
+            <dependency>
+              <type>eclipse-plugin</type>
+              <artifactId>org.eclipse.emf.emfstore.client.model.edit</artifactId>
+              <version>0.0.0</version>
+            </dependency>
+            <dependency>
+              <type>eclipse-plugin</type>
+              <artifactId>org.eclipse.emf.emfstore.client.test</artifactId>
+              <version>0.0.0</version>
+            </dependency>
+            <dependency>
+              <type>eclipse-plugin</type>
+              <artifactId>org.eclipse.emf.emfstore.client</artifactId>
+              <version>0.0.0</version>
+            </dependency>            
+            <dependency>
+              <type>eclipse-plugin</type>
+              <artifactId>org.eclipse.emf.emfstore.modelmutator</artifactId>
+              <version>0.0.0</version>
+            </dependency>            
+            <dependency>
+              <type>eclipse-plugin</type>
+              <artifactId>org.eclipse.emf.emfstore.examplemodel.edit</artifactId>
+              <version>0.0.0</version>
+            </dependency>           
+          </dependencies>
+
+          <bundleStartLevel>  
+          	<bundle>
+              <id>org.eclipse.emf.emfstore.fuzzy.emf</id>
+              <level>4</level>
+              <autoStart>false</autoStart>
+            </bundle>
+            <bundle>
+              <id>org.eclipse.emf.emfstore.fuzzy</id>
+              <level>4</level>
+              <autoStart>false</autoStart>
+            </bundle>          
+            <bundle>
+              <id>org.eclipse.emf.emfstore.client.model.edit</id>
+              <level>4</level>
+              <autoStart>false</autoStart>
+            </bundle>
+            <bundle>
+              <id>org.eclipse.emf.emfstore.client.test</id>
+              <level>4</level>
+              <autoStart>false</autoStart>
+            </bundle>
+            <bundle>
+              <id>org.eclipse.emf.emfstore.client</id>
+              <level>4</level>
+              <autoStart>false</autoStart>
+            </bundle>        
+            <bundle>
+              <id>org.eclipse.emf.emfstore.modelmutator</id>
+              <level>4</level>
+              <autoStart>false</autoStart>
+            </bundle>           
+            <bundle>
+              <id>org.eclipse.emf.emfstore.examplemodel.edit</id>
+              <level>4</level>
+              <autoStart>false</autoStart>
+            </bundle>
+            <bundle>
+              <id>org.eclipse.emf.emfstore.examplemodel</id>
+              <level>4</level>
+              <autoStart>false</autoStart>
+            </bundle>            
+          </bundleStartLevel> 
+        </configuration>
+       
+      </plugin>
+	</plugins>
+   </build>
+</project>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/AllFuzzyTests.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/AllFuzzyTests.java
new file mode 100644
index 0000000..33dc5cf
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/AllFuzzyTests.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.test;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.FilteredSuite;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+/**
+ * Suite for all fuzzy tests.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+@RunWith(FilteredSuite.class)
+@Suite.SuiteClasses({ OperationApplyTest.class })
+public class AllFuzzyTests {
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/BigMutationTest.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/BigMutationTest.java
new file mode 100644
index 0000000..aab969e
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/BigMutationTest.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.test;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Data;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.DataProvider;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Util;
+import org.eclipse.emf.emfstore.fuzzy.FuzzyRunner;
+import org.eclipse.emf.emfstore.fuzzy.emf.EMFDataProvider;
+import org.eclipse.emf.emfstore.fuzzy.emf.MutateUtil;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutator;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorConfiguration;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorUtil;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Test to run bigger {@link org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorConfiguration}s.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+@RunWith(FuzzyRunner.class)
+@DataProvider(EMFDataProvider.class)
+public class BigMutationTest {
+
+	@Data
+	private EObject root;
+
+	@Util
+	private MutateUtil util;
+
+	/***/
+	@Test
+	public void createModel() {
+		System.out.println(ModelMutatorUtil.getAllObjectsCount(root));
+
+		System.out.println("CHANGE");
+
+		ModelMutatorConfiguration config = new ModelMutatorConfiguration(util.getEPackages(), root, 1L);
+		config.setMinObjectsCount(util.getMinObjectsCount());
+		ModelMutator.changeModel(config);
+
+		System.out.println(ModelMutatorUtil.getAllObjectsCount(root));
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/FuzzyModelElementIdGenerator.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/FuzzyModelElementIdGenerator.java
new file mode 100644
index 0000000..7a72eb7
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/FuzzyModelElementIdGenerator.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.emf.emfstore.common.model.ModelElementId;
+import org.eclipse.emf.emfstore.common.model.ModelFactory;
+
+/**
+ * Implementation of {@link ModelElementIdGenerator} which increments the ModelElementId for each
+ * new modelelement for each IdEObjectCollection starting with 0.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+public class FuzzyModelElementIdGenerator {
+
+	private Map<Object, Integer> collectionsToIds = new HashMap<Object, Integer>();
+
+	/**
+	 * Generates a new {@link ModelElementId}.
+	 * 
+	 * @param collection The {@link IdEObjectCollection} for which to create a new {@link ModelElementId}.
+	 * @return A new {@link ModelElementId}.
+	 */
+	public ModelElementId generateModelElementId(Object collection) {
+		Integer id = collectionsToIds.get(collection);
+		if (id == null) {
+			id = new Integer(0);
+		}
+		ModelElementId modelElementId = ModelFactory.eINSTANCE.createModelElementId();
+		modelElementId.setId(String.valueOf(id));
+		collectionsToIds.put(collection, id + 1);
+		return modelElementId;
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/FuzzyProjectTest.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/FuzzyProjectTest.java
new file mode 100644
index 0000000..3c3b95d
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/FuzzyProjectTest.java
@@ -0,0 +1,298 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.test;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.Assert;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.eclipse.emf.emfstore.client.model.Configuration;
+import org.eclipse.emf.emfstore.client.model.ProjectSpace;
+import org.eclipse.emf.emfstore.client.model.Workspace;
+import org.eclipse.emf.emfstore.client.model.WorkspaceManager;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommand;
+import org.eclipse.emf.emfstore.common.CommonUtil;
+import org.eclipse.emf.emfstore.common.model.ModelElementId;
+import org.eclipse.emf.emfstore.common.model.Project;
+import org.eclipse.emf.emfstore.common.model.util.ModelUtil;
+import org.eclipse.emf.emfstore.fuzzy.FuzzyRunner;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Data;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.DataProvider;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Options;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Util;
+import org.eclipse.emf.emfstore.fuzzy.emf.EMFDataProvider;
+import org.eclipse.emf.emfstore.fuzzy.emf.MutateUtil;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorConfiguration;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.runner.RunWith;
+
+/**
+ * Abstract super class for tests handling EMFStore projects.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+@RunWith(FuzzyRunner.class)
+@DataProvider(EMFDataProvider.class)
+public abstract class FuzzyProjectTest {
+
+	@Data
+	private Project project;
+
+	@Util
+	private MutateUtil util;
+
+	@SuppressWarnings({ "serial", "unused" })
+	@Options
+	private Map<String, Object> options = new HashMap<String, Object>() {
+		{
+			put(EMFDataProvider.MUTATOR_EDITINGDOMAIN, WorkspaceManager.getInstance().getCurrentWorkspace()
+				.getEditingDomain());
+		}
+	};
+
+	private ProjectSpace projectSpace;
+
+	private ProjectSpace copyProjectSpace;
+
+	/**
+	 * Init the testclasses.
+	 */
+	@BeforeClass
+	public static void init() {
+		// call once to avoid wrong time in first run
+		CommonUtil.setTesting(true);
+		WorkspaceManager.init();
+	}
+
+	/***/
+	@Before
+	public void setup() {
+		// set testing to true so it uses test profile
+		CommonUtil.setTesting(true);
+
+		// necessary to avoid saving of each projectspace
+		// which leads to a very slow performance
+		Configuration.setAutoSave(false);
+
+		// import projects
+		WorkspaceManager.init();
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				projectSpace = WorkspaceManager.getInstance().getCurrentWorkspace().importProject(project, "", "");
+				if (projectSpaceCopyNeeded()) {
+					copyProjectSpace = WorkspaceManager.getInstance().getCurrentWorkspace()
+						.importProject(ModelUtil.clone(project), "", "");
+				}
+			}
+		}.run(false);
+	}
+
+	/***/
+	@After
+	public void tearDown() {
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				try {
+					Workspace currentWorkspace = WorkspaceManager.getInstance().getCurrentWorkspace();
+					EList<ProjectSpace> projectSpaces = currentWorkspace.getProjectSpaces();
+					if (projectSpace != null && projectSpaces.contains(projectSpace)) {
+						currentWorkspace.deleteProjectSpace(projectSpace);
+					}
+					if (copyProjectSpace != null && projectSpaces.contains(copyProjectSpace)) {
+						currentWorkspace.deleteProjectSpace(copyProjectSpace);
+					}
+				} catch (FileNotFoundException e) {
+					// do nothing
+				} catch (IOException e) {
+					// do nothing
+				} finally {
+					WorkspaceManager.getInstance().dispose();
+				}
+			}
+		}.run(false);
+	}
+
+	/**
+	 * Constructs a new {@link ModelMutatorConfiguration} based on the existing one and the given project.
+	 * 
+	 * @param project The root object of the {@link ModelMutatorConfiguration}.
+	 * @return The new {@link ModelMutatorConfiguration}.
+	 */
+	public ModelMutatorConfiguration getModelMutatorConfiguration(Project project) {
+		return getModelMutatorConfiguration(project, util);
+	}
+
+	/**
+	 * Constructs a new {@link ModelMutatorConfiguration} based on the given {@link MutateUtil} and the given project.
+	 * 
+	 * @param project The root object of the {@link ModelMutatorConfiguration}.
+	 * @param util The {@link MutateUtil} connected to the {@link EMFDataProvider}.
+	 * @return The new {@link ModelMutatorConfiguration}.
+	 */
+	public static ModelMutatorConfiguration getModelMutatorConfiguration(Project project, MutateUtil util) {
+		final ModelMutatorConfiguration mmc = new ModelMutatorConfiguration(util.getEPackages(), project, 1L);
+		mmc.seteStructuralFeaturesToIgnore(util.getEStructuralFeaturesToIgnore());
+		mmc.seteClassesToIgnore(util.getEClassesToIgnore());
+		mmc.setEditingDomain(WorkspaceManager.getInstance().getCurrentWorkspace().getEditingDomain());
+		mmc.setMinObjectsCount(util.getMinObjectsCount());
+		return mmc;
+	}
+
+	/**
+	 * Can be overridden by subclasses to modify behavior. Default is <code>true</code>.
+	 * 
+	 * @return Should this class handle/provide also a copy of the projectSpace?
+	 */
+	public boolean projectSpaceCopyNeeded() {
+		return true;
+	}
+
+	/**
+	 * Notify that a test has failed. Saves the projects for later comparison.
+	 * 
+	 * @param project1 The first {@link Project}.
+	 * @param project2 The second {@link Project}.
+	 */
+	public void fail(Project project1, Project project2) {
+		fail(project1, project2, util);
+	}
+
+	/**
+	 * Notify that a test has failed. Saves the projects for later comparison.
+	 * 
+	 * @param project1 The first {@link Project}.
+	 * @param project2 The second {@link Project}.
+	 * @param util The {@link MutateUtil} connected to the {@link EMFDataProvider}.
+	 */
+	public static void fail(Project project1, Project project2, MutateUtil util) {
+		save(project1, project2, util);
+		Assert.fail();
+	}
+
+	/**
+	 * Saves the projects for e.g. later comparison.
+	 * 
+	 * @param project1 The first {@link Project}.
+	 * @param project2 The second {@link Project}.
+	 * @param util The {@link MutateUtil} connected to the {@link EMFDataProvider}.
+	 */
+	public static void save(final Project project1, final Project project2, final MutateUtil util) {
+		final Map<Object, Object> options = new HashMap<Object, Object>();
+		options.put(XMLResource.OPTION_PROCESS_DANGLING_HREF, XMLResource.OPTION_PROCESS_DANGLING_HREF_DISCARD);
+
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				try {
+					ModelUtil.saveEObjectToResource(Arrays.asList(project1), util.getRunResourceURI("original"),
+						options);
+					ModelUtil.saveEObjectToResource(Arrays.asList(project2), util.getRunResourceURI("copy"), options);
+				} catch (IOException e) {
+					throw new RuntimeException(e);
+				}
+			}
+		}.run(false);
+	}
+
+	/**
+	 * Compare two projects but ignore the order of the elements.
+	 * 
+	 * @param project1 The first {@link Project}.
+	 * @param project2 The second {@link Project}.
+	 */
+	public void compareIgnoreOrder(Project project1, Project project2) {
+		compareIgnoreOrder(project1, project2, util);
+	}
+
+	/**
+	 * Compare two projects but ignore the order of the elements.
+	 * 
+	 * @param project1 The first {@link Project}.
+	 * @param project2 The second {@link Project}.
+	 * @param util The {@link MutateUtil} connected to the {@link EMFDataProvider}.
+	 */
+	public static void compareIgnoreOrder(Project project1, Project project2, MutateUtil util) {
+		if (project1.getModelElements().size() != project2.getModelElements().size()) {
+			fail(project1, project2, util);
+		}
+
+		int index = 0;
+		// sort elements in modelElement reference of projects to avoid differences only in indices.
+		for (EObject eObject1 : project1.getModelElements()) {
+			ModelElementId modelElementId1 = project1.getModelElementId(eObject1);
+			EObject eObject2 = project2.getModelElement(modelElementId1);
+			if (eObject2 == null || !project2.getModelElements().contains(eObject2)) {
+				fail(project1, project2, util);
+			}
+			project2.getModelElements().move(index, eObject2);
+			index++;
+		}
+
+		if (!ModelUtil.areEqual(project1, project2)) {
+			fail(project1, project2, util);
+		}
+	}
+
+	/**
+	 * @return The {@link MutateUtil} connected with the {@link EMFDataProvider}.
+	 */
+	public MutateUtil getUtil() {
+		return util;
+	}
+
+	/**
+	 * @return The {@link ProjectSpace} imported into the WorkSpace.
+	 */
+	public ProjectSpace getProjectSpace() {
+		return projectSpace;
+	}
+
+	/**
+	 * @param projectSpace The {@link ProjectSpace} of the test.
+	 */
+	public void setProjectSpace(ProjectSpace projectSpace) {
+		this.projectSpace = projectSpace;
+	}
+
+	/**
+	 * @return The {@link ProjectSpace} copied from the original one.
+	 * @throws IllegalStateException When {@link #projectSpaceCopyNeeded()} returns false.
+	 */
+	public ProjectSpace getCopyProjectSpace() throws IllegalStateException {
+		if (!projectSpaceCopyNeeded()) {
+			throw new IllegalStateException("This test does not have a copied projectSpace!");
+		}
+		return copyProjectSpace;
+	}
+
+	/**
+	 * @param copyProjectSpace The {@link ProjectSpace} copied from the original one.
+	 * @throws IllegalStateException When {@link #projectSpaceCopyNeeded()} returns false.
+	 */
+	public void setCopyProjectSpace(ProjectSpace copyProjectSpace) throws IllegalStateException {
+		if (!projectSpaceCopyNeeded()) {
+			throw new IllegalStateException("This test does not have a copied projectSpace!");
+		}
+		this.copyProjectSpace = copyProjectSpace;
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/MutatorTest.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/MutatorTest.java
new file mode 100644
index 0000000..8387348
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/MutatorTest.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.test;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.emfstore.common.model.ModelElementId;
+import org.eclipse.emf.emfstore.common.model.ModelFactory;
+import org.eclipse.emf.emfstore.common.model.ModelPackage;
+import org.eclipse.emf.emfstore.common.model.Project;
+import org.eclipse.emf.emfstore.fuzzy.FuzzyRunner;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Data;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.DataProvider;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Util;
+import org.eclipse.emf.emfstore.fuzzy.emf.EMFDataProvider;
+import org.eclipse.emf.emfstore.fuzzy.emf.MutateUtil;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutator;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorConfiguration;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Test to test the {@link ModelMutator}.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+@RunWith(FuzzyRunner.class)
+@DataProvider(EMFDataProvider.class)
+public class MutatorTest {
+
+	@SuppressWarnings("unused")
+	@Data
+	private EObject obj;
+
+	@Util
+	private MutateUtil util;
+
+	/**
+	 * Tests if two generated models are equal.
+	 */
+	@Test
+	public void compareTwoGeneratedProjects() {
+
+		Project project1 = ModelFactory.eINSTANCE.createProject();
+		Project project2 = ModelFactory.eINSTANCE.createProject();
+		ModelMutator.generateModel(getConfig(project1));
+		ModelMutator.generateModel(getConfig(project2));
+
+		ModelMutator.changeModel(getConfig(project1));
+		ModelMutator.changeModel(getConfig(project2));
+
+		Iterator<EObject> project1Iterator = project1.getAllModelElements().iterator();
+		Iterator<EObject> project2Iterator = project2.getAllModelElements().iterator();
+
+		while (project1Iterator.hasNext()) {
+			EObject modelElement = project1Iterator.next();
+			ModelElementId modelElementId = project1.getModelElementId(modelElement);
+			if (!project2.contains(modelElementId)) {
+				failed(project1, project2);
+			}
+		}
+
+		TreeIterator<EObject> allContentsProject1 = project1.eAllContents();
+		TreeIterator<EObject> allContentsProject2 = project2.eAllContents();
+
+		while (allContentsProject1.hasNext()) {
+			if (!allContentsProject2.hasNext()) {
+				failed(project1, project2);
+			}
+			EObject modelElement = allContentsProject1.next();
+			ModelElementId modelElementId = project1.getModelElementId(modelElement);
+			EObject modelElement2 = allContentsProject2.next();
+			ModelElementId modelElementId2 = project2.getModelElementId(modelElement2);
+			if (!modelElementId.equals(modelElementId2)) {
+				failed(project1, project2);
+			}
+		}
+
+		project1Iterator = project1.getAllModelElements().iterator();
+		project2Iterator = project2.getAllModelElements().iterator();
+
+		while (project1Iterator.hasNext()) {
+			EObject modelElement = project1Iterator.next();
+			ModelElementId modelElementId = project1.getModelElementId(modelElement);
+			ModelElementId modelElementId2 = project2.getModelElementId(project2Iterator.next());
+			if (!modelElementId.equals(modelElementId2)) {
+				failed(project1, project2);
+			}
+		}
+	}
+
+	private void failed(Project project1, Project project2) {
+		util.saveEObject(project1, "original_project", true);
+		util.saveEObject(project2, "own_project", true);
+		Assert.assertTrue(false);
+	}
+
+	private ModelMutatorConfiguration getConfig(Project root) {
+		ModelMutatorConfiguration mmc = new ModelMutatorConfiguration(util.getEPackages(), root, util.getSeed());
+		Collection<EStructuralFeature> eStructuralFeaturesToIgnore = new HashSet<EStructuralFeature>();
+		eStructuralFeaturesToIgnore.add(ModelPackage.Literals.PROJECT__CUT_ELEMENTS);
+		mmc.seteStructuralFeaturesToIgnore(eStructuralFeaturesToIgnore);
+		mmc.setMinObjectsCount(util.getMinObjectsCount());
+		return mmc;
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/OperationApplyTest.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/OperationApplyTest.java
new file mode 100644
index 0000000..6a07e92
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/OperationApplyTest.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.test;
+
+import org.eclipse.emf.emfstore.client.model.ProjectSpace;
+import org.eclipse.emf.emfstore.client.model.impl.ProjectSpaceBase;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommand;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.DataProvider;
+import org.eclipse.emf.emfstore.fuzzy.FuzzyRunner;
+import org.eclipse.emf.emfstore.fuzzy.emf.EMFDataProvider;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorConfiguration;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Test which mutates a project and then applies its changes to another (copied) project.
+ * Then compares the two mutated projects.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+@RunWith(FuzzyRunner.class)
+@DataProvider(EMFDataProvider.class)
+public class OperationApplyTest extends FuzzyProjectTest {
+
+	/***/
+	@Test
+	public void applyTest() {
+
+		final ProjectSpace projectSpace = getProjectSpace();
+		final ModelMutatorConfiguration mmc = getModelMutatorConfiguration(projectSpace.getProject());
+
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				getUtil().mutate(mmc);
+			}
+		}.run(false);
+
+		final ProjectSpace copyProjectSpace = getCopyProjectSpace();
+
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				((ProjectSpaceBase) copyProjectSpace).applyOperations(projectSpace.getOperations(), false);
+			}
+		}.run(false);
+
+		compareIgnoreOrder(projectSpace.getProject(), copyProjectSpace.getProject());
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/OperationReverseTest.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/OperationReverseTest.java
new file mode 100644
index 0000000..fb4a342
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/OperationReverseTest.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.test;
+
+import org.eclipse.emf.emfstore.client.model.impl.ProjectSpaceBase;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommand;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.DataProvider;
+import org.eclipse.emf.emfstore.fuzzy.FuzzyRunner;
+import org.eclipse.emf.emfstore.fuzzy.emf.EMFDataProvider;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorConfiguration;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Fuzzy Test for the reverse functionality of operations.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+@RunWith(FuzzyRunner.class)
+@DataProvider(EMFDataProvider.class)
+public class OperationReverseTest extends FuzzyProjectTest {
+
+	/***/
+	@Test
+	public void reverseTest() {
+		final ProjectSpaceBase projectSpace = (ProjectSpaceBase) getProjectSpace();
+		final ModelMutatorConfiguration mmc = getModelMutatorConfiguration(projectSpace.getProject());
+
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				getUtil().mutate(mmc);
+			}
+		}.run(false);
+
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				projectSpace.getLocalChangePackage().reverse().apply(projectSpace.getProject());
+			}
+		}.run(false);
+
+		compareIgnoreOrder(getCopyProjectSpace().getProject(), projectSpace.getProject());
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/ProjectLoggingAdapter.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/ProjectLoggingAdapter.java
new file mode 100644
index 0000000..dbca2f3
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/ProjectLoggingAdapter.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.test;
+
+import java.util.List;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.emfstore.common.model.ModelElementId;
+import org.eclipse.emf.emfstore.common.model.impl.ProjectImpl;
+import org.eclipse.emf.emfstore.modelmutator.api.LoggingAdapter;
+
+/**
+ * Extends the {@link LoggingAdapter} to print out {@link ModelElementId}s.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+public class ProjectLoggingAdapter extends LoggingAdapter {
+
+	private ProjectImpl projectImpl;
+
+	/**
+	 * @param project The project containing the elements notifying.
+	 * @param toLogClasses The {@link EClass}es to log. If <code>null</code> every {@link EClass} is logged.
+	 * @param toLogReferences The {@link EReference}es of the toLogClasses to log. If <code>null</code> every
+	 *            {@link EReference} is logged.
+	 * @param references Log reference changes?
+	 * @param attributes Log attribute changes?
+	 */
+	public ProjectLoggingAdapter(ProjectImpl project, List<EClass> toLogClasses, List<EReference> toLogReferences,
+		boolean references, boolean attributes) {
+		super(toLogClasses, toLogReferences, references, attributes);
+		this.projectImpl = project;
+	}
+
+	@Override
+	protected String format(Notification notification) {
+		StringBuffer result = new StringBuffer();
+		result.append("Notifier:  " + getModelElementId(projectImpl, notification.getNotifier()) + " "
+			+ notification.getNotifier());
+		result.append("\n");
+		result.append("Feature:   " + notification.getFeature());
+		result.append("\n");
+		result.append("Position:  " + notification.getPosition());
+		result.append("\n");
+		result.append("EventType: " + getEventType(notification.getEventType()));
+		result.append("\n");
+		result.append("OldValue:  " + getModelElementId(projectImpl, notification.getOldValue()) + " "
+			+ notification.getOldValue());
+		result.append("\n");
+		result.append("NewValue:  " + getModelElementId(projectImpl, notification.getNewValue()) + " "
+			+ notification.getNewValue());
+		result.append("\n");
+		return result.toString();
+	}
+
+	private String getModelElementId(ProjectImpl project, Object o) {
+		if (o == null) {
+			return null;
+		}
+
+		if (!(o instanceof EObject)) {
+			return null;
+		}
+
+		EObject eObject = (EObject) o;
+		ModelElementId modelElementId = project.getModelElementId(eObject);
+		if (modelElementId != null) {
+			return modelElementId.getId();
+		}
+		ModelElementId deletedModelElementId = project.getDeletedModelElementId(eObject);
+		return deletedModelElementId != null ? deletedModelElementId.getId() : null;
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/SerializationTest.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/SerializationTest.java
new file mode 100644
index 0000000..1721cfa
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/SerializationTest.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.test;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.emfstore.client.model.ProjectSpace;
+import org.eclipse.emf.emfstore.client.model.WorkspaceManager;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommand;
+import org.eclipse.emf.emfstore.common.model.util.ModelUtil;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.DataProvider;
+import org.eclipse.emf.emfstore.fuzzy.FuzzyRunner;
+import org.eclipse.emf.emfstore.fuzzy.emf.EMFDataProvider;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorConfiguration;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Class to test serialization functionality of the {@link WorkspaceManager}.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+@RunWith(FuzzyRunner.class)
+@DataProvider(EMFDataProvider.class)
+public class SerializationTest extends FuzzyProjectTest {
+
+	/**
+	 * Load and save a {@link ProjectSpace} via {@link WorkspaceManager} and compare them.
+	 */
+	@Test
+	public void loadAndSaveToResource() {
+
+		// mutate already saved (through importing) projectSpace and save it again
+		ProjectSpace projectSpace = getProjectSpace();
+		final ModelMutatorConfiguration mmc = getModelMutatorConfiguration(projectSpace.getProject());
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				getUtil().mutate(mmc);
+			}
+		}.run(false);
+
+		projectSpace.save();
+
+		// dispose and reinit WorkspaceManager
+		WorkspaceManager.getInstance().dispose();
+		WorkspaceManager.getInstance().reinit();
+
+		// reload projectSpaces and check for valid state
+		EList<ProjectSpace> projectSpaces = WorkspaceManager.getInstance().getCurrentWorkspace().getProjectSpaces();
+		if (projectSpaces.size() != 1) {
+			throw new IllegalStateException("There must be exactly one projectSpace in the workspace! Current value: "
+				+ projectSpaces.size());
+		}
+
+		// compare
+		ProjectSpace reloadedProjectSpace = projectSpaces.get(0);
+		try {
+			if (!ModelUtil.areEqual(reloadedProjectSpace.getProject(), projectSpace.getProject())) {
+				fail(reloadedProjectSpace.getProject(), projectSpace.getProject());
+			}
+		} finally {
+			// set projectSpace to the reloaded one to ensure correct cleanup
+			setProjectSpace(reloadedProjectSpace);
+		}
+	}
+
+	@Override
+	public boolean projectSpaceCopyNeeded() {
+		return false;
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/ServerTest.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/ServerTest.java
new file mode 100644
index 0000000..8526393
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/ServerTest.java
@@ -0,0 +1,109 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.test;
+
+import org.eclipse.emf.emfstore.client.model.Configuration;
+import org.eclipse.emf.emfstore.client.model.ProjectSpace;
+import org.eclipse.emf.emfstore.client.model.WorkspaceManager;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommand;
+import org.eclipse.emf.emfstore.client.test.server.api.CoreServerTest;
+import org.eclipse.emf.emfstore.common.CommonUtil;
+import org.eclipse.emf.emfstore.common.model.Project;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Data;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.DataProvider;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Util;
+import org.eclipse.emf.emfstore.fuzzy.FuzzyRunner;
+import org.eclipse.emf.emfstore.fuzzy.emf.EMFDataProvider;
+import org.eclipse.emf.emfstore.fuzzy.emf.MutateUtil;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorConfiguration;
+import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException;
+import org.eclipse.emf.emfstore.server.model.versioning.PrimaryVersionSpec;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Fuzzy Server test to test share, checkout, commit and update.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+@RunWith(FuzzyRunner.class)
+@DataProvider(EMFDataProvider.class)
+public class ServerTest extends CoreServerTest {
+
+	@Data
+	private Project project;
+
+	@Util
+	private MutateUtil util;
+
+	/**
+	 * Setup the needed projectspace.
+	 */
+	@Before
+	public void setupProjectSpace() {
+		CommonUtil.setTesting(true);
+		Configuration.setAutoSave(false);
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				setProjectSpace(WorkspaceManager.getInstance().getCurrentWorkspace().importProject(project, "", ""));
+			}
+		}.run(false);
+		setProject(project);
+	}
+
+	/**
+	 * @throws EmfStoreException Problems with share, checkout, commit or update.
+	 */
+	@Test
+	public void shareCheckoutCommitUpdate() throws EmfStoreException {
+		
+		ProjectSpace projectSpace = getProjectSpace();
+
+		// share original project
+		PrimaryVersionSpec versionSpec = share(projectSpace);
+
+		// checkout project
+		final ProjectSpace psCheckedout = checkout(projectSpace.getProjectInfo(), versionSpec);
+
+		// compare original and checkedout project
+		FuzzyProjectTest.compareIgnoreOrder(projectSpace.getProject(), psCheckedout.getProject(), util);
+
+		// change & commit original project
+		final ModelMutatorConfiguration mmc = FuzzyProjectTest.getModelMutatorConfiguration(projectSpace.getProject(),
+			util);
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				util.mutate(mmc);
+			}
+		}.run(false);
+
+		commit(projectSpace);
+
+		// update checkedout project
+		new EMFStoreCommand() {
+			@Override
+			protected void doRun() {
+				try {
+					psCheckedout.update();
+				} catch (EmfStoreException e) {
+					throw new RuntimeException(e);
+				}
+			}
+		}.run(false);
+
+		// compare original and updated project
+		FuzzyProjectTest.compareIgnoreOrder(projectSpace.getProject(), psCheckedout.getProject(), util);
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.checkstyle b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.checkstyle
new file mode 100644
index 0000000..2f2667a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+  <fileset name="all" enabled="true" check-config-name="emfstoreStyle" local="false">
+    <file-match-pattern match-pattern="." include-pattern="true"/>
+  </fileset>
+</fileset-config>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.classpath b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.classpath
new file mode 100644
index 0000000..57c9877
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry exported="true" kind="lib" path="lib/dom4j-1.6.1.jar"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.project b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.project
new file mode 100644
index 0000000..4a1c331
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.emfstore.fuzzy.emf</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+	</natures>
+</projectDescription>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..af0f20f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/CreateAllDiffs.launch b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/CreateAllDiffs.launch
new file mode 100644
index 0000000..40c63a0
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/CreateAllDiffs.launch
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.JunitLaunchConfig">
+<booleanAttribute key="append.args" value="true"/>
+<stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/>
+<booleanAttribute key="askclear" value="false"/>
+<booleanAttribute key="automaticAdd" value="true"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="true"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
+<booleanAttribute key="default" value="true"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/CreateAllDiffs.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.emf.emfstore.fuzzy.emf.diff.CreateAllDiffs"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.emf.emfstore.fuzzy.emf"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.emf.cdo.server.product"/>
+<booleanAttribute key="run_in_ui_thread" value="true"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="false"/>
+<booleanAttribute key="useProduct" value="false"/>
+</launchConfiguration>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..76fb7dc
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: EMFDataProvider for FuzzyTestRunner (Incubation)
+Bundle-SymbolicName: org.eclipse.emf.emfstore.fuzzy.emf;singleton:=true
+Bundle-Version: 0.9.3.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,
+ org.eclipse.emf.emfstore.fuzzy.emf.config,
+ org.eclipse.emf.emfstore.fuzzy.emf.config.util,
+ org.eclipse.emf.emfstore.fuzzy.emf.diff
+Require-Bundle: org.eclipse.emf.emfstore.modelmutator;visibility:=reexport,
+ org.eclipse.emf.emfstore.fuzzy;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
+Bundle-Vendor: Eclipse Modeling Project
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/build.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/build.properties
new file mode 100644
index 0000000..4a470b0
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/build.properties
@@ -0,0 +1,15 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+               model/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties,\
+               lib/dom4j-1.6.1.jar
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/fuzzy/fuzzy.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/fuzzy/fuzzy.properties
new file mode 100644
index 0000000..c8e74a8
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/fuzzy/fuzzy.properties
@@ -0,0 +1,6 @@
+#fuzzy.emfdataprovider.configsFile=fuzzy/fuzzyConfig.xml
+fuzzy.hudson.url=https://hudson.eclipse.org/hudson
+#fuzzy.hudson.port=8080
+fuzzy.hudson.job=emf-emfstore-fuzzytests-explorer
+fuzzy.hudson.diffjob=emf-emfstore-fuzzytests-differ
+fuzzy.hudson.artifact.folder=/artifact/git/org.eclipse.emf.emfstore.other/
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/lib/dom4j-1.6.1.jar b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/lib/dom4j-1.6.1.jar
new file mode 100644
index 0000000..c8c4dbb
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/lib/dom4j-1.6.1.jar
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/model/config.ecore b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/model/config.ecore
new file mode 100644
index 0000000..2385900
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/model/config.ecore
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="config"
+    nsURI="http://org/eclipse/emf/emfstore/fuzzy/emf/config" nsPrefix="org.eclipse.emf.emfstore.fuzzy.emf.config">
+  <eClassifiers xsi:type="ecore:EClass" name="TestConfig">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="seed" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="count" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="testClass">
+      <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaClass">
+        <eTypeArguments/>
+      </eGenericType>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="mutatorConfig" eType="#//MutatorConfig"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TestRun">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="config" eType="#//TestConfig"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="time" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="results" upperBound="-1"
+        eType="#//TestResult" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TestResult">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="seedCount" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="testName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="error" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="failure" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="executionTime" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TestDiff">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="lastUpdate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="config" eType="#//TestConfig"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="oldResult" eType="#//TestResult"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="newResult" eType="#//TestResult"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DiffReport">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="diffs" upperBound="-1"
+        eType="#//TestDiff" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Root">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="elements" upperBound="-1"
+        eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MutatorConfig">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="rootEClass" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EClass"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="minObjectsCount" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        defaultValueLiteral="100"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="ignoreAndLog" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        defaultValueLiteral="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="doNotGenerateRoot" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        defaultValueLiteral="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="useEcoreUtilDelete" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        defaultValueLiteral="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="eClassesToIgnore" upperBound="-1"
+        eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EClass"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="eStructuralFeaturesToIgnore"
+        upperBound="-1" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EStructuralFeature"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="ePackages" upperBound="-1"
+        eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="maxDeleteCount" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EIntegerObject"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/model/config.genmodel b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/model/config.genmodel
new file mode 100644
index 0000000..8ba59ad
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/model/config.genmodel
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" copyrightText="Copyright (c) 2008-2012 EclipseSource Muenchen GmbH.&#xD;&#xA;&#xD;&#xA;All rights reserved. This program and the accompanying materials&#xD;&#xA;are made available under the terms of the Eclipse Public License v1.0&#xD;&#xA;which accompanies this distribution, and is available at&#xD;&#xA;http://www.eclipse.org/legal/epl-v10.html&#xD;&#xA;&#xD;&#xA;Contributors:"
+    modelDirectory="/org.eclipse.emf.emfstore.fuzzy.emf/src" modelPluginID="org.eclipse.emf.emfstore.fuzzy.emf"
+    modelName="Config" importerID="org.eclipse.emf.importer.ecore" complianceLevel="5.0"
+    copyrightFields="false" runtimeVersion="2.5">
+  <foreignModel>config.ecore</foreignModel>
+  <genPackages prefix="Config" basePackage="org.eclipse.emf.emfstore.fuzzy.emf" disposableProviderFactory="true"
+      fileExtensions="fuzzy" ecorePackage="config.ecore#/">
+    <genClasses ecoreClass="config.ecore#//TestConfig">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestConfig/seed"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestConfig/count"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestConfig/testClass"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestConfig/id"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference config.ecore#//TestConfig/mutatorConfig"/>
+    </genClasses>
+    <genClasses ecoreClass="config.ecore#//TestRun">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference config.ecore#//TestRun/config"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestRun/time"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference config.ecore#//TestRun/results"/>
+    </genClasses>
+    <genClasses ecoreClass="config.ecore#//TestResult">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestResult/seedCount"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestResult/testName"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestResult/error"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestResult/failure"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestResult/executionTime"/>
+    </genClasses>
+    <genClasses ecoreClass="config.ecore#//TestDiff">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestDiff/lastUpdate"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference config.ecore#//TestDiff/config"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference config.ecore#//TestDiff/oldResult"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference config.ecore#//TestDiff/newResult"/>
+    </genClasses>
+    <genClasses ecoreClass="config.ecore#//DiffReport">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference config.ecore#//DiffReport/diffs"/>
+    </genClasses>
+    <genClasses ecoreClass="config.ecore#//Root">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference config.ecore#//Root/elements"/>
+    </genClasses>
+    <genClasses ecoreClass="config.ecore#//MutatorConfig">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference config.ecore#//MutatorConfig/rootEClass"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//MutatorConfig/minObjectsCount"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//MutatorConfig/ignoreAndLog"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//MutatorConfig/doNotGenerateRoot"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//MutatorConfig/useEcoreUtilDelete"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference config.ecore#//MutatorConfig/eClassesToIgnore"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference config.ecore#//MutatorConfig/eStructuralFeaturesToIgnore"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference config.ecore#//MutatorConfig/ePackage"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//MutatorConfig/maxDeleteCount"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/plugin.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/plugin.properties
new file mode 100644
index 0000000..77ee4a1
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/plugin.properties
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/plugin.xml b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/plugin.xml
new file mode 100644
index 0000000..cea7823
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/plugin.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id$
+-->
+
+
+<plugin>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <package
+            uri="http://org/eclipse/emf/emfstore/fuzzy/emf/config"
+            class="org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage"
+            genModel="model/config.genmodel"/>
+   </extension>
+
+</plugin>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/pom.xml b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/pom.xml
new file mode 100644
index 0000000..a63dba8
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/pom.xml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.eclipse.emf.emfstore</groupId>
+    <artifactId>emfstore-parent</artifactId>
+    <version>0.9.3-SNAPSHOT</version>
+    <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+  </parent>
+  <groupId>org.eclipse.emf.emfstore</groupId>
+  <artifactId>org.eclipse.emf.emfstore.fuzzy.emf</artifactId>
+  <version>0.9.3-SNAPSHOT</version>
+  <packaging>eclipse-test-plugin</packaging>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.eclipse.tycho</groupId>
+        <artifactId>tycho-surefire-plugin</artifactId>
+        <version>${tycho-version}</version>
+
+        <configuration>
+                   
+          <testSuite>org.eclipse.emf.emfstore.fuzzy.emf</testSuite>
+          <testClass>org.eclipse.emf.emfstore.fuzzy.emf.diff.CreateAllDiffs</testClass>
+          <useUIHarness>true</useUIHarness>
+          <useUIThread>false</useUIThread>
+          
+          <argLine>-Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m -DcreateDiffs=${createDiffs}</argLine>
+          <failIfNoTests>false</failIfNoTests>
+          
+          <dependencies> 
+          	<dependency>
+              <type>eclipse-plugin</type>
+              <artifactId>org.eclipse.emf.emfstore.fuzzy.emf</artifactId>
+              <version>0.0.0</version>
+            </dependency>   
+            <dependency>
+              <type>eclipse-plugin</type>
+              <artifactId>org.eclipse.emf.emfstore.fuzzy</artifactId>
+              <version>0.0.0</version>
+            </dependency>        
+            <dependency>
+              <type>eclipse-plugin</type>
+              <artifactId>org.eclipse.emf.emfstore.client.model.edit</artifactId>
+              <version>0.0.0</version>
+            </dependency>
+            <dependency>
+              <type>eclipse-plugin</type>
+              <artifactId>org.eclipse.emf.emfstore.client.test</artifactId>
+              <version>0.0.0</version>
+            </dependency>
+            <dependency>
+              <type>eclipse-plugin</type>
+              <artifactId>org.eclipse.emf.emfstore.client</artifactId>
+              <version>0.0.0</version>
+            </dependency>            
+            <dependency>
+              <type>eclipse-plugin</type>
+              <artifactId>org.eclipse.emf.emfstore.modelmutator</artifactId>
+              <version>0.0.0</version>
+            </dependency>            
+            <dependency>
+              <type>eclipse-plugin</type>
+              <artifactId>org.eclipse.emf.emfstore.examplemodel.edit</artifactId>
+              <version>0.0.0</version>
+            </dependency>           
+          </dependencies>
+
+          <bundleStartLevel>  
+          	<bundle>
+              <id>org.eclipse.emf.emfstore.fuzzy.emf</id>
+              <level>4</level>
+              <autoStart>false</autoStart>
+            </bundle>
+            <bundle>
+              <id>org.eclipse.emf.emfstore.fuzzy</id>
+              <level>4</level>
+              <autoStart>false</autoStart>
+            </bundle>          
+            <bundle>
+              <id>org.eclipse.emf.emfstore.client.model.edit</id>
+              <level>4</level>
+              <autoStart>false</autoStart>
+            </bundle>
+            <bundle>
+              <id>org.eclipse.emf.emfstore.client.test</id>
+              <level>4</level>
+              <autoStart>false</autoStart>
+            </bundle>
+            <bundle>
+              <id>org.eclipse.emf.emfstore.client</id>
+              <level>4</level>
+              <autoStart>false</autoStart>
+            </bundle>        
+            <bundle>
+              <id>org.eclipse.emf.emfstore.modelmutator</id>
+              <level>4</level>
+              <autoStart>false</autoStart>
+            </bundle>           
+            <bundle>
+              <id>org.eclipse.emf.emfstore.examplemodel.edit</id>
+              <level>4</level>
+              <autoStart>false</autoStart>
+            </bundle>
+            <bundle>
+              <id>org.eclipse.emf.emfstore.examplemodel</id>
+              <level>4</level>
+              <autoStart>false</autoStart>
+            </bundle>            
+          </bundleStartLevel> 
+        </configuration>
+       
+      </plugin>
+	</plugins>
+   </build>
+  
+  
+</project>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/EMFDataProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/EMFDataProvider.java
new file mode 100644
index 0000000..6d40e32
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/EMFDataProvider.java
@@ -0,0 +1,358 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
+
+import org.dom4j.DocumentException;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.emfstore.fuzzy.FuzzyDataProvider;
+import org.eclipse.emf.emfstore.fuzzy.Test;
+import org.eclipse.emf.emfstore.fuzzy.Util;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+import org.eclipse.emf.emfstore.fuzzy.emf.diff.HudsonTestRunProvider;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutator;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorConfiguration;
+import org.junit.runner.notification.RunListener;
+import org.junit.runners.model.TestClass;
+
+/**
+ * This implementation of a {@link FuzzyDataProvider} provides generated models using the functionality of
+ * {@link ModelMutator}. <br>
+ * <br>
+ * The run of a test is based on a {@link TestConfig}, defining model etc. <br>
+ * <br>
+ * During the run it records {@link TestResult}s to create a {@link TestRun} for reporting purpose.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+public class EMFDataProvider implements FuzzyDataProvider<EObject> {
+
+	private Random random;
+
+	private int count;
+
+	private int seedCount;
+
+	private TestClass testClass;
+
+	private TestRun testRun;
+
+	private TestConfig config;
+
+	private boolean filterTests;
+
+	private String configFile;
+
+	private long nextSeed;
+
+	private EClass rootEClass;
+
+	private ModelMutatorConfiguration modelMutatorConfig;
+
+	private Resource diffResource;
+
+	/**
+	 * Prefix of the properties concerning the {@link EMFDataProvider}.
+	 */
+	public static final String PROP_EMFDATAPROVIDER = ".emfdataprovider";
+
+	/**
+	 * Property specifying the path to the config file for the {@link EMFDataProvider}.
+	 */
+	public static final String PROP_CONFIGS_FILE = ".configsFile";
+
+	/**
+	 * Options constant for the exception log set for the mutator.
+	 * Has to be filled with a <code>Set</code> of <code>RuntimeException</code>.
+	 */
+	public static final String MUTATOR_EXC_LOG = "mutatorExcLog";
+
+	/**
+	 * Options constant for the {@link EditingDomain} for the {@link ModelMutator}.
+	 */
+	public static final String MUTATOR_EDITINGDOMAIN = "mutatorEditingDomain";
+
+	/**
+	 * Init the {@link EMFDataProvider}.
+	 */
+	public void init() {
+		// fill properties like the config file
+		fillProperties();
+
+		// load testconfig from file
+		Resource loadResource = FuzzyUtil.createResource(configFile);
+		try {
+			loadResource.load(null);
+		} catch (IOException e) {
+			throw new RuntimeException("Could not load " + configFile, e);
+		}
+
+		// get the testconfig fitting to the current testclass
+		config = FuzzyUtil.getTestConfig(loadResource, testClass);
+
+		// add the config to the configs file
+		addToConfigFile();
+
+		// init variables
+		random = new Random(config.getSeed());
+		count = config.getCount();
+		seedCount = 0;
+
+		// read variables out of mutatorConfig and write into modelmutatorConfig
+		MutatorConfig mutatorConfig = config.getMutatorConfig();
+		rootEClass = mutatorConfig.getRootEClass();
+		if (rootEClass == null) {
+			rootEClass = ConfigPackage.Literals.ROOT;
+		}
+		modelMutatorConfig = new ModelMutatorConfiguration();
+		modelMutatorConfig.setMinObjectsCount(mutatorConfig.getMinObjectsCount());
+		modelMutatorConfig.setDoNotGenerateRoot(mutatorConfig.isDoNotGenerateRoot());
+		modelMutatorConfig.seteClassesToIgnore(mutatorConfig.getEClassesToIgnore());
+		modelMutatorConfig.seteStructuralFeaturesToIgnore(mutatorConfig.getEStructuralFeaturesToIgnore());
+		modelMutatorConfig.setIgnoreAndLog(mutatorConfig.isIgnoreAndLog());
+		modelMutatorConfig.setUseEcoreUtilDelete(mutatorConfig.isUseEcoreUtilDelete());
+		modelMutatorConfig.setMaxDeleteCount(mutatorConfig.getMaxDeleteCount());
+		modelMutatorConfig.setModelPackages(mutatorConfig.getEPackages());
+
+		// create new TestRun with config
+		testRun = ConfigFactory.eINSTANCE.createTestRun();
+		testRun.setConfig(config);
+		testRun.setTime(new Date());
+	}
+
+	/**
+	 * Add the config to the file containing all configs.
+	 */
+	private void addToConfigFile() {
+		Resource resource = FuzzyUtil.createResource(FuzzyUtil.ROOT_FOLDER + FuzzyUtil.TEST_CONFIG_FILE);
+		try {
+			if (FuzzyUtil.resourceExists(resource)) {
+				resource.load(null);
+			}
+			if (!FuzzyUtil.containsConfig(resource, config)) {
+				resource.getContents().add(config);
+				resource.save(null);
+			}
+		} catch (IOException e) {
+			throw new RuntimeException("Could not save config!", e);
+		}
+	}
+
+	/**
+	 * See {@link FuzzyDataProvider}.
+	 * 
+	 * @param count Which run is it?
+	 * @return The new {@link EObject}.
+	 */
+	public EObject get(int count) {
+		seedCount++;
+
+		// adjust the seed
+		fitSeed(count);
+
+		// generate the model
+		nextSeed = random.nextLong();
+
+		// get the root eclass for the generation
+		EObject root = EcoreUtil.create(rootEClass);
+
+		// generate the model
+		modelMutatorConfig.reset();
+		modelMutatorConfig.setRootEObject(root);
+		modelMutatorConfig.setSeed(nextSeed);
+		ModelMutator.generateModel(modelMutatorConfig);
+
+		return root;
+	}
+
+	private void fitSeed(int count) {
+		if (count == seedCount) {
+			return;
+		} else if (count < seedCount) {
+			random = new Random(config.getSeed());
+			seedCount = 0;
+		}
+
+		while (seedCount < count) {
+			random.nextLong();
+			seedCount++;
+		}
+	}
+
+	/**
+	 * Call finish as last action of the {@link EMFDataProvider}. Used for saving the results.
+	 */
+	public void finish() {
+		// create run resource
+		Resource runResource = FuzzyUtil.createResource(FuzzyUtil.ROOT_FOLDER + FuzzyUtil.RUN_FOLDER + config.getId()
+			+ FuzzyUtil.FILE_SUFFIX);
+		runResource.getContents().add(testRun);
+
+		try {
+			runResource.save(null);
+		} catch (IOException e) {
+			throw new RuntimeException("Could not save the run result after running!", e);
+		}
+	}
+
+	/**
+	 * @return How much objects will be created?
+	 */
+	public int size() {
+		return count;
+	}
+
+	/**
+	 * @param testClass The {@link TestClass} of this run.
+	 */
+	public void setTestClass(TestClass testClass) {
+		this.testClass = testClass;
+	}
+
+	/**
+	 * @return The {@link RunListener} of this {@link EMFDataProvider}.
+	 */
+	public List<RunListener> getListener() {
+		return Arrays.asList(new RunListener[] { new EMFRunListener(this, testRun) });
+	}
+
+	/**
+	 * @return all {@link Test}s to run or null if all tests should run.
+	 */
+	public List<Test> getTestsToRun() {
+		if (!filterTests) {
+			return null;
+		}
+
+		// first time load diffResource
+		if (diffResource == null) {
+			try {
+				diffResource = HudsonTestRunProvider.getDiffResource();
+				diffResource.load(null);
+			} catch (IOException e) {
+				throw new RuntimeException("Could not load diff file!", e);
+			} catch (DocumentException e) {
+				throw new RuntimeException("Could not load diff file!", e);
+			}
+		}
+
+		// filter for correct config
+		EList<EObject> contents = diffResource.getContents();
+		List<Test> tests = new ArrayList<Test>();
+		for (EObject obj : contents) {
+			if (obj instanceof DiffReport) {
+				for (TestDiff diff : ((DiffReport) obj).getDiffs()) {
+					if (diff.getConfig().getId().equals(config.getId())) {
+						TestResult result = FuzzyUtil.getValidTestResult(diff);
+						tests.add(new Test(result.getTestName(), result.getSeedCount()));
+					}
+				}
+			}
+		}
+
+		return tests;
+	}
+
+	/**
+	 * @return The current seed used to create the model
+	 */
+	public int getCurrentSeedCount() {
+		return seedCount;
+	}
+
+	/**
+	 * @return The current seed for the {@link ModelMutator}.
+	 */
+	public long getSeed() {
+		return nextSeed;
+	}
+
+	/**
+	 * @return The {@link EPackage} of the model to generate/mutate.
+	 */
+	public Collection<EPackage> getEPackages() {
+		return modelMutatorConfig.getModelPackages();
+	}
+
+	private void fillProperties() {
+		String filterTests = System.getProperty("filterTests");
+		if (filterTests == null) {
+			this.filterTests = false;
+		} else {
+			this.filterTests = Boolean.parseBoolean(filterTests);
+		}
+		configFile = FuzzyUtil.getProperty(PROP_EMFDATAPROVIDER + PROP_CONFIGS_FILE, FuzzyUtil.TEST_CONFIG_PATH);
+	}
+
+	/**
+	 * @return The {@link MutateUtil} for this {@link EMFDataProvider}.
+	 */
+	public Util getUtil() {
+		return new MutateUtil(this);
+	}
+
+	/**
+	 * @return The config specifying this run of the {@link EMFDataProvider}.
+	 */
+	public TestConfig getConfig() {
+		return config;
+	}
+
+	/**
+	 * Set the options for the {@link EMFDataProvider}.
+	 * 
+	 * @param options the options.
+	 */
+	@SuppressWarnings("unchecked")
+	public void setOptions(Map<String, Object> options) {
+		// exc log
+		Object o = options.get(MUTATOR_EXC_LOG);
+		if (o != null && o instanceof Set<?>) {
+			this.modelMutatorConfig.setExceptionLog((Set<RuntimeException>) o);
+		}
+
+		// model mutator editing domain
+		o = options.get(MUTATOR_EDITINGDOMAIN);
+		if (o != null && o instanceof EditingDomain) {
+			this.modelMutatorConfig.setEditingDomain((EditingDomain) o);
+		}
+	}
+
+	/**
+	 * @return The currently active {@link ModelMutatorConfiguration}.
+	 */
+	public ModelMutatorConfiguration getModelMutatorConfiguration() {
+		return modelMutatorConfig;
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/EMFRunListener.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/EMFRunListener.java
new file mode 100644
index 0000000..a9c2c79
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/EMFRunListener.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import junit.framework.AssertionFailedError;
+
+import org.eclipse.emf.emfstore.fuzzy.FuzzyRunner;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+import org.junit.runner.Description;
+import org.junit.runner.Result;
+import org.junit.runner.notification.Failure;
+import org.junit.runner.notification.RunListener;
+
+/**
+ * {@link RunListener} used to create the report of a run of the {@link EMFDataProvider}.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+public class EMFRunListener extends RunListener {
+
+	private TestRun testRun;
+
+	private EMFDataProvider dataProvider;
+
+	private TestResult testResult;
+
+	private long testStartTime;
+
+	private String className;
+
+	/**
+	 * @param dataProvider The {@link EMFDataProvider} containing the infos.
+	 * @param testRun The {@link TestRun} where to save the results.
+	 */
+	public EMFRunListener(EMFDataProvider dataProvider, TestRun testRun) {
+		this.dataProvider = dataProvider;
+		this.testRun = testRun;
+		className = dataProvider.getConfig().getTestClass().getName();
+	}
+
+	@Override
+	public void testRunFinished(Result result) {
+		dataProvider.finish();
+	}
+
+	@Override
+	public void testStarted(Description description) {
+		if (filter(description)) {
+			return;
+		}
+		testResult = ConfigFactory.eINSTANCE.createTestResult();
+		testResult.setTestName(description.getMethodName().split(FuzzyRunner.NAME_SEPARATOR)[0]);
+		testStartTime = System.currentTimeMillis();
+	}
+
+	@Override
+	public void testFinished(Description description) {
+		if (filter(description)) {
+			return;
+		}
+		testResult.setExecutionTime(System.currentTimeMillis() - testStartTime);
+		testResult.setSeedCount(dataProvider.getCurrentSeedCount());
+		testRun.getResults().add(testResult);
+	}
+
+	@Override
+	public void testFailure(Failure failure) {
+		if (filter(failure.getDescription())) {
+			return;
+		}
+		
+		Throwable throwable = failure.getException();
+		StringWriter sw = new StringWriter();
+		PrintWriter pw = new PrintWriter(sw);
+		try{
+			throwable.printStackTrace(new PrintWriter(sw));
+	
+			if (throwable instanceof AssertionFailedError) {
+				testResult.setFailure(sw.toString());
+			} else {
+				testResult.setError(sw.toString());
+			}
+		} finally {
+			try {
+				sw.close();
+			} catch (IOException e) {
+				throw new RuntimeException(e);
+			}
+			pw.close();
+		}
+	}
+
+	private boolean filter(Description description) {
+		return !description.getClassName().equals(className);
+	}
+}
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/FilteredSuite.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/FilteredSuite.java
new file mode 100644
index 0000000..dc8e820
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/FilteredSuite.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.runner.Runner;
+import org.junit.runners.Suite;
+import org.junit.runners.model.InitializationError;
+import org.junit.runners.model.RunnerBuilder;
+
+/**
+ * {@link Suite} to filter tests and run only when runFuzzyTests system property is true. 
+ * 
+ * @author Julian Sommerfeldt
+ *
+ */
+public class FilteredSuite extends Suite {
+
+	private static final String RUN_FUZZY_TESTS = "runFuzzyTests";
+	
+	/**
+	 * Called reflectively on classes annotated with <code>@RunWith(Suite.class)</code>.
+	 * 
+	 * @param klass the root class
+	 * @param builder builds runners for classes in the suite
+	 * @throws InitializationError if a class could not be initialized.
+	 */
+	public FilteredSuite(Class<?> klass, RunnerBuilder builder) throws InitializationError {
+		super(klass, builder);
+	}
+	
+	@Override
+	protected List<Runner> getChildren() {
+		if(Boolean.parseBoolean(System.getProperty(RUN_FUZZY_TESTS))){
+			return super.getChildren();
+		}
+		return new ArrayList<Runner>();
+	}
+}
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/FuzzyUtil.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/FuzzyUtil.java
new file mode 100644
index 0000000..4874a49
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/FuzzyUtil.java
@@ -0,0 +1,200 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+import org.junit.runners.model.TestClass;
+
+/**
+ * Utility class for different methods used in {@link EMFDataProvider} context.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+public final class FuzzyUtil {
+
+	// TODO make folders etc configurable
+	/**
+	 * The main folder containing all files.
+	 */
+	public static final String FUZZY_FOLDER = "fuzzy/";
+
+	/**
+	 * The folder where to put the artifacts.
+	 */
+	public static final String ROOT_FOLDER = "../" + FUZZY_FOLDER;
+
+	/**
+	 * The folder where to store the {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun}s.
+	 */
+	public static final String RUN_FOLDER = "testruns/";
+
+	/**
+	 * The file suffix for the files.
+	 */
+	public static final String FILE_SUFFIX = ".xml";
+
+	/**
+	 * The file containing the {@link TestConfig}s.
+	 */
+	public static final String TEST_CONFIG_FILE = "fuzzyConfig.fuzzy";
+
+	/**
+	 * The path to the TEST_CONFIG_FILE.
+	 */
+	public static final String TEST_CONFIG_PATH = FUZZY_FOLDER + TEST_CONFIG_FILE;
+
+	/**
+	 * The path to the file containing the {@link TestDiff}.
+	 */
+	public static final String DIFF_FILE = ROOT_FOLDER + "diff" + FILE_SUFFIX;
+
+	/**
+	 * The path to the properties file.
+	 */
+	public static final String PROPERTIES_FILE = FUZZY_FOLDER + "fuzzy.properties";
+
+	/**
+	 * The prefix for all fuzzy properties in the properties file.
+	 */
+	public static final String PROP_PRE = "fuzzy";
+
+	private static final AdapterFactoryEditingDomain EDITING_DOMAIN = new AdapterFactoryEditingDomain(
+		new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE), new BasicCommandStack());
+
+	private static Properties properties;
+
+	private FuzzyUtil() {
+	}
+
+	/**
+	 * Searches in the resource for a {@link TestConfig} fitting to the given {@link TestClass}.
+	 * 
+	 * @param resource The resource where to search in.
+	 * @param testClass The TestClass to which the {@link TestConfig} should fit.
+	 * @return The {@link TestConfig} fitting to the {@link TestClass}.
+	 */
+	public static TestConfig getTestConfig(Resource resource, TestClass testClass) {
+		// TODO add a standard TestConfig? e.g. where clazz = null / or testconfig for complete packages
+		for (EObject object : resource.getContents()) {
+			if (object instanceof TestConfig) {
+				TestConfig config = (TestConfig) object;
+				Class<?> clazz = config.getTestClass();
+				if (clazz.getName().equals(testClass.getJavaClass().getName())) {
+					return config;
+				}
+			}
+		}
+
+		throw new IllegalArgumentException("No fitting testconfig for " + testClass.getName() + " in "
+			+ resource.getURI() + " found.");
+	}
+
+	/**
+	 * Checks if a resource contains a {@link TestConfig}.
+	 * 
+	 * @param resource The resource where to search in.
+	 * @param config The {@link TestConfig} to check.
+	 * @return <code>true</code> if the resource contains the {@link TestConfig}, else <code>false</code>.
+	 */
+	public static boolean containsConfig(Resource resource, TestConfig config) {
+		for (EObject obj : resource.getContents()) {
+			if (obj instanceof TestConfig) {
+				TestConfig c = (TestConfig) obj;
+				if (c.getId().equals(config.getId())) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Checks if the resource exists.
+	 * 
+	 * @param resource The {@link Resource} to check.
+	 * @return <code>true</code> if the resource exists, <code>false</code> otherwise.
+	 */
+	public static boolean resourceExists(Resource resource) {
+		return resource.getResourceSet().getURIConverter().exists(resource.getURI(), null);
+	}
+
+	/**
+	 * Create a new {@link Resource}.
+	 * 
+	 * @param fileNameURI The uri of the resource.
+	 * @return The newly created {@link Resource}.
+	 */
+	public static Resource createResource(String fileNameURI) {
+		return EDITING_DOMAIN.createResource(fileNameURI);
+	}
+
+	/**
+	 * Get a valid {@link TestResult} out of a {@link TestDiff}. Valid means non null.
+	 * 
+	 * @param diff The {@link TestDiff} containing the {@link TestResult}.
+	 * @return The valid {@link TestResult} of the {@link TestDiff}.
+	 */
+	public static TestResult getValidTestResult(TestDiff diff) {
+		TestResult result = diff.getOldResult();
+		if (result != null) {
+			return result;
+		}
+		result = diff.getNewResult();
+		if (result != null) {
+			return result;
+		}
+		throw new RuntimeException("Configuration of TestDiff is wrong! (Does not contain any TestResult)");
+	}
+
+	/**
+	 * Get a property out of the properties file.
+	 * 
+	 * @param key The key of the property.
+	 * @param defaultValue The value if the properties do not contain the key.
+	 * @return The value if the properties contain the key or the defaultValue if not.
+	 */
+	public static String getProperty(String key, String defaultValue) {
+		initProperties();
+		return properties.getProperty(PROP_PRE + key, defaultValue);
+	}
+
+	private static void initProperties() {
+		if (properties != null) {
+			return;
+		}
+
+		File file = new File(PROPERTIES_FILE);
+		properties = new Properties();
+
+		if (file.exists()) {
+			try {
+				FileInputStream fs = new FileInputStream(file);
+				properties.load(fs);
+				fs.close();
+			} catch (IOException e) {
+				throw new RuntimeException("Could not load properties from " + file.getAbsolutePath(), e);
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/MutateUtil.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/MutateUtil.java
new file mode 100644
index 0000000..0e2bf33
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/MutateUtil.java
@@ -0,0 +1,153 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.eclipse.emf.emfstore.fuzzy.Util;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutator;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorConfiguration;
+
+/**
+ * A {@link Util} class for tests using the {@link EMFDataProvider}.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+public class MutateUtil implements Util {
+
+	private EMFDataProvider dataProvider;
+
+	/**
+	 * For internal use.
+	 * 
+	 * @param dataProvider The {@link EMFDataProvider} of the test.
+	 */
+	public MutateUtil(EMFDataProvider dataProvider) {
+		this.dataProvider = dataProvider;
+	}
+
+	/**
+	 * @return The {@link EPackage} of the {@link EMFDataProvider}.
+	 */
+	public Collection<EPackage> getEPackages() {
+		return dataProvider.getEPackages();
+	}
+
+	/**
+	 * @return The minimum objects count of the current {@link ModelMutatorConfiguration} of the {@link EMFDataProvider}
+	 *         .
+	 */
+	public int getMinObjectsCount() {
+		return dataProvider.getModelMutatorConfiguration().getMinObjectsCount();
+	}
+
+	/**
+	 * @return The seed of the {@link EMFDataProvider}.
+	 */
+	public long getSeed() {
+		return dataProvider.getSeed();
+	}
+
+	/**
+	 * @return The current seed (run) of the {@link EMFDataProvider}.
+	 */
+	public int getSeedCount() {
+		return dataProvider.getCurrentSeedCount();
+	}
+
+	/**
+	 * @return The EClasses to ignore in the current {@link ModelMutatorConfiguration}.
+	 */
+	public Collection<EClass> getEClassesToIgnore() {
+		return dataProvider.getModelMutatorConfiguration().geteClassesToIgnore();
+	}
+
+	/**
+	 * @return The {@link EStructuralFeature}s to ignore in the current {@link ModelMutatorConfiguration}.
+	 */
+	public Collection<EStructuralFeature> getEStructuralFeaturesToIgnore() {
+		return dataProvider.getModelMutatorConfiguration().geteStructuralFeaturesToIgnore();
+	}
+
+	/**
+	 * Mutate with a {@link ModelMutatorConfiguration}.
+	 * 
+	 * @param mmc The {@link ModelMutatorConfiguration} to use for mutation.
+	 */
+	public void mutate(final ModelMutatorConfiguration mmc) {
+		ModelMutator.changeModel(mmc);
+	}
+
+	/**
+	 * @see #saveEObject(EObject, String)
+	 * 
+	 * @param obj The {@link EObject} to save.
+	 */
+	public void saveEObject(EObject obj) {
+		saveEObject(obj, null, true);
+	}
+
+	/**
+	 * Save an {@link EObject} in the folder: artifacts/runs/configID.
+	 * 
+	 * Use it for instance to save objects, when an error occurs.
+	 * 
+	 * The file name is always: COUNT_SUFFIX.xml so e.g. 3_testFile.xml
+	 * 
+	 * @param obj The EObject to save.
+	 * @param suffix The suffix of the file: e.g. testFile. <code>null</code> permitted.
+	 * @param discardDanglingHREF Should the save ignore dangling hrefs?
+	 */
+	public void saveEObject(EObject obj, String suffix, boolean discardDanglingHREF) {
+		Resource resource = FuzzyUtil.createResource(getRunResourcePath(suffix));
+		resource.getContents().add(obj);
+
+		try {
+			Map<Object, Object> options = new HashMap<Object, Object>();
+			if (discardDanglingHREF) {
+				options.put(XMLResource.OPTION_PROCESS_DANGLING_HREF, XMLResource.OPTION_PROCESS_DANGLING_HREF_DISCARD);
+			}
+			resource.save(options);
+		} catch (IOException e) {
+			throw new RuntimeException("Could not save the eobject: " + obj, e);
+		}
+	}
+
+	/**
+	 * @param suffix The suffix for the file: e.g. testFile. <code>null</code> permitted.
+	 * @return A file path to the current run folder.
+	 */
+	public String getRunResourcePath(String suffix) {
+		String toAdd = (suffix == null || "".equals(suffix)) ? "" : "_" + suffix;
+		return FuzzyUtil.ROOT_FOLDER + FuzzyUtil.RUN_FOLDER + dataProvider.getConfig().getId() + "/"
+			+ dataProvider.getCurrentSeedCount() + toAdd + FuzzyUtil.FILE_SUFFIX;
+	}
+
+	/**
+	 * 
+	 * @param suffix The suffix for the file: e.g. testFile. <code>null</code> permitted.
+	 * @return A file {@link URI} to the current run folder.
+	 */
+	public URI getRunResourceURI(String suffix) {
+		return URI.createFileURI(getRunResourcePath(suffix));
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/ConfigFactory.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/ConfigFactory.java
new file mode 100644
index 0000000..563c495
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/ConfigFactory.java
@@ -0,0 +1,114 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * 
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage
+ * @generated
+ */
+public interface ConfigFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	ConfigFactory eINSTANCE = org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Test Config</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return a new object of class '<em>Test Config</em>'.
+	 * @generated
+	 */
+	TestConfig createTestConfig();
+
+	/**
+	 * Returns a new object of class '<em>Test Run</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return a new object of class '<em>Test Run</em>'.
+	 * @generated
+	 */
+	TestRun createTestRun();
+
+	/**
+	 * Returns a new object of class '<em>Test Result</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return a new object of class '<em>Test Result</em>'.
+	 * @generated
+	 */
+	TestResult createTestResult();
+
+	/**
+	 * Returns a new object of class '<em>Test Diff</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return a new object of class '<em>Test Diff</em>'.
+	 * @generated
+	 */
+	TestDiff createTestDiff();
+
+	/**
+	 * Returns a new object of class '<em>Diff Report</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return a new object of class '<em>Diff Report</em>'.
+	 * @generated
+	 */
+	DiffReport createDiffReport();
+
+	/**
+	 * Returns a new object of class '<em>Root</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return a new object of class '<em>Root</em>'.
+	 * @generated
+	 */
+	Root createRoot();
+
+	/**
+	 * Returns a new object of class '<em>Mutator Config</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return a new object of class '<em>Mutator Config</em>'.
+	 * @generated
+	 */
+	MutatorConfig createMutatorConfig();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	ConfigPackage getConfigPackage();
+
+} // ConfigFactory
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/ConfigPackage.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/ConfigPackage.java
new file mode 100644
index 0000000..06fa0ce
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/ConfigPackage.java
@@ -0,0 +1,1316 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * 
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ConfigPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	String eNAME = "config";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	String eNS_URI = "http://org/eclipse/emf/emfstore/fuzzy/emf/config";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.emf.emfstore.fuzzy.emf.config";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	ConfigPackage eINSTANCE = org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestConfigImpl
+	 * <em>Test Config</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestConfigImpl
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getTestConfig()
+	 * @generated
+	 */
+	int TEST_CONFIG = 0;
+
+	/**
+	 * The feature id for the '<em><b>Seed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_CONFIG__SEED = 0;
+
+	/**
+	 * The feature id for the '<em><b>Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_CONFIG__COUNT = 1;
+
+	/**
+	 * The feature id for the '<em><b>Test Class</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_CONFIG__TEST_CLASS = 2;
+
+	/**
+	 * The feature id for the '<em><b>Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_CONFIG__ID = 3;
+
+	/**
+	 * The feature id for the '<em><b>Mutator Config</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_CONFIG__MUTATOR_CONFIG = 4;
+
+	/**
+	 * The number of structural features of the '<em>Test Config</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_CONFIG_FEATURE_COUNT = 5;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestRunImpl <em>Test Run</em>}'
+	 * class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestRunImpl
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getTestRun()
+	 * @generated
+	 */
+	int TEST_RUN = 1;
+
+	/**
+	 * The feature id for the '<em><b>Config</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_RUN__CONFIG = 0;
+
+	/**
+	 * The feature id for the '<em><b>Time</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_RUN__TIME = 1;
+
+	/**
+	 * The feature id for the '<em><b>Results</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_RUN__RESULTS = 2;
+
+	/**
+	 * The number of structural features of the '<em>Test Run</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_RUN_FEATURE_COUNT = 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestResultImpl
+	 * <em>Test Result</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestResultImpl
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getTestResult()
+	 * @generated
+	 */
+	int TEST_RESULT = 2;
+
+	/**
+	 * The feature id for the '<em><b>Seed Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_RESULT__SEED_COUNT = 0;
+
+	/**
+	 * The feature id for the '<em><b>Test Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_RESULT__TEST_NAME = 1;
+
+	/**
+	 * The feature id for the '<em><b>Error</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_RESULT__ERROR = 2;
+
+	/**
+	 * The feature id for the '<em><b>Failure</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_RESULT__FAILURE = 3;
+
+	/**
+	 * The feature id for the '<em><b>Execution Time</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_RESULT__EXECUTION_TIME = 4;
+
+	/**
+	 * The number of structural features of the '<em>Test Result</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_RESULT_FEATURE_COUNT = 5;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestDiffImpl
+	 * <em>Test Diff</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestDiffImpl
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getTestDiff()
+	 * @generated
+	 */
+	int TEST_DIFF = 3;
+
+	/**
+	 * The feature id for the '<em><b>Last Update</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DIFF__LAST_UPDATE = 0;
+
+	/**
+	 * The feature id for the '<em><b>Config</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DIFF__CONFIG = 1;
+
+	/**
+	 * The feature id for the '<em><b>Old Result</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DIFF__OLD_RESULT = 2;
+
+	/**
+	 * The feature id for the '<em><b>New Result</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DIFF__NEW_RESULT = 3;
+
+	/**
+	 * The number of structural features of the '<em>Test Diff</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DIFF_FEATURE_COUNT = 4;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.DiffReportImpl
+	 * <em>Diff Report</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.DiffReportImpl
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getDiffReport()
+	 * @generated
+	 */
+	int DIFF_REPORT = 4;
+
+	/**
+	 * The feature id for the '<em><b>Diffs</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int DIFF_REPORT__DIFFS = 0;
+
+	/**
+	 * The number of structural features of the '<em>Diff Report</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int DIFF_REPORT_FEATURE_COUNT = 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.RootImpl <em>Root</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.RootImpl
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getRoot()
+	 * @generated
+	 */
+	int ROOT = 5;
+
+	/**
+	 * The feature id for the '<em><b>Elements</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int ROOT__ELEMENTS = 0;
+
+	/**
+	 * The number of structural features of the '<em>Root</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int ROOT_FEATURE_COUNT = 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl
+	 * <em>Mutator Config</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getMutatorConfig()
+	 * @generated
+	 */
+	int MUTATOR_CONFIG = 6;
+
+	/**
+	 * The feature id for the '<em><b>Root EClass</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int MUTATOR_CONFIG__ROOT_ECLASS = 0;
+
+	/**
+	 * The feature id for the '<em><b>Min Objects Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int MUTATOR_CONFIG__MIN_OBJECTS_COUNT = 1;
+
+	/**
+	 * The feature id for the '<em><b>Ignore And Log</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int MUTATOR_CONFIG__IGNORE_AND_LOG = 2;
+
+	/**
+	 * The feature id for the '<em><b>Do Not Generate Root</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int MUTATOR_CONFIG__DO_NOT_GENERATE_ROOT = 3;
+
+	/**
+	 * The feature id for the '<em><b>Use Ecore Util Delete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int MUTATOR_CONFIG__USE_ECORE_UTIL_DELETE = 4;
+
+	/**
+	 * The feature id for the '<em><b>EClasses To Ignore</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int MUTATOR_CONFIG__ECLASSES_TO_IGNORE = 5;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Features To Ignore</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int MUTATOR_CONFIG__ESTRUCTURAL_FEATURES_TO_IGNORE = 6;
+
+	/**
+	 * The feature id for the '<em><b>EPackages</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int MUTATOR_CONFIG__EPACKAGES = 7;
+
+	/**
+	 * The feature id for the '<em><b>Max Delete Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int MUTATOR_CONFIG__MAX_DELETE_COUNT = 8;
+
+	/**
+	 * The number of structural features of the '<em>Mutator Config</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int MUTATOR_CONFIG_FEATURE_COUNT = 9;
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig
+	 * <em>Test Config</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for class '<em>Test Config</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig
+	 * @generated
+	 */
+	EClass getTestConfig();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getSeed
+	 * <em>Seed</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the attribute '<em>Seed</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getSeed()
+	 * @see #getTestConfig()
+	 * @generated
+	 */
+	EAttribute getTestConfig_Seed();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getCount
+	 * <em>Count</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the attribute '<em>Count</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getCount()
+	 * @see #getTestConfig()
+	 * @generated
+	 */
+	EAttribute getTestConfig_Count();
+
+	/**
+	 * Returns the meta object for the attribute '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getTestClass <em>Test Class</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the attribute '<em>Test Class</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getTestClass()
+	 * @see #getTestConfig()
+	 * @generated
+	 */
+	EAttribute getTestConfig_TestClass();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getId
+	 * <em>Id</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the attribute '<em>Id</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getId()
+	 * @see #getTestConfig()
+	 * @generated
+	 */
+	EAttribute getTestConfig_Id();
+
+	/**
+	 * Returns the meta object for the containment reference '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getMutatorConfig <em>Mutator Config</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the containment reference '<em>Mutator Config</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getMutatorConfig()
+	 * @see #getTestConfig()
+	 * @generated
+	 */
+	EReference getTestConfig_MutatorConfig();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun <em>Test Run</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for class '<em>Test Run</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun
+	 * @generated
+	 */
+	EClass getTestRun();
+
+	/**
+	 * Returns the meta object for the containment reference '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getConfig <em>Config</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the containment reference '<em>Config</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getConfig()
+	 * @see #getTestRun()
+	 * @generated
+	 */
+	EReference getTestRun_Config();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getTime
+	 * <em>Time</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the attribute '<em>Time</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getTime()
+	 * @see #getTestRun()
+	 * @generated
+	 */
+	EAttribute getTestRun_Time();
+
+	/**
+	 * Returns the meta object for the containment reference list '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getResults <em>Results</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the containment reference list '<em>Results</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getResults()
+	 * @see #getTestRun()
+	 * @generated
+	 */
+	EReference getTestRun_Results();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult
+	 * <em>Test Result</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for class '<em>Test Result</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult
+	 * @generated
+	 */
+	EClass getTestResult();
+
+	/**
+	 * Returns the meta object for the attribute '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getSeedCount <em>Seed Count</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the attribute '<em>Seed Count</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getSeedCount()
+	 * @see #getTestResult()
+	 * @generated
+	 */
+	EAttribute getTestResult_SeedCount();
+
+	/**
+	 * Returns the meta object for the attribute '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getTestName <em>Test Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the attribute '<em>Test Name</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getTestName()
+	 * @see #getTestResult()
+	 * @generated
+	 */
+	EAttribute getTestResult_TestName();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getError
+	 * <em>Error</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the attribute '<em>Error</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getError()
+	 * @see #getTestResult()
+	 * @generated
+	 */
+	EAttribute getTestResult_Error();
+
+	/**
+	 * Returns the meta object for the attribute '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getFailure <em>Failure</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the attribute '<em>Failure</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getFailure()
+	 * @see #getTestResult()
+	 * @generated
+	 */
+	EAttribute getTestResult_Failure();
+
+	/**
+	 * Returns the meta object for the attribute '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getExecutionTime <em>Execution Time</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the attribute '<em>Execution Time</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getExecutionTime()
+	 * @see #getTestResult()
+	 * @generated
+	 */
+	EAttribute getTestResult_ExecutionTime();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff <em>Test Diff</em>}
+	 * '.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for class '<em>Test Diff</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff
+	 * @generated
+	 */
+	EClass getTestDiff();
+
+	/**
+	 * Returns the meta object for the attribute '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getLastUpdate <em>Last Update</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the attribute '<em>Last Update</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getLastUpdate()
+	 * @see #getTestDiff()
+	 * @generated
+	 */
+	EAttribute getTestDiff_LastUpdate();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getConfig
+	 * <em>Config</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the reference '<em>Config</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getConfig()
+	 * @see #getTestDiff()
+	 * @generated
+	 */
+	EReference getTestDiff_Config();
+
+	/**
+	 * Returns the meta object for the containment reference '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getOldResult <em>Old Result</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the containment reference '<em>Old Result</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getOldResult()
+	 * @see #getTestDiff()
+	 * @generated
+	 */
+	EReference getTestDiff_OldResult();
+
+	/**
+	 * Returns the meta object for the containment reference '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getNewResult <em>New Result</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the containment reference '<em>New Result</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getNewResult()
+	 * @see #getTestDiff()
+	 * @generated
+	 */
+	EReference getTestDiff_NewResult();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport
+	 * <em>Diff Report</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for class '<em>Diff Report</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport
+	 * @generated
+	 */
+	EClass getDiffReport();
+
+	/**
+	 * Returns the meta object for the containment reference list '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport#getDiffs <em>Diffs</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the containment reference list '<em>Diffs</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport#getDiffs()
+	 * @see #getDiffReport()
+	 * @generated
+	 */
+	EReference getDiffReport_Diffs();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.Root <em>Root</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for class '<em>Root</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.Root
+	 * @generated
+	 */
+	EClass getRoot();
+
+	/**
+	 * Returns the meta object for the containment reference list '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.Root#getElements <em>Elements</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the containment reference list '<em>Elements</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.Root#getElements()
+	 * @see #getRoot()
+	 * @generated
+	 */
+	EReference getRoot_Elements();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig
+	 * <em>Mutator Config</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for class '<em>Mutator Config</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig
+	 * @generated
+	 */
+	EClass getMutatorConfig();
+
+	/**
+	 * Returns the meta object for the reference '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getRootEClass <em>Root EClass</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the reference '<em>Root EClass</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getRootEClass()
+	 * @see #getMutatorConfig()
+	 * @generated
+	 */
+	EReference getMutatorConfig_RootEClass();
+
+	/**
+	 * Returns the meta object for the attribute '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getMinObjectsCount <em>Min Objects Count</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the attribute '<em>Min Objects Count</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getMinObjectsCount()
+	 * @see #getMutatorConfig()
+	 * @generated
+	 */
+	EAttribute getMutatorConfig_MinObjectsCount();
+
+	/**
+	 * Returns the meta object for the attribute '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isIgnoreAndLog <em>Ignore And Log</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the attribute '<em>Ignore And Log</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isIgnoreAndLog()
+	 * @see #getMutatorConfig()
+	 * @generated
+	 */
+	EAttribute getMutatorConfig_IgnoreAndLog();
+
+	/**
+	 * Returns the meta object for the attribute '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isDoNotGenerateRoot <em>Do Not Generate Root</em>}
+	 * '.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the attribute '<em>Do Not Generate Root</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isDoNotGenerateRoot()
+	 * @see #getMutatorConfig()
+	 * @generated
+	 */
+	EAttribute getMutatorConfig_DoNotGenerateRoot();
+
+	/**
+	 * Returns the meta object for the attribute '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isUseEcoreUtilDelete
+	 * <em>Use Ecore Util Delete</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the attribute '<em>Use Ecore Util Delete</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isUseEcoreUtilDelete()
+	 * @see #getMutatorConfig()
+	 * @generated
+	 */
+	EAttribute getMutatorConfig_UseEcoreUtilDelete();
+
+	/**
+	 * Returns the meta object for the reference list '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getEClassesToIgnore <em>EClasses To Ignore</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the reference list '<em>EClasses To Ignore</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getEClassesToIgnore()
+	 * @see #getMutatorConfig()
+	 * @generated
+	 */
+	EReference getMutatorConfig_EClassesToIgnore();
+
+	/**
+	 * Returns the meta object for the reference list '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getEStructuralFeaturesToIgnore
+	 * <em>EStructural Features To Ignore</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the reference list '<em>EStructural Features To Ignore</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getEStructuralFeaturesToIgnore()
+	 * @see #getMutatorConfig()
+	 * @generated
+	 */
+	EReference getMutatorConfig_EStructuralFeaturesToIgnore();
+
+	/**
+	 * Returns the meta object for the reference list '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getEPackages <em>EPackages</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the reference list '<em>EPackages</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getEPackages()
+	 * @see #getMutatorConfig()
+	 * @generated
+	 */
+	EReference getMutatorConfig_EPackages();
+
+	/**
+	 * Returns the meta object for the attribute '
+	 * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getMaxDeleteCount <em>Max Delete Count</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the attribute '<em>Max Delete Count</em>'.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getMaxDeleteCount()
+	 * @see #getMutatorConfig()
+	 * @generated
+	 */
+	EAttribute getMutatorConfig_MaxDeleteCount();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	ConfigFactory getConfigFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 * <li>each class,</li>
+	 * <li>each feature of each class,</li>
+	 * <li>each enum,</li>
+	 * <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestConfigImpl
+		 * <em>Test Config</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestConfigImpl
+		 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getTestConfig()
+		 * @generated
+		 */
+		EClass TEST_CONFIG = eINSTANCE.getTestConfig();
+
+		/**
+		 * The meta object literal for the '<em><b>Seed</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EAttribute TEST_CONFIG__SEED = eINSTANCE.getTestConfig_Seed();
+
+		/**
+		 * The meta object literal for the '<em><b>Count</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EAttribute TEST_CONFIG__COUNT = eINSTANCE.getTestConfig_Count();
+
+		/**
+		 * The meta object literal for the '<em><b>Test Class</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EAttribute TEST_CONFIG__TEST_CLASS = eINSTANCE.getTestConfig_TestClass();
+
+		/**
+		 * The meta object literal for the '<em><b>Id</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EAttribute TEST_CONFIG__ID = eINSTANCE.getTestConfig_Id();
+
+		/**
+		 * The meta object literal for the '<em><b>Mutator Config</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EReference TEST_CONFIG__MUTATOR_CONFIG = eINSTANCE.getTestConfig_MutatorConfig();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestRunImpl
+		 * <em>Test Run</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestRunImpl
+		 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getTestRun()
+		 * @generated
+		 */
+		EClass TEST_RUN = eINSTANCE.getTestRun();
+
+		/**
+		 * The meta object literal for the '<em><b>Config</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EReference TEST_RUN__CONFIG = eINSTANCE.getTestRun_Config();
+
+		/**
+		 * The meta object literal for the '<em><b>Time</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EAttribute TEST_RUN__TIME = eINSTANCE.getTestRun_Time();
+
+		/**
+		 * The meta object literal for the '<em><b>Results</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EReference TEST_RUN__RESULTS = eINSTANCE.getTestRun_Results();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestResultImpl
+		 * <em>Test Result</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestResultImpl
+		 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getTestResult()
+		 * @generated
+		 */
+		EClass TEST_RESULT = eINSTANCE.getTestResult();
+
+		/**
+		 * The meta object literal for the '<em><b>Seed Count</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EAttribute TEST_RESULT__SEED_COUNT = eINSTANCE.getTestResult_SeedCount();
+
+		/**
+		 * The meta object literal for the '<em><b>Test Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EAttribute TEST_RESULT__TEST_NAME = eINSTANCE.getTestResult_TestName();
+
+		/**
+		 * The meta object literal for the '<em><b>Error</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EAttribute TEST_RESULT__ERROR = eINSTANCE.getTestResult_Error();
+
+		/**
+		 * The meta object literal for the '<em><b>Failure</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EAttribute TEST_RESULT__FAILURE = eINSTANCE.getTestResult_Failure();
+
+		/**
+		 * The meta object literal for the '<em><b>Execution Time</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EAttribute TEST_RESULT__EXECUTION_TIME = eINSTANCE.getTestResult_ExecutionTime();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestDiffImpl
+		 * <em>Test Diff</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestDiffImpl
+		 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getTestDiff()
+		 * @generated
+		 */
+		EClass TEST_DIFF = eINSTANCE.getTestDiff();
+
+		/**
+		 * The meta object literal for the '<em><b>Last Update</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EAttribute TEST_DIFF__LAST_UPDATE = eINSTANCE.getTestDiff_LastUpdate();
+
+		/**
+		 * The meta object literal for the '<em><b>Config</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EReference TEST_DIFF__CONFIG = eINSTANCE.getTestDiff_Config();
+
+		/**
+		 * The meta object literal for the '<em><b>Old Result</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EReference TEST_DIFF__OLD_RESULT = eINSTANCE.getTestDiff_OldResult();
+
+		/**
+		 * The meta object literal for the '<em><b>New Result</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EReference TEST_DIFF__NEW_RESULT = eINSTANCE.getTestDiff_NewResult();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.DiffReportImpl
+		 * <em>Diff Report</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.DiffReportImpl
+		 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getDiffReport()
+		 * @generated
+		 */
+		EClass DIFF_REPORT = eINSTANCE.getDiffReport();
+
+		/**
+		 * The meta object literal for the '<em><b>Diffs</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EReference DIFF_REPORT__DIFFS = eINSTANCE.getDiffReport_Diffs();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.RootImpl
+		 * <em>Root</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.RootImpl
+		 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getRoot()
+		 * @generated
+		 */
+		EClass ROOT = eINSTANCE.getRoot();
+
+		/**
+		 * The meta object literal for the '<em><b>Elements</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EReference ROOT__ELEMENTS = eINSTANCE.getRoot_Elements();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl
+		 * <em>Mutator Config</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl
+		 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getMutatorConfig()
+		 * @generated
+		 */
+		EClass MUTATOR_CONFIG = eINSTANCE.getMutatorConfig();
+
+		/**
+		 * The meta object literal for the '<em><b>Root EClass</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EReference MUTATOR_CONFIG__ROOT_ECLASS = eINSTANCE.getMutatorConfig_RootEClass();
+
+		/**
+		 * The meta object literal for the '<em><b>Min Objects Count</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EAttribute MUTATOR_CONFIG__MIN_OBJECTS_COUNT = eINSTANCE.getMutatorConfig_MinObjectsCount();
+
+		/**
+		 * The meta object literal for the '<em><b>Ignore And Log</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EAttribute MUTATOR_CONFIG__IGNORE_AND_LOG = eINSTANCE.getMutatorConfig_IgnoreAndLog();
+
+		/**
+		 * The meta object literal for the '<em><b>Do Not Generate Root</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EAttribute MUTATOR_CONFIG__DO_NOT_GENERATE_ROOT = eINSTANCE.getMutatorConfig_DoNotGenerateRoot();
+
+		/**
+		 * The meta object literal for the '<em><b>Use Ecore Util Delete</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EAttribute MUTATOR_CONFIG__USE_ECORE_UTIL_DELETE = eINSTANCE.getMutatorConfig_UseEcoreUtilDelete();
+
+		/**
+		 * The meta object literal for the '<em><b>EClasses To Ignore</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EReference MUTATOR_CONFIG__ECLASSES_TO_IGNORE = eINSTANCE.getMutatorConfig_EClassesToIgnore();
+
+		/**
+		 * The meta object literal for the '<em><b>EStructural Features To Ignore</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EReference MUTATOR_CONFIG__ESTRUCTURAL_FEATURES_TO_IGNORE = eINSTANCE
+			.getMutatorConfig_EStructuralFeaturesToIgnore();
+
+		/**
+		 * The meta object literal for the '<em><b>EPackages</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EReference MUTATOR_CONFIG__EPACKAGES = eINSTANCE.getMutatorConfig_EPackages();
+
+		/**
+		 * The meta object literal for the '<em><b>Max Delete Count</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EAttribute MUTATOR_CONFIG__MAX_DELETE_COUNT = eINSTANCE.getMutatorConfig_MaxDeleteCount();
+
+	}
+
+} // ConfigPackage
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/DiffReport.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/DiffReport.java
new file mode 100644
index 0000000..0a61d81
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/DiffReport.java
@@ -0,0 +1,51 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Diff Report</b></em>'.
+ * <!-- end-user-doc -->
+ * 
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport#getDiffs <em>Diffs</em>}</li>
+ * </ul>
+ * </p>
+ * 
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getDiffReport()
+ * @model
+ * @generated
+ */
+public interface DiffReport extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Diffs</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Diffs</em>' containment reference list isn't clear, there really should be more of a
+	 * description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Diffs</em>' containment reference list.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getDiffReport_Diffs()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<TestDiff> getDiffs();
+
+} // DiffReport
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/MutatorConfig.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/MutatorConfig.java
new file mode 100644
index 0000000..914be59
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/MutatorConfig.java
@@ -0,0 +1,277 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Mutator Config</b></em>'.
+ * <!-- end-user-doc -->
+ * 
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getRootEClass <em>Root EClass</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getMinObjectsCount <em>Min Objects Count</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isIgnoreAndLog <em>Ignore And Log</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isDoNotGenerateRoot <em>Do Not Generate Root</em>}
+ * </li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isUseEcoreUtilDelete <em>Use Ecore Util Delete
+ * </em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getEClassesToIgnore <em>EClasses To Ignore</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getEStructuralFeaturesToIgnore <em>EStructural
+ * Features To Ignore</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getEPackages <em>EPackages</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getMaxDeleteCount <em>Max Delete Count</em>}</li>
+ * </ul>
+ * </p>
+ * 
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getMutatorConfig()
+ * @model
+ * @generated
+ */
+public interface MutatorConfig extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Root EClass</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Root EClass</em>' reference isn't clear, there really should be more of a description
+	 * here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Root EClass</em>' reference.
+	 * @see #setRootEClass(EClass)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getMutatorConfig_RootEClass()
+	 * @model
+	 * @generated
+	 */
+	EClass getRootEClass();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getRootEClass
+	 * <em>Root EClass</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Root EClass</em>' reference.
+	 * @see #getRootEClass()
+	 * @generated
+	 */
+	void setRootEClass(EClass value);
+
+	/**
+	 * Returns the value of the '<em><b>Min Objects Count</b></em>' attribute.
+	 * The default value is <code>"100"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Min Objects Count</em>' attribute isn't clear, there really should be more of a
+	 * description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Min Objects Count</em>' attribute.
+	 * @see #setMinObjectsCount(int)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getMutatorConfig_MinObjectsCount()
+	 * @model default="100"
+	 * @generated
+	 */
+	int getMinObjectsCount();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getMinObjectsCount
+	 * <em>Min Objects Count</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Min Objects Count</em>' attribute.
+	 * @see #getMinObjectsCount()
+	 * @generated
+	 */
+	void setMinObjectsCount(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Ignore And Log</b></em>' attribute.
+	 * The default value is <code>"false"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Ignore And Log</em>' attribute isn't clear, there really should be more of a
+	 * description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Ignore And Log</em>' attribute.
+	 * @see #setIgnoreAndLog(boolean)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getMutatorConfig_IgnoreAndLog()
+	 * @model default="false"
+	 * @generated
+	 */
+	boolean isIgnoreAndLog();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isIgnoreAndLog
+	 * <em>Ignore And Log</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Ignore And Log</em>' attribute.
+	 * @see #isIgnoreAndLog()
+	 * @generated
+	 */
+	void setIgnoreAndLog(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Do Not Generate Root</b></em>' attribute.
+	 * The default value is <code>"false"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Do Not Generate Root</em>' attribute isn't clear, there really should be more of a
+	 * description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Do Not Generate Root</em>' attribute.
+	 * @see #setDoNotGenerateRoot(boolean)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getMutatorConfig_DoNotGenerateRoot()
+	 * @model default="false"
+	 * @generated
+	 */
+	boolean isDoNotGenerateRoot();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isDoNotGenerateRoot
+	 * <em>Do Not Generate Root</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Do Not Generate Root</em>' attribute.
+	 * @see #isDoNotGenerateRoot()
+	 * @generated
+	 */
+	void setDoNotGenerateRoot(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Use Ecore Util Delete</b></em>' attribute.
+	 * The default value is <code>"false"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Use Ecore Util Delete</em>' attribute isn't clear, there really should be more of a
+	 * description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Use Ecore Util Delete</em>' attribute.
+	 * @see #setUseEcoreUtilDelete(boolean)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getMutatorConfig_UseEcoreUtilDelete()
+	 * @model default="false"
+	 * @generated
+	 */
+	boolean isUseEcoreUtilDelete();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isUseEcoreUtilDelete
+	 * <em>Use Ecore Util Delete</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Use Ecore Util Delete</em>' attribute.
+	 * @see #isUseEcoreUtilDelete()
+	 * @generated
+	 */
+	void setUseEcoreUtilDelete(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>EClasses To Ignore</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.emf.ecore.EClass}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>EClasses To Ignore</em>' reference list isn't clear, there really should be more of a
+	 * description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>EClasses To Ignore</em>' reference list.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getMutatorConfig_EClassesToIgnore()
+	 * @model
+	 * @generated
+	 */
+	EList<EClass> getEClassesToIgnore();
+
+	/**
+	 * Returns the value of the '<em><b>EStructural Features To Ignore</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.emf.ecore.EStructuralFeature}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>EStructural Features To Ignore</em>' reference list isn't clear, there really should
+	 * be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>EStructural Features To Ignore</em>' reference list.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getMutatorConfig_EStructuralFeaturesToIgnore()
+	 * @model
+	 * @generated
+	 */
+	EList<EStructuralFeature> getEStructuralFeaturesToIgnore();
+
+	/**
+	 * Returns the value of the '<em><b>EPackages</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.emf.ecore.EPackage}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>EPackages</em>' reference list isn't clear, there really should be more of a
+	 * description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>EPackages</em>' reference list.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getMutatorConfig_EPackages()
+	 * @model
+	 * @generated
+	 */
+	EList<EPackage> getEPackages();
+
+	/**
+	 * Returns the value of the '<em><b>Max Delete Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Max Delete Count</em>' attribute isn't clear, there really should be more of a
+	 * description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Max Delete Count</em>' attribute.
+	 * @see #setMaxDeleteCount(Integer)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getMutatorConfig_MaxDeleteCount()
+	 * @model
+	 * @generated
+	 */
+	Integer getMaxDeleteCount();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getMaxDeleteCount
+	 * <em>Max Delete Count</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Max Delete Count</em>' attribute.
+	 * @see #getMaxDeleteCount()
+	 * @generated
+	 */
+	void setMaxDeleteCount(Integer value);
+
+} // MutatorConfig
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/Root.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/Root.java
new file mode 100644
index 0000000..b01afbc
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/Root.java
@@ -0,0 +1,51 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Root</b></em>'.
+ * <!-- end-user-doc -->
+ * 
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.Root#getElements <em>Elements</em>}</li>
+ * </ul>
+ * </p>
+ * 
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getRoot()
+ * @model
+ * @generated
+ */
+public interface Root extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Elements</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.emf.ecore.EObject}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Elements</em>' containment reference list isn't clear, there really should be more of
+	 * a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Elements</em>' containment reference list.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getRoot_Elements()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<EObject> getElements();
+
+} // Root
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestConfig.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestConfig.java
new file mode 100644
index 0000000..6abc4bd
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestConfig.java
@@ -0,0 +1,178 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Test Config</b></em>'.
+ * <!-- end-user-doc -->
+ * 
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getSeed <em>Seed</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getCount <em>Count</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getTestClass <em>Test Class</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getId <em>Id</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getMutatorConfig <em>Mutator Config</em>}</li>
+ * </ul>
+ * </p>
+ * 
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestConfig()
+ * @model
+ * @generated
+ */
+public interface TestConfig extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Seed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Seed</em>' attribute isn't clear, there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Seed</em>' attribute.
+	 * @see #setSeed(long)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestConfig_Seed()
+	 * @model
+	 * @generated
+	 */
+	long getSeed();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getSeed <em>Seed</em>}'
+	 * attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Seed</em>' attribute.
+	 * @see #getSeed()
+	 * @generated
+	 */
+	void setSeed(long value);
+
+	/**
+	 * Returns the value of the '<em><b>Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Count</em>' attribute isn't clear, there really should be more of a description
+	 * here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Count</em>' attribute.
+	 * @see #setCount(int)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestConfig_Count()
+	 * @model
+	 * @generated
+	 */
+	int getCount();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getCount <em>Count</em>}'
+	 * attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Count</em>' attribute.
+	 * @see #getCount()
+	 * @generated
+	 */
+	void setCount(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Test Class</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Test Class</em>' attribute isn't clear, there really should be more of a description
+	 * here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Test Class</em>' attribute.
+	 * @see #setTestClass(Class)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestConfig_TestClass()
+	 * @model
+	 * @generated
+	 */
+	Class<?> getTestClass();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getTestClass
+	 * <em>Test Class</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Test Class</em>' attribute.
+	 * @see #getTestClass()
+	 * @generated
+	 */
+	void setTestClass(Class<?> value);
+
+	/**
+	 * Returns the value of the '<em><b>Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Id</em>' attribute isn't clear, there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Id</em>' attribute.
+	 * @see #setId(String)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestConfig_Id()
+	 * @model
+	 * @generated
+	 */
+	String getId();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getId <em>Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Id</em>' attribute.
+	 * @see #getId()
+	 * @generated
+	 */
+	void setId(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Mutator Config</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Mutator Config</em>' containment reference isn't clear, there really should be more of
+	 * a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Mutator Config</em>' containment reference.
+	 * @see #setMutatorConfig(MutatorConfig)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestConfig_MutatorConfig()
+	 * @model containment="true"
+	 * @generated
+	 */
+	MutatorConfig getMutatorConfig();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getMutatorConfig
+	 * <em>Mutator Config</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Mutator Config</em>' containment reference.
+	 * @see #getMutatorConfig()
+	 * @generated
+	 */
+	void setMutatorConfig(MutatorConfig value);
+
+} // TestConfig
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestDiff.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestDiff.java
new file mode 100644
index 0000000..04546de
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestDiff.java
@@ -0,0 +1,153 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config;
+
+import java.util.Date;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Test Diff</b></em>'.
+ * <!-- end-user-doc -->
+ * 
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getLastUpdate <em>Last Update</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getConfig <em>Config</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getOldResult <em>Old Result</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getNewResult <em>New Result</em>}</li>
+ * </ul>
+ * </p>
+ * 
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestDiff()
+ * @model
+ * @generated
+ */
+public interface TestDiff extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Last Update</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Last Update</em>' attribute isn't clear, there really should be more of a description
+	 * here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Last Update</em>' attribute.
+	 * @see #setLastUpdate(Date)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestDiff_LastUpdate()
+	 * @model
+	 * @generated
+	 */
+	Date getLastUpdate();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getLastUpdate
+	 * <em>Last Update</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Last Update</em>' attribute.
+	 * @see #getLastUpdate()
+	 * @generated
+	 */
+	void setLastUpdate(Date value);
+
+	/**
+	 * Returns the value of the '<em><b>Config</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Config</em>' reference isn't clear, there really should be more of a description
+	 * here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Config</em>' reference.
+	 * @see #setConfig(TestConfig)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestDiff_Config()
+	 * @model
+	 * @generated
+	 */
+	TestConfig getConfig();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getConfig <em>Config</em>}'
+	 * reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Config</em>' reference.
+	 * @see #getConfig()
+	 * @generated
+	 */
+	void setConfig(TestConfig value);
+
+	/**
+	 * Returns the value of the '<em><b>Old Result</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Old Result</em>' containment reference isn't clear, there really should be more of a
+	 * description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Old Result</em>' containment reference.
+	 * @see #setOldResult(TestResult)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestDiff_OldResult()
+	 * @model containment="true"
+	 * @generated
+	 */
+	TestResult getOldResult();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getOldResult
+	 * <em>Old Result</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Old Result</em>' containment reference.
+	 * @see #getOldResult()
+	 * @generated
+	 */
+	void setOldResult(TestResult value);
+
+	/**
+	 * Returns the value of the '<em><b>New Result</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>New Result</em>' containment reference isn't clear, there really should be more of a
+	 * description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>New Result</em>' containment reference.
+	 * @see #setNewResult(TestResult)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestDiff_NewResult()
+	 * @model containment="true"
+	 * @generated
+	 */
+	TestResult getNewResult();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getNewResult
+	 * <em>New Result</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>New Result</em>' containment reference.
+	 * @see #getNewResult()
+	 * @generated
+	 */
+	void setNewResult(TestResult value);
+
+} // TestDiff
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestResult.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestResult.java
new file mode 100644
index 0000000..b6e02c9
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestResult.java
@@ -0,0 +1,181 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Test Result</b></em>'.
+ * <!-- end-user-doc -->
+ * 
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getSeedCount <em>Seed Count</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getTestName <em>Test Name</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getError <em>Error</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getFailure <em>Failure</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getExecutionTime <em>Execution Time</em>}</li>
+ * </ul>
+ * </p>
+ * 
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestResult()
+ * @model
+ * @generated
+ */
+public interface TestResult extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Seed Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Seed Count</em>' attribute isn't clear, there really should be more of a description
+	 * here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Seed Count</em>' attribute.
+	 * @see #setSeedCount(int)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestResult_SeedCount()
+	 * @model
+	 * @generated
+	 */
+	int getSeedCount();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getSeedCount
+	 * <em>Seed Count</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Seed Count</em>' attribute.
+	 * @see #getSeedCount()
+	 * @generated
+	 */
+	void setSeedCount(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Test Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Test Name</em>' attribute isn't clear, there really should be more of a description
+	 * here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Test Name</em>' attribute.
+	 * @see #setTestName(String)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestResult_TestName()
+	 * @model
+	 * @generated
+	 */
+	String getTestName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getTestName
+	 * <em>Test Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Test Name</em>' attribute.
+	 * @see #getTestName()
+	 * @generated
+	 */
+	void setTestName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Error</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Error</em>' attribute isn't clear, there really should be more of a description
+	 * here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Error</em>' attribute.
+	 * @see #setError(String)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestResult_Error()
+	 * @model
+	 * @generated
+	 */
+	String getError();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getError <em>Error</em>}'
+	 * attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Error</em>' attribute.
+	 * @see #getError()
+	 * @generated
+	 */
+	void setError(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Failure</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Failure</em>' attribute isn't clear, there really should be more of a description
+	 * here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Failure</em>' attribute.
+	 * @see #setFailure(String)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestResult_Failure()
+	 * @model
+	 * @generated
+	 */
+	String getFailure();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getFailure <em>Failure</em>}'
+	 * attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Failure</em>' attribute.
+	 * @see #getFailure()
+	 * @generated
+	 */
+	void setFailure(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Execution Time</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Execution Time</em>' attribute isn't clear, there really should be more of a
+	 * description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Execution Time</em>' attribute.
+	 * @see #setExecutionTime(long)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestResult_ExecutionTime()
+	 * @model
+	 * @generated
+	 */
+	long getExecutionTime();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getExecutionTime
+	 * <em>Execution Time</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Execution Time</em>' attribute.
+	 * @see #getExecutionTime()
+	 * @generated
+	 */
+	void setExecutionTime(long value);
+
+} // TestResult
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestRun.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestRun.java
new file mode 100644
index 0000000..6aa388a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestRun.java
@@ -0,0 +1,112 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config;
+
+import java.util.Date;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Test Run</b></em>'.
+ * <!-- end-user-doc -->
+ * 
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getConfig <em>Config</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getTime <em>Time</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getResults <em>Results</em>}</li>
+ * </ul>
+ * </p>
+ * 
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestRun()
+ * @model
+ * @generated
+ */
+public interface TestRun extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Config</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Config</em>' containment reference isn't clear, there really should be more of a
+	 * description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Config</em>' containment reference.
+	 * @see #setConfig(TestConfig)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestRun_Config()
+	 * @model containment="true"
+	 * @generated
+	 */
+	TestConfig getConfig();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getConfig <em>Config</em>}'
+	 * containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Config</em>' containment reference.
+	 * @see #getConfig()
+	 * @generated
+	 */
+	void setConfig(TestConfig value);
+
+	/**
+	 * Returns the value of the '<em><b>Time</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Time</em>' attribute isn't clear, there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Time</em>' attribute.
+	 * @see #setTime(Date)
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestRun_Time()
+	 * @model
+	 * @generated
+	 */
+	Date getTime();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getTime <em>Time</em>}'
+	 * attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param value the new value of the '<em>Time</em>' attribute.
+	 * @see #getTime()
+	 * @generated
+	 */
+	void setTime(Date value);
+
+	/**
+	 * Returns the value of the '<em><b>Results</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Results</em>' containment reference list isn't clear, there really should be more of a
+	 * description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the value of the '<em>Results</em>' containment reference list.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestRun_Results()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<TestResult> getResults();
+
+} // TestRun
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/ConfigFactoryImpl.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/ConfigFactoryImpl.java
new file mode 100644
index 0000000..ffa0f67
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/ConfigFactoryImpl.java
@@ -0,0 +1,194 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.Root;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class ConfigFactoryImpl extends EFactoryImpl implements ConfigFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public static ConfigFactory init() {
+		try {
+			ConfigFactory theConfigFactory = (ConfigFactory) EPackage.Registry.INSTANCE
+				.getEFactory("http://org/eclipse/emf/emfstore/fuzzy/emf/config");
+			if (theConfigFactory != null) {
+				return theConfigFactory;
+			}
+		} catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new ConfigFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public ConfigFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+		case ConfigPackage.TEST_CONFIG:
+			return createTestConfig();
+		case ConfigPackage.TEST_RUN:
+			return createTestRun();
+		case ConfigPackage.TEST_RESULT:
+			return createTestResult();
+		case ConfigPackage.TEST_DIFF:
+			return createTestDiff();
+		case ConfigPackage.DIFF_REPORT:
+			return createDiffReport();
+		case ConfigPackage.ROOT:
+			return createRoot();
+		case ConfigPackage.MUTATOR_CONFIG:
+			return createMutatorConfig();
+		default:
+			throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public TestConfig createTestConfig() {
+		TestConfigImpl testConfig = new TestConfigImpl();
+		return testConfig;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public TestRun createTestRun() {
+		TestRunImpl testRun = new TestRunImpl();
+		return testRun;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public TestResult createTestResult() {
+		TestResultImpl testResult = new TestResultImpl();
+		return testResult;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public TestDiff createTestDiff() {
+		TestDiffImpl testDiff = new TestDiffImpl();
+		return testDiff;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public DiffReport createDiffReport() {
+		DiffReportImpl diffReport = new DiffReportImpl();
+		return diffReport;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public Root createRoot() {
+		RootImpl root = new RootImpl();
+		return root;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public MutatorConfig createMutatorConfig() {
+		MutatorConfigImpl mutatorConfig = new MutatorConfigImpl();
+		return mutatorConfig;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public ConfigPackage getConfigPackage() {
+		return (ConfigPackage) getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static ConfigPackage getPackage() {
+		return ConfigPackage.eINSTANCE;
+	}
+
+} // ConfigFactoryImpl
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/ConfigPackageImpl.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/ConfigPackageImpl.java
new file mode 100644
index 0000000..0e07b74
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/ConfigPackageImpl.java
@@ -0,0 +1,715 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.impl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EGenericType;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.Root;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class ConfigPackageImpl extends EPackageImpl implements ConfigPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	private EClass testConfigEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	private EClass testRunEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	private EClass testResultEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	private EClass testDiffEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	private EClass diffReportEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	private EClass rootEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	private EClass mutatorConfigEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with {@link org.eclipse.emf.ecore.EPackage.Registry
+	 * EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>
+	 * Note: the correct way to create the package is via the static factory method {@link #init init()}, which also
+	 * performs initialization of the package, or returns the registered package, if one already exists. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private ConfigPackageImpl() {
+		super(eNS_URI, ConfigFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>
+	 * This method is used to initialize {@link ConfigPackage#eINSTANCE} when that field is accessed. Clients should not
+	 * invoke it directly. Instead, they should simply access that field to obtain the package. <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static ConfigPackage init() {
+		if (isInited)
+			return (ConfigPackage) EPackage.Registry.INSTANCE.getEPackage(ConfigPackage.eNS_URI);
+
+		// Obtain or create and register package
+		ConfigPackageImpl theConfigPackage = (ConfigPackageImpl) (EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ConfigPackageImpl ? EPackage.Registry.INSTANCE
+			.get(eNS_URI) : new ConfigPackageImpl());
+
+		isInited = true;
+
+		// Create package meta-data objects
+		theConfigPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theConfigPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theConfigPackage.freeze();
+
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(ConfigPackage.eNS_URI, theConfigPackage);
+		return theConfigPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EClass getTestConfig() {
+		return testConfigEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EAttribute getTestConfig_Seed() {
+		return (EAttribute) testConfigEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EAttribute getTestConfig_Count() {
+		return (EAttribute) testConfigEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EAttribute getTestConfig_TestClass() {
+		return (EAttribute) testConfigEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EAttribute getTestConfig_Id() {
+		return (EAttribute) testConfigEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EReference getTestConfig_MutatorConfig() {
+		return (EReference) testConfigEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EClass getTestRun() {
+		return testRunEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EReference getTestRun_Config() {
+		return (EReference) testRunEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EAttribute getTestRun_Time() {
+		return (EAttribute) testRunEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EReference getTestRun_Results() {
+		return (EReference) testRunEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EClass getTestResult() {
+		return testResultEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EAttribute getTestResult_SeedCount() {
+		return (EAttribute) testResultEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EAttribute getTestResult_TestName() {
+		return (EAttribute) testResultEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EAttribute getTestResult_Error() {
+		return (EAttribute) testResultEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EAttribute getTestResult_Failure() {
+		return (EAttribute) testResultEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EAttribute getTestResult_ExecutionTime() {
+		return (EAttribute) testResultEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EClass getTestDiff() {
+		return testDiffEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EAttribute getTestDiff_LastUpdate() {
+		return (EAttribute) testDiffEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EReference getTestDiff_Config() {
+		return (EReference) testDiffEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EReference getTestDiff_OldResult() {
+		return (EReference) testDiffEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EReference getTestDiff_NewResult() {
+		return (EReference) testDiffEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EClass getDiffReport() {
+		return diffReportEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EReference getDiffReport_Diffs() {
+		return (EReference) diffReportEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EClass getRoot() {
+		return rootEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EReference getRoot_Elements() {
+		return (EReference) rootEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EClass getMutatorConfig() {
+		return mutatorConfigEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EReference getMutatorConfig_RootEClass() {
+		return (EReference) mutatorConfigEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EAttribute getMutatorConfig_MinObjectsCount() {
+		return (EAttribute) mutatorConfigEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EAttribute getMutatorConfig_IgnoreAndLog() {
+		return (EAttribute) mutatorConfigEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EAttribute getMutatorConfig_DoNotGenerateRoot() {
+		return (EAttribute) mutatorConfigEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EAttribute getMutatorConfig_UseEcoreUtilDelete() {
+		return (EAttribute) mutatorConfigEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EReference getMutatorConfig_EClassesToIgnore() {
+		return (EReference) mutatorConfigEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EReference getMutatorConfig_EStructuralFeaturesToIgnore() {
+		return (EReference) mutatorConfigEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EReference getMutatorConfig_EPackages() {
+		return (EReference) mutatorConfigEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EAttribute getMutatorConfig_MaxDeleteCount() {
+		return (EAttribute) mutatorConfigEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public ConfigFactory getConfigFactory() {
+		return (ConfigFactory) getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package. This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated)
+			return;
+		isCreated = true;
+
+		// Create classes and their features
+		testConfigEClass = createEClass(TEST_CONFIG);
+		createEAttribute(testConfigEClass, TEST_CONFIG__SEED);
+		createEAttribute(testConfigEClass, TEST_CONFIG__COUNT);
+		createEAttribute(testConfigEClass, TEST_CONFIG__TEST_CLASS);
+		createEAttribute(testConfigEClass, TEST_CONFIG__ID);
+		createEReference(testConfigEClass, TEST_CONFIG__MUTATOR_CONFIG);
+
+		testRunEClass = createEClass(TEST_RUN);
+		createEReference(testRunEClass, TEST_RUN__CONFIG);
+		createEAttribute(testRunEClass, TEST_RUN__TIME);
+		createEReference(testRunEClass, TEST_RUN__RESULTS);
+
+		testResultEClass = createEClass(TEST_RESULT);
+		createEAttribute(testResultEClass, TEST_RESULT__SEED_COUNT);
+		createEAttribute(testResultEClass, TEST_RESULT__TEST_NAME);
+		createEAttribute(testResultEClass, TEST_RESULT__ERROR);
+		createEAttribute(testResultEClass, TEST_RESULT__FAILURE);
+		createEAttribute(testResultEClass, TEST_RESULT__EXECUTION_TIME);
+
+		testDiffEClass = createEClass(TEST_DIFF);
+		createEAttribute(testDiffEClass, TEST_DIFF__LAST_UPDATE);
+		createEReference(testDiffEClass, TEST_DIFF__CONFIG);
+		createEReference(testDiffEClass, TEST_DIFF__OLD_RESULT);
+		createEReference(testDiffEClass, TEST_DIFF__NEW_RESULT);
+
+		diffReportEClass = createEClass(DIFF_REPORT);
+		createEReference(diffReportEClass, DIFF_REPORT__DIFFS);
+
+		rootEClass = createEClass(ROOT);
+		createEReference(rootEClass, ROOT__ELEMENTS);
+
+		mutatorConfigEClass = createEClass(MUTATOR_CONFIG);
+		createEReference(mutatorConfigEClass, MUTATOR_CONFIG__ROOT_ECLASS);
+		createEAttribute(mutatorConfigEClass, MUTATOR_CONFIG__MIN_OBJECTS_COUNT);
+		createEAttribute(mutatorConfigEClass, MUTATOR_CONFIG__IGNORE_AND_LOG);
+		createEAttribute(mutatorConfigEClass, MUTATOR_CONFIG__DO_NOT_GENERATE_ROOT);
+		createEAttribute(mutatorConfigEClass, MUTATOR_CONFIG__USE_ECORE_UTIL_DELETE);
+		createEReference(mutatorConfigEClass, MUTATOR_CONFIG__ECLASSES_TO_IGNORE);
+		createEReference(mutatorConfigEClass, MUTATOR_CONFIG__ESTRUCTURAL_FEATURES_TO_IGNORE);
+		createEReference(mutatorConfigEClass, MUTATOR_CONFIG__EPACKAGES);
+		createEAttribute(mutatorConfigEClass, MUTATOR_CONFIG__MAX_DELETE_COUNT);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model. This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized)
+			return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(testConfigEClass, TestConfig.class, "TestConfig", !IS_ABSTRACT, !IS_INTERFACE,
+			IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getTestConfig_Seed(), ecorePackage.getELong(), "seed", null, 0, 1, TestConfig.class,
+			!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getTestConfig_Count(), ecorePackage.getEInt(), "count", null, 0, 1, TestConfig.class,
+			!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		EGenericType g1 = createEGenericType(ecorePackage.getEJavaClass());
+		EGenericType g2 = createEGenericType();
+		g1.getETypeArguments().add(g2);
+		initEAttribute(getTestConfig_TestClass(), g1, "testClass", null, 0, 1, TestConfig.class, !IS_TRANSIENT,
+			!IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getTestConfig_Id(), ecorePackage.getEString(), "id", null, 0, 1, TestConfig.class,
+			!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getTestConfig_MutatorConfig(), this.getMutatorConfig(), null, "mutatorConfig", null, 0, 1,
+			TestConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+			!IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(testRunEClass, TestRun.class, "TestRun", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getTestRun_Config(), this.getTestConfig(), null, "config", null, 0, 1, TestRun.class,
+			!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE,
+			!IS_DERIVED, IS_ORDERED);
+		initEAttribute(getTestRun_Time(), ecorePackage.getEDate(), "time", null, 0, 1, TestRun.class, !IS_TRANSIENT,
+			!IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getTestRun_Results(), this.getTestResult(), null, "results", null, 0, -1, TestRun.class,
+			!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE,
+			!IS_DERIVED, IS_ORDERED);
+
+		initEClass(testResultEClass, TestResult.class, "TestResult", !IS_ABSTRACT, !IS_INTERFACE,
+			IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getTestResult_SeedCount(), ecorePackage.getEInt(), "seedCount", null, 0, 1, TestResult.class,
+			!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getTestResult_TestName(), ecorePackage.getEString(), "testName", null, 0, 1, TestResult.class,
+			!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getTestResult_Error(), ecorePackage.getEString(), "error", null, 0, 1, TestResult.class,
+			!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getTestResult_Failure(), ecorePackage.getEString(), "failure", null, 0, 1, TestResult.class,
+			!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getTestResult_ExecutionTime(), ecorePackage.getELong(), "executionTime", null, 0, 1,
+			TestResult.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+			!IS_DERIVED, IS_ORDERED);
+
+		initEClass(testDiffEClass, TestDiff.class, "TestDiff", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getTestDiff_LastUpdate(), ecorePackage.getEDate(), "lastUpdate", null, 0, 1, TestDiff.class,
+			!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getTestDiff_Config(), this.getTestConfig(), null, "config", null, 0, 1, TestDiff.class,
+			!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE,
+			!IS_DERIVED, IS_ORDERED);
+		initEReference(getTestDiff_OldResult(), this.getTestResult(), null, "oldResult", null, 0, 1, TestDiff.class,
+			!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE,
+			!IS_DERIVED, IS_ORDERED);
+		initEReference(getTestDiff_NewResult(), this.getTestResult(), null, "newResult", null, 0, 1, TestDiff.class,
+			!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE,
+			!IS_DERIVED, IS_ORDERED);
+
+		initEClass(diffReportEClass, DiffReport.class, "DiffReport", !IS_ABSTRACT, !IS_INTERFACE,
+			IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getDiffReport_Diffs(), this.getTestDiff(), null, "diffs", null, 0, -1, DiffReport.class,
+			!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE,
+			!IS_DERIVED, IS_ORDERED);
+
+		initEClass(rootEClass, Root.class, "Root", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getRoot_Elements(), ecorePackage.getEObject(), null, "elements", null, 0, -1, Root.class,
+			!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE,
+			!IS_DERIVED, IS_ORDERED);
+
+		initEClass(mutatorConfigEClass, MutatorConfig.class, "MutatorConfig", !IS_ABSTRACT, !IS_INTERFACE,
+			IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getMutatorConfig_RootEClass(), ecorePackage.getEClass(), null, "rootEClass", null, 0, 1,
+			MutatorConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES,
+			!IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getMutatorConfig_MinObjectsCount(), ecorePackage.getEInt(), "minObjectsCount", "100", 0, 1,
+			MutatorConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+			!IS_DERIVED, IS_ORDERED);
+		initEAttribute(getMutatorConfig_IgnoreAndLog(), ecorePackage.getEBoolean(), "ignoreAndLog", "false", 0, 1,
+			MutatorConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+			!IS_DERIVED, IS_ORDERED);
+		initEAttribute(getMutatorConfig_DoNotGenerateRoot(), ecorePackage.getEBoolean(), "doNotGenerateRoot", "false",
+			0, 1, MutatorConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+			!IS_DERIVED, IS_ORDERED);
+		initEAttribute(getMutatorConfig_UseEcoreUtilDelete(), ecorePackage.getEBoolean(), "useEcoreUtilDelete",
+			"false", 0, 1, MutatorConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+			IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getMutatorConfig_EClassesToIgnore(), ecorePackage.getEClass(), null, "eClassesToIgnore", null,
+			0, -1, MutatorConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES,
+			!IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getMutatorConfig_EStructuralFeaturesToIgnore(), ecorePackage.getEStructuralFeature(), null,
+			"eStructuralFeaturesToIgnore", null, 0, -1, MutatorConfig.class, !IS_TRANSIENT, !IS_VOLATILE,
+			IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getMutatorConfig_EPackages(), ecorePackage.getEPackage(), null, "ePackages", null, 0, -1,
+			MutatorConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES,
+			!IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getMutatorConfig_MaxDeleteCount(), ecorePackage.getEIntegerObject(), "maxDeleteCount", null, 0,
+			1, MutatorConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+			!IS_DERIVED, IS_ORDERED);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} // ConfigPackageImpl
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/DiffReportImpl.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/DiffReportImpl.java
new file mode 100644
index 0000000..bda9548
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/DiffReportImpl.java
@@ -0,0 +1,169 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Diff Report</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.DiffReportImpl#getDiffs <em>Diffs</em>}</li>
+ * </ul>
+ * </p>
+ * 
+ * @generated
+ */
+public class DiffReportImpl extends EObjectImpl implements DiffReport {
+	/**
+	 * The cached value of the '{@link #getDiffs() <em>Diffs</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getDiffs()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<TestDiff> diffs;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected DiffReportImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ConfigPackage.Literals.DIFF_REPORT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EList<TestDiff> getDiffs() {
+		if (diffs == null) {
+			diffs = new EObjectContainmentEList<TestDiff>(TestDiff.class, this, ConfigPackage.DIFF_REPORT__DIFFS);
+		}
+		return diffs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+		case ConfigPackage.DIFF_REPORT__DIFFS:
+			return ((InternalEList<?>) getDiffs()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case ConfigPackage.DIFF_REPORT__DIFFS:
+			return getDiffs();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case ConfigPackage.DIFF_REPORT__DIFFS:
+			getDiffs().clear();
+			getDiffs().addAll((Collection<? extends TestDiff>) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case ConfigPackage.DIFF_REPORT__DIFFS:
+			getDiffs().clear();
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case ConfigPackage.DIFF_REPORT__DIFFS:
+			return diffs != null && !diffs.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} // DiffReportImpl
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/MutatorConfigImpl.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/MutatorConfigImpl.java
new file mode 100644
index 0000000..01324c9
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/MutatorConfigImpl.java
@@ -0,0 +1,616 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Mutator Config</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl#getRootEClass <em>Root EClass</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl#getMinObjectsCount <em>Min Objects Count
+ * </em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl#isIgnoreAndLog <em>Ignore And Log</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl#isDoNotGenerateRoot <em>Do Not Generate
+ * Root</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl#isUseEcoreUtilDelete <em>Use Ecore Util
+ * Delete</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl#getEClassesToIgnore <em>EClasses To
+ * Ignore</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl#getEStructuralFeaturesToIgnore <em>
+ * EStructural Features To Ignore</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl#getEPackages <em>EPackages</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl#getMaxDeleteCount <em>Max Delete Count
+ * </em>}</li>
+ * </ul>
+ * </p>
+ * 
+ * @generated
+ */
+public class MutatorConfigImpl extends EObjectImpl implements MutatorConfig {
+	/**
+	 * The cached value of the '{@link #getRootEClass() <em>Root EClass</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getRootEClass()
+	 * @generated
+	 * @ordered
+	 */
+	protected EClass rootEClass;
+
+	/**
+	 * The default value of the '{@link #getMinObjectsCount() <em>Min Objects Count</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getMinObjectsCount()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int MIN_OBJECTS_COUNT_EDEFAULT = 100;
+
+	/**
+	 * The cached value of the '{@link #getMinObjectsCount() <em>Min Objects Count</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getMinObjectsCount()
+	 * @generated
+	 * @ordered
+	 */
+	protected int minObjectsCount = MIN_OBJECTS_COUNT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isIgnoreAndLog() <em>Ignore And Log</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #isIgnoreAndLog()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IGNORE_AND_LOG_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isIgnoreAndLog() <em>Ignore And Log</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #isIgnoreAndLog()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean ignoreAndLog = IGNORE_AND_LOG_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isDoNotGenerateRoot() <em>Do Not Generate Root</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #isDoNotGenerateRoot()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DO_NOT_GENERATE_ROOT_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isDoNotGenerateRoot() <em>Do Not Generate Root</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #isDoNotGenerateRoot()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean doNotGenerateRoot = DO_NOT_GENERATE_ROOT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isUseEcoreUtilDelete() <em>Use Ecore Util Delete</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #isUseEcoreUtilDelete()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean USE_ECORE_UTIL_DELETE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isUseEcoreUtilDelete() <em>Use Ecore Util Delete</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #isUseEcoreUtilDelete()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean useEcoreUtilDelete = USE_ECORE_UTIL_DELETE_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getEClassesToIgnore() <em>EClasses To Ignore</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getEClassesToIgnore()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<EClass> eClassesToIgnore;
+
+	/**
+	 * The cached value of the '{@link #getEStructuralFeaturesToIgnore() <em>EStructural Features To Ignore</em>}'
+	 * reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getEStructuralFeaturesToIgnore()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<EStructuralFeature> eStructuralFeaturesToIgnore;
+
+	/**
+	 * The cached value of the '{@link #getEPackages() <em>EPackages</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getEPackages()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<EPackage> ePackages;
+
+	/**
+	 * The default value of the '{@link #getMaxDeleteCount() <em>Max Delete Count</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getMaxDeleteCount()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Integer MAX_DELETE_COUNT_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getMaxDeleteCount() <em>Max Delete Count</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getMaxDeleteCount()
+	 * @generated
+	 * @ordered
+	 */
+	protected Integer maxDeleteCount = MAX_DELETE_COUNT_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected MutatorConfigImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ConfigPackage.Literals.MUTATOR_CONFIG;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EClass getRootEClass() {
+		if (rootEClass != null && rootEClass.eIsProxy()) {
+			InternalEObject oldRootEClass = (InternalEObject) rootEClass;
+			rootEClass = (EClass) eResolveProxy(oldRootEClass);
+			if (rootEClass != oldRootEClass) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE,
+						ConfigPackage.MUTATOR_CONFIG__ROOT_ECLASS, oldRootEClass, rootEClass));
+			}
+		}
+		return rootEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EClass basicGetRootEClass() {
+		return rootEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setRootEClass(EClass newRootEClass) {
+		EClass oldRootEClass = rootEClass;
+		rootEClass = newRootEClass;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.MUTATOR_CONFIG__ROOT_ECLASS,
+				oldRootEClass, rootEClass));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public int getMinObjectsCount() {
+		return minObjectsCount;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setMinObjectsCount(int newMinObjectsCount) {
+		int oldMinObjectsCount = minObjectsCount;
+		minObjectsCount = newMinObjectsCount;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.MUTATOR_CONFIG__MIN_OBJECTS_COUNT,
+				oldMinObjectsCount, minObjectsCount));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public boolean isIgnoreAndLog() {
+		return ignoreAndLog;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setIgnoreAndLog(boolean newIgnoreAndLog) {
+		boolean oldIgnoreAndLog = ignoreAndLog;
+		ignoreAndLog = newIgnoreAndLog;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.MUTATOR_CONFIG__IGNORE_AND_LOG,
+				oldIgnoreAndLog, ignoreAndLog));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public boolean isDoNotGenerateRoot() {
+		return doNotGenerateRoot;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setDoNotGenerateRoot(boolean newDoNotGenerateRoot) {
+		boolean oldDoNotGenerateRoot = doNotGenerateRoot;
+		doNotGenerateRoot = newDoNotGenerateRoot;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.MUTATOR_CONFIG__DO_NOT_GENERATE_ROOT,
+				oldDoNotGenerateRoot, doNotGenerateRoot));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public boolean isUseEcoreUtilDelete() {
+		return useEcoreUtilDelete;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setUseEcoreUtilDelete(boolean newUseEcoreUtilDelete) {
+		boolean oldUseEcoreUtilDelete = useEcoreUtilDelete;
+		useEcoreUtilDelete = newUseEcoreUtilDelete;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.MUTATOR_CONFIG__USE_ECORE_UTIL_DELETE,
+				oldUseEcoreUtilDelete, useEcoreUtilDelete));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EList<EClass> getEClassesToIgnore() {
+		if (eClassesToIgnore == null) {
+			eClassesToIgnore = new EObjectResolvingEList<EClass>(EClass.class, this,
+				ConfigPackage.MUTATOR_CONFIG__ECLASSES_TO_IGNORE);
+		}
+		return eClassesToIgnore;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EList<EStructuralFeature> getEStructuralFeaturesToIgnore() {
+		if (eStructuralFeaturesToIgnore == null) {
+			eStructuralFeaturesToIgnore = new EObjectResolvingEList<EStructuralFeature>(EStructuralFeature.class, this,
+				ConfigPackage.MUTATOR_CONFIG__ESTRUCTURAL_FEATURES_TO_IGNORE);
+		}
+		return eStructuralFeaturesToIgnore;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EList<EPackage> getEPackages() {
+		if (ePackages == null) {
+			ePackages = new EObjectResolvingEList<EPackage>(EPackage.class, this,
+				ConfigPackage.MUTATOR_CONFIG__EPACKAGES);
+		}
+		return ePackages;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public Integer getMaxDeleteCount() {
+		return maxDeleteCount;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setMaxDeleteCount(Integer newMaxDeleteCount) {
+		Integer oldMaxDeleteCount = maxDeleteCount;
+		maxDeleteCount = newMaxDeleteCount;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.MUTATOR_CONFIG__MAX_DELETE_COUNT,
+				oldMaxDeleteCount, maxDeleteCount));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case ConfigPackage.MUTATOR_CONFIG__ROOT_ECLASS:
+			if (resolve)
+				return getRootEClass();
+			return basicGetRootEClass();
+		case ConfigPackage.MUTATOR_CONFIG__MIN_OBJECTS_COUNT:
+			return getMinObjectsCount();
+		case ConfigPackage.MUTATOR_CONFIG__IGNORE_AND_LOG:
+			return isIgnoreAndLog();
+		case ConfigPackage.MUTATOR_CONFIG__DO_NOT_GENERATE_ROOT:
+			return isDoNotGenerateRoot();
+		case ConfigPackage.MUTATOR_CONFIG__USE_ECORE_UTIL_DELETE:
+			return isUseEcoreUtilDelete();
+		case ConfigPackage.MUTATOR_CONFIG__ECLASSES_TO_IGNORE:
+			return getEClassesToIgnore();
+		case ConfigPackage.MUTATOR_CONFIG__ESTRUCTURAL_FEATURES_TO_IGNORE:
+			return getEStructuralFeaturesToIgnore();
+		case ConfigPackage.MUTATOR_CONFIG__EPACKAGES:
+			return getEPackages();
+		case ConfigPackage.MUTATOR_CONFIG__MAX_DELETE_COUNT:
+			return getMaxDeleteCount();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case ConfigPackage.MUTATOR_CONFIG__ROOT_ECLASS:
+			setRootEClass((EClass) newValue);
+			return;
+		case ConfigPackage.MUTATOR_CONFIG__MIN_OBJECTS_COUNT:
+			setMinObjectsCount((Integer) newValue);
+			return;
+		case ConfigPackage.MUTATOR_CONFIG__IGNORE_AND_LOG:
+			setIgnoreAndLog((Boolean) newValue);
+			return;
+		case ConfigPackage.MUTATOR_CONFIG__DO_NOT_GENERATE_ROOT:
+			setDoNotGenerateRoot((Boolean) newValue);
+			return;
+		case ConfigPackage.MUTATOR_CONFIG__USE_ECORE_UTIL_DELETE:
+			setUseEcoreUtilDelete((Boolean) newValue);
+			return;
+		case ConfigPackage.MUTATOR_CONFIG__ECLASSES_TO_IGNORE:
+			getEClassesToIgnore().clear();
+			getEClassesToIgnore().addAll((Collection<? extends EClass>) newValue);
+			return;
+		case ConfigPackage.MUTATOR_CONFIG__ESTRUCTURAL_FEATURES_TO_IGNORE:
+			getEStructuralFeaturesToIgnore().clear();
+			getEStructuralFeaturesToIgnore().addAll((Collection<? extends EStructuralFeature>) newValue);
+			return;
+		case ConfigPackage.MUTATOR_CONFIG__EPACKAGES:
+			getEPackages().clear();
+			getEPackages().addAll((Collection<? extends EPackage>) newValue);
+			return;
+		case ConfigPackage.MUTATOR_CONFIG__MAX_DELETE_COUNT:
+			setMaxDeleteCount((Integer) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case ConfigPackage.MUTATOR_CONFIG__ROOT_ECLASS:
+			setRootEClass((EClass) null);
+			return;
+		case ConfigPackage.MUTATOR_CONFIG__MIN_OBJECTS_COUNT:
+			setMinObjectsCount(MIN_OBJECTS_COUNT_EDEFAULT);
+			return;
+		case ConfigPackage.MUTATOR_CONFIG__IGNORE_AND_LOG:
+			setIgnoreAndLog(IGNORE_AND_LOG_EDEFAULT);
+			return;
+		case ConfigPackage.MUTATOR_CONFIG__DO_NOT_GENERATE_ROOT:
+			setDoNotGenerateRoot(DO_NOT_GENERATE_ROOT_EDEFAULT);
+			return;
+		case ConfigPackage.MUTATOR_CONFIG__USE_ECORE_UTIL_DELETE:
+			setUseEcoreUtilDelete(USE_ECORE_UTIL_DELETE_EDEFAULT);
+			return;
+		case ConfigPackage.MUTATOR_CONFIG__ECLASSES_TO_IGNORE:
+			getEClassesToIgnore().clear();
+			return;
+		case ConfigPackage.MUTATOR_CONFIG__ESTRUCTURAL_FEATURES_TO_IGNORE:
+			getEStructuralFeaturesToIgnore().clear();
+			return;
+		case ConfigPackage.MUTATOR_CONFIG__EPACKAGES:
+			getEPackages().clear();
+			return;
+		case ConfigPackage.MUTATOR_CONFIG__MAX_DELETE_COUNT:
+			setMaxDeleteCount(MAX_DELETE_COUNT_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case ConfigPackage.MUTATOR_CONFIG__ROOT_ECLASS:
+			return rootEClass != null;
+		case ConfigPackage.MUTATOR_CONFIG__MIN_OBJECTS_COUNT:
+			return minObjectsCount != MIN_OBJECTS_COUNT_EDEFAULT;
+		case ConfigPackage.MUTATOR_CONFIG__IGNORE_AND_LOG:
+			return ignoreAndLog != IGNORE_AND_LOG_EDEFAULT;
+		case ConfigPackage.MUTATOR_CONFIG__DO_NOT_GENERATE_ROOT:
+			return doNotGenerateRoot != DO_NOT_GENERATE_ROOT_EDEFAULT;
+		case ConfigPackage.MUTATOR_CONFIG__USE_ECORE_UTIL_DELETE:
+			return useEcoreUtilDelete != USE_ECORE_UTIL_DELETE_EDEFAULT;
+		case ConfigPackage.MUTATOR_CONFIG__ECLASSES_TO_IGNORE:
+			return eClassesToIgnore != null && !eClassesToIgnore.isEmpty();
+		case ConfigPackage.MUTATOR_CONFIG__ESTRUCTURAL_FEATURES_TO_IGNORE:
+			return eStructuralFeaturesToIgnore != null && !eStructuralFeaturesToIgnore.isEmpty();
+		case ConfigPackage.MUTATOR_CONFIG__EPACKAGES:
+			return ePackages != null && !ePackages.isEmpty();
+		case ConfigPackage.MUTATOR_CONFIG__MAX_DELETE_COUNT:
+			return MAX_DELETE_COUNT_EDEFAULT == null ? maxDeleteCount != null : !MAX_DELETE_COUNT_EDEFAULT
+				.equals(maxDeleteCount);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (minObjectsCount: ");
+		result.append(minObjectsCount);
+		result.append(", ignoreAndLog: ");
+		result.append(ignoreAndLog);
+		result.append(", doNotGenerateRoot: ");
+		result.append(doNotGenerateRoot);
+		result.append(", useEcoreUtilDelete: ");
+		result.append(useEcoreUtilDelete);
+		result.append(", maxDeleteCount: ");
+		result.append(maxDeleteCount);
+		result.append(')');
+		return result.toString();
+	}
+
+} // MutatorConfigImpl
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/RootImpl.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/RootImpl.java
new file mode 100644
index 0000000..194d4ac
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/RootImpl.java
@@ -0,0 +1,169 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.Root;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Root</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.RootImpl#getElements <em>Elements</em>}</li>
+ * </ul>
+ * </p>
+ * 
+ * @generated
+ */
+public class RootImpl extends EObjectImpl implements Root {
+	/**
+	 * The cached value of the '{@link #getElements() <em>Elements</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getElements()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<EObject> elements;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected RootImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ConfigPackage.Literals.ROOT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EList<EObject> getElements() {
+		if (elements == null) {
+			elements = new EObjectContainmentEList<EObject>(EObject.class, this, ConfigPackage.ROOT__ELEMENTS);
+		}
+		return elements;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+		case ConfigPackage.ROOT__ELEMENTS:
+			return ((InternalEList<?>) getElements()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case ConfigPackage.ROOT__ELEMENTS:
+			return getElements();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case ConfigPackage.ROOT__ELEMENTS:
+			getElements().clear();
+			getElements().addAll((Collection<? extends EObject>) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case ConfigPackage.ROOT__ELEMENTS:
+			getElements().clear();
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case ConfigPackage.ROOT__ELEMENTS:
+			return elements != null && !elements.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} // RootImpl
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestConfigImpl.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestConfigImpl.java
new file mode 100644
index 0000000..128e732
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestConfigImpl.java
@@ -0,0 +1,440 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Test Config</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestConfigImpl#getSeed <em>Seed</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestConfigImpl#getCount <em>Count</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestConfigImpl#getTestClass <em>Test Class</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestConfigImpl#getId <em>Id</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestConfigImpl#getMutatorConfig <em>Mutator Config</em>}</li>
+ * </ul>
+ * </p>
+ * 
+ * @generated
+ */
+public class TestConfigImpl extends EObjectImpl implements TestConfig {
+	/**
+	 * The default value of the '{@link #getSeed() <em>Seed</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getSeed()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long SEED_EDEFAULT = 0L;
+
+	/**
+	 * The cached value of the '{@link #getSeed() <em>Seed</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getSeed()
+	 * @generated
+	 * @ordered
+	 */
+	protected long seed = SEED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCount() <em>Count</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getCount()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int COUNT_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getCount() <em>Count</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getCount()
+	 * @generated
+	 * @ordered
+	 */
+	protected int count = COUNT_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getTestClass() <em>Test Class</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getTestClass()
+	 * @generated
+	 * @ordered
+	 */
+	protected Class<?> testClass;
+
+	/**
+	 * The default value of the '{@link #getId() <em>Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getId()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getId() <em>Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getId()
+	 * @generated
+	 * @ordered
+	 */
+	protected String id = ID_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getMutatorConfig() <em>Mutator Config</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getMutatorConfig()
+	 * @generated
+	 * @ordered
+	 */
+	protected MutatorConfig mutatorConfig;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected TestConfigImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ConfigPackage.Literals.TEST_CONFIG;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public long getSeed() {
+		return seed;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setSeed(long newSeed) {
+		long oldSeed = seed;
+		seed = newSeed;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_CONFIG__SEED, oldSeed, seed));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public int getCount() {
+		return count;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setCount(int newCount) {
+		int oldCount = count;
+		count = newCount;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_CONFIG__COUNT, oldCount, count));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public Class<?> getTestClass() {
+		return testClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setTestClass(Class<?> newTestClass) {
+		Class<?> oldTestClass = testClass;
+		testClass = newTestClass;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_CONFIG__TEST_CLASS, oldTestClass,
+				testClass));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public String getId() {
+		return id;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setId(String newId) {
+		String oldId = id;
+		id = newId;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_CONFIG__ID, oldId, id));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public MutatorConfig getMutatorConfig() {
+		return mutatorConfig;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public NotificationChain basicSetMutatorConfig(MutatorConfig newMutatorConfig, NotificationChain msgs) {
+		MutatorConfig oldMutatorConfig = mutatorConfig;
+		mutatorConfig = newMutatorConfig;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET,
+				ConfigPackage.TEST_CONFIG__MUTATOR_CONFIG, oldMutatorConfig, newMutatorConfig);
+			if (msgs == null)
+				msgs = notification;
+			else
+				msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setMutatorConfig(MutatorConfig newMutatorConfig) {
+		if (newMutatorConfig != mutatorConfig) {
+			NotificationChain msgs = null;
+			if (mutatorConfig != null)
+				msgs = ((InternalEObject) mutatorConfig).eInverseRemove(this, EOPPOSITE_FEATURE_BASE
+					- ConfigPackage.TEST_CONFIG__MUTATOR_CONFIG, null, msgs);
+			if (newMutatorConfig != null)
+				msgs = ((InternalEObject) newMutatorConfig).eInverseAdd(this, EOPPOSITE_FEATURE_BASE
+					- ConfigPackage.TEST_CONFIG__MUTATOR_CONFIG, null, msgs);
+			msgs = basicSetMutatorConfig(newMutatorConfig, msgs);
+			if (msgs != null)
+				msgs.dispatch();
+		} else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_CONFIG__MUTATOR_CONFIG,
+				newMutatorConfig, newMutatorConfig));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+		case ConfigPackage.TEST_CONFIG__MUTATOR_CONFIG:
+			return basicSetMutatorConfig(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case ConfigPackage.TEST_CONFIG__SEED:
+			return getSeed();
+		case ConfigPackage.TEST_CONFIG__COUNT:
+			return getCount();
+		case ConfigPackage.TEST_CONFIG__TEST_CLASS:
+			return getTestClass();
+		case ConfigPackage.TEST_CONFIG__ID:
+			return getId();
+		case ConfigPackage.TEST_CONFIG__MUTATOR_CONFIG:
+			return getMutatorConfig();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case ConfigPackage.TEST_CONFIG__SEED:
+			setSeed((Long) newValue);
+			return;
+		case ConfigPackage.TEST_CONFIG__COUNT:
+			setCount((Integer) newValue);
+			return;
+		case ConfigPackage.TEST_CONFIG__TEST_CLASS:
+			setTestClass((Class<?>) newValue);
+			return;
+		case ConfigPackage.TEST_CONFIG__ID:
+			setId((String) newValue);
+			return;
+		case ConfigPackage.TEST_CONFIG__MUTATOR_CONFIG:
+			setMutatorConfig((MutatorConfig) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case ConfigPackage.TEST_CONFIG__SEED:
+			setSeed(SEED_EDEFAULT);
+			return;
+		case ConfigPackage.TEST_CONFIG__COUNT:
+			setCount(COUNT_EDEFAULT);
+			return;
+		case ConfigPackage.TEST_CONFIG__TEST_CLASS:
+			setTestClass((Class<?>) null);
+			return;
+		case ConfigPackage.TEST_CONFIG__ID:
+			setId(ID_EDEFAULT);
+			return;
+		case ConfigPackage.TEST_CONFIG__MUTATOR_CONFIG:
+			setMutatorConfig((MutatorConfig) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case ConfigPackage.TEST_CONFIG__SEED:
+			return seed != SEED_EDEFAULT;
+		case ConfigPackage.TEST_CONFIG__COUNT:
+			return count != COUNT_EDEFAULT;
+		case ConfigPackage.TEST_CONFIG__TEST_CLASS:
+			return testClass != null;
+		case ConfigPackage.TEST_CONFIG__ID:
+			return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals(id);
+		case ConfigPackage.TEST_CONFIG__MUTATOR_CONFIG:
+			return mutatorConfig != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (seed: ");
+		result.append(seed);
+		result.append(", count: ");
+		result.append(count);
+		result.append(", testClass: ");
+		result.append(testClass);
+		result.append(", id: ");
+		result.append(id);
+		result.append(')');
+		return result.toString();
+	}
+
+} // TestConfigImpl
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestDiffImpl.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestDiffImpl.java
new file mode 100644
index 0000000..1151ab1
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestDiffImpl.java
@@ -0,0 +1,423 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.impl;
+
+import java.util.Date;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Test Diff</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestDiffImpl#getLastUpdate <em>Last Update</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestDiffImpl#getConfig <em>Config</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestDiffImpl#getOldResult <em>Old Result</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestDiffImpl#getNewResult <em>New Result</em>}</li>
+ * </ul>
+ * </p>
+ * 
+ * @generated
+ */
+public class TestDiffImpl extends EObjectImpl implements TestDiff {
+	/**
+	 * The default value of the '{@link #getLastUpdate() <em>Last Update</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getLastUpdate()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Date LAST_UPDATE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getLastUpdate() <em>Last Update</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getLastUpdate()
+	 * @generated
+	 * @ordered
+	 */
+	protected Date lastUpdate = LAST_UPDATE_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getConfig() <em>Config</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getConfig()
+	 * @generated
+	 * @ordered
+	 */
+	protected TestConfig config;
+
+	/**
+	 * The cached value of the '{@link #getOldResult() <em>Old Result</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getOldResult()
+	 * @generated
+	 * @ordered
+	 */
+	protected TestResult oldResult;
+
+	/**
+	 * The cached value of the '{@link #getNewResult() <em>New Result</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getNewResult()
+	 * @generated
+	 * @ordered
+	 */
+	protected TestResult newResult;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected TestDiffImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ConfigPackage.Literals.TEST_DIFF;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public Date getLastUpdate() {
+		return lastUpdate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setLastUpdate(Date newLastUpdate) {
+		Date oldLastUpdate = lastUpdate;
+		lastUpdate = newLastUpdate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_DIFF__LAST_UPDATE, oldLastUpdate,
+				lastUpdate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public TestConfig getConfig() {
+		if (config != null && config.eIsProxy()) {
+			InternalEObject oldConfig = (InternalEObject) config;
+			config = (TestConfig) eResolveProxy(oldConfig);
+			if (config != oldConfig) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ConfigPackage.TEST_DIFF__CONFIG,
+						oldConfig, config));
+			}
+		}
+		return config;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public TestConfig basicGetConfig() {
+		return config;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setConfig(TestConfig newConfig) {
+		TestConfig oldConfig = config;
+		config = newConfig;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_DIFF__CONFIG, oldConfig, config));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public TestResult getOldResult() {
+		return oldResult;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public NotificationChain basicSetOldResult(TestResult newOldResult, NotificationChain msgs) {
+		TestResult oldOldResult = oldResult;
+		oldResult = newOldResult;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET,
+				ConfigPackage.TEST_DIFF__OLD_RESULT, oldOldResult, newOldResult);
+			if (msgs == null)
+				msgs = notification;
+			else
+				msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setOldResult(TestResult newOldResult) {
+		if (newOldResult != oldResult) {
+			NotificationChain msgs = null;
+			if (oldResult != null)
+				msgs = ((InternalEObject) oldResult).eInverseRemove(this, EOPPOSITE_FEATURE_BASE
+					- ConfigPackage.TEST_DIFF__OLD_RESULT, null, msgs);
+			if (newOldResult != null)
+				msgs = ((InternalEObject) newOldResult).eInverseAdd(this, EOPPOSITE_FEATURE_BASE
+					- ConfigPackage.TEST_DIFF__OLD_RESULT, null, msgs);
+			msgs = basicSetOldResult(newOldResult, msgs);
+			if (msgs != null)
+				msgs.dispatch();
+		} else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_DIFF__OLD_RESULT, newOldResult,
+				newOldResult));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public TestResult getNewResult() {
+		return newResult;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public NotificationChain basicSetNewResult(TestResult newNewResult, NotificationChain msgs) {
+		TestResult oldNewResult = newResult;
+		newResult = newNewResult;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET,
+				ConfigPackage.TEST_DIFF__NEW_RESULT, oldNewResult, newNewResult);
+			if (msgs == null)
+				msgs = notification;
+			else
+				msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setNewResult(TestResult newNewResult) {
+		if (newNewResult != newResult) {
+			NotificationChain msgs = null;
+			if (newResult != null)
+				msgs = ((InternalEObject) newResult).eInverseRemove(this, EOPPOSITE_FEATURE_BASE
+					- ConfigPackage.TEST_DIFF__NEW_RESULT, null, msgs);
+			if (newNewResult != null)
+				msgs = ((InternalEObject) newNewResult).eInverseAdd(this, EOPPOSITE_FEATURE_BASE
+					- ConfigPackage.TEST_DIFF__NEW_RESULT, null, msgs);
+			msgs = basicSetNewResult(newNewResult, msgs);
+			if (msgs != null)
+				msgs.dispatch();
+		} else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_DIFF__NEW_RESULT, newNewResult,
+				newNewResult));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+		case ConfigPackage.TEST_DIFF__OLD_RESULT:
+			return basicSetOldResult(null, msgs);
+		case ConfigPackage.TEST_DIFF__NEW_RESULT:
+			return basicSetNewResult(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case ConfigPackage.TEST_DIFF__LAST_UPDATE:
+			return getLastUpdate();
+		case ConfigPackage.TEST_DIFF__CONFIG:
+			if (resolve)
+				return getConfig();
+			return basicGetConfig();
+		case ConfigPackage.TEST_DIFF__OLD_RESULT:
+			return getOldResult();
+		case ConfigPackage.TEST_DIFF__NEW_RESULT:
+			return getNewResult();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case ConfigPackage.TEST_DIFF__LAST_UPDATE:
+			setLastUpdate((Date) newValue);
+			return;
+		case ConfigPackage.TEST_DIFF__CONFIG:
+			setConfig((TestConfig) newValue);
+			return;
+		case ConfigPackage.TEST_DIFF__OLD_RESULT:
+			setOldResult((TestResult) newValue);
+			return;
+		case ConfigPackage.TEST_DIFF__NEW_RESULT:
+			setNewResult((TestResult) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case ConfigPackage.TEST_DIFF__LAST_UPDATE:
+			setLastUpdate(LAST_UPDATE_EDEFAULT);
+			return;
+		case ConfigPackage.TEST_DIFF__CONFIG:
+			setConfig((TestConfig) null);
+			return;
+		case ConfigPackage.TEST_DIFF__OLD_RESULT:
+			setOldResult((TestResult) null);
+			return;
+		case ConfigPackage.TEST_DIFF__NEW_RESULT:
+			setNewResult((TestResult) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case ConfigPackage.TEST_DIFF__LAST_UPDATE:
+			return LAST_UPDATE_EDEFAULT == null ? lastUpdate != null : !LAST_UPDATE_EDEFAULT.equals(lastUpdate);
+		case ConfigPackage.TEST_DIFF__CONFIG:
+			return config != null;
+		case ConfigPackage.TEST_DIFF__OLD_RESULT:
+			return oldResult != null;
+		case ConfigPackage.TEST_DIFF__NEW_RESULT:
+			return newResult != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (lastUpdate: ");
+		result.append(lastUpdate);
+		result.append(')');
+		return result.toString();
+	}
+
+} // TestDiffImpl
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestResultImpl.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestResultImpl.java
new file mode 100644
index 0000000..2552221
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestResultImpl.java
@@ -0,0 +1,419 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Test Result</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestResultImpl#getSeedCount <em>Seed Count</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestResultImpl#getTestName <em>Test Name</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestResultImpl#getError <em>Error</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestResultImpl#getFailure <em>Failure</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestResultImpl#getExecutionTime <em>Execution Time</em>}</li>
+ * </ul>
+ * </p>
+ * 
+ * @generated
+ */
+public class TestResultImpl extends EObjectImpl implements TestResult {
+	/**
+	 * The default value of the '{@link #getSeedCount() <em>Seed Count</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getSeedCount()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int SEED_COUNT_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getSeedCount() <em>Seed Count</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getSeedCount()
+	 * @generated
+	 * @ordered
+	 */
+	protected int seedCount = SEED_COUNT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getTestName() <em>Test Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getTestName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String TEST_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getTestName() <em>Test Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getTestName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String testName = TEST_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getError() <em>Error</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getError()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ERROR_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getError() <em>Error</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getError()
+	 * @generated
+	 * @ordered
+	 */
+	protected String error = ERROR_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getFailure() <em>Failure</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getFailure()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String FAILURE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getFailure() <em>Failure</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getFailure()
+	 * @generated
+	 * @ordered
+	 */
+	protected String failure = FAILURE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getExecutionTime() <em>Execution Time</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getExecutionTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long EXECUTION_TIME_EDEFAULT = 0L;
+
+	/**
+	 * The cached value of the '{@link #getExecutionTime() <em>Execution Time</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getExecutionTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected long executionTime = EXECUTION_TIME_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected TestResultImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ConfigPackage.Literals.TEST_RESULT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public int getSeedCount() {
+		return seedCount;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setSeedCount(int newSeedCount) {
+		int oldSeedCount = seedCount;
+		seedCount = newSeedCount;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_RESULT__SEED_COUNT, oldSeedCount,
+				seedCount));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public String getTestName() {
+		return testName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setTestName(String newTestName) {
+		String oldTestName = testName;
+		testName = newTestName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_RESULT__TEST_NAME, oldTestName,
+				testName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public String getError() {
+		return error;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setError(String newError) {
+		String oldError = error;
+		error = newError;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_RESULT__ERROR, oldError, error));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public String getFailure() {
+		return failure;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setFailure(String newFailure) {
+		String oldFailure = failure;
+		failure = newFailure;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_RESULT__FAILURE, oldFailure,
+				failure));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public long getExecutionTime() {
+		return executionTime;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setExecutionTime(long newExecutionTime) {
+		long oldExecutionTime = executionTime;
+		executionTime = newExecutionTime;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_RESULT__EXECUTION_TIME,
+				oldExecutionTime, executionTime));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case ConfigPackage.TEST_RESULT__SEED_COUNT:
+			return getSeedCount();
+		case ConfigPackage.TEST_RESULT__TEST_NAME:
+			return getTestName();
+		case ConfigPackage.TEST_RESULT__ERROR:
+			return getError();
+		case ConfigPackage.TEST_RESULT__FAILURE:
+			return getFailure();
+		case ConfigPackage.TEST_RESULT__EXECUTION_TIME:
+			return getExecutionTime();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case ConfigPackage.TEST_RESULT__SEED_COUNT:
+			setSeedCount((Integer) newValue);
+			return;
+		case ConfigPackage.TEST_RESULT__TEST_NAME:
+			setTestName((String) newValue);
+			return;
+		case ConfigPackage.TEST_RESULT__ERROR:
+			setError((String) newValue);
+			return;
+		case ConfigPackage.TEST_RESULT__FAILURE:
+			setFailure((String) newValue);
+			return;
+		case ConfigPackage.TEST_RESULT__EXECUTION_TIME:
+			setExecutionTime((Long) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case ConfigPackage.TEST_RESULT__SEED_COUNT:
+			setSeedCount(SEED_COUNT_EDEFAULT);
+			return;
+		case ConfigPackage.TEST_RESULT__TEST_NAME:
+			setTestName(TEST_NAME_EDEFAULT);
+			return;
+		case ConfigPackage.TEST_RESULT__ERROR:
+			setError(ERROR_EDEFAULT);
+			return;
+		case ConfigPackage.TEST_RESULT__FAILURE:
+			setFailure(FAILURE_EDEFAULT);
+			return;
+		case ConfigPackage.TEST_RESULT__EXECUTION_TIME:
+			setExecutionTime(EXECUTION_TIME_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case ConfigPackage.TEST_RESULT__SEED_COUNT:
+			return seedCount != SEED_COUNT_EDEFAULT;
+		case ConfigPackage.TEST_RESULT__TEST_NAME:
+			return TEST_NAME_EDEFAULT == null ? testName != null : !TEST_NAME_EDEFAULT.equals(testName);
+		case ConfigPackage.TEST_RESULT__ERROR:
+			return ERROR_EDEFAULT == null ? error != null : !ERROR_EDEFAULT.equals(error);
+		case ConfigPackage.TEST_RESULT__FAILURE:
+			return FAILURE_EDEFAULT == null ? failure != null : !FAILURE_EDEFAULT.equals(failure);
+		case ConfigPackage.TEST_RESULT__EXECUTION_TIME:
+			return executionTime != EXECUTION_TIME_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (seedCount: ");
+		result.append(seedCount);
+		result.append(", testName: ");
+		result.append(testName);
+		result.append(", error: ");
+		result.append(error);
+		result.append(", failure: ");
+		result.append(failure);
+		result.append(", executionTime: ");
+		result.append(executionTime);
+		result.append(')');
+		return result.toString();
+	}
+
+} // TestResultImpl
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestRunImpl.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestRunImpl.java
new file mode 100644
index 0000000..9414427
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestRunImpl.java
@@ -0,0 +1,323 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.impl;
+
+import java.util.Collection;
+import java.util.Date;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Test Run</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestRunImpl#getConfig <em>Config</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestRunImpl#getTime <em>Time</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestRunImpl#getResults <em>Results</em>}</li>
+ * </ul>
+ * </p>
+ * 
+ * @generated
+ */
+public class TestRunImpl extends EObjectImpl implements TestRun {
+	/**
+	 * The cached value of the '{@link #getConfig() <em>Config</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getConfig()
+	 * @generated
+	 * @ordered
+	 */
+	protected TestConfig config;
+
+	/**
+	 * The default value of the '{@link #getTime() <em>Time</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Date TIME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getTime() <em>Time</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected Date time = TIME_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getResults() <em>Results</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getResults()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<TestResult> results;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected TestRunImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ConfigPackage.Literals.TEST_RUN;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public TestConfig getConfig() {
+		return config;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public NotificationChain basicSetConfig(TestConfig newConfig, NotificationChain msgs) {
+		TestConfig oldConfig = config;
+		config = newConfig;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET,
+				ConfigPackage.TEST_RUN__CONFIG, oldConfig, newConfig);
+			if (msgs == null)
+				msgs = notification;
+			else
+				msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setConfig(TestConfig newConfig) {
+		if (newConfig != config) {
+			NotificationChain msgs = null;
+			if (config != null)
+				msgs = ((InternalEObject) config).eInverseRemove(this, EOPPOSITE_FEATURE_BASE
+					- ConfigPackage.TEST_RUN__CONFIG, null, msgs);
+			if (newConfig != null)
+				msgs = ((InternalEObject) newConfig).eInverseAdd(this, EOPPOSITE_FEATURE_BASE
+					- ConfigPackage.TEST_RUN__CONFIG, null, msgs);
+			msgs = basicSetConfig(newConfig, msgs);
+			if (msgs != null)
+				msgs.dispatch();
+		} else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_RUN__CONFIG, newConfig, newConfig));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public Date getTime() {
+		return time;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setTime(Date newTime) {
+		Date oldTime = time;
+		time = newTime;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_RUN__TIME, oldTime, time));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EList<TestResult> getResults() {
+		if (results == null) {
+			results = new EObjectContainmentEList<TestResult>(TestResult.class, this, ConfigPackage.TEST_RUN__RESULTS);
+		}
+		return results;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+		case ConfigPackage.TEST_RUN__CONFIG:
+			return basicSetConfig(null, msgs);
+		case ConfigPackage.TEST_RUN__RESULTS:
+			return ((InternalEList<?>) getResults()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case ConfigPackage.TEST_RUN__CONFIG:
+			return getConfig();
+		case ConfigPackage.TEST_RUN__TIME:
+			return getTime();
+		case ConfigPackage.TEST_RUN__RESULTS:
+			return getResults();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case ConfigPackage.TEST_RUN__CONFIG:
+			setConfig((TestConfig) newValue);
+			return;
+		case ConfigPackage.TEST_RUN__TIME:
+			setTime((Date) newValue);
+			return;
+		case ConfigPackage.TEST_RUN__RESULTS:
+			getResults().clear();
+			getResults().addAll((Collection<? extends TestResult>) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case ConfigPackage.TEST_RUN__CONFIG:
+			setConfig((TestConfig) null);
+			return;
+		case ConfigPackage.TEST_RUN__TIME:
+			setTime(TIME_EDEFAULT);
+			return;
+		case ConfigPackage.TEST_RUN__RESULTS:
+			getResults().clear();
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case ConfigPackage.TEST_RUN__CONFIG:
+			return config != null;
+		case ConfigPackage.TEST_RUN__TIME:
+			return TIME_EDEFAULT == null ? time != null : !TIME_EDEFAULT.equals(time);
+		case ConfigPackage.TEST_RUN__RESULTS:
+			return results != null && !results.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (time: ");
+		result.append(time);
+		result.append(')');
+		return result.toString();
+	}
+
+} // TestRunImpl
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/util/ConfigAdapterFactory.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/util/ConfigAdapterFactory.java
new file mode 100644
index 0000000..67ddb3c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/util/ConfigAdapterFactory.java
@@ -0,0 +1,267 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.Root;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * 
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage
+ * @generated
+ */
+public class ConfigAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected static ConfigPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public ConfigAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = ConfigPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance
+	 * object of the model.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject) object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected ConfigSwitch<Adapter> modelSwitch = new ConfigSwitch<Adapter>() {
+		@Override
+		public Adapter caseTestConfig(TestConfig object) {
+			return createTestConfigAdapter();
+		}
+
+		@Override
+		public Adapter caseTestRun(TestRun object) {
+			return createTestRunAdapter();
+		}
+
+		@Override
+		public Adapter caseTestResult(TestResult object) {
+			return createTestResultAdapter();
+		}
+
+		@Override
+		public Adapter caseTestDiff(TestDiff object) {
+			return createTestDiffAdapter();
+		}
+
+		@Override
+		public Adapter caseDiffReport(DiffReport object) {
+			return createDiffReportAdapter();
+		}
+
+		@Override
+		public Adapter caseRoot(Root object) {
+			return createRootAdapter();
+		}
+
+		@Override
+		public Adapter caseMutatorConfig(MutatorConfig object) {
+			return createMutatorConfigAdapter();
+		}
+
+		@Override
+		public Adapter defaultCase(EObject object) {
+			return createEObjectAdapter();
+		}
+	};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject) target);
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig
+	 * <em>Test Config</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the new adapter.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig
+	 * @generated
+	 */
+	public Adapter createTestConfigAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun
+	 * <em>Test Run</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the new adapter.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun
+	 * @generated
+	 */
+	public Adapter createTestRunAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult
+	 * <em>Test Result</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the new adapter.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult
+	 * @generated
+	 */
+	public Adapter createTestResultAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff
+	 * <em>Test Diff</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the new adapter.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff
+	 * @generated
+	 */
+	public Adapter createTestDiffAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport
+	 * <em>Diff Report</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the new adapter.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport
+	 * @generated
+	 */
+	public Adapter createDiffReportAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.Root
+	 * <em>Root</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the new adapter.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.Root
+	 * @generated
+	 */
+	public Adapter createRootAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig
+	 * <em>Mutator Config</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the new adapter.
+	 * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig
+	 * @generated
+	 */
+	public Adapter createMutatorConfigAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} // ConfigAdapterFactory
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/util/ConfigSwitch.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/util/ConfigSwitch.java
new file mode 100644
index 0000000..da2a386
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/util/ConfigSwitch.java
@@ -0,0 +1,287 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.config.util;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.Root;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)} to invoke the <code>caseXXX</code> method for each
+ * class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * 
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage
+ * @generated
+ */
+public class ConfigSwitch<T> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected static ConfigPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public ConfigSwitch() {
+		if (modelPackage == null) {
+			modelPackage = ConfigPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that
+	 * result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that
+	 * result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		} else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return eSuperTypes.isEmpty() ? defaultCase(theEObject) : doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that
+	 * result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+		case ConfigPackage.TEST_CONFIG: {
+			TestConfig testConfig = (TestConfig) theEObject;
+			T result = caseTestConfig(testConfig);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case ConfigPackage.TEST_RUN: {
+			TestRun testRun = (TestRun) theEObject;
+			T result = caseTestRun(testRun);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case ConfigPackage.TEST_RESULT: {
+			TestResult testResult = (TestResult) theEObject;
+			T result = caseTestResult(testResult);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case ConfigPackage.TEST_DIFF: {
+			TestDiff testDiff = (TestDiff) theEObject;
+			T result = caseTestDiff(testDiff);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case ConfigPackage.DIFF_REPORT: {
+			DiffReport diffReport = (DiffReport) theEObject;
+			T result = caseDiffReport(diffReport);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case ConfigPackage.ROOT: {
+			Root root = (Root) theEObject;
+			T result = caseRoot(root);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case ConfigPackage.MUTATOR_CONFIG: {
+			MutatorConfig mutatorConfig = (MutatorConfig) theEObject;
+			T result = caseMutatorConfig(mutatorConfig);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		default:
+			return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Test Config</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Test Config</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseTestConfig(TestConfig object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Test Run</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Test Run</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseTestRun(TestRun object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Test Result</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Test Result</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseTestResult(TestResult object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Test Diff</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Test Diff</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseTestDiff(TestDiff object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Diff Report</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Diff Report</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseDiffReport(DiffReport object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Root</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Root</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseRoot(Root object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Mutator Config</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Mutator Config</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseMutatorConfig(MutatorConfig object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T defaultCase(EObject object) {
+		return null;
+	}
+
+} // ConfigSwitch
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/CreateAllDiffs.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/CreateAllDiffs.java
new file mode 100644
index 0000000..5d86204
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/CreateAllDiffs.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.diff;
+
+import java.io.IOException;
+
+import org.dom4j.DocumentException;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+import org.junit.Test;
+
+/**
+ * Class used as junit plugin test to create {@link org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport}s from an
+ * {@link TestRunProvider}.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+public class CreateAllDiffs {
+
+	private static final String CREATE_DIFFS = "createDiffs";
+
+	/**
+	 * Creates all {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff}s from an {@link TestRunProvider}.
+	 */
+	@Test
+	public void createAllDiffs() {
+		
+		if(!Boolean.parseBoolean(System.getProperty(CREATE_DIFFS))){
+			return;
+		}
+		
+		DiffGenerator diffGenerator = new DiffGenerator();
+		
+		try {
+			HudsonTestRunProvider runProvider = new HudsonTestRunProvider();
+			for (TestConfig config : runProvider.getAllConfigs()) {
+				runProvider.setConfig(config);
+				TestRun[] runs = runProvider.getTestRuns();
+				diffGenerator.createDiff(runs[0], runs[1]);
+			}		
+		} catch (DocumentException e) {
+			throw new RuntimeException("Could not create diffs.", e);
+		} catch (IOException e) {
+			throw new RuntimeException("Could not create diffs.", e);
+		}
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/DiffGenerator.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/DiffGenerator.java
new file mode 100644
index 0000000..f49a991
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/DiffGenerator.java
@@ -0,0 +1,202 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.diff;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.emfstore.fuzzy.emf.FuzzyUtil;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+
+/**
+ * Generates {@link TestDiff}s out of {@link TestRun}.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+public class DiffGenerator {
+
+	private DiffReport diffReport;
+
+	private Resource diffResource;
+
+	/**
+	 * A {@link DiffGenerator} with the standard diff file {@link FuzzyUtil#DIFF_FILE}.
+	 */
+	public DiffGenerator() {
+		this(FuzzyUtil.DIFF_FILE);
+	}
+
+	/**
+	 * A {@link DiffGenerator} with using the diffPath.
+	 * 
+	 * @param diffPath The path to the Diff file.
+	 */
+	public DiffGenerator(String diffPath) {
+		this(FuzzyUtil.createResource(diffPath));
+	}
+
+	/**
+	 * A {@link DiffGenerator} using the diffResource.
+	 * 
+	 * @param diffResource The resource to use for the diff.
+	 */
+	public DiffGenerator(Resource diffResource) {
+		this.diffResource = diffResource;
+
+		if (FuzzyUtil.resourceExists(diffResource)) {
+			try {
+				diffResource.load(null);
+			} catch (IOException e) {
+				throw new RuntimeException("Could not load resource: " + diffResource.getURI(), e);
+			}
+		}
+
+		diffReport = getDiffReport(diffResource);
+	}
+
+	/**
+	 * Create a diff from two {@link TestRun}s.
+	 * 
+	 * @param firstRun The first {@link TestRun}.
+	 * @param secondRun The second {@link TestRun}.
+	 * @throws IOException If there is a saving/loading failure with resources.
+	 */
+	public void createDiff(TestRun firstRun, TestRun secondRun) throws IOException {
+
+		TestConfig config = firstRun.getConfig();
+
+		// check if it already contains the config
+		boolean containsConfig = false;
+		// create map containing existing diffs
+		// identified through testname + seedcount (e.g. test1)
+		Map<String, TestDiff> existingDiffs = new HashMap<String, TestDiff>();
+		List<TestDiff> diffs = diffReport.getDiffs();
+		for (TestDiff diff : diffs) {
+
+			// add existing diffs
+			TestResult result = FuzzyUtil.getValidTestResult(diff);
+			existingDiffs.put(getResultIdentifier(result), diff);
+
+			// check for configs
+			if ((!containsConfig) && (diff.getConfig().getId().equals(config.getId()))) {
+				containsConfig = true;
+				config = diff.getConfig();
+			}
+		}
+
+		// if the resource does not contain the config already add it
+		if (!containsConfig) {
+			diffResource.getContents().add(config);
+		}
+
+		// create diffs for the two testruns
+		checkForDiffs(firstRun.getResults(), secondRun.getResults(), config, existingDiffs);
+		checkForDiffs(secondRun.getResults(), firstRun.getResults(), config, existingDiffs);
+
+		diffResource.getContents().add(diffReport);
+		diffResource.save(null);
+	}
+
+	private void checkForDiffs(List<TestResult> firstResults, List<TestResult> secondResults, TestConfig config,
+		Map<String, TestDiff> existingDiffs) {
+		EList<TestDiff> diffs = diffReport.getDiffs();
+		for (TestResult result : new ArrayList<TestResult>(firstResults)) {
+			TestResult corrResult = getCorrespondingTestResult(result, secondResults);
+
+			TestDiff diff = getChangedTestDiff(result, corrResult);
+			if (diff != null) {
+				diff.setConfig(config);
+
+				// remove diff if it already contains it
+				diffs.remove(existingDiffs.get(getResultIdentifier(result)));
+				diffs.add(diff);
+			}
+		}
+	}
+
+	private static String getResultIdentifier(TestResult result) {
+		return result.getTestName() + result.getSeedCount();
+	}
+
+	private static TestDiff getChangedTestDiff(TestResult fRes, TestResult sRes) {
+		boolean changed = false;
+
+		// check if a state switch occured
+		// TODO test state switches
+		if (fRes == null || sRes == null) {
+			changed = true;
+		} else if (changed(fRes.getFailure(), sRes.getFailure())) {
+			changed = true;
+		} else if (changed(fRes.getError(), sRes.getError())) {
+			changed = true;
+		} else if (fRes.getFailure() != null && sRes.getError() != null) {
+			changed = true;
+		} else if (fRes.getError() != null && sRes.getFailure() != null) {
+			changed = true;
+		}
+
+		// if it changed, create a new TestDiff
+		if (changed) {
+			return createTestDiff(fRes, sRes);
+		}
+
+		return null;
+	}
+
+	private static boolean changed(Object o1, Object o2) {
+		if (o1 == null && o2 != null) {
+			return true;
+		}
+		if (o1 != null && o2 == null) {
+			return true;
+		}
+		return false;
+	}
+
+	private static TestDiff createTestDiff(TestResult fRes, TestResult sRes) {
+		TestDiff diff = ConfigFactory.eINSTANCE.createTestDiff();
+		diff.setLastUpdate(new Date(System.currentTimeMillis()));
+		diff.setOldResult(fRes);
+		diff.setNewResult(sRes);
+		return diff;
+	}
+
+	private static TestResult getCorrespondingTestResult(TestResult result, List<TestResult> results) {
+		for (TestResult res : results) {
+			if (res.getSeedCount() == result.getSeedCount() && res.getTestName().equals(result.getTestName())) {
+				return res;
+			}
+		}
+		return null;
+	}
+
+	private static DiffReport getDiffReport(Resource resource) {
+		for (EObject obj : resource.getContents()) {
+			if (obj instanceof DiffReport) {
+				return (DiffReport) obj;
+			}
+		}
+		return ConfigFactory.eINSTANCE.createDiffReport();
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/FileTestRunProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/FileTestRunProvider.java
new file mode 100644
index 0000000..26263f4
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/FileTestRunProvider.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.diff;
+
+import java.io.IOException;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.emfstore.fuzzy.emf.FuzzyUtil;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+
+/**
+ * A {@link TestRunProvider} reading the infos out of files.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+public class FileTestRunProvider extends TestRunProvider {
+
+	@Override
+	public TestRun[] getTestRuns() throws IOException {
+
+		Resource run1Resource = FuzzyUtil.createResource("file://D:/downloads/1.xml");
+		Resource run2Resource = FuzzyUtil.createResource("file://D:/downloads/2.xml");
+
+		if (FuzzyUtil.resourceExists(run1Resource)) {
+			run1Resource.load(null);
+		}
+		if (FuzzyUtil.resourceExists(run2Resource)) {
+			run2Resource.load(null);
+		}
+
+		return new TestRun[] { getTestRun(run1Resource), getTestRun(run2Resource) };
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/HudsonTestRunProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/HudsonTestRunProvider.java
new file mode 100644
index 0000000..0fb4fc0
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/HudsonTestRunProvider.java
@@ -0,0 +1,222 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.diff;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.emfstore.fuzzy.emf.FuzzyUtil;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+
+/**
+ * An implementation of {@link TestRunProvider} to provide {@link TestRun}s created by the CI-Server Hudson.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+public class HudsonTestRunProvider extends TestRunProvider {
+
+	private static final String JOB = "job/";
+
+	private static SAXReader saxReader = new SAXReader();
+
+	private String hudsonUrl;
+
+	private static String jobUrl;
+
+	private int firstBuildNumber;
+
+	private int secondBuildNumber;
+
+	/**
+	 * The prefix for hudson peroperties.
+	 */
+	public static final String PROP_HUDSON = ".hudson";
+
+	/**
+	 * The hudson url property.
+	 */
+	public static final String PROP_URL = ".url";
+
+	/**
+	 * The hudson artifact folder property.
+	 */
+	public static final String PROP_ARTIFACT_FOLDER = ".artifact.folder";
+
+	/**
+	 * The hudson port property.
+	 */
+	public static final String PROP_PORT = ".port";
+
+	/**
+	 * The name of the hudson job property.
+	 */
+	public static final String PROP_JOB = ".job";
+
+	/**
+	 * The property of the hudson diff job.
+	 */
+	public static final String PROP_DIFF_JOB = ".diffjob";
+
+	private static final String LAST_BUILD = "lastBuild";
+
+	/**
+	 * An array containing all valid states of a hudson build. Valid means it can be used for creating diffs.
+	 */
+	public static final String[] VALID_STATES = new String[] { "SUCCESS", "UNSTABLE" };
+
+	private static final String ARTIFACT = FuzzyUtil.getProperty(PROP_HUDSON + PROP_ARTIFACT_FOLDER, "/artifact/");
+
+	/**
+	 * Standard constructor using the last build and the build before the last build for reading testruns.
+	 * 
+	 * @throws DocumentException If it cannot read the buildnumbers correctly from hudson.
+	 * @throws IOException If it cannot read the buildnumbers correctly from hudson.
+	 */
+	public HudsonTestRunProvider() throws DocumentException, IOException {
+		initProperties();
+
+		firstBuildNumber = getLastValidBuildNumber(
+			Integer.parseInt(getFirstElementValue(jobUrl + LAST_BUILD + "/api/xml?tree=number")), jobUrl);
+		secondBuildNumber = getLastValidBuildNumber(firstBuildNumber - 1, jobUrl);
+	}
+
+	/**
+	 * Constructor using tow special numbers for testruns.
+	 * 
+	 * @param firstBuildNumber The number of the first build (first from the last one backwards, so it is later than the
+	 *            second one).
+	 * @param secondBuildNumber The number of the second build.
+	 */
+	public HudsonTestRunProvider(int firstBuildNumber, int secondBuildNumber) {
+		initProperties();
+
+		this.firstBuildNumber = firstBuildNumber;
+		this.secondBuildNumber = secondBuildNumber;
+	}
+
+	private void initProperties() {
+		hudsonUrl = getHudsonUrl();
+		jobUrl = hudsonUrl + JOB + FuzzyUtil.getProperty(PROP_HUDSON + PROP_JOB, "Explorer") + "/";
+	}
+
+	private static String getHudsonUrl() {
+		String port = FuzzyUtil.getProperty(PROP_HUDSON + PROP_PORT, null);
+		return FuzzyUtil.getProperty(PROP_HUDSON + PROP_URL, "http://localhost") + (port != null ? (":" + port) : "")
+			+ "/";
+	}
+
+	private static int getLastValidBuildNumber(int maxBuildNumber, String jobUrl) throws MalformedURLException,
+		DocumentException {
+		if (maxBuildNumber < 0) {
+			throw new RuntimeException("There are not enough valid builds till now!");
+		}
+		if (isValidBuild(maxBuildNumber, jobUrl)) {
+			return maxBuildNumber;
+		} else {
+			return getLastValidBuildNumber(maxBuildNumber - 1, jobUrl);
+		}
+	}
+
+	private static boolean isValidBuild(int buildNumber, String jobUrl) throws MalformedURLException, DocumentException {
+		String result = getFirstElementValue(jobUrl + buildNumber + "/api/xml?tree=result");
+		for (String valid : VALID_STATES) {
+			if (valid.equals(result)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	@SuppressWarnings("unchecked")
+	private static String getFirstElementValue(String url) throws MalformedURLException, DocumentException {
+		Document doc = saxReader.read(new URL(url));
+		List<Element> elements = doc.getRootElement().elements();
+		if (elements.size() == 0) {
+			throw new RuntimeException("There are no elements in the result of the url: " + url);
+		}
+		return elements.get(0).getText();
+	}
+
+	@Override
+	public TestRun[] getTestRuns() throws IOException {
+
+		TestRun[] runs = new TestRun[2];
+
+		Resource resource = getTestRunResource(firstBuildNumber);
+		if (!FuzzyUtil.resourceExists(resource)) {
+			throw new RuntimeException("No TestRun file for first run!");
+		}
+		resource.load(null);
+
+		runs[0] = getTestRun(resource);
+
+		resource = getTestRunResource(secondBuildNumber);
+		if (!FuzzyUtil.resourceExists(resource)) {
+			throw new RuntimeException("No TestRun file for second run!");
+		}
+		resource.load(null);
+
+		runs[1] = getTestRun(resource);
+
+		return runs;
+	}
+
+	private Resource getTestRunResource(int buildNumber) {
+		return FuzzyUtil.createResource(jobUrl + buildNumber + ARTIFACT + FuzzyUtil.FUZZY_FOLDER + FuzzyUtil.RUN_FOLDER
+			+ getTestConfig().getId() + FuzzyUtil.FILE_SUFFIX);
+	}
+
+	/**
+	 * @return All {@link TestConfig} which are loadable via this {@link HudsonTestRunProvider}.
+	 */
+	public List<TestConfig> getAllConfigs() {
+		Resource resource = FuzzyUtil.createResource(jobUrl + firstBuildNumber + ARTIFACT + FuzzyUtil.FUZZY_FOLDER
+			+ FuzzyUtil.TEST_CONFIG_FILE);
+		try {
+			resource.load(null);
+		} catch (IOException e) {
+			throw new RuntimeException("Could not load configs file!", e);
+		}
+		List<TestConfig> configs = new ArrayList<TestConfig>();
+		for (EObject obj : resource.getContents()) {
+			if (obj instanceof TestConfig) {
+				configs.add((TestConfig) obj);
+			}
+		}
+		return configs;
+	}
+
+	/**
+	 * @return The diff resource created by hudson.
+	 * @throws DocumentException 
+	 * 			in case an error occurs during obtainment of the resource.
+	 * @throws MalformedURLException
+	 * 			in case an error occurs during obtainment of the resource.
+	 */
+	public static Resource getDiffResource() throws MalformedURLException, DocumentException {
+		String diffJobUrl = getHudsonUrl() + JOB + FuzzyUtil.getProperty(PROP_HUDSON + PROP_DIFF_JOB, "Diff") + "/";
+		int lastValidNumber = getLastValidBuildNumber(
+			Integer.parseInt(getFirstElementValue(diffJobUrl + LAST_BUILD + "/api/xml?tree=number")), diffJobUrl);
+		return FuzzyUtil.createResource(diffJobUrl + lastValidNumber + ARTIFACT + FuzzyUtil.FUZZY_FOLDER + "diff"
+			+ FuzzyUtil.FILE_SUFFIX);
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/TestRunProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/TestRunProvider.java
new file mode 100644
index 0000000..c745b5c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/TestRunProvider.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy.emf.diff;
+
+import java.io.IOException;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+
+/**
+ * Abstract TestRunProvider to provide the {@link TestRun}s needed in the {@link DiffGenerator}.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+public abstract class TestRunProvider {
+
+	/**
+	 * The config for which to provide testruns.
+	 */
+	private TestConfig config;
+
+	/**
+	 * @return The two {@link TestRun}s specified by the config and this provider.
+	 * @throws IOException If there is an error reading the {@link TestRun}s.
+	 */
+	public abstract TestRun[] getTestRuns() throws IOException;
+
+	/**
+	 * @param config The new {@link TestConfig} to use.
+	 */
+	public void setConfig(TestConfig config) {
+		this.config = config;
+	}
+
+	/**
+	 * @param resource The {@link Resource} where to get a {@link TestRun} out.
+	 * @return The {@link TestRun} out of the {@link Resource}.
+	 */
+	protected TestRun getTestRun(Resource resource) {
+		for (EObject obj : resource.getContents()) {
+			if (obj instanceof TestRun) {
+				return (TestRun) obj;
+			}
+		}
+		throw new RuntimeException("Could not load TestRuns from config!");
+	}
+
+	/**
+	 * @return The current {@link TestConfig}.
+	 */
+	protected TestConfig getTestConfig() {
+		return config;
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/.classpath b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/.project b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/.project
new file mode 100644
index 0000000..3724be2
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.emfstore.fuzzy</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+	</natures>
+</projectDescription>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..af0f20f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..15b8456
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Fuzzy JUnit Testing Framework (Incubation)
+Bundle-SymbolicName: org.eclipse.emf.emfstore.fuzzy;singleton:=true
+Bundle-Version: 0.9.3.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: Eclipse Modeling Project
+Bundle-Localization: plugin
+Export-Package: org.eclipse.emf.emfstore.fuzzy
+Require-Bundle: org.junit4;bundle-version="[4.8.1,5.0.0)";visibility:=reexport
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/build.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/build.properties
new file mode 100644
index 0000000..6cf6ee0
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/build.properties
@@ -0,0 +1,12 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+               META-INF/,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/plugin.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/plugin.properties
new file mode 100644
index 0000000..fe01abf
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/plugin.properties
@@ -0,0 +1,8 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+pluginName = Config Model
+providerName = www.example.org
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/pom.xml b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/pom.xml
new file mode 100644
index 0000000..6a7689f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.eclipse.emf.emfstore</groupId>
+    <artifactId>emfstore-parent</artifactId>
+    <version>0.9.3-SNAPSHOT</version>
+    <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+  </parent>
+  <groupId>org.eclipse.emf.emfstore</groupId>
+  <artifactId>org.eclipse.emf.emfstore.fuzzy</artifactId>
+  <version>0.9.3-SNAPSHOT</version>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/Annotations.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/Annotations.java
new file mode 100644
index 0000000..c654a51
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/Annotations.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotations used in tests using the {@link FuzzyRunner}.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+public final class Annotations {
+
+	/**
+	 * Annotation to declare the field in the test, where to set the data.
+	 * 
+	 * @author Julian Sommerfeldt
+	 * 
+	 */
+	@Retention(RetentionPolicy.RUNTIME)
+	@Target({ ElementType.FIELD })
+	public @interface Data {
+	}
+
+	/**
+	 * Annotations to declare the field for the {@link Util}.
+	 * 
+	 * @author Julian Sommerfeldt
+	 * 
+	 */
+	@Retention(RetentionPolicy.RUNTIME)
+	@Target({ ElementType.FIELD })
+	public @interface Util {
+	}
+
+	/**
+	 * An annotation to set the {@link FuzzyDataProvider} for the {@link FuzzyRunner}.
+	 * 
+	 * @author Julian Sommerfeldt
+	 * 
+	 */
+	@Retention(RetentionPolicy.RUNTIME)
+	@Target({ ElementType.TYPE })
+	public @interface DataProvider {
+
+		/***/
+		Class<?> value();
+	}
+
+	/**
+	 * An optional annotation to declare options to use in the {@link FuzzyDataProvider}.
+	 * 
+	 * @author Julian Sommerfeldt
+	 * 
+	 */
+	@Retention(RetentionPolicy.RUNTIME)
+	@Target({ ElementType.FIELD })
+	public @interface Options {
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/FuzzyDataProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/FuzzyDataProvider.java
new file mode 100644
index 0000000..dad15f6
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/FuzzyDataProvider.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy;
+
+import java.util.List;
+import java.util.Map;
+
+import org.junit.runner.notification.RunListener;
+import org.junit.runners.model.TestClass;
+
+/**
+ * A Data Provider for the JUnit Runner: {@link FuzzyRunner}.<br>
+ * <br>
+ * An implementation of it must have a zero-parameter constructor.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ * @param <T> Type to specify the values created by this data provider.
+ */
+public interface FuzzyDataProvider<T> {
+
+	/**
+	 * Creates and returns the data for the next run.<br>
+	 * <br>
+	 * Note that it is strongly recommended to instantiate the data
+	 * in this method for every call and not in the instantiation of the class, e.g. the init method,
+	 * to avoid overloading the memory.
+	 * 
+	 * @param count The count of the testcase.
+	 * @return The data for the next run of the test class.
+	 */
+	T get(int count);
+
+	/**
+	 * This method is called after the {@link FuzzyDataProvider} was created and everything was set BEFORE the first
+	 * run.<br/>
+	 * Should be used to to create internal stuff depending on e.g. the {@link TestClass}.
+	 */
+	void init();
+
+	/**
+	 * @return The total size(count) of the repetition of the tests.
+	 */
+	int size();
+
+	/**
+	 * @param testClass The {@link TestClass} of the calling {@link FuzzyRunner}.
+	 */
+	void setTestClass(TestClass testClass);
+
+	/**
+	 * @return A list of listeners to add to the runner, e.g. to get information about errors. <code>null</code>
+	 *         permitted.
+	 */
+	List<RunListener> getListener();
+
+	/**
+	 * @return A list of {@link Test}s to specify, which tests the {@link FuzzyRunner} should run. <code>null</code>
+	 *         means run all tests.
+	 */
+	List<Test> getTestsToRun();
+
+	/**
+	 * @return The {@link Util} for this {@link FuzzyDataProvider}. <code>null</code> permitted.
+	 */
+	Util getUtil();
+
+	/**
+	 * @param options The options for the {@link FuzzyDataProvider}. Can be <code>null</code>.
+	 */
+	void setOptions(Map<String, Object> options);
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/FuzzyRunner.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/FuzzyRunner.java
new file mode 100644
index 0000000..4f1ef25
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/FuzzyRunner.java
@@ -0,0 +1,199 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Data;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.DataProvider;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Options;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Util;
+import org.junit.runner.Runner;
+import org.junit.runner.notification.RunListener;
+import org.junit.runner.notification.RunNotifier;
+import org.junit.runners.Suite;
+import org.junit.runners.model.FrameworkField;
+import org.junit.runners.model.InitializationError;
+
+/**
+ * A {@link Runner} for JUnit, to realize multiple runs with different values for a data field. <br/>
+ * <br/>
+ * Activate with the {@link org.junit.runner.RunWith} annotation: <code>@RunWith(FuzzyRunner.class)</code>. <br/>
+ * <br/>
+ * The test class must have a field, which is not static and annotated with {@link Data}, e.g.<br/>
+ * <br/>
+ * <code>@Data<br/>private Integer i;</code> <br/>
+ * <br/>
+ * To provide data an implementation of {@link FuzzyDataProvider} can be set via the {@link DataProvider} annotation,
+ * e.g.<br/>
+ * <br/>
+ * <code>@DataProvider(IntDataProvider.class)</code><br/>
+ * <br/>
+ * This class must implement the interface {@link FuzzyDataProvider}. The default value is the example implementation:
+ * {@link IntDataProvider}.<br/>
+ * <br/>
+ * The {@link MyTest} class illustrates an example usage of the {@link FuzzyRunner}.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+public class FuzzyRunner extends Suite {
+
+	private ArrayList<Runner> runners = new ArrayList<Runner>();
+
+	private FuzzyDataProvider<?> dataProvider;
+
+	/**
+	 * The string representing a seperation in a name (e.g. test name).
+	 */
+	public static final String NAME_SEPARATOR = " ";
+
+	/**
+	 * Default constructor, called by JUnit.
+	 * 
+	 * @param clazz The root class of the suite.
+	 * @throws InitializationError If there
+	 */
+	public FuzzyRunner(Class<?> clazz) throws InitializationError {
+		super(clazz, Collections.<Runner> emptyList());
+		dataProvider = getDataProvider();
+		dataProvider.setTestClass(getTestClass());
+		dataProvider.init();
+		FrameworkField dataField = getDataField();
+		FrameworkField utilField = getUtilField();
+		FrameworkField optionsField = getOptionsField();
+		org.eclipse.emf.emfstore.fuzzy.Util util = dataProvider.getUtil();
+		for (int i = 0; i < dataProvider.size(); i++) {
+			FuzzyTestClassRunner runner = new FuzzyTestClassRunner(clazz, dataProvider, dataField, utilField,
+				optionsField, util, i + 1);
+			if (runner.getChildren().size() > 0) {
+				runners.add(runner);
+			}
+		}
+	}
+
+	/*
+	 * Override to add RunListeners of the FuzzyDataProvider
+	 * (non-Javadoc)
+	 * @see org.junit.runners.ParentRunner#run(org.junit.runner.notification.RunNotifier)
+	 */
+	@Override
+	public void run(final RunNotifier notifier) {
+		List<RunListener> listener = dataProvider.getListener();
+		if (listener != null) {
+			for (RunListener runListener : listener) {
+				notifier.addListener(runListener);
+			}
+		}
+		super.run(notifier);
+	}
+
+	/**
+	 * @return The field annotated with {@link Util}.
+	 * @throws Exception If there is are more than one fitting fields.
+	 */
+	private FrameworkField getUtilField() {
+		return getSingleStaticFrameworkField(Util.class);
+	}
+
+	private FrameworkField getOptionsField() {
+		return getSingleStaticFrameworkField(Options.class);
+	}
+
+	private FrameworkField getSingleStaticFrameworkField(Class<? extends Annotation> annotation) {
+		List<FrameworkField> fields = getTestClass().getAnnotatedFields(annotation);
+
+		// Check if there are more than one Data field in the class
+		if (fields.size() > 1) {
+			throw new RuntimeException("Only one field annotated with " + annotation.getSimpleName() + " permitted: "
+				+ getTestClass().getName() + " contains " + fields.size());
+		}
+
+		// get the field and check modifiers
+		for (FrameworkField field : fields) {
+			int modifiers = field.getField().getModifiers();
+			if (!Modifier.isStatic(modifiers)) {
+				return field;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * @return The field annotated with {@link Data}.
+	 * @throws InitializationError
+	 * @throws Exception If there is not exact one fitting field.
+	 */
+	private FrameworkField getDataField() throws InitializationError {
+		FrameworkField field = getSingleStaticFrameworkField(Data.class);
+
+		if (field == null) {
+			throw new InitializationError("No non-static model field anntoted with " + Data.class.getSimpleName()
+				+ " in class " + getTestClass().getName());
+		}
+
+		return field;
+	}
+
+	/**
+	 * @return The {@link FuzzyDataProvider} defined by the {@link DataProvider} annotation or the default one.
+	 * @throws InitializationError
+	 * @throws Exception If the data provider does not implement the {@link FuzzyDataProvider} interface.
+	 */
+	private FuzzyDataProvider<?> getDataProvider() throws InitializationError {
+		// Get the DataProvider Annotation
+		Annotation[] annotations = getTestClass().getAnnotations();
+
+		// take default DataProvider, if there is no annotation
+		Class<?> dataProviderClass = null;
+
+		// check for the dataprovider annotation
+		for (Annotation annotation : annotations) {
+			if (annotation instanceof DataProvider) {
+
+				// Check if the given class is an implementation of FuzzyDataProvider
+				dataProviderClass = ((DataProvider) annotation).value();
+				if (!FuzzyDataProvider.class.isAssignableFrom(dataProviderClass)) {
+					throw new InitializationError(dataProviderClass + " is not an implementation of "
+						+ FuzzyDataProvider.class.getSimpleName());
+				}
+			}
+		}
+
+		// create a new instance of the DataProvider		
+		try {
+			return (FuzzyDataProvider<?>) dataProviderClass.getConstructor().newInstance();
+		} catch (InstantiationException e) {
+			throw new InitializationError("The DataProvider must have a zero-parameter constructor!");
+		} catch (IllegalAccessException e) {
+			throw new InitializationError("The DataProvider must have a zero-parameter constructor!");
+		} catch (IllegalArgumentException e) {
+			throw new InitializationError("The DataProvider must have a zero-parameter constructor!");
+		} catch (InvocationTargetException e) {
+			throw new InitializationError("The DataProvider must have a zero-parameter constructor!");
+		} catch (NoSuchMethodException e) {
+			throw new InitializationError("The DataProvider must have a zero-parameter constructor!");
+		} catch (SecurityException e) {
+			throw new InitializationError("The DataProvider must have a zero-parameter constructor!");
+		}		 
+	}
+
+	@Override
+	protected List<Runner> getChildren() {
+		return runners;
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/FuzzyTestClassRunner.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/FuzzyTestClassRunner.java
new file mode 100644
index 0000000..10cabe6
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/FuzzyTestClassRunner.java
@@ -0,0 +1,190 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Data;
+import org.junit.runner.notification.RunNotifier;
+import org.junit.runners.BlockJUnit4ClassRunner;
+import org.junit.runners.model.FrameworkField;
+import org.junit.runners.model.FrameworkMethod;
+import org.junit.runners.model.InitializationError;
+import org.junit.runners.model.Statement;
+
+/**
+ * A {@link org.junit.runner.Runner} for each {@link org.junit.runners.model.TestClass}.
+ * Used in the {@link FuzzyRunner}.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+public class FuzzyTestClassRunner extends BlockJUnit4ClassRunner {
+
+	/**
+	 * Which run is it?
+	 */
+	private int counter;
+
+	/**
+	 * The {@link FuzzyDataProvider}, which "contains" the data for the test.
+	 */
+	private FuzzyDataProvider<?> dataProvider;
+
+	/**
+	 * The {@link FrameworkField} of the {@link TestClass} where to put in the data.
+	 */
+	private FrameworkField dataField;
+
+	/**
+	 * The {@link FrameworkField} for the {@link Util}.
+	 */
+	private FrameworkField utilField;
+
+	private Util util;
+
+	private FrameworkField optionsField;
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param type The testclass
+	 * @param dataProvider The {@link FuzzyDataProvider} providing the data to put into the dataField
+	 * @param dataField The datafield in the testclass
+	 * @param utilField the utilfield in the testclass
+	 * @param optionsField the options field in the testclass
+	 * @param util The {@link Util} class
+	 * @param counter The counter of the run
+	 * @throws InitializationError If there was a problem during the initialization of the test
+	 */
+	FuzzyTestClassRunner(Class<?> type, FuzzyDataProvider<?> dataProvider, FrameworkField dataField,
+		FrameworkField utilField, FrameworkField optionsField, Util util, int counter) throws InitializationError {
+		super(type);
+		this.counter = counter;
+		this.dataField = dataField;
+		this.utilField = utilField;
+		this.optionsField = optionsField;
+		this.util = util;
+		this.dataProvider = dataProvider;
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public Object createTest() {
+		try {
+			// create a new instance of the testclass
+			Object testInstance = getTestClass().getOnlyConstructor().newInstance();
+
+			// set the options to dataprovider
+			if (optionsField != null) {
+				Object options = getValueFromField(optionsField.getField(), testInstance);
+				if (options == null) {
+					throw new IllegalStateException(
+						"The options field has to be not null! Fill it or remove annotation.");
+				}
+				try {
+					dataProvider.setOptions((Map<String, Object>) options);
+				} catch (ClassCastException e) {
+					throw new ClassCastException("The options field is not of type: Map<String, Object>!");
+				}
+			}
+
+			// get the new data from dataprovider
+			Object data = dataProvider.get(counter);
+
+			// set the data to the datafield
+			setValueToField(dataField.getField(), testInstance, data,
+				"The field annotated with " + Data.class.getSimpleName()
+					+ " does not fit to the type of the dataprovider (" + dataProvider.getClass() + ").");
+
+			// set the util to the util field
+			if (util != null && utilField != null) {
+				setValueToField(utilField.getField(), testInstance, util,
+					"The field annotated " + Util.class.getSimpleName() + " does not fit to the Util type!");
+			}
+
+			return testInstance;		
+		} catch (InstantiationException e) {
+			throw new RuntimeException(e);
+		} catch (IllegalAccessException e) {
+			throw new RuntimeException(e);
+		} catch (InvocationTargetException e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	private Object getValueFromField(Field field, Object instance) throws IllegalAccessException {
+		try{
+			field.setAccessible(true);
+			Object o = field.get(instance);
+			return o;
+		} finally {
+			field.setAccessible(false);
+		}
+	}
+
+	private void setValueToField(Field field, Object instance, Object value, String errorMsg) throws IllegalAccessException
+		 {
+		try {
+			field.setAccessible(true);
+			field.set(instance, value);
+		} finally {
+			field.setAccessible(false);
+		}
+	}
+
+	@Override
+	protected List<FrameworkMethod> getChildren() {
+		List<Test> testsToRun = dataProvider.getTestsToRun();
+		List<FrameworkMethod> allChildren = super.getChildren();
+
+		// check if it should filter tests
+		if (testsToRun != null) {
+			List<FrameworkMethod> filteredChildren = new ArrayList<FrameworkMethod>();
+			for (Test test : testsToRun) {
+				String name = test.getName();
+				int seedCount = test.getSeedCount();
+				for (FrameworkMethod child : allChildren) {
+					if (seedCount == counter && name.equals(child.getName())) {
+						filteredChildren.add(child);
+					}
+				}
+			}
+			return filteredChildren;
+		}
+
+		// if not return all children
+		return allChildren;
+	}
+
+	private String testName(String name) {
+		return String.format("%s%s[%s]", name, FuzzyRunner.NAME_SEPARATOR, counter);
+	}
+
+	@Override
+	protected String testName(final FrameworkMethod method) {
+		return testName(method.getName());
+	}
+
+	@Override
+	protected String getName() {
+		return String.format("%s%s[%s]", getTestClass().getName(), FuzzyRunner.NAME_SEPARATOR, counter);
+	}
+
+	@Override
+	protected Statement classBlock(RunNotifier notifier) {
+		return childrenInvoker(notifier);
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/Test.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/Test.java
new file mode 100644
index 0000000..2b0a0a3
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/Test.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy;
+
+/**
+ * 
+ * Class to get a connection between a test and a specific run of it.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+public class Test {
+
+	private String name;
+
+	private int seedCount;
+
+	/**
+	 * @param name The name of the test.
+	 * @param seedCount The count (run) of the test.
+	 */
+	public Test(String name, int seedCount) {
+		this.name = name;
+		this.seedCount = seedCount;
+	}
+
+	/**
+	 * @return The name of the test.
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * @return The run of this test.
+	 */
+	public int getSeedCount() {
+		return seedCount;
+	}
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/Util.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/Util.java
new file mode 100644
index 0000000..099198a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/Util.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ * 
+ * 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.fuzzy;
+
+/**
+ * Marker Interface for utility classes in test classes using the {@link FuzzyRunner}.
+ * 
+ * @author Julian Sommerfeldt
+ * 
+ */
+public interface Util {
+
+}
\ No newline at end of file