diff --git a/.artifactVersions b/.artifactVersions
deleted file mode 100644
index 9774cde..0000000
--- a/.artifactVersions
+++ /dev/null
@@ -1,4 +0,0 @@
-version=0.9.1-SNAPSHOT
-relengVersion=0.12.5-SNAPSHOT
-relengGroupId=org.lunifera.releng.maven
-relengP2Version=0.12.5-SNAPSHOT
diff --git a/.depVersions b/.depVersions
deleted file mode 100644
index 7f083e3..0000000
--- a/.depVersions
+++ /dev/null
@@ -1,6 +0,0 @@
-org.eclipse.xtend;min=2.7.3;max=2.8.0
-org.eclipse.xtext;min=2.7.3;max=2.8.0
-org.semanticsoft;min=2.7.3;max=3.0.0
-org.lunifera.dsl;min=0.9.0;max=0.10.0
-org.lunifera;min=0.9.0;max=0.10.0
-com.google.guava;min=10.0.0;max=19.0.0
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..845a766
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,46 @@
+bin/
+.*.jar
+**/xtend-gen
+.DS_Store
+target
+xtend-gen/
+plugin.xml_gen
+/build.runtime.kepler.latest.log.properties
+**/log
+org.eclipse.osbp.runtime.systemextension.license
+org.eclipse.osbp.runtime.systemextension.license.tests.addon
+**git.properties
+
+**/target/
+**/.metadata/
+
+**/emf-gen/**/.gitignore
+**/src-gen/**/.gitignore
+**/git.properties
+**/*.java._trace
+**/*.log
+**/*.log.properties
+
+**/bin/
+**/build/
+*.class
+*.ctrl
+**/Debug/
+.DS_Store
+*.ear
+*.war
+
+**/*.actionbin
+**/*.blipbin
+**/*.chartbin
+**/*.cubebin
+**/*.datatypebin
+**/*.dtobin
+**/*.entitybin
+**/*.servicebin
+**/*.tablebin
+**/*.uibin
+**/*.uisemanticbin
+**/*.xtendbin
+**/*.xtextbin
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.common.tests/.classpath b/org.eclipse.osbp.runtime.common.tests/.classpath
new file mode 100644
index 0000000..cf36b56
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common.tests/.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/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src/"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.common.tests/.project b/org.eclipse.osbp.runtime.common.tests/.project
index 3063fcc..6695e11 100644
--- a/org.eclipse.osbp.runtime.common.tests/.project
+++ b/org.eclipse.osbp.runtime.common.tests/.project
@@ -6,12 +6,40 @@
 	</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.pde.ds.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
 			<name>org.eclipse.m2e.core.maven2Builder</name>
 			<arguments>
 			</arguments>
 		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.babel.editor.rbeBuilder</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>org.eclipse.babel.editor.rbeNature</nature>
 	</natures>
 </projectDescription>
diff --git a/org.eclipse.osbp.runtime.common.tests/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.common.tests/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common.tests/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.common.tests/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.common.tests/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common.tests/.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.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.osbp.runtime.common.tests/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.common.tests/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common.tests/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.common.tests/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.common.tests/META-INF/MANIFEST.MF
index fc612f6..715db10 100644
--- a/org.eclipse.osbp.runtime.common.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.common.tests/META-INF/MANIFEST.MF
@@ -4,10 +4,15 @@
 Bundle-SymbolicName: org.eclipse.osbp.runtime.common.tests
 Bundle-Version: 0.9.0.qualifier
 Bundle-Vendor: Eclipse OSBP
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.junit,
- org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)"
+ org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.equinox.ds;bundle-version="1.4.400",
+ org.eclipse.osgi;bundle-version="3.11.3",
+ org.eclipse.osgi.services;bundle-version="3.5.100",
+ org.eclipse.osgi.util;bundle-version="3.3.100",
+ org.eclipse.core.runtime;bundle-version="3.12.0",
+ org.eclipse.equinox.coordinator;bundle-version="1.3.200"
 Bundle-ActivationPolicy: lazy
 Import-Package: org.knowhowlab.osgi.testing.assertions;version="1.3.0",
- org.knowhowlab.osgi.testing.utils;version="1.1.0",
  org.osgi.framework;version="1.7.0"
diff --git a/org.eclipse.osbp.runtime.common.tests/src/org/eclipse/osbp/runtime/common/session/SessionManagerTest.java b/org.eclipse.osbp.runtime.common.tests/src/org/eclipse/osbp/runtime/common/session/SessionManagerTest.java
new file mode 100644
index 0000000..1f46ed2
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common.tests/src/org/eclipse/osbp/runtime/common/session/SessionManagerTest.java
@@ -0,0 +1,246 @@
+package org.eclipse.osbp.runtime.common.session;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Function;
+
+import org.eclipse.osbp.runtime.common.session.ISessionManager.FutureResult;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.ServiceReference;
+
+public class SessionManagerTest {
+
+	private static BundleContext bc;
+	private static ISessionManager sessionManager;
+
+	@BeforeClass
+	public static void setup() {
+		bc = FrameworkUtil.getBundle(SessionManagerTest.class).getBundleContext();
+
+		ServiceReference<ISessionManager> ref = bc.getServiceReference(ISessionManager.class);
+		sessionManager = bc.getService(ref);
+		assertNotNull(sessionManager);
+
+		bc.registerService(ISession.class, new Session("1"), null);
+		bc.registerService(ISession.class, new Session("2"), null);
+		bc.registerService(ISession.class, new Session("3"), null);
+		bc.registerService(ISession.class, new Session("4"), null);
+	}
+
+	private CountDownLatch latch;
+	private AtomicInteger count;
+	private AtomicInteger error;
+	private AtomicInteger generalCount;
+
+	@Test
+	public void test_getSessions() {
+		List<ISession> result = sessionManager.getSessions((t) -> t.get("id") != null);
+		assertEquals(4, result.size());
+
+		List<ISession> result2 = sessionManager.getSessions((t) -> t.get("id").equals("2"));
+		assertEquals(1, result2.size());
+	}
+
+	@Test
+	public void test_getSessionsAsync() {
+		CompletableFuture<List<ISession>> result = sessionManager.getSessionsAsync((t) -> t.get("id") != null);
+		result.thenAccept((sessions) -> {
+			assertEquals(4, sessions.size());
+		});
+	}
+
+	@Test
+	public void test_asyncEach_Simple() {
+
+		latch = new CountDownLatch(2);
+		count = new AtomicInteger();
+		error = new AtomicInteger();
+
+		Set<String> filterIds = Collections.synchronizedSet(new HashSet<>());
+		filterIds.add("1");
+		filterIds.add("3");
+
+		List<CompletableFuture<FutureResult<String>>> results = sessionManager.asyncEach((s) -> {
+			return (String) s.get("id");
+		}, (r) -> {
+			count.incrementAndGet();
+			latch.countDown();
+			if (!r.isError) {
+				filterIds.remove(r.value);
+			}
+		}, (sessionFilter) -> filterIds.contains(sessionFilter.get("id")));
+
+		try {
+			latch.await(500, TimeUnit.MILLISECONDS);
+		} catch (InterruptedException e) {
+			fail();
+		}
+
+		assertEquals(2, count.get());
+		assertEquals(0, error.get());
+		assertEquals(0, filterIds.size());
+	}
+
+	@SuppressWarnings("unused")
+	@Test
+	public void test_asyncEach_WithException() {
+
+		latch = new CountDownLatch(4);
+		generalCount = new AtomicInteger();
+		count = new AtomicInteger();
+		error = new AtomicInteger();
+
+		List<CompletableFuture<FutureResult<String>>> results = sessionManager.asyncEach((s) -> {
+			int _c = generalCount.incrementAndGet();
+			if (_c % 2 == 0) {
+				throw new IllegalStateException();
+			}
+			return (String) s.get("id");
+		}, (r) -> {
+			if (!r.isError) {
+				count.incrementAndGet();
+			} else {
+				error.incrementAndGet();
+			}
+			latch.countDown();
+		});
+
+		try {
+			latch.await(500, TimeUnit.MILLISECONDS);
+		} catch (InterruptedException e) {
+			fail();
+		}
+
+		assertEquals(2, count.get());
+		assertEquals(2, error.get());
+	}
+
+	@Test
+	public void test_asyncAll_Simple() {
+
+		latch = new CountDownLatch(2);
+		count = new AtomicInteger();
+		error = new AtomicInteger();
+
+		Set<String> filterIds = Collections.synchronizedSet(new HashSet<>());
+		filterIds.add("1");
+		filterIds.add("3");
+
+		CompletableFuture<List<FutureResult<String>>> result = sessionManager.asyncAll((s) -> {
+			return (String) s.get("id");
+		}, (sessionFilter) -> filterIds.contains(sessionFilter.get("id")));
+
+		result.thenAccept((rl) -> {
+			for (FutureResult<String> r : rl) {
+				count.incrementAndGet();
+				latch.countDown();
+				if (!r.isError) {
+					filterIds.remove(r.value);
+				}
+			}
+		});
+
+		try {
+			latch.await(500, TimeUnit.MILLISECONDS);
+		} catch (InterruptedException e) {
+			fail();
+		}
+
+		assertEquals(2, count.get());
+		assertEquals(0, error.get());
+		assertEquals(0, filterIds.size());
+	}
+
+	@Test
+	public void test_asyncAll_WithException() {
+
+		latch = new CountDownLatch(4);
+		generalCount = new AtomicInteger();
+		count = new AtomicInteger();
+		error = new AtomicInteger();
+
+		CompletableFuture<List<FutureResult<String>>> result = sessionManager.asyncAll((s) -> {
+			int _c = generalCount.incrementAndGet();
+			if (_c % 2 == 0) {
+				throw new IllegalStateException();
+			}
+			return (String) s.get("id");
+		});
+
+		result.thenAccept((rlist) -> {
+			for (FutureResult<String> r : rlist) {
+				if (!r.isError) {
+					count.incrementAndGet();
+				} else {
+					error.incrementAndGet();
+				}
+				latch.countDown();
+			}
+		});
+
+		try {
+			latch.await(500, TimeUnit.MILLISECONDS);
+		} catch (InterruptedException e) {
+			fail();
+		}
+
+		assertEquals(2, count.get());
+		assertEquals(2, error.get());
+	}
+
+	public static class Session extends AbstractSession {
+
+		final Map<String, Object> props = new HashMap<>();
+
+		public Session(String id) {
+			super();
+			props.put("id", id);
+		}
+
+		@SuppressWarnings("unchecked")
+		@Override
+		public <T> T get(Class<T> key) {
+			return (T) props.get(key.getName());
+		}
+
+		@Override
+		public Object get(String key) {
+			return props.get(key);
+		}
+
+		@Override
+		protected <T> CompletableFuture<T> doAsync(final Function<ISession, T> function, ExecutorService executor) {
+			CompletableFuture<T> promise = new CompletableFuture<>();
+			runAsync(function, promise);
+			return promise;
+		}
+
+		protected <T> void runAsync(final Function<ISession, T> function, CompletableFuture<T> promise) {
+			new Thread(() -> {
+				try {
+					T value = function.apply(this);
+					promise.complete(value);
+				} catch (Exception e) {
+					promise.completeExceptionally(e);
+				}
+			}).start();
+		}
+
+	}
+}
diff --git a/org.eclipse.osbp.runtime.common.tests/src/org/eclipse/osbp/runtime/common/session/SessionTest.java b/org.eclipse.osbp.runtime.common.tests/src/org/eclipse/osbp/runtime/common/session/SessionTest.java
new file mode 100644
index 0000000..6b35744
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common.tests/src/org/eclipse/osbp/runtime/common/session/SessionTest.java
@@ -0,0 +1,175 @@
+package org.eclipse.osbp.runtime.common.session;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Function;
+
+import org.eclipse.osbp.runtime.common.session.ISessionManager.FutureResult;
+import org.junit.Before;
+import org.junit.Test;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+
+public class SessionTest {
+
+	private BundleContext bc;
+
+	@Before
+	public void setup() {
+		bc = FrameworkUtil.getBundle(getClass()).getBundleContext();
+	}
+
+	@Test
+	public void test_apply() {
+		Session session = new Session("1");
+		String value = session.apply((s) -> {
+			return "Foo";
+		});
+		assertEquals("Foo", value);
+	}
+
+	@Test
+	public void test_async() {
+
+		final CountDownLatch latch = new CountDownLatch(1);
+
+		Session session = new Session("1");
+		CompletableFuture<FutureResult<String>> promise = session.async((s) -> {
+			try {
+				Thread.sleep(250);
+			} catch (InterruptedException e) {
+			}
+			return "Foo";
+		}, null);
+
+		try {
+			latch.await(500, TimeUnit.MILLISECONDS);
+		} catch (InterruptedException e) {
+			fail();
+		}
+
+		assertTrue(promise.isDone());
+	}
+
+	@Test
+	public void test_async_Success() {
+
+		final CountDownLatch latch = new CountDownLatch(1);
+
+		final AtomicBoolean success = new AtomicBoolean();
+		final AtomicBoolean error = new AtomicBoolean();
+
+		Session session = new Session("1");
+		CompletableFuture<FutureResult<String>> promise = session.async((s) -> {
+			try {
+				Thread.sleep(250);
+			} catch (InterruptedException e) {
+			}
+			return "Foo";
+		}, (r) -> {
+			if (r.isError) {
+				error.set(true);
+			} else {
+				if (r.value.equals("Foo")) {
+					success.set(true);
+				}
+			}
+		});
+
+		try {
+			latch.await(500, TimeUnit.MILLISECONDS);
+		} catch (InterruptedException e) {
+			fail();
+		}
+
+		assertTrue(promise.isDone());
+		assertTrue(success.get());
+		assertFalse(error.get());
+	}
+
+	@Test
+	public void test_async_Error() {
+
+		final CountDownLatch latch = new CountDownLatch(1);
+
+		final AtomicBoolean success = new AtomicBoolean();
+		final AtomicBoolean error = new AtomicBoolean();
+
+		Session session = new Session("1");
+		CompletableFuture<FutureResult<String>> promise = session.async((s) -> {
+			try {
+				Thread.sleep(250);
+			} catch (InterruptedException e) {
+			}
+			throw new IllegalArgumentException();
+		}, (r) -> {
+			if (r.isError) {
+				if (r.error != null) {
+					error.set(true);
+				}
+			} else {
+				success.set(true);
+			}
+		});
+
+		try {
+			latch.await(500, TimeUnit.MILLISECONDS);
+		} catch (InterruptedException e) {
+			fail();
+		}
+
+		assertTrue(promise.isDone());
+		assertFalse(success.get());
+		assertTrue(error.get());
+	}
+
+	public static class Session extends AbstractSession {
+
+		final Map<String, Object> props = new HashMap<>();
+
+		public Session(String id) {
+			super();
+			props.put("id", id);
+		}
+
+		@SuppressWarnings("unchecked")
+		@Override
+		public <T> T get(Class<T> key) {
+			return (T) props.get(key.getName());
+		}
+
+		@Override
+		public Object get(String key) {
+			return props.get(key);
+		}
+
+		@Override
+		protected <T> CompletableFuture<T> doAsync(final Function<ISession, T> function, ExecutorService executor) {
+			CompletableFuture<T> promise = new CompletableFuture<>();
+			runAsync(function, promise);
+			return promise;
+		}
+
+		protected <T> void runAsync(final Function<ISession, T> function, CompletableFuture<T> promise) {
+			new Thread(() -> {
+				try {
+					T value = function.apply(this);
+					promise.complete(value);
+				} catch (Exception e) {
+					promise.completeExceptionally(e);
+				}
+			}).start();
+		}
+
+	}
+}
diff --git a/org.eclipse.osbp.runtime.common/.classpath b/org.eclipse.osbp.runtime.common/.classpath
new file mode 100644
index 0000000..43b9862
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/.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/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.common/.gitignore b/org.eclipse.osbp.runtime.common/.gitignore
new file mode 100644
index 0000000..e91d5c4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/.gitignore
@@ -0,0 +1,3 @@
+/target/
+/target/
+/target/
diff --git a/org.eclipse.osbp.runtime.common/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.common/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.common/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.common/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..a698e59
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+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.8
diff --git a/org.eclipse.osbp.runtime.common/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.common/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.common/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.common/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.common/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.common/META-INF/MANIFEST.MF
index 959d8d9..26d8ac8 100644
--- a/org.eclipse.osbp.runtime.common/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.common/META-INF/MANIFEST.MF
@@ -7,18 +7,22 @@
 Bundle-Version: 0.9.0.qualifier
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.osbp.runtime.common.annotations;version="0.9.0",
+ org.eclipse.osbp.runtime.common.bean,
  org.eclipse.osbp.runtime.common.coordination;version="0.9.0";uses:="org.osgi.service.coordinator",
  org.eclipse.osbp.runtime.common.datasource;version="0.9.0";uses:="org.eclipse.osbp.runtime.common.datasource.config",
  org.eclipse.osbp.runtime.common.datasource.config;version="0.9.0",
  org.eclipse.osbp.runtime.common.dispose;version="0.9.0",
+ org.eclipse.osbp.runtime.common.entities;version="0.9.0",
  org.eclipse.osbp.runtime.common.event;version="0.9.0";uses:="org.osgi.service.event",
  org.eclipse.osbp.runtime.common.extender;version="0.9.0",
+ org.eclipse.osbp.runtime.common.filter;version="0.9.0",
  org.eclipse.osbp.runtime.common.hash;version="0.9.0",
  org.eclipse.osbp.runtime.common.help;version="0.9.0",
  org.eclipse.osbp.runtime.common.i18n;version="0.9.0";uses:="org.eclipse.osbp.runtime.common.dispose",
  org.eclipse.osbp.runtime.common.keystroke;version="0.9.0",
  org.eclipse.osbp.runtime.common.memento;version="0.9.0";uses:="org.eclipse.osbp.runtime.common.validation",
  org.eclipse.osbp.runtime.common.metric;version="0.9.0",
+ org.eclipse.osbp.runtime.common.session;version="0.9.0",
  org.eclipse.osbp.runtime.common.shell;version="0.9.0",
  org.eclipse.osbp.runtime.common.state;version="0.9.0",
  org.eclipse.osbp.runtime.common.state.impl;version="0.9.0";x-internal:=true,
@@ -34,10 +38,11 @@
  org.osgi.service.event;version="1.3.0",
  org.osgi.service.prefs,
  org.osgi.util.tracker;version="1.5.1"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Service-Component: OSGI-INF/*
 Require-Bundle: com.google.guava,
  org.apache.commons.lang;bundle-version="2.6.0",
  org.apache.commons.collections;bundle-version="3.2.0",
  org.eclipse.core.runtime;bundle-version="3.10.0",
- org.slf4j.api;bundle-version="1.7.2"
+ org.slf4j.api;bundle-version="1.7.2",
+ org.eclipse.core.databinding.observable
diff --git a/org.eclipse.osbp.runtime.common/OSGI-INF/org.eclipse.osbp.runtime.common.session.impl.SessionManager.xml b/org.eclipse.osbp.runtime.common/OSGI-INF/org.eclipse.osbp.runtime.common.session.impl.SessionManager.xml
new file mode 100644
index 0000000..c3ebfac
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/OSGI-INF/org.eclipse.osbp.runtime.common.session.impl.SessionManager.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="activate" deactivate="deactivate" immediate="true" name="org.eclipse.osbp.runtime.common.session.impl.SessionManager">
+   <service>
+      <provide interface="org.eclipse.osbp.runtime.common.session.ISessionManager"/>
+   </service>
+   <reference bind="addSession" cardinality="0..n" interface="org.eclipse.osbp.runtime.common.session.ISession" name="Session" policy="dynamic" unbind="removeSession"/>
+   <implementation class="org.eclipse.osbp.runtime.common.session.impl.SessionManager"/>
+</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.common/OSGI-INF/org.eclipse.osbp.runtime.common.state.impl.SharedStateContextProvider.xml b/org.eclipse.osbp.runtime.common/OSGI-INF/org.eclipse.osbp.runtime.common.state.impl.SharedStateContextProvider.xml
index 44d894d..643d273 100644
--- a/org.eclipse.osbp.runtime.common/OSGI-INF/org.eclipse.osbp.runtime.common.state.impl.SharedStateContextProvider.xml
+++ b/org.eclipse.osbp.runtime.common/OSGI-INF/org.eclipse.osbp.runtime.common.state.impl.SharedStateContextProvider.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="activate" deactivate="deactivate" immediate="true" name="org.eclipse.osbp.runtime.common.state.impl.SharedStateContextProvider">
-   <implementation class="org.eclipse.osbp.runtime.common.state.impl.SharedStateContextProvider"/>
+   <property name="service.ranking" value="100"/>
    <service>
       <provide interface="org.eclipse.osbp.runtime.common.state.ISharedStateContextProvider"/>
    </service>
-   <property name="service.ranking" value="100"/>
+   <implementation class="org.eclipse.osbp.runtime.common.state.impl.SharedStateContextProvider"/>
 </scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/AsKanbanOrdering.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/AsKanbanOrdering.java
new file mode 100644
index 0000000..bb6e65a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/AsKanbanOrdering.java
@@ -0,0 +1,13 @@
+package org.eclipse.osbp.runtime.common.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+@Target({ FIELD})
+@Retention(RUNTIME)
+public @interface AsKanbanOrdering {
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/AsKanbanState.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/AsKanbanState.java
new file mode 100644
index 0000000..6e65a09
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/AsKanbanState.java
@@ -0,0 +1,13 @@
+package org.eclipse.osbp.runtime.common.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+@Target({ FIELD })
+@Retention(RUNTIME)
+public @interface AsKanbanState {
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Datamart.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Datamart.java
new file mode 100644
index 0000000..3a671ce
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Datamart.java
@@ -0,0 +1,13 @@
+package org.eclipse.osbp.runtime.common.annotations;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+@Retention(RUNTIME)
+@Target(TYPE)
+public @interface Datamart {
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DirtyStateAdapter.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DirtyStateAdapter.java
index a8170e8..8f1b4dc 100644
--- a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DirtyStateAdapter.java
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DirtyStateAdapter.java
@@ -50,12 +50,14 @@
 			if (DtoUtils.isDisposeField(objClass, event.getPropertyName())) {
 				return;
 			}
-			// dirty field not forwarded to handle dirty
-			if (DtoUtils.isDirtyField(objClass, event.getPropertyName())) {
+			// dirty field not forwarded to handle dirty, if already dirty
+			if (DtoUtils.isDirtyField(objClass, event.getPropertyName()) && DtoUtils.isDirty(object)) {
 				return;
 			}
 		} catch (SecurityException ignoreIt) {
 			LOGGER.error("{}", ignoreIt);
+		} catch (IllegalAccessException ignoreIt) {
+			LOGGER.error("{}", ignoreIt);
 		}
 
 		handleDirty(event);
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DtoUtils.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DtoUtils.java
index 39c6e12..5fc2fd9 100644
--- a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DtoUtils.java
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DtoUtils.java
@@ -19,8 +19,10 @@
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.lang.reflect.MethodUtils;
@@ -87,7 +89,48 @@
 	}
 
 	/**
-	 * Returns the id key field. Field annotated with {@link Id}.
+	 * Gets the version field. Field annotated with {@link Version}.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @return the version field
+	 */
+	public static Field getVersionField(Class<?> clazz) {
+		Info info = getInfo(clazz);
+		return info.getVersionField();
+	}
+
+	/**
+	 * Returns the id field. Field annotated with {@link Id}.
+	 *
+	 * @param dto
+	 *            the dto
+	 * @return the id field
+	 */
+	public static Object getIdValue(Object dto) {
+		Info info = getInfo(dto.getClass());
+		Field f = info.getIdField();
+		f.setAccessible(true);
+		try {
+			return f.get(dto);
+		} catch (IllegalArgumentException | IllegalAccessException e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	public static void setIdValue(Object dto, Object idValue) {
+		Info info = getInfo(dto.getClass());
+		Field f = info.getIdField();
+		f.setAccessible(true);
+		try {
+			f.set(dto, idValue);
+		} catch (IllegalArgumentException | IllegalAccessException e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	/**
+	 * Returns the field value.
 	 *
 	 * @param instance
 	 *            the instance
@@ -111,6 +154,31 @@
 	}
 
 	/**
+	 * Sets the field value.
+	 *
+	 * @param instance
+	 *            the instance
+	 * @param idProperty
+	 *            the id property
+	 * @param value
+	 *            the value
+	 */
+	public static void setValue(Object dto, String idProperty, Object value) {
+		try {
+			BeanInfo beanInfo = Introspector.getBeanInfo(dto.getClass());
+			for (PropertyDescriptor pd : beanInfo.getPropertyDescriptors()) {
+				if (pd.getName().equals(idProperty)) {
+					pd.getWriteMethod().invoke(dto, value);
+					break;
+				}
+			}
+		} catch (IntrospectionException | IllegalAccessException | IllegalArgumentException
+				| InvocationTargetException e) {
+			LOGGER.error("{}", e);
+		}
+	}
+
+	/**
 	 * Returns the domain description field. Field annotated with
 	 * #DomainDescription.
 	 *
@@ -174,6 +242,34 @@
 	}
 
 	/**
+	 * Returns true, if the given field is a id field.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @param fieldName
+	 *            the field name
+	 * @return true, if is id field
+	 */
+	public static boolean isIdField(Class<?> clazz, String fieldName) {
+		Info info = getInfo(clazz);
+		return info.getIdField() != null ? info.getIdField().getName().equals(fieldName) : false;
+	}
+
+	/**
+	 * Returns true, if the given field is a version field.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @param fieldName
+	 *            the field name
+	 * @return true, if is version field
+	 */
+	public static boolean isVersionField(Class<?> clazz, String fieldName) {
+		Info info = getInfo(clazz);
+		return info.getVersionField() != null ? info.getVersionField().getName().equals(fieldName) : false;
+	}
+
+	/**
 	 * Returns true, if the given field is a dirty field. Dirty fields indicate
 	 * that the dto is dirty.
 	 *
@@ -287,6 +383,30 @@
 	}
 
 	/**
+	 * Gets the owner domain references.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @return the owner domain references
+	 */
+	public static List<Field> getOwnerDomainReferences(Class<?> clazz) {
+		Info info = getInfo(clazz);
+		return info.getOwnerDomainReferences();
+	}
+
+	/**
+	 * Gets the member domain references.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @return the member domain references
+	 */
+	public static List<Field> getMemberDomainReferences(Class<?> clazz) {
+		Info info = getInfo(clazz);
+		return info.getMemberDomainReferences();
+	}
+
+	/**
 	 * Returns the info for the given class.
 	 *
 	 * @param clazz
@@ -389,6 +509,51 @@
 	}
 
 	/**
+	 * Unregisters the adapter as a property changed listener.
+	 *
+	 * @param adapter
+	 *            the adapter
+	 * @param dto
+	 *            the dto
+	 */
+	public static void unregisterAdapter(PropertyChangeListener adapter, Object dto) {
+		if (adapter == null || dto == null) {
+			return;
+		}
+
+		try {
+			MethodUtils.invokeMethod(dto, "removePropertyChangeListener", adapter);
+		} catch (SecurityException e) {
+			LOGGER.info("Observer for dirtyState handling could not be added for " + dto.getClass().getName());
+		} catch (IllegalAccessException e) {
+			LOGGER.info("Observer for dirtyState handling could not be added for " + dto.getClass().getName());
+		} catch (IllegalArgumentException e) {
+			LOGGER.info("Observer for dirtyState handling could not be added for " + dto.getClass().getName());
+		} catch (InvocationTargetException e) {
+			LOGGER.info("Observer for dirtyState handling could not be added for " + dto.getClass().getName());
+		} catch (NoSuchMethodException e) {
+			LOGGER.info("Observer for dirtyState handling could not be added for " + dto.getClass().getName());
+		}
+	}
+
+	public static List<String> getFieldNames(Class<?> clazz) {
+		List<String> fieldNames = new ArrayList<>();
+		try {
+			for (Field field : clazz.getDeclaredFields()) {
+				fieldNames.add(field.getName());
+			}
+
+			Class<?> superClass = clazz.getSuperclass();
+			if (superClass != null) {
+				fieldNames.addAll(getFieldNames(superClass));
+			}
+		} catch (SecurityException e) {
+			LOGGER.error("{}", e);
+		}
+		return fieldNames;
+	}
+
+	/**
 	 * Applies all required field infos to the info object.
 	 *
 	 * @param clazz
@@ -411,6 +576,17 @@
 				if (field.getAnnotation(Id.class) != null) {
 					info.idField = field;
 				}
+				if (field.getAnnotation(Version.class) != null) {
+					info.versionField = field;
+				}
+
+				if (field.getAnnotation(DomainReference.class) != null) {
+					if (field.getType().isAssignableFrom(List.class)) {
+						info.memberDomainReferences.add(field);
+					} else {
+						info.ownerDomainReferences.add(field);
+					}
+				}
 
 				if (field.getType() == PropertyChangeSupport.class) {
 					info.propertyChangeSupportField = field;
@@ -486,7 +662,7 @@
 	 *            the name
 	 * @return the field
 	 */
-	protected Field findField(Class<?> clazz, String name) {
+	protected static Field findField(Class<?> clazz, String name) {
 		try {
 			Field field = clazz.getDeclaredField(name);
 			return field;
@@ -530,6 +706,21 @@
 		/** The domain description field. */
 		private Field domainDescriptionField;
 
+		/** The version field. */
+		private Field versionField;
+
+		/**
+		 * The owner domain references = all 1 references of a oneToMany
+		 * relationship.
+		 */
+		private List<Field> ownerDomainReferences = new ArrayList<>();
+
+		/**
+		 * The member domain references = all n references of a oneToMany
+		 * relationship.
+		 */
+		private List<Field> memberDomainReferences = new ArrayList<>();
+
 		/**
 		 * Gets the dispose field.
 		 *
@@ -540,6 +731,33 @@
 		}
 
 		/**
+		 * Gets the owner domain references.
+		 *
+		 * @return the owner domain references
+		 */
+		public List<Field> getOwnerDomainReferences() {
+			return ownerDomainReferences;
+		}
+
+		/**
+		 * Gets the member domain references.
+		 *
+		 * @return the member domain references
+		 */
+		public List<Field> getMemberDomainReferences() {
+			return memberDomainReferences;
+		}
+
+		/**
+		 * Gets the version field.
+		 *
+		 * @return the version field
+		 */
+		public Field getVersionField() {
+			return versionField;
+		}
+
+		/**
 		 * Gets the dirty field.
 		 *
 		 * @return the dirty field
@@ -607,5 +825,4 @@
 		}
 
 	}
-
 }
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Filter.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Filter.java
new file mode 100644
index 0000000..f32813b
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Filter.java
@@ -0,0 +1,29 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * 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 - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * This annotation marks fields in JPA entities and DTOs, that the content is a
+ * may be used in generic search dialogs as a wildcard field. Like eg, lt, gt, ge, ... and wildcards
+ */
+@Target({ FIELD, METHOD })
+@Retention(RUNTIME)
+public @interface Filter {
+
+}
+ 
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/FilterDepth.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/FilterDepth.java
new file mode 100644
index 0000000..ec31bbb
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/FilterDepth.java
@@ -0,0 +1,35 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * 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 - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * This annotation defines the depth of generic filters.
+ */
+@Target({ FIELD, METHOD })
+@Retention(RUNTIME)
+public @interface FilterDepth {
+
+	/**
+	 * The depth of the generic filter. It will look for all fields annotated
+	 * with @Filter and @Range.
+	 * 
+	 * @return
+	 */
+	int depth();
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/IsValid.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/IsValid.java
new file mode 100644
index 0000000..b3169ba
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/IsValid.java
@@ -0,0 +1,24 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * 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 - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+@Target({ FIELD, METHOD })
+@Retention(RUNTIME)
+public @interface IsValid {
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/OnKanbanCard.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/OnKanbanCard.java
new file mode 100644
index 0000000..2467cec
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/OnKanbanCard.java
@@ -0,0 +1,13 @@
+package org.eclipse.osbp.runtime.common.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+@Target({ FIELD })
+@Retention(RUNTIME)
+public @interface OnKanbanCard {
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Range.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Range.java
new file mode 100644
index 0000000..d1210b3
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Range.java
@@ -0,0 +1,29 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * 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 - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * This annotation marks fields in JPA entities and DTOs, that the content is a
+ * may be used in generic search dialogs as a range selection. Eg from-until fields.
+ */
+@Target({ FIELD, METHOD })
+@Retention(RUNTIME)
+public @interface Range {
+
+}
+ 
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/UniqueEntry.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/UniqueEntry.java
new file mode 100644
index 0000000..67baa9e
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/UniqueEntry.java
@@ -0,0 +1,29 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * 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 - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * This annotation marks fields in Entities and DTOs. If a field is marked with
+ * this annotation, the same entity must not contain more than one record with
+ * the same value.
+ */
+@Target({ FIELD, METHOD })
+@Retention(RUNTIME)
+public @interface UniqueEntry {
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Version.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Version.java
new file mode 100644
index 0000000..55f4bc6
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Version.java
@@ -0,0 +1,30 @@
+/*
+ *                                                                            
+ *  Copyright (c) 2011 - 2017 - Loetz GmbH & Co KG, 69115 Heidelberg, Germany 
+ *                                                                            
+ *  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                                 
+ *                                                                            
+ *  Initial contribution:                                                      
+ *     Loetz GmbH & Co. KG                              
+ * 
+ */
+package org.eclipse.osbp.runtime.common.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * This annotation marks fields in DTOs, that the content is a
+ * version field.
+ */
+@Retention(RUNTIME)
+@Target(FIELD)
+public @interface Version {
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/bean/IdentityPropertyChangeSupport.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/bean/IdentityPropertyChangeSupport.java
new file mode 100644
index 0000000..783bf93
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/bean/IdentityPropertyChangeSupport.java
@@ -0,0 +1,66 @@
+package org.eclipse.osbp.runtime.common.bean;
+
+import java.beans.PropertyChangeSupport;
+
+@SuppressWarnings("serial")
+public class IdentityPropertyChangeSupport extends PropertyChangeSupport {
+
+//	private Object source;
+
+	public IdentityPropertyChangeSupport(Object source) {
+		super(source);
+//		this.source = source;
+	}
+
+//	public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
+//		if (oldValue == null || newValue == null || !valuesEqual(oldValue, newValue)) {
+//			firePropertyChange(new PropertyChangeEvent(source, propertyName, oldValue, newValue));
+//		}
+//	}
+//
+//	public void firePropertyChange(PropertyChangeEvent event) {
+//		Object oldValue = event.getOldValue();
+//		Object newValue = event.getNewValue();
+//		if (oldValue == null || newValue == null || !valuesEqual(oldValue, newValue)) {
+//			String name = event.getPropertyName();
+//
+//			PropertyChangeListener[] common = getPropertyChangeListeners(null);
+//			fireEvent(common, event);
+//
+//			PropertyChangeListener[] named = (name != null) ? getPropertyChangeListeners(name) : null;
+//			fireEvent(named, event);
+//		}
+//	}
+//
+//	public void fireIndexedPropertyChange(String propertyName, int index, Object oldValue, Object newValue) {
+//		if (oldValue == null || newValue == null || !valuesEqual(oldValue, newValue)) {
+//			firePropertyChange(new IndexedPropertyChangeEvent(source, propertyName, oldValue, newValue, index));
+//		}
+//	}
+//	
+//	private boolean valuesEqual(Object oldValue, Object newValue) {
+//		if (isAnnotationPresent(oldValue.getClass())) {
+//			return oldValue == newValue;
+//		}
+//		return oldValue.equals(newValue);
+//	}
+//	
+//	protected boolean isAnnotationPresent(final Class<?> clazz) {
+//		if (clazz.isAnnotationPresent(EqualByIdentity.class)) {
+//			return true;
+//		}
+//		for (Class<?> i : clazz.getInterfaces()) {
+//			if (i.isAnnotationPresent(EqualByIdentity.class))
+//				return true;
+//		}
+//		return false;
+//	}
+//	
+//	protected void fireEvent(PropertyChangeListener[] listeners, PropertyChangeEvent event) {
+//		if (listeners != null) {
+//			for (PropertyChangeListener listener : listeners) {
+//				listener.propertyChange(event);
+//			}
+//		}
+//	}
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/entities/EntityUtils.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/entities/EntityUtils.java
new file mode 100644
index 0000000..6a71999
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/entities/EntityUtils.java
@@ -0,0 +1,601 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * 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 - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.entities;
+
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.persistence.Id;
+
+import org.apache.commons.lang.reflect.MethodUtils;
+import org.eclipse.osbp.runtime.common.annotations.Dirty;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The Class EntityUtils.
+ */
+public class EntityUtils {
+
+	/** The Constant LOGGER. */
+	private static final Logger LOGGER = LoggerFactory.getLogger(EntityUtils.class);
+
+	/** The infos. */
+	private static Map<Class<?>, Info> INFOS = Collections.synchronizedMap(new HashMap<Class<?>, EntityUtils.Info>());
+
+	/**
+	 * Returns the dispose field. Field annotated with {@link Dispose}.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @return the dispose field
+	 */
+	public static Field getDisposeField(Class<?> clazz) {
+		Info info = getInfo(clazz);
+		return info.getDisposeField();
+	}
+
+	/**
+	 * Returns the dispose field. Field annotated with {@link Dirty}.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @return the dirty field
+	 */
+	public static Field getDirtyField(Class<?> clazz) {
+		Info info = getInfo(clazz);
+		return info.getDirtyField();
+	}
+
+	/**
+	 * Returns the id field. Field annotated with {@link Id}.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @return the id field
+	 */
+	public static Field getIdField(Class<?> clazz) {
+		Info info = getInfo(clazz);
+		return info.getIdField();
+	}
+
+	/**
+	 * Returns the id field. Field annotated with {@link Id}.
+	 *
+	 * @param dto
+	 *            the dto
+	 * @return the id field
+	 */
+	public static Object getIdValue(Object dto) {
+		Info info = getInfo(dto.getClass());
+		Field f = info.getIdField();
+		f.setAccessible(true);
+		try {
+			return f.get(dto);
+		} catch (IllegalArgumentException e) {
+			throw new IllegalStateException(e);
+		} catch (IllegalAccessException e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	/**
+	 * Returns the id key field. Field annotated with {@link Id}.
+	 *
+	 * @param instance
+	 *            the instance
+	 * @param idProperty
+	 *            the id property
+	 * @return the value
+	 */
+	public static Object getValue(Object instance, String idProperty) {
+		try {
+			BeanInfo beanInfo = Introspector.getBeanInfo(instance.getClass());
+			for (PropertyDescriptor pd : beanInfo.getPropertyDescriptors()) {
+				if (pd.getName().equals(idProperty)) {
+					Method idMethod = pd.getReadMethod();
+					return idMethod.invoke(instance);
+				}
+			}
+		} catch (Exception e) {
+			LOGGER.error("{}", e);
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the dispose field. Field annotated with {@link Dirty}.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @return the dirty getter
+	 */
+	public static Method getDirtyGetter(Class<?> clazz) {
+		Info info = getInfo(clazz);
+		return info.getDirtyGetter();
+	}
+
+	/**
+	 * Returns the dispose field. Field annotated with {@link Dirty}.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @return the dirty setter
+	 */
+	public static Method getDirtySetter(Class<?> clazz) {
+		Info info = getInfo(clazz);
+		return info.getDirtySetter();
+	}
+
+	/**
+	 * Returns the dispose method. Method annotated with {@link Dispose}.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @return the dispose method
+	 */
+	public static Method getDisposeMethod(Class<?> clazz) {
+		Info info = getInfo(clazz);
+		return info.getDisposeMethod();
+	}
+
+	/**
+	 * Returns true, if the given field is a dispose field.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @param fieldName
+	 *            the field name
+	 * @return true, if is dispose field
+	 */
+	public static boolean isDisposeField(Class<?> clazz, String fieldName) {
+		Info info = getInfo(clazz);
+		return info.getDisposeField() != null ? info.getDisposeField().getName().equals(fieldName) : false;
+	}
+
+	/**
+	 * Returns true, if the given field is a dirty field. Dirty fields indicate
+	 * that the dto is dirty.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @param fieldName
+	 *            the field name
+	 * @return true, if is dirty field
+	 */
+	public static boolean isDirtyField(Class<?> clazz, String fieldName) {
+		Info info = getInfo(clazz);
+		return info.getDirtyField() != null ? info.getDirtyField().getName().equals(fieldName) : false;
+	}
+
+	/**
+	 * Returns true, if the given method is a dispose method.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @param methodName
+	 *            the method name
+	 * @return true, if is dispose method
+	 */
+	public static boolean isDisposeMethod(Class<?> clazz, String methodName) {
+		Info info = getInfo(clazz);
+		return info.getDisposeField() != null ? info.getDisposeMethod().getName().equals(methodName) : false;
+	}
+
+	/**
+	 * Tries to invoke the dispose method.
+	 *
+	 * @param obj
+	 *            the obj
+	 * @return true, if the method could be invoked. False otherwise.
+	 */
+	public static boolean invokeDisposeMethod(Object obj) {
+		Info info = getInfo(obj.getClass());
+		if (info != null && info.getDisposeMethod() != null) {
+			try {
+				info.getDisposeMethod().invoke(obj, new Object[0]);
+			} catch (IllegalAccessException e) {
+				return false;
+			} catch (IllegalArgumentException e) {
+				return false;
+			} catch (InvocationTargetException e) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * Tries to invoke the setDirty method.
+	 *
+	 * @param obj
+	 *            the obj
+	 * @param value
+	 *            the value
+	 * @return true, if the method could be invoked. False otherwise.
+	 */
+	public static boolean invokeDirtySetter(Object obj, boolean value) {
+		Info info = getInfo(obj.getClass());
+		if (info != null && info.getDirtySetter() != null) {
+			try {
+				info.getDirtySetter().invoke(obj, new Object[] { value });
+			} catch (IllegalAccessException e) {
+				return false;
+			} catch (IllegalArgumentException e) {
+				return false;
+			} catch (InvocationTargetException e) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * Tries to invoke the dirty getter. If there is no dirty getter available,
+	 * the method throws an {@link IllegalAccessException}.
+	 *
+	 * @param obj
+	 *            the obj
+	 * @return true, if is dirty
+	 * @throws IllegalAccessException
+	 *             the illegal access exception
+	 */
+	public static boolean isDirty(Object obj) throws IllegalAccessException {
+		return invokeDirtyGetter(obj);
+	}
+
+	/**
+	 * Tries to invoke the isDirty method.
+	 *
+	 * @param obj
+	 *            the obj
+	 * @return true, if the method could be invoked. False otherwise.
+	 * @throws IllegalAccessException
+	 *             the illegal access exception
+	 */
+	public static boolean invokeDirtyGetter(Object obj) throws IllegalAccessException {
+		Info info = getInfo(obj.getClass());
+		if (info != null && info.getDirtySetter() != null) {
+			try {
+				return (Boolean) info.getDirtyGetter().invoke(obj, new Object[0]);
+			} catch (IllegalAccessException e) {
+			} catch (IllegalArgumentException e) {
+			} catch (InvocationTargetException e) {
+			}
+		}
+		throw new IllegalAccessException("Not a valid call");
+	}
+
+	/**
+	 * Returns the info for the given class.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @return the info
+	 */
+	protected static Info getInfo(Class<?> clazz) {
+		Info info = INFOS.get(clazz);
+		if (info == null) {
+			info = createInfo(clazz);
+		}
+		return info;
+	}
+
+	/**
+	 * Creates a new info.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @return info
+	 */
+	private static Info createInfo(Class<?> clazz) {
+		Info info = new Info();
+		applyFieldInfo(clazz, info);
+		applyMethodInfo(clazz, info);
+
+		INFOS.put(clazz, info);
+
+		return info;
+	}
+
+	/**
+	 * Returns the adapter which has proper type from the given dto. Or
+	 * <code>null</code> if no adapter is available.
+	 *
+	 * @param <A>
+	 *            the generic type
+	 * @param type
+	 *            the type
+	 * @param dto
+	 *            the dto
+	 * @return the adapter
+	 */
+	@SuppressWarnings("unchecked")
+	public static <A> A getAdapter(Class<A> type, Object dto) {
+		if (type == null || dto == null) {
+			return null;
+		}
+		Info info = getInfo(dto.getClass());
+		if (info.getPropertyChangeSupportField() == null) {
+			return null;
+		}
+
+		try {
+			info.getPropertyChangeSupportField().setAccessible(true);
+			PropertyChangeSupport changeSupport = (PropertyChangeSupport) info.getPropertyChangeSupportField().get(dto);
+			if (changeSupport == null) {
+				return null;
+			}
+
+			for (PropertyChangeListener listener : changeSupport.getPropertyChangeListeners()) {
+				if (type.isAssignableFrom(listener.getClass())) {
+					return (A) listener;
+				}
+			}
+		} catch (IllegalArgumentException e) {
+			LOGGER.error("{}", e);
+		} catch (IllegalAccessException e) {
+			LOGGER.error("{}", e);
+		}
+		return null;
+	}
+
+	/**
+	 * Registers the adapter as a property changed listener.
+	 *
+	 * @param adapter
+	 *            the adapter
+	 * @param dto
+	 *            the dto
+	 */
+	public static void registerAdapter(PropertyChangeListener adapter, Object dto) {
+		if (adapter == null || dto == null) {
+			return;
+		}
+
+		try {
+			MethodUtils.invokeMethod(dto, "addPropertyChangeListener", adapter);
+		} catch (SecurityException e) {
+			LOGGER.info("Observer for dirtyState handling could not be added for " + dto.getClass().getName());
+		} catch (IllegalAccessException e) {
+			LOGGER.info("Observer for dirtyState handling could not be added for " + dto.getClass().getName());
+		} catch (IllegalArgumentException e) {
+			LOGGER.info("Observer for dirtyState handling could not be added for " + dto.getClass().getName());
+		} catch (InvocationTargetException e) {
+			LOGGER.info("Observer for dirtyState handling could not be added for " + dto.getClass().getName());
+		} catch (NoSuchMethodException e) {
+			LOGGER.info("Observer for dirtyState handling could not be added for " + dto.getClass().getName());
+		}
+	}
+
+	/**
+	 * Applies all required field infos to the info object.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @param info
+	 *            the info
+	 */
+	private static void applyFieldInfo(Class<?> clazz, Info info) {
+		try {
+			for (Field field : clazz.getDeclaredFields()) {
+				if (field.getAnnotation(javax.persistence.Id.class) != null) {
+					info.idField = field;
+				}
+
+				if (field.getType() == PropertyChangeSupport.class) {
+					info.propertyChangeSupportField = field;
+				}
+
+				if (field.getAnnotation(Dirty.class) != null) {
+					info.dirtyField = field;
+
+					try {
+						BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
+						for (PropertyDescriptor pd : beanInfo.getPropertyDescriptors()) {
+							if (pd.getName().equals(info.dirtyField.getName())) {
+								info.dirtyPropertyDescriptor = pd;
+								break;
+							}
+						}
+					} catch (IntrospectionException e) {
+						LOGGER.error("{}", e);
+					}
+				}
+				if (info.disposeField != null && info.dirtyField != null && info.domainKeyField != null
+						&& info.domainDescriptionField != null && info.idField != null) {
+					break;
+				}
+			}
+
+			if (info.disposeField == null || info.domainKeyField == null || info.domainDescriptionField == null
+					|| info.idField == null) {
+				Class<?> superClass = clazz.getSuperclass();
+				if (superClass != null) {
+					applyFieldInfo(superClass, info);
+				}
+			}
+		} catch (SecurityException e) {
+			LOGGER.error("{}", e);
+		}
+	}
+
+	/**
+	 * Applies all required field infos to the info object.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @param info
+	 *            the info
+	 */
+	private static void applyMethodInfo(Class<?> clazz, Info info) {
+		try {
+			for (Method method : clazz.getDeclaredMethods()) {
+				if (method.getAnnotation(Dispose.class) != null) {
+					info.disposeMethod = method;
+					break;
+				}
+			}
+
+			if (info.disposeMethod == null) {
+				Class<?> superClass = clazz.getSuperclass();
+				if (superClass != null) {
+					applyMethodInfo(superClass, info);
+				}
+			}
+		} catch (SecurityException e) {
+			LOGGER.error("{}", e);
+		}
+	}
+
+	/**
+	 * Find field.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @param name
+	 *            the name
+	 * @return the field
+	 */
+	protected Field findField(Class<?> clazz, String name) {
+		try {
+			Field field = clazz.getDeclaredField(name);
+			return field;
+		} catch (NoSuchFieldException e) {
+			Class<?> superClass = clazz.getSuperclass();
+			if (superClass != null) {
+				return findField(superClass, name);
+			}
+		} catch (SecurityException e) {
+			LOGGER.error("{}", e);
+		}
+		return null;
+	}
+
+	/**
+	 * The Class Info.
+	 */
+	private static class Info {
+
+		/** The property change support field. */
+		private Field propertyChangeSupportField;
+
+		/** The dispose field. */
+		private Field disposeField;
+
+		/** The dispose method. */
+		private Method disposeMethod;
+
+		/** The id field. */
+		private Field idField;
+
+		/** The dirty field. */
+		private Field dirtyField;
+
+		/** The dirty property descriptor. */
+		private PropertyDescriptor dirtyPropertyDescriptor;
+
+		/** The domain key field. */
+		private Field domainKeyField;
+
+		/** The domain description field. */
+		private Field domainDescriptionField;
+
+		/**
+		 * Gets the dispose field.
+		 *
+		 * @return the dispose field
+		 */
+		public Field getDisposeField() {
+			return disposeField;
+		}
+
+		/**
+		 * Gets the dirty field.
+		 *
+		 * @return the dirty field
+		 */
+		public Field getDirtyField() {
+			return dirtyField;
+		}
+
+		/**
+		 * Gets the dirty getter.
+		 *
+		 * @return the dirty getter
+		 */
+		public Method getDirtyGetter() {
+			return dirtyPropertyDescriptor != null ? dirtyPropertyDescriptor.getReadMethod() : null;
+		}
+
+		/**
+		 * Gets the dirty setter.
+		 *
+		 * @return the dirty setter
+		 */
+		public Method getDirtySetter() {
+			return dirtyPropertyDescriptor != null ? dirtyPropertyDescriptor.getWriteMethod() : null;
+		}
+
+		/**
+		 * Gets the dispose method.
+		 *
+		 * @return the dispose method
+		 */
+		public Method getDisposeMethod() {
+			return disposeMethod;
+		}
+
+		/**
+		 * Gets the domain key field.
+		 *
+		 * @return the domain key field
+		 */
+		public Field getDomainKeyField() {
+			return domainKeyField;
+		}
+
+		/**
+		 * Gets the domain description field.
+		 *
+		 * @return the domain description field
+		 */
+		public Field getDomainDescriptionField() {
+			return domainDescriptionField;
+		}
+
+		/**
+		 * Gets the property change support field.
+		 *
+		 * @return the property change support field
+		 */
+		public Field getPropertyChangeSupportField() {
+			return propertyChangeSupportField;
+		}
+
+		public Field getIdField() {
+			return idField;
+		}
+
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/event/EventDispatcherEvent.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/event/EventDispatcherEvent.java
new file mode 100644
index 0000000..86f8284
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/event/EventDispatcherEvent.java
@@ -0,0 +1,184 @@
+/*
+ *                                                                            
+ *  Copyright (c) 2011 - 2017 - Loetz GmbH & Co KG, 69115 Heidelberg, Germany 
+ *                                                                            
+ *  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                                 
+ *                                                                            
+ *  Initial contribution:                                                      
+ *     Loetz GmbH & Co. KG
+ * 
+ */
+package org.eclipse.osbp.runtime.common.event;
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.eclipse.osgi.framework.eventmgr.CopyOnWriteIdentityMap;
+
+/**
+ * The Class EventDispatcherEvent.
+ */
+public class EventDispatcherEvent {
+	
+	/**
+	 * The Enum EventDispatcherCommand.
+	 */
+	public enum EventDispatcherCommand {
+		/** something was selected. */
+		SELECT,
+		/** something requested a refresh. */
+		REFRESH,
+		/** The user saved. */
+		SAVE, 
+		/** The user deleted. */
+		DELETE,
+		/** The user started an action. */
+		ACTION,
+		/** Process finished so remove progressbar. */
+		REMOVE_PROGRESSBAR
+	}
+
+	/**
+	 * The Enum EventDispatcherDataTag.
+	 */
+	public enum EventDispatcherDataTag {
+		/** The id. values are of type id or uuid */
+		ID, 
+		/** The id of the pressed action button */
+		BUTTON_ID, 
+		/** The id of an started human task (bpmn) */
+		TASK_ID, 
+		/** The list of objects. */
+		LIST,
+		/** a filled dto object. */
+		DTO
+	}
+
+	/** The command. */
+	private EventDispatcherCommand command;
+	
+	/** The sender class. */
+	private String sender;
+	
+	/** The topic. */
+	private String topic;
+	
+	/** The data. */
+	private Map<EventDispatcherDataTag, Object> data = new CopyOnWriteIdentityMap<>();
+
+	/**
+	 * Instantiates a new event dispatcher event.
+	 *
+	 * @param command the command
+	 * @param topic the topic
+	 */
+	public EventDispatcherEvent(EventDispatcherCommand command, String topic, String sender) {
+		this.command = command;
+		this.topic = topic;
+		this.sender = sender;
+	}
+
+	/**
+	 * Gets the command.
+	 *
+	 * @return the command
+	 */
+	public EventDispatcherCommand getCommand() {
+		return command;
+	}
+
+	/**
+	 * Sets the command.
+	 *
+	 * @param command the new command
+	 */
+	public void setCommand(EventDispatcherCommand command) {
+		this.command = command;
+	}
+
+	/**
+	 * Gets the topic.
+	 *
+	 * @return the topic
+	 */
+	public String getTopic() {
+		return topic;
+	}
+
+	/**
+	 * Sets the topic.
+	 *
+	 * @param topic the new topic
+	 */
+	public void setTopic(String topic) {
+		this.topic = topic;
+	}
+
+	/**
+	 * Gets the data.
+	 *
+	 * @return the data
+	 */
+	public Map<EventDispatcherDataTag, Object> getData() {
+		return data;
+	}
+
+	/**
+	 * Sets the data.
+	 *
+	 * @param data the data
+	 */
+	public void setData(Map<EventDispatcherDataTag, Object> data) {
+		this.data = data;
+	}
+
+	/**
+	 * Adds the item data.
+	 *
+	 * @param tag the tag
+	 * @param item the item
+	 */
+	@SuppressWarnings("unchecked")
+	public void addItem(EventDispatcherDataTag tag, Object item) {
+		if(tag == EventDispatcherDataTag.LIST) {
+			if(!data.containsKey(EventDispatcherDataTag.LIST)) {
+				data.put(EventDispatcherDataTag.LIST, new CopyOnWriteArrayList<String>());
+			}
+			((List<String>)data.get(EventDispatcherDataTag.LIST)).add((String)item);
+		} else {
+			data.put(tag, item);
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	public void addData(List<IDualData> selectedData) {
+		if(!data.containsKey(EventDispatcherDataTag.LIST)) {
+			data.put(EventDispatcherDataTag.LIST, new CopyOnWriteArrayList<String>());
+		}
+		for(IDualData dd : selectedData){
+			((List<String>)data.get(EventDispatcherDataTag.LIST)).add(dd.getSelectionValue());
+		}
+	}
+
+	/**
+	 * Gets the sender.
+	 *
+	 * @return the sender id
+	 */
+	public String getSender() {
+		return sender;
+	}
+
+	/**
+	 * Sets the sender id.
+	 *
+	 * @param sender the new sender
+	 */
+	public void setSender(String sender) {
+		this.sender = sender;
+	}
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/event/IDualData.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/event/IDualData.java
new file mode 100644
index 0000000..75cfdaa
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/event/IDualData.java
@@ -0,0 +1,89 @@
+/*
+ *                                                                            
+ *  Copyright (c) 2011 - 2017 - Loetz GmbH & Co KG, 69115 Heidelberg, Germany 
+ *                                                                            
+ *  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                                 
+ *                                                                            
+ *  Initial contribution:                                                      
+ *     Loetz GmbH & Co. KG
+ * 
+ */
+package org.eclipse.osbp.runtime.common.event;
+
+/**
+ * The Interface IDualData.
+ */
+public interface IDualData {
+	
+	/**
+	 * Marks this filter as to be decoded as string.
+	 *
+	 * @param isString the is string
+	 */
+	void asString(boolean isString);
+	/**
+	 * Equals.
+	 *
+	 * @param item the item
+	 * @return true, if successful
+	 */
+	boolean equals(IDualData item);
+	/**
+	 * Gets the selection value.
+	 *
+	 * @return the selection value
+	 */
+	String getSelectionValue();
+	
+	/**
+	 * Gets the selection value prepared for a database.
+	 *
+	 * @param value the value
+	 * @return the database selection value
+	 */
+	String getDatabaseSelectionValue();
+	/**
+	 * Sets the selection value.
+	 *
+	 * @param value the new selection value
+	 */
+	void setSelectionValue(String value);
+
+	/**
+	 * Gets the formatted value.
+	 *
+	 * @return the formatted value
+	 */
+	String getFormattedValue();
+
+	/**
+	 * Sets the formatted value.
+	 *
+	 * @param formattedValue the new formatted value
+	 */
+	void setFormattedValue(String formattedValue);
+
+	/**
+	 * Gets the hierarchy.
+	 *
+	 * @return the hierarchy
+	 */
+	String getHierarchy();
+	
+	/**
+	 * Gets the hierarchy with brackets.
+	 *
+	 * @return the hierarchy with brackets
+	 */
+	String getHierarchyWithBrackets();
+	
+	/**
+	 * Sets the hierarchy.
+	 *
+	 * @param hierarchy the new hierarchy
+	 */
+	void setHierarchy(String hierarchy);
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/event/IEventDispatcher.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/event/IEventDispatcher.java
new file mode 100644
index 0000000..3fb12ba
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/event/IEventDispatcher.java
@@ -0,0 +1,69 @@
+/*
+ *                                                                            
+ *  Copyright (c) 2011 - 2017 - Loetz GmbH & Co KG, 69115 Heidelberg, Germany 
+ *                                                                            
+ *  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                                 
+ *                                                                            
+ *  Initial contribution:                                                      
+ *     Loetz GmbH & Co. KG
+ * 
+ */
+package org.eclipse.osbp.runtime.common.event;
+
+
+/**
+ * The Interface IEventDispatcher.
+ */
+public interface IEventDispatcher {
+	
+	/**
+	 * Adds the event receiver.
+	 *
+	 * @param receiver the receiver
+	 */
+	void addEventReceiver(Receiver receiver);
+	
+	/**
+	 * Removes the event receiver.
+	 *
+	 * @param receiver the receiver
+	 */
+	void removeEventReceiver(Receiver receiver);
+	
+	/**
+	 * Send event.
+	 *
+	 * @param event the event
+	 */
+	void sendEvent(EventDispatcherEvent event);
+	
+	/**
+	 * The Interface Receiver.
+	 */
+	public interface Receiver {
+		
+		/**
+		 * Receive event.
+		 *
+		 * @param event the event
+		 */
+		void receiveEvent(EventDispatcherEvent event);
+	}
+	
+	/**
+	 * The Interface Sender.
+	 */
+	public interface Sender {
+	}
+	
+//	public interface Global extends IEventDispatcher {
+//		
+//	}
+//	
+//	public interface Provider {
+//		IEventDispatcher getDispatcher();
+//	}
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/DtoServiceException.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/DtoServiceException.java
new file mode 100644
index 0000000..f7cf3b8
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/DtoServiceException.java
@@ -0,0 +1,33 @@
+/**
+ * Copyright (c) 2011, 2014 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * 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 - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.filter;
+
+/**
+ * Contains converted SQLExceptions.
+ */
+@SuppressWarnings("serial")
+public class DtoServiceException extends RuntimeException {
+
+	private final String sqlState;
+
+	public DtoServiceException(String sqlState, String message, Throwable cause) {
+		super(message, cause);
+		this.sqlState = sqlState;
+	}
+
+	/**
+	 * @return the sqlState
+	 */
+	protected String getSqlState() {
+		return sqlState;
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IDTOService.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IDTOService.java
new file mode 100644
index 0000000..8a21d76
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IDTOService.java
@@ -0,0 +1,276 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * 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 - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.filter;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.osbp.runtime.common.validation.IStatus;
+import org.eclipse.osbp.runtime.common.validation.ValidationKind;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Interface IDTOService.
+ *
+ * @param <A>
+ *            the generic type
+ */
+public interface IDTOService<A> extends IService {
+
+	/** The Constant PROP_MAX_COLLECTION_CONTENT. */
+	public static final int PROP_MAX_COLLECTION_CONTENT = 2000;
+
+	/**
+	 * Returns the dto for the given id.
+	 *
+	 * @param id
+	 *            the id
+	 * @return the a
+	 */
+	A get(Object id);
+
+	/**
+	 * Reloads the given dto and returns the refreshed values by a new
+	 * instance.<br>
+	 * If the data basis for the dto is not available anymore. For instance the
+	 * entity was deleted, then <code>null</code> will be returned.
+	 *
+	 * @param dto
+	 *            the dto
+	 * @return A
+	 */
+	A reload(A dto);
+
+	/**
+	 * Returns a collection of dtos matching the filter in the query. <br>
+	 * The maximum amount of contained elements is limited by
+	 * {@link #PROP_MAX_COLLECTION_CONTENT}.
+	 *
+	 * @param query
+	 *            the query
+	 * @return the collection
+	 */
+	Collection<A> find(IQuery query);
+
+	/**
+	 * Returns a collection of dtos matching the filter defined in the query and
+	 * starting from the given startIndex. <br>
+	 * May be used for lazy loading issues. Ensure that a sort order is used in
+	 * that case.
+	 * 
+	 * The maximum amount of contained elements is limited by
+	 * {@link #PROP_MAX_COLLECTION_CONTENT}.
+	 *
+	 * @param query
+	 *            the query
+	 * @param startIndex
+	 *            the start index
+	 * @return the collection
+	 */
+	Collection<A> find(IQuery query, int startIndex);
+
+	/**
+	 * Returns a collection of dtos selected by the given jpql. <br>
+	 * This method throws an {@link IllegalArgumentException} if the defined
+	 * jpql does not select dtos.
+	 *
+	 * @param query
+	 *            the query
+	 * @return the collection
+	 */
+	Collection<A> findDtos(IJPQL jpql);
+
+	/**
+	 * Returns a list of values selected by the given jpql. <br>
+	 * The values are at the same index as in the JPQL "select"-statement. Eg.
+	 * "select p.name, p.postalcode from Person p".
+	 *
+	 * @param query
+	 *            the query
+	 * @return the collection
+	 */
+	List<?> findValues(IJPQL jpql);
+
+	/**
+	 * Updates the given DTO.
+	 *
+	 * @param dto
+	 *            the dto
+	 */
+	void update(A dto);
+
+	/**
+	 * Deletes the given DTO.
+	 *
+	 * @param dto
+	 *            the dto
+	 * @throws DtoServiceException
+	 *             if the record can not be deleted
+	 */
+	void delete(A dto) throws DtoServiceException;
+
+	/**
+	 * Returns the count of all dto matching the filter.
+	 *
+	 * @param query
+	 *            the query
+	 * @return the int
+	 */
+	int size(IQuery query);
+
+	/**
+	 * Returns true, if the dto exists for the given filter.
+	 *
+	 * @param dto
+	 *            the dto
+	 * @param query
+	 *            the query
+	 * @return true, if successful
+	 */
+	boolean contains(Object dto, IQuery query);
+	
+	/**
+	 * Returns true, if a dto exists for the given filter.
+	 *
+	 * @param query
+	 *            the query
+	 * @return true, if successful
+	 */
+	boolean contains(IQuery query);
+
+	/**
+	 * Returns the next dto for the given one using the filter and the
+	 * sortOrder.
+	 *
+	 * @param dto
+	 *            the dto
+	 * @param query
+	 *            the query
+	 * @return the next
+	 */
+	A getNext(A dto, IQuery query);
+
+	/**
+	 * Returns the previous dto for the given one using the filter and the
+	 * sortOrder.
+	 *
+	 * @param dto
+	 *            the dto
+	 * @param query
+	 *            the query
+	 * @return the previous
+	 */
+	A getPrevious(A dto, IQuery query);
+
+	/**
+	 * Returns the first dto for the given filter and the sortOrder.
+	 *
+	 * @param query
+	 *            the query
+	 * @return the first
+	 */
+	A getFirst(IQuery query);
+
+	/**
+	 * Returns the last dto for the given filter and the sortOrder.
+	 *
+	 * @param query
+	 *            the query
+	 * @return the last
+	 */
+	A getLast(IQuery query);
+
+	/**
+	 * Returns true, if the given dto is the first one for the filter and
+	 * sortOrder.
+	 *
+	 * @param dto
+	 *            the dto
+	 * @param query
+	 *            the query
+	 * @return true, if is first
+	 */
+	boolean isFirst(A dto, IQuery query);
+
+	/**
+	 * Returns true, if the given dto is the last one for the filter and
+	 * sortOrder.
+	 *
+	 * @param dto
+	 *            the dto
+	 * @param query
+	 *            the query
+	 * @return true, if is last
+	 */
+	boolean isLast(A dto, IQuery query);
+
+	/**
+	 * Returns the index of the given dto for the filter and sortOrder.
+	 *
+	 * @param dto
+	 *            the dto
+	 * @param query
+	 *            the query
+	 * @return the int
+	 */
+	int indexOf(A dto, IQuery query);
+
+	/**
+	 * Returns the dto for the given index, filter and sortOrder.
+	 *
+	 * @param index
+	 *            the index
+	 * @param query
+	 *            the query
+	 * @return the by index
+	 */
+	A getByIndex(int index, IQuery query);
+
+	/**
+	 * Returns a list of dtos with size &lt;= numberOfItems, starting from the
+	 * startIndex in respect to the filter and sortOrder.
+	 *
+	 * @param startIndex
+	 *            the start index
+	 * @param numberOfItems
+	 *            the number of items
+	 * @param query
+	 *            the query
+	 * @return the by index
+	 */
+	List<A> getByIndex(int startIndex, int numberOfItems, IQuery query);
+
+	/**
+	 * Validates the given DTO.
+	 *
+	 * @param object
+	 *            the object
+	 * @param kind
+	 *            the kind of validation
+	 * @param properties
+	 *            any kind of properties required in validation
+	 * @return the sets the
+	 * @throws IllegalStateException
+	 *             if no Validator is available
+	 */
+	Set<IStatus> validate(A object, ValidationKind kind, Map<String, Object> properties) throws IllegalStateException;
+
+	/**
+	 * Gets the id.
+	 *
+	 * @param dto
+	 *            the dto
+	 * @return the id
+	 */
+	Object getId(A dto);
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IDTOServiceWithMutablePersistence.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IDTOServiceWithMutablePersistence.java
new file mode 100644
index 0000000..f2c290b
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IDTOServiceWithMutablePersistence.java
@@ -0,0 +1,38 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * 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 - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.filter;
+
+import javax.persistence.EntityManagerFactory;
+
+/**
+ * This DTO service allows to specify a deviating persistence ID.
+ *
+ * @param <A>
+ */
+public interface IDTOServiceWithMutablePersistence<A> extends IDTOService<A> {
+
+	/**
+	 * Returns the persistence Id which is used to find the proper
+	 * {@link EntityManagerFactory},
+	 * 
+	 * @return
+	 */
+	String getPersistenceId();
+
+	/**
+	 * Sets the persistence Id which is used to find the proper
+	 * {@link EntityManagerFactory},
+	 * 
+	 * @param persistenceId
+	 */
+	void setPersistenceId(String persistenceId);
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IDatamartService.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IDatamartService.java
new file mode 100644
index 0000000..4fe2bb0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IDatamartService.java
@@ -0,0 +1,51 @@
+/*
+ *                                                                            
+ *  Copyright (c) 2011 - 2017 - Loetz GmbH & Co KG, 69115 Heidelberg, Germany 
+ *                                                                            
+ *  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                                 
+ *                                                                            
+ *  Initial contribution:                                                      
+ *     Loetz GmbH & Co. KG                              
+ * 
+ */
+package org.eclipse.osbp.runtime.common.filter;
+
+import java.util.List;
+
+import org.eclipse.osbp.runtime.common.filter.IService;
+
+/**
+ * The Interface IDatamartService.
+ *
+ * @param <T> the generic beantype of a datamart
+ */
+public interface IDatamartService<T> extends IService {
+	List<T> getResults(String datamartFQN);
+
+	int size(IQuery createQuery);
+
+	boolean contains(T bean, IQuery createQuery);
+
+	T getNext(T bean, IQuery createQuery);
+
+	T getPrevious(T bean, IQuery createQuery);
+
+	T getFirst(IQuery createQuery);
+
+	T getLast(IQuery createQuery);
+
+	boolean isFirst(T bean, IQuery createQuery);
+
+	boolean isLast(T bean, IQuery createQuery);
+
+	int indexOf(T bean, IQuery createQuery);
+
+	T getByIndex(int index, IQuery createQuery);
+
+	List<T> getByIndex(int startIndex, int numberOfItems, IQuery createQuery);
+
+	T get(Object idValue);
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IFilterEnhancer.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IFilterEnhancer.java
new file mode 100644
index 0000000..8c39c0c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IFilterEnhancer.java
@@ -0,0 +1,32 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * 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 - Initial implementation
+ */
+ 
+package org.eclipse.osbp.runtime.common.filter;
+
+public interface IFilterEnhancer {
+	
+	/**
+	 * Enhance query to follow user filters
+	 *
+	 * @param query the query
+	 */
+	void enhanceQuery(IQuery query);
+	
+	/**
+	 * Check get for direct id navigation
+	 *
+	 * @param entityClass the entity class
+	 * @param id the id
+	 * @return true, if successful
+	 */
+	boolean checkGet(Class<?> entityClass, Object id);
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IJPQL.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IJPQL.java
new file mode 100644
index 0000000..1a8b0eb
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IJPQL.java
@@ -0,0 +1,36 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * 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 - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.filter;
+
+import java.io.Serializable;
+import java.util.Map;
+
+/**
+ * 
+ * @noimplement by clients. Will be changed in future!
+ */
+public interface IJPQL extends Serializable {
+
+	/**
+	 * Returns the JPQL.
+	 * 
+	 * @return
+	 */
+	String getJPQL();
+
+	/**
+	 * Returns the map with additional information.
+	 * 
+	 * @return
+	 */
+	Map<String, Object> getParameters();
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/ILFilter.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/ILFilter.java
new file mode 100644
index 0000000..94cecbe
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/ILFilter.java
@@ -0,0 +1,29 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * 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 - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.filter;
+
+import java.io.Serializable;
+
+public interface ILFilter extends Serializable {
+
+    /**
+     * Check if a change in the value of a property can affect the filtering
+     * result. May always return true, at the cost of performance.
+     * 
+     * If the filter cannot determine whether it may depend on the property
+     * or not, should return true.
+     * 
+     * @param propertyId
+     * @return true if the filtering result may/does change based on changes
+     *         to the property identified by propertyId
+     */
+    public boolean appliesToProperty(Object propertyId);
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/ILFilterService.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/ILFilterService.java
new file mode 100644
index 0000000..455446d
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/ILFilterService.java
@@ -0,0 +1,33 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * 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 - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.filter;
+
+/**
+ * Provides methods to create several filters.
+ */
+public interface ILFilterService {
+
+	/**
+	 * Creates a filter following the SQL syntax:<br>
+	 * <i>where {idProperty} <> {id} and {valueProperty} = {value}</i>
+	 * 
+	 * @param value
+	 * @param valueProperty
+	 * @param id
+	 * @param idProperty
+	 * @return
+	 */
+	ILFilter createUniqueEntryFilter(Object value, String valueProperty, Object id, String idProperty);
+
+	
+	IQuery createQuery(ILFilter filter);
+	
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IQuery.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IQuery.java
new file mode 100644
index 0000000..db4c6e6
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IQuery.java
@@ -0,0 +1,49 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * 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 - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.filter;
+
+import java.io.Serializable;
+import java.util.Map;
+
+/**
+ * 
+ * @noimplement by clients. Will be changed in future!
+ */
+public interface IQuery extends Serializable {
+
+	/**
+	 * Returns the root filter that should be used for the query.
+	 * 
+	 * @return
+	 */
+	ILFilter getFilter();
+
+	/**
+	 * Replaces the root filter that should be used for the query.
+	 * 
+	 */
+	void replaceFilter(ILFilter filter);
+	
+	/**
+	 * Returns the sortable columns.
+	 * 
+	 * @return
+	 */
+	SortOrder getSortOrder();
+
+	/**
+	 * Returns the map with additional information.
+	 * 
+	 * @return
+	 */
+	Map<String, Object> getMap();
+	
+}
diff --git a/org.eclipse.osbp.runtime.security/src/org/eclipse/osbp/runtime/security/ISessionManagerService.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IService.java
similarity index 73%
rename from org.eclipse.osbp.runtime.security/src/org/eclipse/osbp/runtime/security/ISessionManagerService.java
rename to org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IService.java
index 5ed5873..52d16d3 100644
--- a/org.eclipse.osbp.runtime.security/src/org/eclipse/osbp/runtime/security/ISessionManagerService.java
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/IService.java
@@ -8,10 +8,12 @@
  * Contributors:
  *         Florian Pirchner - Initial implementation
  */
-package org.eclipse.osbp.runtime.security;
+package org.eclipse.osbp.runtime.common.filter;
 
-import org.apache.shiro.session.mgt.SessionManager;
+/**
+ * Provides methods to create several filters.
+ */
+public interface IService {
 
-public interface ISessionManagerService extends SessionManager {
-
+	
 }
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/SortBy.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/SortBy.java
new file mode 100644
index 0000000..f43420e
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/SortBy.java
@@ -0,0 +1,75 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * 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 - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.filter;
+
+import java.io.Serializable;
+
+public class SortBy  implements Serializable {
+
+    private static final long serialVersionUID = -6308560006578484770L;
+
+    /**
+     * The property ID to sort by.
+     */
+    private final Object propertyId;
+
+    /**
+     * True to sort ascendingly, false to sort descendingly.
+     */
+    private final boolean ascending;
+
+    /**
+     * Gets the property ID to sort by.
+     */
+    public Object getPropertyId() {
+        return propertyId;
+    }
+
+    /**
+     * Returns true to sort ascendingly, false to sort descendingly.
+     */
+    public boolean isAscending() {
+        return ascending;
+    }
+
+    /**
+     * Creates a new <code>SortBy</code> instance.
+     * 
+     * @param propertyId
+     *            the property ID to sort by (must not be null).
+     * @param ascending
+     *            true to sort ascendingly, false to sort descendingly.
+     */
+    public SortBy(Object propertyId, boolean ascending) {
+        assert propertyId != null : "propertyId must not be null";
+        this.propertyId = propertyId;
+        this.ascending = ascending;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (obj.getClass() == getClass()) {
+            SortBy o = (SortBy) obj;
+            return o.propertyId.equals(propertyId) && o.ascending == ascending;
+        }
+        return false;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = propertyId.hashCode();
+        hash = hash * 7 + new Boolean(ascending).hashCode();
+        return hash;
+    }
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/SortOrder.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/SortOrder.java
new file mode 100644
index 0000000..66d7dd6
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/filter/SortOrder.java
@@ -0,0 +1,44 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * 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 - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.filter;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+public class SortOrder implements Serializable {
+
+	private final List<SortBy> sortBy = new ArrayList<SortBy>();
+
+	public SortOrder() {
+	}
+
+	/**
+	 * @return the sortOrder
+	 */
+	public List<SortBy> getSortBy() {
+		return sortBy;
+	}
+	
+	/**
+	 * @param e
+	 * @return
+	 * @see java.util.List#add(java.lang.Object)
+	 */
+	public boolean add(SortBy e) {
+		return sortBy.add(e);
+	}
+
+	public void clear() {
+		sortBy.clear();
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/keystroke/KeyCodeUtil.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/keystroke/KeyCodeUtil.java
index d93c3e6..a6c4afa 100644
--- a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/keystroke/KeyCodeUtil.java
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/keystroke/KeyCodeUtil.java
@@ -143,4 +143,34 @@
 		return result;
 	}
 
+	/**
+	 * Key lookup integer.
+	 *
+	 * @param name of the key 
+	 * @return the integer
+	 */
+	public static Integer keyLookupInteger(final String name) {
+		final Object value = keyCodeMappings.get(name);
+		if (value instanceof Integer) {
+			return (Integer) value;
+		}
+
+		return Integer.valueOf(name.charAt(0));
+	}
+
+	/**
+	 * Modifier lookup.
+	 *
+	 * @param name of the modifier
+	 * @return the int
+	 */
+	public static int modifierLookup(final String name) {
+		final Object value = modifierMappings.get(name);
+		if (value instanceof Integer) {
+			return ((Integer) value).intValue();
+		}
+
+		return 0;
+	}
+	
 }
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/session/AbstractSession.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/session/AbstractSession.java
new file mode 100644
index 0000000..66bae41
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/session/AbstractSession.java
@@ -0,0 +1,74 @@
+package org.eclipse.osbp.runtime.common.session;
+
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
+import java.util.function.Function;
+
+import org.eclipse.osbp.runtime.common.session.ISessionManager.FutureResult;
+
+/**
+ * A base implementation of the session using the SessionUnitOfWork to provide
+ * session scope.
+ */
+public abstract class AbstractSession implements ISession {
+
+	private Type sessionType = Type.MASTER;
+
+	@Override
+	public <T> T apply(Function<ISession, T> function) {
+		if (function == null) {
+			throw new NullPointerException("Function is null!");
+		}
+		return function.apply(this);
+	}
+
+	@Override
+	public <T> CompletableFuture<FutureResult<T>> async(final Function<ISession, T> function,
+			SessionCallback<T> callback) {
+		return async(function, callback, null);
+	}
+
+	@Override
+	public <T> CompletableFuture<FutureResult<T>> async(Function<ISession, T> function, SessionCallback<T> callback,
+			ExecutorService executor) {
+
+		CompletableFuture<T> promise = doAsync(function, executor);
+
+		CompletableFuture<FutureResult<T>> transformer = promise.handle((t, e) -> {
+			return new FutureResult<T>(this, t, e);
+		});
+
+		CompletableFuture<FutureResult<T>> notifier = transformer.whenComplete((r, t) -> {
+			if (callback == null) {
+				return;
+			}
+			callback.accept(r);
+		});
+		return notifier;
+
+	}
+
+	/**
+	 * The implementation needs to synchronize the runnable with the underlying
+	 * frameworks. For instance Vaadin UI. This method MUST NOT block.
+	 * 
+	 * @param function
+	 * @param executor
+	 */
+	protected abstract <T> CompletableFuture<T> doAsync(final Function<ISession, T> function, ExecutorService executor);
+
+	@Override
+	public void sendData(Map<String, Object> data) {
+		// override if used
+	}
+
+	public Type getType() {
+		return sessionType;
+	}
+
+	public void setType(Type sessionType) {
+		this.sessionType = sessionType;
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/session/ISession.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/session/ISession.java
new file mode 100644
index 0000000..471419f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/session/ISession.java
@@ -0,0 +1,154 @@
+package org.eclipse.osbp.runtime.common.session;
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+import org.eclipse.osbp.runtime.common.session.ISessionManager.FutureResult;
+
+/**
+ * And abstraction above a state. Eg. Vaadin UI.
+ */
+public interface ISession {
+
+	String HOSTNAME = "hostname";
+	String IS_SLAVE = "slave";
+
+	/**
+	 * Returns the host address of the session.
+	 * 
+	 * @return
+	 */
+	String getHost();
+
+	/**
+	 * Executes the function in the scope of the session.
+	 * 
+	 * @param function
+	 * @return
+	 */
+	<T> T apply(Function<ISession, T> function);
+
+	/**
+	 * Creates a {@link CompletableFuture} for the given function. This method
+	 * must NOT block.
+	 * 
+	 * @param function
+	 * @param callback
+	 * @return
+	 */
+	<T> CompletableFuture<FutureResult<T>> async(final Function<ISession, T> function, SessionCallback<T> callback);
+
+	/**
+	 * Creates a {@link CompletableFuture} for the given function. This method
+	 * must NOT block.
+	 * 
+	 * @param function
+	 * @param callback
+	 * @return
+	 */
+	<T> CompletableFuture<FutureResult<T>> async(final Function<ISession, T> function, SessionCallback<T> callback,
+			ExecutorService executor);
+
+	/**
+	 * Sends the given data to the session. Call must by synced.
+	 * 
+	 * @param data
+	 */
+	void sendData(Map<String, Object> data);
+
+	/**
+	 * Returns the property associated with the key.
+	 * 
+	 * @param key
+	 * @return
+	 */
+	<T> T get(Class<T> key);
+
+	/**
+	 * Returns the property associated with the key.
+	 * 
+	 * @param key
+	 * @return
+	 */
+	Object get(String key);
+
+	void set(String key, Object object);
+
+	/**
+	 * Returns true, if the session has slave sessions. Otherwise false.
+	 * 
+	 * @return
+	 */
+	boolean isMasterSession();
+
+	/**
+	 * Returns true, if the session is a slave session and has a master session.
+	 * Otherwise false.
+	 * 
+	 * @return
+	 */
+	boolean isSlaveSession();
+
+	/**
+	 * Returns the type {@link Type} of this session.
+	 * 
+	 * @return
+	 */
+	Type getType();
+
+	/**
+	 * Returns the master session, if the session is a slave session.
+	 * <code>Null</code> otherwise.
+	 * 
+	 * @return
+	 */
+	ISession getMaster();
+
+	/**
+	 * Returns an unmodifiable list of all slave sessions connected to this
+	 * master. Returns never <code>null</code>.
+	 * 
+	 * @return
+	 */
+	List<ISession> getSlaves();
+	
+	/**
+	 * Returns a list of slaves filtered by given filter.
+	 * @param filter
+	 * @return
+	 */
+	List<ISession> getSlaves(Predicate<ISession> filter);
+
+	/**
+	 * Adds a session which is a slave. Slaves are used to "paint" on web UIs
+	 * controlled by the master session.
+	 * 
+	 * @param name
+	 * @return
+	 */
+	void addSlave(ISession slave);
+
+	/**
+	 * See {@link #addSlaveSession(ISession)}
+	 * 
+	 * @param slave
+	 */
+	void removeSlave(ISession slave);
+
+	/**
+	 * In case of slave session, the session MUST provide a fragment following
+	 * the pattern: {master-host}{UI-to-display}
+	 * 
+	 * @return
+	 */
+	String getFragment();
+
+	enum Type {
+		MASTER, SLAVE;
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/session/ISessionManager.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/session/ISessionManager.java
new file mode 100644
index 0000000..89e63ff
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/session/ISessionManager.java
@@ -0,0 +1,112 @@
+package org.eclipse.osbp.runtime.common.session;
+
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+/**
+ * Is responsible to keep track of all {@link ISession}s in this JVM
+ * instance.<br>
+ * Sessions are added and removed automatically by the manager.
+ */
+public interface ISessionManager {
+
+	/**
+	 * Returns an unmodifiable list of sessions.
+	 * 
+	 * @param filter
+	 *            an optional filter which is used to filter the sessions before
+	 *            they are added to the result list.
+	 * @return
+	 */
+	List<ISession> getSessions(Predicate<ISession> filter);
+
+	/**
+	 * Returns an unmodifiable list of sessions. This method MUST NOT block.
+	 * 
+	 * @param filter
+	 *            an optional filter which is used to filter the sessions before
+	 *            they are added to the result list.
+	 * @return
+	 */
+	CompletableFuture<List<ISession>> getSessionsAsync(Predicate<ISession> filter);
+
+	/**
+	 * Syncs all {@link ISession} with the given function in an async way. This
+	 * method MUST NOT block.
+	 * 
+	 * @param function
+	 *            The function to transform the session to a return value.
+	 * @return {@link CompletableFuture} which is completed with a list of
+	 *         {@link FutureResult}
+	 */
+	<T> CompletableFuture<List<FutureResult<T>>> asyncAll(Function<ISession, T> function);
+
+	/**
+	 * Syncs the {@link ISession}s matching the filter with the given function
+	 * in an async way. This method MUST NOT block.
+	 * 
+	 * @param function
+	 *            The function to transform the session to a return value.
+	 * @return {@link CompletableFuture} which is completed with a list of
+	 *         {@link FutureResult}
+	 * @param filter
+	 *            an optional filter which is used to filter the sessions before
+	 *            they are added to the result list.
+	 * @return
+	 */
+	<T> CompletableFuture<List<FutureResult<T>>> asyncAll(Function<ISession, T> function, Predicate<ISession> filter);
+
+	/**
+	 * Syncs all {@link ISession} with the given function in an async way. This
+	 * method MUST NOT block.
+	 * 
+	 * @param function
+	 *            The function to transform the session to a return value.
+	 * @param callback
+	 *            The callback is attached to every future in the resulting list
+	 * @return A list of {@link CompletableFuture}s. One
+	 *         {@link CompletableFuture} for each async request to
+	 *         {@link ISession#async(Function, SessionCallback)}
+	 *         {@link FutureResult}
+	 */
+	<T> List<CompletableFuture<FutureResult<T>>> asyncEach(Function<ISession, T> function, SessionCallback<T> callback);
+
+	/**
+	 * Syncs the {@link ISession}s matching the filter with the given function
+	 * in an async way. This method MUST NOT block.
+	 * 
+	 * @param function
+	 *            The function to transform the session to a return value.
+	 * @param callback
+	 *            The callback is attached to every future in the resulting list
+	 * @param filter
+	 *            an optional filter which is used to filter the sessions before
+	 *            they are added to the result list.
+	 * @return A list of {@link CompletableFuture}s. One
+	 *         {@link CompletableFuture} for each async request to
+	 *         {@link ISession#async(Function, SessionCallback)}
+	 *         {@link FutureResult}
+	 */
+	<T> List<CompletableFuture<FutureResult<T>>> asyncEach(Function<ISession, T> function, SessionCallback<T> callback,
+			Predicate<ISession> filter);
+
+	class FutureResult<T> {
+		public final ISession session;
+		public final T value;
+		public final Throwable error;
+
+		public final boolean isError;
+
+		public FutureResult(ISession session, T value, Throwable error) {
+			super();
+			this.session = session;
+			this.value = value;
+			this.error = error;
+
+			isError = error != null;
+		}
+
+	}
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/session/SessionCallback.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/session/SessionCallback.java
new file mode 100644
index 0000000..432965e
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/session/SessionCallback.java
@@ -0,0 +1,10 @@
+package org.eclipse.osbp.runtime.common.session;
+
+import org.eclipse.osbp.runtime.common.session.ISessionManager.FutureResult;
+
+@FunctionalInterface
+public interface SessionCallback<T> {
+	
+	void accept(FutureResult<T> result);
+	
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/session/SessionUtil.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/session/SessionUtil.java
new file mode 100644
index 0000000..b88cf54
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/session/SessionUtil.java
@@ -0,0 +1,37 @@
+package org.eclipse.osbp.runtime.common.session;
+
+public class SessionUtil {
+
+	private SessionUtil(){
+		
+	}
+	
+	/**
+	 * Splits the fragment by "," and returns the encoded info. Returns null, if no fragment available.
+	 * @param fragment
+	 * @return
+	 */
+	public static Info getFragmentInfo(String fragment){
+		if(fragment == null){
+			return null;
+		}
+		String[] tokens = fragment.split("-");
+		if(tokens.length == 1) {
+			return null;
+		}
+		return new Info(tokens[0], tokens[1]);
+	}
+	
+	
+	public static class Info {
+		public final String host;
+		public final String ui;
+		public Info(String host, String ui) {
+			super();
+			this.host = host;
+			this.ui = ui;
+		}
+		
+		
+	}
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/session/impl/SessionManager.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/session/impl/SessionManager.java
new file mode 100644
index 0000000..dfcdf50
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/session/impl/SessionManager.java
@@ -0,0 +1,196 @@
+package org.eclipse.osbp.runtime.common.session.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+
+import org.eclipse.osbp.runtime.common.session.ISession;
+import org.eclipse.osbp.runtime.common.session.ISessionManager;
+import org.eclipse.osbp.runtime.common.session.SessionCallback;
+import org.eclipse.osbp.runtime.common.session.SessionUtil;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Component(immediate = true)
+public class SessionManager implements ISessionManager {
+
+	static Logger LOGGER = LoggerFactory.getLogger(SessionManager.class);
+
+	List<ISession> sessions;
+
+	ExecutorService executorService;
+
+	@Activate
+	void activate() {
+		sessions = new CopyOnWriteArrayList<>();
+		executorService = Executors.newFixedThreadPool(3, (r) -> {
+			Thread t = new Thread(r);
+			t.setDaemon(true);
+			t.setName(SessionManager.class.getName() + "-" + new Date().getTime());
+			return t;
+		});
+	}
+
+	@Deactivate
+	void deactivate() {
+		sessions.clear();
+		sessions = null;
+
+		try {
+			executorService.awaitTermination(5, TimeUnit.SECONDS);
+		} catch (InterruptedException e) {
+			executorService.shutdownNow();
+		}
+	}
+
+	@Override
+	public List<ISession> getSessions(Predicate<ISession> filter) {
+		if (filter == null) {
+			return Collections.unmodifiableList(sessions);
+		} else {
+			List<ISession> result = new ArrayList<>();
+			for (ISession session : sessions.toArray(new ISession[sessions.size()])) {
+				if (filter != null && !filter.test(session)) {
+					continue;
+				}
+				result.add(session);
+			}
+			return Collections.unmodifiableList(result);
+		}
+	}
+
+	@Override
+	public CompletableFuture<List<ISession>> getSessionsAsync(Predicate<ISession> filter) {
+		return CompletableFuture.supplyAsync(() -> getSessions(filter), executorService);
+	}
+
+	@Override
+	public <T> CompletableFuture<List<FutureResult<T>>> asyncAll(Function<ISession, T> function) {
+		return asyncAll(function, null);
+	}
+
+	@Override
+	public <T> CompletableFuture<List<FutureResult<T>>> asyncAll(Function<ISession, T> function,
+			Predicate<ISession> filter) {
+
+		// create a promise
+		CompletableFuture<List<FutureResult<T>>> promise = new CompletableFuture<>();
+
+		// query the sessions async
+		CompletableFuture<List<ISession>> sessions = getSessionsAsync(filter);
+
+		// if sessions queried, then call session#async for each session
+		sessions.thenCompose((_sessions) -> {
+			List<CompletableFuture<FutureResult<T>>> asyncs = collectSessionAsyncCalls(_sessions, function);
+
+			// we need a trigger which triggers, if all s#async are done
+			CompletableFuture<Void> allOfTrigger = CompletableFuture
+					.allOf(asyncs.toArray(new CompletableFuture<?>[asyncs.size()]));
+			allOfTrigger.thenRun(() -> {
+				// now lets collect the values from the async calls
+				List<FutureResult<T>> tempResult = asyncs.stream().map((a) -> a.join()).collect(Collectors.toList());
+
+				// and notify the promise
+				promise.complete(tempResult);
+			});
+
+			return allOfTrigger;
+		});
+
+		return promise;
+	}
+
+	/**
+	 * Collects all async session calls and returns the resulting list.
+	 * 
+	 * @param sessions
+	 * @param function
+	 * @return
+	 */
+	<T> List<CompletableFuture<FutureResult<T>>> collectSessionAsyncCalls(List<ISession> sessions,
+			Function<ISession, T> function) {
+		List<CompletableFuture<FutureResult<T>>> asyncs = sessions.stream()
+				.<CompletableFuture<FutureResult<T>>>map((s) -> s.async(function, null)).collect(Collectors.toList());
+		return asyncs;
+	}
+
+	@Override
+	public <T> List<CompletableFuture<FutureResult<T>>> asyncEach(Function<ISession, T> function,
+			SessionCallback<T> callback) {
+		return asyncEach(function, callback, null);
+	}
+
+	@Override
+	public <T> List<CompletableFuture<FutureResult<T>>> asyncEach(Function<ISession, T> function,
+			SessionCallback<T> callback, Predicate<ISession> filter) {
+
+		// query the sessions sync
+		List<ISession> sessions = getSessions(filter);
+
+		// create future list querying the FutureResult async
+		List<CompletableFuture<FutureResult<T>>> result = sessions.stream().map((s) -> s.async(function, callback))
+				.collect(Collectors.toList());
+		return result;
+	}
+
+	@Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC)
+	void addSession(ISession session) {
+		if (session.isSlaveSession()) {
+			// register slave
+			session.set(ISession.IS_SLAVE, true);
+			SessionUtil.Info info = SessionUtil.getFragmentInfo(session.getFragment());
+			if (info != null) {
+				List<ISession> temp = getSessions((s) -> ((String)s.get(ISession.HOSTNAME)).equalsIgnoreCase(info.host));
+
+				for (ISession s : temp) {
+					if (s.getType() == ISession.Type.MASTER) {
+						s.addSlave(session);
+						break;
+					}
+				}
+			}
+		} else {
+			// register master
+			List<ISession> temp = getSessions((s) -> ((Boolean)s.get(ISession.IS_SLAVE)));
+			for (ISession s : temp) {
+				session.addSlave(s);
+			}
+		}
+		session.set(ISession.HOSTNAME, session.getHost());
+		sessions.add(session);
+	}
+
+	void removeSession(ISession session) {
+		if (session.isSlaveSession()) {
+			SessionUtil.Info info = SessionUtil.getFragmentInfo(session.getFragment());
+			if (info != null) {
+				List<ISession> temp = getSessions((s) -> ((String)s.get(ISession.HOSTNAME)).equalsIgnoreCase(info.host));
+
+				for (ISession s : temp) {
+					if (s.isMasterSession()) {
+						s.removeSlave(session);
+						break;
+					}
+				}
+			}
+		}
+		sessions.remove(session);
+
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/util/BeanUtils.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/util/BeanUtils.java
new file mode 100644
index 0000000..8aba595
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/util/BeanUtils.java
@@ -0,0 +1,259 @@
+package org.eclipse.osbp.runtime.common.util;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.osbp.runtime.common.annotations.AsKanbanState;
+import org.eclipse.osbp.runtime.common.annotations.DomainReference;
+import org.eclipse.osbp.runtime.common.annotations.DtoUtils;
+import org.eclipse.osbp.runtime.common.annotations.Filter;
+import org.eclipse.osbp.runtime.common.annotations.OnKanbanCard;
+import org.eclipse.osbp.runtime.common.annotations.Range;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class BeanUtils {
+
+	/** The Constant LOGGER. */
+	private static final Logger LOGGER = LoggerFactory.getLogger(BeanUtils.class);
+
+	public static List<Field> getAllFilteringFields(Class<?> clazz) {
+		List<Field> result = new ArrayList<>();
+
+		for (Field field : getAllFields(clazz)) {
+			if (field.isAnnotationPresent(Range.class) || field.isAnnotationPresent(Filter.class)) {
+				result.add(field);
+			}
+		}
+
+		return result;
+	}
+
+	/**
+	 * Returns all filtering fields recurse to the defined depth.
+	 * 
+	 * @param clazz
+	 * @param depth
+	 * @return
+	 */
+	public static List<Field> getAllFilteringFieldsRecurse(Class<?> clazz, int depth) {
+		List<Field> result = new ArrayList<>();
+		if (depth == -1) {
+			return result;
+		}
+
+		for (Field field : getAllFields(clazz)) {
+			if (field.isAnnotationPresent(Range.class) || field.isAnnotationPresent(Filter.class)) {
+				result.add(field);
+			} else if (field.isAnnotationPresent(DomainReference.class)) {
+				result.addAll(getAllFilteringFieldsRecurse(field.getType(), depth--));
+			}
+		}
+
+		return result;
+	}
+
+	/**
+	 * Returns all property ids (eg: person.country.isocode) recurse to the
+	 * defined depth.
+	 * 
+	 * @param clazz
+	 * @param depth
+	 * @return
+	 */
+	public static List<String> getAllFilteringProperties(Class<?> clazz, int depth) {
+		List<String> result = new ArrayList<>();
+		if (depth == -1) {
+			return result;
+		}
+
+		return internalGetAllFilteringProperties(null, clazz, depth);
+	}
+
+	private static List<String> internalGetAllFilteringProperties(String currentPath, Class<?> clazz, int depth) {
+		List<String> result = new ArrayList<>();
+		if (depth == -1) {
+			return result;
+		}
+
+		String newPath = currentPath;
+		int newDepth = depth - 1;
+
+		if (currentPath == null) {
+			newPath = "";
+		}
+
+		for (Field field : getAllFields(clazz)) {
+			if (field.isAnnotationPresent(Range.class) || field.isAnnotationPresent(Filter.class)) {
+				result.add(toPath(newPath, field.getName()));
+			} else if (field.isAnnotationPresent(DomainReference.class)) {
+				result.addAll(
+						internalGetAllFilteringProperties(toPath(newPath, field.getName()), field.getType(), newDepth));
+			}
+		}
+
+		return result;
+	}
+
+	private static String toPath(String currentPath, String fieldName) {
+		if (currentPath == null || currentPath.trim().equals("")) {
+			return fieldName;
+		} else {
+			return currentPath + "." + fieldName;
+		}
+	}
+
+	public static List<Field> getAllFields(Class<?> clazz) {
+		if (clazz == null) {
+			return null;
+		}
+
+		List<Field> result = new ArrayList<>();
+		try {
+			result.addAll(Arrays.asList(clazz.getDeclaredFields()));
+		} catch (SecurityException e) {
+			LOGGER.warn("{}", e);
+		}
+
+		Class<?> superClass = clazz.getSuperclass();
+		if (superClass != null) {
+			List<Field> temp = getAllFields(superClass);
+			result.addAll(temp);
+		}
+		return result;
+	}
+
+	/**
+	 * Returns the enum literals of the field annotated with AsKanbanState. Or
+	 * null.
+	 * 
+	 * @param clazz
+	 * @return
+	 */
+	public static <T> T[] getKanbanStateEnumLiterals(Class<?> clazz) {
+		if (clazz == null) {
+			return null;
+		}
+
+		@SuppressWarnings("unchecked")
+		Class<T> enumx = (Class<T>) getAllFields(clazz).stream().filter(f -> f.isAnnotationPresent(AsKanbanState.class))
+				.findFirst().map(f -> f.getType()).orElse(null);
+		if (enumx != null && enumx.isEnum()) {
+			return enumx.getEnumConstants();
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the enum literals of the field annotated with AsKanbanState. Or
+	 * null.
+	 * 
+	 * @param clazz
+	 * @return
+	 */
+	public static List<String> getKanbanVisibleOnCardProperties(Class<?> clazz) {
+		if (clazz == null) {
+			return null;
+		}
+
+		return getAllFields(clazz).stream().filter(f -> f.isAnnotationPresent(OnKanbanCard.class))
+				.map(f -> f.getName()).collect(Collectors.toList());
+	}
+
+	/**
+	 * Returns the state value of the given itemId.
+	 * 
+	 * @param itemId
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> T getKanbanState(Object itemId) {
+		Field stateField = getAllFields(itemId.getClass()).stream()
+				.filter(f -> f.isAnnotationPresent(AsKanbanState.class)).findFirst().orElse(null);
+		if (stateField != null) {
+			return (T) DtoUtils.getValue(itemId, stateField.getName());
+		}
+
+		return null;
+	}
+
+	public static Class<?> getNestedFieldType(Class<?> clazz, String dotedPath) {
+		Field field = getNestedField(clazz, dotedPath);
+		return field != null ? field.getType() : null;
+	}
+
+	public static Field getNestedField(Class<?> clazz, String dotedPath) {
+
+		String[] tokens = dotedPath.split("\\.");
+
+		Field field = null;
+		Class<?> fieldType = clazz;
+		for (String token : tokens) {
+			field = getField(fieldType, token);
+			if (field == null) {
+				return null;
+			}
+
+			fieldType = field.getType();
+		}
+
+		return field;
+	}
+
+	public static Field getField(Class<?> clazz, String name) {
+		if (clazz == null) {
+			return null;
+		}
+		Field field = null;
+		try {
+			field = clazz.getDeclaredField(name);
+		} catch (SecurityException e) {
+			LOGGER.warn("{}", e);
+		} catch (NoSuchFieldException e) {
+		}
+
+		if (field == null) {
+			Class<?> superClass = clazz.getSuperclass();
+			if (superClass != null) {
+				field = getField(superClass, name);
+			}
+		}
+		return field;
+	}
+
+	public static boolean isBoolean(Class<?> clazz, String propertyId) {
+		Class<?> type = getNestedFieldType(clazz, propertyId);
+		return type == Boolean.class || type == Boolean.TYPE;
+	}
+
+	public static boolean isDate(Class<?> clazz, String propertyId) {
+		Class<?> type = getNestedFieldType(clazz, propertyId);
+		return Date.class.isAssignableFrom(type);
+	}
+
+	public static boolean isDecimal(Class<?> clazz, String propertyId) {
+		Class<?> type = getNestedFieldType(clazz, propertyId);
+		return type != String.class && type != Boolean.class && type != Boolean.TYPE
+				&& (type.isPrimitive() || Number.class.isAssignableFrom(type));
+	}
+
+	public static boolean isString(Class<?> clazz, String propertyId) {
+		Class<?> type = getNestedFieldType(clazz, propertyId);
+		return type == String.class;
+	}
+
+	public static boolean isAnnotationPresent(Class<?> clazz, String nestedPropertyId,
+			Class<? extends Annotation> annotation) {
+		Field field = getNestedField(clazz, nestedPropertyId);
+		if (field == null) {
+			return false;
+		}
+		return field.isAnnotationPresent(annotation);
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.datasource.provider/.classpath b/org.eclipse.osbp.runtime.datasource.provider/.classpath
new file mode 100644
index 0000000..cf36b56
--- /dev/null
+++ b/org.eclipse.osbp.runtime.datasource.provider/.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/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src/"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.datasource.provider/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.datasource.provider/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..7a53139
--- /dev/null
+++ b/org.eclipse.osbp.runtime.datasource.provider/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
+encoding/src=UTF-8
diff --git a/org.eclipse.osbp.runtime.datasource.provider/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.datasource.provider/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..13b3428
--- /dev/null
+++ b/org.eclipse.osbp.runtime.datasource.provider/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,13 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+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.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.osbp.runtime.datasource.provider/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.datasource.provider/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.datasource.provider/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.datasource.provider/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.datasource.provider/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.datasource.provider/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.datasource.provider/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.datasource.provider/META-INF/MANIFEST.MF
index ab4b857..975b3eb 100644
--- a/org.eclipse.osbp.runtime.datasource.provider/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.datasource.provider/META-INF/MANIFEST.MF
@@ -18,7 +18,7 @@
  org.slf4j;version="1.7.2"
 Require-Bundle: org.eclipse.gemini.dbaccess.derby;bundle-version="1.1.0",
  org.apache.derby;bundle-version="10.8.2",
- org.eclipse.osbp.fork.gemini.naming;bundle-version="[1.1.0,1.1.1)",
+ org.eclipse.gemini.naming;bundle-version="[1.0.5,1.0.6)",
  org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)"
 Service-Component: OSGI-INF/org.eclipse.osbp.runtime.datasource.provider.xml,
  OSGI-INF/org.eclipse.osbp.runtime.datasource.provider.DatasourceService.xml
diff --git a/org.eclipse.osbp.runtime.designer.api/.classpath b/org.eclipse.osbp.runtime.designer.api/.classpath
new file mode 100644
index 0000000..43b9862
--- /dev/null
+++ b/org.eclipse.osbp.runtime.designer.api/.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/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.designer.api/.gitignore b/org.eclipse.osbp.runtime.designer.api/.gitignore
new file mode 100644
index 0000000..e91d5c4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.designer.api/.gitignore
@@ -0,0 +1,3 @@
+/target/
+/target/
+/target/
diff --git a/org.eclipse.osbp.runtime.designer.api/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.designer.api/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.designer.api/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.designer.api/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.designer.api/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..a698e59
--- /dev/null
+++ b/org.eclipse.osbp.runtime.designer.api/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+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.8
diff --git a/org.eclipse.osbp.runtime.designer.api/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.designer.api/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.designer.api/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.designer.api/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.designer.api/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.designer.api/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.eclipselink.core.fragment/.classpath b/org.eclipse.osbp.runtime.eclipselink.core.fragment/.classpath
new file mode 100644
index 0000000..43b9862
--- /dev/null
+++ b/org.eclipse.osbp.runtime.eclipselink.core.fragment/.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/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.eclipselink.core.fragment/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.eclipselink.core.fragment/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.eclipselink.core.fragment/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.eclipselink.core.fragment/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.eclipselink.core.fragment/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/org.eclipse.osbp.runtime.eclipselink.core.fragment/.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.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.osbp.runtime.eclipselink.core.fragment/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.eclipselink.core.fragment/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.eclipselink.core.fragment/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.eclipselink.core.fragment/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.eclipselink.core.fragment/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.eclipselink.core.fragment/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.eclipselink.core.fragment/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.eclipselink.core.fragment/META-INF/MANIFEST.MF
index 3df4750..d80784c 100644
--- a/org.eclipse.osbp.runtime.eclipselink.core.fragment/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.eclipselink.core.fragment/META-INF/MANIFEST.MF
@@ -9,4 +9,3 @@
 Export-Package: org.eclipse.osbp.runtime.eclipselink.core.fragment;version="0.9.0"
 Import-Package: javax.persistence.spi,
  javax.transaction;version="1.1.0"
-Require-Bundle: org.apache.aries.transaction.manager
diff --git a/org.eclipse.osbp.runtime.ecore.bundlespace/.classpath b/org.eclipse.osbp.runtime.ecore.bundlespace/.classpath
new file mode 100644
index 0000000..43b9862
--- /dev/null
+++ b/org.eclipse.osbp.runtime.ecore.bundlespace/.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/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.ecore.bundlespace/.gitignore b/org.eclipse.osbp.runtime.ecore.bundlespace/.gitignore
new file mode 100644
index 0000000..e91d5c4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.ecore.bundlespace/.gitignore
@@ -0,0 +1,3 @@
+/target/
+/target/
+/target/
diff --git a/org.eclipse.osbp.runtime.ecore.bundlespace/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.ecore.bundlespace/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.ecore.bundlespace/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.ecore.bundlespace/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.ecore.bundlespace/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/org.eclipse.osbp.runtime.ecore.bundlespace/.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.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.eclipse.osbp.runtime.ecore.bundlespace/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.ecore.bundlespace/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.ecore.bundlespace/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.ecore.bundlespace/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.ecore.bundlespace/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.ecore.bundlespace/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.ecore.bundlespace/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.ecore.bundlespace/META-INF/MANIFEST.MF
index 2df7f33..4e53e29 100644
--- a/org.eclipse.osbp.runtime.ecore.bundlespace/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.ecore.bundlespace/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: org.eclipse.osbp.runtime.ecore.bundlespace
 Bundle-Vendor: Eclipse OSBP
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-SymbolicName: org.eclipse.osbp.runtime.ecore.bundlespace
 Bundle-Version: 0.9.0.qualifier
 Import-Package: org.osgi.framework;version="1.8.0",
diff --git a/org.eclipse.osbp.runtime.emf/.classpath b/org.eclipse.osbp.runtime.emf/.classpath
new file mode 100644
index 0000000..43b9862
--- /dev/null
+++ b/org.eclipse.osbp.runtime.emf/.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/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.emf/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.emf/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.emf/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.emf/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.emf/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/org.eclipse.osbp.runtime.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.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.osbp.runtime.emf/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.emf/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.emf/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.emf/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.emf/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.emf/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.event/.classpath b/org.eclipse.osbp.runtime.event/.classpath
new file mode 100644
index 0000000..43b9862
--- /dev/null
+++ b/org.eclipse.osbp.runtime.event/.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/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.event/.gitignore b/org.eclipse.osbp.runtime.event/.gitignore
new file mode 100644
index 0000000..e91d5c4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.event/.gitignore
@@ -0,0 +1,3 @@
+/target/
+/target/
+/target/
diff --git a/org.eclipse.osbp.runtime.event/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.event/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.event/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.event/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.event/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/org.eclipse.osbp.runtime.event/.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.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.eclipse.osbp.runtime.event/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.event/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.event/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.event/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.event/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.event/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.event/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.event/META-INF/MANIFEST.MF
index bcdeed9..dc3a1e7 100644
--- a/org.eclipse.osbp.runtime.event/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.event/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: org.eclipse.osbp.runtime.event
 Bundle-Vendor: Eclipse OSBP
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-SymbolicName: org.eclipse.osbp.runtime.event
 Bundle-Version: 0.9.0.qualifier
 Import-Package: org.osgi.framework;version="1.8.0",
diff --git a/org.eclipse.osbp.runtime.feature.allinone.testframework/.gitignore b/org.eclipse.osbp.runtime.feature.allinone.testframework/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.allinone.testframework/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.runtime.feature.allinone.testframework/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.feature.allinone.testframework/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.allinone.testframework/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.feature.allinone.testframework/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.feature.allinone.testframework/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.allinone.testframework/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.feature.allinone.testframework/src/license/THIRD-PARTY.properties b/org.eclipse.osbp.runtime.feature.allinone.testframework/src/license/THIRD-PARTY.properties
new file mode 100644
index 0000000..652694d
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.allinone.testframework/src/license/THIRD-PARTY.properties
@@ -0,0 +1,27 @@
+# Generated by org.codehaus.mojo.license.AddThirdPartyMojo
+#-------------------------------------------------------------------------------
+# Already used licenses in project :
+# - Apache License 2.0
+# - BSD License
+# - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+#										(CDDL)
+#										Version
+#										1.0
+# - Common Public License Version 1.0
+# - Eclipse Public License v1.0
+# - GNU LGPL 3
+# - Indiana University Extreme! Lab Software
+#										License,
+#										vesion 1.1.1
+# - Lesser General Public License (LPGL)
+# - Lesser General Public License (LPGL) v 2.1
+# - MIT License
+# - The Apache Software License, Version 2.0
+#-------------------------------------------------------------------------------
+# Please fill the missing licenses for dependencies :
+#
+#
+#Mon Feb 09 16:05:30 CET 2015
+org.eclipse.gemini--org.apache.derby--10.8.2.2=
+org.eclipse.gemini--org.eclipse.gemini.dbaccess.derby--1.1.0.RELEASE=
+org.eclipse.gemini--org.eclipse.gemini.dbaccess.util--1.1.0.RELEASE=
diff --git a/org.eclipse.osbp.runtime.feature.common/.gitignore b/org.eclipse.osbp.runtime.feature.common/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.common/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.runtime.feature.common/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.feature.common/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.common/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.feature.common/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.feature.common/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.common/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.feature.common/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.feature.common/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.common/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.feature.common/feature.xml b/org.eclipse.osbp.runtime.feature.common/feature.xml
index 1b1e145..fd8dfbb 100644
--- a/org.eclipse.osbp.runtime.feature.common/feature.xml
+++ b/org.eclipse.osbp.runtime.feature.common/feature.xml
@@ -14,7 +14,8 @@
         id="org.eclipse.osbp.runtime.feature.common"
         label="%featureName"
         version="0.9.0.qualifier"
-        provider-name="%providerName">
+        provider-name="%providerName"
+		plugin="org.eclipse.osbp.runtime.common">
         
     <description>
         %description
diff --git a/org.eclipse.osbp.runtime.feature.datasource.provider/.gitignore b/org.eclipse.osbp.runtime.feature.datasource.provider/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.datasource.provider/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.runtime.feature.datasource.provider/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.feature.datasource.provider/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.datasource.provider/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.feature.datasource.provider/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.feature.datasource.provider/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.datasource.provider/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.feature.datasource.provider/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.feature.datasource.provider/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.datasource.provider/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.feature.datasource.provider/feature.xml b/org.eclipse.osbp.runtime.feature.datasource.provider/feature.xml
index 9a9ed70..2e33c1c 100644
--- a/org.eclipse.osbp.runtime.feature.datasource.provider/feature.xml
+++ b/org.eclipse.osbp.runtime.feature.datasource.provider/feature.xml
@@ -14,7 +14,8 @@
         id="org.eclipse.osbp.runtime.feature.datasource.provider"
         label="%featureName"
         version="0.9.0.qualifier"
-        provider-name="%providerName">
+        provider-name="%providerName"
+		plugin="org.eclipse.osbp.runtime.datasource.provider">
         
     <description>
         %description
diff --git a/org.eclipse.osbp.runtime.feature.e4eventmanager/.gitignore b/org.eclipse.osbp.runtime.feature.e4eventmanager/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.e4eventmanager/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.runtime.feature.e4eventmanager/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.feature.e4eventmanager/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.e4eventmanager/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.feature.e4eventmanager/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.feature.e4eventmanager/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.e4eventmanager/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.feature.e4eventmanager/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.feature.e4eventmanager/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.e4eventmanager/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.feature.e4eventmanager/feature.xml b/org.eclipse.osbp.runtime.feature.e4eventmanager/feature.xml
index cbd2795..de6feab 100644
--- a/org.eclipse.osbp.runtime.feature.e4eventmanager/feature.xml
+++ b/org.eclipse.osbp.runtime.feature.e4eventmanager/feature.xml
@@ -14,7 +14,8 @@
         id="org.eclipse.osbp.runtime.feature.e4eventmanager"
         label="%featureName"
         version="0.9.0.qualifier"
-        provider-name="%providerName">
+        provider-name="%providerName"
+		plugin="org.eclipse.osbp.runtime.event">
         
     <description>
         %description
diff --git a/org.eclipse.osbp.runtime.feature.eclipselink.core.fragment/.gitignore b/org.eclipse.osbp.runtime.feature.eclipselink.core.fragment/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.eclipselink.core.fragment/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.runtime.feature.eclipselink.core.fragment/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.feature.eclipselink.core.fragment/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.eclipselink.core.fragment/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.feature.eclipselink.core.fragment/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.feature.eclipselink.core.fragment/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.eclipselink.core.fragment/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.feature.eclipselink.core.fragment/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.feature.eclipselink.core.fragment/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.eclipselink.core.fragment/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.feature.eclipselink.core.fragment/feature.xml b/org.eclipse.osbp.runtime.feature.eclipselink.core.fragment/feature.xml
index 2382144..90d4c3b 100644
--- a/org.eclipse.osbp.runtime.feature.eclipselink.core.fragment/feature.xml
+++ b/org.eclipse.osbp.runtime.feature.eclipselink.core.fragment/feature.xml
@@ -14,7 +14,8 @@
         id="org.eclipse.osbp.runtime.feature.eclipselink.core.fragment"
         label="%featureName"
         version="0.9.0.qualifier"
-        provider-name="%providerName">
+        provider-name="%providerName"
+		plugin="org.eclipse.osbp.runtime.eclipselink.core.fragment">
         
     <description>
         %description
@@ -28,14 +29,7 @@
         %license
     </license>
         
-    <plugin
-        id="org.apache.aries.transaction.manager"
-        download-size="0"
-        install-size="0"
-        version="0.0.0"
-        unpack="false"/>
-
-    <plugin
+     <plugin
         id="org.eclipse.osbp.runtime.eclipselink.core.fragment"
         download-size="0"
         install-size="0"
diff --git a/org.eclipse.osbp.runtime.feature.eclipselink.core.fragment/pom.xml b/org.eclipse.osbp.runtime.feature.eclipselink.core.fragment/pom.xml
index eda9658..38f0c57 100644
--- a/org.eclipse.osbp.runtime.feature.eclipselink.core.fragment/pom.xml
+++ b/org.eclipse.osbp.runtime.feature.eclipselink.core.fragment/pom.xml
@@ -40,7 +40,6 @@
                     <labelSuffix> (source)</labelSuffix>
                     <excludes>
                         <plugin id="org.eclipse.persistence.core"/>
-                        <plugin id="org.apache.aries.transaction.manager"/>
                     </excludes>
                 </configuration>
             </plugin>
diff --git a/org.eclipse.osbp.runtime.feature.ecore.bundlespace/.gitignore b/org.eclipse.osbp.runtime.feature.ecore.bundlespace/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.ecore.bundlespace/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.runtime.feature.ecore.bundlespace/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.feature.ecore.bundlespace/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.ecore.bundlespace/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.feature.ecore.bundlespace/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.feature.ecore.bundlespace/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.ecore.bundlespace/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.feature.ecore.bundlespace/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.feature.ecore.bundlespace/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.ecore.bundlespace/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.feature.ecore.bundlespace/feature.xml b/org.eclipse.osbp.runtime.feature.ecore.bundlespace/feature.xml
index 2523749..282ee2d 100644
--- a/org.eclipse.osbp.runtime.feature.ecore.bundlespace/feature.xml
+++ b/org.eclipse.osbp.runtime.feature.ecore.bundlespace/feature.xml
@@ -14,7 +14,8 @@
         id="org.eclipse.osbp.runtime.feature.ecore.bundlespace"
         label="%featureName"
         version="0.9.0.qualifier"
-        provider-name="%providerName">
+        provider-name="%providerName"
+		plugin="org.eclipse.osbp.runtime.ecore.bundlespace">
         
     <description>
         %description
diff --git a/org.eclipse.osbp.runtime.feature.jsr303.validation/.gitignore b/org.eclipse.osbp.runtime.feature.jsr303.validation/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.jsr303.validation/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.runtime.feature.jsr303.validation/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.feature.jsr303.validation/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.jsr303.validation/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.feature.jsr303.validation/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.feature.jsr303.validation/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.jsr303.validation/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.feature.jsr303.validation/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.feature.jsr303.validation/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.jsr303.validation/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.feature.jsr303.validation/feature.xml b/org.eclipse.osbp.runtime.feature.jsr303.validation/feature.xml
index 3a293eb..d0316d1 100644
--- a/org.eclipse.osbp.runtime.feature.jsr303.validation/feature.xml
+++ b/org.eclipse.osbp.runtime.feature.jsr303.validation/feature.xml
@@ -14,7 +14,8 @@
         id="org.eclipse.osbp.runtime.feature.jsr303.validation"
         label="%featureName"
         version="0.9.0.qualifier"
-        provider-name="%providerName">
+        provider-name="%providerName"
+		plugin="org.eclipse.osbp.runtime.jsr303.validation">
         
     <description>
         %description
diff --git a/org.eclipse.osbp.runtime.feature.resolverhooks/.gitignore b/org.eclipse.osbp.runtime.feature.resolverhooks/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.resolverhooks/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.runtime.feature.resolverhooks/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.feature.resolverhooks/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.resolverhooks/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.feature.resolverhooks/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.feature.resolverhooks/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.resolverhooks/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.feature.resolverhooks/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.feature.resolverhooks/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.resolverhooks/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.feature.resolverhooks/feature.xml b/org.eclipse.osbp.runtime.feature.resolverhooks/feature.xml
index 0520982..2dcb42f 100644
--- a/org.eclipse.osbp.runtime.feature.resolverhooks/feature.xml
+++ b/org.eclipse.osbp.runtime.feature.resolverhooks/feature.xml
@@ -14,7 +14,8 @@
         id="org.eclipse.osbp.runtime.feature.resolverhooks"
         label="%featureName"
         version="0.9.0.qualifier"
-        provider-name="%providerName">
+        provider-name="%providerName"
+		plugin="org.eclipse.osbp.runtime.systemextension">
         
     <description>
         %description
diff --git a/org.eclipse.osbp.runtime.feature.typeprovider.bundlespace/.gitignore b/org.eclipse.osbp.runtime.feature.typeprovider.bundlespace/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.typeprovider.bundlespace/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.runtime.feature.typeprovider.bundlespace/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.feature.typeprovider.bundlespace/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.typeprovider.bundlespace/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.feature.typeprovider.bundlespace/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.feature.typeprovider.bundlespace/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.typeprovider.bundlespace/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.feature.typeprovider.bundlespace/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.feature.typeprovider.bundlespace/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.feature.typeprovider.bundlespace/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.feature.typeprovider.bundlespace/feature.xml b/org.eclipse.osbp.runtime.feature.typeprovider.bundlespace/feature.xml
index 7e0d31b..f96901d 100644
--- a/org.eclipse.osbp.runtime.feature.typeprovider.bundlespace/feature.xml
+++ b/org.eclipse.osbp.runtime.feature.typeprovider.bundlespace/feature.xml
@@ -14,7 +14,8 @@
         id="org.eclipse.osbp.runtime.feature.typeprovider.bundlespace"
         label="%featureName"
         version="0.9.0.qualifier"
-        provider-name="%providerName">
+        provider-name="%providerName"
+		plugin="org.eclipse.osbp.runtime.typeprovider.bundlespace">
         
     <description>
         %description
diff --git a/org.eclipse.osbp.runtime.jsr303.validation/.classpath b/org.eclipse.osbp.runtime.jsr303.validation/.classpath
new file mode 100644
index 0000000..43b9862
--- /dev/null
+++ b/org.eclipse.osbp.runtime.jsr303.validation/.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/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.jsr303.validation/.gitignore b/org.eclipse.osbp.runtime.jsr303.validation/.gitignore
new file mode 100644
index 0000000..e91d5c4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.jsr303.validation/.gitignore
@@ -0,0 +1,3 @@
+/target/
+/target/
+/target/
diff --git a/org.eclipse.osbp.runtime.jsr303.validation/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.jsr303.validation/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.jsr303.validation/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.jsr303.validation/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.jsr303.validation/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/org.eclipse.osbp.runtime.jsr303.validation/.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.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.osbp.runtime.jsr303.validation/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.jsr303.validation/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.jsr303.validation/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.jsr303.validation/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.jsr303.validation/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.jsr303.validation/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.jsr303.validation/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.jsr303.validation/META-INF/MANIFEST.MF
index 7ead445..9b684a6 100644
--- a/org.eclipse.osbp.runtime.jsr303.validation/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.jsr303.validation/META-INF/MANIFEST.MF
@@ -2,22 +2,18 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: org.eclipse.osbp.runtime.jsr303.validation
 Bundle-Vendor: Eclipse OSBP
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-SymbolicName: org.eclipse.osbp.runtime.jsr303.validation
 Bundle-Version: 0.9.0.qualifier
-Import-Package: javax.validation;version="1.1.0",
- javax.validation.bootstrap;version="1.1.0",
- javax.validation.constraints;version="1.1.0",
- javax.validation.metadata;version="1.1.0",
- javax.validation.spi;version="1.1.0",
- org.osgi.framework;version="1.8.0",
+Import-Package: org.osgi.framework;version="1.8.0",
  org.osgi.service.component.annotations;version="1.2.0",
  org.osgi.util.tracker;version="1.5.1",
  org.slf4j;version="1.7.2"
 Bundle-ActivationPolicy: lazy
-Service-Component: OSGI-INF/org.eclipse.osbp.runtime.jsr303.validation.EventBroker.xml,
- OSGI-INF/org.eclipse.osbp.runtime.jsr303.validation.common.JSR303ValidationParticipant.xml
+Service-Component: OSGI-INF/*.xml
 Require-Bundle: org.apache.bval.org.apache.bval.bundle;bundle-version="0.5.0",
- org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)"
+ org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)",
+ javax.validation.api;bundle-version="1.1.0"
 Bundle-Activator: org.eclipse.osbp.runtime.jsr303.validation.Activator
 Export-Package: org.eclipse.osbp.runtime.jsr303.validation.common;version="0.9.0"
+Bundle-ClassPath: .
diff --git a/org.eclipse.osbp.runtime.jsr303.validation/build.properties b/org.eclipse.osbp.runtime.jsr303.validation/build.properties
index 53ea953..5ae90c0 100644
--- a/org.eclipse.osbp.runtime.jsr303.validation/build.properties
+++ b/org.eclipse.osbp.runtime.jsr303.validation/build.properties
@@ -1,5 +1,9 @@
 output.. = target/classes/
-bin.includes = about.properties,  about.mappings,  about.ini,  about.html,  META-INF/,\
+bin.includes = about.properties,\
+               about.mappings,\
+               about.ini,\
+               about.html,\
+               META-INF/,\
                .,\
                .project,\
                .classpath,\
diff --git a/org.eclipse.osbp.runtime.jsr303.validation/src/org/eclipse/osbp/runtime/jsr303/validation/OSGiMessageInterpolator.java b/org.eclipse.osbp.runtime.jsr303.validation/src/org/eclipse/osbp/runtime/jsr303/validation/OSGiMessageInterpolator.java
index 23111f2..b60abd1 100644
--- a/org.eclipse.osbp.runtime.jsr303.validation/src/org/eclipse/osbp/runtime/jsr303/validation/OSGiMessageInterpolator.java
+++ b/org.eclipse.osbp.runtime.jsr303.validation/src/org/eclipse/osbp/runtime/jsr303/validation/OSGiMessageInterpolator.java
@@ -16,6 +16,7 @@
 import java.util.Locale;
 import java.util.ResourceBundle;
 
+import javax.validation.*;
 import org.apache.bval.jsr303.DefaultMessageInterpolator;
 import org.eclipse.osbp.runtime.common.i18n.II18nService;
 import org.eclipse.osbp.runtime.jsr303.validation.common.ValidationUtil;
@@ -46,7 +47,7 @@
 	}
 
 	@Override
-	public String interpolate(String message, Context context, Locale locale) {
+	public String interpolate(String message, MessageInterpolator.Context context, Locale locale) {
 
 		String result = "";
 		if (i18nService != null) {
@@ -63,7 +64,7 @@
 	}
 
 	@Override
-	public String interpolate(String message, Context context) {
+	public String interpolate(String message, MessageInterpolator.Context context) {
 		return super.interpolate(message, context);
 	}
 
diff --git a/org.eclipse.osbp.runtime.jsr303.validation/src/org/eclipse/osbp/runtime/jsr303/validation/common/ValidationUtil.java b/org.eclipse.osbp.runtime.jsr303.validation/src/org/eclipse/osbp/runtime/jsr303/validation/common/ValidationUtil.java
index af1c654..c5f2843 100644
--- a/org.eclipse.osbp.runtime.jsr303.validation/src/org/eclipse/osbp/runtime/jsr303/validation/common/ValidationUtil.java
+++ b/org.eclipse.osbp.runtime.jsr303.validation/src/org/eclipse/osbp/runtime/jsr303/validation/common/ValidationUtil.java
@@ -11,19 +11,22 @@
  * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
  * 
  */
- package org.eclipse.osbp.runtime.jsr303.validation.common;
+package org.eclipse.osbp.runtime.jsr303.validation.common;
 
 import java.util.HashSet;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 
 import javax.validation.ConstraintViolation;
+import javax.validation.MessageInterpolator;
 import javax.validation.MessageInterpolator.Context;
 import javax.validation.Payload;
 import javax.validation.metadata.ConstraintDescriptor;
 
 import org.eclipse.osbp.runtime.common.validation.IStatus;
 import org.eclipse.osbp.runtime.common.validation.Status;
+import org.eclipse.osbp.runtime.jsr303.validation.OSGiMessageInterpolator;
 
 public class ValidationUtil {
 
@@ -31,6 +34,18 @@
 		super();
 	}
 
+	public static MessageInterpolator createNewMessageInterpolator(Locale locale) {
+		OSGiMessageInterpolator interpolator = new OSGiMessageInterpolator();
+		interpolator.setLocale(locale);
+		return interpolator;
+	}
+
+	public static void updateLocale(MessageInterpolator interpolator, Locale locale) {
+		if (interpolator instanceof OSGiMessageInterpolator) {
+			((OSGiMessageInterpolator) interpolator).setLocale(locale);
+		}
+	}
+
 	/**
 	 * Maps the contraint violations to IStatus.
 	 * 
@@ -46,15 +61,11 @@
 			IStatus.Severity severity = getSeverity(violation);
 			String code = getMessageCode(violation);
 
-			Class<?> clazz = violation.getLeafBean() != null ? violation
-					.getLeafBean().getClass() : null;
-			IStatus status = Status.createStatus(code, clazz, severity,
-					violation.getMessage());
+			Class<?> clazz = violation.getLeafBean() != null ? violation.getLeafBean().getClass() : null;
+			IStatus status = Status.createStatus(code, clazz, severity, violation.getMessage());
 			status.putProperty(IStatus.PROP_JAVAX_CONSTRAINT, violation);
-			status.putProperty(IStatus.PROP_JAVAX_PROPERTY_PATH, violation
-					.getPropertyPath().toString());
-			status.putProperty(IStatus.PROP_JAVAX_LEAF_BEAN,
-					violation.getLeafBean());
+			status.putProperty(IStatus.PROP_JAVAX_PROPERTY_PATH, violation.getPropertyPath().toString());
+			status.putProperty(IStatus.PROP_JAVAX_LEAF_BEAN, violation.getLeafBean());
 
 			if (creator != null) {
 				status.putProperty(IStatus.PROP_CREATOR, creator.getName());
@@ -67,8 +78,7 @@
 	}
 
 	protected static String getMessageCode(ConstraintViolation<?> violation) {
-		String message = violation.getMessageTemplate().substring(1,
-				violation.getMessageTemplate().length() - 1);
+		String message = violation.getMessageTemplate().substring(1, violation.getMessageTemplate().length() - 1);
 		if (message.contains(":")) {
 			String[] tokens = message.split(":");
 			return tokens[1];
@@ -77,11 +87,9 @@
 		return violation.getPropertyPath().toString();
 	}
 
-	protected static IStatus.Severity getSeverity(
-			ConstraintViolation<?> violation) {
+	protected static IStatus.Severity getSeverity(ConstraintViolation<?> violation) {
 		IStatus.Severity severity = IStatus.Severity.ERROR;
-		Set<Class<? extends Payload>> payloads = violation
-				.getConstraintDescriptor().getPayload();
+		Set<Class<? extends Payload>> payloads = violation.getConstraintDescriptor().getPayload();
 		if (payloads.size() > 0) {
 			Class<? extends Payload> payload = payloads.iterator().next();
 			if (payload == InfoSeverity.class) {
@@ -101,8 +109,7 @@
 
 		for (Map.Entry<String, Object> entry : props.entrySet()) {
 			String replacement = "\\{" + entry.getKey() + "\\}";
-			message = message.replaceAll(replacement, entry.getValue()
-					.toString());
+			message = message.replaceAll(replacement, entry.getValue().toString());
 		}
 
 		return message;
diff --git a/org.eclipse.osbp.runtime.logback.fragment/.classpath b/org.eclipse.osbp.runtime.logback.fragment/.classpath
new file mode 100644
index 0000000..43b9862
--- /dev/null
+++ b/org.eclipse.osbp.runtime.logback.fragment/.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/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.logback.fragment/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.logback.fragment/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.logback.fragment/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.logback.fragment/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.logback.fragment/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/org.eclipse.osbp.runtime.logback.fragment/.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.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.osbp.runtime.logback.fragment/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.logback.fragment/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.logback.fragment/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.logback.fragment/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.logback.fragment/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.logback.fragment/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.logback.fragment/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.logback.fragment/META-INF/MANIFEST.MF
index 889ce06..f73d831 100644
--- a/org.eclipse.osbp.runtime.logback.fragment/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.logback.fragment/META-INF/MANIFEST.MF
@@ -6,3 +6,5 @@
 Bundle-Version: 0.9.0.qualifier
 Fragment-Host: ch.qos.logback.classic
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Import-Package: ch.qos.logback.core.rolling;version="1.1.2",
+ ch.qos.logback.core.rolling.helper;version="1.1.2"
diff --git a/org.eclipse.osbp.runtime.logback.fragment/logback.xml b/org.eclipse.osbp.runtime.logback.fragment/logback.xml
deleted file mode 100644
index c426104..0000000
--- a/org.eclipse.osbp.runtime.logback.fragment/logback.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<configuration>
-  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-    <!-- encoders are assigned the type
-         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
-    <encoder>
-      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
-    </encoder>
-  </appender>
-
-  <root level="ERROR">
-    <appender-ref ref="STDOUT" />
-  </root>
-</configuration>
diff --git a/org.eclipse.osbp.runtime.memento/.classpath b/org.eclipse.osbp.runtime.memento/.classpath
new file mode 100644
index 0000000..cf36b56
--- /dev/null
+++ b/org.eclipse.osbp.runtime.memento/.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/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src/"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.memento/.gitignore b/org.eclipse.osbp.runtime.memento/.gitignore
new file mode 100644
index 0000000..e91d5c4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.memento/.gitignore
@@ -0,0 +1,3 @@
+/target/
+/target/
+/target/
diff --git a/org.eclipse.osbp.runtime.memento/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.memento/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.memento/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.memento/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.memento/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/org.eclipse.osbp.runtime.memento/.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.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.eclipse.osbp.runtime.memento/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.memento/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.memento/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.memento/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.memento/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.memento/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.memento/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.memento/META-INF/MANIFEST.MF
index f922205..9e0419e 100644
--- a/org.eclipse.osbp.runtime.memento/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.memento/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: org.eclipse.osbp.runtime.memento
 Bundle-Vendor: Eclipse OSBP
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-SymbolicName: org.eclipse.osbp.runtime.memento
 Bundle-Version: 0.9.0.qualifier
 Import-Package: org.osgi.framework;version="1.8.0",
diff --git a/org.eclipse.osbp.runtime.security/.project b/org.eclipse.osbp.runtime.security/.project
deleted file mode 100644
index 50329a7..0000000
--- a/org.eclipse.osbp.runtime.security/.project
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.osbp.runtime.security</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<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.pde.ds.core.builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.babel.editor.rbeBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.babel.editor.rbeNature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.osbp.runtime.security/LICENSE.txt b/org.eclipse.osbp.runtime.security/LICENSE.txt
deleted file mode 100644
index ff42ad4..0000000
--- a/org.eclipse.osbp.runtime.security/LICENSE.txt
+++ /dev/null
@@ -1,161 +0,0 @@
-Eclipse Public License -v 1.0
-
-THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION
-OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
-
-1. DEFINITIONS
-
-"Contribution" means:
-
-a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
-
-b) in the case of each subsequent Contributor:
-
-i) changes to the Program, and
-
-ii) additions to the Program;
-
-where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
-A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone
-acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate
-modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not
-derivative works of the Program.
-
-"Contributor" means any person or entity that distributes the Program.
-
-"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of
-its Contribution alone or when combined with the Program.
-
-"Program" means the Contributions distributed in accordance with this Agreement.
-
-"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
-
-2. GRANT OF RIGHTS
-
-a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
-royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute
-and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code
-form.
-
-b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
-royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the
-Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the
-combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such
-addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not
-apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
-
-c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no
-assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity
-based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property
-rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the
-Program, it is Recipient's responsibility to acquire that license before distributing the Program.
-
-d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to
-grant the copyright license set forth in this Agreement.
-
-3. REQUIREMENTS
-
-A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
-
-a) it complies with the terms and conditions of this Agreement; and
-
-b) its license agreement:
-
-i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including
-warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and
-fitness for a particular purpose;
-
-ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special,
-incidental and consequential damages, such as lost profits;
-
-iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any
-other party; and
-
-iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it
-in a reasonable manner on or through a medium customarily used for software exchange.
-
-When the Program is made available in source code form:
-
-a) it must be made available under this Agreement; and
-
-b) a copy of this Agreement must be included with each copy of the Program.
-
-Contributors may not remove or alter any copyright notices contained within the Program.
-
-Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution.
-
-4. COMMERCIAL DISTRIBUTION
-
-Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and
-the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes
-the Program in a commercial product offering should do so in a manner which does not create potential liability for
-other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor
-("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor")
-against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions
-brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such
-Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The
-obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual
-property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the
-Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may
- participate in any such claim at its own expense.
-
-For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is
-then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties
-related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.
-Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to
-those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result,
-the Commercial Contributor must pay those damages.
-
-5. NO WARRANTY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
-CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
-NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
-determining the appropriateness of using and distributing the Program and assumes all risks associated with its
-exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance
-with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
-
-6. DISCLAIMER OF LIABILITY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
-HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-7. GENERAL
-
-If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such
-provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
-
-If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such
-Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such
-litigation is filed.
-
-All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such
-noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution
-of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses
- granted by Recipient relating to the Program shall continue and survive.
-
-Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement
-is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish
-new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the
-right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may
-assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the
-Agreement will be given a distinguishing version number. The Program (including Contributions) may always be
-distributed subject to the version of the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the
-new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or
-otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
-
-This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States
-of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause
-of action arose. Each party waives its rights to a jury trial in any resulting litigation.
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.security/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.security/META-INF/MANIFEST.MF
deleted file mode 100644
index 6884709..0000000
--- a/org.eclipse.osbp.runtime.security/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,21 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: org.eclipse.osbp.runtime.security
-Bundle-Vendor: Eclipse OSBP
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Bundle-SymbolicName: org.eclipse.osbp.runtime.security
-Bundle-Version: 0.9.0.qualifier
-Import-Package: org.osgi.framework;version="1.8.0",
- org.osgi.service.component;version="1.2.2",
- org.osgi.service.component.annotations;version="1.2.0",
- org.osgi.service.event;version="1.3.0",
- org.osgi.service.prefs,
- org.slf4j;version="1.7.2"
-Bundle-ActivationPolicy: lazy
-Service-Component: OSGI-INF/org.eclipse.osbp.runtime.security.impl.UserNotificationService.xml,
- OSGI-INF/org.eclipse.osbp.runtime.security.impl.JdbcRealmComponent.xml,
- OSGI-INF/org.eclipse.osbp.runtime.security.impl.SecurityManagerComponent.xml
-Require-Bundle: org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)",
- org.apache.shiro.core;bundle-version="1.2.3"
-Export-Package: org.eclipse.osbp.runtime.security;version="0.9.0",
- org.eclipse.osbp.runtime.security.impl;x-internal:=true;version="0.9.0"
diff --git a/org.eclipse.osbp.runtime.security/OSGI-INF/org.eclipse.osbp.runtime.security.impl.JdbcRealmComponent.xml b/org.eclipse.osbp.runtime.security/OSGI-INF/org.eclipse.osbp.runtime.security.impl.JdbcRealmComponent.xml
deleted file mode 100644
index fab37ab..0000000
--- a/org.eclipse.osbp.runtime.security/OSGI-INF/org.eclipse.osbp.runtime.security.impl.JdbcRealmComponent.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" immediate="true" name="org.eclipse.osbp.runtime.security.impl.JdbcRealmComponent">
-   <implementation class="org.eclipse.osbp.runtime.security.impl.JdbcRealmComponent"/>
-   <reference bind="setDatasource" cardinality="1..1" interface="javax.sql.DataSource" name="Datasource" policy="static" target="(security.datasource=jdbc)" unbind="unsetDatasource"/>
-</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.security/OSGI-INF/org.eclipse.osbp.runtime.security.impl.SecurityManagerComponent.xml b/org.eclipse.osbp.runtime.security/OSGI-INF/org.eclipse.osbp.runtime.security.impl.SecurityManagerComponent.xml
deleted file mode 100644
index 99e251d..0000000
--- a/org.eclipse.osbp.runtime.security/OSGI-INF/org.eclipse.osbp.runtime.security.impl.SecurityManagerComponent.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" immediate="true" name="org.eclipse.osbp.runtime.security.impl.SecurityManagerComponent">
-   <implementation class="org.eclipse.osbp.runtime.security.impl.SecurityManagerComponent"/>
-   <reference bind="addRealm" cardinality="0..n" interface="org.apache.shiro.realm.Realm" name="Realm" policy="static" unbind="removeRealm"/>
-</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.security/about.html b/org.eclipse.osbp.runtime.security/about.html
deleted file mode 100644
index 64c0598..0000000
--- a/org.eclipse.osbp.runtime.security/about.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>June 1, 2016</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.security/about.ini b/org.eclipse.osbp.runtime.security/about.ini
deleted file mode 100644
index 7df671f..0000000
--- a/org.eclipse.osbp.runtime.security/about.ini
+++ /dev/null
@@ -1,17 +0,0 @@
-# about.ini
-# contains information about a feature
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# "%key" are externalized strings defined in about.properties
-# This file does not need to be translated.
-
-# Property "aboutText" contains blurb for "About" dialog (translated)
-aboutText=%featureText
-
-# Property "featureImage" contains path to feature image (32x32)
-featureImage=
-
-# Property "appName" contains name of the application (translated)
-appName=%featureName
-
-# Property "welcomePage" contains path to welcome page (special XML-based format)
-welcomePage=
diff --git a/org.eclipse.osbp.runtime.security/about.mappings b/org.eclipse.osbp.runtime.security/about.mappings
deleted file mode 100644
index 4511a0a..0000000
--- a/org.eclipse.osbp.runtime.security/about.mappings
+++ /dev/null
@@ -1,6 +0,0 @@
-# about.mappings
-# contains fill-ins for about.properties
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# This file does not need to be translated.
-
-0=qualifier
diff --git a/org.eclipse.osbp.runtime.security/about.properties b/org.eclipse.osbp.runtime.security/about.properties
deleted file mode 100644
index 706c165..0000000
--- a/org.eclipse.osbp.runtime.security/about.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# Copyright (c) 2012, 2016 - Loetz GmbH&Co.KG (Heidelberg)
-# 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:
-#    Loetz GmbH&Co.KG - initial API and implementation
-#
-
-# NLS_MESSAGEFORMAT_VAR
-
-featureName=org.eclipse.osbp.runtime.security
-
-################ blurb property ####################################
-featureText=\
-Copyright (c) 2012-2016 - Loetz GmbH&Co.KG \n\
-All rights reserved. This program and the accompanying materials\n\
-are made available under the terms of the Eclipse Public License v1.0\n\
-which accompanies this distribution, and is available at\n\
-http://www.eclipse.org/legal/epl-v10.html\n\
-\n\
-Contributors:\n\
-    Loetz GmbH&Co.KG - implementation\n
-################ end of blurb property ####################################
diff --git a/org.eclipse.osbp.runtime.security/build.properties b/org.eclipse.osbp.runtime.security/build.properties
deleted file mode 100644
index e79b84a..0000000
--- a/org.eclipse.osbp.runtime.security/build.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-source.. = src/
-output.. = target/classes/
-bin.includes = about.properties,  about.mappings,  about.ini,  about.html,  META-INF/,\
-               .,\
-               OSGI-INF/,\
-               .project,\
-               .classpath,\
-               LICENSE.txt
-src.includes = about.properties,  about.mappings,  about.ini,  about.html,  LICENSE.txt
diff --git a/org.eclipse.osbp.runtime.security/pom.xml b/org.eclipse.osbp.runtime.security/pom.xml
deleted file mode 100644
index d5b7204..0000000
--- a/org.eclipse.osbp.runtime.security/pom.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--#======================================================================= -->
-<!--# Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) -->
-<!--# 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: -->
-<!--#     Christophe Loetz (Loetz GmbH&Co.KG) - initial API and implementation -->
-<!--#======================================================================= -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.eclipse.osbp.runtime</groupId>
-        <artifactId>org.eclipse.osbp.runtime.aggregator</artifactId>
-        <version>0.9.0-SNAPSHOT</version>
-        <relativePath>..</relativePath>
-    </parent>
-
-    <artifactId>org.eclipse.osbp.runtime.security</artifactId>
-    <packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/org.eclipse.osbp.runtime.security/src/org/eclipse/osbp/runtime/security/impl/JdbcRealmComponent.java b/org.eclipse.osbp.runtime.security/src/org/eclipse/osbp/runtime/security/impl/JdbcRealmComponent.java
deleted file mode 100644
index 73edbed..0000000
--- a/org.eclipse.osbp.runtime.security/src/org/eclipse/osbp/runtime/security/impl/JdbcRealmComponent.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- * 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 - Initial implementation
- */
-package org.eclipse.osbp.runtime.security.impl;
-
-import javax.sql.DataSource;
-
-import org.apache.shiro.realm.Realm;
-import org.apache.shiro.realm.jdbc.JdbcRealm;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.component.ComponentContext;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Reference;
-import org.osgi.service.component.annotations.ReferenceCardinality;
-
-@Component(immediate=true)
-public class JdbcRealmComponent {
-
-	private ComponentContext context;
-	private ServiceRegistration<Realm> reg;
-	private DataSource ds;
-
-	protected void activate(ComponentContext context) {
-		this.context = context;
-
-		JdbcRealm realm = new JdbcRealm();
-		realm.setDataSource(ds);
-
-		reg = this.context.getBundleContext().registerService(Realm.class,
-				realm, null);
-	}
-
-	@Reference(cardinality = ReferenceCardinality.MANDATORY, target = "(security.datasource=jdbc)", unbind = "unsetDatasource")
-	protected void setDatasource(DataSource ds) {
-		this.ds = ds;
-	}
-
-	protected void unsetDatasource(DataSource ds) {
-		this.ds = null;
-	}
-
-	protected void deactivate() {
-		reg.unregister();
-		reg = null;
-	}
-}
diff --git a/org.eclipse.osbp.runtime.security/src/org/eclipse/osbp/runtime/security/impl/LdapRealmComponent.java b/org.eclipse.osbp.runtime.security/src/org/eclipse/osbp/runtime/security/impl/LdapRealmComponent.java
deleted file mode 100644
index 1660d1a..0000000
--- a/org.eclipse.osbp.runtime.security/src/org/eclipse/osbp/runtime/security/impl/LdapRealmComponent.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- * 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 - Initial implementation
- */
-package org.eclipse.osbp.runtime.security.impl;
-
-import org.apache.shiro.realm.Realm;
-import org.apache.shiro.realm.ldap.JndiLdapContextFactory;
-import org.apache.shiro.realm.ldap.JndiLdapRealm;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.component.ComponentContext;
-
-/**
- * To use this realm, provide your own declarative OSGi service and pass in the
- * properties requested.
- */
-public class LdapRealmComponent {
-
-	private static final String LDAP_AUTHENTICATION_MECHANISM = "osbp.security.ldap.authenticationMechanism";
-	private static final String LDAP_URL = "osbp.security.ldap.url";
-	private ComponentContext context;
-	private ServiceRegistration<Realm> reg;
-
-	protected void activate(ComponentContext context) {
-		this.context = context;
-
-		JndiLdapRealm realm = new JndiLdapRealm();
-		realm.setUserDnTemplate((String) context.getProperties().get(
-				"osbp.security.ldap.userDnTemplate"));
-
-		JndiLdapContextFactory factory = new JndiLdapContextFactory();
-		factory.setUrl((String) context.getProperties().get(LDAP_URL));
-		factory.setAuthenticationMechanism((String) context.getProperties()
-				.get(LDAP_AUTHENTICATION_MECHANISM));
-		realm.setContextFactory(factory);
-
-		reg = this.context.getBundleContext().registerService(Realm.class,
-				realm, null);
-	}
-
-	protected void deactivate() {
-		reg.unregister();
-		reg = null;
-	}
-}
diff --git a/org.eclipse.osbp.runtime.security/src/org/eclipse/osbp/runtime/security/impl/SecurityManagerComponent.java b/org.eclipse.osbp.runtime.security/src/org/eclipse/osbp/runtime/security/impl/SecurityManagerComponent.java
deleted file mode 100644
index 93a93e3..0000000
--- a/org.eclipse.osbp.runtime.security/src/org/eclipse/osbp/runtime/security/impl/SecurityManagerComponent.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- * 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 - Initial implementation
- */
-package org.eclipse.osbp.runtime.security.impl;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.config.IniSecurityManagerFactory;
-import org.apache.shiro.mgt.DefaultSecurityManager;
-import org.apache.shiro.mgt.SecurityManager;
-import org.apache.shiro.realm.Realm;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.component.ComponentContext;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Reference;
-import org.osgi.service.component.annotations.ReferenceCardinality;
-
-@Component(immediate=true)
-public class SecurityManagerComponent {
-
-	private IniSecurityManagerFactory factory;
-	private DefaultSecurityManager securityManager;
-	private ComponentContext context;
-	private ServiceRegistration<SecurityManager> reg;
-
-	protected void activate(ComponentContext context) {
-		this.context = context;
-		factory = new IniSecurityManagerFactory("classpath:shiro.ini");
-
-		securityManager = (DefaultSecurityManager) factory.getInstance();
-		SecurityUtils.setSecurityManager(securityManager);
-
-		reg = this.context.getBundleContext().registerService(
-				SecurityManager.class, securityManager, null);
-	}
-
-	@Reference(cardinality = ReferenceCardinality.MULTIPLE, unbind = "removeRealm")
-	protected void addRealm(Realm realm) {
-		List<Realm> realms = new ArrayList<Realm>(securityManager.getRealms());
-		realms.add(realm);
-		securityManager.setRealms(realms);
-	}
-
-	protected void removeRealm(Realm realm) {
-		// not supported by shiro
-	}
-
-	protected void deactivate() {
-		reg.unregister();
-		reg = null;
-
-		factory = null;
-		securityManager = null;
-	}
-}
diff --git a/org.eclipse.osbp.runtime.systemextension/.classpath b/org.eclipse.osbp.runtime.systemextension/.classpath
new file mode 100644
index 0000000..b9a5b1e
--- /dev/null
+++ b/org.eclipse.osbp.runtime.systemextension/.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/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.systemextension/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.systemextension/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.systemextension/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.systemextension/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.systemextension/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/org.eclipse.osbp.runtime.systemextension/.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.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.osbp.runtime.systemextension/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.systemextension/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.systemextension/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.systemextension/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.systemextension/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.systemextension/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.typeprovider.bundlespace/.classpath b/org.eclipse.osbp.runtime.typeprovider.bundlespace/.classpath
new file mode 100644
index 0000000..43b9862
--- /dev/null
+++ b/org.eclipse.osbp.runtime.typeprovider.bundlespace/.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/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.typeprovider.bundlespace/.gitignore b/org.eclipse.osbp.runtime.typeprovider.bundlespace/.gitignore
new file mode 100644
index 0000000..e91d5c4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.typeprovider.bundlespace/.gitignore
@@ -0,0 +1,3 @@
+/target/
+/target/
+/target/
diff --git a/org.eclipse.osbp.runtime.typeprovider.bundlespace/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.typeprovider.bundlespace/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.typeprovider.bundlespace/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.typeprovider.bundlespace/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.typeprovider.bundlespace/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/org.eclipse.osbp.runtime.typeprovider.bundlespace/.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.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.eclipse.osbp.runtime.typeprovider.bundlespace/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.typeprovider.bundlespace/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.typeprovider.bundlespace/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.typeprovider.bundlespace/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.typeprovider.bundlespace/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.typeprovider.bundlespace/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.typeprovider.bundlespace/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.typeprovider.bundlespace/META-INF/MANIFEST.MF
index 84d0800..bb651ef 100644
--- a/org.eclipse.osbp.runtime.typeprovider.bundlespace/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.typeprovider.bundlespace/META-INF/MANIFEST.MF
@@ -2,12 +2,11 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: org.eclipse.osbp.runtime.typeprovider.bundlespace
 Bundle-Vendor: Eclipse OSBP
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-SymbolicName: org.eclipse.osbp.runtime.typeprovider.bundlespace
 Bundle-Version: 0.9.0.qualifier
 Import-Package: org.osgi.framework;version="1.8.0",
  org.osgi.service.component.annotations;version="1.2.0",
  org.slf4j;version="1.7.2"
-Service-Component: OSGI-INF/org.eclipse.osbp.runtime.jsr303.validation.EventBroker.xml,
- OSGI-INF/org.eclipse.osbp.runtime.typeprovider.bundlespace.BundleSpaceTypeProviderService.xml
+Service-Component: OSGI-INF/*.xml
 Require-Bundle: org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)"
diff --git a/org.eclipse.osbp.runtime.usernotification/.classpath b/org.eclipse.osbp.runtime.usernotification/.classpath
new file mode 100644
index 0000000..43b9862
--- /dev/null
+++ b/org.eclipse.osbp.runtime.usernotification/.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/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.usernotification/.gitignore b/org.eclipse.osbp.runtime.usernotification/.gitignore
new file mode 100644
index 0000000..e91d5c4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.usernotification/.gitignore
@@ -0,0 +1,3 @@
+/target/
+/target/
+/target/
diff --git a/org.eclipse.osbp.runtime.usernotification/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.usernotification/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.usernotification/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.usernotification/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.usernotification/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/org.eclipse.osbp.runtime.usernotification/.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.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.eclipse.osbp.runtime.usernotification/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.usernotification/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.usernotification/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.usernotification/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.usernotification/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.usernotification/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.usernotification/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.usernotification/META-INF/MANIFEST.MF
index fb3a9c7..14cfd41 100644
--- a/org.eclipse.osbp.runtime.usernotification/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.usernotification/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: org.eclipse.osbp.runtime.usernotification
 Bundle-Vendor: Eclipse OSBP
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-SymbolicName: org.eclipse.osbp.runtime.usernotification
 Bundle-Version: 0.9.0.qualifier
 Import-Package: org.osgi.framework;version="1.8.0",
diff --git a/pom.xml b/pom.xml
index 94d0e3d..6d91483 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,113 +7,120 @@
 <!--# http://www.eclipse.org/legal/epl-v10.html -->
 <!--# -->
 <!--# Contributors: -->
-<!--#     Christophe Loetz (Loetz GmbH&Co.KG) - initial API and implementation -->
+<!--# Christophe Loetz (Loetz GmbH&Co.KG) - initial API and implementation -->
 <!--#======================================================================= -->
 
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
 
-    <parent>
-        <groupId>org.eclipse.osbp.releng.maven</groupId>
-        <artifactId>org.eclipse.osbp.releng.maven.parent.tycho</artifactId>
-        <version>0.9.0-SNAPSHOT</version>
-        <relativePath/>
-    </parent>
+	<parent>
+		<groupId>org.eclipse.osbp.releng.maven</groupId>
+		<artifactId>org.eclipse.osbp.releng.maven.parent.tycho</artifactId>
+		<version>0.9.0-SNAPSHOT</version>
+		<relativePath />
+	</parent>
 
-    <groupId>org.eclipse.osbp.runtime</groupId>
-    <artifactId>org.eclipse.osbp.runtime.aggregator</artifactId>
+	<groupId>org.eclipse.osbp.runtime</groupId>
+	<artifactId>org.eclipse.osbp.runtime.aggregator</artifactId>
 
-    <packaging>pom</packaging>
+	<packaging>pom</packaging>
 
-    <properties>
-        <osbp.gitrepo.name>${project.groupId}</osbp.gitrepo.name>
-    </properties>
+	<properties>
+		<osbp.gitrepo.name>${project.groupId}</osbp.gitrepo.name>
+	</properties>
 
-    <modules>
-        <!-- Bundles -->
-        <module>org.eclipse.osbp.runtime.common</module>
-        <module>org.eclipse.osbp.runtime.eclipselink.core.fragment</module>
-        <module>org.eclipse.osbp.runtime.ecore.bundlespace</module>
-        <module>org.eclipse.osbp.runtime.emf</module>
-        <module>org.eclipse.osbp.runtime.event</module>
-        <module>org.eclipse.osbp.runtime.datasource.provider</module>
-        <module>org.eclipse.osbp.runtime.designer.api</module>
-        <module>org.eclipse.osbp.runtime.jsr303.validation</module>
-        <module>org.eclipse.osbp.runtime.logback.fragment</module>
-        <module>org.eclipse.osbp.runtime.memento</module>
-        <module>org.eclipse.osbp.runtime.systemextension</module>
-        <module>org.eclipse.osbp.runtime.typeprovider.bundlespace</module>
-        <module>org.eclipse.osbp.runtime.usernotification</module>
-        <module>org.eclipse.osbp.runtime.security</module>
-    
-        <!-- Features -->
-        <module>org.eclipse.osbp.runtime.feature.common</module>
-        <!-- <module>org.eclipse.osbp.runtime.feature.allinone</module> -->
-        <module>org.eclipse.osbp.runtime.feature.e4eventmanager</module>
-        <module>org.eclipse.osbp.runtime.feature.eclipselink.core.fragment</module>
-        <module>org.eclipse.osbp.runtime.feature.jsr303.validation</module>
-        <module>org.eclipse.osbp.runtime.feature.datasource.provider</module>
-        <module>org.eclipse.osbp.runtime.feature.typeprovider.bundlespace</module>
-        <module>org.eclipse.osbp.runtime.feature.ecore.bundlespace</module>
-        <!-- <module>org.eclipse.osbp.runtime.feature.allinone.testframework</module> -->
-        <module>org.eclipse.osbp.runtime.feature.resolverhooks</module>
-    </modules>
+	<modules>
+		<!-- Bundles -->
+		<module>org.eclipse.osbp.runtime.common</module>
+		<module>org.eclipse.osbp.runtime.eclipselink.core.fragment</module>
+		<module>org.eclipse.osbp.runtime.ecore.bundlespace</module>
+		<module>org.eclipse.osbp.runtime.emf</module>
+		<module>org.eclipse.osbp.runtime.event</module>
+		<module>org.eclipse.osbp.runtime.datasource.provider</module>
+		<module>org.eclipse.osbp.runtime.designer.api</module>
+		<module>org.eclipse.osbp.runtime.jsr303.validation</module>
+		<module>org.eclipse.osbp.runtime.logback.fragment</module>
+		<module>org.eclipse.osbp.runtime.memento</module>
+		<module>org.eclipse.osbp.runtime.systemextension</module>
+		<module>org.eclipse.osbp.runtime.typeprovider.bundlespace</module>
+		<module>org.eclipse.osbp.runtime.usernotification</module>
 
-    <build>
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <artifactId>maven-compiler-plugin</artifactId>
-                    <version>3.1</version>
-                    <configuration>
-                        <source>1.8</source>
-                        <target>1.8</target>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <groupId>org.eclipse.tycho</groupId>
-                    <artifactId>tycho-compiler-plugin</artifactId>
-                    <version>${tycho-version}</version>
-                    <configuration>
-                        <compilerVersion>1.8</compilerVersion>
-                        <encoding>UTF-8</encoding>
-                        <source>1.8</source>
-                        <target>1.8</target>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <groupId>org.eclipse.tycho</groupId>
-                    <artifactId>target-platform-configuration</artifactId>
-                    <version>${tycho-version}</version>
-                    <configuration>
-                        <resolver>p2</resolver>
-                        <pomDependencies>consider</pomDependencies>
-                        <environments>
-                            <environment>
-                                <os>win32</os>
-                                <ws>win32</ws>
-                                <arch>x86_64</arch>
-                            </environment>
-                            <environment>
-                                <os>linux</os>
-                                <ws>gtk</ws>
-                                <arch>x86</arch>
-                            </environment>
-                            <environment>
-                                <os>linux</os>
-                                <ws>gtk</ws>
-                                <arch>x86_64</arch>
-                            </environment>
-                            <environment>
-                                <os>macosx</os>
-                                <ws>cocoa</ws>
-                                <arch>x86_64</arch>
-                            </environment>
-                        </environments>
-                    </configuration>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-    </build>
+		<!-- Features -->
+		<module>org.eclipse.osbp.runtime.feature.common</module>
+		<!-- <module>org.eclipse.osbp.runtime.feature.allinone</module> -->
+		<module>org.eclipse.osbp.runtime.feature.e4eventmanager</module>
+		<module>org.eclipse.osbp.runtime.feature.eclipselink.core.fragment</module>
+		<module>org.eclipse.osbp.runtime.feature.jsr303.validation</module>
+		<module>org.eclipse.osbp.runtime.feature.datasource.provider</module>
+		<module>org.eclipse.osbp.runtime.feature.typeprovider.bundlespace</module>
+		<module>org.eclipse.osbp.runtime.feature.ecore.bundlespace</module>
+		<!-- <module>org.eclipse.osbp.runtime.feature.allinone.testframework</module> -->
+		<module>org.eclipse.osbp.runtime.feature.resolverhooks</module>
+	</modules>
+
+	<repositories>
+		<repository>
+			<id>osbp-nexus-thirdparty</id>
+			<url>http://download.osbee.org:8086/nexus/content/repositories/osbee-thirdparty/</url>
+		</repository>
+	</repositories>
+
+	<build>
+		<pluginManagement>
+			<plugins>
+				<plugin>
+					<artifactId>maven-compiler-plugin</artifactId>
+					<version>3.1</version>
+					<configuration>
+						<source>1.8</source>
+						<target>1.8</target>
+					</configuration>
+				</plugin>
+				<plugin>
+					<groupId>org.eclipse.tycho</groupId>
+					<artifactId>tycho-compiler-plugin</artifactId>
+					<version>${tycho-version}</version>
+					<configuration>
+						<compilerVersion>1.8</compilerVersion>
+						<encoding>UTF-8</encoding>
+						<source>1.8</source>
+						<target>1.8</target>
+					</configuration>
+				</plugin>
+				<plugin>
+					<groupId>org.eclipse.tycho</groupId>
+					<artifactId>target-platform-configuration</artifactId>
+					<version>${tycho-version}</version>
+					<configuration>
+						<resolver>p2</resolver>
+						<pomDependencies>consider</pomDependencies>
+						<environments>
+							<environment>
+								<os>win32</os>
+								<ws>win32</ws>
+								<arch>x86_64</arch>
+							</environment>
+							<environment>
+								<os>linux</os>
+								<ws>gtk</ws>
+								<arch>x86</arch>
+							</environment>
+							<environment>
+								<os>linux</os>
+								<ws>gtk</ws>
+								<arch>x86_64</arch>
+							</environment>
+							<environment>
+								<os>macosx</os>
+								<ws>cocoa</ws>
+								<arch>x86_64</arch>
+							</environment>
+						</environments>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+	</build>
 
 </project>
