parallel ip - initial checkin

Signed-off-by: Ralf Mollik <ramollik@compex-commerce.com>
diff --git a/.artifactVersions b/.artifactVersions
new file mode 100644
index 0000000..9774cde
--- /dev/null
+++ b/.artifactVersions
@@ -0,0 +1,4 @@
+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
new file mode 100644
index 0000000..7f083e3
--- /dev/null
+++ b/.depVersions
@@ -0,0 +1,6 @@
+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/.osbp.releng.root b/.osbp.releng.root
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/.osbp.releng.root
diff --git a/.project b/.project
new file mode 100644
index 0000000..ddbfc5a
--- /dev/null
+++ b/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.runtime.aggregator</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+</projectDescription>
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,161 @@
+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/README.md b/README.md
new file mode 100644
index 0000000..1cf83a2
--- /dev/null
+++ b/README.md
@@ -0,0 +1,4 @@
+lunifera-runtime
+================
+
+Runtime components for lunifera.org. Like persistence, server integration, OSGi services for BPM, Rules,...
\ No newline at end of file
diff --git a/about.html b/about.html
new file mode 100644
index 0000000..64c0598
--- /dev/null
+++ b/about.html
@@ -0,0 +1,28 @@
+<!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/jenkins.build.config.xml b/jenkins.build.config.xml
new file mode 100644
index 0000000..36d599d
--- /dev/null
+++ b/jenkins.build.config.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--#======================================================================= -->
+<!--# Copyright (c) 2016 - Loetz GmbH&Co.KG                                    -->
+<!--# 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                           -->
+<!--#======================================================================= -->
+<!--# Module specific parameters for the Jenkins Job 						 -->
+<!--#======================================================================= -->
+
+<jenkins>
+    
+	<!-- DO NOT EDIT BELOW THIS LINE -->
+        <jenkins.build.dependencies>
+                <jenkins.build.dependency>org.eclipse.osbp.technologystack</jenkins.build.dependency>
+        </jenkins.build.dependencies>
+</jenkins>
diff --git a/launchers/lunifera-runtime - P2 Kepler - Build Skiping Tests.launch b/launchers/lunifera-runtime - P2 Kepler - Build Skiping Tests.launch
new file mode 100644
index 0000000..89ef1bd
--- /dev/null
+++ b/launchers/lunifera-runtime - P2 Kepler - Build Skiping Tests.launch
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">
+<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>
+<stringAttribute key="M2_GOALS" value="clean verify -fn -Dlunifera.build.skip.license"/>
+<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>
+<booleanAttribute key="M2_OFFLINE" value="false"/>
+<stringAttribute key="M2_PROFILES" value="lunifera.build.p2"/>
+<listAttribute key="M2_PROPERTIES"/>
+<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>
+<booleanAttribute key="M2_SKIP_TESTS" value="true"/>
+<intAttribute key="M2_THREADS" value="1"/>
+<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>
+<stringAttribute key="M2_USER_SETTINGS" value=""/>
+<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>
+<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${workspace}"/>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${project_loc:/org.eclipse.osbp.runtime}"/>
+</launchConfiguration>
diff --git a/launchers/lunifera-runtime - P2 Kepler - Build and Deploy.launch b/launchers/lunifera-runtime - P2 Kepler - Build and Deploy.launch
new file mode 100644
index 0000000..ed7d4d6
--- /dev/null
+++ b/launchers/lunifera-runtime - P2 Kepler - Build and Deploy.launch
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">
+<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>
+<stringAttribute key="M2_GOALS" value="clean verify -Dlunifera.deploy.to.local.composite.p2 -Dlunifera.build.skip.license"/>
+<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>
+<booleanAttribute key="M2_OFFLINE" value="false"/>
+<stringAttribute key="M2_PROFILES" value="lunifera.build.p2"/>
+<listAttribute key="M2_PROPERTIES"/>
+<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>
+<booleanAttribute key="M2_SKIP_TESTS" value="false"/>
+<intAttribute key="M2_THREADS" value="1"/>
+<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>
+<stringAttribute key="M2_USER_SETTINGS" value=""/>
+<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>
+<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${workspace}"/>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${project_loc:/org.eclipse.osbp.runtime}"/>
+</launchConfiguration>
diff --git a/launchers/lunifera-runtime - P2 Kepler - Build.launch b/launchers/lunifera-runtime - P2 Kepler - Build.launch
new file mode 100644
index 0000000..70950b0
--- /dev/null
+++ b/launchers/lunifera-runtime - P2 Kepler - Build.launch
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">
+<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>
+<stringAttribute key="M2_GOALS" value="clean verify -Dlunifera.build.skip.license"/>
+<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>
+<booleanAttribute key="M2_OFFLINE" value="false"/>
+<stringAttribute key="M2_PROFILES" value="lunifera.build.p2"/>
+<listAttribute key="M2_PROPERTIES"/>
+<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>
+<booleanAttribute key="M2_SKIP_TESTS" value="false"/>
+<intAttribute key="M2_THREADS" value="1"/>
+<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>
+<stringAttribute key="M2_USER_SETTINGS" value=""/>
+<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>
+<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${workspace}"/>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${project_loc:/org.eclipse.osbp.runtime}"/>
+</launchConfiguration>
diff --git a/notice.html b/notice.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/notice.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!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>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation 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 provided with this Content and is also 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>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/org.eclipse.osbp.runtime.common.tests/.project b/org.eclipse.osbp.runtime.common.tests/.project
new file mode 100644
index 0000000..3063fcc
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common.tests/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.runtime.common.tests</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.runtime.common.tests/LICENSE.txt b/org.eclipse.osbp.runtime.common.tests/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common.tests/LICENSE.txt
@@ -0,0 +1,161 @@
+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.common.tests/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.common.tests/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..fc612f6
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.runtime.common.tests
+Bundle-SymbolicName: org.eclipse.osbp.runtime.common.tests
+Bundle-Version: 0.9.0.qualifier
+Bundle-Vendor: Eclipse OSBP
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Require-Bundle: org.junit,
+ org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)"
+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/build.properties b/org.eclipse.osbp.runtime.common.tests/build.properties
new file mode 100644
index 0000000..56d7765
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common.tests/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = target/classes/
+bin.includes = META-INF/,\
+               .
diff --git a/org.eclipse.osbp.runtime.common.tests/pom.xml b/org.eclipse.osbp.runtime.common.tests/pom.xml
new file mode 100644
index 0000000..41795d3
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common.tests/pom.xml
@@ -0,0 +1,117 @@
+<?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.common.tests</artifactId>
+    <packaging>eclipse-test-plugin</packaging>
+
+    <properties>
+        <local-p2-site>file:/${basedir}/../behave-osgi-equinox-repository/target/repository</local-p2-site>
+        <ui.test.vmargs>-Xmx512m -XX:MaxPermSize=256m</ui.test.vmargs>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>org.eclipse.osbp.runtime.component.configuration.manager.test.conf</artifactId>
+            <version>0.9.0-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.eclipse.tycho</groupId>
+                <artifactId>tycho-surefire-plugin</artifactId>
+                <configuration>
+                    <includes>
+                        <include>**/*Test.class</include>
+                    </includes>
+                    <failIfNoTests>false</failIfNoTests>
+                    <showEclipseLog>true</showEclipseLog>
+                    <!-- <argLine>${ui.test.vmargs}</argLine> -->
+                    <bundleStartLevel>
+                        <bundle>
+                            <id>org.eclipse.osgi</id>
+                            <level>-1</level>
+                            <autoStart>true</autoStart>
+                        </bundle>
+                        <bundle>
+                            <id>org.eclipse.equinox.common</id>
+                            <level>1</level>
+                            <autoStart>true</autoStart>
+                        </bundle>
+                        <bundle>
+                            <id>org.eclipse.equinox.ds</id>
+                            <level>2</level>
+                            <autoStart>true</autoStart>
+                        </bundle>
+                        <bundle>
+                            <id>org.eclipse.equinox.cm</id>
+                            <level>1</level>
+                            <autoStart>true</autoStart>
+                        </bundle>
+                        <bundle>
+                            <id>org.eclipse.equinox.log</id>
+                            <level>1</level>
+                            <autoStart>true</autoStart>
+                        </bundle>
+                        <bundle>
+                            <id>org.eclipse.osgi.services</id>
+                            <level>1</level>
+                            <autoStart>true</autoStart>
+                        </bundle>
+                        <bundle>
+                            <id>org.eclipse.osbp.runtime.component.configuration.manager.tests</id>
+                            <level>4</level>
+                            <autoStart>true</autoStart>
+                        </bundle>
+                        <bundle>
+                            <id>org.eclipse.osbp.runtime.component.configuration.manager</id>
+                            <level>2</level>
+                            <autoStart>true</autoStart>
+                        </bundle>
+                        <bundle>
+                            <id>org.knowhowlab.osgi.testing.assertions</id>
+                            <level>2</level>
+                            <autoStart>true</autoStart>
+                        </bundle>
+                        <bundle>
+                            <id>org.knowhowlab.osgi.testing.utils</id>
+                            <level>2</level>
+                            <autoStart>true</autoStart>
+                        </bundle>
+                    </bundleStartLevel>
+                
+                    <dependencies>
+                        <!-- Plugins -->
+                        <dependency>
+                            <type>eclipse-plugin</type>
+                            <artifactId>org.eclipse.osbp.runtime.component.configuration.manager.test.conf</artifactId>
+                            <version>0.9.0-SNAPSHOT</version>
+                        </dependency>
+                    </dependencies>
+                
+                    <useUIHarness>false</useUIHarness>
+                    <useUIThread>false</useUIThread>
+                </configuration>
+            </plugin>
+        </plugins>
+    
+    </build>
+</project>
diff --git a/org.eclipse.osbp.runtime.common.tests/src/org/eclipse/osbp/runtime/common/dispose/tests/AbstractDisposableTest.java b/org.eclipse.osbp.runtime.common.tests/src/org/eclipse/osbp/runtime/common/dispose/tests/AbstractDisposableTest.java
new file mode 100644
index 0000000..6f967e2
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common.tests/src/org/eclipse/osbp/runtime/common/dispose/tests/AbstractDisposableTest.java
@@ -0,0 +1,215 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Lunifera GmbH (Gross Enzersdorf), 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:
+ *     Cristiano Gavião - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osbp.runtime.common.dispose.tests;
+
+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 static org.knowhowlab.osgi.testing.assertions.BundleAssert.assertBundleAvailable;
+
+import java.util.List;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.knowhowlab.osgi.testing.assertions.BundleAssert;
+import org.knowhowlab.osgi.testing.assertions.ServiceAssert;
+import org.eclipse.osbp.runtime.common.dispose.AbstractDisposable;
+import org.eclipse.osbp.runtime.common.dispose.IDisposable;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+
+public class AbstractDisposableTest {
+
+	private static BundleContext bc;
+
+	@BeforeClass
+	public static void init() {
+		bc = FrameworkUtil.getBundle(AbstractDisposableTest.class)
+				.getBundleContext();
+		ServiceAssert.setDefaultBundleContext(bc);
+		BundleAssert.setDefaultBundleContext(bc);
+	}
+
+	public void ensureNeedBundlesWasInstalled() {
+		assertBundleAvailable("Runtime-Common bundle is not available",
+				"org.eclipse.osbp.runtime.common");
+	}
+
+	@Test
+	public void test_isDisposed() {
+		Disposable d = new Disposable();
+		assertFalse(d.isDisposed());
+
+		d.dispose();
+		assertTrue(d.isDisposed());
+	}
+
+	@Test
+	public void test_isDisposing() {
+		final Disposable d = new Disposable(500);
+		assertFalse(d.isDisposing());
+
+		Thread thread = new Thread(new Runnable() {
+			@Override
+			public void run() {
+				d.dispose();
+			}
+		});
+		thread.start();
+
+		try {
+			Thread.sleep(150);
+		} catch (InterruptedException e) {
+		}
+		assertTrue(d.isDisposing());
+
+		try {
+			Thread.sleep(500);
+		} catch (InterruptedException e) {
+		}
+		assertTrue(d.isDisposed());
+	}
+
+	@Test
+	public void test_internalDispose() {
+		Disposable d = new Disposable();
+		assertEquals(0, d.counter);
+
+		d.dispose();
+		assertEquals(1, d.counter);
+
+		// only dipose once!
+		d.dispose();
+		assertEquals(1, d.counter);
+	}
+
+	@Test
+	public void test_checkDisposed() {
+		Disposable d = new Disposable();
+		d.dispose();
+
+		// unchecked calls
+		d.isDisposed();
+		d.isDisposing();
+		d.dispose();
+
+		// checked calls
+		Listener listener = new Listener();
+		try {
+			d.addDisposeListener(listener);
+			fail("Exception expected");
+		} catch (Exception e) {
+			// expected
+		}
+
+		try {
+			d.removeDisposeListener(listener);
+			fail("Exception expected");
+		} catch (Exception e) {
+			// expected
+		}
+	}
+
+	@Test
+	public void test_DisposeListener() {
+		Disposable d = new Disposable();
+		Listener listener1 = new Listener();
+		Listener listener2 = new Listener();
+		Listener listener3 = new Listener();
+
+		d.addDisposeListener(listener1);
+		d.addDisposeListener(listener2);
+		d.addDisposeListener(listener3);
+		assertEquals(3, d.getDisposeListeners().size());
+		
+		// remove listener3 again
+		d.removeDisposeListener(listener3);
+		assertEquals(2, d.getDisposeListeners().size());
+		
+		d.dispose();
+		assertEquals(1, listener1.counter);
+		assertEquals(1, listener2.counter);
+		assertEquals(0, listener3.counter);
+		assertEquals(0, d.getDisposeListeners().size());
+
+		// dispose twice
+		d.dispose();
+		assertEquals(1, listener1.counter);
+		assertEquals(1, listener2.counter);
+		assertEquals(0, listener3.counter);
+	}
+
+	@Test
+	public void test_DisposeListener_disposing() {
+		final Disposable d = new Disposable(500);
+		Listener listener = new Listener();
+		d.addDisposeListener(listener);
+
+		for (int i = 0; i < 10; i++) {
+			try {
+				Thread.sleep(70);
+			} catch (InterruptedException e) {
+			}
+			Thread thread = new Thread(new Runnable() {
+				@Override
+				public void run() {
+					d.dispose();
+				}
+			});
+			thread.start();
+		}
+
+		assertEquals(1, listener.counter);
+	}
+
+	private static class Disposable extends AbstractDisposable {
+
+		private int counter;
+		private int delay;
+
+		private Disposable() {
+
+		}
+
+		private Disposable(int delay) {
+			this.delay = delay;
+		}
+
+		@Override
+		protected void internalDispose() {
+			counter++;
+			if (delay > 0) {
+				try {
+					Thread.sleep(delay);
+				} catch (InterruptedException e) {
+				}
+			}
+		}
+
+		@Override
+		public List<IDisposable.Listener> getDisposeListeners() {
+			return super.getDisposeListeners();
+		}
+
+	}
+
+	private static class Listener implements IDisposable.Listener {
+
+		private int counter;
+
+		@Override
+		public void notifyDisposed(IDisposable notifier) {
+			counter++;
+		}
+
+	}
+}
diff --git a/org.eclipse.osbp.runtime.common/.project b/org.eclipse.osbp.runtime.common/.project
new file mode 100644
index 0000000..b9e2639
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/.project
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.runtime.common</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.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.common/LICENSE.txt b/org.eclipse.osbp.runtime.common/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/LICENSE.txt
@@ -0,0 +1,161 @@
+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.common/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.common/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..959d8d9
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/META-INF/MANIFEST.MF
@@ -0,0 +1,43 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.runtime.common
+Bundle-Localization: OSGI-INF/l10n/bundle
+Bundle-SymbolicName: org.eclipse.osbp.runtime.common
+Bundle-Vendor: Eclipse OSBP
+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.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.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.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.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,
+ org.eclipse.osbp.runtime.common.types;version="0.9.0",
+ org.eclipse.osbp.runtime.common.user;version="0.9.0";uses:="org.osgi.service.prefs",
+ org.eclipse.osbp.runtime.common.util;version="0.9.0",
+ org.eclipse.osbp.runtime.common.validation;version="0.9.0"
+Import-Package: javax.persistence;version="2.1.0",
+ 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.coordinator;version="1.0.1",
+ 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
+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"
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
new file mode 100644
index 0000000..44d894d
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/OSGI-INF/org.eclipse.osbp.runtime.common.state.impl.SharedStateContextProvider.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.state.impl.SharedStateContextProvider">
+   <implementation class="org.eclipse.osbp.runtime.common.state.impl.SharedStateContextProvider"/>
+   <service>
+      <provide interface="org.eclipse.osbp.runtime.common.state.ISharedStateContextProvider"/>
+   </service>
+   <property name="service.ranking" value="100"/>
+</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.common/about.html b/org.eclipse.osbp.runtime.common/about.html
new file mode 100644
index 0000000..64c0598
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/about.html
@@ -0,0 +1,28 @@
+<!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.common/about.ini b/org.eclipse.osbp.runtime.common/about.ini
new file mode 100644
index 0000000..7df671f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/about.ini
@@ -0,0 +1,17 @@
+# 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.common/about.mappings b/org.eclipse.osbp.runtime.common/about.mappings
new file mode 100644
index 0000000..4511a0a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/about.mappings
@@ -0,0 +1,6 @@
+# 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.common/about.properties b/org.eclipse.osbp.runtime.common/about.properties
new file mode 100644
index 0000000..80bf6ad
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/about.properties
@@ -0,0 +1,26 @@
+#
+# 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.common
+
+################ 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.common/build.properties b/org.eclipse.osbp.runtime.common/build.properties
new file mode 100644
index 0000000..e79b84a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/build.properties
@@ -0,0 +1,9 @@
+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.common/pom.xml b/org.eclipse.osbp.runtime.common/pom.xml
new file mode 100644
index 0000000..12b4141
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/pom.xml
@@ -0,0 +1,24 @@
+<?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.common</artifactId>
+    <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/CompareType.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/CompareType.java
new file mode 100644
index 0000000..3765c4d
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/CompareType.java
@@ -0,0 +1,319 @@
+/**
+ * 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 java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * The Enum CompareType.
+ */
+public enum CompareType {
+	/**
+	 * The '<em><b>EQUALS</b></em>' literal object. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @see #EQUALS_VALUE
+	 * @generated
+	 * @ordered
+	 */
+	EQUALS(0, "EQUALS", "=="),
+
+	/**
+	 * The '<em><b>GREATER</b></em>' literal object. <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #GREATER_VALUE
+	 * @generated
+	 * @ordered
+	 */
+	GREATER(0, "GREATER", ">"),
+
+	/**
+	 * The '<em><b>LOWER</b></em>' literal object. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @see #LOWER_VALUE
+	 * @generated
+	 * @ordered
+	 */
+	LOWER(0, "LOWER", "<"),
+
+	/**
+	 * The '<em><b>GREATER EQ</b></em>' literal object. <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #GREATER_EQ_VALUE
+	 * @generated
+	 * @ordered
+	 */
+	GREATER_EQ(0, "GREATER_EQ", ">="),
+
+	/**
+	 * The '<em><b>LOWER EQ</b></em>' literal object. <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #LOWER_EQ_VALUE
+	 * @generated
+	 * @ordered
+	 */
+	LOWER_EQ(0, "LOWER_EQ", "<="),
+
+	/**
+	 * The '<em><b>NOT EQ</b></em>' literal object. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @see #NOT_EQ_VALUE
+	 * @generated
+	 * @ordered
+	 */
+	NOT_EQ(0, "NOT_EQ", "<>");
+
+	/**
+	 * The '<em><b>EQUALS</b></em>' literal value. <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>EQUALS</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #EQUALS
+	 * @generated
+	 * @ordered
+	 * @model literal="=="
+	 */
+	public static final int EQUALS_VALUE = 0;
+
+	/**
+	 * The '<em><b>GREATER</b></em>' literal value. <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>GREATER</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #GREATER
+	 * @model literal="&gt;"
+	 * @generated
+	 * @ordered
+	 */
+	public static final int GREATER_VALUE = 0;
+
+	/**
+	 * The '<em><b>LOWER</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>LOWER</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * 
+	 * <!-- end-user-doc -->
+	 * @see #LOWER
+	 * @model literal="&lt;"
+	 * @generated
+	 * @ordered
+	 */
+	public static final int LOWER_VALUE = 0;
+
+	/**
+	 * The '<em><b>GREATER EQ</b></em>' literal value. <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>GREATER EQ</b></em>' literal object isn't
+	 * clear, there really should be more of a description here...
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #GREATER_EQ
+	 * @model literal="&gt;="
+	 * @generated
+	 * @ordered
+	 */
+	public static final int GREATER_EQ_VALUE = 0;
+
+	/**
+	 * The '<em><b>LOWER EQ</b></em>' literal value. <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>LOWER EQ</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #LOWER_EQ
+	 * @model literal="&lt;="
+	 * @generated
+	 * @ordered
+	 */
+	public static final int LOWER_EQ_VALUE = 0;
+
+	/**
+	 * The '<em><b>NOT EQ</b></em>' literal value. <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>NOT EQ</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #NOT_EQ
+	 * @model literal="&lt;&gt;"
+	 * @generated
+	 * @ordered
+	 */
+	public static final int NOT_EQ_VALUE = 0;
+
+	/**
+	 * An array of all the '<em><b>LComparator Type</b></em>' enumerators. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	private static final CompareType[] VALUES_ARRAY = new CompareType[] {
+			EQUALS, GREATER, LOWER, GREATER_EQ, LOWER_EQ, NOT_EQ, };
+
+	/**
+	 * A public read-only list of all the '<em><b>LComparator Type</b></em>'
+	 * enumerators. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public static final List<CompareType> VALUES = Collections
+			.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>LComparator Type</b></em>' literal with the specified
+	 * literal value. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 *
+	 * @param literal the literal
+	 * @return the compare type
+	 * @generated 
+	 */
+	public static CompareType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			CompareType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>LComparator Type</b></em>' literal with the specified
+	 * name. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 *
+	 * @param name the name
+	 * @return the by name
+	 * @generated 
+	 */
+	public static CompareType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			CompareType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>LComparator Type</b></em>' literal with the specified
+	 * integer value. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 *
+	 * @param value the value
+	 * @return the compare type
+	 * @generated 
+	 */
+	public static CompareType get(int value) {
+		switch (value) {
+		case EQUALS_VALUE:
+			return EQUALS;
+		}
+		return null;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->.
+	 *
+	 * @generated 
+	 */
+	private final int value;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->.
+	 *
+	 * @generated 
+	 */
+	private final String name;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->.
+	 *
+	 * @generated 
+	 */
+	private final String literal;
+
+	/**
+	 * Only this class can construct instances. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 *
+	 * @param value the value
+	 * @param name the name
+	 * @param literal the literal
+	 * @generated 
+	 */
+	private CompareType(int value, String name, String literal) {
+		this.value = value;
+		this.name = name;
+		this.literal = literal;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->.
+	 *
+	 * @return the value
+	 * @generated 
+	 */
+	public int getValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->.
+	 *
+	 * @return the name
+	 * @generated 
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->.
+	 *
+	 * @return the literal
+	 * @generated 
+	 */
+	public String getLiteral() {
+		return literal;
+	}
+
+	/**
+	 * Returns the literal value of the enumerator, which is its string
+	 * representation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 *
+	 * @return the string
+	 * @generated 
+	 */
+	@Override
+	public String toString() {
+		return literal;
+	}
+
+} // CompareType
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Constraint.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Constraint.java
new file mode 100644
index 0000000..804d7e8
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Constraint.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.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 adds a constraint on a relation. Only references to objects
+ * are allowed, that match the constraint.
+ */
+@Target({ FIELD })
+@Retention(RUNTIME)
+public @interface Constraint {
+
+	/**
+	 * The property of the target type of the reference that must match the enum
+	 * literal.
+	 *
+	 * @return the target enum constraint[]
+	 */
+	TargetEnumConstraint[] constraints();
+
+}
+ 
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Dirty.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Dirty.java
new file mode 100644
index 0000000..48b92e2
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Dirty.java
@@ -0,0 +1,31 @@
+/**
+ * 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;
+
+import org.eclipse.osbp.runtime.common.state.ISharedStateContext;
+
+/**
+ * This annotation marks fields in DTOs, that it is a dirty-indicator boolean
+ * field. If the annotation is present for a DTO, then it is automatically
+ * managed by the {@link ISharedStateContext}.
+ */
+@Target({ FIELD, METHOD })
+@Retention(RUNTIME)
+public @interface Dirty {
+
+}
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
new file mode 100644
index 0000000..a8170e8
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DirtyStateAdapter.java
@@ -0,0 +1,104 @@
+/**
+ * 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 java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.io.Serializable;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A property change listener which may be added to several dto instances. It
+ * sets the dirty flag on a dto and keeps an additional dirty flag for the whole
+ * structure, where the adapter was added.
+ */
+public class DirtyStateAdapter implements PropertyChangeListener, Serializable {
+
+	private static final long serialVersionUID = 3286204198033608643L;
+
+	/** The Constant LOGGER. */
+	private static final Logger LOGGER = LoggerFactory
+			.getLogger(DirtyStateAdapter.class);
+	
+	/** The dirty. */
+	private boolean dirty;
+	
+	/** The active. */
+	private boolean active;
+
+	/* (non-Javadoc)
+	 * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
+	 */
+	@Override
+	public void propertyChange(PropertyChangeEvent event) {
+		if (!active) {
+			return;
+		}
+		Object object = event.getSource();
+		Class<?> objClass = object.getClass();
+		try {
+			if (DtoUtils.isDisposeField(objClass, event.getPropertyName())) {
+				return;
+			}
+			// dirty field not forwarded to handle dirty
+			if (DtoUtils.isDirtyField(objClass, event.getPropertyName())) {
+				return;
+			}
+		} catch (SecurityException ignoreIt) {
+			LOGGER.error("{}", ignoreIt);
+		}
+
+		handleDirty(event);
+	}
+
+	/**
+	 * True, if the adapter handles notifications.
+	 *
+	 * @return true, if is active
+	 */
+	public boolean isActive() {
+		return active;
+	}
+
+	/**
+	 * True, if the adapter handles notifications.
+	 *
+	 * @param active the new active
+	 */
+	public void setActive(boolean active) {
+		this.active = active;
+	}
+
+	/**
+	 * Sets the dirty flag.
+	 *
+	 * @param event the event
+	 */
+	protected void handleDirty(PropertyChangeEvent event) {
+		Object object = event.getSource();
+		// set the dirty flag to true if available
+		DtoUtils.invokeDirtySetter(object, true);
+
+		dirty = true;
+	}
+
+	/**
+	 * Returns true, if the dto structure became dirty.
+	 *
+	 * @return true, if is dirty
+	 */
+	public boolean isDirty() {
+		return dirty;
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Dispose.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Dispose.java
new file mode 100644
index 0000000..f31b5bc
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Dispose.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 field is the
+ * "disposal" indicator. If that value changed to true, the object can be
+ * removed from any internal caches.
+ */
+@Target({ FIELD, METHOD })
+@Retention(RUNTIME)
+public @interface Dispose {
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DomainDescription.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DomainDescription.java
new file mode 100644
index 0000000..f93c7c5
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DomainDescription.java
@@ -0,0 +1,34 @@
+/**
+ * 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
+ * human readable domain description. For instance the description of a product.<br>
+ * Since descriptions may be based on many field values, this annotation can
+ * also be used for getter-methods. If a getter is annotated with
+ * 
+ * #DomainDescription, the getter is used to access the description for that
+ *                     instance.
+ */
+@Target({ FIELD, METHOD })
+@Retention(RUNTIME)
+public @interface DomainDescription {
+
+}
+ 
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DomainEmbedded.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DomainEmbedded.java
new file mode 100644
index 0000000..964415d
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DomainEmbedded.java
@@ -0,0 +1,28 @@
+/**
+ * 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.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
+ * embedded. So UIs do not have to provide search fields for it, but need to
+ * inline its fields into a form.
+ */
+@Target({ FIELD })
+@Retention(RUNTIME)
+public @interface DomainEmbedded {
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DomainKey.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DomainKey.java
new file mode 100644
index 0000000..1c53bd1
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DomainKey.java
@@ -0,0 +1,27 @@
+/**
+ * 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.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
+ * human readable domain key. For instance the number of a product.
+ */
+@Target({ FIELD })
+@Retention(RUNTIME)
+public @interface DomainKey {
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DomainReference.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DomainReference.java
new file mode 100644
index 0000000..8d8ad84
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DomainReference.java
@@ -0,0 +1,27 @@
+/**
+ * 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.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
+ * reference to another Bean. So UIs may provide a search dialog for it.
+ */
+@Target({ FIELD })
+@Retention(RUNTIME)
+public @interface DomainReference {
+
+}
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
new file mode 100644
index 0000000..39c6e12
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/DtoUtils.java
@@ -0,0 +1,611 @@
+/**
+ * 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 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 org.apache.commons.lang.reflect.MethodUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The Class DtoUtils.
+ */
+public class DtoUtils {
+
+	/** The Constant LOGGER. */
+	private static final Logger LOGGER = LoggerFactory.getLogger(DtoUtils.class);
+
+	/** The infos. */
+	private static Map<Class<?>, Info> INFOS = Collections.synchronizedMap(new HashMap<Class<?>, DtoUtils.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 domain key field. Field annotated with {@link DomainKey}.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @return the domain key field
+	 */
+	public static Field getDomainKeyField(Class<?> clazz) {
+		Info info = getInfo(clazz);
+		return info.getDomainKeyField();
+	}
+
+	/**
+	 * 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 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 domain description field. Field annotated with
+	 * #DomainDescription.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @return the domain description field
+	 */
+	public static Field getDomainDescriptionField(Class<?> clazz) {
+		Info info = getInfo(clazz);
+		return info.getDomainDescriptionField();
+	}
+
+	/**
+	 * 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(Dispose.class) != null) {
+					info.disposeField = field;
+				}
+				if (field.getAnnotation(DomainKey.class) != null) {
+					info.domainKeyField = field;
+				}
+				if (field.getAnnotation(DomainDescription.class) != null) {
+					info.domainDescriptionField = field;
+				}
+				if (field.getAnnotation(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/annotations/Id.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Id.java
new file mode 100644
index 0000000..2f6f1de
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Id.java
@@ -0,0 +1,29 @@
+/**
+ *                                                                            
+ * 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 implementation 
+ */
+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
+ * primary key.
+ */
+@Target({ FIELD })
+@Retention(RUNTIME)
+public @interface Id {
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Properties.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Properties.java
new file mode 100644
index 0000000..c83510b
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Properties.java
@@ -0,0 +1,34 @@
+/**
+ * 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.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * This annotation combines many {@link Property} into a compound
+ * one.
+ */
+@Target({ FIELD })
+@Retention(RUNTIME)
+public @interface Properties {
+
+	/**
+	 * An array of properties.
+	 *
+	 * @return the property[]
+	 */
+	Property[] properties();
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/PropertiesUtil.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/PropertiesUtil.java
new file mode 100644
index 0000000..8a2fde7
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/PropertiesUtil.java
@@ -0,0 +1,180 @@
+/**
+ * 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:
+ *         Florian Pirchner - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.annotations;
+
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.lang.reflect.FieldUtils;
+
+/**
+ * The Class PropertiesUtil.
+ */
+public class PropertiesUtil {
+
+	/**
+	 * Returns true, if the property in object contains a @Property with the
+	 * given key.
+	 *
+	 * @param object
+	 *            the object
+	 * @param property
+	 *            the property may be nested
+	 * @param key
+	 *            the key
+	 * @return true, if successful
+	 */
+	public static boolean hasKey(Object object, String property, String key) {
+		return hasKey(object.getClass(), property, key);
+	}
+
+	/**
+	 * Returns true, if the property in clazz contains a @Property with the
+	 * given key.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @param property
+	 *            the property may be nested
+	 * @param key
+	 *            the key
+	 * @return true, if successful
+	 */
+	public static boolean hasKey(Class<?> clazz, String property, String key) {
+		return getValue(clazz, property, key) != null;
+	}
+
+	/**
+	 * Returns the value of @Property, from the property in object containing a @Property
+	 * with the given key.
+	 *
+	 * @param object
+	 *            the object
+	 * @param property
+	 *            the property may be nested
+	 * @param key
+	 *            the key
+	 * @return the value
+	 */
+	public static String getValue(Object object, String property, String key) {
+		return getValue(object.getClass(), property, key);
+	}
+
+	/**
+	 * Returns the value of @Property, from the property in clazz containing a @Property
+	 * with the given key.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @param property
+	 *            the property may be nested
+	 * @param key
+	 *            the key
+	 * @return the value
+	 */
+	public static String getValue(Class<?> clazz, String property, String key) {
+		Field f = getFieldWithNested(clazz, property);
+		if (f == null) {
+			return null;
+		}
+
+		Properties props = f.getAnnotation(Properties.class);
+		if (props == null) {
+			return null;
+		}
+
+		for (Property prop : props.properties()) {
+			if (prop.key().equals(key)) {
+				return prop.value();
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * Returns the field, based on the property. Properties may be nested.
+	 * 
+	 * @param clazz
+	 * @param property
+	 * @return
+	 */
+	protected static Field getFieldWithNested(Class<?> clazz, String property) {
+		Field result = null;
+		if (property.contains(".")) {
+			// first top-level property, then go deeper in a loop
+			Class<?> propertyClass = clazz;
+			String[] tokens = property.split("\\.");
+			for (int i = 0; i < tokens.length; i++) {
+				String token = tokens[i].trim();
+				result = FieldUtils.getField(propertyClass, token, true);
+				if (result == null) {
+					throw new IllegalStateException(String.format(
+							"Can not access %s for %s", property,
+							clazz.getName()));
+				}
+				propertyClass = result.getType();
+			}
+		} else {
+			result = FieldUtils.getField(clazz, property, true);
+		}
+		return result;
+	}
+
+	/**
+	 * Returns a map with all key value pairs contained in @Properties.
+	 *
+	 * @param object
+	 *            the object
+	 * @param property
+	 *            the property may be nested
+	 * @param key
+	 *            the key
+	 * @return the properties
+	 */
+	public static Map<String, String> getProperties(Object object,
+			String property, String key) {
+		return getProperties(object.getClass(), property, key);
+	}
+
+	/**
+	 * Returns a map with all key value pairs contained in @Properties.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @param property
+	 *            the property may be nested
+	 * @param key
+	 *            the key
+	 * @return the properties
+	 */
+	public static Map<String, String> getProperties(Class<?> clazz,
+			String property, String key) {
+		Field f = getFieldWithNested(clazz, property);
+		if (f == null) {
+			return null;
+		}
+
+		Properties props = f.getAnnotation(Properties.class);
+		if (props == null) {
+			return null;
+		}
+
+		Map<String, String> result = new HashMap<String, String>();
+		for (Property prop : props.properties()) {
+			result.put(prop.key(), prop.value());
+		}
+
+		return result;
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Property.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Property.java
new file mode 100644
index 0000000..79be768
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/Property.java
@@ -0,0 +1,40 @@
+/**
+ * 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.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * This annotation adds a key value pair for further processing.
+ */
+@Target({ FIELD })
+@Retention(RUNTIME)
+public @interface Property {
+
+	/**
+	 * The key of the property.
+	 *
+	 * @return the string
+	 */
+	String key();
+
+	/**
+	 * The value of the property.
+	 *
+	 * @return the string
+	 */
+	String value();
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/TargetEnumConstraint.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/TargetEnumConstraint.java
new file mode 100644
index 0000000..3918830
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/TargetEnumConstraint.java
@@ -0,0 +1,57 @@
+/**
+ * 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.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+// TODO: Auto-generated Javadoc
+/**
+ * This annotation adds a constraint on a relation. Only references to objects
+ * are allowed, that match the constraint.
+ */
+@Target({ FIELD })
+@Retention(RUNTIME)
+public @interface TargetEnumConstraint {
+
+	/**
+	 * The property of the target type of the reference that must match the enum
+	 * literal.
+	 *
+	 * @return the string
+	 */
+	String targetProperty();
+
+	/**
+	 * The enum class used to get the enum literal.
+	 *
+	 * @return the class
+	 */
+	Class<?> enumClass();
+
+	/**
+	 * The name of the enum literal that is used as a filter.
+	 *
+	 * @return the string
+	 */
+	String enumLiteral();
+
+	/**
+	 * The compareType used to execute the filter.
+	 *
+	 * @return the compare type
+	 */
+	CompareType compareType() default CompareType.EQUALS;
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/TargetEnumConstraints.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/TargetEnumConstraints.java
new file mode 100644
index 0000000..03b89eb
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/annotations/TargetEnumConstraints.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.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+// TODO: Auto-generated Javadoc
+/**
+ * This annotation combines many {@link TargetEnumConstraint} into a compound
+ * one.
+ */
+@Target({ FIELD })
+@Retention(RUNTIME)
+public @interface TargetEnumConstraints {
+
+	/**
+	 * An array of constraints.
+	 *
+	 * @return the target enum constraint[]
+	 */
+	TargetEnumConstraint[] constraints();
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/coordination/CoordinationManager.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/coordination/CoordinationManager.java
new file mode 100644
index 0000000..7651d68
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/coordination/CoordinationManager.java
@@ -0,0 +1,132 @@
+/**
+ * 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.coordination;
+
+import java.util.Map;
+import java.util.UUID;
+
+import org.eclipse.osbp.runtime.common.state.SharedStateUnitOfWork;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.service.coordinator.Coordination;
+import org.osgi.service.coordinator.Coordinator;
+import org.osgi.util.tracker.ServiceTracker;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Helper methods for OSGi coordination.
+ */
+public class CoordinationManager {
+	
+	/** The Constant LOGGER. */
+	private static final Logger LOGGER = LoggerFactory
+			.getLogger(CoordinationManager.class);
+	
+	/** The tracker. */
+	private ServiceTracker<Coordinator, Coordinator> tracker;
+
+	/**
+	 * Instantiates a new coordination manager.
+	 */
+	public CoordinationManager() {
+
+	}
+
+	/**
+	 * Returns the current coordination or <code>null</code> if no current
+	 * coordination is available.
+	 *
+	 * @return the current coordination
+	 */
+	public static Coordination getCurrentCoordination() {
+		ServiceTracker<Coordinator, Coordinator> tracker = null;
+		try {
+			tracker = new ServiceTracker<Coordinator, Coordinator>(
+					FrameworkUtil.getBundle(CoordinationManager.class)
+							.getBundleContext(), Coordinator.class, null);
+			tracker.open();
+			Coordinator coordinator = tracker.waitForService(10);
+			if (coordinator != null) {
+				return coordinator.peek();
+			} else {
+				LOGGER.error("No coordination service available!");
+			}
+		} catch (InterruptedException e) {
+		} finally {
+			if (tracker != null) {
+				tracker.close();
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns a new implicit coordination and makes it the current
+	 * coordination. Returns <code>null</code> if no {@link Coordinator} is
+	 * available.
+	 * <p>
+	 * <b>Attention:</b> Do not forget to release the manager! This will release
+	 * the CoordinatorService. Pending coordinations will be ended abnormally in
+	 * case that no other manager will hold a reference to the
+	 * CoordinationService.
+	 *
+	 * @param properties the properties
+	 * @return the coordination
+	 */
+	public Coordination createCurrentCoordination(
+			Map<Class<?>, Object> properties) {
+		try {
+			tracker = new ServiceTracker<Coordinator, Coordinator>(
+					FrameworkUtil.getBundle(SharedStateUnitOfWork.class)
+							.getBundleContext(), Coordinator.class, null);
+			tracker.open();
+			Coordinator coordinator = tracker.waitForService(10);
+			if (coordinator != null) {
+				Coordination peek = coordinator.begin(UUID.randomUUID()
+						.toString(), 0);
+				peek.getVariables().putAll(properties);
+				return peek;
+			} else {
+				LOGGER.error("No coordination service available!");
+			}
+		} catch (InterruptedException e) {
+		} finally {
+		}
+
+		return null;
+	}
+
+	/**
+	 * Releases the {@link Coordinator} service.
+	 */
+	public void release() {
+		if (tracker != null) {
+			tracker.close();
+			tracker = null;
+		}
+	}
+
+	/**
+	 * Returns the property with the given key from the current
+	 * "implicit Coordination". Or <code>null</code> if property is not
+	 * available.
+	 *
+	 * @param key the key
+	 * @return the property from current coordination
+	 */
+	public static Object getPropertyFromCurrentCoordination(Class<?> key) {
+		Coordination current = getCurrentCoordination();
+		if (current != null) {
+			return current.getVariables().get(key);
+		}
+		return null;
+	}
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/datasource/IDataSourceService.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/datasource/IDataSourceService.java
new file mode 100644
index 0000000..04ceb4d
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/datasource/IDataSourceService.java
@@ -0,0 +1,71 @@
+/**
+ * Copyright (c) 2011, 2015 - Bernhard Edler (Wien), 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:
+ *         Bernhard Edler - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.datasource;
+
+import java.util.HashMap;
+import java.util.List;
+
+import javax.sql.DataSource;
+
+import org.eclipse.osbp.runtime.common.datasource.config.CommonDatasourceConfig;
+
+public interface IDataSourceService {
+
+	List<DataSourceInfo> getDataSourcInfos(String filter);
+
+	List<DataSource> getDataSources(String filter);
+
+	void createDataSource(CommonDatasourceConfig config);
+
+	public static class DataSourceInfo {
+		private HashMap<String, String> properties;
+
+		private String pid;
+
+		private String url;
+
+		private String databaseName;
+
+		public DataSourceInfo() {
+			properties = new HashMap<String, String>();
+		}
+
+		public HashMap<String, String> getProperties() {
+			return properties;
+		}
+
+		public void setProperties(HashMap<String, String> properties) {
+			this.properties = properties;
+		}
+
+		/**
+		 * @return the pid
+		 */
+		public String getPid() {
+			return pid;
+		}
+
+		/**
+		 * @return the url
+		 */
+		public String getUrl() {
+			return url;
+		}
+
+		/**
+		 * @return the databaseName
+		 */
+		public String getDatabaseName() {
+			return databaseName;
+		}
+
+	}
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/datasource/config/ClientDerbyDatasourceConfig.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/datasource/config/ClientDerbyDatasourceConfig.java
new file mode 100644
index 0000000..b1f7c98
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/datasource/config/ClientDerbyDatasourceConfig.java
@@ -0,0 +1,278 @@
+/**
+ * Copyright (c) 2011, 2015 - Bernhard Edler (Wien), 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:
+ *         Bernhard Edler - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.datasource.config;
+
+import java.util.HashMap;
+
+import org.eclipse.osbp.runtime.common.util.OSGiUtil;
+
+public class ClientDerbyDatasourceConfig extends CommonDatasourceConfig {
+
+	public ClientDerbyDatasourceConfig() {
+		super();
+		DRIVER_NAME = "org.apache.derby.jdbc.ClientDriver";
+		properties.put(OSGI_DRIVER_NAME, DRIVER_NAME);
+	}
+
+	public enum Keys {
+		CONNECTION_ATTRIBUTES {
+			public String toString() {
+				return "connectionAttributes";
+			}
+		},
+		CREATE_DATABASE {
+			public String toString() {
+				return "createDatabase";
+			}
+		},
+		DATASOURCE_NAME {
+			public String toString() {
+				return "dataSourceName";
+			}
+		},
+		DATABASE_NAME {
+			public String toString() {
+				return "databaseName";
+			}
+		},
+		DESCRIPTION {
+			public String toString() {
+				return "description";
+			}
+		},
+		LOG_WRITER {
+			public String toString() {
+				return "logWriter";
+			}
+		},
+		LOGIN_TIMEOUT {
+			public String toString() {
+				return "loginTimeout";
+			}
+		},
+		PASSWORD {
+			public String toString() {
+				return "password";
+			}
+		},
+		PORT_NUMBER {
+			public String toString() {
+				return "portNumber";
+			}
+		},
+		RETRIEVE_MESSAGE_TEXT {
+			public String toString() {
+				return "retrieveMessageText";
+			}
+		},
+		SECURITY_MECHANISM {
+			public String toString() {
+				return "securityMechanism";
+			}
+		},
+		SERVER_NAME {
+			public String toString() {
+				return "serverName";
+			}
+		},
+		SHUTDOWN_DATABASE {
+			public String toString() {
+				return "shutdownDatabase";
+			}
+		},
+		SSL {
+			public String toString() {
+				return "ssl";
+			}
+		},
+		TRACE_DIRECTORY {
+			public String toString() {
+				return "traceDirectory";
+			}
+		},
+		TRACE_FILE {
+			public String toString() {
+				return "traceFile";
+			}
+		},
+		TRACE_FILE_APPEND {
+			public String toString() {
+				return "traceFileAppend";
+			}
+		},
+		TRACE_LEVEL {
+			public String toString() {
+				return "traceLevel";
+			}
+		},
+		USER {
+			public String toString() {
+				return "user";
+			}
+		}
+	}
+
+	public void setConnectionAttributes(String input) {
+		setValue(Keys.CONNECTION_ATTRIBUTES.toString(), input);
+	}
+
+	public String getConnectionAttributes() {
+		return getValue(Keys.CONNECTION_ATTRIBUTES.toString());
+	}
+
+	public void setCreateDatabase(String input) {
+		setValue(Keys.CREATE_DATABASE.toString(), input);
+	}
+
+	public String getCreateDatabase() {
+		return getValue(Keys.CREATE_DATABASE.toString());
+	}
+
+	public void setDataBaseName(String input) {
+		setValue(Keys.DATABASE_NAME.toString(), input);
+	}
+
+	public String getDataBaseName() {
+		return getValue(Keys.DATABASE_NAME.toString());
+	}
+
+	public void setDataSourceName(String input) {
+		setValue(Keys.DATASOURCE_NAME.toString(), input);
+	}
+
+	public String getDataSourceName() {
+		return getValue(Keys.DATASOURCE_NAME.toString());
+	}
+
+	public void setDescription(String input) {
+		setValue(Keys.DESCRIPTION.toString(), input);
+	}
+
+	public String getDescription() {
+		return getValue(Keys.DESCRIPTION.toString());
+	}
+
+	public void setLogWriter(String input) {
+		setValue(Keys.LOG_WRITER.toString(), input);
+	}
+
+	public String getLogWriter() {
+		return getValue(Keys.LOG_WRITER.toString());
+	}
+
+	public void setLoginTimeout(String input) {
+		setValue(Keys.LOGIN_TIMEOUT.toString(), input);
+	}
+
+	public String getLoginTimeout() {
+		return getValue(Keys.LOGIN_TIMEOUT.toString());
+	}
+
+	public void setPassword(String input) {
+		setValue(Keys.PASSWORD.toString(), input);
+	}
+
+	public String getPassword() {
+		return getValue(Keys.PASSWORD.toString());
+	}
+
+	public void setPortNumber(String input) {
+		setValue(Keys.PORT_NUMBER.toString(), input);
+	}
+
+	public String getPortNumber() {
+		return getValue(Keys.PORT_NUMBER.toString());
+	}
+
+	public void setRetrieveMessageText(String input) {
+		setValue(Keys.RETRIEVE_MESSAGE_TEXT.toString(), input);
+	}
+
+	public String getRetrieveMessageText() {
+		return getValue(Keys.RETRIEVE_MESSAGE_TEXT.toString());
+	}
+
+	public void setSecurityMechanism(String input) {
+		setValue(Keys.SECURITY_MECHANISM.toString(), input);
+	}
+
+	public String getSecurityMechanism() {
+		return getValue(Keys.SECURITY_MECHANISM.toString());
+	}
+
+	public void setServerName(String input) {
+		setValue(Keys.SERVER_NAME.toString(), input);
+	}
+
+	public String getServerName() {
+		return getValue(Keys.SERVER_NAME.toString());
+	}
+
+	public void setShutdownDatabase(String input) {
+		setValue(Keys.SHUTDOWN_DATABASE.toString(), input);
+	}
+
+	public String getShutdownDatabase() {
+		return getValue(Keys.SHUTDOWN_DATABASE.toString());
+	}
+
+	public void setSsl(String input) {
+		setValue(Keys.SSL.toString(), input);
+	}
+
+	public String getSsl() {
+		return getValue(Keys.SSL.toString());
+	}
+
+	public void setTraceDirectory(String input) {
+		setValue(Keys.TRACE_DIRECTORY.toString(), input);
+	}
+
+	public String getTraceDirectory() {
+		return getValue(Keys.TRACE_DIRECTORY.toString());
+	}
+
+	public void setTraceFile(String input) {
+		setValue(Keys.TRACE_FILE.toString(), input);
+	}
+
+	public String getTraceFile() {
+		return getValue(Keys.TRACE_FILE.toString());
+	}
+
+	public void setTraceFileAppend(String input) {
+		setValue(Keys.TRACE_FILE_APPEND.toString(), input);
+	}
+
+	public String getTraceFileAppend() {
+		return getValue(Keys.TRACE_FILE_APPEND.toString());
+	}
+
+	public void setTraceLevel(String input) {
+		setValue(Keys.TRACE_LEVEL.toString(), input);
+	}
+
+	public String getTraceLevel() {
+		return getValue(Keys.TRACE_LEVEL.toString());
+	}
+
+	public void setUser(String input) {
+		setValue(Keys.USER.toString(), input);
+	}
+
+	public String getUser() {
+		return getValue(Keys.USER.toString());
+	}
+
+	public HashMap<String, String> filterProperties() {
+		return filterProperties(OSGiUtil.getEnumValues(Keys.class));
+	}
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/datasource/config/CommonDatasourceConfig.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/datasource/config/CommonDatasourceConfig.java
new file mode 100644
index 0000000..bf5b303
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/datasource/config/CommonDatasourceConfig.java
@@ -0,0 +1,73 @@
+/**
+ * Copyright (c) 2011, 2015 - Bernhard Edler (Wien), 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:
+ *         Bernhard Edler - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.datasource.config;
+
+import java.util.Arrays;
+import java.util.HashMap;
+
+import org.eclipse.osbp.runtime.common.util.OSGiUtil;
+
+public abstract class CommonDatasourceConfig {
+	public static String DRIVER_NAME = "";
+	private static String EMPTY_STRING = "";
+	protected static String OSGI_DRIVER_NAME = "osgi.jdbc.driver.name";
+
+	protected HashMap<String, String> properties;
+
+	public CommonDatasourceConfig() {
+		properties = new HashMap<String, String>();
+	}
+
+	public HashMap<String, String> getProperties() {
+		return properties;
+	}
+
+	public void setProperties(HashMap<String, String> properties) {
+		this.properties = properties;
+	}
+
+	protected void setValue(String key, String value) {
+		if (properties.containsKey(key)) {
+			properties.remove(key);
+			properties.put(key, value);
+		} else {
+			properties.put(key, value);
+		}
+	}
+
+	protected String getValue(String key) {
+		return properties.containsKey(key) ? properties.get(key) : EMPTY_STRING;
+	}
+
+	protected HashMap<String, String> filterProperties(String[] keySet) {
+		for (String key : properties.keySet()) {
+			if (!Arrays.asList(keySet).contains(key)) {
+				properties.remove(key);
+			}
+		}
+		return properties;
+	};
+
+	public static String[] getPropertyKeysForDriver(String driverName) {
+		if (EmbeddedDerbyDatasourceConfig.DRIVER_NAME.equals(driverName)) {
+			return OSGiUtil
+					.getEnumValues(EmbeddedDerbyDatasourceConfig.Keys.class);
+		} else if (ClientDerbyDatasourceConfig.DRIVER_NAME.equals(driverName)) {
+			return OSGiUtil
+					.getEnumValues(ClientDerbyDatasourceConfig.Keys.class);
+		} else if (MySQLDatasourceConfig.DRIVER_NAME.equals(driverName)) {
+			return OSGiUtil
+					.getEnumValues(MySQLDatasourceConfig.Keys.class);
+		} else {
+			return null;
+		}
+	}
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/datasource/config/EmbeddedDerbyDatasourceConfig.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/datasource/config/EmbeddedDerbyDatasourceConfig.java
new file mode 100644
index 0000000..88a109e
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/datasource/config/EmbeddedDerbyDatasourceConfig.java
@@ -0,0 +1,174 @@
+/**
+ * Copyright (c) 2011, 2015 - Bernhard Edler (Wien), 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:
+ *         Bernhard Edler - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.datasource.config;
+
+import java.util.HashMap;
+
+import org.eclipse.osbp.runtime.common.util.OSGiUtil;
+
+public class EmbeddedDerbyDatasourceConfig extends CommonDatasourceConfig {
+
+	public EmbeddedDerbyDatasourceConfig() {
+		super();
+		DRIVER_NAME = "org.apache.derby.jdbc.EmbeddedDriver";
+		properties.put(OSGI_DRIVER_NAME, DRIVER_NAME);
+	}
+
+	public enum Keys {
+		ATTRIBUTES_AS_PASSWORD {
+			public String toString() {
+				return "attributesAsPassword";
+			}
+		},
+		CONNECTION_ATTRIBUTES {
+			public String toString() {
+				return "connectionAttributes";
+			}
+		},
+		CREATE_DATABASE {
+			public String toString() {
+				return "createDatabase";
+			}
+		},
+		DATABASE_NAME {
+			public String toString() {
+				return "databaseName";
+			}
+		},
+		DATASOURCE_NAME {
+			public String toString() {
+				return "dataSourceName";
+			}
+		},
+		DESCRIPTION {
+			public String toString() {
+				return "description";
+			}
+		},
+		LOG_WRITER {
+			public String toString() {
+				return "logWriter";
+			}
+		},
+		LOGIN_TIMEOUT {
+			public String toString() {
+				return "loginTimeout";
+			}
+		},
+		PASSWORD {
+			public String toString() {
+				return "password";
+			}
+		},
+		SHUTDOWN_DATABASE {
+			public String toString() {
+				return "shutdownDatabase";
+			}
+		},
+		USER {
+			public String toString() {
+				return "user";
+			}
+		}
+	}
+
+	public void setAttributesAsPassword(String input) {
+		setValue(Keys.ATTRIBUTES_AS_PASSWORD.toString(), input);
+	}
+
+	public String getAttributesAsPassword() {
+		return getValue(Keys.ATTRIBUTES_AS_PASSWORD.toString());
+	}
+
+	public void setConnectionAttributes(String input) {
+		setValue(Keys.CONNECTION_ATTRIBUTES.toString(), input);
+	}
+
+	public String getConnectionAttributes() {
+		return getValue(Keys.CONNECTION_ATTRIBUTES.toString());
+	}
+
+	public void setCreateDatabase(String input) {
+		setValue(Keys.CREATE_DATABASE.toString(), input);
+	}
+
+	public String getCreateDatabase() {
+		return getValue(Keys.CREATE_DATABASE.toString());
+	}
+
+	public void setDataBaseName(String input) {
+		setValue(Keys.DATABASE_NAME.toString(), input);
+	}
+
+	public String getDataBaseName() {
+		return getValue(Keys.DATABASE_NAME.toString());
+	}
+
+	public void setDataSourceName(String input) {
+		setValue(Keys.DATASOURCE_NAME.toString(), input);
+	}
+
+	public String getDataSourceName() {
+		return getValue(Keys.DATASOURCE_NAME.toString());
+	}
+
+	public void setDescription(String input) {
+		setValue(Keys.DESCRIPTION.toString(), input);
+	}
+
+	public String getDescription() {
+		return getValue(Keys.DESCRIPTION.toString());
+	}
+
+	public void setLogWriter(String input) {
+		setValue(Keys.LOG_WRITER.toString(), input);
+	}
+
+	public String getLogWriter() {
+		return getValue(Keys.LOG_WRITER.toString());
+	}
+
+	public void setLoginTimeout(String input) {
+		setValue(Keys.LOGIN_TIMEOUT.toString(), input);
+	}
+
+	public String getLoginTimeout() {
+		return getValue(Keys.LOGIN_TIMEOUT.toString());
+	}
+
+	public void setPassword(String input) {
+		setValue(Keys.PASSWORD.toString(), input);
+	}
+
+	public String getPassword() {
+		return getValue(Keys.PASSWORD.toString());
+	}
+
+	public void setShutdownDatabase(String input) {
+		setValue(Keys.SHUTDOWN_DATABASE.toString(), input);
+	}
+
+	public String getShutdownDatabase() {
+		return getValue(Keys.SHUTDOWN_DATABASE.toString());
+	}
+
+	public void setUser(String input) {
+		setValue(Keys.USER.toString(), input);
+	}
+
+	public String getUser() {
+		return getValue(Keys.USER.toString());
+	}
+
+	public HashMap<String, String> filterProperties() {
+		return filterProperties(OSGiUtil.getEnumValues(Keys.class));
+	}
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/datasource/config/MySQLDatasourceConfig.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/datasource/config/MySQLDatasourceConfig.java
new file mode 100644
index 0000000..b57808f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/datasource/config/MySQLDatasourceConfig.java
@@ -0,0 +1,2830 @@
+/**
+ * Copyright (c) 2011, 2015 - Bernhard Edler (Wien), 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:
+ *         Bernhard Edler - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.datasource.config;
+
+import java.util.HashMap;
+
+import org.eclipse.osbp.runtime.common.util.OSGiUtil;
+
+public class MySQLDatasourceConfig extends CommonDatasourceConfig {
+
+	public MySQLDatasourceConfig() {
+		super();
+		DRIVER_NAME = "com.mysql.jdbc.Driver";
+		properties.put(OSGI_DRIVER_NAME, DRIVER_NAME);
+	}
+
+	public enum Keys {
+		ALLOW_LOAD_LOCAL_INFILE {
+			public String toString() {
+				return "allowLoadLocalInfile";
+			}
+		},
+
+		ALLOW_MASTER_DOWN_CONNECTIONS {
+			public String toString() {
+				return "allowMasterDownConnections";
+			}
+		},
+
+		ALLOW_MULTI_QUERIES {
+			public String toString() {
+				return "allowMultiQueries";
+			}
+		},
+
+		ALLOW_NAN_AND_INF {
+			public String toString() {
+				return "allowNanAndInf";
+			}
+		},
+
+		ALLOW_PUBLIC_KEY_RETRIEVAL {
+			public String toString() {
+				return "allowPublicKeyRetrieval";
+			}
+		},
+
+		ALLOW_URL_IN_LOCAL_INFILE {
+			public String toString() {
+				return "allowUrlInLocalInfile";
+			}
+		},
+
+		ALWAYS_SEND_SET_ISOLATION {
+			public String toString() {
+				return "alwaysSendSetIsolation";
+			}
+		},
+
+		AUTHENTICATION_PLUGINS {
+			public String toString() {
+				return "authenticationPlugins";
+			}
+		},
+
+		AUTO_CLOSE_P_STMT_STREAMS {
+			public String toString() {
+				return "autoClosePStmtStreams";
+			}
+		},
+
+		AUTO_DESERIALIZE {
+			public String toString() {
+				return "autoDeserialize";
+			}
+		},
+
+		AUTO_GENERATE_TESTCASE_SCRIPT {
+			public String toString() {
+				return "autoGenerateTestcaseScript";
+			}
+		},
+
+		AUTO_RECONNECT {
+			public String toString() {
+				return "autoReconnect";
+			}
+		},
+
+		AUTO_RECONNECT_FOR_POOLS {
+			public String toString() {
+				return "autoReconnectForPools";
+			}
+		},
+
+		AUTO_SLOW_LOG {
+			public String toString() {
+				return "autoSlowLog";
+			}
+		},
+
+		BLOB_SEND_CHUNK_SIZE {
+			public String toString() {
+				return "blobSendChunkSize";
+			}
+		},
+
+		BLOBS_ARE_STRINGS {
+			public String toString() {
+				return "blobsAreStrings";
+			}
+		},
+
+		CACHE_CALLABLE_STMTS {
+			public String toString() {
+				return "cacheCallableStmts";
+			}
+		},
+
+		CACHE_DEFAULT_TIMEZONE {
+			public String toString() {
+				return "cacheDefaultTimezone";
+			}
+		},
+
+		CACHE_PREP_STMTS {
+			public String toString() {
+				return "cachePrepStmts";
+			}
+		},
+
+		CACHE_RESULT_SET_METADATA {
+			public String toString() {
+				return "cacheResultSetMetadata";
+			}
+		},
+
+		CACHE_SERVER_CONFIGURATION {
+			public String toString() {
+				return "cacheServerConfiguration";
+			}
+		},
+
+		CALLABLE_STMT_CACHE_SIZE {
+			public String toString() {
+				return "callableStmtCacheSize";
+			}
+		},
+
+		CAPITALIZE_TYPE_NAMES {
+			public String toString() {
+				return "capitalizeTypeNames";
+			}
+		},
+
+		CHARACTER_ENCODING {
+			public String toString() {
+				return "characterEncoding";
+			}
+		},
+
+		CHARACTER_SET_RESULTS {
+			public String toString() {
+				return "characterSetResults";
+			}
+		},
+
+		CLIENT_CERTIFICATE_KEY_STORE_PASSWORD {
+			public String toString() {
+				return "clientCertificateKeyStorePassword";
+			}
+		},
+
+		CLIENT_CERTIFICATE_KEY_STORE_TYPE {
+			public String toString() {
+				return "clientCertificateKeyStoreType";
+			}
+		},
+
+		CLIENT_CERTIFICATE_KEY_STORE_URL {
+			public String toString() {
+				return "clientCertificateKeyStoreUrl";
+			}
+		},
+
+		CLIENT_INFO_PROVIDER {
+			public String toString() {
+				return "clientInfoProvider";
+			}
+		},
+
+		CLOB_CHARACTER_ENCODING {
+			public String toString() {
+				return "clobCharacterEncoding";
+			}
+		},
+
+		CLOBBER_STREAMING_RESULTS {
+			public String toString() {
+				return "clobberStreamingResults";
+			}
+		},
+
+		COMPENSATE_ON_DUPLICATE_KEY_UPDATE_COUNTS {
+			public String toString() {
+				return "compensateOnDuplicateKeyUpdateCounts";
+			}
+		},
+
+		CONNECT_TIMEOUT {
+			public String toString() {
+				return "connectTimeout";
+			}
+		},
+
+		CONNECTION_ATTRIBUTES {
+			public String toString() {
+				return "connectionAttributes";
+			}
+		},
+
+		CONNECTION_COLLATION {
+			public String toString() {
+				return "connectionCollation";
+			}
+		},
+
+		CONNECTION_LIFECYCLE_INTERCEPTORS {
+			public String toString() {
+				return "connectionLifecycleInterceptors";
+			}
+		},
+
+		CONTINUE_BATCH_ON_ERROR {
+			public String toString() {
+				return "continueBatchOnError";
+			}
+		},
+
+		CREATE_DATABASE_IF_NOT_EXIST {
+			public String toString() {
+				return "createDatabaseIfNotExist";
+			}
+		},
+
+		DEFAULT_AUTHENTICATION_PLUGIN {
+			public String toString() {
+				return "defaultAuthenticationPlugin";
+			}
+		},
+
+		DEFAULT_FETCH_SIZE {
+			public String toString() {
+				return "defaultFetchSize";
+			}
+		},
+
+		DETECT_CUSTOM_COLLATIONS {
+			public String toString() {
+				return "detectCustomCollations";
+			}
+		},
+
+		DISABLED_AUTHENTICATION_PLUGINS {
+			public String toString() {
+				return "disabledAuthenticationPlugins";
+			}
+		},
+
+		DISCONNECT_ON_EXPIRED_PASSWORDS {
+			public String toString() {
+				return "disconnectOnExpiredPasswords";
+			}
+		},
+
+		DONT_CHECK_ON_DUPLICATE_KEY_UPDATE_IN_S_Q_L {
+			public String toString() {
+				return "dontCheckOnDuplicateKeyUpdateInSQL";
+			}
+		},
+
+		DONT_TRACK_OPEN_RESOURCES {
+			public String toString() {
+				return "dontTrackOpenResources";
+			}
+		},
+
+		DUMP_METADATA_ON_COLUMN_NOT_FOUND {
+			public String toString() {
+				return "dumpMetadataOnColumnNotFound";
+			}
+		},
+
+		DUMP_QUERIES_ON_EXCEPTION {
+			public String toString() {
+				return "dumpQueriesOnException";
+			}
+		},
+
+		DYNAMIC_CALENDARS {
+			public String toString() {
+				return "dynamicCalendars";
+			}
+		},
+
+		ELIDE_SET_AUTO_COMMITS {
+			public String toString() {
+				return "elideSetAutoCommits";
+			}
+		},
+
+		EMPTY_STRINGS_CONVERT_TO_ZERO {
+			public String toString() {
+				return "emptyStringsConvertToZero";
+			}
+		},
+
+		EMULATE_LOCATORS {
+			public String toString() {
+				return "emulateLocators";
+			}
+		},
+
+		EMULATE_UNSUPPORTED_PSTMTS {
+			public String toString() {
+				return "emulateUnsupportedPstmts";
+			}
+		},
+
+		ENABLE_PACKET_DEBUG {
+			public String toString() {
+				return "enablePacketDebug";
+			}
+		},
+
+		ENABLE_QUERY_TIMEOUTS {
+			public String toString() {
+				return "enableQueryTimeouts";
+			}
+		},
+
+		EXCEPTION_INTERCEPTORS {
+			public String toString() {
+				return "exceptionInterceptors";
+			}
+		},
+
+		EXPLAIN_SLOW_QUERIES {
+			public String toString() {
+				return "explainSlowQueries";
+			}
+		},
+
+		FAIL_OVER_READ_ONLY {
+			public String toString() {
+				return "failOverReadOnly";
+			}
+		},
+
+		FUNCTIONS_NEVER_RETURN_BLOBS {
+			public String toString() {
+				return "functionsNeverReturnBlobs";
+			}
+		},
+
+		GATHER_PERF_METRICS {
+			public String toString() {
+				return "gatherPerfMetrics";
+			}
+		},
+
+		GENERATE_SIMPLE_PARAMETER_METADATA {
+			public String toString() {
+				return "generateSimpleParameterMetadata";
+			}
+		},
+
+		GET_PROCEDURES_RETURNS_FUNCTIONS {
+			public String toString() {
+				return "getProceduresReturnsFunctions";
+			}
+		},
+
+		HOLD_RESULTS_OPEN_OVER_STATEMENT_CLOSE {
+			public String toString() {
+				return "holdResultsOpenOverStatementClose";
+			}
+		},
+
+		IGNORE_NON_TX_TABLES {
+			public String toString() {
+				return "ignoreNonTxTables";
+			}
+		},
+
+		INCLUDE_INNODB_STATUS_IN_DEADLOCK_EXCEPTIONS {
+			public String toString() {
+				return "includeInnodbStatusInDeadlockExceptions";
+			}
+		},
+
+		INCLUDE_THREAD_DUMP_IN_DEADLOCK_EXCEPTIONS {
+			public String toString() {
+				return "includeThreadDumpInDeadlockExceptions";
+			}
+		},
+
+		INCLUDE_THREAD_NAMES_AS_STATEMENT_COMMENT {
+			public String toString() {
+				return "includeThreadNamesAsStatementComment";
+			}
+		},
+
+		INITIAL_TIMEOUT {
+			public String toString() {
+				return "initialTimeout";
+			}
+		},
+
+		INTERACTIVE_CLIENT {
+			public String toString() {
+				return "interactiveClient";
+			}
+		},
+
+		JDBC_COMPLIANT_TRUNCATION {
+			public String toString() {
+				return "jdbcCompliantTruncation";
+			}
+		},
+
+		LARGE_ROW_SIZE_THRESHOLD {
+			public String toString() {
+				return "largeRowSizeThreshold";
+			}
+		},
+
+		LOAD_BALANCE_AUTO_COMMIT_STATEMENT_REGEX {
+			public String toString() {
+				return "loadBalanceAutoCommitStatementRegex";
+			}
+		},
+
+		LOAD_BALANCE_AUTO_COMMIT_STATEMENT_THRESHOLD {
+			public String toString() {
+				return "loadBalanceAutoCommitStatementThreshold";
+			}
+		},
+
+		LOAD_BALANCE_BLACKLIST_TIMEOUT {
+			public String toString() {
+				return "loadBalanceBlacklistTimeout";
+			}
+		},
+
+		LOAD_BALANCE_CONNECTION_GROUP {
+			public String toString() {
+				return "loadBalanceConnectionGroup";
+			}
+		},
+
+		LOAD_BALANCE_ENABLE_J_M_X {
+			public String toString() {
+				return "loadBalanceEnableJMX";
+			}
+		},
+
+		LOAD_BALANCE_EXCEPTION_CHECKER {
+			public String toString() {
+				return "loadBalanceExceptionChecker";
+			}
+		},
+
+		LOAD_BALANCE_PING_TIMEOUT {
+			public String toString() {
+				return "loadBalancePingTimeout";
+			}
+		},
+
+		LOAD_BALANCE_S_Q_L_EXCEPTION_SUBCLASS_FAILOVER {
+			public String toString() {
+				return "loadBalanceSQLExceptionSubclassFailover";
+			}
+		},
+
+		LOAD_BALANCE_S_Q_L_STATE_FAILOVER {
+			public String toString() {
+				return "loadBalanceSQLStateFailover";
+			}
+		},
+
+		LOAD_BALANCE_STRATEGY {
+			public String toString() {
+				return "loadBalanceStrategy";
+			}
+		},
+
+		LOAD_BALANCE_VALIDATE_CONNECTION_ON_SWAP_SERVER {
+			public String toString() {
+				return "loadBalanceValidateConnectionOnSwapServer";
+			}
+		},
+
+		LOCAL_SOCKET_ADDRESS {
+			public String toString() {
+				return "localSocketAddress";
+			}
+		},
+
+		LOCATOR_FETCH_BUFFER_SIZE {
+			public String toString() {
+				return "locatorFetchBufferSize";
+			}
+		},
+
+		LOG_SLOW_QUERIES {
+			public String toString() {
+				return "logSlowQueries";
+			}
+		},
+
+		LOG_XA_COMMANDS {
+			public String toString() {
+				return "logXaCommands";
+			}
+		},
+
+		LOGGER {
+			public String toString() {
+				return "logger";
+			}
+		},
+
+		MAINTAIN_TIME_STATS {
+			public String toString() {
+				return "maintainTimeStats";
+			}
+		},
+
+		MAX_ALLOWED_PACKET {
+			public String toString() {
+				return "maxAllowedPacket";
+			}
+		},
+
+		MAX_QUERY_SIZE_TO_LOG {
+			public String toString() {
+				return "maxQuerySizeToLog";
+			}
+		},
+
+		MAX_RECONNECTS {
+			public String toString() {
+				return "maxReconnects";
+			}
+		},
+
+		MAX_ROWS {
+			public String toString() {
+				return "maxRows";
+			}
+		},
+
+		METADATA_CACHE_SIZE {
+			public String toString() {
+				return "metadataCacheSize";
+			}
+		},
+
+		NET_TIMEOUT_FOR_STREAMING_RESULTS {
+			public String toString() {
+				return "netTimeoutForStreamingResults";
+			}
+		},
+
+		NO_ACCESS_TO_PROCEDURE_BODIES {
+			public String toString() {
+				return "noAccessToProcedureBodies";
+			}
+		},
+
+		NO_DATETIME_STRING_SYNC {
+			public String toString() {
+				return "noDatetimeStringSync";
+			}
+		},
+
+		NO_TIMEZONE_CONVERSION_FOR_DATE_TYPE {
+			public String toString() {
+				return "noTimezoneConversionForDateType";
+			}
+		},
+
+		NO_TIMEZONE_CONVERSION_FOR_TIME_TYPE {
+			public String toString() {
+				return "noTimezoneConversionForTimeType";
+			}
+		},
+
+		NULL_CATALOG_MEANS_CURRENT {
+			public String toString() {
+				return "nullCatalogMeansCurrent";
+			}
+		},
+
+		NULL_NAME_PATTERN_MATCHES_ALL {
+			public String toString() {
+				return "nullNamePatternMatchesAll";
+			}
+		},
+
+		OVERRIDE_SUPPORTS_INTEGRITY_ENHANCEMENT_FACILITY {
+			public String toString() {
+				return "overrideSupportsIntegrityEnhancementFacility";
+			}
+		},
+
+		PACKET_DEBUG_BUFFER_SIZE {
+			public String toString() {
+				return "packetDebugBufferSize";
+			}
+		},
+
+		PAD_CHARS_WITH_SPACE {
+			public String toString() {
+				return "padCharsWithSpace";
+			}
+		},
+
+		PARANOID {
+			public String toString() {
+				return "paranoid";
+			}
+		},
+
+		PARSE_INFO_CACHE_FACTORY {
+			public String toString() {
+				return "parseInfoCacheFactory";
+			}
+		},
+
+		PASSWORD {
+			public String toString() {
+				return "password";
+			}
+		},
+
+		PASSWORD_CHARACTER_ENCODING {
+			public String toString() {
+				return "passwordCharacterEncoding";
+			}
+		},
+
+		PEDANTIC {
+			public String toString() {
+				return "pedantic";
+			}
+		},
+
+		PIN_GLOBAL_TX_TO_PHYSICAL_CONNECTION {
+			public String toString() {
+				return "pinGlobalTxToPhysicalConnection";
+			}
+		},
+
+		POPULATE_INSERT_ROW_WITH_DEFAULT_VALUES {
+			public String toString() {
+				return "populateInsertRowWithDefaultValues";
+			}
+		},
+
+		PREP_STMT_CACHE_SIZE {
+			public String toString() {
+				return "prepStmtCacheSize";
+			}
+		},
+
+		PREP_STMT_CACHE_SQL_LIMIT {
+			public String toString() {
+				return "prepStmtCacheSqlLimit";
+			}
+		},
+
+		PROCESS_ESCAPE_CODES_FOR_PREP_STMTS {
+			public String toString() {
+				return "processEscapeCodesForPrepStmts";
+			}
+		},
+
+		PROFILE_S_Q_L {
+			public String toString() {
+				return "profileSQL";
+			}
+		},
+
+		PROFILE_SQL {
+			public String toString() {
+				return "profileSql";
+			}
+		},
+
+		PROFILER_EVENT_HANDLER {
+			public String toString() {
+				return "profilerEventHandler";
+			}
+		},
+
+		PROPERTIES_TRANSFORM {
+			public String toString() {
+				return "propertiesTransform";
+			}
+		},
+
+		QUERIES_BEFORE_RETRY_MASTER {
+			public String toString() {
+				return "queriesBeforeRetryMaster";
+			}
+		},
+
+		QUERY_TIMEOUT_KILLS_CONNECTION {
+			public String toString() {
+				return "queryTimeoutKillsConnection";
+			}
+		},
+
+		READ_ONLY_PROPAGATES_TO_SERVER {
+			public String toString() {
+				return "readOnlyPropagatesToServer";
+			}
+		},
+
+		RECONNECT_AT_TX_END {
+			public String toString() {
+				return "reconnectAtTxEnd";
+			}
+		},
+
+		RELAX_AUTO_COMMIT {
+			public String toString() {
+				return "relaxAutoCommit";
+			}
+		},
+
+		REPLICATION_ENABLE_J_M_X {
+			public String toString() {
+				return "replicationEnableJMX";
+			}
+		},
+
+		REPORT_METRICS_INTERVAL_MILLIS {
+			public String toString() {
+				return "reportMetricsIntervalMillis";
+			}
+		},
+
+		REQUIRE_S_S_L {
+			public String toString() {
+				return "requireSSL";
+			}
+		},
+
+		RESOURCE_ID {
+			public String toString() {
+				return "resourceId";
+			}
+		},
+
+		RESULT_SET_SIZE_THRESHOLD {
+			public String toString() {
+				return "resultSetSizeThreshold";
+			}
+		},
+
+		RETAIN_STATEMENT_AFTER_RESULT_SET_CLOSE {
+			public String toString() {
+				return "retainStatementAfterResultSetClose";
+			}
+		},
+
+		RETRIES_ALL_DOWN {
+			public String toString() {
+				return "retriesAllDown";
+			}
+		},
+
+		REWRITE_BATCHED_STATEMENTS {
+			public String toString() {
+				return "rewriteBatchedStatements";
+			}
+		},
+
+		ROLLBACK_ON_POOLED_CLOSE {
+			public String toString() {
+				return "rollbackOnPooledClose";
+			}
+		},
+
+		ROUND_ROBIN_LOAD_BALANCE {
+			public String toString() {
+				return "roundRobinLoadBalance";
+			}
+		},
+
+		RUNNING_C_T_S13 {
+			public String toString() {
+				return "runningCTS13";
+			}
+		},
+
+		SECONDS_BEFORE_RETRY_MASTER {
+			public String toString() {
+				return "secondsBeforeRetryMaster";
+			}
+		},
+
+		SELF_DESTRUCT_ON_PING_MAX_OPERATIONS {
+			public String toString() {
+				return "selfDestructOnPingMaxOperations";
+			}
+		},
+
+		SELF_DESTRUCT_ON_PING_SECONDS_LIFETIME {
+			public String toString() {
+				return "selfDestructOnPingSecondsLifetime";
+			}
+		},
+
+		SERVER_CONFIG_CACHE_FACTORY {
+			public String toString() {
+				return "serverConfigCacheFactory";
+			}
+		},
+
+		SERVER_R_S_A_PUBLIC_KEY_FILE {
+			public String toString() {
+				return "serverRSAPublicKeyFile";
+			}
+		},
+
+		SERVER_TIMEZONE {
+			public String toString() {
+				return "serverTimezone";
+			}
+		},
+
+		SESSION_VARIABLES {
+			public String toString() {
+				return "sessionVariables";
+			}
+		},
+
+		SLOW_QUERY_THRESHOLD_MILLIS {
+			public String toString() {
+				return "slowQueryThresholdMillis";
+			}
+		},
+
+		SLOW_QUERY_THRESHOLD_NANOS {
+			public String toString() {
+				return "slowQueryThresholdNanos";
+			}
+		},
+
+		SOCKET_FACTORY {
+			public String toString() {
+				return "socketFactory";
+			}
+		},
+
+		SOCKET_TIMEOUT {
+			public String toString() {
+				return "socketTimeout";
+			}
+		},
+
+		SOCKS_PROXY_HOST {
+			public String toString() {
+				return "socksProxyHost";
+			}
+		},
+
+		SOCKS_PROXY_PORT {
+			public String toString() {
+				return "socksProxyPort";
+			}
+		},
+
+		STATEMENT_INTERCEPTORS {
+			public String toString() {
+				return "statementInterceptors";
+			}
+		},
+
+		STRICT_FLOATING_POINT {
+			public String toString() {
+				return "strictFloatingPoint";
+			}
+		},
+
+		STRICT_UPDATES {
+			public String toString() {
+				return "strictUpdates";
+			}
+		},
+
+		TCP_KEEP_ALIVE {
+			public String toString() {
+				return "tcpKeepAlive";
+			}
+		},
+
+		TCP_NO_DELAY {
+			public String toString() {
+				return "tcpNoDelay";
+			}
+		},
+
+		TCP_RCV_BUF {
+			public String toString() {
+				return "tcpRcvBuf";
+			}
+		},
+
+		TCP_SND_BUF {
+			public String toString() {
+				return "tcpSndBuf";
+			}
+		},
+
+		TCP_TRAFFIC_CLASS {
+			public String toString() {
+				return "tcpTrafficClass";
+			}
+		},
+
+		TINY_INT1IS_BIT {
+			public String toString() {
+				return "tinyInt1isBit";
+			}
+		},
+
+		TRACE_PROTOCOL {
+			public String toString() {
+				return "traceProtocol";
+			}
+		},
+
+		TRANSFORMED_BIT_IS_BOOLEAN {
+			public String toString() {
+				return "transformedBitIsBoolean";
+			}
+		},
+
+		TREAT_UTIL_DATE_AS_TIMESTAMP {
+			public String toString() {
+				return "treatUtilDateAsTimestamp";
+			}
+		},
+
+		TRUST_CERTIFICATE_KEY_STORE_PASSWORD {
+			public String toString() {
+				return "trustCertificateKeyStorePassword";
+			}
+		},
+
+		TRUST_CERTIFICATE_KEY_STORE_TYPE {
+			public String toString() {
+				return "trustCertificateKeyStoreType";
+			}
+		},
+
+		TRUST_CERTIFICATE_KEY_STORE_URL {
+			public String toString() {
+				return "trustCertificateKeyStoreUrl";
+			}
+		},
+
+		ULTRA_DEV_HACK {
+			public String toString() {
+				return "ultraDevHack";
+			}
+		},
+
+		USE_AFFECTED_ROWS {
+			public String toString() {
+				return "useAffectedRows";
+			}
+		},
+
+		USE_BLOB_TO_STORE_U_T_F8_OUTSIDE_B_M_P {
+			public String toString() {
+				return "useBlobToStoreUTF8OutsideBMP";
+			}
+		},
+
+		USE_COLUMN_NAMES_IN_FIND_COLUMN {
+			public String toString() {
+				return "useColumnNamesInFindColumn";
+			}
+		},
+
+		USE_COMPRESSION {
+			public String toString() {
+				return "useCompression";
+			}
+		},
+
+		USE_CONFIGS {
+			public String toString() {
+				return "useConfigs";
+			}
+		},
+
+		USE_CURSOR_FETCH {
+			public String toString() {
+				return "useCursorFetch";
+			}
+		},
+
+		USE_DIRECT_ROW_UNPACK {
+			public String toString() {
+				return "useDirectRowUnpack";
+			}
+		},
+
+		USE_DYNAMIC_CHARSET_INFO {
+			public String toString() {
+				return "useDynamicCharsetInfo";
+			}
+		},
+
+		USE_FAST_DATE_PARSING {
+			public String toString() {
+				return "useFastDateParsing";
+			}
+		},
+
+		USE_FAST_INT_PARSING {
+			public String toString() {
+				return "useFastIntParsing";
+			}
+		},
+
+		USE_GMT_MILLIS_FOR_DATETIMES {
+			public String toString() {
+				return "useGmtMillisForDatetimes";
+			}
+		},
+
+		USE_HOSTS_IN_PRIVILEGES {
+			public String toString() {
+				return "useHostsInPrivileges";
+			}
+		},
+
+		USE_INFORMATION_SCHEMA {
+			public String toString() {
+				return "useInformationSchema";
+			}
+		},
+
+		USE_J_D_B_C_COMPLIANT_TIMEZONE_SHIFT {
+			public String toString() {
+				return "useJDBCCompliantTimezoneShift";
+			}
+		},
+
+		USE_JVM_CHARSET_CONVERTERS {
+			public String toString() {
+				return "useJvmCharsetConverters";
+			}
+		},
+
+		USE_LEGACY_DATETIME_CODE {
+			public String toString() {
+				return "useLegacyDatetimeCode";
+			}
+		},
+
+		USE_LOCAL_SESSION_STATE {
+			public String toString() {
+				return "useLocalSessionState";
+			}
+		},
+
+		USE_LOCAL_TRANSACTION_STATE {
+			public String toString() {
+				return "useLocalTransactionState";
+			}
+		},
+
+		USE_NANOS_FOR_ELAPSED_TIME {
+			public String toString() {
+				return "useNanosForElapsedTime";
+			}
+		},
+
+		USE_OLD_ALIAS_METADATA_BEHAVIOR {
+			public String toString() {
+				return "useOldAliasMetadataBehavior";
+			}
+		},
+
+		USE_OLD_U_T_F8_BEHAVIOR {
+			public String toString() {
+				return "useOldUTF8Behavior";
+			}
+		},
+
+		USE_ONLY_SERVER_ERROR_MESSAGES {
+			public String toString() {
+				return "useOnlyServerErrorMessages";
+			}
+		},
+
+		USE_READ_AHEAD_INPUT {
+			public String toString() {
+				return "useReadAheadInput";
+			}
+		},
+
+		USE_S_S_L {
+			public String toString() {
+				return "useSSL";
+			}
+		},
+
+		USE_S_S_P_S_COMPATIBLE_TIMEZONE_SHIFT {
+			public String toString() {
+				return "useSSPSCompatibleTimezoneShift";
+			}
+		},
+
+		USE_SERVER_PREP_STMTS {
+			public String toString() {
+				return "useServerPrepStmts";
+			}
+		},
+
+		USE_SQL_STATE_CODES {
+			public String toString() {
+				return "useSqlStateCodes";
+			}
+		},
+
+		USE_STREAM_LENGTHS_IN_PREP_STMTS {
+			public String toString() {
+				return "useStreamLengthsInPrepStmts";
+			}
+		},
+
+		USE_TIMEZONE {
+			public String toString() {
+				return "useTimezone";
+			}
+		},
+
+		USE_UNBUFFERED_INPUT {
+			public String toString() {
+				return "useUnbufferedInput";
+			}
+		},
+
+		USE_UNICODE {
+			public String toString() {
+				return "useUnicode";
+			}
+		},
+
+		USE_USAGE_ADVISOR {
+			public String toString() {
+				return "useUsageAdvisor";
+			}
+		},
+
+		USER {
+			public String toString() {
+				return "user";
+			}
+		},
+
+		UTF8_OUTSIDE_BMP_EXCLUDED_COLUMN_NAME_PATTERN {
+			public String toString() {
+				return "utf8OutsideBmpExcludedColumnNamePattern";
+			}
+		},
+
+		UTF8_OUTSIDE_BMP_INCLUDED_COLUMN_NAME_PATTERN {
+			public String toString() {
+				return "utf8OutsideBmpIncludedColumnNamePattern";
+			}
+		},
+
+		VERIFY_SERVER_CERTIFICATE {
+			public String toString() {
+				return "verifyServerCertificate";
+			}
+		},
+
+		ZERO_DATE_TIME_BEHAVIOR {
+			public String toString() {
+				return "zeroDateTimeBehavior";
+			}
+		}
+	}
+
+	public void setAllowLoadLocalInfile(String input) {
+		setValue(Keys.ALLOW_LOAD_LOCAL_INFILE.toString(), input);
+	}
+
+	public String getAllowLoadLocalInfile() {
+		return getValue(Keys.ALLOW_LOAD_LOCAL_INFILE.toString());
+	};
+
+	public void setAllowMasterDownConnections(String input) {
+		setValue(Keys.ALLOW_MASTER_DOWN_CONNECTIONS.toString(), input);
+	}
+
+	public String getAllowMasterDownConnections() {
+		return getValue(Keys.ALLOW_MASTER_DOWN_CONNECTIONS.toString());
+	};
+
+	public void setAllowMultiQueries(String input) {
+		setValue(Keys.ALLOW_MULTI_QUERIES.toString(), input);
+	}
+
+	public String getAllowMultiQueries() {
+		return getValue(Keys.ALLOW_MULTI_QUERIES.toString());
+	};
+
+	public void setAllowNanAndInf(String input) {
+		setValue(Keys.ALLOW_NAN_AND_INF.toString(), input);
+	}
+
+	public String getAllowNanAndInf() {
+		return getValue(Keys.ALLOW_NAN_AND_INF.toString());
+	};
+
+	public void setAllowPublicKeyRetrieval(String input) {
+		setValue(Keys.ALLOW_PUBLIC_KEY_RETRIEVAL.toString(), input);
+	}
+
+	public String getAllowPublicKeyRetrieval() {
+		return getValue(Keys.ALLOW_PUBLIC_KEY_RETRIEVAL.toString());
+	};
+
+	public void setAllowUrlInLocalInfile(String input) {
+		setValue(Keys.ALLOW_URL_IN_LOCAL_INFILE.toString(), input);
+	}
+
+	public String getAllowUrlInLocalInfile() {
+		return getValue(Keys.ALLOW_URL_IN_LOCAL_INFILE.toString());
+	};
+
+	public void setAlwaysSendSetIsolation(String input) {
+		setValue(Keys.ALWAYS_SEND_SET_ISOLATION.toString(), input);
+	}
+
+	public String getAlwaysSendSetIsolation() {
+		return getValue(Keys.ALWAYS_SEND_SET_ISOLATION.toString());
+	};
+
+	public void setAuthenticationPlugins(String input) {
+		setValue(Keys.AUTHENTICATION_PLUGINS.toString(), input);
+	}
+
+	public String getAuthenticationPlugins() {
+		return getValue(Keys.AUTHENTICATION_PLUGINS.toString());
+	};
+
+	public void setAutoClosePStmtStreams(String input) {
+		setValue(Keys.AUTO_CLOSE_P_STMT_STREAMS.toString(), input);
+	}
+
+	public String getAutoClosePStmtStreams() {
+		return getValue(Keys.AUTO_CLOSE_P_STMT_STREAMS.toString());
+	};
+
+	public void setAutoDeserialize(String input) {
+		setValue(Keys.AUTO_DESERIALIZE.toString(), input);
+	}
+
+	public String getAutoDeserialize() {
+		return getValue(Keys.AUTO_DESERIALIZE.toString());
+	};
+
+	public void setAutoGenerateTestcaseScript(String input) {
+		setValue(Keys.AUTO_GENERATE_TESTCASE_SCRIPT.toString(), input);
+	}
+
+	public String getAutoGenerateTestcaseScript() {
+		return getValue(Keys.AUTO_GENERATE_TESTCASE_SCRIPT.toString());
+	};
+
+	public void setAutoReconnect(String input) {
+		setValue(Keys.AUTO_RECONNECT.toString(), input);
+	}
+
+	public String getAutoReconnect() {
+		return getValue(Keys.AUTO_RECONNECT.toString());
+	};
+
+	public void setAutoReconnectForPools(String input) {
+		setValue(Keys.AUTO_RECONNECT_FOR_POOLS.toString(), input);
+	}
+
+	public String getAutoReconnectForPools() {
+		return getValue(Keys.AUTO_RECONNECT_FOR_POOLS.toString());
+	};
+
+	public void setAutoSlowLog(String input) {
+		setValue(Keys.AUTO_SLOW_LOG.toString(), input);
+	}
+
+	public String getAutoSlowLog() {
+		return getValue(Keys.AUTO_SLOW_LOG.toString());
+	};
+
+	public void setBlobSendChunkSize(String input) {
+		setValue(Keys.BLOB_SEND_CHUNK_SIZE.toString(), input);
+	}
+
+	public String getBlobSendChunkSize() {
+		return getValue(Keys.BLOB_SEND_CHUNK_SIZE.toString());
+	};
+
+	public void setBlobsAreStrings(String input) {
+		setValue(Keys.BLOBS_ARE_STRINGS.toString(), input);
+	}
+
+	public String getBlobsAreStrings() {
+		return getValue(Keys.BLOBS_ARE_STRINGS.toString());
+	};
+
+	public void setCacheCallableStmts(String input) {
+		setValue(Keys.CACHE_CALLABLE_STMTS.toString(), input);
+	}
+
+	public String getCacheCallableStmts() {
+		return getValue(Keys.CACHE_CALLABLE_STMTS.toString());
+	};
+
+	public void setCacheDefaultTimezone(String input) {
+		setValue(Keys.CACHE_DEFAULT_TIMEZONE.toString(), input);
+	}
+
+	public String getCacheDefaultTimezone() {
+		return getValue(Keys.CACHE_DEFAULT_TIMEZONE.toString());
+	};
+
+	public void setCachePrepStmts(String input) {
+		setValue(Keys.CACHE_PREP_STMTS.toString(), input);
+	}
+
+	public String getCachePrepStmts() {
+		return getValue(Keys.CACHE_PREP_STMTS.toString());
+	};
+
+	public void setCacheResultSetMetadata(String input) {
+		setValue(Keys.CACHE_RESULT_SET_METADATA.toString(), input);
+	}
+
+	public String getCacheResultSetMetadata() {
+		return getValue(Keys.CACHE_RESULT_SET_METADATA.toString());
+	};
+
+	public void setCacheServerConfiguration(String input) {
+		setValue(Keys.CACHE_SERVER_CONFIGURATION.toString(), input);
+	}
+
+	public String getCacheServerConfiguration() {
+		return getValue(Keys.CACHE_SERVER_CONFIGURATION.toString());
+	};
+
+	public void setCallableStmtCacheSize(String input) {
+		setValue(Keys.CALLABLE_STMT_CACHE_SIZE.toString(), input);
+	}
+
+	public String getCallableStmtCacheSize() {
+		return getValue(Keys.CALLABLE_STMT_CACHE_SIZE.toString());
+	};
+
+	public void setCapitalizeTypeNames(String input) {
+		setValue(Keys.CAPITALIZE_TYPE_NAMES.toString(), input);
+	}
+
+	public String getCapitalizeTypeNames() {
+		return getValue(Keys.CAPITALIZE_TYPE_NAMES.toString());
+	};
+
+	public void setCharacterEncoding(String input) {
+		setValue(Keys.CHARACTER_ENCODING.toString(), input);
+	}
+
+	public String getCharacterEncoding() {
+		return getValue(Keys.CHARACTER_ENCODING.toString());
+	};
+
+	public void setCharacterSetResults(String input) {
+		setValue(Keys.CHARACTER_SET_RESULTS.toString(), input);
+	}
+
+	public String getCharacterSetResults() {
+		return getValue(Keys.CHARACTER_SET_RESULTS.toString());
+	};
+
+	public void setClientCertificateKeyStorePassword(String input) {
+		setValue(Keys.CLIENT_CERTIFICATE_KEY_STORE_PASSWORD.toString(), input);
+	}
+
+	public String getClientCertificateKeyStorePassword() {
+		return getValue(Keys.CLIENT_CERTIFICATE_KEY_STORE_PASSWORD.toString());
+	};
+
+	public void setClientCertificateKeyStoreType(String input) {
+		setValue(Keys.CLIENT_CERTIFICATE_KEY_STORE_TYPE.toString(), input);
+	}
+
+	public String getClientCertificateKeyStoreType() {
+		return getValue(Keys.CLIENT_CERTIFICATE_KEY_STORE_TYPE.toString());
+	};
+
+	public void setClientCertificateKeyStoreUrl(String input) {
+		setValue(Keys.CLIENT_CERTIFICATE_KEY_STORE_URL.toString(), input);
+	}
+
+	public String getClientCertificateKeyStoreUrl() {
+		return getValue(Keys.CLIENT_CERTIFICATE_KEY_STORE_URL.toString());
+	};
+
+	public void setClientInfoProvider(String input) {
+		setValue(Keys.CLIENT_INFO_PROVIDER.toString(), input);
+	}
+
+	public String getClientInfoProvider() {
+		return getValue(Keys.CLIENT_INFO_PROVIDER.toString());
+	};
+
+	public void setClobCharacterEncoding(String input) {
+		setValue(Keys.CLOB_CHARACTER_ENCODING.toString(), input);
+	}
+
+	public String getClobCharacterEncoding() {
+		return getValue(Keys.CLOB_CHARACTER_ENCODING.toString());
+	};
+
+	public void setClobberStreamingResults(String input) {
+		setValue(Keys.CLOBBER_STREAMING_RESULTS.toString(), input);
+	}
+
+	public String getClobberStreamingResults() {
+		return getValue(Keys.CLOBBER_STREAMING_RESULTS.toString());
+	};
+
+	public void setCompensateOnDuplicateKeyUpdateCounts(String input) {
+		setValue(Keys.COMPENSATE_ON_DUPLICATE_KEY_UPDATE_COUNTS.toString(),
+				input);
+	}
+
+	public String getCompensateOnDuplicateKeyUpdateCounts() {
+		return getValue(Keys.COMPENSATE_ON_DUPLICATE_KEY_UPDATE_COUNTS
+				.toString());
+	};
+
+	public void setConnectTimeout(String input) {
+		setValue(Keys.CONNECT_TIMEOUT.toString(), input);
+	}
+
+	public String getConnectTimeout() {
+		return getValue(Keys.CONNECT_TIMEOUT.toString());
+	};
+
+	public void setConnectionAttributes(String input) {
+		setValue(Keys.CONNECTION_ATTRIBUTES.toString(), input);
+	}
+
+	public String getConnectionAttributes() {
+		return getValue(Keys.CONNECTION_ATTRIBUTES.toString());
+	};
+
+	public void setConnectionCollation(String input) {
+		setValue(Keys.CONNECTION_COLLATION.toString(), input);
+	}
+
+	public String getConnectionCollation() {
+		return getValue(Keys.CONNECTION_COLLATION.toString());
+	};
+
+	public void setConnectionLifecycleInterceptors(String input) {
+		setValue(Keys.CONNECTION_LIFECYCLE_INTERCEPTORS.toString(), input);
+	}
+
+	public String getConnectionLifecycleInterceptors() {
+		return getValue(Keys.CONNECTION_LIFECYCLE_INTERCEPTORS.toString());
+	};
+
+	public void setContinueBatchOnError(String input) {
+		setValue(Keys.CONTINUE_BATCH_ON_ERROR.toString(), input);
+	}
+
+	public String getContinueBatchOnError() {
+		return getValue(Keys.CONTINUE_BATCH_ON_ERROR.toString());
+	};
+
+	public void setCreateDatabaseIfNotExist(String input) {
+		setValue(Keys.CREATE_DATABASE_IF_NOT_EXIST.toString(), input);
+	}
+
+	public String getCreateDatabaseIfNotExist() {
+		return getValue(Keys.CREATE_DATABASE_IF_NOT_EXIST.toString());
+	};
+
+	public void setDefaultAuthenticationPlugin(String input) {
+		setValue(Keys.DEFAULT_AUTHENTICATION_PLUGIN.toString(), input);
+	}
+
+	public String getDefaultAuthenticationPlugin() {
+		return getValue(Keys.DEFAULT_AUTHENTICATION_PLUGIN.toString());
+	};
+
+	public void setDefaultFetchSize(String input) {
+		setValue(Keys.DEFAULT_FETCH_SIZE.toString(), input);
+	}
+
+	public String getDefaultFetchSize() {
+		return getValue(Keys.DEFAULT_FETCH_SIZE.toString());
+	};
+
+	public void setDetectCustomCollations(String input) {
+		setValue(Keys.DETECT_CUSTOM_COLLATIONS.toString(), input);
+	}
+
+	public String getDetectCustomCollations() {
+		return getValue(Keys.DETECT_CUSTOM_COLLATIONS.toString());
+	};
+
+	public void setDisabledAuthenticationPlugins(String input) {
+		setValue(Keys.DISABLED_AUTHENTICATION_PLUGINS.toString(), input);
+	}
+
+	public String getDisabledAuthenticationPlugins() {
+		return getValue(Keys.DISABLED_AUTHENTICATION_PLUGINS.toString());
+	};
+
+	public void setDisconnectOnExpiredPasswords(String input) {
+		setValue(Keys.DISCONNECT_ON_EXPIRED_PASSWORDS.toString(), input);
+	}
+
+	public String getDisconnectOnExpiredPasswords() {
+		return getValue(Keys.DISCONNECT_ON_EXPIRED_PASSWORDS.toString());
+	};
+
+	public void setDontCheckOnDuplicateKeyUpdateInSQL(String input) {
+		setValue(Keys.DONT_CHECK_ON_DUPLICATE_KEY_UPDATE_IN_S_Q_L.toString(),
+				input);
+	}
+
+	public String getDontCheckOnDuplicateKeyUpdateInSQL() {
+		return getValue(Keys.DONT_CHECK_ON_DUPLICATE_KEY_UPDATE_IN_S_Q_L
+				.toString());
+	};
+
+	public void setDontTrackOpenResources(String input) {
+		setValue(Keys.DONT_TRACK_OPEN_RESOURCES.toString(), input);
+	}
+
+	public String getDontTrackOpenResources() {
+		return getValue(Keys.DONT_TRACK_OPEN_RESOURCES.toString());
+	};
+
+	public void setDumpMetadataOnColumnNotFound(String input) {
+		setValue(Keys.DUMP_METADATA_ON_COLUMN_NOT_FOUND.toString(), input);
+	}
+
+	public String getDumpMetadataOnColumnNotFound() {
+		return getValue(Keys.DUMP_METADATA_ON_COLUMN_NOT_FOUND.toString());
+	};
+
+	public void setDumpQueriesOnException(String input) {
+		setValue(Keys.DUMP_QUERIES_ON_EXCEPTION.toString(), input);
+	}
+
+	public String getDumpQueriesOnException() {
+		return getValue(Keys.DUMP_QUERIES_ON_EXCEPTION.toString());
+	};
+
+	public void setDynamicCalendars(String input) {
+		setValue(Keys.DYNAMIC_CALENDARS.toString(), input);
+	}
+
+	public String getDynamicCalendars() {
+		return getValue(Keys.DYNAMIC_CALENDARS.toString());
+	};
+
+	public void setElideSetAutoCommits(String input) {
+		setValue(Keys.ELIDE_SET_AUTO_COMMITS.toString(), input);
+	}
+
+	public String getElideSetAutoCommits() {
+		return getValue(Keys.ELIDE_SET_AUTO_COMMITS.toString());
+	};
+
+	public void setEmptyStringsConvertToZero(String input) {
+		setValue(Keys.EMPTY_STRINGS_CONVERT_TO_ZERO.toString(), input);
+	}
+
+	public String getEmptyStringsConvertToZero() {
+		return getValue(Keys.EMPTY_STRINGS_CONVERT_TO_ZERO.toString());
+	};
+
+	public void setEmulateLocators(String input) {
+		setValue(Keys.EMULATE_LOCATORS.toString(), input);
+	}
+
+	public String getEmulateLocators() {
+		return getValue(Keys.EMULATE_LOCATORS.toString());
+	};
+
+	public void setEmulateUnsupportedPstmts(String input) {
+		setValue(Keys.EMULATE_UNSUPPORTED_PSTMTS.toString(), input);
+	}
+
+	public String getEmulateUnsupportedPstmts() {
+		return getValue(Keys.EMULATE_UNSUPPORTED_PSTMTS.toString());
+	};
+
+	public void setEnablePacketDebug(String input) {
+		setValue(Keys.ENABLE_PACKET_DEBUG.toString(), input);
+	}
+
+	public String getEnablePacketDebug() {
+		return getValue(Keys.ENABLE_PACKET_DEBUG.toString());
+	};
+
+	public void setEnableQueryTimeouts(String input) {
+		setValue(Keys.ENABLE_QUERY_TIMEOUTS.toString(), input);
+	}
+
+	public String getEnableQueryTimeouts() {
+		return getValue(Keys.ENABLE_QUERY_TIMEOUTS.toString());
+	};
+
+	public void setExceptionInterceptors(String input) {
+		setValue(Keys.EXCEPTION_INTERCEPTORS.toString(), input);
+	}
+
+	public String getExceptionInterceptors() {
+		return getValue(Keys.EXCEPTION_INTERCEPTORS.toString());
+	};
+
+	public void setExplainSlowQueries(String input) {
+		setValue(Keys.EXPLAIN_SLOW_QUERIES.toString(), input);
+	}
+
+	public String getExplainSlowQueries() {
+		return getValue(Keys.EXPLAIN_SLOW_QUERIES.toString());
+	};
+
+	public void setFailOverReadOnly(String input) {
+		setValue(Keys.FAIL_OVER_READ_ONLY.toString(), input);
+	}
+
+	public String getFailOverReadOnly() {
+		return getValue(Keys.FAIL_OVER_READ_ONLY.toString());
+	};
+
+	public void setFunctionsNeverReturnBlobs(String input) {
+		setValue(Keys.FUNCTIONS_NEVER_RETURN_BLOBS.toString(), input);
+	}
+
+	public String getFunctionsNeverReturnBlobs() {
+		return getValue(Keys.FUNCTIONS_NEVER_RETURN_BLOBS.toString());
+	};
+
+	public void setGatherPerfMetrics(String input) {
+		setValue(Keys.GATHER_PERF_METRICS.toString(), input);
+	}
+
+	public String getGatherPerfMetrics() {
+		return getValue(Keys.GATHER_PERF_METRICS.toString());
+	};
+
+	public void setGenerateSimpleParameterMetadata(String input) {
+		setValue(Keys.GENERATE_SIMPLE_PARAMETER_METADATA.toString(), input);
+	}
+
+	public String getGenerateSimpleParameterMetadata() {
+		return getValue(Keys.GENERATE_SIMPLE_PARAMETER_METADATA.toString());
+	};
+
+	public void setGetProceduresReturnsFunctions(String input) {
+		setValue(Keys.GET_PROCEDURES_RETURNS_FUNCTIONS.toString(), input);
+	}
+
+	public String getGetProceduresReturnsFunctions() {
+		return getValue(Keys.GET_PROCEDURES_RETURNS_FUNCTIONS.toString());
+	};
+
+	public void setHoldResultsOpenOverStatementClose(String input) {
+		setValue(Keys.HOLD_RESULTS_OPEN_OVER_STATEMENT_CLOSE.toString(), input);
+	}
+
+	public String getHoldResultsOpenOverStatementClose() {
+		return getValue(Keys.HOLD_RESULTS_OPEN_OVER_STATEMENT_CLOSE.toString());
+	};
+
+	public void setIgnoreNonTxTables(String input) {
+		setValue(Keys.IGNORE_NON_TX_TABLES.toString(), input);
+	}
+
+	public String getIgnoreNonTxTables() {
+		return getValue(Keys.IGNORE_NON_TX_TABLES.toString());
+	};
+
+	public void setIncludeInnodbStatusInDeadlockExceptions(String input) {
+		setValue(Keys.INCLUDE_INNODB_STATUS_IN_DEADLOCK_EXCEPTIONS.toString(),
+				input);
+	}
+
+	public String getIncludeInnodbStatusInDeadlockExceptions() {
+		return getValue(Keys.INCLUDE_INNODB_STATUS_IN_DEADLOCK_EXCEPTIONS
+				.toString());
+	};
+
+	public void setIncludeThreadDumpInDeadlockExceptions(String input) {
+		setValue(Keys.INCLUDE_THREAD_DUMP_IN_DEADLOCK_EXCEPTIONS.toString(),
+				input);
+	}
+
+	public String getIncludeThreadDumpInDeadlockExceptions() {
+		return getValue(Keys.INCLUDE_THREAD_DUMP_IN_DEADLOCK_EXCEPTIONS
+				.toString());
+	};
+
+	public void setIncludeThreadNamesAsStatementComment(String input) {
+		setValue(Keys.INCLUDE_THREAD_NAMES_AS_STATEMENT_COMMENT.toString(),
+				input);
+	}
+
+	public String getIncludeThreadNamesAsStatementComment() {
+		return getValue(Keys.INCLUDE_THREAD_NAMES_AS_STATEMENT_COMMENT
+				.toString());
+	};
+
+	public void setInitialTimeout(String input) {
+		setValue(Keys.INITIAL_TIMEOUT.toString(), input);
+	}
+
+	public String getInitialTimeout() {
+		return getValue(Keys.INITIAL_TIMEOUT.toString());
+	};
+
+	public void setInteractiveClient(String input) {
+		setValue(Keys.INTERACTIVE_CLIENT.toString(), input);
+	}
+
+	public String getInteractiveClient() {
+		return getValue(Keys.INTERACTIVE_CLIENT.toString());
+	};
+
+	public void setJdbcCompliantTruncation(String input) {
+		setValue(Keys.JDBC_COMPLIANT_TRUNCATION.toString(), input);
+	}
+
+	public String getJdbcCompliantTruncation() {
+		return getValue(Keys.JDBC_COMPLIANT_TRUNCATION.toString());
+	};
+
+	public void setLargeRowSizeThreshold(String input) {
+		setValue(Keys.LARGE_ROW_SIZE_THRESHOLD.toString(), input);
+	}
+
+	public String getLargeRowSizeThreshold() {
+		return getValue(Keys.LARGE_ROW_SIZE_THRESHOLD.toString());
+	};
+
+	public void setLoadBalanceAutoCommitStatementRegex(String input) {
+		setValue(Keys.LOAD_BALANCE_AUTO_COMMIT_STATEMENT_REGEX.toString(),
+				input);
+	}
+
+	public String getLoadBalanceAutoCommitStatementRegex() {
+		return getValue(Keys.LOAD_BALANCE_AUTO_COMMIT_STATEMENT_REGEX
+				.toString());
+	};
+
+	public void setLoadBalanceAutoCommitStatementThreshold(String input) {
+		setValue(Keys.LOAD_BALANCE_AUTO_COMMIT_STATEMENT_THRESHOLD.toString(),
+				input);
+	}
+
+	public String getLoadBalanceAutoCommitStatementThreshold() {
+		return getValue(Keys.LOAD_BALANCE_AUTO_COMMIT_STATEMENT_THRESHOLD
+				.toString());
+	};
+
+	public void setLoadBalanceBlacklistTimeout(String input) {
+		setValue(Keys.LOAD_BALANCE_BLACKLIST_TIMEOUT.toString(), input);
+	}
+
+	public String getLoadBalanceBlacklistTimeout() {
+		return getValue(Keys.LOAD_BALANCE_BLACKLIST_TIMEOUT.toString());
+	};
+
+	public void setLoadBalanceConnectionGroup(String input) {
+		setValue(Keys.LOAD_BALANCE_CONNECTION_GROUP.toString(), input);
+	}
+
+	public String getLoadBalanceConnectionGroup() {
+		return getValue(Keys.LOAD_BALANCE_CONNECTION_GROUP.toString());
+	};
+
+	public void setLoadBalanceEnableJMX(String input) {
+		setValue(Keys.LOAD_BALANCE_ENABLE_J_M_X.toString(), input);
+	}
+
+	public String getLoadBalanceEnableJMX() {
+		return getValue(Keys.LOAD_BALANCE_ENABLE_J_M_X.toString());
+	};
+
+	public void setLoadBalanceExceptionChecker(String input) {
+		setValue(Keys.LOAD_BALANCE_EXCEPTION_CHECKER.toString(), input);
+	}
+
+	public String getLoadBalanceExceptionChecker() {
+		return getValue(Keys.LOAD_BALANCE_EXCEPTION_CHECKER.toString());
+	};
+
+	public void setLoadBalancePingTimeout(String input) {
+		setValue(Keys.LOAD_BALANCE_PING_TIMEOUT.toString(), input);
+	}
+
+	public String getLoadBalancePingTimeout() {
+		return getValue(Keys.LOAD_BALANCE_PING_TIMEOUT.toString());
+	};
+
+	public void setLoadBalanceSQLExceptionSubclassFailover(String input) {
+		setValue(
+				Keys.LOAD_BALANCE_S_Q_L_EXCEPTION_SUBCLASS_FAILOVER.toString(),
+				input);
+	}
+
+	public String getLoadBalanceSQLExceptionSubclassFailover() {
+		return getValue(Keys.LOAD_BALANCE_S_Q_L_EXCEPTION_SUBCLASS_FAILOVER
+				.toString());
+	};
+
+	public void setLoadBalanceSQLStateFailover(String input) {
+		setValue(Keys.LOAD_BALANCE_S_Q_L_STATE_FAILOVER.toString(), input);
+	}
+
+	public String getLoadBalanceSQLStateFailover() {
+		return getValue(Keys.LOAD_BALANCE_S_Q_L_STATE_FAILOVER.toString());
+	};
+
+	public void setLoadBalanceStrategy(String input) {
+		setValue(Keys.LOAD_BALANCE_STRATEGY.toString(), input);
+	}
+
+	public String getLoadBalanceStrategy() {
+		return getValue(Keys.LOAD_BALANCE_STRATEGY.toString());
+	};
+
+	public void setLoadBalanceValidateConnectionOnSwapServer(String input) {
+		setValue(
+				Keys.LOAD_BALANCE_VALIDATE_CONNECTION_ON_SWAP_SERVER.toString(),
+				input);
+	}
+
+	public String getLoadBalanceValidateConnectionOnSwapServer() {
+		return getValue(Keys.LOAD_BALANCE_VALIDATE_CONNECTION_ON_SWAP_SERVER
+				.toString());
+	};
+
+	public void setLocalSocketAddress(String input) {
+		setValue(Keys.LOCAL_SOCKET_ADDRESS.toString(), input);
+	}
+
+	public String getLocalSocketAddress() {
+		return getValue(Keys.LOCAL_SOCKET_ADDRESS.toString());
+	};
+
+	public void setLocatorFetchBufferSize(String input) {
+		setValue(Keys.LOCATOR_FETCH_BUFFER_SIZE.toString(), input);
+	}
+
+	public String getLocatorFetchBufferSize() {
+		return getValue(Keys.LOCATOR_FETCH_BUFFER_SIZE.toString());
+	};
+
+	public void setLogSlowQueries(String input) {
+		setValue(Keys.LOG_SLOW_QUERIES.toString(), input);
+	}
+
+	public String getLogSlowQueries() {
+		return getValue(Keys.LOG_SLOW_QUERIES.toString());
+	};
+
+	public void setLogXaCommands(String input) {
+		setValue(Keys.LOG_XA_COMMANDS.toString(), input);
+	}
+
+	public String getLogXaCommands() {
+		return getValue(Keys.LOG_XA_COMMANDS.toString());
+	};
+
+	public void setLogger(String input) {
+		setValue(Keys.LOGGER.toString(), input);
+	}
+
+	public String getLogger() {
+		return getValue(Keys.LOGGER.toString());
+	};
+
+	public void setMaintainTimeStats(String input) {
+		setValue(Keys.MAINTAIN_TIME_STATS.toString(), input);
+	}
+
+	public String getMaintainTimeStats() {
+		return getValue(Keys.MAINTAIN_TIME_STATS.toString());
+	};
+
+	public void setMaxAllowedPacket(String input) {
+		setValue(Keys.MAX_ALLOWED_PACKET.toString(), input);
+	}
+
+	public String getMaxAllowedPacket() {
+		return getValue(Keys.MAX_ALLOWED_PACKET.toString());
+	};
+
+	public void setMaxQuerySizeToLog(String input) {
+		setValue(Keys.MAX_QUERY_SIZE_TO_LOG.toString(), input);
+	}
+
+	public String getMaxQuerySizeToLog() {
+		return getValue(Keys.MAX_QUERY_SIZE_TO_LOG.toString());
+	};
+
+	public void setMaxReconnects(String input) {
+		setValue(Keys.MAX_RECONNECTS.toString(), input);
+	}
+
+	public String getMaxReconnects() {
+		return getValue(Keys.MAX_RECONNECTS.toString());
+	};
+
+	public void setMaxRows(String input) {
+		setValue(Keys.MAX_ROWS.toString(), input);
+	}
+
+	public String getMaxRows() {
+		return getValue(Keys.MAX_ROWS.toString());
+	};
+
+	public void setMetadataCacheSize(String input) {
+		setValue(Keys.METADATA_CACHE_SIZE.toString(), input);
+	}
+
+	public String getMetadataCacheSize() {
+		return getValue(Keys.METADATA_CACHE_SIZE.toString());
+	};
+
+	public void setNetTimeoutForStreamingResults(String input) {
+		setValue(Keys.NET_TIMEOUT_FOR_STREAMING_RESULTS.toString(), input);
+	}
+
+	public String getNetTimeoutForStreamingResults() {
+		return getValue(Keys.NET_TIMEOUT_FOR_STREAMING_RESULTS.toString());
+	};
+
+	public void setNoAccessToProcedureBodies(String input) {
+		setValue(Keys.NO_ACCESS_TO_PROCEDURE_BODIES.toString(), input);
+	}
+
+	public String getNoAccessToProcedureBodies() {
+		return getValue(Keys.NO_ACCESS_TO_PROCEDURE_BODIES.toString());
+	};
+
+	public void setNoDatetimeStringSync(String input) {
+		setValue(Keys.NO_DATETIME_STRING_SYNC.toString(), input);
+	}
+
+	public String getNoDatetimeStringSync() {
+		return getValue(Keys.NO_DATETIME_STRING_SYNC.toString());
+	};
+
+	public void setNoTimezoneConversionForDateType(String input) {
+		setValue(Keys.NO_TIMEZONE_CONVERSION_FOR_DATE_TYPE.toString(), input);
+	}
+
+	public String getNoTimezoneConversionForDateType() {
+		return getValue(Keys.NO_TIMEZONE_CONVERSION_FOR_DATE_TYPE.toString());
+	};
+
+	public void setNoTimezoneConversionForTimeType(String input) {
+		setValue(Keys.NO_TIMEZONE_CONVERSION_FOR_TIME_TYPE.toString(), input);
+	}
+
+	public String getNoTimezoneConversionForTimeType() {
+		return getValue(Keys.NO_TIMEZONE_CONVERSION_FOR_TIME_TYPE.toString());
+	};
+
+	public void setNullCatalogMeansCurrent(String input) {
+		setValue(Keys.NULL_CATALOG_MEANS_CURRENT.toString(), input);
+	}
+
+	public String getNullCatalogMeansCurrent() {
+		return getValue(Keys.NULL_CATALOG_MEANS_CURRENT.toString());
+	};
+
+	public void setNullNamePatternMatchesAll(String input) {
+		setValue(Keys.NULL_NAME_PATTERN_MATCHES_ALL.toString(), input);
+	}
+
+	public String getNullNamePatternMatchesAll() {
+		return getValue(Keys.NULL_NAME_PATTERN_MATCHES_ALL.toString());
+	};
+
+	public void setOverrideSupportsIntegrityEnhancementFacility(String input) {
+		setValue(
+				Keys.OVERRIDE_SUPPORTS_INTEGRITY_ENHANCEMENT_FACILITY
+						.toString(),
+				input);
+	}
+
+	public String getOverrideSupportsIntegrityEnhancementFacility() {
+		return getValue(Keys.OVERRIDE_SUPPORTS_INTEGRITY_ENHANCEMENT_FACILITY
+				.toString());
+	};
+
+	public void setPacketDebugBufferSize(String input) {
+		setValue(Keys.PACKET_DEBUG_BUFFER_SIZE.toString(), input);
+	}
+
+	public String getPacketDebugBufferSize() {
+		return getValue(Keys.PACKET_DEBUG_BUFFER_SIZE.toString());
+	};
+
+	public void setPadCharsWithSpace(String input) {
+		setValue(Keys.PAD_CHARS_WITH_SPACE.toString(), input);
+	}
+
+	public String getPadCharsWithSpace() {
+		return getValue(Keys.PAD_CHARS_WITH_SPACE.toString());
+	};
+
+	public void setParanoid(String input) {
+		setValue(Keys.PARANOID.toString(), input);
+	}
+
+	public String getParanoid() {
+		return getValue(Keys.PARANOID.toString());
+	};
+
+	public void setParseInfoCacheFactory(String input) {
+		setValue(Keys.PARSE_INFO_CACHE_FACTORY.toString(), input);
+	}
+
+	public String getParseInfoCacheFactory() {
+		return getValue(Keys.PARSE_INFO_CACHE_FACTORY.toString());
+	};
+
+	public void setPassword(String input) {
+		setValue(Keys.PASSWORD.toString(), input);
+	}
+
+	public String getPassword() {
+		return getValue(Keys.PASSWORD.toString());
+	};
+
+	public void setPasswordCharacterEncoding(String input) {
+		setValue(Keys.PASSWORD_CHARACTER_ENCODING.toString(), input);
+	}
+
+	public String getPasswordCharacterEncoding() {
+		return getValue(Keys.PASSWORD_CHARACTER_ENCODING.toString());
+	};
+
+	public void setPedantic(String input) {
+		setValue(Keys.PEDANTIC.toString(), input);
+	}
+
+	public String getPedantic() {
+		return getValue(Keys.PEDANTIC.toString());
+	};
+
+	public void setPinGlobalTxToPhysicalConnection(String input) {
+		setValue(Keys.PIN_GLOBAL_TX_TO_PHYSICAL_CONNECTION.toString(), input);
+	}
+
+	public String getPinGlobalTxToPhysicalConnection() {
+		return getValue(Keys.PIN_GLOBAL_TX_TO_PHYSICAL_CONNECTION.toString());
+	};
+
+	public void setPopulateInsertRowWithDefaultValues(String input) {
+		setValue(Keys.POPULATE_INSERT_ROW_WITH_DEFAULT_VALUES.toString(), input);
+	}
+
+	public String getPopulateInsertRowWithDefaultValues() {
+		return getValue(Keys.POPULATE_INSERT_ROW_WITH_DEFAULT_VALUES.toString());
+	};
+
+	public void setPrepStmtCacheSize(String input) {
+		setValue(Keys.PREP_STMT_CACHE_SIZE.toString(), input);
+	}
+
+	public String getPrepStmtCacheSize() {
+		return getValue(Keys.PREP_STMT_CACHE_SIZE.toString());
+	};
+
+	public void setPrepStmtCacheSqlLimit(String input) {
+		setValue(Keys.PREP_STMT_CACHE_SQL_LIMIT.toString(), input);
+	}
+
+	public String getPrepStmtCacheSqlLimit() {
+		return getValue(Keys.PREP_STMT_CACHE_SQL_LIMIT.toString());
+	};
+
+	public void setProcessEscapeCodesForPrepStmts(String input) {
+		setValue(Keys.PROCESS_ESCAPE_CODES_FOR_PREP_STMTS.toString(), input);
+	}
+
+	public String getProcessEscapeCodesForPrepStmts() {
+		return getValue(Keys.PROCESS_ESCAPE_CODES_FOR_PREP_STMTS.toString());
+	};
+
+	public void setProfileSQL(String input) {
+		setValue(Keys.PROFILE_S_Q_L.toString(), input);
+	}
+
+	public String getProfileSQL() {
+		return getValue(Keys.PROFILE_S_Q_L.toString());
+	};
+
+	public void setProfileSql(String input) {
+		setValue(Keys.PROFILE_SQL.toString(), input);
+	}
+
+	public String getProfileSql() {
+		return getValue(Keys.PROFILE_SQL.toString());
+	};
+
+	public void setProfilerEventHandler(String input) {
+		setValue(Keys.PROFILER_EVENT_HANDLER.toString(), input);
+	}
+
+	public String getProfilerEventHandler() {
+		return getValue(Keys.PROFILER_EVENT_HANDLER.toString());
+	};
+
+	public void setPropertiesTransform(String input) {
+		setValue(Keys.PROPERTIES_TRANSFORM.toString(), input);
+	}
+
+	public String getPropertiesTransform() {
+		return getValue(Keys.PROPERTIES_TRANSFORM.toString());
+	};
+
+	public void setQueriesBeforeRetryMaster(String input) {
+		setValue(Keys.QUERIES_BEFORE_RETRY_MASTER.toString(), input);
+	}
+
+	public String getQueriesBeforeRetryMaster() {
+		return getValue(Keys.QUERIES_BEFORE_RETRY_MASTER.toString());
+	};
+
+	public void setQueryTimeoutKillsConnection(String input) {
+		setValue(Keys.QUERY_TIMEOUT_KILLS_CONNECTION.toString(), input);
+	}
+
+	public String getQueryTimeoutKillsConnection() {
+		return getValue(Keys.QUERY_TIMEOUT_KILLS_CONNECTION.toString());
+	};
+
+	public void setReadOnlyPropagatesToServer(String input) {
+		setValue(Keys.READ_ONLY_PROPAGATES_TO_SERVER.toString(), input);
+	}
+
+	public String getReadOnlyPropagatesToServer() {
+		return getValue(Keys.READ_ONLY_PROPAGATES_TO_SERVER.toString());
+	};
+
+	public void setReconnectAtTxEnd(String input) {
+		setValue(Keys.RECONNECT_AT_TX_END.toString(), input);
+	}
+
+	public String getReconnectAtTxEnd() {
+		return getValue(Keys.RECONNECT_AT_TX_END.toString());
+	};
+
+	public void setRelaxAutoCommit(String input) {
+		setValue(Keys.RELAX_AUTO_COMMIT.toString(), input);
+	}
+
+	public String getRelaxAutoCommit() {
+		return getValue(Keys.RELAX_AUTO_COMMIT.toString());
+	};
+
+	public void setReplicationEnableJMX(String input) {
+		setValue(Keys.REPLICATION_ENABLE_J_M_X.toString(), input);
+	}
+
+	public String getReplicationEnableJMX() {
+		return getValue(Keys.REPLICATION_ENABLE_J_M_X.toString());
+	};
+
+	public void setReportMetricsIntervalMillis(String input) {
+		setValue(Keys.REPORT_METRICS_INTERVAL_MILLIS.toString(), input);
+	}
+
+	public String getReportMetricsIntervalMillis() {
+		return getValue(Keys.REPORT_METRICS_INTERVAL_MILLIS.toString());
+	};
+
+	public void setRequireSSL(String input) {
+		setValue(Keys.REQUIRE_S_S_L.toString(), input);
+	}
+
+	public String getRequireSSL() {
+		return getValue(Keys.REQUIRE_S_S_L.toString());
+	};
+
+	public void setResourceId(String input) {
+		setValue(Keys.RESOURCE_ID.toString(), input);
+	}
+
+	public String getResourceId() {
+		return getValue(Keys.RESOURCE_ID.toString());
+	};
+
+	public void setResultSetSizeThreshold(String input) {
+		setValue(Keys.RESULT_SET_SIZE_THRESHOLD.toString(), input);
+	}
+
+	public String getResultSetSizeThreshold() {
+		return getValue(Keys.RESULT_SET_SIZE_THRESHOLD.toString());
+	};
+
+	public void setRetainStatementAfterResultSetClose(String input) {
+		setValue(Keys.RETAIN_STATEMENT_AFTER_RESULT_SET_CLOSE.toString(), input);
+	}
+
+	public String getRetainStatementAfterResultSetClose() {
+		return getValue(Keys.RETAIN_STATEMENT_AFTER_RESULT_SET_CLOSE.toString());
+	};
+
+	public void setRetriesAllDown(String input) {
+		setValue(Keys.RETRIES_ALL_DOWN.toString(), input);
+	}
+
+	public String getRetriesAllDown() {
+		return getValue(Keys.RETRIES_ALL_DOWN.toString());
+	};
+
+	public void setRewriteBatchedStatements(String input) {
+		setValue(Keys.REWRITE_BATCHED_STATEMENTS.toString(), input);
+	}
+
+	public String getRewriteBatchedStatements() {
+		return getValue(Keys.REWRITE_BATCHED_STATEMENTS.toString());
+	};
+
+	public void setRollbackOnPooledClose(String input) {
+		setValue(Keys.ROLLBACK_ON_POOLED_CLOSE.toString(), input);
+	}
+
+	public String getRollbackOnPooledClose() {
+		return getValue(Keys.ROLLBACK_ON_POOLED_CLOSE.toString());
+	};
+
+	public void setRoundRobinLoadBalance(String input) {
+		setValue(Keys.ROUND_ROBIN_LOAD_BALANCE.toString(), input);
+	}
+
+	public String getRoundRobinLoadBalance() {
+		return getValue(Keys.ROUND_ROBIN_LOAD_BALANCE.toString());
+	};
+
+	public void setRunningCTS13(String input) {
+		setValue(Keys.RUNNING_C_T_S13.toString(), input);
+	}
+
+	public String getRunningCTS13() {
+		return getValue(Keys.RUNNING_C_T_S13.toString());
+	};
+
+	public void setSecondsBeforeRetryMaster(String input) {
+		setValue(Keys.SECONDS_BEFORE_RETRY_MASTER.toString(), input);
+	}
+
+	public String getSecondsBeforeRetryMaster() {
+		return getValue(Keys.SECONDS_BEFORE_RETRY_MASTER.toString());
+	};
+
+	public void setSelfDestructOnPingMaxOperations(String input) {
+		setValue(Keys.SELF_DESTRUCT_ON_PING_MAX_OPERATIONS.toString(), input);
+	}
+
+	public String getSelfDestructOnPingMaxOperations() {
+		return getValue(Keys.SELF_DESTRUCT_ON_PING_MAX_OPERATIONS.toString());
+	};
+
+	public void setSelfDestructOnPingSecondsLifetime(String input) {
+		setValue(Keys.SELF_DESTRUCT_ON_PING_SECONDS_LIFETIME.toString(), input);
+	}
+
+	public String getSelfDestructOnPingSecondsLifetime() {
+		return getValue(Keys.SELF_DESTRUCT_ON_PING_SECONDS_LIFETIME.toString());
+	};
+
+	public void setServerConfigCacheFactory(String input) {
+		setValue(Keys.SERVER_CONFIG_CACHE_FACTORY.toString(), input);
+	}
+
+	public String getServerConfigCacheFactory() {
+		return getValue(Keys.SERVER_CONFIG_CACHE_FACTORY.toString());
+	};
+
+	public void setServerRSAPublicKeyFile(String input) {
+		setValue(Keys.SERVER_R_S_A_PUBLIC_KEY_FILE.toString(), input);
+	}
+
+	public String getServerRSAPublicKeyFile() {
+		return getValue(Keys.SERVER_R_S_A_PUBLIC_KEY_FILE.toString());
+	};
+
+	public void setServerTimezone(String input) {
+		setValue(Keys.SERVER_TIMEZONE.toString(), input);
+	}
+
+	public String getServerTimezone() {
+		return getValue(Keys.SERVER_TIMEZONE.toString());
+	};
+
+	public void setSessionVariables(String input) {
+		setValue(Keys.SESSION_VARIABLES.toString(), input);
+	}
+
+	public String getSessionVariables() {
+		return getValue(Keys.SESSION_VARIABLES.toString());
+	};
+
+	public void setSlowQueryThresholdMillis(String input) {
+		setValue(Keys.SLOW_QUERY_THRESHOLD_MILLIS.toString(), input);
+	}
+
+	public String getSlowQueryThresholdMillis() {
+		return getValue(Keys.SLOW_QUERY_THRESHOLD_MILLIS.toString());
+	};
+
+	public void setSlowQueryThresholdNanos(String input) {
+		setValue(Keys.SLOW_QUERY_THRESHOLD_NANOS.toString(), input);
+	}
+
+	public String getSlowQueryThresholdNanos() {
+		return getValue(Keys.SLOW_QUERY_THRESHOLD_NANOS.toString());
+	};
+
+	public void setSocketFactory(String input) {
+		setValue(Keys.SOCKET_FACTORY.toString(), input);
+	}
+
+	public String getSocketFactory() {
+		return getValue(Keys.SOCKET_FACTORY.toString());
+	};
+
+	public void setSocketTimeout(String input) {
+		setValue(Keys.SOCKET_TIMEOUT.toString(), input);
+	}
+
+	public String getSocketTimeout() {
+		return getValue(Keys.SOCKET_TIMEOUT.toString());
+	};
+
+	public void setSocksProxyHost(String input) {
+		setValue(Keys.SOCKS_PROXY_HOST.toString(), input);
+	}
+
+	public String getSocksProxyHost() {
+		return getValue(Keys.SOCKS_PROXY_HOST.toString());
+	};
+
+	public void setSocksProxyPort(String input) {
+		setValue(Keys.SOCKS_PROXY_PORT.toString(), input);
+	}
+
+	public String getSocksProxyPort() {
+		return getValue(Keys.SOCKS_PROXY_PORT.toString());
+	};
+
+	public void setStatementInterceptors(String input) {
+		setValue(Keys.STATEMENT_INTERCEPTORS.toString(), input);
+	}
+
+	public String getStatementInterceptors() {
+		return getValue(Keys.STATEMENT_INTERCEPTORS.toString());
+	};
+
+	public void setStrictFloatingPoint(String input) {
+		setValue(Keys.STRICT_FLOATING_POINT.toString(), input);
+	}
+
+	public String getStrictFloatingPoint() {
+		return getValue(Keys.STRICT_FLOATING_POINT.toString());
+	};
+
+	public void setStrictUpdates(String input) {
+		setValue(Keys.STRICT_UPDATES.toString(), input);
+	}
+
+	public String getStrictUpdates() {
+		return getValue(Keys.STRICT_UPDATES.toString());
+	};
+
+	public void setTcpKeepAlive(String input) {
+		setValue(Keys.TCP_KEEP_ALIVE.toString(), input);
+	}
+
+	public String getTcpKeepAlive() {
+		return getValue(Keys.TCP_KEEP_ALIVE.toString());
+	};
+
+	public void setTcpNoDelay(String input) {
+		setValue(Keys.TCP_NO_DELAY.toString(), input);
+	}
+
+	public String getTcpNoDelay() {
+		return getValue(Keys.TCP_NO_DELAY.toString());
+	};
+
+	public void setTcpRcvBuf(String input) {
+		setValue(Keys.TCP_RCV_BUF.toString(), input);
+	}
+
+	public String getTcpRcvBuf() {
+		return getValue(Keys.TCP_RCV_BUF.toString());
+	};
+
+	public void setTcpSndBuf(String input) {
+		setValue(Keys.TCP_SND_BUF.toString(), input);
+	}
+
+	public String getTcpSndBuf() {
+		return getValue(Keys.TCP_SND_BUF.toString());
+	};
+
+	public void setTcpTrafficClass(String input) {
+		setValue(Keys.TCP_TRAFFIC_CLASS.toString(), input);
+	}
+
+	public String getTcpTrafficClass() {
+		return getValue(Keys.TCP_TRAFFIC_CLASS.toString());
+	};
+
+	public void setTinyInt1isBit(String input) {
+		setValue(Keys.TINY_INT1IS_BIT.toString(), input);
+	}
+
+	public String getTinyInt1isBit() {
+		return getValue(Keys.TINY_INT1IS_BIT.toString());
+	};
+
+	public void setTraceProtocol(String input) {
+		setValue(Keys.TRACE_PROTOCOL.toString(), input);
+	}
+
+	public String getTraceProtocol() {
+		return getValue(Keys.TRACE_PROTOCOL.toString());
+	};
+
+	public void setTransformedBitIsBoolean(String input) {
+		setValue(Keys.TRANSFORMED_BIT_IS_BOOLEAN.toString(), input);
+	}
+
+	public String getTransformedBitIsBoolean() {
+		return getValue(Keys.TRANSFORMED_BIT_IS_BOOLEAN.toString());
+	};
+
+	public void setTreatUtilDateAsTimestamp(String input) {
+		setValue(Keys.TREAT_UTIL_DATE_AS_TIMESTAMP.toString(), input);
+	}
+
+	public String getTreatUtilDateAsTimestamp() {
+		return getValue(Keys.TREAT_UTIL_DATE_AS_TIMESTAMP.toString());
+	};
+
+	public void setTrustCertificateKeyStorePassword(String input) {
+		setValue(Keys.TRUST_CERTIFICATE_KEY_STORE_PASSWORD.toString(), input);
+	}
+
+	public String getTrustCertificateKeyStorePassword() {
+		return getValue(Keys.TRUST_CERTIFICATE_KEY_STORE_PASSWORD.toString());
+	};
+
+	public void setTrustCertificateKeyStoreType(String input) {
+		setValue(Keys.TRUST_CERTIFICATE_KEY_STORE_TYPE.toString(), input);
+	}
+
+	public String getTrustCertificateKeyStoreType() {
+		return getValue(Keys.TRUST_CERTIFICATE_KEY_STORE_TYPE.toString());
+	};
+
+	public void setTrustCertificateKeyStoreUrl(String input) {
+		setValue(Keys.TRUST_CERTIFICATE_KEY_STORE_URL.toString(), input);
+	}
+
+	public String getTrustCertificateKeyStoreUrl() {
+		return getValue(Keys.TRUST_CERTIFICATE_KEY_STORE_URL.toString());
+	};
+
+	public void setUltraDevHack(String input) {
+		setValue(Keys.ULTRA_DEV_HACK.toString(), input);
+	}
+
+	public String getUltraDevHack() {
+		return getValue(Keys.ULTRA_DEV_HACK.toString());
+	};
+
+	public void setUseAffectedRows(String input) {
+		setValue(Keys.USE_AFFECTED_ROWS.toString(), input);
+	}
+
+	public String getUseAffectedRows() {
+		return getValue(Keys.USE_AFFECTED_ROWS.toString());
+	};
+
+	public void setUseBlobToStoreUTF8OutsideBMP(String input) {
+		setValue(Keys.USE_BLOB_TO_STORE_U_T_F8_OUTSIDE_B_M_P.toString(), input);
+	}
+
+	public String getUseBlobToStoreUTF8OutsideBMP() {
+		return getValue(Keys.USE_BLOB_TO_STORE_U_T_F8_OUTSIDE_B_M_P.toString());
+	};
+
+	public void setUseColumnNamesInFindColumn(String input) {
+		setValue(Keys.USE_COLUMN_NAMES_IN_FIND_COLUMN.toString(), input);
+	}
+
+	public String getUseColumnNamesInFindColumn() {
+		return getValue(Keys.USE_COLUMN_NAMES_IN_FIND_COLUMN.toString());
+	};
+
+	public void setUseCompression(String input) {
+		setValue(Keys.USE_COMPRESSION.toString(), input);
+	}
+
+	public String getUseCompression() {
+		return getValue(Keys.USE_COMPRESSION.toString());
+	};
+
+	public void setUseConfigs(String input) {
+		setValue(Keys.USE_CONFIGS.toString(), input);
+	}
+
+	public String getUseConfigs() {
+		return getValue(Keys.USE_CONFIGS.toString());
+	};
+
+	public void setUseCursorFetch(String input) {
+		setValue(Keys.USE_CURSOR_FETCH.toString(), input);
+	}
+
+	public String getUseCursorFetch() {
+		return getValue(Keys.USE_CURSOR_FETCH.toString());
+	};
+
+	public void setUseDirectRowUnpack(String input) {
+		setValue(Keys.USE_DIRECT_ROW_UNPACK.toString(), input);
+	}
+
+	public String getUseDirectRowUnpack() {
+		return getValue(Keys.USE_DIRECT_ROW_UNPACK.toString());
+	};
+
+	public void setUseDynamicCharsetInfo(String input) {
+		setValue(Keys.USE_DYNAMIC_CHARSET_INFO.toString(), input);
+	}
+
+	public String getUseDynamicCharsetInfo() {
+		return getValue(Keys.USE_DYNAMIC_CHARSET_INFO.toString());
+	};
+
+	public void setUseFastDateParsing(String input) {
+		setValue(Keys.USE_FAST_DATE_PARSING.toString(), input);
+	}
+
+	public String getUseFastDateParsing() {
+		return getValue(Keys.USE_FAST_DATE_PARSING.toString());
+	};
+
+	public void setUseFastIntParsing(String input) {
+		setValue(Keys.USE_FAST_INT_PARSING.toString(), input);
+	}
+
+	public String getUseFastIntParsing() {
+		return getValue(Keys.USE_FAST_INT_PARSING.toString());
+	};
+
+	public void setUseGmtMillisForDatetimes(String input) {
+		setValue(Keys.USE_GMT_MILLIS_FOR_DATETIMES.toString(), input);
+	}
+
+	public String getUseGmtMillisForDatetimes() {
+		return getValue(Keys.USE_GMT_MILLIS_FOR_DATETIMES.toString());
+	};
+
+	public void setUseHostsInPrivileges(String input) {
+		setValue(Keys.USE_HOSTS_IN_PRIVILEGES.toString(), input);
+	}
+
+	public String getUseHostsInPrivileges() {
+		return getValue(Keys.USE_HOSTS_IN_PRIVILEGES.toString());
+	};
+
+	public void setUseInformationSchema(String input) {
+		setValue(Keys.USE_INFORMATION_SCHEMA.toString(), input);
+	}
+
+	public String getUseInformationSchema() {
+		return getValue(Keys.USE_INFORMATION_SCHEMA.toString());
+	};
+
+	public void setUseJDBCCompliantTimezoneShift(String input) {
+		setValue(Keys.USE_J_D_B_C_COMPLIANT_TIMEZONE_SHIFT.toString(), input);
+	}
+
+	public String getUseJDBCCompliantTimezoneShift() {
+		return getValue(Keys.USE_J_D_B_C_COMPLIANT_TIMEZONE_SHIFT.toString());
+	};
+
+	public void setUseJvmCharsetConverters(String input) {
+		setValue(Keys.USE_JVM_CHARSET_CONVERTERS.toString(), input);
+	}
+
+	public String getUseJvmCharsetConverters() {
+		return getValue(Keys.USE_JVM_CHARSET_CONVERTERS.toString());
+	};
+
+	public void setUseLegacyDatetimeCode(String input) {
+		setValue(Keys.USE_LEGACY_DATETIME_CODE.toString(), input);
+	}
+
+	public String getUseLegacyDatetimeCode() {
+		return getValue(Keys.USE_LEGACY_DATETIME_CODE.toString());
+	};
+
+	public void setUseLocalSessionState(String input) {
+		setValue(Keys.USE_LOCAL_SESSION_STATE.toString(), input);
+	}
+
+	public String getUseLocalSessionState() {
+		return getValue(Keys.USE_LOCAL_SESSION_STATE.toString());
+	};
+
+	public void setUseLocalTransactionState(String input) {
+		setValue(Keys.USE_LOCAL_TRANSACTION_STATE.toString(), input);
+	}
+
+	public String getUseLocalTransactionState() {
+		return getValue(Keys.USE_LOCAL_TRANSACTION_STATE.toString());
+	};
+
+	public void setUseNanosForElapsedTime(String input) {
+		setValue(Keys.USE_NANOS_FOR_ELAPSED_TIME.toString(), input);
+	}
+
+	public String getUseNanosForElapsedTime() {
+		return getValue(Keys.USE_NANOS_FOR_ELAPSED_TIME.toString());
+	};
+
+	public void setUseOldAliasMetadataBehavior(String input) {
+		setValue(Keys.USE_OLD_ALIAS_METADATA_BEHAVIOR.toString(), input);
+	}
+
+	public String getUseOldAliasMetadataBehavior() {
+		return getValue(Keys.USE_OLD_ALIAS_METADATA_BEHAVIOR.toString());
+	};
+
+	public void setUseOldUTF8Behavior(String input) {
+		setValue(Keys.USE_OLD_U_T_F8_BEHAVIOR.toString(), input);
+	}
+
+	public String getUseOldUTF8Behavior() {
+		return getValue(Keys.USE_OLD_U_T_F8_BEHAVIOR.toString());
+	};
+
+	public void setUseOnlyServerErrorMessages(String input) {
+		setValue(Keys.USE_ONLY_SERVER_ERROR_MESSAGES.toString(), input);
+	}
+
+	public String getUseOnlyServerErrorMessages() {
+		return getValue(Keys.USE_ONLY_SERVER_ERROR_MESSAGES.toString());
+	};
+
+	public void setUseReadAheadInput(String input) {
+		setValue(Keys.USE_READ_AHEAD_INPUT.toString(), input);
+	}
+
+	public String getUseReadAheadInput() {
+		return getValue(Keys.USE_READ_AHEAD_INPUT.toString());
+	};
+
+	public void setUseSSL(String input) {
+		setValue(Keys.USE_S_S_L.toString(), input);
+	}
+
+	public String getUseSSL() {
+		return getValue(Keys.USE_S_S_L.toString());
+	};
+
+	public void setUseSSPSCompatibleTimezoneShift(String input) {
+		setValue(Keys.USE_S_S_P_S_COMPATIBLE_TIMEZONE_SHIFT.toString(), input);
+	}
+
+	public String getUseSSPSCompatibleTimezoneShift() {
+		return getValue(Keys.USE_S_S_P_S_COMPATIBLE_TIMEZONE_SHIFT.toString());
+	};
+
+	public void setUseServerPrepStmts(String input) {
+		setValue(Keys.USE_SERVER_PREP_STMTS.toString(), input);
+	}
+
+	public String getUseServerPrepStmts() {
+		return getValue(Keys.USE_SERVER_PREP_STMTS.toString());
+	};
+
+	public void setUseSqlStateCodes(String input) {
+		setValue(Keys.USE_SQL_STATE_CODES.toString(), input);
+	}
+
+	public String getUseSqlStateCodes() {
+		return getValue(Keys.USE_SQL_STATE_CODES.toString());
+	};
+
+	public void setUseStreamLengthsInPrepStmts(String input) {
+		setValue(Keys.USE_STREAM_LENGTHS_IN_PREP_STMTS.toString(), input);
+	}
+
+	public String getUseStreamLengthsInPrepStmts() {
+		return getValue(Keys.USE_STREAM_LENGTHS_IN_PREP_STMTS.toString());
+	};
+
+	public void setUseTimezone(String input) {
+		setValue(Keys.USE_TIMEZONE.toString(), input);
+	}
+
+	public String getUseTimezone() {
+		return getValue(Keys.USE_TIMEZONE.toString());
+	};
+
+	public void setUseUnbufferedInput(String input) {
+		setValue(Keys.USE_UNBUFFERED_INPUT.toString(), input);
+	}
+
+	public String getUseUnbufferedInput() {
+		return getValue(Keys.USE_UNBUFFERED_INPUT.toString());
+	};
+
+	public void setUseUnicode(String input) {
+		setValue(Keys.USE_UNICODE.toString(), input);
+	}
+
+	public String getUseUnicode() {
+		return getValue(Keys.USE_UNICODE.toString());
+	};
+
+	public void setUseUsageAdvisor(String input) {
+		setValue(Keys.USE_USAGE_ADVISOR.toString(), input);
+	}
+
+	public String getUseUsageAdvisor() {
+		return getValue(Keys.USE_USAGE_ADVISOR.toString());
+	};
+
+	public void setUser(String input) {
+		setValue(Keys.USER.toString(), input);
+	}
+
+	public String getUser() {
+		return getValue(Keys.USER.toString());
+	};
+
+	public void setUtf8OutsideBmpExcludedColumnNamePattern(String input) {
+		setValue(Keys.UTF8_OUTSIDE_BMP_EXCLUDED_COLUMN_NAME_PATTERN.toString(),
+				input);
+	}
+
+	public String getUtf8OutsideBmpExcludedColumnNamePattern() {
+		return getValue(Keys.UTF8_OUTSIDE_BMP_EXCLUDED_COLUMN_NAME_PATTERN
+				.toString());
+	};
+
+	public void setUtf8OutsideBmpIncludedColumnNamePattern(String input) {
+		setValue(Keys.UTF8_OUTSIDE_BMP_INCLUDED_COLUMN_NAME_PATTERN.toString(),
+				input);
+	}
+
+	public String getUtf8OutsideBmpIncludedColumnNamePattern() {
+		return getValue(Keys.UTF8_OUTSIDE_BMP_INCLUDED_COLUMN_NAME_PATTERN
+				.toString());
+	};
+
+	public void setVerifyServerCertificate(String input) {
+		setValue(Keys.VERIFY_SERVER_CERTIFICATE.toString(), input);
+	}
+
+	public String getVerifyServerCertificate() {
+		return getValue(Keys.VERIFY_SERVER_CERTIFICATE.toString());
+	};
+
+	public void setZeroDateTimeBehavior(String input) {
+		setValue(Keys.ZERO_DATE_TIME_BEHAVIOR.toString(), input);
+	}
+
+	public String getZeroDateTimeBehavior() {
+		return getValue(Keys.ZERO_DATE_TIME_BEHAVIOR.toString());
+	};
+
+	public HashMap<String, String> filterProperties() {
+		return filterProperties(OSGiUtil.getEnumValues(Keys.class));
+	}
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/dispose/AbstractDisposable.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/dispose/AbstractDisposable.java
new file mode 100644
index 0000000..dfef3c5
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/dispose/AbstractDisposable.java
@@ -0,0 +1,170 @@
+/**
+ * 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.dispose;
+
+import java.util.ArrayList;
+import java.util.List;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Base implementation for {@link IDisposable}. Subclasses should override
+ * {@link #internalDispose()} to dispose their content.
+ */
+public abstract class AbstractDisposable implements IDisposable {
+
+	/** The disposed. */
+	private volatile boolean disposed;
+	
+	/** The disposing. */
+	private volatile boolean disposing;
+	
+	/** The dispose listeners. */
+	private List<IDisposable.Listener> disposeListeners;
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public boolean isDisposed() {
+		return disposed;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public boolean isDisposing() {
+		return disposing;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void dispose() {
+		// check disposed first
+		if (!canDispose()) {
+			return;
+		}
+
+		synchronized (this) {
+			// check disposed again for threads that have been waiting in lock
+			if (!canDispose()) {
+				return;
+			}
+
+			try {
+				disposing = true;
+
+				if (!isDisposed()) {
+					internalDispose();
+				}
+
+				// first call the dispose listener and the set disposed=true
+				notifyDisposeListeners();
+
+				// clear the dispose listener
+				//
+				if (disposeListeners != null) {
+					disposeListeners.clear();
+					disposeListeners = null;
+				}
+
+			} finally {
+				disposed = true;
+				disposing = false;
+			}
+		}
+	}
+
+	/**
+	 * Returns true if not disposing and not disposed.
+	 *
+	 * @return true, if successful
+	 */
+	protected boolean canDispose() {
+		return !isDisposing() && !isDisposed();
+	}
+
+	/**
+	 * Should be overridden by subclasses to dispose their content.
+	 */
+	protected abstract void internalDispose();
+
+	/**
+	 * Checks whether the element is disposed. Throws a DisposeException is the
+	 * element is disposed.
+	 *
+	 * @throws DisposeException the dispose exception
+	 */
+	protected void checkDisposed() {
+		IDisposable.DisposableUtil.checkDisposed(this);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.dispose.IDisposable#addDisposeListener(org.eclipse.osbp.runtime.common.dispose.IDisposable.Listener)
+	 */
+	@Override
+	public void addDisposeListener(Listener listener) {
+		checkDisposed();
+
+		if (listener == null) {
+			return;
+		}
+
+		if (disposeListeners == null) {
+			disposeListeners = new ArrayList<IDisposable.Listener>();
+		}
+
+		if (!disposeListeners.contains(listener)) {
+			disposeListeners.add(listener);
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.dispose.IDisposable#removeDisposeListener(org.eclipse.osbp.runtime.common.dispose.IDisposable.Listener)
+	 */
+	@Override
+	public void removeDisposeListener(Listener listener) {
+		checkDisposed();
+
+		if (listener == null || disposeListeners == null) {
+			return;
+		}
+
+		disposeListeners.remove(listener);
+	}
+
+	/**
+	 * Notifies all listeners about the disposal of that elemenyElement.
+	 */
+	protected void notifyDisposeListeners() {
+		if (disposeListeners == null) {
+			return;
+		}
+
+		for (IDisposable.Listener listener : disposeListeners
+				.toArray(new IDisposable.Listener[disposeListeners.size()])) {
+			listener.notifyDisposed(this);
+		}
+	}
+
+	/**
+	 * Returns a mutable list of dispose listener.
+	 * 
+	 * @return the disposeListeners
+	 */
+	protected List<IDisposable.Listener> getDisposeListeners() {
+		return disposeListeners != null ? new ArrayList<IDisposable.Listener>(
+				disposeListeners) : new ArrayList<IDisposable.Listener>();
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/dispose/IDisposable.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/dispose/IDisposable.java
new file mode 100644
index 0000000..c8125a1
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/dispose/IDisposable.java
@@ -0,0 +1,113 @@
+/**
+ * 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.dispose;
+
+/**
+ * Disposable objects can be destroyed. Which means, that the state is invalid
+ * for further use and internal references are prepared for garbage collection.<br>
+ * Object that have been disposed once cannot be used anymore. The creation of a
+ * new object is required.
+ * <p>
+ * No implement by clients.
+ */
+public interface IDisposable {
+
+	/**
+	 * Returns true, during the disposal process.
+	 * 
+	 * @return disposing
+	 */
+	boolean isDisposing();
+
+	/**
+	 * Returns true, if this object was already disposed.
+	 * 
+	 * @return disposed
+	 */
+	boolean isDisposed();
+
+	/**
+	 * If called, the element will be disposed. All created ui elements will be
+	 * removed from its parent and this class will be prepared for garbage
+	 * collection.<br>
+	 * NO further use is possible. Creation of a new element required.
+	 * <p>
+	 * Calling this method twice is allowed.
+	 */
+	void dispose();
+
+	/**
+	 * Adds a listener which will be notified if the object was disposed.<br>
+	 * Adding a listener twice has no effect.
+	 * 
+	 * @param listener
+	 *            Listener to be added
+	 */
+	void addDisposeListener(IDisposable.Listener listener);
+
+	/**
+	 * Remove the dispose listener.
+	 * 
+	 * @param listener
+	 *            Listener to be removed
+	 */
+	void removeDisposeListener(IDisposable.Listener listener);
+	
+	/**
+	 * A public helper util that can be used to check the dispose state of an
+	 * element.
+	 */
+	public static class DisposableUtil {
+
+		/**
+		 * Throws a {@link DisposeException} if the given object is disposed.
+		 * 
+		 * @param disposable
+		 *            The disposable object
+		 */
+		public static void checkDisposed(IDisposable disposable) {
+			if (disposable != null && disposable.isDisposed()) {
+				throw new DisposeException(disposable);
+			}
+		}
+	}
+
+	/**
+	 * Will be thrown if disposed objects are accessed.
+	 */
+	public static class DisposeException extends RuntimeException {
+
+		private static final long serialVersionUID = 23566849649196005L;
+
+		/**
+		 * Constructor.
+		 * 
+		 * @param o
+		 *            Any kind of object.
+		 */
+		public DisposeException(Object o) {
+			super(o.toString());
+		}
+	}
+
+	/**
+	 * A listener that is notified if the observed object was disposed.
+	 */
+	public interface Listener {
+		/**
+		 * Is called if the object was disposed.
+		 * 
+		 * @param notifier
+		 *            The object sending the dispose event.
+		 */
+		void notifyDisposed(IDisposable notifier);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/dispose/IReferenceCountable.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/dispose/IReferenceCountable.java
new file mode 100644
index 0000000..22d557a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/dispose/IReferenceCountable.java
@@ -0,0 +1,37 @@
+/**
+ * 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.dispose;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Implementations need to hold an internal counter about references to the
+ * instance. If usage reaches zero, the instance must be disposed.
+ */
+public interface IReferenceCountable {
+
+	/**
+	 * Returns the usage count.
+	 *
+	 * @return the usage count
+	 */
+	int getUsageCount();
+
+	/**
+	 * Increases the usage count.
+	 */
+	void increaseUsageCount();
+
+	/**
+	 * Decreases the usage count.
+	 */
+	void decreaseUsageCount();
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/event/IEventBroker.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/event/IEventBroker.java
new file mode 100644
index 0000000..f32b774
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/event/IEventBroker.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2013 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Florian Pirchner - adjustments to osbp code
+ *******************************************************************************/
+package org.eclipse.osbp.runtime.common.event;
+
+import java.util.Dictionary;
+import java.util.Map;
+
+import org.osgi.service.event.EventHandler;
+
+// TODO: Auto-generated Javadoc
+/**
+ * To obtain an instance of the event broker service from the #IEclipseContext context, use
+ * 
+ * <pre>
+ * (IEventBroker) context.get(IEventBroker.class.getName())
+ * </pre>
+ * 
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IEventBroker {
+
+	/**
+	 * The name of the default event attribute used to pass data.
+	 */
+	public String DATA = "org.eclipse.osbp.data"; //$NON-NLS-1$
+
+	/**
+	 * Publish event synchronously (the method does not return until the event is processed).
+	 * <p>
+	 * If data is a {@link Map} or a {@link Dictionary}, it is passed as is. Otherwise, a new Map is
+	 * constructed and its {@link #DATA} attribute is populated with this value.
+	 * 
+	 * 
+	 * @param topic
+	 *            topic of the event to be published
+	 * @param data
+	 *            data to be published with the event
+	 * @return <code>true</code> if this operation was performed successfully; <code>false</code>
+	 *         otherwise
+	 */
+	public boolean send(String topic, Object data);
+
+	/**
+	 * Publish event asynchronously (this method returns immediately).
+	 * <p>
+	 * If data is a {@link Map} or a {@link Dictionary}, it is passed as is. Otherwise, a new Map is
+	 * constructed and its {@link #DATA} attribute is populated with this value.
+	 * 
+	 * 
+	 * @param topic
+	 *            topic of the event to be published
+	 * @param data
+	 *            data to be published with the event
+	 * @return <code>true</code> if this operation was performed successfully; <code>false</code>
+	 *         otherwise
+	 */
+	public boolean post(String topic, Object data);
+
+	/**
+	 * Subscribe for events on the given topic.
+	 * <p>
+	 * The handler will be called on the UI thread.
+	 * 
+	 * 
+	 * @param topic
+	 *            topic of interest
+	 * @param eventHandler
+	 *            object to call when an event of interest arrives
+	 * @return <code>true</code> if this operation was performed successfully; <code>false</code>
+	 *         otherwise
+	 */
+	public boolean subscribe(String topic, EventHandler eventHandler);
+
+	/**
+	 * Subscribe for events on the given topic.
+	 * <p>
+	 * The handler will be called on the UI thread if "headless" is set to <code>true</code>.
+	 * 
+	 * 
+	 * @param topic
+	 *            topic of interest
+	 * @param filter
+	 *            the LDAP event filter
+	 * @param eventHandler
+	 *            object to call when an event of interest arrives
+	 * @param headless
+	 *            <code>true</code> if handing of the events does not require UI; <code>false</code>
+	 *            otherwise
+	 * @return <code>true</code> if this operation was performed successfully; <code>false</code>
+	 *         otherwise
+	 */
+	public boolean subscribe(String topic, String filter, EventHandler eventHandler,
+			boolean headless);
+
+	/**
+	 * Unsubscribe handler previously registered using {@link #subscribe(String, EventHandler)}.
+	 * 
+	 * @param eventHandler
+	 *            previously registered event handler
+	 * @return <code>true</code> if this operation was performed successfully; <code>false</code>
+	 *         otherwise
+	 */
+	public boolean unsubscribe(EventHandler eventHandler);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/extender/IExtenderConstants.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/extender/IExtenderConstants.java
new file mode 100644
index 0000000..dd4a661
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/extender/IExtenderConstants.java
@@ -0,0 +1,26 @@
+/**
+ *                                                                            
+ * 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 implementation 
+ */
+package org.eclipse.osbp.runtime.common.extender;
+
+/**
+ * The Interface IExtenderConstants.
+ */
+public interface IExtenderConstants {
+	
+	/** This Constant to be used for identification of DSL instance bundles. */
+	public static final String FACTORY_MODEL_EXTENDER = "Factory-Model";
+	/** This Constant to be used for identification of necessary runtime bundles. */
+	public static final String FACTORY_BUNDLE_EXTENDER = "Factory-Bundle";
+	/** This Constant to be used for identification of bundles containing translations. */
+	public static final String FACTORY_TRANSLATIONS = "Factory-Translations";
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/hash/HashUtil.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/hash/HashUtil.java
new file mode 100644
index 0000000..a016bf6
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/hash/HashUtil.java
@@ -0,0 +1,56 @@
+/**
+ * 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.hash;
+
+import com.google.common.hash.Hashing;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Common HashUtil.
+ */
+public class HashUtil {
+
+	/**
+	 * Creates a hash code for an object with the class name and objects
+	 * hashCode.
+	 * <p>
+	 * <i>org.eclipse.osbp.dtos.ItemDTO(id=17):</i>
+	 * <code>hash("org.eclipse.osbp.dtos.ItemDto({object.hashCode()})")</code>
+	 *
+	 * @param clazz the clazz
+	 * @param object the object
+	 * @return the string
+	 */
+	public static String createObjectWithIdHash(Class<?> clazz, Object object) {
+		return createObjectWithIdHash(clazz.getCanonicalName(), object);
+	}
+
+	/**
+	 * Creates a hash code for an object with the class name and objects
+	 * hashCode.
+	 * <p>
+	 * <i>org.eclipse.osbp.dtos.ItemDTO(id=17):</i>
+	 * <code>hash("org.eclipse.osbp.dtos.ItemDto({object.hashCode()})")</code>
+	 *
+	 * @param objectName the object name
+	 * @param object the object
+	 * @return the string
+	 */
+	public static String createObjectWithIdHash(String objectName, Object object) {
+		return Hashing
+				.sha1()
+				.hashBytes(
+						String.format("%s(%s)", objectName,
+								String.valueOf(object.hashCode())).getBytes())
+				.toString();
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/help/HelpRequestBuilder.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/help/HelpRequestBuilder.java
new file mode 100644
index 0000000..ee99dd1
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/help/HelpRequestBuilder.java
@@ -0,0 +1,100 @@
+/**
+ * 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.help;
+
+import java.util.HashMap;
+import java.util.Map;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class HelpRequestBuilder.
+ */
+public class HelpRequestBuilder {
+
+	/** The properties. */
+	private Map<String, Object> properties = new HashMap<String, Object>();
+
+	/**
+	 * Instantiates a new help request builder.
+	 */
+	private HelpRequestBuilder() {
+
+	}
+
+	/**
+	 * New request.
+	 *
+	 * @return the help request builder
+	 */
+	public static final HelpRequestBuilder newRequest() {
+		return new HelpRequestBuilder();
+	}
+
+	/**
+	 * The type of the help.
+	 *
+	 * @param requestType
+	 *            the request type
+	 * @return the help request builder
+	 */
+	public HelpRequestBuilder type(String requestType) {
+		properties.put(IHelpService.TYPE__TASK, requestType);
+		return this;
+	}
+
+	/**
+	 * An id which identifies the help for the requestType.
+	 *
+	 * @param id
+	 *            the id
+	 * @return the help request builder
+	 */
+	public HelpRequestBuilder id(Object id) {
+		properties.put(IHelpService.PROP__ID, id);
+		return this;
+	}
+
+	/**
+	 * Any kind of data.
+	 *
+	 * @param data
+	 *            the data
+	 * @return the help request builder
+	 */
+	public HelpRequestBuilder data(Object data) {
+		properties.put(IHelpService.PROP__DATA, data);
+		return this;
+	}
+
+	/**
+	 * Pass any property.
+	 *
+	 * @param key
+	 *            the key
+	 * @param value
+	 *            the value
+	 * @return the help request builder
+	 */
+	public HelpRequestBuilder property(String key, Object value) {
+		properties.put(key, value);
+		return this;
+	}
+
+	/**
+	 * Returns the resulting request parameters.
+	 *
+	 * @return the map
+	 */
+	public Map<String, Object> toRequest() {
+		return new HashMap<String, Object>(properties);
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/help/IHelpService.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/help/IHelpService.java
new file mode 100644
index 0000000..990f2db
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/help/IHelpService.java
@@ -0,0 +1,51 @@
+/**
+ * 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.help;
+
+import java.util.Map;
+
+/**
+ * The Interface IHelpService.
+ */
+public interface IHelpService {
+
+	/**
+	 * Is used in the properties to define the helpType.
+	 */
+	public static final String PROP__HELP_TYPE = "helpType";
+
+	/**
+	 * Is used in the properties to pass any kind of data.
+	 */
+	public static final String PROP__DATA = "data";
+
+	/**
+	 * Is used in the properties to define the id of the given data. The
+	 * implementation is responsible to provide a mechanism to convert the given
+	 * id to the underlying logic.
+	 */
+	public static final String PROP__ID = "id";
+
+	/**
+	 * The type of the help is a task help.
+	 */
+	public static final String TYPE__TASK = "task";
+
+	/**
+	 * Returns the help content in html format.
+	 *
+	 * @param request
+	 *            The help content to be converted to html
+	 * @return the html
+	 */
+	String getHtml(Map<String, Object> request);
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/i18n/I18nAdapter.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/i18n/I18nAdapter.java
new file mode 100644
index 0000000..72d9d7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/i18n/I18nAdapter.java
@@ -0,0 +1,22 @@
+/**
+ * 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.i18n;
+
+import org.eclipse.osbp.runtime.common.dispose.AbstractDisposable;
+
+public abstract class I18nAdapter extends AbstractDisposable implements
+		II18nService {
+
+	@Override
+	protected void internalDispose() {
+
+	}
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/i18n/I18nRegistry.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/i18n/I18nRegistry.java
new file mode 100644
index 0000000..9b245c8
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/i18n/I18nRegistry.java
@@ -0,0 +1,689 @@
+/**
+ * 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.i18n;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.collections.map.LRUMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+// TODO: Auto-generated Javadoc
+/**
+ * A registry that may be used to collect and access I18n translations based on
+ * URLs. The target of URLs need to be property files with the name pattern
+ * {file}_{language}-{country} (myI18n_de-DE). If no language and country are
+ * specified, the default locale is used.
+ */
+public class I18nRegistry {
+
+	/** The Constant LOGGER. */
+	private static final Logger LOGGER = LoggerFactory
+			.getLogger(I18nRegistry.class);
+
+	/** The fast access. */
+	private final LRUMap fastAccess = new LRUMap(1000);
+
+	/** The cache. */
+	private final Map<Locale, List<ResourceDescription>> cache = new HashMap<Locale, List<ResourceDescription>>();
+
+	/**
+	 * Instantiates a new i18n registry.
+	 */
+	public I18nRegistry() {
+
+	}
+
+	/**
+	 * Tries to find the translation for the given locale and key.
+	 *
+	 * @param locale
+	 *            the locale
+	 * @param key
+	 *            the key
+	 * @return the string
+	 */
+	public String findTranslation(Locale locale, String key) {
+		String result = tryFastAccess(locale, key);
+		if (result != null) {
+			return result;
+		}
+
+		AccessPath accessPath = computeBestMatchAccessPath(locale, key);
+		Translation translation = accessPath.getTranslation();
+		if (translation == null) {
+			return "";
+		}
+
+		return putFastAccess(translation.getLocale(), translation.getI18nKey(),
+				translation.getI18nValue());
+	}
+
+	/**
+	 * Try to find the translation in the fast access map.
+	 *
+	 * @param locale
+	 *            the locale
+	 * @param key
+	 *            the key
+	 * @return the string
+	 */
+	private String tryFastAccess(Locale locale, String key) {
+		List<Locale> computedLocales = computeLocales(locale);
+		for (Locale temp : computedLocales) {
+			String fastAccessKey = createFastAccessKey(temp, key);
+			String result = (String) fastAccess.get(fastAccessKey);
+			if (result != null) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Try to find the translation in the fast access map.
+	 *
+	 * @param locale
+	 *            the locale
+	 * @param key
+	 *            the key
+	 * @param translation
+	 *            the translation
+	 * @return the string
+	 */
+	private String putFastAccess(Locale locale, String key, String translation) {
+		fastAccess.put(createFastAccessKey(locale, key), translation);
+		return translation;
+	}
+
+	/**
+	 * Creates the key for the fast access map access.
+	 *
+	 * @param temp
+	 *            the temp
+	 * @param key
+	 *            the key
+	 * @return the string
+	 */
+	private String createFastAccessKey(Locale temp, String key) {
+		return temp.toLanguageTag() + ":" + key;
+	}
+
+	/**
+	 * Computes the access url.
+	 * <p>
+	 * Following order will be used:
+	 * <ol>
+	 * <li>Use given locale</li>
+	 * <li>Create more specific locale and repeat until default locale is
+	 * reached.</li>
+	 * </ul> </li>
+	 * </ol>
+	 *
+	 * @param locale
+	 *            the locale
+	 * @param key
+	 *            the key
+	 * @return the access path
+	 */
+	private AccessPath computeAccessPath(Locale locale, String key) {
+
+		String temp = key;
+		Matcher valueMatcher = null;
+		if (temp != null && !"".equals(temp)) {
+			temp = Pattern.quote(temp);
+			Pattern valuePattern = Pattern.compile(temp);
+			valueMatcher = valuePattern.matcher("");
+			valueMatcher.reset();
+		}
+
+		AccessPath url = new AccessPath();
+		int prio = 0;
+
+		List<Locale> computedLocales = computeLocales(locale);
+
+		for (Locale computedLocale : computedLocales) {
+			Accessor accessor = new Accessor(computedLocale, ++prio, temp,
+					valueMatcher);
+			url.addAccessor(accessor);
+		}
+
+		return url;
+	}
+
+	/**
+	 * Computes the access url to find the best matching element. See
+	 * {@link #computeAccessPath(IProject, Locale, String, String)}.
+	 *
+	 * @param locale
+	 *            the locale
+	 * @param key
+	 *            the key
+	 * @return the access path
+	 */
+	private AccessPath computeBestMatchAccessPath(Locale locale, String key) {
+		return computeAccessPath(locale, key);
+	}
+
+	/**
+	 * Computes all locales that should be added to AccessPath.
+	 *
+	 * @param locale
+	 *            the locale
+	 * @return the list
+	 */
+	private List<Locale> computeLocales(Locale locale) {
+		List<Locale> locales = new LinkedList<Locale>();
+
+		// Add first locale
+		locales.add(locale);
+
+		Locale temp = locale;
+		while (true) {
+			String tag = temp.toLanguageTag();
+			String[] segments = tag.split("-");
+			if (segments.length > 1) {
+				StringBuilder builder = new StringBuilder();
+				for (int i = 0; i < segments.length - 1; i++) {
+					if (builder.length() != 0) {
+						builder.append("-");
+					}
+					builder.append(segments[i]);
+				}
+				Locale moreGeneral = Locale.forLanguageTag(builder.toString());
+				locales.add(moreGeneral);
+				temp = moreGeneral;
+			} else {
+				break;
+			}
+		}
+
+		locales.add(new Locale(""));
+
+		return locales;
+	}
+
+	/**
+	 * Checks if is valid.
+	 *
+	 * @param result
+	 *            the result
+	 * @return true, if is valid
+	 */
+	private boolean isValid(String result) {
+		return result != null && !"".equals(result);
+	}
+
+	/**
+	 * Add a new resource to the cache.
+	 *
+	 * @param url
+	 *            the url
+	 */
+	public void addResource(URL url) {
+
+		Properties properties = new Properties();
+		try {
+			properties.load(url.openStream());
+		} catch (IOException e) {
+			LOGGER.error("{}", e);
+			return;
+		}
+
+		Locale locale = getLocale(url);
+		if (locale == null) {
+			LOGGER.error("Could not determine locale for " + url.toString());
+			return;
+		}
+
+		ResourceDescription description = new ResourceDescription(locale, url,
+				properties);
+		addResource(description);
+	}
+
+	/**
+	 * Gets the locale.
+	 *
+	 * @param url
+	 *            the url
+	 * @return the locale
+	 */
+	private Locale getLocale(URL url) {
+		String urlString = url.toString();
+		String file = urlString.substring(urlString.lastIndexOf("/") + 1);
+
+		String[] tokens = file.replace(".properties", "").split("_");
+		StringBuilder builder = new StringBuilder();
+		if (tokens.length >= 2) {
+			for (int i = 1; i < tokens.length; i++) {
+				if (builder.length() > 0) {
+					builder.append("-");
+				}
+				builder.append(tokens[i]);
+			}
+		}
+		Locale locale = Locale.forLanguageTag(builder.toString());
+		return locale;
+	}
+
+	/**
+	 * Add a new resource to the cache.
+	 *
+	 * @param description
+	 *            the description
+	 */
+	public void addResource(ResourceDescription description) {
+		synchronized (cache) {
+			if (!cache.containsKey(description.getLocale())) {
+				cache.put(description.getLocale(),
+						new ArrayList<ResourceDescription>());
+			}
+
+			List<ResourceDescription> descs = cache
+					.get(description.getLocale());
+			if (!descs.contains(description)) {
+				descs.add(description);
+			}
+		}
+
+		// clear the fast access cache
+		fastAccess.clear();
+	}
+
+	/**
+	 * Gets the resource descriptions.
+	 *
+	 * @param locale
+	 *            the locale
+	 * @return the resource descriptions
+	 */
+	private List<ResourceDescription> getResourceDescriptions(Locale locale) {
+		if (cache.containsKey(locale)) {
+			return new ArrayList<I18nRegistry.ResourceDescription>(
+					cache.get(locale));
+		} else {
+			return Collections.emptyList();
+		}
+	}
+
+	/**
+	 * Removes the given translations.
+	 *
+	 * @param locale
+	 *            the locale
+	 * @param url
+	 *            the url
+	 */
+	public void removeResource(Locale locale, URL url) {
+		if (!cache.containsKey(locale)) {
+			return;
+		}
+
+		// clear the fast access cache
+		fastAccess.clear();
+
+		// remove the resource from the builder
+		synchronized (cache) {
+			List<ResourceDescription> descs = cache.get(locale);
+			for (Iterator<ResourceDescription> iterator = descs.iterator(); iterator
+					.hasNext();) {
+				ResourceDescription desc = iterator.next();
+				try {
+					// avoid lookups ->
+					// http://michaelscharf.blogspot.co.at/2006/11/javaneturlequals-and-hashcode-make.html
+					URI uri = url.toURI();
+					URI descURI = desc.getURI();
+					if (descURI != null && descURI.equals(uri)) {
+						iterator.remove();
+					}
+				} catch (URISyntaxException e) {
+					LOGGER.error("{}", e);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Removes the translations with the given URL.
+	 *
+	 * @param url
+	 *            the url
+	 */
+	public void removeResource(URL url) {
+		Locale locale = getLocale(url);
+		if (locale == null) {
+			LOGGER.error("Could not determine locale for " + url.toString());
+			return;
+		}
+		removeResource(locale, url);
+
+	}
+
+	/**
+	 * Defines how the registry should be searched. For instance the ordering of
+	 * locales...
+	 */
+	private static class AccessPath {
+
+		/** The accessors. */
+		private List<Accessor> accessors = new LinkedList<I18nRegistry.Accessor>();
+
+		/**
+		 * Instantiates a new access path.
+		 */
+		public AccessPath() {
+		}
+
+		/**
+		 * Adds the accessor.
+		 *
+		 * @param accessor
+		 *            the accessor
+		 */
+		public void addAccessor(Accessor accessor) {
+			accessors.add(accessor);
+		}
+
+		/**
+		 * Returns the translation. The key matches the entire key for an i18n
+		 * record.
+		 *
+		 * @return the translation
+		 */
+		public Translation getTranslation() {
+			for (Accessor accessor : accessors) {
+				Translation result = accessor.getTranslation();
+				if (result != null) {
+					return result;
+				}
+			}
+
+			return null;
+		}
+	}
+
+	/**
+	 * This class will access the registry.
+	 */
+	private class Accessor {
+
+		/** The locale. */
+		private final Locale locale;
+
+		/** The matcher. */
+		private final Matcher matcher;
+
+		/** The key. */
+		@SuppressWarnings("unused")
+		private final String key;
+
+		/** The prio. */
+		private final int prio;
+
+		/**
+		 * Instantiates a new accessor.
+		 *
+		 * @param locale
+		 *            the locale
+		 * @param prio
+		 *            the prio
+		 * @param key
+		 *            the key
+		 * @param matcher
+		 *            the matcher
+		 */
+		public Accessor(Locale locale, int prio, String key, Matcher matcher) {
+			super();
+			this.locale = locale;
+			this.key = key;
+			this.matcher = matcher;
+			this.prio = prio;
+		}
+
+		/**
+		 * Returns the first translation found. The matcher must match the given
+		 * key.
+		 *
+		 * @return the translation
+		 */
+		public Translation getTranslation() {
+			List<ResourceDescription> descs = getResourceDescriptions(locale);
+			for (ResourceDescription desc : descs) {
+				for (Map.Entry<Object, Object> entry : desc.getProperties()
+						.entrySet()) {
+					if (matcher.reset((String) entry.getKey()).matches()) {
+						if (isValid((String) entry.getValue())) {
+							return new Translation((String) entry.getKey(),
+									(String) entry.getValue(), desc, prio);
+						}
+					}
+				}
+			}
+			return null;
+		}
+	}
+
+	/**
+	 * A resource is a file containing all translations for a file.
+	 */
+	public static class ResourceDescription {
+
+		/** The locale. */
+		private final Locale locale;
+
+		/** The url. */
+		private final URL url;
+
+		/** The properties. */
+		private final Properties properties;
+
+		/**
+		 * Instantiates a new resource description.
+		 *
+		 * @param locale
+		 *            the locale
+		 * @param url
+		 *            the url
+		 * @param properties
+		 *            the properties
+		 */
+		public ResourceDescription(Locale locale, URL url, Properties properties) {
+			this.locale = locale;
+			this.url = url;
+			this.properties = properties;
+		}
+
+		/**
+		 * Gets the locale.
+		 *
+		 * @return the locale
+		 */
+		public Locale getLocale() {
+			return locale;
+		}
+
+		/**
+		 * Gets the url.
+		 *
+		 * @return the url
+		 */
+		public URL getURL() {
+			return url;
+		}
+
+		/**
+		 * Gets the uri.
+		 *
+		 * @return the uri
+		 * @throws URISyntaxException
+		 *             the URI syntax exception
+		 */
+		public URI getURI() throws URISyntaxException {
+			return url != null ? url.toURI() : null;
+		}
+
+		/**
+		 * Gets the properties.
+		 *
+		 * @return the properties
+		 */
+		public Properties getProperties() {
+			return properties;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see java.lang.Object#hashCode()
+		 */
+		@Override
+		public int hashCode() {
+			final int prime = 31;
+			int result = 1;
+			try {
+				// try to use URI for performance issues
+				URI uri = getURI();
+				result = prime * result + ((uri == null) ? 0 : uri.hashCode());
+			} catch (URISyntaxException e) {
+				// otherwise fall back to url
+				result = prime * result + ((url == null) ? 0 : url.hashCode());
+			}
+
+			return result;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see java.lang.Object#equals(java.lang.Object)
+		 */
+		@Override
+		public boolean equals(Object obj) {
+			if (this == obj)
+				return true;
+			if (obj == null)
+				return false;
+			if (getClass() != obj.getClass())
+				return false;
+
+			ResourceDescription other = (ResourceDescription) obj;
+			try {
+				// try to use URI for performance issues
+				URI uri = getURI();
+				URI otherUri = other.getURI();
+				if (uri == null) {
+					if (otherUri != null)
+						return false;
+				} else if (!uri.equals(otherUri))
+					return false;
+			} catch (URISyntaxException e) {
+				// otherwise fall back to url
+				if (url == null) {
+					if (other.url != null)
+						return false;
+				} else if (!url.equals(other.url))
+					return false;
+			}
+			return true;
+		}
+	}
+
+	/**
+	 * The Class Translation.
+	 */
+	public static class Translation {
+
+		/** The i18n key. */
+		private final String i18nKey;
+
+		/** The i18n value. */
+		private final String i18nValue;
+
+		/** The resource description. */
+		private final ResourceDescription resourceDescription;
+
+		/** The priority. */
+		@SuppressWarnings("unused")
+		private final int priority;
+
+		/**
+		 * Instantiates a new translation.
+		 *
+		 * @param i18nKey
+		 *            the i18n key
+		 * @param i18nValue
+		 *            the i18n value
+		 * @param resourceDescription
+		 *            the resource description
+		 * @param priority
+		 *            the priority
+		 */
+		public Translation(String i18nKey, String i18nValue,
+				ResourceDescription resourceDescription, int priority) {
+			super();
+			this.i18nKey = i18nKey;
+			this.i18nValue = i18nValue;
+			this.resourceDescription = resourceDescription;
+			this.priority = priority;
+		}
+
+		/**
+		 * Returns the i18nKey.
+		 *
+		 * @return the i18n key
+		 */
+		public String getI18nKey() {
+			return i18nKey;
+		}
+
+		/**
+		 * Returns the i18nValue.
+		 *
+		 * @return the i18n value
+		 */
+		public String getI18nValue() {
+			return i18nValue;
+		}
+
+		/**
+		 * Returns the locale where key and value had been found.
+		 *
+		 * @return the locale
+		 */
+		public Locale getLocale() {
+			return resourceDescription.getLocale();
+		}
+
+		/**
+		 * Returns the resource description, where the i18n entry was contained.
+		 *
+		 * @return the resource description
+		 */
+		public ResourceDescription getResourceDescription() {
+			return resourceDescription;
+		}
+
+	}
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/i18n/I18nUtil.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/i18n/I18nUtil.java
new file mode 100644
index 0000000..260da4c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/i18n/I18nUtil.java
@@ -0,0 +1,130 @@
+/**
+ * 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.i18n;
+
+import java.text.DecimalFormat;
+import java.util.Locale;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class I18nUtil.
+ */
+public class I18nUtil {
+	
+	/**
+	 * Formats the enum literal.
+	 *
+	 * @param i18nService the i18n service
+	 * @param value the value
+	 * @param locale the locale
+	 * @return the string
+	 */
+	public static String translateEnum(II18nService i18nService, Object value,
+			Locale locale) {
+		Enum<?> enumx = (Enum<?>) value;
+		String i18nKey = getI18nKey(enumx.getClass().getName(), enumx);
+		String result = null;
+		if (i18nService != null) {
+			result = i18nService.getValue(i18nKey, locale);
+		}
+
+		if (result == null || result.trim().equals("")) {
+			result = enumx.name();
+		}
+
+		return result;
+	}
+
+	/**
+	 * Formats the boolean value.
+	 *
+	 * @param i18nService the i18n service
+	 * @param value the value
+	 * @param locale the locale
+	 * @return the string
+	 */
+	public static String translateBoolean(II18nService i18nService,
+			Boolean value, Locale locale) {
+		if (i18nService == null) {
+			return "";
+		}
+		String result = i18nService.getValue(Boolean.class.getName() + "."
+				+ value.toString(), locale);
+
+		if (result == null || result.trim().equals("")) {
+			result = value.toString();
+		}
+
+		return result;
+	}
+
+	/**
+	 * Returns the i18n key for the enum and its literal.
+	 *
+	 * @param enumName the enum name
+	 * @param literal the literal
+	 * @return the i18n key
+	 */
+	public static String getI18nKey(String enumName, Enum<?> literal) {
+		return enumName + "." + literal.name();
+	}
+
+	/**
+	 * Returns the i18n key for the enum and its literal.
+	 *
+	 * @param enumX the enum x
+	 * @return the i18n key
+	 */
+	public static String getI18nKey(Enum<?> enumX) {
+		return getI18nKey(enumX.getClass().getName(), enumX);
+	}
+
+	/**
+	 * Returns the i18nImageKey for the Enum name and literal.
+	 *
+	 * @param enumName the enum name
+	 * @param literal the literal
+	 * @return the image i18n key
+	 */
+	public static String getImageI18nKey(String enumName, Enum<?> literal) {
+		return enumName + "." + literal.name() + ".image";
+	}
+
+	/**
+	 * Returns the image key for the given label key.
+	 *
+	 * @param i18nLabelKey the i18n label key
+	 * @return the image key
+	 */
+	public static String getImageKey(String i18nLabelKey) {
+		String iconKey = i18nLabelKey + ".image";
+		return iconKey;
+	}
+
+	/**
+	 * Translates number values to their locale representation.
+	 *
+	 * @param i18nService the i18n service
+	 * @param number the number
+	 * @param locale the locale
+	 * @return the string
+	 */
+	public static String translateNumber(II18nService i18nService,
+			Number number, Locale locale) {
+
+		if (number instanceof Short || number instanceof Integer
+				|| number instanceof Byte || number instanceof Long) {
+			return DecimalFormat.getIntegerInstance(locale).format(number);
+		} else {
+			return DecimalFormat.getNumberInstance(locale).format(number);
+		}
+	}
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/i18n/II18nService.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/i18n/II18nService.java
new file mode 100644
index 0000000..c286b58
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/i18n/II18nService.java
@@ -0,0 +1,37 @@
+/**
+ * Copyright (c) 2012, 2015 - Lunifera GmbH (Austria), Loetz GmbH&Co.KG and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *    Florian Pirchner - initial API and implementation
+ */
+package org.eclipse.osbp.runtime.common.i18n;
+
+import java.util.Locale;
+
+import org.eclipse.osbp.runtime.common.dispose.IDisposable;
+
+ 
+/**
+ * This service returns the string value for a given i18nKey and locale.
+ */
+public interface II18nService extends IDisposable {
+
+	/** The id. */
+	public static String ID = II18nService.class.getName();
+
+	/**
+	 * Returns the i18nKey for the given key and locale.
+	 *
+	 * @param i18nKey
+	 *            the i18n key
+	 * @param locale
+	 *            the locale
+	 * @return the value
+	 */
+	String getValue(String i18nKey, Locale locale);
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/i18n/ITranslator.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/i18n/ITranslator.java
new file mode 100644
index 0000000..19293e5
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/i18n/ITranslator.java
@@ -0,0 +1,23 @@
+/**
+ *                                                                            
+ *  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 implementation
+ * 
+ */
+ package org.eclipse.osbp.runtime.common.i18n;
+
+import java.util.Locale;
+import java.util.Map;
+
+public interface ITranslator {
+	public void changeLocale(Locale locale);
+	public void mergeTranslations();
+	public Map<String,String> getTranslations();
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/i18n/URLI18nService.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/i18n/URLI18nService.java
new file mode 100644
index 0000000..1ddcf4e
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/i18n/URLI18nService.java
@@ -0,0 +1,57 @@
+/**
+ * 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.i18n;
+
+import java.net.URL;
+import java.util.Locale;
+
+import org.eclipse.osbp.runtime.common.dispose.AbstractDisposable;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The I18nService uses the given URLs to add property files.
+ * <p>
+ * See {@link I18nRegistry} for details about the file name pattern.
+ */
+public class URLI18nService extends AbstractDisposable implements II18nService {
+
+	/** The registry. */
+	private I18nRegistry registry = new I18nRegistry();
+
+	/**
+	 * Append the translations.
+	 *
+	 * @param url
+	 *            the url
+	 */
+	public void append(URL url) {
+		checkDisposed();
+		registry.addResource(url);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.i18n.II18nService#getValue(java.lang.String, java.util.Locale)
+	 */
+	@Override
+	public String getValue(String i18nKey, Locale locale) {
+		checkDisposed();
+		return registry.findTranslation(locale, i18nKey);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.dispose.AbstractDisposable#internalDispose()
+	 */
+	@Override
+	protected void internalDispose() {
+		registry = null;
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/keystroke/KeyCode.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/keystroke/KeyCode.java
new file mode 100644
index 0000000..741494b
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/keystroke/KeyCode.java
@@ -0,0 +1,149 @@
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.eclipse.osbp.runtime.common.keystroke;
+
+import java.io.Serializable;
+
+/**
+ * From Vaadin ShortcutAction.
+ */
+public interface KeyCode extends Serializable {
+    public static final int ENTER = 13;
+
+    public static final int ESCAPE = 27;
+
+    public static final int PAGE_UP = 33;
+
+    public static final int PAGE_DOWN = 34;
+
+    public static final int TAB = 9;
+
+    public static final int ARROW_LEFT = 37;
+
+    public static final int ARROW_UP = 38;
+
+    public static final int ARROW_RIGHT = 39;
+
+    public static final int ARROW_DOWN = 40;
+
+    public static final int BACKSPACE = 8;
+
+    public static final int DELETE = 46;
+
+    public static final int INSERT = 45;
+
+    public static final int END = 35;
+
+    public static final int HOME = 36;
+
+    public static final int F1 = 112;
+
+    public static final int F2 = 113;
+
+    public static final int F3 = 114;
+
+    public static final int F4 = 115;
+
+    public static final int F5 = 116;
+
+    public static final int F6 = 117;
+
+    public static final int F7 = 118;
+
+    public static final int F8 = 119;
+
+    public static final int F9 = 120;
+
+    public static final int F10 = 121;
+
+    public static final int F11 = 122;
+
+    public static final int F12 = 123;
+
+    public static final int A = 65;
+
+    public static final int B = 66;
+
+    public static final int C = 67;
+
+    public static final int D = 68;
+
+    public static final int E = 69;
+
+    public static final int F = 70;
+
+    public static final int G = 71;
+
+    public static final int H = 72;
+
+    public static final int I = 73;
+
+    public static final int J = 74;
+
+    public static final int K = 75;
+
+    public static final int L = 76;
+
+    public static final int M = 77;
+
+    public static final int N = 78;
+
+    public static final int O = 79;
+
+    public static final int P = 80;
+
+    public static final int Q = 81;
+
+    public static final int R = 82;
+
+    public static final int S = 83;
+
+    public static final int T = 84;
+
+    public static final int U = 85;
+
+    public static final int V = 86;
+
+    public static final int W = 87;
+
+    public static final int X = 88;
+
+    public static final int Y = 89;
+
+    public static final int Z = 90;
+
+    public static final int NUM0 = 48;
+
+    public static final int NUM1 = 49;
+
+    public static final int NUM2 = 50;
+
+    public static final int NUM3 = 51;
+
+    public static final int NUM4 = 52;
+
+    public static final int NUM5 = 53;
+
+    public static final int NUM6 = 54;
+
+    public static final int NUM7 = 55;
+
+    public static final int NUM8 = 56;
+
+    public static final int NUM9 = 57;
+
+    public static final int SPACEBAR = 32;
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..d93c3e6
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/keystroke/KeyCodeUtil.java
@@ -0,0 +1,146 @@
+/**
+ * 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.keystroke;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class KeyCodeUtil.
+ */
+public class KeyCodeUtil {
+
+	/** The Constant keyCodeMappings. */
+	private static final Map<String, Integer> keyCodeMappings = new HashMap<String, Integer>();
+	
+	/** The Constant modifierMappings. */
+	private static final Map<String, Integer> modifierMappings = new HashMap<String, Integer>();
+
+	static {
+		keyCodeMappings.put("ENTER", KeyCode.ENTER);
+		keyCodeMappings.put("ESCAPE", KeyCode.ESCAPE);
+		keyCodeMappings.put("PAGE_UP", KeyCode.PAGE_UP);
+		keyCodeMappings.put("PAGE_DOWN", KeyCode.PAGE_DOWN);
+		keyCodeMappings.put("TAB", KeyCode.TAB);
+		keyCodeMappings.put("ARROW_LEFT", KeyCode.ARROW_LEFT);
+		keyCodeMappings.put("ARROW_UP", KeyCode.ARROW_UP);
+		keyCodeMappings.put("ARROW_RIGHT", KeyCode.ARROW_RIGHT);
+		keyCodeMappings.put("ARROW_DOWN", KeyCode.ARROW_DOWN);
+		keyCodeMappings.put("BACKSPACE", KeyCode.BACKSPACE);
+		keyCodeMappings.put("DELETE", KeyCode.DELETE);
+		keyCodeMappings.put("INSERT", KeyCode.INSERT);
+		keyCodeMappings.put("END", KeyCode.END);
+		keyCodeMappings.put("HOME", KeyCode.HOME);
+		keyCodeMappings.put("F1", KeyCode.F1);
+		keyCodeMappings.put("F2", KeyCode.F2);
+		keyCodeMappings.put("F3", KeyCode.F3);
+		keyCodeMappings.put("F4", KeyCode.F4);
+		keyCodeMappings.put("F5", KeyCode.F5);
+		keyCodeMappings.put("F6", KeyCode.F6);
+		keyCodeMappings.put("F7", KeyCode.F7);
+		keyCodeMappings.put("F8", KeyCode.F8);
+		keyCodeMappings.put("F9", KeyCode.F9);
+		keyCodeMappings.put("F10", KeyCode.F10);
+		keyCodeMappings.put("F11", KeyCode.F11);
+		keyCodeMappings.put("F12", KeyCode.F12);
+		keyCodeMappings.put("A", KeyCode.A);
+		keyCodeMappings.put("B", KeyCode.B);
+		keyCodeMappings.put("C", KeyCode.C);
+		keyCodeMappings.put("D", KeyCode.D);
+		keyCodeMappings.put("E", KeyCode.E);
+		keyCodeMappings.put("F", KeyCode.F);
+		keyCodeMappings.put("G", KeyCode.G);
+		keyCodeMappings.put("H", KeyCode.H);
+		keyCodeMappings.put("I", KeyCode.I);
+		keyCodeMappings.put("J", KeyCode.J);
+		keyCodeMappings.put("K", KeyCode.K);
+		keyCodeMappings.put("L", KeyCode.L);
+		keyCodeMappings.put("M", KeyCode.M);
+		keyCodeMappings.put("N", KeyCode.N);
+		keyCodeMappings.put("O", KeyCode.O);
+		keyCodeMappings.put("P", KeyCode.P);
+		keyCodeMappings.put("Q", KeyCode.Q);
+		keyCodeMappings.put("R", KeyCode.R);
+		keyCodeMappings.put("S", KeyCode.S);
+		keyCodeMappings.put("T", KeyCode.T);
+		keyCodeMappings.put("U", KeyCode.U);
+		keyCodeMappings.put("V", KeyCode.V);
+		keyCodeMappings.put("W", KeyCode.W);
+		keyCodeMappings.put("X", KeyCode.X);
+		keyCodeMappings.put("Y", KeyCode.Y);
+		keyCodeMappings.put("Z", KeyCode.Z);
+		keyCodeMappings.put("0", KeyCode.NUM0);
+		keyCodeMappings.put("1", KeyCode.NUM1);
+		keyCodeMappings.put("2", KeyCode.NUM2);
+		keyCodeMappings.put("3", KeyCode.NUM3);
+		keyCodeMappings.put("4", KeyCode.NUM4);
+		keyCodeMappings.put("5", KeyCode.NUM5);
+		keyCodeMappings.put("6", KeyCode.NUM6);
+		keyCodeMappings.put("7", KeyCode.NUM7);
+		keyCodeMappings.put("8", KeyCode.NUM8);
+		keyCodeMappings.put("9", KeyCode.NUM9);
+		keyCodeMappings.put("SPACEBAR", KeyCode.SPACEBAR);
+
+		modifierMappings.put("SHIFT", ModifierKey.SHIFT);
+		modifierMappings.put("CTRL", ModifierKey.CTRL);
+		modifierMappings.put("ALT", ModifierKey.ALT);
+		modifierMappings.put("META", ModifierKey.META);
+	}
+
+	/**
+	 * Parses the keyCode to a key stroke definition.<br>
+	 * KeyCode follows the pattern "CTRL+ALT+S". All reserved words are
+	 * constants in the KeyCodeUtil.
+	 *
+	 * @param keyCode
+	 *            the key code
+	 * @return the key stroke definition
+	 */
+	public static KeyStrokeDefinition parse(String keyCode) {
+		int keyCodeInt = -1;
+		List<Integer> modifierInts = new ArrayList<Integer>();
+
+		String[] tokens = keyCode.split("\\+");
+		for (String t : tokens) {
+			String token = t.trim();
+			if (modifierMappings.containsKey(token)) {
+				modifierInts.add(modifierMappings.get(token));
+			} else if (keyCodeMappings.containsKey(token)) {
+				keyCodeInt = keyCodeMappings.get(token);
+			}
+		}
+
+		return new KeyStrokeDefinition(keyCode, keyCodeInt,
+				toModifierInts(modifierInts));
+	}
+
+	/**
+	 * To modifier ints.
+	 *
+	 * @param modifierInts
+	 *            the modifier ints
+	 * @return the int[]
+	 */
+	private static int[] toModifierInts(List<Integer> modifierInts) {
+		int[] result = new int[modifierInts.size()];
+
+		for (int i = 0; i < modifierInts.size(); i++) {
+			int modifier = modifierInts.get(i);
+			result[i] = modifier;
+		}
+
+		return result;
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/keystroke/KeyStrokeCallback.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/keystroke/KeyStrokeCallback.java
new file mode 100644
index 0000000..9c176f4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/keystroke/KeyStrokeCallback.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.keystroke;
+
+// TODO: Auto-generated Javadoc
+/**
+ * A callback to handle key strokes.
+ */
+public interface KeyStrokeCallback {
+
+	/**
+	 * Is called if the keystroke definition was activated.
+	 *
+	 * @param source
+	 *            the source
+	 * @param target
+	 *            the target
+	 */
+	void callback(Object source, Object target);
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/keystroke/KeyStrokeDefinition.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/keystroke/KeyStrokeDefinition.java
new file mode 100644
index 0000000..82ddb5c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/keystroke/KeyStrokeDefinition.java
@@ -0,0 +1,74 @@
+/**
+ * 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.keystroke;
+
+import java.util.Arrays;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class KeyStrokeDefinition.
+ */
+public class KeyStrokeDefinition {
+
+	/** The caption. */
+	private final String caption;
+	
+	/** The key code. */
+	private final int keyCode;
+	
+	/** The modifier keys. */
+	private final int[] modifierKeys;
+
+	/**
+	 * Instantiates a new key stroke definition.
+	 *
+	 * @param caption the caption
+	 * @param keyCode the key code
+	 * @param modifierKeys the modifier keys
+	 */
+	public KeyStrokeDefinition(String caption, int keyCode, int[] modifierKeys) {
+		super();
+		this.caption = caption;
+		this.keyCode = keyCode;
+		this.modifierKeys = modifierKeys != null ? Arrays.copyOf(modifierKeys,
+				modifierKeys.length) : new int[0];
+	}
+
+	/**
+	 * Returns the caption of the keystroke definition. Later it may use special
+	 * characters to define keystrokes like <code>^&amp;R</code> which may define
+	 * CRTL+ALT+R. But this feature is not supported yet.
+	 *
+	 * @return the caption
+	 */
+	public String getCaption() {
+		return caption;
+	}
+
+	/**
+	 * Returns the key code. See See {@link KeyCode}.
+	 *
+	 * @return the key code
+	 */
+	public int getKeyCode() {
+		return keyCode;
+	}
+
+	/**
+	 * Returns the modifier keys. See See {@link ModifierKey}.
+	 *
+	 * @return the modifier keys
+	 */
+	public int[] getModifierKeys() {
+		return Arrays.copyOf(modifierKeys, modifierKeys.length);
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/keystroke/ModifierKey.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/keystroke/ModifierKey.java
new file mode 100644
index 0000000..cbe0efc
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/keystroke/ModifierKey.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.eclipse.osbp.runtime.common.keystroke;
+
+import java.io.Serializable;
+
+/**
+ * From Vaadin ShortcutAction.
+ */
+public interface ModifierKey extends Serializable {
+    public static final int SHIFT = 16;
+
+    public static final int CTRL = 17;
+
+    public static final int ALT = 18;
+
+    public static final int META = 91;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/memento/IMementoHandler.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/memento/IMementoHandler.java
new file mode 100644
index 0000000..d8d1712
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/memento/IMementoHandler.java
@@ -0,0 +1,27 @@
+/**
+ * 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.memento;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Implementors can apply and create mementos.
+ */
+public interface IMementoHandler {
+
+	/**
+	 * Applies the given memento to the UI element.
+	 *
+	 * @param memento
+	 *            the memento
+	 */
+	public void applyMemento(Object memento);
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/memento/IMementoManager.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/memento/IMementoManager.java
new file mode 100644
index 0000000..3578686
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/memento/IMementoManager.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.memento;
+
+import org.eclipse.osbp.runtime.common.validation.IStatus;
+
+/**
+ * A memento manager is responsible to load and save mementos.
+ */
+public interface IMementoManager {
+
+	/** The Constant EVENT_TOPIC. */
+	public static final String EVENT_TOPIC = "runtime/memento";
+
+	/** The Constant PROP_PERSIST_POLICY. */
+	public static final String PROP_PERSIST_POLICY = "persisting.policy";
+
+	/**
+	 * Loads the memento for the given memento id.
+	 *
+	 * @param userId
+	 *            the user id
+	 * @param mementoId
+	 *            the memento id
+	 * @return the object
+	 */
+	Object loadMemento(String userId, String mementoId);
+
+	/**
+	 * Saves the memento by the given mementoId.
+	 *
+	 * @param userId
+	 *            the user id
+	 * @param mementoId
+	 *            the memento id
+	 * @param memento
+	 *            the memento
+	 * @return status containing exceptions or IStatus.OK
+	 */
+	IStatus saveMemento(String userId, String mementoId, Object memento);
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/metric/TimeLogger.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/metric/TimeLogger.java
new file mode 100644
index 0000000..18a1db0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/metric/TimeLogger.java
@@ -0,0 +1,67 @@
+/**
+ * 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.metric;
+
+import java.util.Date;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The Class TimeLogger.
+ */
+public class TimeLogger {
+
+	/** The Constant LOGGER. */
+	private static final Logger LOGGER = LoggerFactory
+			.getLogger(TimeLogger.class);
+
+	/** The clazz. */
+	private final Class<?> clazz;
+	
+	/** The start. */
+	private final long start;
+
+	/**
+	 * Start.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @return the time logger
+	 */
+	public static TimeLogger start(Class<?> clazz) {
+		return new TimeLogger(clazz);
+	}
+
+	/**
+	 * Instantiates a new time logger.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 */
+	private TimeLogger(Class<?> clazz) {
+		this.clazz = clazz;
+		start = new Date().getTime();
+	}
+
+	/**
+	 * Stop.
+	 *
+	 * @param message
+	 *            the message
+	 */
+	public void stop(String message) {
+		long stop = new Date().getTime();
+//		LOGGER.info(clazz.getName() + ": " + message + " " + (stop - start)
+//				+ "ms");
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/shell/ICommandConstants.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/shell/ICommandConstants.java
new file mode 100644
index 0000000..c96f765
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/shell/ICommandConstants.java
@@ -0,0 +1,19 @@
+/**
+ *                                                                            
+ *  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 implementation
+ * 
+ */
+ package org.eclipse.osbp.runtime.common.shell;
+
+public interface ICommandConstants {
+	String	COMMAND_SCOPE		= "osgi.command.scope";
+	String	COMMAND_FUNCTION	= "osgi.command.function";
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/IDataState.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/IDataState.java
new file mode 100644
index 0000000..988768c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/IDataState.java
@@ -0,0 +1,100 @@
+/**
+ * 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.state;
+
+import java.util.Collection;
+
+/**
+ * Different versions of objects may be available. For instance a changed and an
+ * unchanged version of a bean. This class is responsible to handle beans and
+ * offer them in a common context. It caches registered beans in a GC-aware
+ * manner.
+ */
+public interface IDataState {
+
+	/**
+	 * Returns the size of the cached objects.
+	 *
+	 * @return the size
+	 */
+	long size();
+
+	/**
+	 * Returns true if the cache is empty.
+	 *
+	 * @return true, if successful
+	 */
+	boolean empty();
+
+	/**
+	 * Returns true, if a dirty version of the given object is available.
+	 *
+	 * @param key
+	 *            the key
+	 * @return true, if successful
+	 */
+	boolean contains(Object key);
+
+	/**
+	 * Returns the dirty version of the object if available.
+	 *
+	 * @param key
+	 *            the key
+	 * @return the object
+	 */
+	Object get(Object key);
+
+	/**
+	 * Registers the given object by the passed key.
+	 *
+	 * @param key
+	 *            the key
+	 * @param object
+	 *            the object
+	 */
+	void register(Object key, Object object);
+
+	/**
+	 * Registers all objects provided by the collection. The hasher is used, to
+	 * calculate proper keys for the map.
+	 *
+	 * @param objects
+	 *            the objects
+	 * @param hasher
+	 *            the hasher
+	 */
+	void registerAll(Collection<Object> objects, Hashing hasher);
+
+	/**
+	 * Invalidates the object with the given key.
+	 *
+	 * @param key
+	 *            the key
+	 */
+	void invalidate(Object key);
+
+	/**
+	 * Returns the hash code or key for the given object.
+	 */
+	public interface Hashing {
+
+		/**
+		 * Returns the hashcode for the given object.
+		 *
+		 * @param object
+		 *            the object
+		 * @return the hash code
+		 */
+		Object getHashCode(Object object);
+
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/ISharedStateContext.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/ISharedStateContext.java
new file mode 100644
index 0000000..85b2dd3
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/ISharedStateContext.java
@@ -0,0 +1,106 @@
+/**
+ * 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.state;
+
+import org.eclipse.osbp.runtime.common.hash.HashUtil;
+
+/**
+ * Different participants may share data.
+ * <p>
+ * For instance an {@link IDataState}. In a business application groups of views
+ * may share the same data like beans. And other groups of views will share
+ * their own data. A shared environment is an abstraction above this group.
+ * Views may share the {@link ISharedStateContext} and will also share their
+ * properties and data.
+ * 
+ */
+public interface ISharedStateContext {
+
+	/**
+	 * Returns the unique id of the environment.
+	 *
+	 * @return the id
+	 */
+	String getId();
+
+	/**
+	 * Set and key value pair to be shared in the environment.
+	 *
+	 * @param key
+	 *            the key
+	 * @param value
+	 *            the value
+	 */
+	void setProperty(Object key, Object value);
+
+	/**
+	 * Returns the value for the key or <code>null</code> if no value
+	 * registered.
+	 *
+	 * @param key
+	 *            the key
+	 * @return the property
+	 */
+	Object getProperty(Object key);
+
+	/**
+	 * Returns all keys that are registered in the environment.
+	 *
+	 * @return the property keys
+	 */
+	Object[] getPropertyKeys();
+
+	/**
+	 * Returns the dirty state that contains all dirty objects for the shared
+	 * state.
+	 *
+	 * @return the dirty state
+	 */
+	IDataState getDirtyState();
+
+	/**
+	 * Returns the "used state" that contains all objects that are currently
+	 * used for the shared state.
+	 *
+	 * @return the global data state
+	 */
+	IDataState getGlobalDataState();
+
+	/**
+	 * Returns an immutable compound state that handles the global and dirty
+	 * state.
+	 *
+	 * @return the dirty aware global state
+	 */
+	IDataState getDirtyAwareGlobalState();
+
+	/**
+	 * Makes the given dto undirty.
+	 *
+	 * @param key
+	 *            the key
+	 * @param dto
+	 *            the dto
+	 */
+	void makeUndirty(Object key, Object dto);
+
+	/**
+	 * Adds a new "not persistent" entry. The key will be calculated using the
+	 * {@link HashUtil}.
+	 * <p>
+	 * The object will be put into the dirtyState but not the global state.
+	 *
+	 * @param newEntry
+	 *            the new entry
+	 */
+	void addNewTransient(Object newEntry);
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/ISharedStateContextProvider.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/ISharedStateContextProvider.java
new file mode 100644
index 0000000..c0c0b15
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/ISharedStateContextProvider.java
@@ -0,0 +1,57 @@
+/**
+ * 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.state;
+
+import java.util.Map;
+
+
+/**
+ * The {@link ISharedStateContextProvider} is responsible to create shared state
+ * context, to dispose them and to provide active instances of them.
+ * <p>
+ * The provider is counting references to the shared state context objects
+ * returned. A call to {@link #getContext(String, Map)} will increase the
+ * counter of references. A call to {@link #unget(ISharedStateContext)}
+ * will decrease the counter. If the counter for a {@link ISharedStateContext}
+ * decreased to 0, it will become disposed.
+ */
+public interface ISharedStateContextProvider {
+
+	/**
+	 * Returns the {@link ISharedStateContext} for the given id. If no shared
+	 * state context is available, a new instance will be created and registered
+	 * as an OSGi service.
+	 * <p>
+	 * The internal usage counter will be increased. Do not miss to
+	 * {@link #unget(ISharedStateContext)} the context if it is not needed
+	 * anymore.
+	 *
+	 * @param id
+	 *            the id
+	 * @param properties
+	 *            - will be added to the OSGi service
+	 * @return the context
+	 */
+	ISharedStateContext getContext(String id, Map<String, Object> properties);
+
+	/**
+	 * If an {@link ISharedStateContext} is not used anymore, that method must
+	 * be called.
+	 * <p>
+	 * The internal usage counter will be decreased. If usage counter reaches
+	 * zero, the context will be disposed.
+	 *
+	 * @param context
+	 *            the context
+	 */
+	void unget(ISharedStateContext context);
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/SharedStateUnitOfWork.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/SharedStateUnitOfWork.java
new file mode 100644
index 0000000..d2387d0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/SharedStateUnitOfWork.java
@@ -0,0 +1,82 @@
+/**
+ * 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.state;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.osbp.runtime.common.coordination.CoordinationManager;
+import org.osgi.service.coordinator.Coordination;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class SharedStateUnitOfWork.
+ *
+ * @param <R>
+ *            the generic type
+ */
+public abstract class SharedStateUnitOfWork<R> {
+	
+	/** The Constant LOGGER. */
+	private static final Logger LOGGER = LoggerFactory
+			.getLogger(SharedStateUnitOfWork.class);
+
+	/**
+	 * Instantiates a new shared state unit of work.
+	 */
+	public SharedStateUnitOfWork() {
+
+	}
+
+	/**
+	 * Executes the unit of work creating an implicit {@link Coordination} and
+	 * passing the env as variables.
+	 *
+	 * @param context
+	 *            the context
+	 * @return the data returned by {@link #doExecute()}
+	 */
+	public R execute(final ISharedStateContext context) {
+		if (context != null) {
+			Coordination peek = null;
+			CoordinationManager coordinationManager = new CoordinationManager();
+			try {
+				Map<Class<?>, Object> props = new HashMap<Class<?>, Object>();
+				props.put(ISharedStateContext.class, context);
+				peek = coordinationManager.createCurrentCoordination(props);
+				if (peek != null) {
+					return doExecute();
+				} else {
+					LOGGER.error("No coordination service available!");
+				}
+			} finally {
+				if (peek != null) {
+					peek.end();
+				}
+				// release the coordination manager
+				coordinationManager.release();
+			}
+		} else {
+			return doExecute();
+		}
+		return null;
+	}
+
+	/**
+	 * The unit of work to do.
+	 * 
+	 * @return any kind of data. May also be <code>null</code>.
+	 */
+	protected abstract R doExecute();
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/impl/DataState.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/impl/DataState.java
new file mode 100644
index 0000000..2ee7652
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/impl/DataState.java
@@ -0,0 +1,111 @@
+/**
+ * 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.state.impl;
+
+import java.util.Collection;
+
+import org.eclipse.osbp.runtime.common.dispose.AbstractDisposable;
+import org.eclipse.osbp.runtime.common.state.IDataState;
+
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+
+/**
+ * Responsible to cache data by a cache implementation.
+ */
+public class DataState extends AbstractDisposable implements IDataState {
+
+	protected Cache<Object, Object> cache;
+	protected final SharedStateContext sharedStateContext;
+
+	public DataState(SharedStateContext sharedStateContext) {
+		this.sharedStateContext = sharedStateContext;
+	}
+
+	@Override
+	public boolean contains(Object key) {
+		checkDisposed();
+
+		if (cache == null) {
+			return false;
+		}
+		return cache.getIfPresent(key) != null;
+	}
+
+	@Override
+	public Object get(Object key) {
+		checkDisposed();
+
+		if (cache == null) {
+			return null;
+		}
+
+		return cache.getIfPresent(key);
+	}
+
+	@Override
+	public void register(Object key, Object object) {
+		checkDisposed();
+		
+		if (contains(key)) {
+			// already contained
+			return;
+		}
+
+		ensureCache();
+		cache.put(key, object);
+	}
+
+	protected void ensureCache() {
+		if (cache == null) {
+			cache = CacheBuilder.newBuilder().initialCapacity(250).weakValues()
+					.build();
+		}
+	}
+
+	@Override
+	public void registerAll(Collection<Object> objects, Hashing hasher) {
+		checkDisposed();
+		for (Object object : objects) {
+			register(hasher.getHashCode(object), object);
+		}
+	}
+
+	@Override
+	public void invalidate(Object key) {
+		checkDisposed();
+		if (cache != null) {
+			cache.invalidate(key);
+		}
+	}
+
+	@Override
+	protected void internalDispose() {
+		if (cache != null) {
+			cache.invalidateAll();
+			cache = null;
+		}
+	}
+
+	@Override
+	public long size() {
+		if (cache == null) {
+			return 0;
+		}
+		cache.cleanUp();
+		return cache.size();
+	}
+
+	@Override
+	public boolean empty() {
+		return size() <= 0;
+	}
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/impl/DirtyDataAwareGlobalState.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/impl/DirtyDataAwareGlobalState.java
new file mode 100644
index 0000000..dad7671
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/impl/DirtyDataAwareGlobalState.java
@@ -0,0 +1,70 @@
+/**
+ * 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.state.impl;
+
+import java.util.Collection;
+
+import org.eclipse.osbp.runtime.common.state.IDataState;
+
+/**
+ * Combines the global data state and the dirty data state.
+ */
+public class DirtyDataAwareGlobalState implements IDataState {
+
+	private final IDataState dataState;
+	private final IDataState dirtyState;
+
+	public DirtyDataAwareGlobalState(IDataState dataState, IDataState dirtyState) {
+		this.dataState = dataState;
+		this.dirtyState = dirtyState;
+	}
+
+	@Override
+	public boolean contains(Object key) {
+		return dirtyState.contains(key) || dataState.contains(key);
+	}
+
+	@Override
+	public Object get(Object key) {
+		Object result = dirtyState.get(key);
+		if (result == null) {
+			result = dataState.get(key);
+		}
+
+		return result;
+	}
+
+	@Override
+	public void register(Object key, Object object) {
+		throw new UnsupportedOperationException("Not a valid call");
+	}
+
+	@Override
+	public void registerAll(Collection<Object> objects, Hashing hasher) {
+		throw new UnsupportedOperationException("Not a valid call");
+	}
+
+	@Override
+	public void invalidate(Object key) {
+		throw new UnsupportedOperationException("Not a valid call");
+	}
+
+	@Override
+	public long size() {
+		throw new UnsupportedOperationException("Not a valid call");
+	}
+
+	@Override
+	public boolean empty() {
+		throw new UnsupportedOperationException("Not a valid call");
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/impl/DirtyDataState.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/impl/DirtyDataState.java
new file mode 100644
index 0000000..7f035a0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/impl/DirtyDataState.java
@@ -0,0 +1,30 @@
+/**
+ * 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.state.impl;
+
+import com.google.common.cache.CacheBuilder;
+
+/**
+ * Responsible to cache changed objects.
+ */
+public class DirtyDataState extends DataState {
+
+	public DirtyDataState(SharedStateContext sharedStateContext) {
+		super(sharedStateContext);
+	}
+
+	protected void ensureCache() {
+		if (cache == null) {
+			cache = CacheBuilder.newBuilder().initialCapacity(20).weakValues()
+					.build();
+		}
+	}
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/impl/GlobalDataState.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/impl/GlobalDataState.java
new file mode 100644
index 0000000..5ad1cd9
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/impl/GlobalDataState.java
@@ -0,0 +1,134 @@
+/**
+ * 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.state.impl;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.commons.lang.reflect.MethodUtils;
+import org.eclipse.osbp.runtime.common.annotations.DtoUtils;
+import org.eclipse.osbp.runtime.common.hash.HashUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Responsible to cache changed objects.
+ */
+public class GlobalDataState extends DataState implements
+		PropertyChangeListener {
+
+	/** The Constant LOGGER. */
+	private static final Logger LOGGER = LoggerFactory
+			.getLogger(GlobalDataState.class);
+
+	/**
+	 * Instantiates a new global data state.
+	 *
+	 * @param sharedStateContext
+	 *            the shared state context
+	 */
+	public GlobalDataState(SharedStateContext sharedStateContext) {
+		super(sharedStateContext);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.state.impl.DataState#register(java.lang.Object, java.lang.Object)
+	 */
+	@Override
+	public void register(Object key, Object object) {
+		checkDisposed();
+
+		if (contains(key)) {
+			// already contained
+			return;
+		}
+
+		super.register(key, object);
+
+		if (object != null) {
+			try {
+				MethodUtils.invokeMethod(object, "addPropertyChangeListener",
+						this);
+			} catch (SecurityException e) {
+				LOGGER.warn("Observer for dirtyState handling could not be added for "
+						+ object.getClass().getName());
+			} catch (IllegalAccessException e) {
+				LOGGER.warn("Observer for dirtyState handling could not be added for "
+						+ object.getClass().getName());
+			} catch (IllegalArgumentException e) {
+				LOGGER.warn("Observer for dirtyState handling could not be added for "
+						+ object.getClass().getName());
+			} catch (InvocationTargetException e) {
+				LOGGER.warn("Observer for dirtyState handling could not be added for "
+						+ object.getClass().getName());
+			} catch (NoSuchMethodException e) {
+				LOGGER.warn("Observer for dirtyState handling could not be added for "
+						+ object.getClass().getName());
+			}
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
+	 */
+	@Override
+	public void propertyChange(PropertyChangeEvent event) {
+		Object object = event.getSource();
+		Class<?> objClass = object.getClass();
+		try {
+			if (DtoUtils.isDisposeField(objClass, event.getPropertyName())) {
+				handleDispose(event);
+				return;
+			}
+			// dirty field not forwarded to handle dirty
+			if (DtoUtils.isDirtyField(objClass, event.getPropertyName())) {
+				return;
+			}
+		} catch (SecurityException ignoreIt) {
+			LOGGER.error("{}", ignoreIt);
+		}
+
+		handleDirty(event);
+	}
+
+	/**
+	 * Puts the object into the dirty state.
+	 *
+	 * @param event
+	 *            the event
+	 */
+	protected void handleDirty(PropertyChangeEvent event) {
+		Object object = event.getSource();
+		Class<?> objClass = object.getClass();
+
+		// set the dirty flag to true if available
+		DtoUtils.invokeDirtySetter(object, true);
+
+		sharedStateContext.handleDirty(
+				HashUtil.createObjectWithIdHash(objClass, object), object);
+	}
+
+	/**
+	 * Invalidates the object in the cache.
+	 *
+	 * @param event
+	 *            the event
+	 */
+	protected void handleDispose(PropertyChangeEvent event) {
+		Object object = event.getSource();
+		Class<?> objClass = object.getClass();
+
+		sharedStateContext.invalidate(
+				HashUtil.createObjectWithIdHash(objClass, object), object);
+	}
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/impl/SharedStateContext.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/impl/SharedStateContext.java
new file mode 100644
index 0000000..850fd4d
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/impl/SharedStateContext.java
@@ -0,0 +1,235 @@
+/**
+ * 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.state.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.osbp.runtime.common.annotations.DtoUtils;
+import org.eclipse.osbp.runtime.common.dispose.AbstractDisposable;
+import org.eclipse.osbp.runtime.common.dispose.IReferenceCountable;
+import org.eclipse.osbp.runtime.common.hash.HashUtil;
+import org.eclipse.osbp.runtime.common.state.IDataState;
+import org.eclipse.osbp.runtime.common.state.ISharedStateContext;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class SharedStateContext.
+ */
+public class SharedStateContext extends AbstractDisposable implements
+		ISharedStateContext, IReferenceCountable {
+
+	/** The data. */
+	private Map<Object, Object> data;
+
+	/** The id. */
+	private final String id;
+
+	/** The dirty state. */
+	private DirtyDataState dirtyState;
+
+	/** The global state. */
+	private DataState globalState;
+
+	/** The usage count. */
+	private int usageCount;
+
+	/**
+	 * Instantiates a new shared state context.
+	 *
+	 * @param id
+	 *            the id
+	 */
+	public SharedStateContext(String id) {
+		this.id = id;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.state.ISharedStateContext#getId()
+	 */
+	@Override
+	public String getId() {
+		return id;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.state.ISharedStateContext#setProperty(java.lang.Object, java.lang.Object)
+	 */
+	@Override
+	public void setProperty(Object key, Object value) {
+		checkDisposed();
+
+		if (data == null) {
+			data = new HashMap<Object, Object>();
+		}
+		data.put(key, value);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.state.ISharedStateContext#getProperty(java.lang.Object)
+	 */
+	@Override
+	public Object getProperty(Object key) {
+		checkDisposed();
+
+		if (data == null) {
+			return null;
+		}
+		return data.get(key);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.state.ISharedStateContext#getPropertyKeys()
+	 */
+	@Override
+	public Object[] getPropertyKeys() {
+		checkDisposed();
+
+		if (data == null) {
+			return new Object[0];
+		}
+		return data.keySet().toArray();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.state.ISharedStateContext#getDirtyState()
+	 */
+	@Override
+	public IDataState getDirtyState() {
+		checkDisposed();
+
+		if (dirtyState == null) {
+			dirtyState = new DirtyDataState(this);
+		}
+		return dirtyState;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.state.ISharedStateContext#getGlobalDataState()
+	 */
+	@Override
+	public IDataState getGlobalDataState() {
+		checkDisposed();
+
+		if (globalState == null) {
+			globalState = new GlobalDataState(this);
+		}
+		return globalState;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.state.ISharedStateContext#getDirtyAwareGlobalState()
+	 */
+	@Override
+	public IDataState getDirtyAwareGlobalState() {
+		return new DirtyDataAwareGlobalState(getGlobalDataState(),
+				getDirtyState());
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.dispose.AbstractDisposable#internalDispose()
+	 */
+	@Override
+	protected void internalDispose() {
+		if (data != null) {
+			data.clear();
+			data = null;
+		}
+
+		if (dirtyState != null) {
+			dirtyState.dispose();
+			dirtyState = null;
+		}
+
+		if (globalState != null) {
+			globalState.dispose();
+			globalState = null;
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.dispose.IReferenceCountable#getUsageCount()
+	 */
+	@Override
+	public int getUsageCount() {
+		return usageCount;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.dispose.IReferenceCountable#increaseUsageCount()
+	 */
+	@Override
+	public void increaseUsageCount() {
+		usageCount++;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.dispose.IReferenceCountable#decreaseUsageCount()
+	 */
+	@Override
+	public void decreaseUsageCount() {
+		usageCount--;
+	}
+
+	/**
+	 * Invalidate.
+	 *
+	 * @param key
+	 *            the key
+	 * @param object
+	 *            the object
+	 */
+	public void invalidate(String key, Object object) {
+		if (dirtyState != null) {
+			dirtyState.invalidate(key);
+		}
+		if (globalState != null) {
+			globalState.invalidate(key);
+		}
+	}
+
+	/**
+	 * Handle dirty.
+	 *
+	 * @param key
+	 *            the key
+	 * @param object
+	 *            the object
+	 */
+	public void handleDirty(String key, Object object) {
+		if (dirtyState != null) {
+			dirtyState.register(key, object);
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.state.ISharedStateContext#makeUndirty(java.lang.Object, java.lang.Object)
+	 */
+	@Override
+	public void makeUndirty(Object key, Object dto) {
+		getDirtyState().invalidate(key);
+
+		// set the dirty flag if available to false
+		DtoUtils.invokeDirtySetter(dto, false);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.state.ISharedStateContext#addNewTransient(java.lang.Object)
+	 */
+	@Override
+	public void addNewTransient(Object newEntry) {
+		// set the dirty flag if available to false
+		DtoUtils.invokeDirtySetter(newEntry, true);
+		getDirtyState().register(
+				HashUtil.createObjectWithIdHash(newEntry.getClass(), newEntry),
+				newEntry);
+	}
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/impl/SharedStateContextProvider.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/impl/SharedStateContextProvider.java
new file mode 100644
index 0000000..6dd3af0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/state/impl/SharedStateContextProvider.java
@@ -0,0 +1,192 @@
+/**
+ * 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.state.impl;
+
+import java.util.Collection;
+import java.util.Dictionary;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.eclipse.osbp.runtime.common.dispose.IDisposable;
+import org.eclipse.osbp.runtime.common.dispose.IReferenceCountable;
+import org.eclipse.osbp.runtime.common.state.ISharedStateContext;
+import org.eclipse.osbp.runtime.common.state.ISharedStateContextProvider;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.component.ComponentContext;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class SharedStateContextProvider.
+ */
+@Component(property = { "service.ranking=100" }, immediate = true)
+public class SharedStateContextProvider implements ISharedStateContextProvider {
+
+	/** The Constant OSGI_PROP__ENV_ID. */
+	private static final String OSGI_PROP__ENV_ID = "sharedState.id";
+
+	/** The Constant LOGGER. */
+	private static final Logger LOGGER = LoggerFactory
+			.getLogger(SharedStateContextProvider.class);
+
+	/** The component context. */
+	private ComponentContext componentContext;
+	
+	/** The registrations. */
+	private Map<String, ServiceRegistration<ISharedStateContext>> registrations = new HashMap<String, ServiceRegistration<ISharedStateContext>>();
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.state.ISharedStateContextProvider#getContext(java.lang.String, java.util.Map)
+	 */
+	@Override
+	public ISharedStateContext getContext(String id,
+			Map<String, Object> properties) {
+		ISharedStateContext context = find(id);
+		if (context == null) {
+			context = createContext(id, properties);
+		}
+
+		((IReferenceCountable) context).increaseUsageCount();
+
+		return context;
+	}
+
+	/**
+	 * Creates the context.
+	 *
+	 * @param id
+	 *            the id
+	 * @param inProperties
+	 *            the in properties
+	 * @return the i shared state context
+	 */
+	protected ISharedStateContext createContext(String id,
+			Map<String, Object> inProperties) {
+		SharedStateContext context = new SharedStateContext(id);
+
+		// register as service
+		Dictionary<String, Object> properties = new Hashtable<String, Object>();
+		properties.put(OSGI_PROP__ENV_ID, id);
+		// add input properties
+		if (inProperties != null) {
+			for (Map.Entry<String, Object> entry : inProperties.entrySet()) {
+				properties.put(entry.getKey(), entry.getValue());
+			}
+		}
+		ServiceRegistration<ISharedStateContext> reg = componentContext
+				.getBundleContext().registerService(ISharedStateContext.class,
+						context, properties);
+		registrations.put(id, reg);
+		return context;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.state.ISharedStateContextProvider#unget(org.eclipse.osbp.runtime.common.state.ISharedStateContext)
+	 */
+	@Override
+	public void unget(ISharedStateContext context) {
+		IReferenceCountable countable = (IReferenceCountable) context;
+		countable.decreaseUsageCount();
+
+		if (countable.getUsageCount() <= 0) {
+			ServiceRegistration<ISharedStateContext> reg = registrations
+					.remove(context.getId());
+			if (reg != null) {
+				ISharedStateContext service = componentContext
+						.getBundleContext().getService(reg.getReference());
+				if (service instanceof IDisposable) {
+					((IDisposable) service).dispose();
+				}
+				reg.unregister();
+			}
+		}
+	}
+
+	/**
+	 * Activate.
+	 *
+	 * @param context
+	 *            the context
+	 */
+	@Activate
+	protected void activate(ComponentContext context) {
+		this.componentContext = context;
+	}
+
+	/**
+	 * Deactivate.
+	 *
+	 * @param context
+	 *            the context
+	 */
+	@Deactivate
+	protected void deactivate(ComponentContext context) {
+
+		for (ServiceRegistration<ISharedStateContext> reg : registrations
+				.values()) {
+			ISharedStateContext service = context.getBundleContext()
+					.getService(reg.getReference());
+			if (service instanceof IDisposable) {
+				((IDisposable) service).dispose();
+			}
+			reg.unregister();
+		}
+
+		this.componentContext = null;
+	}
+
+	/**
+	 * Find.
+	 *
+	 * @param id
+	 *            the id
+	 * @return the i shared state context
+	 */
+	protected ISharedStateContext find(String id) {
+		try {
+			BundleContext bc = componentContext.getBundleContext();
+			Collection<ServiceReference<ISharedStateContext>> references = bc
+					.getServiceReferences(ISharedStateContext.class,
+							createFilter(id));
+			if (!references.isEmpty()) {
+				ISharedStateContext sharedStateContext = bc
+						.getService(references.iterator().next());
+				return sharedStateContext;
+			}
+		} catch (InvalidSyntaxException e) {
+			LOGGER.error("{}", e);
+		}
+
+		return null;
+	}
+
+	/**
+	 * Creates the filter.
+	 *
+	 * @param id
+	 *            the id
+	 * @return the string
+	 * @throws InvalidSyntaxException
+	 *             the invalid syntax exception
+	 */
+	protected String createFilter(String id) throws InvalidSyntaxException {
+		return String.format("(%s=%s)", OSGI_PROP__ENV_ID, id);
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/types/IBundleSpace.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/types/IBundleSpace.java
new file mode 100644
index 0000000..64339c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/types/IBundleSpace.java
@@ -0,0 +1,47 @@
+/**
+ * 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.types;
+
+import org.osgi.framework.Bundle;
+
+// TODO: Auto-generated Javadoc
+/**
+ * A bundle space is a collection of bundles that expose their classes. Bundles
+ * with the bundle header <code>"OSBP-RuntimeBuilder-BundleSpace"</code> will be
+ * automatically added using the extender pattern.
+ */
+public interface IBundleSpace {
+
+	/**
+	 * Tries to find a class for the given class name using the bundles
+	 * registered in the bundle space.
+	 *
+	 * @param name
+	 *            the name
+	 * @return the class
+	 * @throws ClassNotFoundException
+	 *             the class not found exception
+	 */
+	Class<?> forName(String name) throws ClassNotFoundException;
+	/**
+	 * Adds a new bundle to the bundle space. The bundle will be used to find
+	 * classes.
+	 * 
+	 * @param bundle
+	 */
+	void add(Bundle bundle);
+	/**
+	 * Removes the bundle from the bundle space.
+	 * 
+	 * @param bundle
+	 */
+	void remove(Bundle bundle);
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/types/ITypeProviderService.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/types/ITypeProviderService.java
new file mode 100644
index 0000000..00ff5b1
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/types/ITypeProviderService.java
@@ -0,0 +1,39 @@
+/**
+ * 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.types;
+
+// TODO: Auto-generated Javadoc
+/**
+ * This service is responsible to load classes which are visible for the domain.
+ * For instance jpa entities, dtos,...
+ * <p>
+ * Different concepts may be used. The default way to provide an implementation
+ * is the use of the BundleSpace. A bundleSpace is a selected quantity of
+ * bundles, that expose their classes. Bundles with the bundle header
+ * <code>"OSBP-RuntimeBuilder-BundleSpace"</code> will be automatically added
+ * using the extender pattern. The default implementation of this service will
+ * use the bundle space and tries to load classes by the registered bundles.
+ */
+public interface ITypeProviderService {
+
+	/**
+	 * Returns the class for the given qualified name and type. For emf pass the
+	 * EClass as clazz.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @param qualifiedName
+	 *            the qualified name
+	 * @return the class
+	 */
+	Class<?> forName(Object clazz, String qualifiedName);
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/user/IUserInfo.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/user/IUserInfo.java
new file mode 100644
index 0000000..0a256e1
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/user/IUserInfo.java
@@ -0,0 +1,48 @@
+/**
+ * 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.user;
+
+import org.osgi.service.prefs.Preferences;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Provides information about the current user.
+ */
+public interface IUserInfo {
+
+	/**
+	 * Returns the id of the user.
+	 *
+	 * @return the id
+	 */
+	String getId();
+
+	// /**
+	// * Returns the location where all user specific settings are stored. If no
+	// * location is available, empty string will be returned.
+	// *
+	// * @return
+	// */
+	// String getLocation();
+
+	/**
+	 * Returns the user preferences. If no user preferences are available then
+	 * <code>null</code> is returned.
+	 * 
+	 * @param qualifier
+	 *            The qualifier to access the preference node.
+	 * 
+	 * @return The preferences for the given qualifier or <code>null</code> if
+	 *         no proper preferences could be found.
+	 */
+	Preferences getPreferences(String qualifier);
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/util/OSGiUtil.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/util/OSGiUtil.java
new file mode 100644
index 0000000..12cca2c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/util/OSGiUtil.java
@@ -0,0 +1,145 @@
+/**
+ * Copyright (c) 2011, 2015 - Bernhard Edler (Wien), 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:
+ *         Bernhard Edler - Initial implementation
+ */
+package org.eclipse.osbp.runtime.common.util;
+
+import java.util.Arrays;
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Properties;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class OSGiUtil.
+ */
+@SuppressWarnings("all")
+public class OSGiUtil {
+
+	/**
+	 * Convert hash map to dictionary.
+	 *
+	 * @param input
+	 *            the input
+	 * @return the dictionary
+	 */
+	public static Dictionary<String, Object> convertHashMapToDictionary(
+			HashMap<?, ?> input) {
+		Dictionary<String, Object> dict = new Hashtable<String, Object>();
+		for (Object key : input.keySet()) {
+			dict.put(key.toString(), input.get(key));
+		}
+		return dict;
+	}
+
+	/**
+	 * Convert hash map to properties.
+	 *
+	 * @param input
+	 *            the input
+	 * @return the properties
+	 */
+	public static Properties convertHashMapToProperties(HashMap<?, ?> input) {
+		Properties props = new Properties();
+		for (Object key : input.keySet()) {
+			props.put(key, input.get(key));
+		}
+		return props;
+	}
+
+	/**
+	 * Convert dictionary to hash map.
+	 *
+	 * @param input
+	 *            the input
+	 * @return the hash map
+	 */
+	public static HashMap<String, String> convertDictionaryToHashMap(
+			Dictionary<?, ?> input) {
+		HashMap<String, String> map = new HashMap<String, String>();
+		Enumeration<String> iter = (Enumeration<String>) input.keys();
+		while (iter.hasMoreElements()) {
+			String key = (String) iter.nextElement();
+			map.put(key, input.get(key).toString());
+		}
+		return map;
+	}
+
+	/**
+	 * Convert dictionary to properties.
+	 *
+	 * @param input
+	 *            the input
+	 * @return the properties
+	 */
+	public static Properties convertDictionaryToProperties(
+			Dictionary<?, ?> input) {
+		Properties props = new Properties();
+		Enumeration<String> iter = (Enumeration<String>) input.keys();
+		while (iter.hasMoreElements()) {
+			String key = (String) iter.nextElement();
+			props.setProperty(key, input.get(key).toString());
+		}
+		return props;
+	}
+
+	/**
+	 * Gets the enum values.
+	 *
+	 * @param e
+	 *            the e
+	 * @return the enum values
+	 */
+	public static String[] getEnumValues(Class<? extends Enum<?>> e) {	
+		return Arrays.toString(e.getEnumConstants()).replaceAll("^.|.$", "")
+				.split(", ");
+	}
+
+	/**
+	 * Filter properties.
+	 *
+	 * @param properties
+	 *            the properties
+	 * @param keySet
+	 *            the key set
+	 * @return the hash map
+	 */
+	public static HashMap<String, String> filterProperties(
+			HashMap<String, String> properties, String[] keySet) {
+		for (String key : properties.keySet()) {
+			if (!Arrays.asList(keySet).contains(key)) {
+				properties.remove(key);
+			}
+		}
+		return properties;
+	};
+
+	/**
+	 * Filter properties.
+	 *
+	 * @param properties
+	 *            the properties
+	 * @param keySet
+	 *            the key set
+	 * @return the properties
+	 */
+	public static Properties filterProperties(Properties properties,
+			String[] keySet) {
+		Enumeration<Object> iter = (Enumeration<Object>) properties.keys();
+		while (iter.hasMoreElements()) {
+			String key = (String) iter.nextElement();
+			if (!Arrays.asList(keySet).contains(key)) {
+				properties.remove(key);
+			}
+		}
+		return properties;
+	};
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/validation/IStatus.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/validation/IStatus.java
new file mode 100644
index 0000000..bf9fdc1
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/validation/IStatus.java
@@ -0,0 +1,200 @@
+/**
+ * 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.validation;
+
+/**
+ * The status defines the current state of a process. It may be used for
+ * different usecases. For instance for validations, to determine veto before
+ * calling a process, to visualize thrown exceptions,... It is a general
+ * implementation.
+ */
+public interface IStatus {
+
+	/**
+	 * A constant for ok status.
+	 */
+	public static final IStatus OK = Status.createOKStatus();
+
+	/**
+	 * A constant for cancel status.
+	 */
+	public static final IStatus CANCEL = Status.createCancelStatus();
+
+	/**
+	 * A constant for error status.
+	 */
+	public static final IStatus ERROR = Status.createErrorStatus();
+
+	/**
+	 * The id of the affected application.
+	 */
+	public static final String PROP_UI_APPLICATION_ID = "application.id";
+
+	/**
+	 * The id of the field.
+	 */
+	public static final String PROP_FIELD_ID = "field.id";
+
+	/**
+	 * I18nKey of the field.
+	 */
+	public static final String PROP_FIELD_I18N_KEY = "field.i18nKey";
+
+	/**
+	 * javax constraint if created by bean validation.
+	 */
+	public static final String PROP_JAVAX_CONSTRAINT = "javax.validation.constraint";
+
+	/**
+	 * leaf bean if created by bean validation.
+	 */
+	public static final String PROP_JAVAX_LEAF_BEAN = "javax.validation.leafbean";
+
+	/**
+	 * property path if created by bean validation.
+	 */
+	public static final String PROP_JAVAX_PROPERTY_PATH = "javax.validation.propertypath";
+
+	/**
+	 * Class that created the message.
+	 */
+	public static final String PROP_CREATOR = "creator";
+
+	/**
+	 * Returns the id of the status. It is prepared by the pattern
+	 * <code>{bundleSymbolicName}.{code}</code>. So every bundle may specify its own codes.
+	 *
+	 * @return the id
+	 */
+	String getId();
+
+	/**
+	 * Returns the status code. The code specifies the unique id of a status
+	 * message in a bundle.
+	 *
+	 * @return the code
+	 */
+	String getCode();
+
+	/**
+	 * Returns symbolic name of the bundle that has created the status.
+	 *
+	 * @return the bundle symblic name
+	 */
+	String getBundleSymblicName();
+
+	/**
+	 * Returns the severity of the status.
+	 *
+	 * @return the severity
+	 */
+	Severity getSeverity();
+
+	/**
+	 * Returns the message of the status. May be <code>null</code>.
+	 *
+	 * @return the message
+	 */
+	String getMessage();
+
+	/**
+	 * Returns the exception of the status. May be <code>null</code>.
+	 *
+	 * @return the exception
+	 */
+	Exception getException();
+
+	/**
+	 * Returns true, if the status is {@link Severity#OK} or
+	 * {@link Severity#INFO}.
+	 *
+	 * @return true, if is ok
+	 */
+	boolean isOK();
+
+	/**
+	 * Returns true, if the status is {@link Severity#INFO}.
+	 *
+	 * @return true, if is info
+	 */
+	boolean isInfo();
+
+	/**
+	 * Returns true, if the status is {@link Severity#WARNING}.
+	 *
+	 * @return true, if is warning
+	 */
+	boolean isWarning();
+
+	/**
+	 * Returns true, if the status is {@link Severity#ERROR}.
+	 *
+	 * @return true, if is error
+	 */
+	boolean isError();
+
+	/**
+	 * Returns true, if the status is {@link Severity#CANCEL}. May be used to
+	 * detect a "veto" for a process.
+	 *
+	 * @return true, if is cancel
+	 */
+	boolean isCancel();
+
+	/**
+	 * Puts a property into the status.
+	 *
+	 * @param key
+	 *            the key
+	 * @param value
+	 *            the value
+	 */
+	void putProperty(String key, Object value);
+
+	/**
+	 * Returns true, if a property exists.
+	 *
+	 * @param key
+	 *            the key
+	 * @return true, if successful
+	 */
+	boolean containsProperty(String key);
+
+	/**
+	 * Returns the value of the property.
+	 *
+	 * @param key
+	 *            the key
+	 * @return the property
+	 */
+	Object getProperty(String key);
+
+	/**
+	 * The severity of the status.
+	 */
+	enum Severity {
+		
+		/** The ok. */
+		OK, 
+ /** The info. */
+ INFO, 
+ /** The warning. */
+ WARNING, 
+ /** The error. */
+ ERROR, 
+ /** The cancel. */
+ CANCEL, 
+ /** The critical. */
+ CRITICAL, 
+ /** The systemerror. */
+ SYSTEMERROR;
+	}
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/validation/IValidationParticipant.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/validation/IValidationParticipant.java
new file mode 100644
index 0000000..a9a69ca
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/validation/IValidationParticipant.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.validation;
+
+import java.util.Map;
+import java.util.Set;
+
+// TODO: Auto-generated Javadoc
+/**
+ * A validation participant is used by the dto service, to validate complex
+ * rules.
+ */
+public interface IValidationParticipant {
+
+	/**
+	 * Validates the given object and returns status objects in case of warning
+	 * or error.
+	 *
+	 * @param object
+	 *            The object to be validated
+	 * @param kind
+	 *            The kind of validation to be performed
+	 * @param properties
+	 *            Any kind of key-value pairs
+	 * @return the sets the
+	 */
+	public Set<IStatus> validate(Object object, ValidationKind kind,
+			Map<String, Object> properties);
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/validation/Status.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/validation/Status.java
new file mode 100644
index 0000000..f2f51d3
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/validation/Status.java
@@ -0,0 +1,307 @@
+/**
+ * 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.validation;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.osgi.framework.FrameworkUtil;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class Status.
+ */
+public class Status implements IStatus {
+
+	/** The code. */
+	private String code = "";
+	
+	/** The bundle symbolic name. */
+	private String bundleSymbolicName = "";
+	
+	/** The severity. */
+	private Severity severity;
+	
+	/** The message. */
+	private String message = "";
+	
+	/** The exception. */
+	private Exception exception;
+	
+	/** The properties. */
+	private Map<String, Object> properties;
+
+	/**
+	 * Instantiates a new status.
+	 */
+	public Status() {
+
+	}
+
+	/**
+	 * Creates an OK status.
+	 *
+	 * @return the i status
+	 */
+	public static IStatus createOKStatus() {
+		Status status = new Status();
+		status.severity = Severity.OK;
+		return status;
+	}
+
+	/**
+	 * Creates an CANCEL status.
+	 *
+	 * @return the i status
+	 */
+	public static IStatus createCancelStatus() {
+		Status status = new Status();
+		status.severity = Severity.CANCEL;
+		return status;
+	}
+
+	/**
+	 * Creates an ERROR status.
+	 *
+	 * @return the i status
+	 */
+	public static IStatus createErrorStatus() {
+		Status status = new Status();
+		status.severity = Severity.ERROR;
+		return status;
+	}
+
+	/**
+	 * Creates an ERROR status.
+	 *
+	 * @param e
+	 *            - the exception
+	 * @return the i status
+	 */
+	public static IStatus createErrorStatus(Exception e) {
+		Status status = new Status();
+		status.severity = Severity.ERROR;
+		status.exception = e;
+		return status;
+	}
+
+	/**
+	 * Creates a status for the given parameters.
+	 *
+	 * @param code
+	 *            - the unique message code (is unique in a bundle)
+	 * @param clazz
+	 *            - the class that is contained in the bundle, that specifies
+	 *            the code
+	 * @param severity
+	 *            - the serverity of the status
+	 * @param message
+	 *            - the message of the status
+	 * @return the i status
+	 */
+	public static IStatus createStatus(String code, Class<?> clazz,
+			Severity severity, String message) {
+		Status status = new Status();
+		status.code = code;
+		status.bundleSymbolicName = getBundleSymbolicName(clazz);
+		status.severity = severity;
+		status.message = message;
+		return status;
+	}
+
+	/**
+	 * Creates the status.
+	 *
+	 * @param code
+	 *            - the unique message code (is unique in a bundle)
+	 * @param clazz
+	 *            - the class that is contained in the bundle, that specifies
+	 *            the code
+	 * @param severity
+	 *            - the serverity of the status
+	 * @param message
+	 *            - the message of the status
+	 * @param exception
+	 *            - the thrown exception
+	 * @return the i status
+	 */
+	public static IStatus createStatus(String code, Class<?> clazz,
+			Severity severity, String message, Exception exception) {
+		Status status = new Status();
+		status.code = code;
+		status.bundleSymbolicName = getBundleSymbolicName(clazz);
+		status.severity = severity;
+		status.message = message;
+		status.exception = exception;
+		return status;
+	}
+
+	/**
+	 * Creates the status.
+	 *
+	 * @param code
+	 *            - the unique message code (is unique in a bundle)
+	 * @param clazz
+	 *            - the class that is contained in the bundle, that specifies
+	 *            the code
+	 * @param severity
+	 *            - the serverity of the status
+	 * @param exception
+	 *            - the thrown exception
+	 * @return the i status
+	 */
+	public static IStatus createStatus(String code, Class<?> clazz,
+			Severity severity, Exception exception) {
+		Status status = new Status();
+		status.code = code;
+		status.bundleSymbolicName = getBundleSymbolicName(clazz);
+		status.severity = severity;
+		status.exception = exception;
+		return status;
+	}
+
+	/**
+	 * Returns the bundle symbolic name for the given class.
+	 *
+	 * @param clazz
+	 *            the clazz
+	 * @return the bundle symbolic name
+	 */
+	private static String getBundleSymbolicName(Class<?> clazz) {
+		if (clazz == null || FrameworkUtil.getBundle(clazz) == null) {
+			return "no bundle available";
+		}
+		return FrameworkUtil.getBundle(clazz).getSymbolicName();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.validation.IStatus#getId()
+	 */
+	@Override
+	public String getId() {
+		return String.format("%s.%s", getBundleSymblicName(), getCode());
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.validation.IStatus#getCode()
+	 */
+	@Override
+	public String getCode() {
+		return code;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.validation.IStatus#getBundleSymblicName()
+	 */
+	@Override
+	public String getBundleSymblicName() {
+		return bundleSymbolicName;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.validation.IStatus#getSeverity()
+	 */
+	@Override
+	public Severity getSeverity() {
+		return severity;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.validation.IStatus#getMessage()
+	 */
+	@Override
+	public String getMessage() {
+		return message;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.validation.IStatus#getException()
+	 */
+	@Override
+	public Exception getException() {
+		return exception;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.validation.IStatus#isOK()
+	 */
+	@Override
+	public boolean isOK() {
+		return severity == Severity.OK || severity == Severity.INFO;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.validation.IStatus#isInfo()
+	 */
+	@Override
+	public boolean isInfo() {
+		return severity == Severity.INFO;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.validation.IStatus#isWarning()
+	 */
+	@Override
+	public boolean isWarning() {
+		return severity == Severity.WARNING;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.validation.IStatus#isError()
+	 */
+	@Override
+	public boolean isError() {
+		return severity == Severity.ERROR;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.validation.IStatus#isCancel()
+	 */
+	@Override
+	public boolean isCancel() {
+		return severity == Severity.CANCEL;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.validation.IStatus#putProperty(java.lang.String, java.lang.Object)
+	 */
+	@Override
+	public void putProperty(String key, Object value) {
+		if (properties == null) {
+			properties = new HashMap<String, Object>();
+		}
+		properties.put(key, value);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.validation.IStatus#containsProperty(java.lang.String)
+	 */
+	@Override
+	public boolean containsProperty(String key) {
+		if (properties == null) {
+			return false;
+		}
+		return properties.containsKey(key);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.runtime.common.validation.IStatus#getProperty(java.lang.String)
+	 */
+	@Override
+	public Object getProperty(String key) {
+		if (properties == null) {
+			return null;
+		}
+		return properties.get(key);
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/validation/ValidationKind.java b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/validation/ValidationKind.java
new file mode 100644
index 0000000..94ca123
--- /dev/null
+++ b/org.eclipse.osbp.runtime.common/src/org/eclipse/osbp/runtime/common/validation/ValidationKind.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.validation;
+
+/**
+ * The kind of validation to be performed.
+ */
+public enum ValidationKind {
+
+	/** Validates "create new". */
+	CREATE,
+
+	/** Validates "update". */
+	UPDATE,
+
+	/** Validates "delete existing". */
+	DELETE,
+
+	/** Any other kind of validation. */
+	OTHER;
+}
diff --git a/org.eclipse.osbp.runtime.datasource.provider/.project b/org.eclipse.osbp.runtime.datasource.provider/.project
new file mode 100644
index 0000000..b615579
--- /dev/null
+++ b/org.eclipse.osbp.runtime.datasource.provider/.project
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.runtime.datasource.provider</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.sonarlint.eclipse.core.sonarlintBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.babel.editor.rbeBuilder</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.datasource.provider/LICENSE.txt b/org.eclipse.osbp.runtime.datasource.provider/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.datasource.provider/LICENSE.txt
@@ -0,0 +1,161 @@
+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.datasource.provider/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.datasource.provider/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ab4b857
--- /dev/null
+++ b/org.eclipse.osbp.runtime.datasource.provider/META-INF/MANIFEST.MF
@@ -0,0 +1,25 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.runtime.datasource.provider
+Bundle-SymbolicName: org.eclipse.osbp.runtime.datasource.provider
+Bundle-Vendor: Eclipse OSBP
+Bundle-Version: 0.9.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Import-Package: javax.transaction;version="1.1.0",
+ javax.transaction.xa;version="1.1.0",
+ org.osgi.framework;version="1.8.0",
+ org.osgi.service.cm;version="1.5.0",
+ org.osgi.service.component;version="1.2.2",
+ org.osgi.service.component.annotations;version="1.2.0",
+ org.osgi.service.jdbc,
+ org.osgi.service.jndi;version="1.0.0",
+ org.osgi.util.tracker;version="1.4.0",
+ 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.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
+Export-Package: org.eclipse.osbp.runtime.datasource.provider;version="0.9.0"
diff --git a/org.eclipse.osbp.runtime.datasource.provider/OSGI-INF/org.eclipse.osbp.runtime.datasource.provider.DatasourceService.xml b/org.eclipse.osbp.runtime.datasource.provider/OSGI-INF/org.eclipse.osbp.runtime.datasource.provider.DatasourceService.xml
new file mode 100644
index 0000000..4f283bc
--- /dev/null
+++ b/org.eclipse.osbp.runtime.datasource.provider/OSGI-INF/org.eclipse.osbp.runtime.datasource.provider.DatasourceService.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="activate" name="org.eclipse.osbp.runtime.datasource.provider.DatasourceService">
+   <implementation class="org.eclipse.osbp.runtime.datasource.provider.DatasourceService"/>
+   <service>
+      <provide interface="org.eclipse.osbp.runtime.common.datasource.IDataSourceService"/>
+   </service>
+</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.datasource.provider/OSGI-INF/org.eclipse.osbp.runtime.datasource.provider.xml b/org.eclipse.osbp.runtime.datasource.provider/OSGI-INF/org.eclipse.osbp.runtime.datasource.provider.xml
new file mode 100644
index 0000000..c588713
--- /dev/null
+++ b/org.eclipse.osbp.runtime.datasource.provider/OSGI-INF/org.eclipse.osbp.runtime.datasource.provider.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" configuration-policy="require" deactivate="deactivate" modified="update" name="org.eclipse.osbp.runtime.datasource.provider">
+   <implementation class="org.eclipse.osbp.runtime.datasource.provider.DatasourceComponent"/>
+   <service>
+      <provide interface="org.osgi.util.tracker.ServiceTrackerCustomizer"/>
+      <provide interface="org.osgi.service.cm.ManagedService"/>
+   </service>
+</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.datasource.provider/about.html b/org.eclipse.osbp.runtime.datasource.provider/about.html
new file mode 100644
index 0000000..64c0598
--- /dev/null
+++ b/org.eclipse.osbp.runtime.datasource.provider/about.html
@@ -0,0 +1,28 @@
+<!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.datasource.provider/about.ini b/org.eclipse.osbp.runtime.datasource.provider/about.ini
new file mode 100644
index 0000000..7df671f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.datasource.provider/about.ini
@@ -0,0 +1,17 @@
+# 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.datasource.provider/about.mappings b/org.eclipse.osbp.runtime.datasource.provider/about.mappings
new file mode 100644
index 0000000..4511a0a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.datasource.provider/about.mappings
@@ -0,0 +1,6 @@
+# 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.datasource.provider/about.properties b/org.eclipse.osbp.runtime.datasource.provider/about.properties
new file mode 100644
index 0000000..6698453
--- /dev/null
+++ b/org.eclipse.osbp.runtime.datasource.provider/about.properties
@@ -0,0 +1,26 @@
+#
+# 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.datasource.provider
+
+################ 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.datasource.provider/build.properties b/org.eclipse.osbp.runtime.datasource.provider/build.properties
new file mode 100644
index 0000000..145b8c9
--- /dev/null
+++ b/org.eclipse.osbp.runtime.datasource.provider/build.properties
@@ -0,0 +1,7 @@
+output.. = target/classes/
+bin.includes = about.properties,  about.mappings,  about.ini,  about.html,  META-INF/,\
+               .,\
+               OSGI-INF/,\
+               LICENSE.txt
+source.. = src/
+src.includes = about.properties,  about.mappings,  about.ini,  about.html,  LICENSE.txt
diff --git a/org.eclipse.osbp.runtime.datasource.provider/pom.xml b/org.eclipse.osbp.runtime.datasource.provider/pom.xml
new file mode 100644
index 0000000..7a4062f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.datasource.provider/pom.xml
@@ -0,0 +1,26 @@
+<?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.datasource.provider</artifactId>
+    <packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/org.eclipse.osbp.runtime.datasource.provider/src/org/eclipse/osbp/runtime/datasource/provider/Activator.java b/org.eclipse.osbp.runtime.datasource.provider/src/org/eclipse/osbp/runtime/datasource/provider/Activator.java
new file mode 100644
index 0000000..056718c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.datasource.provider/src/org/eclipse/osbp/runtime/datasource/provider/Activator.java
@@ -0,0 +1,131 @@
+/**
+ * Copyright (c) 2011, 2015 - Bernhard Edler (Wien), 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:
+ *         Bernhard Edler - Initial implementation
+ */
+package org.eclipse.osbp.runtime.datasource.provider;
+
+import java.util.Properties;
+
+import org.apache.derby.jdbc.EmbeddedDriver;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+@SuppressWarnings(value = { "all" })
+public class Activator implements BundleActivator {
+
+	public static final String OSGI_JNDI_SERVICE_NAME = "osgi.jndi.service.name";
+	public static final String OSGI_JNDI_URL_PREFIX = "osgi:service/";
+	public static final String OSGI_UNIT_NAME = "osgi.unit.name";
+
+	public static final String DS_DRIVER_NAME = EmbeddedDriver.class.getName();
+
+	private static BundleContext ctx;
+	private static Activator plugin;
+	private Properties dataSourceProperties;
+
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
+	 * )
+	 */
+	public void start(BundleContext context) throws Exception {
+		ctx = context;
+		plugin = this;
+		// // PostgreSQL Properties
+		// // !!! on PostgreSQL, the server configuration property
+		// "maxPreparedConnections"
+		// // must be set to a value > 0
+		// props.setProperty("user", "jppf");
+		// props.setProperty("password", "jppf");
+		// props.setProperty("databaseName", "jppf_samples");
+		// props.setProperty("serverName", "localhost");
+		// props.setProperty("portNumber", "5432");
+		// // MySQL Properties
+		// props.setProperty("user", "jppf");
+		// props.setProperty("password", "jppf");
+		// props.setProperty("serverName", "localhost");
+		// props.setProperty("port", "3306");
+		// props.setProperty("databaseName", "jppf_samples");
+		// props.setProperty("pinGlobalTxToPhysicalConnection", "true");
+		//
+		// // H2 Properties
+		// props.setProperty("user", "jppf");
+		// props.setProperty("password", "jppf");
+		// props.setProperty("URL",
+		// "jdbc:h2:tcp://localhost:9092/./jppf_samples;SCHEMA=PUBLIC");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
+	 * )
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		ctx = null;
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+//	private synchronized DataSource createDataSource(String jndiDatasource)
+//			throws SQLException, InvalidSyntaxException {
+//		DataSourceFactory dsf = lookupDsf(DS_DRIVER_NAME);
+//		DataSource ds = dsf.createDataSource(dataSourceProperties);
+//		Hashtable<String, String> ht = new Hashtable<String, String>();
+//		ht.put(OSGI_JNDI_SERVICE_NAME, jndiDatasource);
+//		ctx.registerService(DataSource.class, ds, ht);
+//		return ds;
+//	}
+//
+//	private synchronized XADataSource createXADataSource(String jndiDatasource)
+//			throws SQLException, InvalidSyntaxException {
+//		DataSourceFactory dsf = lookupDsf(DS_DRIVER_NAME);
+//		XADataSource ds = dsf.createXADataSource(dataSourceProperties);
+//		Hashtable<String, String> ht = new Hashtable<String, String>();
+//		ht.put(OSGI_JNDI_SERVICE_NAME, "XA" + jndiDatasource);
+//		ctx.registerService(XADataSource.class, ds, ht);
+//		return ds;
+//	}
+//
+//	private DataSourceFactory lookupDsf(String clientDriverName)
+//			throws InvalidSyntaxException {
+//		String filter = "(&(" + DataSourceFactory.OSGI_JDBC_DRIVER_CLASS + "="
+//				+ clientDriverName + "))";
+//		return getDsf(filter);
+//	}
+//
+//	private DataSourceFactory getDsf(String filter)
+//			throws InvalidSyntaxException {
+//		ServiceReference[] refs = null;
+//		refs = ctx.getServiceReferences(DataSourceFactory.class.getName(),
+//				filter);
+//		return (refs == null) ? null : (DataSourceFactory) ctx
+//				.getService(refs[0]);
+//	}
+}
diff --git a/org.eclipse.osbp.runtime.datasource.provider/src/org/eclipse/osbp/runtime/datasource/provider/DatasourceComponent.java b/org.eclipse.osbp.runtime.datasource.provider/src/org/eclipse/osbp/runtime/datasource/provider/DatasourceComponent.java
new file mode 100644
index 0000000..54fb43f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.datasource.provider/src/org/eclipse/osbp/runtime/datasource/provider/DatasourceComponent.java
@@ -0,0 +1,186 @@
+/**
+ * Copyright (c) 2011, 2015 - Bernhard Edler (Wien), 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:
+ *         Bernhard Edler - Initial implementation
+ */
+package org.eclipse.osbp.runtime.datasource.provider;
+
+import java.sql.SQLException;
+import java.util.Dictionary;
+import java.util.Properties;
+
+import javax.sql.DataSource;
+import javax.sql.XADataSource;
+
+import org.eclipse.osbp.runtime.common.datasource.config.CommonDatasourceConfig;
+import org.eclipse.osbp.runtime.common.util.OSGiUtil;
+import org.osgi.framework.Filter;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.cm.ConfigurationException;
+import org.osgi.service.cm.ManagedService;
+import org.osgi.service.component.ComponentContext;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.ConfigurationPolicy;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Modified;
+import org.osgi.service.jdbc.DataSourceFactory;
+import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
+
+@Component(name = "org.eclipse.osbp.runtime.datasource.provider", configurationPolicy = ConfigurationPolicy.REQUIRE)
+public class DatasourceComponent implements
+		ServiceTrackerCustomizer<DataSourceFactory, DataSourceFactory>,
+		ManagedService {
+
+	private static final String DSFACTORY_FILTER = "(&(objectClass=org.osgi.service.jdbc.DataSourceFactory)(osgi.jdbc.driver.class=%s))";
+	private ComponentContext context;
+	private DataSource ds;
+	private XADataSource xaDs;
+	private ServiceRegistration<DataSource> dsRegister;
+	private ServiceRegistration<XADataSource> xaDsRegister;
+	private ServiceTracker<DataSourceFactory, DataSourceFactory> dsFactoryTracker;
+	private DataSourceFactory dataSourceFactory;
+
+	@Activate
+	protected void activate(ComponentContext context) {
+		this.context = context;
+
+	}
+
+	private Filter createFilter() throws InvalidSyntaxException {
+		Filter f = context.getBundleContext().createFilter(
+				String.format(
+						DSFACTORY_FILTER,
+						context.getProperties().get(
+								DataSourceFactory.OSGI_JDBC_DRIVER_NAME)));
+		return f;
+	}
+
+	@Modified
+	protected void update(ComponentContext context) {
+		killCurrent();
+		if (dataSourceFactory != null) {
+			createNewDatasource(context.getProperties());
+		}
+	}
+
+	private void killCurrent() {
+		if (dsRegister != null) {
+			ds = null;
+			dsRegister.unregister();
+			dsRegister = null;
+		}
+
+		if (xaDsRegister != null) {
+			xaDs = null;
+			xaDsRegister.unregister();
+			xaDsRegister = null;
+		}
+	}
+
+	private void createNewDatasource(Dictionary<?, ?> input) {
+		try {
+			String driverName = (String) input
+					.get(DataSourceFactory.OSGI_JDBC_DRIVER_NAME);
+
+			Properties properties = OSGiUtil
+					.filterProperties(OSGiUtil
+							.convertDictionaryToProperties(input),
+							CommonDatasourceConfig
+									.getPropertyKeysForDriver(driverName));
+
+			ds = dataSourceFactory.createDataSource(properties);
+			xaDs = dataSourceFactory.createXADataSource(properties);
+
+			// Hashtable<String, Object> props = new Hashtable<String,
+			// Object>();
+			// props.put(JNDIConstants.JNDI_SERVICENAME, "");
+			// TODO - please put props to registry
+			// 1) datasourceName from DatasourceFactory#OSGI_JDBC_DRIVER_CLASS,
+			// #OSGI_JDBC_DRIVER_NAME, #OSGI_JDBC_DRIVER_VERSION,
+			// #JDBC_DATABASE_NAME, #JDBC_DATASOURCE_NAME
+			//
+			// And please register the #JDBC_DATASOURCE_NAME with
+			// JNDIConstants.JNDI_SERVICENAME too.
+			dsRegister = context.getBundleContext().registerService(
+					DataSource.class, ds, null);
+			xaDsRegister = context.getBundleContext().registerService(
+					XADataSource.class, xaDs, null);
+		} catch (SQLException e) {
+			e.printStackTrace();
+		} catch (SecurityException e) {
+			e.printStackTrace();
+		} catch (NullPointerException e) {
+			e.printStackTrace();
+		}
+	}
+
+	@Deactivate
+	protected void deactivate(ComponentContext context) {
+		this.context = null;
+
+		killCurrent();
+
+		if (dsFactoryTracker != null) {
+			dsFactoryTracker.close();
+			dsFactoryTracker = null;
+		}
+
+	}
+
+	@Override
+	public DataSourceFactory addingService(
+			ServiceReference<DataSourceFactory> reference) {
+		if (dataSourceFactory == null) {
+			dataSourceFactory = context.getBundleContext()
+					.getService(reference);
+			createNewDatasource(context.getProperties());
+			return dataSourceFactory;
+		} else {
+			return null;
+		}
+	}
+
+	@Override
+	public void modifiedService(ServiceReference<DataSourceFactory> reference,
+			DataSourceFactory service) {
+
+	}
+
+	@Override
+	public void removedService(ServiceReference<DataSourceFactory> reference,
+			DataSourceFactory service) {
+		if (service == dataSourceFactory) {
+			killCurrent();
+			dataSourceFactory = null;
+		}
+	}
+
+	@Override
+	public void updated(Dictionary<String, ?> properties)
+			throws ConfigurationException {
+		try {
+			dsFactoryTracker = new ServiceTracker<DataSourceFactory, DataSourceFactory>(
+					context.getBundleContext(), createFilter(), this);
+			dsFactoryTracker.open();
+			dataSourceFactory = dsFactoryTracker.waitForService(1000);
+		} catch (InvalidSyntaxException e) {
+			e.printStackTrace();
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+		if (properties != null) {
+			killCurrent();
+			createNewDatasource(properties);
+		}
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.datasource.provider/src/org/eclipse/osbp/runtime/datasource/provider/DatasourceService.java b/org.eclipse.osbp.runtime.datasource.provider/src/org/eclipse/osbp/runtime/datasource/provider/DatasourceService.java
new file mode 100644
index 0000000..3052e3f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.datasource.provider/src/org/eclipse/osbp/runtime/datasource/provider/DatasourceService.java
@@ -0,0 +1,143 @@
+/**
+ * Copyright (c) 2011, 2015 - Bernhard Edler (Wien), 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:
+ *         Bernhard Edler - Initial implementation
+ */
+package org.eclipse.osbp.runtime.datasource.provider;
+
+import java.io.IOException;
+import java.sql.DatabaseMetaData;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import javax.sql.DataSource;
+import javax.sql.XADataSource;
+
+import org.eclipse.osbp.runtime.common.datasource.IDataSourceService;
+import org.eclipse.osbp.runtime.common.datasource.config.CommonDatasourceConfig;
+import org.eclipse.osbp.runtime.common.util.OSGiUtil;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.component.ComponentContext;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.util.tracker.ServiceTracker;
+
+@SuppressWarnings("unused")
+@Component
+public class DatasourceService implements IDataSourceService {
+	private static final String ORG_LUNIFERA_EXAMPLES_DATASOURCE = "org.eclipse.osbp.runtime.datasource.provider";
+	private ServiceTracker<ConfigurationAdmin, ConfigurationAdmin> cfgAdminTracker;
+	private ConfigurationAdmin configAdmin;
+	private ComponentContext context;
+
+	private Collection<ServiceReference<XADataSource>> xADataSources;
+	private Collection<ServiceReference<DataSource>> dataSources;
+
+	@Activate
+	protected void activate(ComponentContext context) {
+		this.context = context;
+
+		try {
+			cfgAdminTracker = new ServiceTracker<ConfigurationAdmin, ConfigurationAdmin>(
+					context.getBundleContext(), ConfigurationAdmin.class, null);
+			cfgAdminTracker.open();
+			configAdmin = cfgAdminTracker.waitForService(1000);
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+	}
+
+	@Override
+	public List<DataSourceInfo> getDataSourcInfos(String filter) {
+		try {
+			dataSources = context.getBundleContext().getServiceReferences(
+					DataSource.class, filter);
+			xADataSources = context.getBundleContext().getServiceReferences(
+					XADataSource.class, filter);
+		} catch (InvalidSyntaxException e) {
+		}
+
+		ArrayList<DataSourceInfo> dsInfos = new ArrayList<DataSourceInfo>();
+		dataSources
+				.stream()
+				.map(serviceRef -> context.getBundleContext().getService(
+						serviceRef)).collect(Collectors.toList()).stream()
+				.forEach(dataSource -> {
+					try {
+						DataSourceInfo dI = new DataSourceInfo();
+//						dI.getProperties().put("Url", c.getURL().toString());
+						dsInfos.add(dI);
+					} catch (Exception e) {
+						e.printStackTrace();
+					}
+				});
+
+		return dsInfos;
+	}
+
+	@Override
+	public List<DataSource> getDataSources(String filter) {
+		try {
+			dataSources = context.getBundleContext().getServiceReferences(
+					DataSource.class, filter);
+			xADataSources = context.getBundleContext().getServiceReferences(
+					XADataSource.class, filter);
+		} catch (InvalidSyntaxException e) {
+		}
+
+		ArrayList<DataSource> dataSourcelist = new ArrayList<DataSource>();
+		dataSourcelist = (ArrayList<DataSource>) dataSources
+				.stream()
+				.map(serviceRef -> context.getBundleContext().getService(
+						serviceRef)).collect(Collectors.toList());
+
+		return dataSourcelist;
+	}
+
+	// @Override
+	// public void createDataSource(DataSourceConfig config) {
+	// try {
+	// // try {
+	// // if (configAdmin.listConfigurations(null) != null) {
+	// // List<Configuration> configurations = Arrays
+	// // .asList(configAdmin.listConfigurations(null));
+	// // for (Configuration c : configurations) {
+	// // c.delete();
+	// // }
+	// // }
+	// // } catch (NullPointerException e) {
+	// // e.printStackTrace();
+	// // }
+	// String pid = configAdmin.createFactoryConfiguration(
+	// ORG_LUNIFERA_EXAMPLES_DATASOURCE, null).getPid();
+	// configAdmin.getConfiguration(pid, null).update(
+	// config.getProperties());
+	// } catch (IOException e) {
+	// e.printStackTrace();
+	// // } catch (InvalidSyntaxException e) {
+	// // e.printStackTrace();
+	// }
+	// }
+
+	@Override
+	public void createDataSource(CommonDatasourceConfig config) {
+		try {
+			String pid = configAdmin.createFactoryConfiguration(
+					ORG_LUNIFERA_EXAMPLES_DATASOURCE, null).getPid();
+			configAdmin.getConfiguration(pid, null)
+					.update(OSGiUtil.convertHashMapToDictionary(config
+							.getProperties()));
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/org.eclipse.osbp.runtime.designer.api/.project b/org.eclipse.osbp.runtime.designer.api/.project
new file mode 100644
index 0000000..32ab2ef
--- /dev/null
+++ b/org.eclipse.osbp.runtime.designer.api/.project
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.runtime.designer.api</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.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.designer.api/LICENSE.txt b/org.eclipse.osbp.runtime.designer.api/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.designer.api/LICENSE.txt
@@ -0,0 +1,161 @@
+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.designer.api/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.designer.api/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..0f89957
--- /dev/null
+++ b/org.eclipse.osbp.runtime.designer.api/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.runtime.designer.api
+Bundle-SymbolicName: org.eclipse.osbp.runtime.designer.api
+Bundle-Vendor: Eclipse OSBP
+Bundle-Version: 0.9.0.qualifier
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.osbp.runtime.designer.api
+Require-Bundle: org.eclipse.emf.ecore
diff --git a/org.eclipse.osbp.runtime.designer.api/about.html b/org.eclipse.osbp.runtime.designer.api/about.html
new file mode 100644
index 0000000..64c0598
--- /dev/null
+++ b/org.eclipse.osbp.runtime.designer.api/about.html
@@ -0,0 +1,28 @@
+<!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.designer.api/about.ini b/org.eclipse.osbp.runtime.designer.api/about.ini
new file mode 100644
index 0000000..7df671f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.designer.api/about.ini
@@ -0,0 +1,17 @@
+# 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.designer.api/about.mappings b/org.eclipse.osbp.runtime.designer.api/about.mappings
new file mode 100644
index 0000000..4511a0a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.designer.api/about.mappings
@@ -0,0 +1,6 @@
+# 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.designer.api/about.properties b/org.eclipse.osbp.runtime.designer.api/about.properties
new file mode 100644
index 0000000..c56dbb2
--- /dev/null
+++ b/org.eclipse.osbp.runtime.designer.api/about.properties
@@ -0,0 +1,26 @@
+#
+# 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.designer.api
+
+################ 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.designer.api/build.properties b/org.eclipse.osbp.runtime.designer.api/build.properties
new file mode 100644
index 0000000..889ec21
--- /dev/null
+++ b/org.eclipse.osbp.runtime.designer.api/build.properties
@@ -0,0 +1,8 @@
+source.. = src/
+output.. = target/classes/
+bin.includes = about.properties,  about.mappings,  about.ini,  about.html,  META-INF/,\
+               .,\
+               .project,\
+               .classpath,\
+               LICENSE.txt
+src.includes = about.properties,  about.mappings,  about.ini,  about.html,  LICENSE.txt
diff --git a/org.eclipse.osbp.runtime.designer.api/pom.xml b/org.eclipse.osbp.runtime.designer.api/pom.xml
new file mode 100644
index 0000000..089443c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.designer.api/pom.xml
@@ -0,0 +1,24 @@
+<?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.designer.api</artifactId>
+    <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/org.eclipse.osbp.runtime.designer.api/src/org/eclipse/osbp/runtime/designer/api/IDesignerService.java b/org.eclipse.osbp.runtime.designer.api/src/org/eclipse/osbp/runtime/designer/api/IDesignerService.java
new file mode 100644
index 0000000..4e99d0f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.designer.api/src/org/eclipse/osbp/runtime/designer/api/IDesignerService.java
@@ -0,0 +1,115 @@
+/**
+ * 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.designer.api;
+
+/**
+ * This service is used by ECView components like layouts to deal with designer
+ * features. There is one instance per ECView context.
+ * 
+ * <code>@Scope(Session-Scope)</code> If running in a web session, all ECViews in the session
+ *                       may share this instance.
+ * <code>@Scope(View-Scope)</code> But also each ECView-Context may use its own service.
+ * @NoImplementByClients use AbstractImplementation
+ */
+public interface IDesignerService {
+
+	/**
+	 * Returns true, if the design mode is active.
+	 *
+	 * @return true, if is design mode
+	 */
+	boolean isDesignMode();
+
+	/**
+	 * If true, the design mode for the related ECView is activate. Deactivated
+	 * otherwise.
+	 *
+	 * @param value
+	 *            the new design mode
+	 */
+	void setDesignMode(boolean value);
+
+	/**
+	 * Adds a design listener.
+	 *
+	 * @param listener
+	 *            the listener
+	 */
+	void addListener(IDesignListener listener);
+
+	/**
+	 * Removes the given design listener.
+	 *
+	 * @param listener
+	 *            the listener
+	 */
+	void removeListener(IDesignListener listener);
+
+	/**
+	 * Listeners may deal with design events.
+	 *
+	 * @see DesignEvent
+	 */
+	
+	public interface IDesignListener {
+
+		/**
+		 * The design event to be processed.
+		 *
+		 * @param event
+		 *            the event
+		 */
+		void notify(DesignEvent event);
+
+	}
+
+	/**
+	 * The Class DesignEvent.
+	 */
+	public class DesignEvent {
+		
+		/** The type. */
+		private final EventType type;
+
+		/**
+		 * Instantiates a new design event.
+		 *
+		 * @param type
+		 *            the type
+		 */
+		public DesignEvent(EventType type) {
+			super();
+			this.type = type;
+		}
+
+		/**
+		 * Gets the type.
+		 *
+		 * @return the type
+		 */
+		public EventType getType() {
+			return type;
+		}
+
+	}
+
+	/**
+	 * The Enum EventType.
+	 */
+	public enum EventType {
+		
+		/** The enabled. */
+		ENABLED, 
+		/** The disabled. */
+		DISABLED
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.designer.api/src/org/eclipse/osbp/runtime/designer/api/IWidgetDesignConfigurator.java b/org.eclipse.osbp.runtime.designer.api/src/org/eclipse/osbp/runtime/designer/api/IWidgetDesignConfigurator.java
new file mode 100644
index 0000000..d410e54
--- /dev/null
+++ b/org.eclipse.osbp.runtime.designer.api/src/org/eclipse/osbp/runtime/designer/api/IWidgetDesignConfigurator.java
@@ -0,0 +1,42 @@
+/**
+ * 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.designer.api;
+
+import org.eclipse.emf.ecore.EObject;
+
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Interface IWidgetDesignConfigurator.
+ */
+public interface IWidgetDesignConfigurator {
+
+	/**
+	 * Is called to configure the given widget for designmode. Or to deconfig if
+	 * designmode is off.
+	 *
+	 * @param widget
+	 *            the widget
+	 * @param element
+	 *            the element
+	 * @param designMode
+	 *            the design mode
+	 */
+	void configure(Object widget, EObject element, boolean designMode);
+
+	/**
+	 * Opens the edit dialog.
+	 * @param widget
+	 * @param model
+	 */
+	void openEditDialog(Object widget, EObject model);
+
+}
diff --git a/org.eclipse.osbp.runtime.eclipselink.core.fragment/.project b/org.eclipse.osbp.runtime.eclipselink.core.fragment/.project
new file mode 100644
index 0000000..e898a2a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.eclipselink.core.fragment/.project
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.runtime.eclipselink.core.fragment</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.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.eclipselink.core.fragment/LICENSE.txt b/org.eclipse.osbp.runtime.eclipselink.core.fragment/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.eclipselink.core.fragment/LICENSE.txt
@@ -0,0 +1,161 @@
+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.eclipselink.core.fragment/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.eclipselink.core.fragment/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..3df4750
--- /dev/null
+++ b/org.eclipse.osbp.runtime.eclipselink.core.fragment/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.runtime.eclipselink.core.fragment
+Bundle-SymbolicName: org.eclipse.osbp.runtime.eclipselink.core.fragment
+Bundle-Vendor: Eclipse OSBP
+Bundle-Version: 0.9.0.qualifier
+Fragment-Host: org.eclipse.persistence.core;bundle-version="2.6.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+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.eclipselink.core.fragment/about.html b/org.eclipse.osbp.runtime.eclipselink.core.fragment/about.html
new file mode 100644
index 0000000..64c0598
--- /dev/null
+++ b/org.eclipse.osbp.runtime.eclipselink.core.fragment/about.html
@@ -0,0 +1,28 @@
+<!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.eclipselink.core.fragment/about.ini b/org.eclipse.osbp.runtime.eclipselink.core.fragment/about.ini
new file mode 100644
index 0000000..7df671f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.eclipselink.core.fragment/about.ini
@@ -0,0 +1,17 @@
+# 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.eclipselink.core.fragment/about.mappings b/org.eclipse.osbp.runtime.eclipselink.core.fragment/about.mappings
new file mode 100644
index 0000000..4511a0a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.eclipselink.core.fragment/about.mappings
@@ -0,0 +1,6 @@
+# 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.eclipselink.core.fragment/about.properties b/org.eclipse.osbp.runtime.eclipselink.core.fragment/about.properties
new file mode 100644
index 0000000..c24bc71
--- /dev/null
+++ b/org.eclipse.osbp.runtime.eclipselink.core.fragment/about.properties
@@ -0,0 +1,26 @@
+#
+# 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.eclipselink.core.fragment
+
+################ 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.eclipselink.core.fragment/build.properties b/org.eclipse.osbp.runtime.eclipselink.core.fragment/build.properties
new file mode 100644
index 0000000..fdca065
--- /dev/null
+++ b/org.eclipse.osbp.runtime.eclipselink.core.fragment/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = target/classes/
+bin.includes = about.properties,  about.mappings,  about.ini,  about.html,  META-INF/,\
+               .,\
+               build.properties,\
+               LICENSE.txt
+src.includes = about.properties,  about.mappings,  about.ini,  about.html,  LICENSE.txt
diff --git a/org.eclipse.osbp.runtime.eclipselink.core.fragment/pom.xml b/org.eclipse.osbp.runtime.eclipselink.core.fragment/pom.xml
new file mode 100644
index 0000000..03df75b
--- /dev/null
+++ b/org.eclipse.osbp.runtime.eclipselink.core.fragment/pom.xml
@@ -0,0 +1,25 @@
+<?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.eclipselink.core.fragment</artifactId>
+    <packaging>eclipse-plugin</packaging>
+    	
+</project>
diff --git a/org.eclipse.osbp.runtime.eclipselink.core.fragment/src/org/eclipse/osbp/runtime/eclipselink/core/fragment/OSBPPlatform.java b/org.eclipse.osbp.runtime.eclipselink.core.fragment/src/org/eclipse/osbp/runtime/eclipselink/core/fragment/OSBPPlatform.java
new file mode 100644
index 0000000..732916c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.eclipselink.core.fragment/src/org/eclipse/osbp/runtime/eclipselink/core/fragment/OSBPPlatform.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 1998, 2014 Oracle and/or its affiliates. All rights reserved.
+ * This program and the accompanying materials are made available under the 
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
+ * which accompanies this distribution. 
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at 
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ *     Oracle - initial API and implementation from Oracle TopLink
+ *     06/30/2010-2.1.1 Michael O'Brien 
+ *       - 316513: Enable JMX MBean functionality for JBoss, Glassfish and WebSphere in addition to WebLogic
+ *       Move JMX MBean generic registration code up from specific platforms
+ *       see <link>http://wiki.eclipse.org/EclipseLink/DesignDocs/316513</link>        
+ ******************************************************************************/
+package org.eclipse.osbp.runtime.eclipselink.core.fragment;
+
+import org.eclipse.persistence.platform.server.ServerPlatformBase;
+import org.eclipse.persistence.sessions.DatabaseSession;
+
+/**
+ * PUBLIC:
+ *
+ * This is the concrete subclass responsible for representing JBoss-specific
+ * server behavior.
+ *
+ * This platform overrides:
+ *
+ * getExternalTransactionControllerClass(): to use an JBoss-specific controller
+ * class
+ */
+public class OSBPPlatform extends ServerPlatformBase {
+
+	/**
+	 * INTERNAL: Default Constructor: All behavior for the default constructor
+	 * is inherited
+	 */
+	public OSBPPlatform(DatabaseSession newDatabaseSession) {
+		super(newDatabaseSession);
+	}
+
+	@Override
+	public boolean isRuntimeServicesEnabledDefault() {
+		return false;
+	}
+
+	/**
+	 * INTERNAL: getExternalTransactionControllerClass(): Answer the class of
+	 * external transaction controller to use for JBoss. This is read-only.
+	 *
+	 * @return Class externalTransactionControllerClass
+	 *
+	 * @see org.eclipse.persistence.transaction.JTATransactionController
+	 * @see org.eclipse.persistence.platform.server.ServerPlatformBase#isJTAEnabled()
+	 * @see org.eclipse.persistence.platform.server.ServerPlatformBase#disableJTA()
+	 * @see org.eclipse.persistence.platform.server.ServerPlatformBase#initializeExternalTransactionController()
+	 */
+	public Class<?> getExternalTransactionControllerClass() {
+		if (externalTransactionControllerClass == null) {
+			externalTransactionControllerClass = OSBPTransactionController.class;
+		}
+		return externalTransactionControllerClass;
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.eclipselink.core.fragment/src/org/eclipse/osbp/runtime/eclipselink/core/fragment/OSBPTransactionController.java b/org.eclipse.osbp.runtime.eclipselink.core.fragment/src/org/eclipse/osbp/runtime/eclipselink/core/fragment/OSBPTransactionController.java
new file mode 100644
index 0000000..a394617
--- /dev/null
+++ b/org.eclipse.osbp.runtime.eclipselink.core.fragment/src/org/eclipse/osbp/runtime/eclipselink/core/fragment/OSBPTransactionController.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 1998, 2014 Oracle and/or its affiliates. All rights reserved.
+ * This program and the accompanying materials are made available under the 
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
+ * which accompanies this distribution. 
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at 
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ *     Oracle - initial API and implementation from Oracle TopLink
+ ******************************************************************************/
+package org.eclipse.osbp.runtime.eclipselink.core.fragment;
+
+import javax.transaction.TransactionManager;
+
+import org.eclipse.persistence.transaction.JTATransactionController;
+
+/**
+ * <p>
+ * <b>Purpose</b>: TransactionController implementation for JBoss JTA
+ * <p>
+ * <b>Description</b>: Implements the required behavior for controlling JTA 1.0
+ * transactions in JBoss. The JTA TransactionManager must be set on the
+ * instance.
+ *
+ * @see org.eclipse.persistence.transaction.JTATransactionController
+ */
+public class OSBPTransactionController extends JTATransactionController {
+	public static final String JNDI_TRANSACTION_MANAGER = "osgi:service/javax.transaction.TransactionManager";
+
+	/**
+	 * INTERNAL: Obtain and return the JTA TransactionManager on this platform
+	 */
+	protected TransactionManager acquireTransactionManager() throws Exception {
+		return (TransactionManager) jndiLookup(JNDI_TRANSACTION_MANAGER);
+	}
+}
diff --git a/org.eclipse.osbp.runtime.ecore.bundlespace/.project b/org.eclipse.osbp.runtime.ecore.bundlespace/.project
new file mode 100644
index 0000000..09e6fca
--- /dev/null
+++ b/org.eclipse.osbp.runtime.ecore.bundlespace/.project
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.runtime.ecore.bundlespace</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.ecore.bundlespace/LICENSE.txt b/org.eclipse.osbp.runtime.ecore.bundlespace/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.ecore.bundlespace/LICENSE.txt
@@ -0,0 +1,161 @@
+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.ecore.bundlespace/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.ecore.bundlespace/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..2df7f33
--- /dev/null
+++ b/org.eclipse.osbp.runtime.ecore.bundlespace/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.runtime.ecore.bundlespace
+Bundle-Vendor: Eclipse OSBP
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-SymbolicName: org.eclipse.osbp.runtime.ecore.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/*.xml
+Require-Bundle: org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.emf.ecore
diff --git a/org.eclipse.osbp.runtime.ecore.bundlespace/OSGI-INF/org.eclipse.osbp.runtime.ecore.bundlespace.BundleSpaceAwareEcoreFactoryService.xml b/org.eclipse.osbp.runtime.ecore.bundlespace/OSGI-INF/org.eclipse.osbp.runtime.ecore.bundlespace.BundleSpaceAwareEcoreFactoryService.xml
new file mode 100644
index 0000000..125edf4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.ecore.bundlespace/OSGI-INF/org.eclipse.osbp.runtime.ecore.bundlespace.BundleSpaceAwareEcoreFactoryService.xml
@@ -0,0 +1,5 @@
+<?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.ecore.bundlespace.BundleSpaceAwareEcoreFactoryService">
+   <implementation class="org.eclipse.osbp.runtime.ecore.bundlespace.BundleSpaceAwareEcoreFactoryService"/>
+   <reference bind="bindBundleSpace" cardinality="1..1" interface="org.eclipse.osbp.runtime.common.types.IBundleSpace" name="BundleSpace" policy="static" unbind="unbindBundleSpace"/>
+</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.ecore.bundlespace/about.html b/org.eclipse.osbp.runtime.ecore.bundlespace/about.html
new file mode 100644
index 0000000..64c0598
--- /dev/null
+++ b/org.eclipse.osbp.runtime.ecore.bundlespace/about.html
@@ -0,0 +1,28 @@
+<!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.ecore.bundlespace/about.ini b/org.eclipse.osbp.runtime.ecore.bundlespace/about.ini
new file mode 100644
index 0000000..7df671f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.ecore.bundlespace/about.ini
@@ -0,0 +1,17 @@
+# 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.ecore.bundlespace/about.mappings b/org.eclipse.osbp.runtime.ecore.bundlespace/about.mappings
new file mode 100644
index 0000000..4511a0a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.ecore.bundlespace/about.mappings
@@ -0,0 +1,6 @@
+# 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.ecore.bundlespace/about.properties b/org.eclipse.osbp.runtime.ecore.bundlespace/about.properties
new file mode 100644
index 0000000..2dfc323
--- /dev/null
+++ b/org.eclipse.osbp.runtime.ecore.bundlespace/about.properties
@@ -0,0 +1,26 @@
+#
+# 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.ecore.bundlespace
+
+################ 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.ecore.bundlespace/build.properties b/org.eclipse.osbp.runtime.ecore.bundlespace/build.properties
new file mode 100644
index 0000000..8f9717c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.ecore.bundlespace/build.properties
@@ -0,0 +1,10 @@
+output.. = target/classes/
+bin.includes = about.properties,  about.mappings,  about.ini,  about.html,  META-INF/,\
+               .,\
+               .project,\
+               .classpath,\
+               OSGI-INF/,\
+               .settings/,\
+               LICENSE.txt
+source.. = src/
+src.includes = about.properties,  about.mappings,  about.ini,  about.html,  LICENSE.txt
diff --git a/org.eclipse.osbp.runtime.ecore.bundlespace/pom.xml b/org.eclipse.osbp.runtime.ecore.bundlespace/pom.xml
new file mode 100644
index 0000000..6ff7e83
--- /dev/null
+++ b/org.eclipse.osbp.runtime.ecore.bundlespace/pom.xml
@@ -0,0 +1,24 @@
+<?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.ecore.bundlespace</artifactId>
+    <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/org.eclipse.osbp.runtime.ecore.bundlespace/src/org/eclipse/osbp/runtime/ecore/bundlespace/BundleSpaceAwareEcoreFactoryService.java b/org.eclipse.osbp.runtime.ecore.bundlespace/src/org/eclipse/osbp/runtime/ecore/bundlespace/BundleSpaceAwareEcoreFactoryService.java
new file mode 100644
index 0000000..9ed6f6a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.ecore.bundlespace/src/org/eclipse/osbp/runtime/ecore/bundlespace/BundleSpaceAwareEcoreFactoryService.java
@@ -0,0 +1,91 @@
+/**
+ * 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.ecore.bundlespace;
+
+import org.eclipse.emf.common.util.WrappedException;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EFactory;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.impl.EcoreFactoryImpl;
+import org.eclipse.osbp.runtime.common.types.IBundleSpace;
+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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Component(immediate = true)
+public class BundleSpaceAwareEcoreFactoryService {
+
+	private static final Logger LOGGER = LoggerFactory
+			.getLogger(BundleSpaceAwareEcoreFactoryService.class);
+
+	private IBundleSpace bundleSpace;
+
+	private EFactory oldFactory;
+
+	@Reference(cardinality = ReferenceCardinality.MANDATORY, unbind = "unbindBundleSpace")
+	protected void bindBundleSpace(IBundleSpace bundleSpace) {
+		this.bundleSpace = bundleSpace;
+	}
+
+	protected void unbindBundleSpace(IBundleSpace bundleSpace) {
+		this.bundleSpace = null;
+	}
+
+	@Activate
+	protected void activate() {
+		oldFactory = EcorePackage.eINSTANCE.getEFactoryInstance();
+		// ensure that ecore will load classes based on bundlespace
+		EcorePackage.eINSTANCE
+				.setEFactoryInstance(new ClassLoadingDelegatingEcoreFactory());
+
+		LOGGER.info("Bound BundleSpaceAware EcoreFactory.");
+	}
+
+	@Deactivate
+	protected void deactivate() {
+		EcorePackage.eINSTANCE.setEFactoryInstance(oldFactory);
+		oldFactory = null;
+	}
+
+	private class ClassLoadingDelegatingEcoreFactory extends EcoreFactoryImpl {
+		public Class<?> createEJavaClassFromString(EDataType metaObject,
+				String initialValue) {
+			try {
+				if (initialValue == null)
+					return null;
+				else if ("boolean".equals(initialValue))
+					return boolean.class;
+				else if ("byte".equals(initialValue))
+					return byte.class;
+				else if ("char".equals(initialValue))
+					return char.class;
+				else if ("double".equals(initialValue))
+					return double.class;
+				else if ("float".equals(initialValue))
+					return float.class;
+				else if ("int".equals(initialValue))
+					return int.class;
+				else if ("long".equals(initialValue))
+					return long.class;
+				else if ("short".equals(initialValue))
+					return short.class;
+				else
+					return bundleSpace.forName(initialValue);
+			} catch (ClassNotFoundException e) {
+				throw new WrappedException(e);
+			}
+		}
+	}
+}
diff --git a/org.eclipse.osbp.runtime.emf/.project b/org.eclipse.osbp.runtime.emf/.project
new file mode 100644
index 0000000..71ca391
--- /dev/null
+++ b/org.eclipse.osbp.runtime.emf/.project
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.runtime.emf</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.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.emf/LICENSE.txt b/org.eclipse.osbp.runtime.emf/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.emf/LICENSE.txt
@@ -0,0 +1,161 @@
+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.emf/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.emf/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..814d16b
--- /dev/null
+++ b/org.eclipse.osbp.runtime.emf/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.runtime.emf
+Bundle-SymbolicName: org.eclipse.osbp.runtime.emf
+Bundle-Vendor: Eclipse OSBP
+Bundle-Version: 0.9.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.emf.common,
+ org.eclipse.emf.ecore
+Export-Package: org.eclipse.osbp.runtime.emf.change,
+ org.eclipse.osbp.runtime.emf.edit.commands
diff --git a/org.eclipse.osbp.runtime.emf/about.html b/org.eclipse.osbp.runtime.emf/about.html
new file mode 100644
index 0000000..64c0598
--- /dev/null
+++ b/org.eclipse.osbp.runtime.emf/about.html
@@ -0,0 +1,28 @@
+<!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.emf/about.ini b/org.eclipse.osbp.runtime.emf/about.ini
new file mode 100644
index 0000000..7df671f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.emf/about.ini
@@ -0,0 +1,17 @@
+# 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.emf/about.mappings b/org.eclipse.osbp.runtime.emf/about.mappings
new file mode 100644
index 0000000..4511a0a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.emf/about.mappings
@@ -0,0 +1,6 @@
+# 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.emf/about.properties b/org.eclipse.osbp.runtime.emf/about.properties
new file mode 100644
index 0000000..d35ea48
--- /dev/null
+++ b/org.eclipse.osbp.runtime.emf/about.properties
@@ -0,0 +1,26 @@
+#
+# 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.emf
+
+################ 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.emf/build.properties b/org.eclipse.osbp.runtime.emf/build.properties
new file mode 100644
index 0000000..a8c17c3
--- /dev/null
+++ b/org.eclipse.osbp.runtime.emf/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = about.properties,  about.mappings,  about.ini,  about.html,  META-INF/,\
+               .,\
+               LICENSE.txt
+src.includes = about.properties,  about.mappings,  about.ini,  about.html,  LICENSE.txt
diff --git a/org.eclipse.osbp.runtime.emf/pom.xml b/org.eclipse.osbp.runtime.emf/pom.xml
new file mode 100644
index 0000000..311ba1f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.emf/pom.xml
@@ -0,0 +1,24 @@
+<?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.emf</artifactId>
+    <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/org.eclipse.osbp.runtime.emf/src/org/eclipse/osbp/runtime/emf/change/ChangedRecorder.java b/org.eclipse.osbp.runtime.emf/src/org/eclipse/osbp/runtime/emf/change/ChangedRecorder.java
new file mode 100644
index 0000000..6bd4b98
--- /dev/null
+++ b/org.eclipse.osbp.runtime.emf/src/org/eclipse/osbp/runtime/emf/change/ChangedRecorder.java
@@ -0,0 +1,178 @@
+/**
+ *                                                                            
+ *  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 implementation
+ * 
+ */
+ package org.eclipse.osbp.runtime.emf.change;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.util.EContentAdapter;
+
+/**
+ * Implementation of {@link EContentAdapter} that records all notifications. And
+ * implements logic to {@link #undo()} and {@link #redo()} the changes.
+ */
+public class ChangedRecorder extends EContentAdapter {
+
+	private final Notifier notifier;
+
+	private List<Notification> notifications = new ArrayList<Notification>();
+
+	public ChangedRecorder(Notifier notifier) {
+		super();
+		this.notifier = notifier;
+	}
+
+	/**
+	 * Starts the recording.
+	 */
+	public void start() {
+		setTarget(notifier);
+	}
+
+	/**
+	 * Stops the recording.
+	 */
+	public void stop() {
+		unsetTarget(notifier);
+	}
+
+	/**
+	 * Returns all notifications recorded.
+	 * 
+	 * @return
+	 */
+	public List<Notification> getNotifications() {
+		return notifications;
+	}
+
+	@Override
+	public void notifyChanged(Notification notification) {
+		super.notifyChanged(notification);
+
+		if (notification.isTouch()) {
+			return;
+		}
+
+		if (notification.getEventType() == Notification.REMOVING_ADAPTER) {
+			return;
+		}
+
+		if (notification.getEventType() == Notification.RESOLVE) {
+			return;
+		}
+
+		notifications.add(notification);
+	}
+
+	/**
+	 * Undos all notifications.
+	 */
+	public void undo() {
+		for (int i = notifications.size() - 1; i >= 0; i--) {
+			Notification change = notifications.get(i);
+			undo(change);
+		}
+	}
+
+	/**
+	 * Redos all notifications.
+	 */
+	public void redo() {
+		for (int i = 0; i < notifications.size(); i++) {
+			Notification change = notifications.get(i);
+			redo(change);
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	protected void undo(Notification change) {
+		EObject notifier = (EObject) change.getNotifier();
+		switch (change.getEventType()) {
+		case Notification.ADD: {
+			List<Object> list = (List<Object>) notifier
+					.eGet((EStructuralFeature) change.getFeature());
+			list.remove(change.getNewValue());
+		}
+			break;
+		case Notification.ADD_MANY:
+			throw new IllegalStateException("Implement me");
+		case Notification.MOVE:
+			throw new IllegalStateException("Implement me");
+		case Notification.REMOVE: {
+			List<Object> list = (List<Object>) notifier
+					.eGet((EStructuralFeature) change.getFeature());
+			if (change.getPosition() > 0) {
+				list.add(change.getPosition(), change.getOldValue());
+			} else {
+				list.add(change.getOldValue());
+			}
+		}
+			break;
+		case Notification.REMOVE_MANY:
+			throw new IllegalStateException("Implement me");
+		case Notification.SET: {
+			Object value = change.getOldValue();
+			notifier.eSet((EStructuralFeature) change.getFeature(), value);
+		}
+			break;
+		case Notification.UNSET: {
+			Object value = change.getOldValue();
+			notifier.eSet((EStructuralFeature) change.getFeature(), value);
+		}
+			break;
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	protected void redo(Notification change) {
+		EObject notifier = (EObject) change.getNotifier();
+		switch (change.getEventType()) {
+		case Notification.ADD: {
+			List<Object> list = (List<Object>) notifier
+					.eGet((EStructuralFeature) change.getFeature());
+			if (change.getPosition() > 0) {
+				list.add(change.getPosition(), change.getNewValue());
+			} else {
+				list.add(change.getNewValue());
+			}
+		}
+			break;
+		case Notification.ADD_MANY:
+			throw new IllegalStateException("Implement me");
+		case Notification.MOVE:
+			throw new IllegalStateException("Implement me");
+		case Notification.REMOVE: {
+			List<Object> list = (List<Object>) notifier
+					.eGet((EStructuralFeature) change.getFeature());
+			list.remove(change.getOldValue());
+		}
+			break;
+		case Notification.REMOVE_MANY:
+			throw new IllegalStateException("Implement me");
+		case Notification.SET: {
+			Object value = change.getNewValue();
+			notifier.eSet((EStructuralFeature) change.getFeature(), value);
+		}
+		break;
+		case Notification.UNSET: {
+			notifier.eUnset((EStructuralFeature) change.getFeature());
+		}
+		break;
+		}
+	}
+}
diff --git a/org.eclipse.osbp.runtime.emf/src/org/eclipse/osbp/runtime/emf/edit/commands/ChangeCommand.java b/org.eclipse.osbp.runtime.emf/src/org/eclipse/osbp/runtime/emf/edit/commands/ChangeCommand.java
new file mode 100644
index 0000000..5d260f1
--- /dev/null
+++ b/org.eclipse.osbp.runtime.emf/src/org/eclipse/osbp/runtime/emf/edit/commands/ChangeCommand.java
@@ -0,0 +1,68 @@
+/**
+ *                                                                            
+ *  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 implementation
+ * 
+ */
+ package org.eclipse.osbp.runtime.emf.edit.commands;
+
+import org.eclipse.emf.common.command.AbstractCommand;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.osbp.runtime.emf.change.ChangedRecorder;
+
+/**
+ * Uses the {@link ChangeCommand} to record notifications.
+ */
+public abstract class ChangeCommand extends AbstractCommand {
+
+	private Resource resource;
+	private ChangedRecorder recorder;
+
+	public ChangeCommand(String name, Resource resource) {
+		super(name);
+		this.resource = resource;
+	}
+
+	@Override
+	public void execute() {
+		recorder.start();
+
+		doExecute();
+
+		recorder.stop();
+	}
+	
+	/**
+	 * Execute your operations.
+	 */
+	protected abstract void doExecute();
+
+	@Override
+	public void redo() {
+		recorder.redo();
+	}
+
+	@Override
+	protected boolean prepare() {
+		recorder = new ChangedRecorder(resource);
+		return true;
+	}
+
+	@Override
+	public void undo() {
+		recorder.undo();
+	}
+
+	@Override
+	public boolean canUndo() {
+		return super.canUndo();
+	}
+
+}
diff --git a/org.eclipse.osbp.runtime.emf/src/org/eclipse/osbp/runtime/emf/edit/commands/SimpleCommand.java b/org.eclipse.osbp.runtime.emf/src/org/eclipse/osbp/runtime/emf/edit/commands/SimpleCommand.java
new file mode 100644
index 0000000..7008300
--- /dev/null
+++ b/org.eclipse.osbp.runtime.emf/src/org/eclipse/osbp/runtime/emf/edit/commands/SimpleCommand.java
@@ -0,0 +1,63 @@
+/**
+ *                                                                            
+ *  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 implementation
+ * 
+ */
+ package org.eclipse.osbp.runtime.emf.edit.commands;
+
+import org.eclipse.emf.common.command.AbstractCommand;
+
+/**
+ * Uses the {@link SimpleCommand} to record notifications.
+ */
+public abstract class SimpleCommand extends AbstractCommand {
+
+	public SimpleCommand(String name) {
+		super(name);
+	}
+
+	@Override
+	public void execute() {
+		doExecute();
+	}
+
+	@Override
+	public void redo() {
+		doRedo();
+	}
+
+	@Override
+	protected boolean prepare() {
+		return true;
+	}
+
+	@Override
+	public void undo() {
+		doUndo();
+	}
+
+	@Override
+	public boolean canUndo() {
+		return true;
+	}
+
+	protected abstract void doExecute();
+
+	/**
+	 * Override if required.
+	 */
+	protected void doRedo() {
+		doExecute();
+	}
+
+	protected abstract void doUndo();
+
+}
diff --git a/org.eclipse.osbp.runtime.event/.project b/org.eclipse.osbp.runtime.event/.project
new file mode 100644
index 0000000..62be056
--- /dev/null
+++ b/org.eclipse.osbp.runtime.event/.project
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.runtime.event</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.event/LICENSE.txt b/org.eclipse.osbp.runtime.event/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.event/LICENSE.txt
@@ -0,0 +1,161 @@
+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.event/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.event/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..bcdeed9
--- /dev/null
+++ b/org.eclipse.osbp.runtime.event/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.runtime.event
+Bundle-Vendor: Eclipse OSBP
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-SymbolicName: org.eclipse.osbp.runtime.event
+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.event.EventBroker.xml
+Require-Bundle: org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)"
diff --git a/org.eclipse.osbp.runtime.event/OSGI-INF/org.eclipse.osbp.runtime.event.EventBroker.xml b/org.eclipse.osbp.runtime.event/OSGI-INF/org.eclipse.osbp.runtime.event.EventBroker.xml
new file mode 100644
index 0000000..102ea74
--- /dev/null
+++ b/org.eclipse.osbp.runtime.event/OSGI-INF/org.eclipse.osbp.runtime.event.EventBroker.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" name="org.eclipse.osbp.runtime.event.EventBroker">
+   <implementation class="org.eclipse.osbp.runtime.event.EventBroker"/>
+   <service>
+      <provide interface="org.eclipse.osbp.runtime.common.event.IEventBroker"/>
+   </service>
+   <reference bind="bindEventAdmin" cardinality="1..1" interface="org.osgi.service.event.EventAdmin" name="EventAdmin" policy="static" unbind="unbindEventAdmin"/>
+</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.event/about.html b/org.eclipse.osbp.runtime.event/about.html
new file mode 100644
index 0000000..64c0598
--- /dev/null
+++ b/org.eclipse.osbp.runtime.event/about.html
@@ -0,0 +1,28 @@
+<!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.event/about.ini b/org.eclipse.osbp.runtime.event/about.ini
new file mode 100644
index 0000000..7df671f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.event/about.ini
@@ -0,0 +1,17 @@
+# 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.event/about.mappings b/org.eclipse.osbp.runtime.event/about.mappings
new file mode 100644
index 0000000..4511a0a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.event/about.mappings
@@ -0,0 +1,6 @@
+# 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.event/about.properties b/org.eclipse.osbp.runtime.event/about.properties
new file mode 100644
index 0000000..a1e1d1c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.event/about.properties
@@ -0,0 +1,26 @@
+#
+# 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.event
+
+################ 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\
+Contr