parallel ip - initial checkin

Signed-off-by: Ralf Mollik <ramollik@compex-commerce.com>
diff --git a/.project b/.project
new file mode 100644
index 0000000..33469fa
--- /dev/null
+++ b/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.utils.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/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..095bde4
--- /dev/null
+++ b/jenkins.build.config.xml
@@ -0,0 +1,25 @@
+<?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.dsl</jenkins.build.dependency>
+                <jenkins.build.dependency>org.eclipse.osbp.ecview.addons</jenkins.build.dependency>
+                <jenkins.build.dependency>org.eclipse.osbp.eventbroker</jenkins.build.dependency>
+                <jenkins.build.dependency>org.eclipse.osbp.persistence</jenkins.build.dependency>
+                <jenkins.build.dependency>org.eclipse.osbp.preferences</jenkins.build.dependency>
+                <jenkins.build.dependency>org.eclipse.osbp.ui.api</jenkins.build.dependency>
+        </jenkins.build.dependencies>
+</jenkins>
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.utils.feature/.project b/org.eclipse.osbp.utils.feature/.project
new file mode 100644
index 0000000..6f10294
--- /dev/null
+++ b/org.eclipse.osbp.utils.feature/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.utils.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</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.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.utils.feature/LICENSE.txt b/org.eclipse.osbp.utils.feature/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.utils.feature/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.utils.feature/build.properties b/org.eclipse.osbp.utils.feature/build.properties
new file mode 100644
index 0000000..b8920ff
--- /dev/null
+++ b/org.eclipse.osbp.utils.feature/build.properties
@@ -0,0 +1,2 @@
+bin.includes = license.html,  epl-v10.html,  feature.xml,\
+               feature.properties
diff --git a/org.eclipse.osbp.utils.feature/epl-v10.html b/org.eclipse.osbp.utils.feature/epl-v10.html
new file mode 100644
index 0000000..b398acc
--- /dev/null
+++ b/org.eclipse.osbp.utils.feature/epl-v10.html
@@ -0,0 +1,259 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+  body {
+    size: 8.5in 11.0in;
+    margin: 0.25in 0.5in 0.25in 0.5in;
+    tab-interval: 0.5in;
+    }
+  p {  	
+    margin-left: auto;
+    margin-top:  0.5em;
+    margin-bottom: 0.5em;
+    }
+  p.list {
+  	margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+    }
+  </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>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.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">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.</p>
+
+<p>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"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.</p>
+
+<p>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">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.</p>
+
+<p class="list">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.</p>
+
+<p class="list">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.</p>
+
+<p class="list">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.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">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;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">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.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>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.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>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.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>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.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.utils.feature/feature.properties b/org.eclipse.osbp.utils.feature/feature.properties
new file mode 100644
index 0000000..35617c2
--- /dev/null
+++ b/org.eclipse.osbp.utils.feature/feature.properties
@@ -0,0 +1,169 @@
+###############################################################################
+# 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:
+#     Cristiano Gavião - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName =OSBP Utils 
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse OSBP
+
+# "description" property - description of the feature
+description=This feature provides the bundles for OSBP utils.
+
+# "updateSiteName" property - label for the update site
+updateSiteName=
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) \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\
+################ end of copyright property ####################################
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+February 1, 2011\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/org.eclipse.osbp.utils.feature/feature.xml b/org.eclipse.osbp.utils.feature/feature.xml
new file mode 100644
index 0000000..ffe6b41
--- /dev/null
+++ b/org.eclipse.osbp.utils.feature/feature.xml
@@ -0,0 +1,59 @@
+<?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 -->
+<!--#======================================================================= -->
+
+<feature
+        id="org.eclipse.osbp.utils.feature"
+        label="%featureName"
+        version="0.9.0.qualifier"
+        provider-name="%providerName">
+        
+    <description>
+        %description
+    </description>
+        
+    <copyright>
+        %copyright
+    </copyright>
+        
+    <license url="%licenseURL">
+        %license
+    </license>
+        
+    <plugin
+        id="org.eclipse.osbp.utils"
+        download-size="0"
+        install-size="0"
+        version="0.0.0"
+        unpack="false"/>
+             
+    <plugin
+        id="org.eclipse.gemini.dbaccess.util"
+        download-size="0"
+        install-size="0"
+        version="0.0.0"
+        unpack="false"/>
+        
+    <plugin
+        id="org.eclipse.uomo.units"
+        download-size="0"
+        install-size="0"
+        version="0.0.0"
+        unpack="false"/>
+        
+    <plugin
+        id="org.eclipse.uomo.core"
+        download-size="0"
+        install-size="0"
+        version="0.0.0"
+        unpack="false"/>
+        
+</feature>
diff --git a/org.eclipse.osbp.utils.feature/license.html b/org.eclipse.osbp.utils.feature/license.html
new file mode 100644
index 0000000..6e579a5
--- /dev/null
+++ b/org.eclipse.osbp.utils.feature/license.html
@@ -0,0 +1,164 @@
+<!--?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>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY "CONTENT").  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
+   ("EPL").  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, "Program" 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 ("Repository") in software modules ("Modules") and made 
+available as downloadable archives ("Downloads").</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 ("Plug-ins"), plug-in fragments 
+("Fragments"), and features ("Features").</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&#8482; ARchive) in a directory named "plugins".</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 "features".  Within a Feature, files 
+named "feature.xml" 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 ("Included 
+Features"). Within a Feature, files named "feature.xml" 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 "about.html" ("Abouts"). The terms and 
+conditions governing Features and
+Included Features should be contained in files named "license.html" 
+("Feature Licenses").  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 "src" 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 ("Feature Update License") 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 "license" property of files named "feature.properties" 
+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>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</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 ("Provisioning Technology") for the purpose of 
+allowing users to install software, documentation, information and/or
+   other materials (collectively "Installable Software"). 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>
+   ("Specification").</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 ("Provisioning Process") in 
+which a user may execute the Provisioning Technology
+       on a machine ("Target Machine") 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 ("Installable Software Agreement") 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>
\ No newline at end of file
diff --git a/org.eclipse.osbp.utils.feature/pom.xml b/org.eclipse.osbp.utils.feature/pom.xml
new file mode 100644
index 0000000..7f0bc8a
--- /dev/null
+++ b/org.eclipse.osbp.utils.feature/pom.xml
@@ -0,0 +1,89 @@
+<?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 implementation 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/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.eclipse.osbp.utils</groupId>
+		<artifactId>org.eclipse.osbp.utils.aggregator</artifactId>
+		<version>0.9.0-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.osbp.utils.feature</artifactId>
+	<packaging>eclipse-feature</packaging>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho.extras</groupId>
+				<artifactId>tycho-source-feature-plugin</artifactId>
+				<version>${tychoExtrasVersion}</version>
+				<executions>
+					<execution>
+						<id>source-feature</id>
+						<phase>package</phase>
+						<goals>
+							<goal>source-feature</goal>
+						</goals>
+					</execution>
+				</executions>
+				<configuration>
+					<labelSuffix> (source)</labelSuffix>
+					<excludes>
+						<plugin id="olap4j.osgi"/>
+						<plugin id="org.eclipse.gemini.dbaccess.oracle"/>
+						<plugin id="org.eclipse.gemini.dbaccess.util"/>
+						<plugin id="org.eclipse.uomo.units"/>
+						<plugin id="org.eclipse.uomo.core"/>
+					</excludes>
+				</configuration>
+			</plugin>
+			<plugin>
+				<!-- workaround while bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=398250 
+					is not fixed -->
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-p2-plugin</artifactId>
+				<version>${tycho-version}</version>
+				<executions>
+					<execution>
+						<id>attached-p2-metadata</id>
+						<phase>package</phase>
+						<goals>
+							<goal>p2-metadata</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<artifactId>maven-javadoc-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>javadoc-jar</id>
+						<phase>package</phase>
+						<goals>
+							<goal>jar</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.eclipse.osbp.utils</groupId>
+			<artifactId>org.eclipse.osbp.utils</artifactId>
+			<version>0.9.0-SNAPSHOT</version>
+		</dependency>
+	</dependencies>
+
+</project>
diff --git a/org.eclipse.osbp.utils.feature/src/main/javadoc/README.txt b/org.eclipse.osbp.utils.feature/src/main/javadoc/README.txt
new file mode 100644
index 0000000..831da7e
--- /dev/null
+++ b/org.eclipse.osbp.utils.feature/src/main/javadoc/README.txt
@@ -0,0 +1 @@
+Resource folder for javadoc resources.
\ No newline at end of file
diff --git a/org.eclipse.osbp.utils.feature/src/overview.html b/org.eclipse.osbp.utils.feature/src/overview.html
new file mode 100644
index 0000000..ec152fa
--- /dev/null
+++ b/org.eclipse.osbp.utils.feature/src/overview.html
@@ -0,0 +1,9 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+	<title>OSBP Tools Graphical Entity</title>
+</head>
+<body>
+<p>The <strong>OSBP&nbsp;Utils </strong>provides common&nbsp;bundles for the OSBP functionality.</p>
+</body>
+</html>
diff --git a/org.eclipse.osbp.utils/.project b/org.eclipse.osbp.utils/.project
new file mode 100644
index 0000000..a3e783b
--- /dev/null
+++ b/org.eclipse.osbp.utils/.project
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.utils</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.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+		<nature>org.eclipse.babel.editor.rbeNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.utils/LICENSE.txt b/org.eclipse.osbp.utils/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.utils/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.utils/META-INF/MANIFEST.MF b/org.eclipse.osbp.utils/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..aff8bce
--- /dev/null
+++ b/org.eclipse.osbp.utils/META-INF/MANIFEST.MF
@@ -0,0 +1,56 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.utils
+Bundle-SymbolicName: org.eclipse.osbp.utils;singleton:=true
+Bundle-Version: 0.9.0.qualifier
+Bundle-Activator: org.eclipse.osbp.utils.Activator
+Import-Package: com.google.gwt.json.client;version="7.3.7",
+ javax.inject,
+ javax.servlet;version="2.6.0",
+ org.apache.log4j;version="1.2.15",
+ org.eclipse.osbp.ui.api.datamart;version="0.9.0",
+ org.osgi.service.event;version="1.3.0"
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.slf4j.api;bundle-version="1.7.2",
+ com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
+ org.apache.commons.codec,
+ org.apache.commons.lang;bundle-version="2.6.0",
+ org.apache.commons.lang3;bundle-version="3.1.0",
+ org.eclipse.core.runtime;bundle-version="3.9.0",
+ org.eclipse.xtend.lib;bundle-version="[2.7.3,2.8.0)",
+ org.eclipse.xtext;bundle-version="[2.7.3,2.8.0)",
+ org.eclipse.xtext.common.types;bundle-version="[2.7.3,2.8.0)",
+ org.eclipse.emf.ecore.xcore,
+ org.eclipse.xtext.xbase.lib;bundle-version="[2.7.3,2.8.0)",
+ org.junit;bundle-version="4.11.0",
+ org.joda.convert;bundle-version="1.7.0",
+ org.joda.money;bundle-version="0.10.0",
+ joda-time;bundle-version="2.7.0",
+ org.eclipse.osbp.preferences;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.eventbroker;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.gitinfo;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.dsl.datatype.lib;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.dsl.dto.xtext;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.dsl.entity.xtext;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.ecview.dsl;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.persistence;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.dsl.dto.lib;bundle-version="0.9.0"
+Bundle-ClassPath: .
+Export-Package: org.eclipse.osbp.utils;version="0.9.0",
+ org.eclipse.osbp.utils.annotation;version="0.9.0",
+ org.eclipse.osbp.utils.classloader;version="0.9.0",
+ org.eclipse.osbp.utils.common;version="0.9.0",
+ org.eclipse.osbp.utils.constants;version="0.9.0",
+ org.eclipse.osbp.utils.currency;version="0.9.0",
+ org.eclipse.osbp.utils.currency.test;version="0.9.0",
+ org.eclipse.osbp.utils.entityhelper;version="0.9.0",
+ org.eclipse.osbp.utils.entitymock;version="0.9.0",
+ org.eclipse.osbp.utils.fillertext;version="0.9.0",
+ org.eclipse.osbp.utils.fillertext.provider;version="0.9.0",
+ org.eclipse.osbp.utils.fillertext.test;version="0.9.0",
+ org.eclipse.osbp.utils.session;version="0.9.0",
+ org.eclipse.osbp.utils.theme;version="0.9.0",
+ org.eclipse.osbp.utils.xtext;version="0.9.0"
+Bundle-Vendor: Eclipse OSBP
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Service-Component: OSGI-INF/eobjectloader.xml
diff --git a/org.eclipse.osbp.utils/OSGI-INF/eobjectloader.xml b/org.eclipse.osbp.utils/OSGI-INF/eobjectloader.xml
new file mode 100644
index 0000000..1bb7d7c
--- /dev/null
+++ b/org.eclipse.osbp.utils/OSGI-INF/eobjectloader.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" name="org.eclipse.osbp.utils.EObjectLoader">
+   <implementation class="org.eclipse.osbp.utils.common.ServiceListener"/>
+   <reference bind="bindEObjectLoaderService" cardinality="0..n" interface="org.eclipse.osbp.utils.classloader.IEObjectLoader" policy="dynamic" name="IEObjectLoader" unbind="unbindEObjectLoaderService"/>
+</scr:component>
diff --git a/org.eclipse.osbp.utils/about.html b/org.eclipse.osbp.utils/about.html
new file mode 100644
index 0000000..64c0598
--- /dev/null
+++ b/org.eclipse.osbp.utils/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.utils/about.ini b/org.eclipse.osbp.utils/about.ini
new file mode 100644
index 0000000..7df671f
--- /dev/null
+++ b/org.eclipse.osbp.utils/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.utils/about.mappings b/org.eclipse.osbp.utils/about.mappings
new file mode 100644
index 0000000..4511a0a
--- /dev/null
+++ b/org.eclipse.osbp.utils/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.utils/about.properties b/org.eclipse.osbp.utils/about.properties
new file mode 100644
index 0000000..b0eab03
--- /dev/null
+++ b/org.eclipse.osbp.utils/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:
+#    Christophe Loetz (Loetz GmbH&Co.KG) - initial API and implementation
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+featureName=org.eclipse.osbp.utils
+
+################ 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\
+    Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation\n
+################ end of blurb property ####################################
diff --git a/org.eclipse.osbp.utils/build.properties b/org.eclipse.osbp.utils/build.properties
new file mode 100644
index 0000000..18583d5
--- /dev/null
+++ b/org.eclipse.osbp.utils/build.properties
@@ -0,0 +1,18 @@
+source.. = src/,\
+           test/,\
+           xtend-gen/
+output.. = target/classes/
+bin.includes = about.properties,  about.mappings,  about.ini,  about.html,  .,\
+			   META-INF/,\
+               OSGI-INF/,\
+               license.html,\
+               LICENSE.txt,\
+               epl-v10.html
+src.includes = about.properties,  about.mappings,  about.ini,  about.html,\
+			   license.html,\
+               LICENSE.txt,\
+               epl-v10.html			   
+
+			        
+			        
+			  
\ No newline at end of file
diff --git a/org.eclipse.osbp.utils/epl-v10.html b/org.eclipse.osbp.utils/epl-v10.html
new file mode 100644
index 0000000..b398acc
--- /dev/null
+++ b/org.eclipse.osbp.utils/epl-v10.html
@@ -0,0 +1,259 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+  body {
+    size: 8.5in 11.0in;
+    margin: 0.25in 0.5in 0.25in 0.5in;
+    tab-interval: 0.5in;
+    }
+  p {  	
+    margin-left: auto;
+    margin-top:  0.5em;
+    margin-bottom: 0.5em;
+    }
+  p.list {
+  	margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+    }
+  </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>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.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">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.</p>
+
+<p>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"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.</p>
+
+<p>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">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.</p>
+
+<p class="list">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.</p>
+
+<p class="list">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.</p>
+
+<p class="list">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.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">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;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">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.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>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.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>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.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>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.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.utils/license.html b/org.eclipse.osbp.utils/license.html
new file mode 100644
index 0000000..6e579a5
--- /dev/null
+++ b/org.eclipse.osbp.utils/license.html
@@ -0,0 +1,164 @@
+<!--?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>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY "CONTENT").  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
+   ("EPL").  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, "Program" 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 ("Repository") in software modules ("Modules") and made 
+available as downloadable archives ("Downloads").</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 ("Plug-ins"), plug-in fragments 
+("Fragments"), and features ("Features").</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&#8482; ARchive) in a directory named "plugins".</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 "features".  Within a Feature, files 
+named "feature.xml" 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 ("Included 
+Features"). Within a Feature, files named "feature.xml" 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 "about.html" ("Abouts"). The terms and 
+conditions governing Features and
+Included Features should be contained in files named "license.html" 
+("Feature Licenses").  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 "src" 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 ("Feature Update License") 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 "license" property of files named "feature.properties" 
+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>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</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 ("Provisioning Technology") for the purpose of 
+allowing users to install software, documentation, information and/or
+   other materials (collectively "Installable Software"). 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>
+   ("Specification").</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 ("Provisioning Process") in 
+which a user may execute the Provisioning Technology
+       on a machine ("Target Machine") 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 ("Installable Software Agreement") 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>
\ No newline at end of file
diff --git a/org.eclipse.osbp.utils/pom.xml b/org.eclipse.osbp.utils/pom.xml
new file mode 100644
index 0000000..d05f218
--- /dev/null
+++ b/org.eclipse.osbp.utils/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.utils</groupId>
+		<artifactId>org.eclipse.osbp.utils.aggregator</artifactId>
+		<version>0.9.0-SNAPSHOT</version>
+		<relativePath>..</relativePath>
+	</parent>
+	<artifactId>org.eclipse.osbp.utils</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/org.eclipse.osbp.utils/src-gen/README.txt b/org.eclipse.osbp.utils/src-gen/README.txt
new file mode 100644
index 0000000..bbbe557
--- /dev/null
+++ b/org.eclipse.osbp.utils/src-gen/README.txt
@@ -0,0 +1 @@
+dummy file needed for git for necessary but empty directories!
\ No newline at end of file
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/Activator.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/Activator.java
new file mode 100644
index 0000000..61b427d
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/Activator.java
@@ -0,0 +1,47 @@
+/**
+ *                                                                            
+ * 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.utils;
+
+import org.eclipse.osbp.gitinfo.Loginfo;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+import org.eclipse.osbp.preferences.ProductConfiguration;
+
+public class Activator implements BundleActivator {
+
+	private static BundleContext context;
+
+	public static BundleContext getContext() {
+		return context;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext bundleContext) throws Exception {
+		Loginfo li = new Loginfo();
+		li.print( Activator.class.getCanonicalName(), Activator.class.getClassLoader());
+		Activator.context = bundleContext;
+		ProductConfiguration.getLanguages();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext bundleContext) throws Exception {
+		Activator.context = null;
+	}
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/annotation/CommonUtils.xtend b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/annotation/CommonUtils.xtend
new file mode 100644
index 0000000..b34207b
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/annotation/CommonUtils.xtend
@@ -0,0 +1,139 @@
+/**
+ *                                                                            
+ * 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 
+ * 
+ * 
+ *  This copyright notice shows up in the generated Java code
+ *
+ */
+ 
+ package org.eclipse.osbp.utils.annotation
+
+import java.util.ArrayList
+import javax.inject.Inject
+import org.eclipse.emf.ecore.EObject
+import org.eclipse.xtext.common.types.JvmAnnotationReference
+import org.eclipse.xtext.common.types.JvmDeclaredType
+import org.eclipse.xtext.common.types.JvmEnumerationLiteral
+import org.eclipse.xtext.common.types.JvmOperation
+import org.eclipse.xtext.common.types.JvmStringAnnotationValue
+import org.eclipse.xtext.common.types.JvmTypeReference
+import org.eclipse.xtext.common.types.TypesFactory
+import org.eclipse.xtext.common.types.util.TypeReferences
+import java.util.List
+import org.eclipse.xtext.common.types.JvmGenericType
+
+class CommonUtils {
+		@Inject
+		private TypesFactory typesFactory
+	
+		def void addStringValuesToAnnotation(JvmAnnotationReference annotationRef, ArrayList<String> annotationStringList){
+			var JvmStringAnnotationValue value = typesFactory.createJvmStringAnnotationValue
+			for (annotationString : annotationStringList){
+				value.values += annotationString
+			}
+	//		annotationRef.values += value
+			annotationRef.explicitValues += value
+		}
+
+	/**
+     * Creates a string annotation value and adds it to the given annotation reference
+     */
+	def dispatch addAnnAttr(JvmAnnotationReference annRef, EObject context, String name, String stringValue) {
+		val String[] stringValues = #[stringValue]
+		return addAnnAttrArr(annRef, context, name, stringValues)
+	}
+
+		
+	/**
+     * Creates a string annotation value and adds it to the given annotation reference
+     */
+	def addAnnAttrArr(JvmAnnotationReference annRef, EObject context, String name, String[] stringValues) {
+
+		// create the parameter
+		val value = typesFactory.createJvmStringAnnotationValue
+		annRef.explicitValues += value
+
+		// create the operation
+		val JvmOperation op = typesFactory.createJvmOperation
+		op.setSimpleName(name)
+		value.setOperation(op)
+		for (stringValue: stringValues){
+			value.values += stringValue
+		}
+
+		return value
+	}
+
+
+	/**
+     * Creates a boolean annotation value and adds it to the given annotation reference
+     */
+	def dispatch addAnnAttr(JvmAnnotationReference annRef, EObject context, String name, boolean booleanValue) {
+		// create the parameter
+		val value = typesFactory.createJvmBooleanAnnotationValue
+		annRef.explicitValues += value
+
+		// create the operation
+		val JvmOperation op = typesFactory.createJvmOperation
+		op.setSimpleName(name)
+		value.setOperation(op)
+		value.values += booleanValue
+		return value
+	}
+
+
+	/**
+     * Creates a string annotation value and adds it to the given annotation reference
+     */
+	def dispatch addAnnAttr(JvmAnnotationReference annRef, EObject context, String name, JvmTypeReference typeValue) {
+		// create the parameter
+		val value = typesFactory.createJvmTypeAnnotationValue
+		annRef.explicitValues += value
+
+		// create the operation
+		val JvmOperation op = typesFactory.createJvmOperation
+		op.setSimpleName(name)
+		value.setOperation(op)
+		value.values += typeValue
+		return value
+	}
+
+	/**
+	 * Creates an enum annotation value and adds it to the given annotation reference
+	 */
+	def dispatch addAnnAttr(JvmAnnotationReference annRef, EObject context/*, TypeReferences references */, String name, Enum<?>... enums) {
+
+		// create the parameter
+		val value = typesFactory.createJvmEnumAnnotationValue
+		annRef.explicitValues += value
+
+		// create the enum type
+//		val declaredType = references.findDeclaredType(enums.get(0).declaringClass, context) as JvmDeclaredType
+		for (Enum<?> enumxx : enums) {
+
+			// create the operation
+			val JvmOperation op = typesFactory.createJvmOperation
+			op.setSimpleName(name)
+//			op.setDeclaringType(declaredType)
+			value.setOperation(op)
+
+			// create the literal
+			val JvmEnumerationLiteral literal = typesFactory.createJvmEnumerationLiteral
+//			literal.setDeclaringType(declaredType)
+			literal.setSimpleName(enumxx.name)
+			value.values += literal
+		}
+
+		return value
+	}
+		
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/classloader/IClassLoader.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/classloader/IClassLoader.java
new file mode 100644
index 0000000..16697a3
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/classloader/IClassLoader.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.utils.classloader;
+
+public interface IClassLoader {
+	/**
+	 *  @param className
+	 *  @return loaded Class<?> for the given className
+	 */
+	public Class<?> loadClass(String className);
+	/**
+	 *  @param className
+	 *  @return (re)loaded Class<?> for the given className
+	 */
+	public Class<?> reloadClass(String className);
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/classloader/IEObjectLoader.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/classloader/IEObjectLoader.java
new file mode 100644
index 0000000..61c339e
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/classloader/IEObjectLoader.java
@@ -0,0 +1,33 @@
+/**
+ *                                                                            
+ * 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.utils.classloader;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.xtext.resource.IEObjectDescription;
+import org.eclipse.xtext.resource.XtextResourceSet;
+
+public interface IEObjectLoader {
+	/**
+	 *  @param eClass the type of EClass to be loaded
+	 *  @param qualifiedName the full qualified name of the class
+	 *  @return xtext resource set for the loaded EObject
+	 */
+	public XtextResourceSet getConfiguredXtextResourceFor(EClass eClass, String qualifiedName);
+	
+	/**
+	 *  @param eClass the type of EClass to be loaded
+	 *  @param qualifiedName the full qualified name of the class
+	 *  @return eobject description for the loaded EObject
+	 */
+	public Iterable<IEObjectDescription> getEObjectDescriptions(EClass eClass, String qualifiedName);
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/common/BundleUtilities.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/common/BundleUtilities.java
new file mode 100644
index 0000000..9b37763
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/common/BundleUtilities.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.utils.common;
+
+import com.google.common.base.CaseFormat;
+
+public class BundleUtilities {
+	
+	public static String generateSymbolicNameForPackage(String packageName) {
+		return CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, packageName.replace('.', '_'));
+	}
+
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/common/EntityUtils.xtend b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/common/EntityUtils.xtend
new file mode 100644
index 0000000..bf5deb2
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/common/EntityUtils.xtend
@@ -0,0 +1,197 @@
+/**
+ *                                                                            
+ *  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
+ * 
+ * 
+ *  This copyright notice shows up in the generated Java code
+ *
+ */
+ 
+package org.eclipse.osbp.utils.common
+
+import org.eclipse.xtext.common.types.JvmType
+import org.eclipse.osbp.dsl.semantic.dto.LDto
+import org.eclipse.osbp.dsl.semantic.dto.OSBPDtoPackage
+import org.eclipse.osbp.dsl.semantic.entity.LEntity
+import org.eclipse.osbp.dsl.semantic.common.types.LEnum
+import org.eclipse.osbp.dsl.semantic.common.types.LTypedPackage
+import org.eclipse.osbp.dsl.semantic.dto.util.NamingConventionsUtil
+import org.eclipse.osbp.dsl.semantic.entity.OSBPEntityPackage
+import org.eclipse.emf.ecore.EObject
+import org.eclipse.osbp.dsl.semantic.common.types.LPackage
+import org.eclipse.osbp.dsl.semantic.entity.LBean
+
+class EntityUtils {
+
+	def static String getQualifiedDtoNameForEntity(JvmType type) {
+		try {
+			var qualifiedEntityName = type.qualifiedName
+			var resourceSet = type.eResource.resourceSet
+			var searchName = qualifiedEntityName.getQualifiedDtoNameForQualifiedEntityName;
+			val objectDescs = ServiceListener.getEObjectDescriptions(OSBPDtoPackage.Literals.LDTO, searchName)
+			if (objectDescs.iterator.hasNext) {
+				val eobjectDesc = objectDescs.iterator.next
+				if (resourceSet != null) {
+
+					//var dto = resourceSet.getEObject(eobjectDesc.EObjectURI, true) as LDto
+					return eobjectDesc.name.toString
+				}
+			}
+		} catch (Exception e) {
+			e.printStackTrace
+		}
+		return null
+	}
+
+	/**
+     * get the full qualified dto name for a LEnum
+     * <br>
+     * <b>The DTO for an LEnum <u>never</u> ends with the postfix <code>Dto</code>!</b> 
+     */
+	def static String getDtoFQNForLEnum(LEnum lenum) {
+		var container = lenum as EObject
+		while	((container != null) && !(container instanceof LTypedPackage)) {
+			container = container.eContainer
+		}
+		return applyDtoPackageNameFromEntityPackageNameForEnum(
+			'''«(container as LTypedPackage).name».«lenum.name»''')
+	}
+
+	/**
+     * get the full qualified dto name for a LBean
+     * <br>
+     * <b>The DTO for an LBean <u>always</u> ends with the postfix <code>Dto</code>!</b> 
+     */
+	def static String getDtoFQNForLBean(LBean bean) {
+		return getQualifiedDtoNameForQualifiedEntityName(bean.FQNForLBean)
+	}
+
+	/**
+     * get the full qualified dto name for a LEntity
+     * <br>
+     * <b>The DTO for an LEntity <u>always</u> ends with the postfix <code>Dto</code>!</b> 
+     */
+	def static String getDtoFQNForLEntity(LEntity entity) {
+		return getQualifiedDtoNameForQualifiedEntityName(entity.FQNForLEntity)
+	}
+
+	/**
+     * get the full qualified name for a LEntity
+     */
+	def static String getFQNForLEntity(LEntity entity) {
+		return '''«(entity.eContainer as LTypedPackage).name».«entity.name»'''
+	}
+
+	/**
+     * get the full qualified name for a LBean
+     */
+	def static String getFQNForLBean(LBean bean) {
+		return '''«(bean.eContainer as LTypedPackage).name».«bean.name»'''
+	}
+
+	/**
+     * get the full qualified dto name for a LEntity!
+     * <br>
+     * <b>The DTO for an LEntity <u>always</u> ends with the postfix <code>Dto</code>!</b> 
+     */
+	public def static String getQualifiedDtoNameForQualifiedEntityName(String qualifiedEntityName) {
+		return NamingConventionsUtil.toDtoQualifiedName(qualifiedEntityName);
+	}
+
+	private final static String DTOS_PACKAGE_TOKEN = ".dtos."
+
+	/**
+	 * <b><u>Dirty Hack</u></b>: Apply the package name modification from LEnum to LDto
+     * <br>
+     * <b>The LEnum <u>may or may not</u> reside in a package <code>*.entities.*</code>!</b> 
+     * <br>
+     * <b>The LDto <u>always</u> resides in a package <code>*.dtos.*</code>!</b> 
+	 */
+	protected def static String applyDtoPackageNameFromEntityPackageNameForEnum(String fullQualifiedEnumName) {
+
+		// simply replace .entities. with .dtos.
+		var fullQualifiedDtoName = NamingConventionsUtil.toDtoQualifiedNameForEnum(fullQualifiedEnumName)
+
+		// BUT if there is no .dtos.
+		if (!fullQualifiedDtoName.contains(DTOS_PACKAGE_TOKEN)) {
+
+			// just add .dtos. as last subpackage
+			var lastDot = fullQualifiedDtoName.lastIndexOf(".")
+			fullQualifiedDtoName = fullQualifiedDtoName.substring(0, lastDot) + DTOS_PACKAGE_TOKEN +
+				fullQualifiedDtoName.substring(lastDot + 1)
+		}
+		return fullQualifiedDtoName
+	}
+
+	def static LEntity getEntityFromDto(JvmType type) {
+		var LEntity entity = null
+		try {
+			var qualifiedDtoName = type.qualifiedName
+			var resourceSet = type.eResource.resourceSet
+			val objectDescs = ServiceListener.getEObjectDescriptions(OSBPDtoPackage.Literals.LDTO, qualifiedDtoName)
+			if (objectDescs.iterator.hasNext) {
+				val eobjectDesc = objectDescs.iterator.next
+				if (resourceSet != null) {
+					var dto = resourceSet.getEObject(eobjectDesc.EObjectURI, true) as LDto
+					if (dto != null && dto.wrappedType != null) {
+						if (dto.wrappedType.eIsProxy) {
+							val entityDescs = ServiceListener.getEObjectDescriptions(OSBPEntityPackage.Literals.LENTITY,
+								qualifiedDtoName.replace(".dtos.", ".entities.").replace("Dto", ""))
+							if (entityDescs.iterator.hasNext) {
+								val entityObjectDesc = entityDescs.iterator.next
+								if (resourceSet != null) {
+									entity = resourceSet.getEObject(entityObjectDesc.EObjectURI, true) as LEntity
+								}
+							}
+						} else {
+							entity = dto.wrappedType as LEntity
+						}
+
+					}
+				}
+			}
+		} catch (Exception e) {
+			// NOP
+		}
+		return entity
+	}
+
+	def static LEntity getEntityFromDto(LDto dto) {
+		var LEntity entity = null
+		if (dto != null && dto.wrappedType != null) {
+			if (dto.wrappedType.eIsProxy) {
+				throw new IllegalStateException
+			} else {
+				entity = dto.wrappedType as LEntity
+			}
+
+		}
+		return entity
+	}
+
+	def static LDto getDto(JvmType type) {
+		try {
+			var qualifiedDtoName = type.qualifiedName
+			var resourceSet = type.eResource.resourceSet
+			val objectDescs = ServiceListener.getEObjectDescriptions(OSBPDtoPackage.Literals.LDTO, qualifiedDtoName)
+			if (objectDescs.iterator.hasNext) {
+				val eobjectDesc = objectDescs.iterator.next
+				if (resourceSet != null) {
+					return resourceSet.getEObject(eobjectDesc.EObjectURI, true) as LDto
+				}
+			}
+		} catch (Exception e) {
+			// NOP
+		}
+		return null
+	}
+
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/common/IEntityIdModificationListenerView.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/common/IEntityIdModificationListenerView.java
new file mode 100644
index 0000000..5e40d45
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/common/IEntityIdModificationListenerView.java
@@ -0,0 +1,73 @@
+/**
+ *                                                                            
+ * 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.utils.common;
+
+import org.eclipse.osbp.eventbroker.EventBrokerMsg;
+
+
+public interface IEntityIdModificationListenerView {
+	
+	/**
+	 * Each time, the view is refreshed, the list of previous listened entity ids should be reseted!
+	 */
+	public void resetListeningForEntityIdsModifications();
+	
+	/**
+	 * Each implementation should react on the refresh, due to modification of the entity and id,
+	 * in the correct way depending on the view context!
+	 * <br>
+	 * <b>Important:</b> If the view should be refreshed, call {@link #resetListeningForEntityIdsModifications()}!
+	 * @param entity name of the modified entity, all dots will be replaced by slash
+	 * @param id primary key of the modified entity
+	 */
+	public void refreshViewDueToModifiedEntityId(String entity, Object id);
+	
+	/**
+	 * Add relevant entity name and primary key that are rendered inside this report,
+	 * so that any change of their entities can be listened!
+	 * 
+	 * <b>If an entity wasn't rendered at this time, it can't be listened,
+	 * even if it will be contained after it's change the next time!</b>
+	 * @param entityName, all dots will be replaced by slash
+	 * @param primaryKey
+	 */
+	public void addEntityIdToModifyListener(String entityName, Object primaryKey);
+	
+	/**
+	 * Remove relevant entity name and primary key that are rendered inside this report,
+	 * so that any change of their entities can be listened!
+	 * 
+	 * <b>If an entity wasn't rendered at this time, it can't be listened,
+	 * even if it will be contained after it's change the next time!</b>
+	 * @param entityName, all dots will be replaced by slash
+	 * @param primaryKey
+	 */
+	public void removeEntityIdFromModifyListener(String entityName, Object primaryKey);
+
+	/**
+	 * checks for the event broker message if the sent entity id should do a refresh view
+	 * @param message
+	 * @param doRefresh if true, the refresh will be forced inside
+	 * @return true if it should do a refresh
+	 */
+	public boolean checkOnModifiedEntityId(EventBrokerMsg message, boolean doRefresh);
+
+	/**
+	 * checks for the event broker message if the sent entity id should do a refresh view
+	 * @param entityName, all dots will be replaced by slash
+	 * @param id
+	 * @param doRefresh if true, the refresh will be forced inside
+	 * @return true if it should do a refresh
+	 */
+	public boolean checkOnModifiedEntityId(String entityName, Object id, boolean doRefresh);
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/common/ServiceListener.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/common/ServiceListener.java
new file mode 100644
index 0000000..56f2237
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/common/ServiceListener.java
@@ -0,0 +1,67 @@
+/**
+ *                                                                            
+ * 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.utils.common;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.xtext.resource.IEObjectDescription;
+import org.eclipse.xtext.resource.XtextResourceSet;
+
+import org.eclipse.osbp.utils.classloader.IEObjectLoader;
+
+
+public class ServiceListener {
+	
+	private static final Set<IEObjectLoader> sEObjectLoaderServices = new HashSet<IEObjectLoader>();
+
+	public static XtextResourceSet getConfiguredXtextResourceFor(EClass eClass, String qualifiedName) {
+		XtextResourceSet xtextResourceSet = null;
+		for	(IEObjectLoader eObjectLoader : sEObjectLoaderServices) {
+			xtextResourceSet = eObjectLoader.getConfiguredXtextResourceFor(eClass, qualifiedName);
+			if	(xtextResourceSet != null) {
+				return xtextResourceSet;
+			}
+		}
+		return null;
+	}
+	
+	public static Iterable<IEObjectDescription> getEObjectDescriptions(EClass eClass, String qualifiedName) {
+		Iterable<IEObjectDescription> eObjectDescriptions = null;
+		for	(IEObjectLoader eObjectLoader : sEObjectLoaderServices) {
+			eObjectDescriptions = eObjectLoader.getEObjectDescriptions(eClass, qualifiedName);
+			if	(eObjectDescriptions != null) {
+				return eObjectDescriptions;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * @param eObjectLoaderService declarative service loaded
+	 */
+	public static void bindEObjectLoaderService(IEObjectLoader eObjectLoaderService) {
+		System.err.println(ServiceListener.class.getCanonicalName()+": "+eObjectLoaderService.getClass().getCanonicalName()+" bound");
+		sEObjectLoaderServices.add(eObjectLoaderService);
+	}
+
+	/**
+	 * @param eObjectLoaderService declarative service unloaded
+	 */
+	public static void unbindEObjectLoaderService(IEObjectLoader eObjectLoaderService) {
+		System.err.println(ServiceListener.class.getCanonicalName()+": "+eObjectLoaderService.getClass().getCanonicalName()+" unbound");
+		sEObjectLoaderServices.remove(eObjectLoaderService);
+	}
+
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/common/SystemInformation.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/common/SystemInformation.java
new file mode 100644
index 0000000..7a74c7d
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/common/SystemInformation.java
@@ -0,0 +1,30 @@
+/**
+ *                                                                            
+ * 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.utils.common;
+
+public class SystemInformation {
+	
+	private static String OS = System.getProperty("os.name").toLowerCase();
+
+	public static boolean isWindowsOS() {
+		return (OS.indexOf("win") >= 0);
+	}
+
+	public static boolean isMacOS() {
+		return (OS.indexOf("mac") >= 0);
+	}
+
+	public static boolean isUnixOS() {
+		return (OS.indexOf("nix") >= 0 || OS.indexOf("nux") >= 0 || OS.indexOf("aix") > 0 );
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/constants/Base26Crypt.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/constants/Base26Crypt.java
new file mode 100644
index 0000000..700d750
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/constants/Base26Crypt.java
@@ -0,0 +1,40 @@
+/**
+ *                                                                            
+ *  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.utils.constants;
+
+import java.math.BigInteger;
+
+public class Base26Crypt {
+
+	public static long convertToKey(String sName) {
+		// Convert string into Base-26 number A-Z becomes 0-9A-P...
+		StringBuffer sbuff = new StringBuffer(sName.replaceAll("(\\W)", "").toUpperCase());
+		for (int i = 0; i < sbuff.length(); ++i) {
+			char cVal = sbuff.charAt(i);
+			if (cVal > 'J')
+				cVal = (char) (cVal - 'K' + 'A'); // K-Z becomes A-P
+			else
+				cVal = (char) (cVal - 'A' + '0'); // A-J becomes 0-9
+			sbuff.setCharAt(i, cVal);
+		}
+
+		// Convert base-26 string into BigInteger...
+		BigInteger bigInt = new BigInteger(sbuff.toString(), 26);
+
+		// Convert BigInteger into long license key...
+		long lKey = bigInt.longValue();
+
+		return (lKey);
+	}
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/constants/ExtendedDate.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/constants/ExtendedDate.java
new file mode 100644
index 0000000..138352c
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/constants/ExtendedDate.java
@@ -0,0 +1,44 @@
+/**
+ *                                                                            
+ *  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.utils.constants;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.concurrent.TimeUnit;
+
+@SuppressWarnings("serial")
+public class ExtendedDate extends Date {
+
+	public static Date add(Date base, long span, TimeUnit unit) {
+		// daylight saving time fix
+		if (TimeUnit.DAYS.equals(unit)) {
+			Calendar c = Calendar.getInstance();
+			c.setTime(base);
+			c.add(Calendar.DAY_OF_MONTH, (int) span);
+			return c.getTime();
+		}
+		return new Date(base.getTime() + unit.toMillis(span));
+	}
+
+	private static final SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS"); 
+
+	public static String timeStampToString() {
+    	return timeStampToString(System.currentTimeMillis());
+    }
+
+	public static String timeStampToString(long milli) {
+    	return (milli > 0) ? sDateFormat.format(new Date(milli)) : "";
+    }
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/constants/GeneratorConstants.xtend b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/constants/GeneratorConstants.xtend
new file mode 100644
index 0000000..28a14f8
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/constants/GeneratorConstants.xtend
@@ -0,0 +1,30 @@
+/**
+ *                                                                            
+ * 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 
+ * 
+ * 
+ *  This copyright notice shows up in the generated Java code
+ *
+ */
+ 
+package org.eclipse.osbp.utils.constants
+
+class GeneratorConstants {
+	public final static val GENERATED_CLASSES_DOCUMENTATION ='''<b>This class was auto generated! Leave it unmodified to avoid unpredictable results!</b>'''
+
+	public final static String I18N_RESOURCE_PATH_NAME = "i18n";
+	private final static String I18N_RESOURCE_FILE_NAME = "I18N";
+	private final static String I18N_RESOURCE_FILE_EXTENSION = ".properties";
+	public final static String I18N_RESOURCE_FULL_FILE_NAME = I18N_RESOURCE_FILE_NAME+I18N_RESOURCE_FILE_EXTENSION;
+	public final static String I18N_RESOURCE_FULL_PATH_NAME = I18N_RESOURCE_PATH_NAME+"/"+I18N_RESOURCE_FILE_NAME+I18N_RESOURCE_FILE_EXTENSION;
+	public final static String I18N_RESOURCE_FULL_BUNDLE_NAME = I18N_RESOURCE_PATH_NAME+"."+I18N_RESOURCE_FILE_NAME;
+	
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/constants/PathConstants.xtend b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/constants/PathConstants.xtend
new file mode 100644
index 0000000..c663d12
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/constants/PathConstants.xtend
@@ -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 
+ * 
+ * 
+ *  This copyright notice shows up in the generated Java code
+ *
+ */
+ 
+package org.eclipse.osbp.utils.constants
+
+class PathConstants {
+	public final static val JS_PLUGIN_PREFIX ='''theme://plugin/'''
+	public final static val COMPEX_UTILS_JS_PLUGIN_PATH ='''«JS_PLUGIN_PREFIX»org.eclipse.osbp.utils.js/org/eclipse/osbp/utils/js/'''
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/currency/CurrencyConverter.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/currency/CurrencyConverter.java
new file mode 100644
index 0000000..df8ffe3
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/currency/CurrencyConverter.java
@@ -0,0 +1,253 @@
+/**
+ *                                                                            
+ * 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.utils.currency;
+
+import java.math.BigDecimal;
+import java.math.MathContext;
+import java.math.RoundingMode;
+import java.util.Locale;
+
+import org.joda.money.CurrencyUnit;
+import org.joda.money.Money;
+import org.joda.time.DateTime;
+
+
+
+/**
+ *  Currency Conversion
+ */
+public class CurrencyConverter {
+
+	private final Locale fLocalLocale;
+	private final CurrencyUnit fLocalCurrencyUnit;
+	private final BigDecimal fReferenceRateEuroToLocal;
+	private final Locale fForeignLocale;
+	private final CurrencyUnit fForeignCurrencyUnit;
+	private final BigDecimal fReferenceRateEuroToForeign;
+	private final DateTime fReferenceDate;
+	private final boolean fSameCurrencyUnit;
+
+	/**
+	 * @param localLocale the local Locale
+	 * @param foreignLocale the foreign Locale
+	 * @param referenceDate the reference date used for reference rates
+	 */
+	public CurrencyConverter(final Locale localLocale, final Locale foreignLocale, final DateTime referenceDate) {
+		this(localLocale, null, foreignLocale, null, referenceDate);
+	}
+	
+	/**
+	 * @param localLocale the local Locale
+	 * @param foreignCurrency the foreign Locale
+	 * This constructor will use the actual reference dates aka "now"
+	 */
+	public CurrencyConverter(final Locale localLocale, final Locale foreignLocale) {
+		this(localLocale, foreignLocale, DateTime.now());
+	}
+	
+	/**
+	 * @param localLocale the local Locale
+	 * @param localCurrency the local currency unit
+	 * @param foreignLocale the foreign Locale
+	 * @param foreignCurrency the foreign currency unit
+	 * @param referenceDate the reference date used for reference rates
+	 */
+	public CurrencyConverter(final CurrencyUnit localCurrency, final CurrencyUnit foreignCurrency, final DateTime referenceDate) {
+		this(null, localCurrency, null, foreignCurrency, referenceDate);
+	}
+	
+	/**
+	 * @param localCurrency the local currency
+	 * @param foreignCurrency the foreign currency
+	 * This constructor will use the actual reference dates aka "now"
+	 */
+	public CurrencyConverter(final CurrencyUnit localUnit, final CurrencyUnit foreignCurrency) {
+		this(localUnit, foreignCurrency, DateTime.now());
+	}
+
+	private  CurrencyConverter(final Locale localLocale, final CurrencyUnit localCurrency, final Locale foreignLocale, final CurrencyUnit foreignCurrency, final DateTime referenceDate) {
+		fLocalCurrencyUnit = currencyUnitOf(localLocale, localCurrency);
+		fLocalLocale = localeOf(localLocale, localCurrency);
+		fForeignCurrencyUnit = currencyUnitOf(foreignLocale, foreignCurrency);
+		fForeignLocale = localeOf(foreignLocale, foreignCurrency);
+		fSameCurrencyUnit = fLocalCurrencyUnit.equals(fForeignCurrencyUnit);
+		fReferenceDate = referenceDate;
+		fReferenceRateEuroToLocal = EuroBasedExchangeReferenceRates.getReferenceRate(fLocalCurrencyUnit, fReferenceDate);
+		fReferenceRateEuroToForeign = EuroBasedExchangeReferenceRates.getReferenceRate(fForeignCurrencyUnit, fReferenceDate);
+	}
+
+	/**
+	 * @param locale
+	 * @param currencyUnit
+	 * @return the currency unit depending on either the currencyUnit or the locale
+	 */
+	public static CurrencyUnit currencyUnitOf(final Locale locale, final CurrencyUnit currencyUnit) {
+		if	(currencyUnit == null) {
+			return CurrencyUnit.of(locale);
+		}
+		else {
+			return currencyUnit;
+		}
+	}
+	
+	/**
+	 * @param locale
+	 * @param currencyUnit
+	 * @return the locale depending on either the locale or the currencyUnit
+	 */
+	public static Locale localeOf(final Locale locale, final CurrencyUnit currencyUnit) {
+		if	(locale == null) {
+			if	(currencyUnit.getCountryCodes().size() == 1) {
+				return new Locale("", currencyUnit.getCountryCodes().iterator().next());
+			}
+			else {
+				return null;
+			}
+		}
+		else {
+			return locale;
+		}
+	}
+	
+	/**
+	 * @return the local Locale; may be null
+	 */
+	public Locale getLocalLocale() {
+		return fLocalLocale;
+	}
+	
+	/**
+	 * @return the local currency unit
+	 */
+	public CurrencyUnit getLocalCurrencyUnit() {
+		return fLocalCurrencyUnit;
+	}
+	
+	/**
+	 * @return the foreign Locale; may be null
+	 */
+	public Locale getForeignLocale() {
+		return fForeignLocale;
+	}
+
+	/**
+	 * @return the foreign currency unit
+	 */
+	public CurrencyUnit getForeignCurrencyUnit() {
+		return fForeignCurrencyUnit;
+	}
+
+	/**
+	 * @return the reference date used for reference rates
+	 */
+	public DateTime getReferenceDate() {
+		return fReferenceDate;
+	}
+
+	/**
+	 * @return the rate from local to foreign currency
+	 */
+	public double getLocalToForeignReferenceRateAsDouble() {
+		return getLocalToForeignReferenceRate().doubleValue();
+	}
+	
+	/**
+	 * @return the rate from local to foreign currency
+	 */
+	public BigDecimal getLocalToForeignReferenceRate() {
+		return getReferenceRate(false);
+	}
+
+	/**
+	 * @return the rate from foreign to local currency
+	 */
+	public double getForeignToLocalReferenceRateAsDouble() {
+		return getForeignToLocalReferenceRate().doubleValue();
+	}
+	
+	/**
+	 * @return the rate from foreign to local currency
+	 */
+	public BigDecimal getForeignToLocalReferenceRate() {
+		return getReferenceRate(true);
+	}
+	
+	public final static MathContext BASIC_DIVIDE_RATES_MATHCONTEXT = new MathContext(8);
+	
+	private BigDecimal getReferenceRate(boolean backward) {
+		if	(backward) {
+			return fReferenceRateEuroToLocal.divide(fReferenceRateEuroToForeign, BASIC_DIVIDE_RATES_MATHCONTEXT);
+		}
+		else {
+			return fReferenceRateEuroToForeign.divide(fReferenceRateEuroToLocal, BASIC_DIVIDE_RATES_MATHCONTEXT);
+		}
+	}
+
+	/**
+	 * @param localAmount
+	 * @return the exchanged foreign amount
+	 */
+	public double exchangeToDouble(double localAmount) {
+		return exchangeToDouble(localAmount, false);
+	}
+
+	/**
+	 * @param amount
+	 * @param backward false if exchange from local to foreign currency, true vice versa
+	 * @return the exchanged amount
+	 */
+	public double exchangeToDouble(double amount, boolean backward) {
+		return exchange(BigDecimal.valueOf(amount), backward).doubleValue();
+	}
+	
+	/**
+	 * @param localAmount
+	 * @return the exchanged foreign amount
+	 */
+	public BigDecimal exchange(BigDecimal base) {
+		return exchange(base, false);
+	}
+	
+	/**
+	 * @param amount
+	 * @param backward false if exchange from local to foreign currency, true vice versa
+	 * @return the exchanged amount
+	 */
+	public BigDecimal exchange(BigDecimal base, boolean backward) {
+		if	(fSameCurrencyUnit) {
+			return base;
+		}
+		else {
+			Money result;
+			if	(backward) {
+				result = Money.of(
+					fLocalCurrencyUnit, 
+					base
+						.multiply(fReferenceRateEuroToLocal)
+						.divide(fReferenceRateEuroToForeign, RoundingMode.HALF_EVEN),
+					RoundingMode.HALF_EVEN
+				);
+			}
+			else {
+				result = Money.of(
+					fForeignCurrencyUnit, 
+					base
+						.multiply(fReferenceRateEuroToForeign)
+						.divide(fReferenceRateEuroToLocal, RoundingMode.HALF_EVEN),
+					RoundingMode.HALF_EVEN
+				);
+			}
+			return result.getAmount();
+		}
+	}
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/currency/EuroBasedCurrencyConversionData.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/currency/EuroBasedCurrencyConversionData.java
new file mode 100644
index 0000000..f031b1b
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/currency/EuroBasedCurrencyConversionData.java
@@ -0,0 +1,149 @@
+/**
+ *                                                                            
+ * 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.utils.currency;
+
+import java.math.BigDecimal;
+import java.util.Currency;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.joda.money.CurrencyUnit;
+import org.joda.money.IllegalCurrencyException;
+import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+
+
+
+/**
+ *  all Euro based reference rates for one currency unit 
+ */
+public final class EuroBasedCurrencyConversionData {
+	private final CurrencyUnit fCurrencyUnit;
+	private final Currency fCurrency;
+	private DateTime fOldestReferenceDate;
+	private DateTime fNewestReferenceDate;
+	private final Map<DateTime, BigDecimal> sReferenceRates;
+	
+	/**
+	 * @param currencyUnit the currency unit, for which the rates are given
+	 */
+	protected EuroBasedCurrencyConversionData(CurrencyUnit currencyUnit) {
+		fCurrencyUnit = currencyUnit;
+		fCurrency = Currency.getInstance(fCurrencyUnit.getCode());
+		fOldestReferenceDate = new DateTime(2999, 12, 31, 0, 0);
+		fNewestReferenceDate = new DateTime(1900,  1,  1, 0, 0);
+		if	(CurrencyUnit.EUR.equals(fCurrencyUnit)) {
+			sReferenceRates = null;
+		}
+		else {
+			sReferenceRates = new HashMap<DateTime, BigDecimal>();
+		}
+	}
+	
+	/**
+	 * TODO if no rate is given for the date, use the previous date, because of weekends
+	 * TODO if reference date is in the "future", it may be available too, if it the newest reference rate is on friday and the requested reference date is on the following weekend
+	 * @param referenceDate for which the rate is requested
+	 * @return the Euro based reference rate
+	 */
+	public BigDecimal getReferenceRate(DateTime referenceDate) {
+		if	(CurrencyUnit.EUR.equals(fCurrencyUnit)) {
+			// --- for Euro always return 1.0 ---
+			return BigDecimal.ONE;
+		}
+		else if ((fOldestReferenceDate.compareTo(referenceDate) > 0 ) || (fNewestReferenceDate.compareTo(referenceDate) < 0)) {
+			throw new IllegalCurrencyException("No euro exchange reference rate for currency "+fCurrencyUnit.getCurrencyCode()+" for "+referenceDate+" available, only in ["+fOldestReferenceDate.toString(TO_STRING_DATE_FORMAT)+","+fNewestReferenceDate.toString(TO_STRING_DATE_FORMAT)+"]");
+		}
+		else {
+			DateTime index = Utilities.toIndexingDateTime(referenceDate);
+			while (!sReferenceRates.containsKey(index)) {
+				index = index.minusDays(1);
+			}
+			return sReferenceRates.get(index);
+		}
+	}
+
+	/**
+	 * the internal index does only respect year & month & day 
+	 * @param referenceDate for which the rate is set
+	 * @param referenceRate the Euro based reference rate
+	 */
+	protected void putReferenceRate(DateTime referenceDate, BigDecimal referenceRate) {
+		DateTime index = new DateTime(referenceDate.getYear(), referenceDate.getMonthOfYear(), referenceDate.getDayOfMonth(), 0, 0);
+		// --- only for non-Euro save the rates ---
+		if	(!CurrencyUnit.EUR.equals(fCurrencyUnit)) {
+			sReferenceRates.put(index, referenceRate);
+		}
+		if	(index.compareTo(fOldestReferenceDate) < 0) {
+			fOldestReferenceDate = index;
+		}
+		if	(index.compareTo(fNewestReferenceDate) > 0) {
+			fNewestReferenceDate = index;
+		}
+	}
+
+	/**
+	 * @return the currency unit
+	 */
+	public CurrencyUnit getCurrencyUnit() {
+		return fCurrencyUnit;
+	}
+	
+	/**
+	 * @return the currency unit
+	 */
+	public Currency getCurrency() {
+		return fCurrency;
+	}
+	
+	/**
+	 * @return the oldest available reference date
+	 */
+	public DateTime getOldestReferenceDate() {
+		return fOldestReferenceDate;
+	}
+	
+	/**
+	 * TODO if reference date is in the "future", it may be available too, if it the newest reference rate is on friday and the requested reference date is on the following weekend
+	 * @return the newest available reference date
+	 */
+	public DateTime getNewestReferenceDate() {
+		return fNewestReferenceDate;
+	}		
+	
+	/**
+	 * @return a ISO-3166-1 ordered map with ISO-3166-1 country codes and the corresponding locale
+	 */
+	public Map<String,Locale> getCountryMap() {
+		Map<String,Locale> result = new TreeMap<String,Locale>();
+		for	(String country : fCurrencyUnit.getCountryCodes()) {
+			result.put(country, new Locale("", country));
+		}
+		return result;
+	}
+	
+	private static DateTimeFormatter TO_STRING_DATE_FORMAT = DateTimeFormat.forPattern("yyyy-MM-dd/EE");
+	
+	public String toString() {
+		String retcode = fCurrencyUnit.getCode()+" / "+fCurrencyUnit.getDefaultFractionDigits()+" ["+fOldestReferenceDate.toString(TO_STRING_DATE_FORMAT)+" - "+fNewestReferenceDate.toString(TO_STRING_DATE_FORMAT)+"] = "+fCurrencyUnit.getSymbol()+" = "+fCurrency.getDisplayName()+ " / "+fCurrencyUnit.getCountryCodes().size()+" countries /";
+		Map<String, Locale> countries = getCountryMap(); 
+		for	(String country : countries.keySet()) {
+			retcode += " ("+country+")"+countries.get(country).getDisplayCountry();
+		}
+		return retcode;
+	}
+	
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/currency/EuroBasedExchangeReferenceRates.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/currency/EuroBasedExchangeReferenceRates.java
new file mode 100644
index 0000000..0934a4e
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/currency/EuroBasedExchangeReferenceRates.java
@@ -0,0 +1,276 @@
+/**
+ *                                                                            
+ * 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.utils.currency;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Currency;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import javax.xml.stream.XMLEventReader;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.events.Attribute;
+import javax.xml.stream.events.StartElement;
+import javax.xml.stream.events.XMLEvent;
+
+import org.joda.money.CurrencyUnit;
+import org.joda.money.IllegalCurrencyException;
+import org.joda.time.DateTime;
+
+import org.eclipse.osbp.preferences.ProductConfiguration;
+
+
+
+/**
+ *  Euro based exchange reference rates
+ */
+public class EuroBasedExchangeReferenceRates {
+
+//	private static Boolean SYNCHRONIZOR = Boolean.FALSE;
+	private static final Object SYNCHRONIZOR = new Object();	
+	/**
+	 * @param currencyUnit the requested currency unit
+	 * @return the reference rate for "today"
+	 */
+	public static BigDecimal getReferenceRate(CurrencyUnit currency) throws IllegalCurrencyException {
+		return getReferenceRate(currency, DateTime.now());
+	}
+
+	/**
+	 * @param currencyUnit the requested currency unit
+	 * @param referenceDate the reference date
+	 * @return the reference rate
+	 * @throws ParseException 
+	 * @throws IllegalCurrencyException 
+	 */
+	public static BigDecimal getReferenceRate(CurrencyUnit currencyUnit, String referenceDate) throws IllegalCurrencyException, ParseException {
+		synchronized (SYNCHRONIZOR) {
+			return getReferenceRate(currencyUnit, Utilities.toIndexingDateTime(referenceDate));
+		}
+	}
+
+	/**
+	 * @param currencyUnit the requested currency unit
+	 * @param referenceDate the reference date
+	 * @return the reference rate
+	 */
+	public static BigDecimal getReferenceRate(CurrencyUnit currency, DateTime referenceDate) throws IllegalCurrencyException {
+		synchronized (SYNCHRONIZOR) {
+			BigDecimal referenceRate;
+			if	(CurrencyUnit.EUR.equals(currency)) {
+				referenceRate = BigDecimal.ONE;
+			}
+			else {
+				loadEuroForeignExchangeReferenceRates();
+				EuroBasedCurrencyConversionData data = sCurrencyConversions.get(currency);
+				if	(data == null) {
+					throw new IllegalCurrencyException("No euro exchange for currency "+currency.getCurrencyCode()+" available");
+				}
+				referenceRate = data.getReferenceRate(referenceDate);
+				if	(referenceRate == null) {
+					throw new IllegalCurrencyException("No euro exchange reference rate for currency "+currency.getCurrencyCode()+" for "+referenceDate+" available, only in ["+data.getOldestReferenceDate()+","+data.getNewestReferenceDate()+"]");
+				}
+			}
+			return referenceRate;
+		}
+	}
+
+	/**
+	 * @return the alphanum sorted list of registered currencies
+	 */
+    public static List<CurrencyUnit> registeredCurrencies() {
+    	loadEuroForeignExchangeReferenceRates();
+        ArrayList<CurrencyUnit> list = new ArrayList<CurrencyUnit>(sCurrencyConversions.keySet());
+        Collections.sort(list);
+        return list;
+    }
+
+    /**
+     * @param currencyUnit
+     * @return the Euro based currency conversion data for the currency unit given
+     */
+    public static EuroBasedCurrencyConversionData getCurrencyConversionData(CurrencyUnit currencyUnit) {
+    	loadEuroForeignExchangeReferenceRates();
+    	return sCurrencyConversions.get(currencyUnit);
+    }
+
+    /**
+     * force reloading all Euro based currency conversions from a server
+     */
+    public static void reloadEuroForeignExchangeReferenceRates() {
+    	unloadEuroForeignExchangeReferenceRates();
+    	loadEuroForeignExchangeReferenceRates();
+    }
+    
+    /**
+     * force loading all Euro based currency conversions from a server if they are not loaded now 
+     */
+	public static void loadEuroForeignExchangeReferenceRates() {
+		synchronized (SYNCHRONIZOR) {
+			if	(sCurrencyConversions == null) {
+				// --- prepare the internal cache ---
+				sCurrencyConversions = new HashMap<CurrencyUnit, EuroBasedCurrencyConversionData>();
+				// --- allways add Euro ---
+				sCurrencyConversions.put(CurrencyUnit.EUR, new EuroBasedCurrencyConversionData(CurrencyUnit.EUR));
+				// --- load previous and daily exchange rates from server ---
+				sLoadExceptions = new TreeMap<String,Exception>();
+				loadEuroForeignExchangeReferenceRates(ProductConfiguration.getEuroXRefRatesURLPrevious());
+				loadEuroForeignExchangeReferenceRates(ProductConfiguration.getEuroXRefRatesURLDaily());
+				// --- show any exceptions occurred while loading ---
+				for	(String key : sLoadExceptions.keySet()) {
+					System.err.println(key);
+				}
+			}
+		}
+	}
+
+	/**
+	 * free the internal cache
+	 */
+	public static void unloadEuroForeignExchangeReferenceRates() {
+		synchronized (SYNCHRONIZOR) {
+			sCurrencyConversions = null;
+		}
+	}
+    
+	/**
+	 * put the reference rate for the reference date for the currency unit into the internal cache
+	 * @param referenceDate
+	 * @param currencyUnit
+	 * @param referenceRate
+	 * @throws ParseException 
+	 */
+    protected static void putReferenceRate(String referenceDate, CurrencyUnit currencyUnit, BigDecimal referenceRate) throws ParseException {
+    	putReferenceRate(Utilities.toIndexingDateTime(referenceDate), currencyUnit, referenceRate);
+    }
+    
+	/**
+	 * put the reference rate for the reference date for the currency unit into the internal cache
+	 * @param referenceDate
+	 * @param currencyUnit
+	 * @param referenceRate
+	 */
+    protected static void putReferenceRate(DateTime referenceDate, CurrencyUnit currencyUnit, BigDecimal referenceRate) {
+    	EuroBasedCurrencyConversionData data = sCurrencyConversions.get(currencyUnit);
+		if	(data == null) {
+			data = new EuroBasedCurrencyConversionData(currencyUnit);
+			sCurrencyConversions.put(currencyUnit, data);
+		}
+		data.putReferenceRate(referenceDate, referenceRate);
+    }
+	
+	private static Map<CurrencyUnit, EuroBasedCurrencyConversionData> sCurrencyConversions;
+	private static Map<String,Exception> sLoadExceptions;
+
+	// @see http://www.vogella.com/tutorials/JavaXML/article.html
+    @SuppressWarnings("unchecked")
+	private static void loadEuroForeignExchangeReferenceRates(String fileurl) {
+		try {
+			// First, create a new XMLInputFactory
+			XMLInputFactory inputFactory = XMLInputFactory.newInstance();
+			// Setup a new eventReader
+			URL url = new URL(fileurl);
+			InputStream in = url.openStream();
+			XMLEventReader eventReader = inputFactory.createXMLEventReader(in);
+			// read the XML document
+			String referenceDate = null;
+			while (eventReader.hasNext()) {
+				XMLEvent event = eventReader.nextEvent();
+				if 	(event.isStartElement()) {
+					StartElement startElement = event.asStartElement();
+					// If we have an item element, we create a new item
+					if 	(startElement.getName().getLocalPart().equalsIgnoreCase("cube")) {
+						CurrencyUnit currencyUnit = null;
+						BigDecimal factor = null;
+					    // We read the attributes from this tag
+						Iterator<Attribute> attributes = startElement.getAttributes();
+					    while 	(attributes.hasNext()) {
+					    	Attribute attribute = attributes.next();
+					    	if 	(attribute.getName().toString().equalsIgnoreCase("time")) {
+					    		referenceDate = attribute.getValue();
+					    	}
+					    	else if	(attribute.getName().toString().equalsIgnoreCase("currency")) {
+					    		try {
+					    			currencyUnit = CurrencyUnit.of(attribute.getValue());
+					    		}
+					    		catch (Exception e) {
+					    			sLoadExceptions.put(e.getLocalizedMessage(),e);
+					    			try {
+					    				Currency currency = Currency.getInstance(attribute.getValue());
+					    				if	(currency != null) {
+					    					currencyUnit = CurrencyUnit.registerCurrency(currency.getCurrencyCode(), currency.getNumericCode(), currency.getDefaultFractionDigits(), new ArrayList<String>());
+					    					throw new IllegalArgumentException("Found currency '"+currency+"'");
+					    				}
+					    			}
+						    		catch (Exception e1) {
+					    				if	("ROL".equalsIgnoreCase(attribute.getValue())) {
+					    					// @see https://de.wikipedia.org/wiki/ISO_4217: ROL 	Leu 	100 Bani 	Rumänien 	1952–2005 	Neuer Leu 	RON 	10000:1
+					    					currencyUnit = CurrencyUnit.registerCurrency("ROL", 0, 2, new ArrayList<String>()); // Arrays.asList(new String[] {"RO"}));
+					    					Exception e2 = new IllegalArgumentException("Found currency 'ROL'");
+					    					sLoadExceptions.put(e2.getLocalizedMessage(),e2);
+					    				}
+					    				else {
+					    					sLoadExceptions.put(e1.getLocalizedMessage(),e1);
+					    				}
+						    		}
+					    		}
+					    	}
+					    	else if (attribute.getName().toString().equalsIgnoreCase("rate")) {
+					    		try {
+					    			factor = BigDecimal.valueOf(Double.parseDouble(attribute.getValue()));
+					    		}
+					    		catch (Exception e) {
+					    			sLoadExceptions.put(e.getLocalizedMessage(),e);
+					    		}
+					    	}
+					    }
+					    if	((currencyUnit != null) && (factor != null) && (referenceDate != null)) {
+					    	try {
+						    	putReferenceRate(referenceDate, currencyUnit, factor);
+						    	putReferenceRate(referenceDate, CurrencyUnit.EUR, BigDecimal.ONE);
+					    	}
+				    		catch (Exception e) {
+				    			sLoadExceptions.put(e.getLocalizedMessage(),e);
+				    		}
+					    }
+					}
+				}
+			}
+		}
+		catch (FileNotFoundException e) {
+			sLoadExceptions.put(e.getLocalizedMessage(),e);
+		}
+		catch (XMLStreamException e) {
+			sLoadExceptions.put(e.getLocalizedMessage(),e);
+		}
+		catch (MalformedURLException e) {
+			sLoadExceptions.put(e.getLocalizedMessage(),e);
+		}
+		catch (IOException e) {
+			sLoadExceptions.put(e.getLocalizedMessage(),e);
+		}
+	}
+    
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/currency/Utilities.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/currency/Utilities.java
new file mode 100644
index 0000000..ca33425
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/currency/Utilities.java
@@ -0,0 +1,66 @@
+/**
+ *                                                                            
+ * 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.utils.currency;
+
+import java.text.ParseException;
+import java.util.Currency;
+
+import org.joda.money.CurrencyUnit;
+import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+
+/**
+ *  utilities for currency and currency units
+ */
+public class Utilities {
+
+	private static DateTimeFormatter REFERENCE_DATE_FORMAT = DateTimeFormat.forPattern("yyyy-MM-dd");
+	
+	/**
+	 * @param referenceDate in the format YYYY-MM-DD
+	 * @return the corresponding Calendar instance for the referenceDate
+	 * @throws ParseException
+	 */
+	public static DateTime toIndexingDateTime(String referenceDate) throws ParseException {
+		return DateTime.parse(referenceDate, REFERENCE_DATE_FORMAT);
+	}
+
+	public static DateTime toIndexingDateTime(DateTime referenceDate) {
+		return new DateTime(referenceDate.getYear(), referenceDate.getMonthOfYear(), referenceDate.getDayOfMonth(), 0, 0);
+	}
+	
+	/**
+	 *  @param currencyUnit
+	 *  @return return CurrencyUnit instance for the parameter given
+	 */
+	public static CurrencyUnit of(CurrencyUnit currencyUnit) {
+		return currencyUnit;
+	}
+
+	/**
+	 *  @param currency
+	 *  @return return CurrencyUnit instance for the parameter given
+	 */
+	public static CurrencyUnit of(Currency currency) {
+		return CurrencyUnit.of(currency);
+	}
+
+	/**
+	 *  @param currencyIso4217 as defined in ISO-4217
+	 *  @return return CurrencyUnit instance for the parameter given
+	 */
+	public static CurrencyUnit of(String currencyIso4217) {
+		return CurrencyUnit.of(currencyIso4217);
+	}
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entityhelper/DataType.xtend b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entityhelper/DataType.xtend
new file mode 100644
index 0000000..37257c6
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entityhelper/DataType.xtend
@@ -0,0 +1,176 @@
+/**
+ *                                                                            
+ * 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 
+ * 
+ * 
+ *  This copyright notice shows up in the generated Java code
+ *
+ */
+ 
+package org.eclipse.osbp.utils.entityhelper
+
+import com.google.inject.Inject
+import java.util.Date
+import org.eclipse.emf.ecore.resource.ResourceSet
+import org.eclipse.osbp.dsl.semantic.common.types.LDataType
+import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute
+import org.eclipse.osbp.ecview.dsl.extensions.TypeHelper
+import org.eclipse.xtext.common.types.JvmEnumerationType
+import org.eclipse.xtext.common.types.JvmType
+import org.eclipse.xtext.common.types.access.IJvmTypeProvider
+import org.eclipse.osbp.ui.api.datamart.IDataMart.EType
+
+public class DataType {
+        
+  	@Inject
+  	@Extension
+  	private TypeHelper typeHelper;
+  	
+  	@Inject
+  	IJvmTypeProvider.Factory typeProviderFactory
+  
+    def public LDataType getLDataType(LEntityAttribute attributeRef) {
+        var type = attributeRef.type
+        var lDataType = null as LDataType
+        if  (type instanceof LDataType) {
+            lDataType = type as LDataType
+        }
+        return lDataType
+    }
+    
+   def public JvmType getJvmType(LEntityAttribute attributeRef) {
+		var type = attributeRef.type
+		var lDataType = null as LDataType
+		var ltype = null as JvmType
+		if (type instanceof LDataType) {
+			lDataType = type as LDataType
+			if (lDataType.isDate) {
+				val typeProvider = getTypeProvider(attributeRef.eResource.resourceSet)
+				return typeProvider.findTypeByName(Date.name)
+			} else if (lDataType.isAsBlob) {
+				val typeProvider = getTypeProvider(attributeRef.eResource.resourceSet)
+				return typeProvider.findTypeByName("byte[]")
+			} else {
+				var jvmTypeReference = lDataType.jvmTypeReference
+				ltype = jvmTypeReference.type
+				if (ltype != null) {
+					return ltype;
+				}
+			}
+		}
+		var typeJvm = attributeRef.typeJvm
+		var typeJvmType = typeJvm.type
+		return typeJvmType
+	}
+
+	def getTypeProvider(ResourceSet rs) {
+		typeProviderFactory.findOrCreateTypeProvider(rs)
+	}
+
+    def public EType getBasicType(String typeIdentifier) {
+    	if (typeIdentifier != null){
+	        var identifier = typeIdentifier
+	        if  (typeIdentifier.startsWith("java.lang.")) {
+	            identifier = typeIdentifier.substring("java.lang.".length).toLowerCase
+	        }
+	        switch (identifier) {
+	            /**
+	             * Date, String, int, boolean, Time 
+	             */
+	            case "boolean": return EType.BOOLEAN
+	            case "byte": return EType.BYTE
+	            case "short": return EType.SHORT
+	            case "int": return EType.INTEGER
+	            case "integer": return EType.INTEGER
+	            case "long": return EType.LONG
+	            case "double": return EType.DOUBLE
+	            case "float": return EType.FLOAT
+	            case "BigDecimal": return EType.DOUBLE
+	            case "java.math.BigDecimal": return EType.DOUBLE
+	            case "string": return EType.STRING
+	            case "java.util.Date": return EType.DATE
+	        }
+        }
+        return EType.none
+    }
+
+
+    def public EType getBasicType(JvmType type) {
+    	if	(type.boolean) {
+    		return EType.BOOLEAN
+		}
+		else if (type.numberWithDigits) {
+			val retcode = getBasicType(type.identifier)
+			if	(retcode != EType.none) {
+				return retcode
+			}
+			return EType.DOUBLE
+		}
+		else if (type.numberWithoutDigits) {
+			val retcode = getBasicType(type.identifier)
+			if	(retcode != EType.none) {
+				return retcode
+			}
+			return EType.INTEGER
+		}
+		else if (type.string) {
+			return EType.STRING
+		}
+		else if (type.date) {
+			return EType.DATE
+    	}
+    	else if (type instanceof JvmEnumerationType) {
+    		return EType.LENUM;
+    	}
+        return getBasicType(type.identifier)
+    }
+
+    def public EType getBasicType(LEntityAttribute attribute) {
+    	var lDataType = getLDataType(attribute)
+    	if	(lDataType != null) {
+	    	if	(lDataType.date) {
+    			return EType.DATE
+    		}
+    		if	("blobMapping".equals(lDataType.name)) {
+    			return EType.BLOPMAPPING
+    		}
+    	}
+        return getBasicType(getJvmType(attribute))
+    }
+
+    def public EType getBasicType(Class<?> typeClass) {
+        return getBasicType(typeClass.canonicalName)
+    }
+
+    def public boolean canBeCastFrom(LEntityAttribute targetAttribute, Class<?> sourceClass) {
+        return canBeCastFrom(targetAttribute, getBasicType(sourceClass))
+    }
+
+    def public boolean canBeCastFrom(LEntityAttribute targetAttribute, EType sourceType) {
+        var targetType = getBasicType(targetAttribute)
+        
+        switch (targetType) {
+            case BOOLEAN: return (sourceType == EType.BOOLEAN)
+            case BYTE: return (sourceType == EType.BYTE)
+            case DATE: return (sourceType == EType.DATE)
+            case FLOAT: return (sourceType == EType.FLOAT || sourceType == EType.LONG || sourceType == EType.INTEGER || sourceType == EType.SHORT || sourceType == EType.BOOLEAN)
+            case DOUBLE: return (sourceType == EType.FLOAT || sourceType == EType.DOUBLE || sourceType == EType.LONG || sourceType == EType.INTEGER || sourceType == EType.SHORT || sourceType == EType.BOOLEAN)
+            case SHORT: return (sourceType == EType.SHORT || sourceType == EType.BOOLEAN)
+            case INTEGER: return (sourceType == EType.INTEGER || sourceType == EType.SHORT || sourceType == EType.BOOLEAN)
+            case LONG: return (sourceType == EType.LONG || sourceType == EType.INTEGER || sourceType == EType.SHORT || sourceType == EType.BOOLEAN)
+            case STRING: return true
+            case TIME: return (sourceType == EType.TIME)
+            case LENUM: return (sourceType == EType.INTEGER || sourceType == EType.BOOLEAN)
+            case none: return false
+        }
+        return false
+    }
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/ABaseMockEntity.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/ABaseMockEntity.java
new file mode 100644
index 0000000..eb8e0a5
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/ABaseMockEntity.java
@@ -0,0 +1,175 @@
+/**
+ *                                                                            
+ * 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.utils.entitymock;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.dsl.dto.lib.impl.DtoServiceAccess;
+import org.eclipse.osbp.dsl.dto.lib.services.IDTOService;
+import org.eclipse.osbp.dsl.dto.lib.services.Query;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class ABaseMockEntity<E> extends ABaseMockObject {
+	
+	private final static Logger log = LoggerFactory.getLogger(ABaseMockEntity.class);
+
+	protected static boolean asBoolean(Object value) {
+		return (value instanceof Boolean) ? (Boolean)value : (value == null) ? false : Boolean.parseBoolean(value.toString());
+	}
+	
+	protected static Date asDate(Object value) {
+		return (value instanceof Date) ? (Date)value : null;
+	}
+	
+	protected static double asDouble(Object value) {
+		if	(value instanceof Double) {
+			return (Double)value;
+		}
+		else if (value instanceof Float) {
+			return (Float)value;
+		}
+		else if (value == null) {
+			return 0.0;
+		}
+		return Double.parseDouble(value.toString());
+	}
+	
+	protected static float asFloat(Object value) {
+		if	(value instanceof Float) {
+			return (Float)value;
+		}
+		else if (value == null) {
+			return (float)0.0;
+		}
+		return Float.parseFloat(value.toString());
+	}
+	
+	protected static long asLong(Object value) {
+		if	(value instanceof Long) {
+			return (Long)value;
+		}
+		else if	(value instanceof Integer) {
+			return (Integer)value;
+		}
+		else if	(value instanceof Short) {
+			return (Short)value;
+		}
+		else if (value == null) {
+			return 0;
+		}
+		return Long.parseLong(value.toString());
+	}
+	
+	protected static int asInt(Object value) {
+		if	(value instanceof Integer) {
+			return (Integer)value;
+		}
+		else if	(value instanceof Short) {
+			return (Short)value;
+		}
+		else if (value == null) {
+			return 0;
+		}
+		return Integer.parseInt(value.toString());
+	}
+	
+	protected static short asShort(Object value) {
+		if	(value instanceof Short) {
+			return (Short)value;
+		}
+		else if (value == null) {
+			return 0;
+		}
+		return Short.parseShort(value.toString());
+	}
+	
+//	protected static Time asTime(Object value) {
+//		return (value instanceof Date) ? (Date)value : null;
+//	}
+	
+	protected static String asString(Object value) {
+		return (value == null) ? null : value.toString();
+	}
+	
+	protected final AEntityMockDataGenerator mockDataGenerator;
+	protected final String persistenceUnit;
+	
+	protected E entity;
+	
+	public ABaseMockEntity(AEntityMockDataGenerator mockDataGenerator, String persistenceUnit) {
+		this.mockDataGenerator = mockDataGenerator;
+		this.persistenceUnit = persistenceUnit;
+	}
+	
+	public final String getPersistenceUnit() {
+		return persistenceUnit;
+	}
+	
+	public abstract E generateEntity(Object iteratorItem);
+	
+	protected final void generateAttribute(String key, Class<IDto> dtoClass, double optionalFor) {
+		String mockEntityName = "Existing"+dtoClass.getSimpleName();
+		if	(mockDataGenerator.getMockObjects(mockEntityName) == null) {
+			List<Object> existingDtos = new ArrayList<>();
+			try {
+				IDTOService dtoService = (IDTOService) DtoServiceAccess.getService(dtoClass);
+				if (dtoService == null) {
+					log.error("NO DTO SERVICE FOUND for "
+							+ dtoClass.getCanonicalName()
+							+ " in persistence " + persistenceUnit);
+				}
+				else {
+					Query queryAll = new Query();
+					Collection<?> dtoObjects = dtoService.find(queryAll);
+					for (Object dtoObject : dtoObjects) {
+						existingDtos.add(dtoObject);
+					}
+				}
+			}
+			catch (Exception e) {
+				log.error("could not retrieve existing entities via dto service for "+dtoClass.getCanonicalName(), e);
+			}
+			mockDataGenerator.addMockObjects(mockEntityName, existingDtos);
+		}
+		generateAttribute(key, mockEntityName, optionalFor);
+	}
+	
+	protected final void generateAttribute(String key, String mockEntityName, double optionalFor) {
+		Object[] mockObjects = mockDataGenerator.getMockObjects(mockEntityName).toArray();
+		// --- no objects are available ---
+		if	(mockObjects.length < 1) {
+		    mockData.put(key, null);
+		}
+		// --- if at least 100% have to be optional, EVERYTHING is optional ---
+		else if	(optionalFor >= 1.0) {
+		    mockData.put(key, null);                                
+		}
+		// --- if up to 0% have to be optional, EVERYTHING is mandatory ---
+		else if (optionalFor <= 0.0) {
+		    mockData.put(key, mockObjects[fillerProvider.unsignedinteger(mockObjects.length-1)]);                                
+		}
+		// --- if a random is lower than the given optionalFor, this item is optional ---
+		else if (fillerProvider.unsigneddouble(0) < optionalFor*100.0) {
+		    mockData.put(key, null);                                
+		}
+		// --- otherwise
+		else {
+			mockData.put(key, mockObjects[fillerProvider.unsignedinteger(mockObjects.length-1)]);
+		}
+	}
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/ABaseMockObject.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/ABaseMockObject.java
new file mode 100644
index 0000000..1ae0919
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/ABaseMockObject.java
@@ -0,0 +1,211 @@
+/**
+ *                                                                            
+ * 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.utils.entitymock;
+
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.StringUtils;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+
+import org.eclipse.osbp.utils.fillertext.FillerTextProvider;
+
+public abstract class ABaseMockObject {
+	
+	protected final FillerTextProvider fillerProvider;
+	protected Map<String,Object> mockData;
+	
+	public ABaseMockObject() {
+		FillerTextProvider fillerProvider;
+		try {
+			fillerProvider = FillerTextProvider.get(Locale.getDefault());
+		}
+		catch (Exception e) {
+			fillerProvider = null;
+			e.printStackTrace();
+		}
+		this.fillerProvider = fillerProvider;
+	}
+	
+	public final Object getAttribute(String... keys) {
+		return mockData.get(StringUtils.join(keys, "."));
+	}
+	
+	public final Object getAttribute(String key, AEntityMockDataGenerator mockDataGenerator, String peristenceUnit) {
+		Object mockValue = mockData.get(key);
+		if	((mockValue == null) && (mockDataGenerator instanceof AEntityMockDataGenerator)) {
+			String[] keys = key.split("\\.", 2);
+			if	(keys.length == 2) {
+				mockValue = mockData.get(keys[0]);
+				if	(mockValue instanceof IDto) {
+					mockValue = mockDataGenerator.getDtoAttribute((IDto)mockValue, keys[1]); 
+				}
+				else {
+					mockValue = null;
+				}
+			}
+		}
+		return mockValue;
+	}
+	
+	public final Set<String> getAttributeNames() {
+		return mockData.keySet();
+	}
+	
+	public final ABaseMockObject generateData() {
+		fillerProvider.reset();
+		try {
+			generateDataRow();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		replaceDigits();
+		replaceVariables();
+		return this;
+	}
+	
+	protected final void replaceDigits() {
+		for (String key : mockData.keySet()) {
+			Object value = mockData.get(key);
+			if	(value instanceof String) {
+				if	(((String)value).contains("#")) {
+					try {
+						mockData.put(key, fillerProvider.numerify((String)value));
+					}
+					catch (Exception e) {
+						e.printStackTrace();
+					}
+				}
+			}
+		}
+	}
+	
+	protected final void replaceVariables() {
+		Pattern possibleVariable = Pattern.compile("(\\[.*\\])");
+		boolean again = false;
+		do {
+			again = false;
+			for (String key : mockData.keySet()) {
+				Object value = mockData.get(key);
+				if	(value instanceof String) {
+					boolean replaced = false;
+					String text = (String) value;
+					try {
+						Matcher m = possibleVariable.matcher(text);
+						while (m.find()) {
+							String replace = m.group();
+							String with = replace.substring(1, replace.length()-2);
+							if	(mockData.containsKey(with)) {
+								with = mockData.get(with).toString();
+								text = text.replaceAll(replace, with);
+								replaced = true;
+							}
+						}
+					}
+					catch (Exception e) {
+						e.printStackTrace();
+					}
+					if	(replaced) {
+						mockData.put(key, text);
+						again = true;
+					}
+				}
+			}
+		} while (again);
+	}
+	
+	protected abstract void generateDataRow();
+
+	protected final void reset() {
+		mockData = new TreeMap<String,Object>();
+	}
+	
+	protected final void setFixAttribute(String key, Object value) {
+		mockData.put(key, value);
+	}
+	
+	protected final void generateAttribute(String key, String sourceKey) {
+		mockData.put(key, mockData.get(sourceKey));
+	}
+	
+	protected final void generateAttribute(String key, Object[] values) {
+	    mockData.put(key, values[fillerProvider.unsignedinteger(values.length-1)]);                                
+	}
+    
+    protected final void generateAttribute(String key, String whenKey, Map valuesMap) {
+        Object[] values = (Object[]) valuesMap.get(mockData.get(whenKey));
+        if	((values == null) || values.length == 0) {
+            mockData.put(key, null);
+        }
+        else {
+            mockData.put(key, values[fillerProvider.unsignedinteger(values.length-1)]);
+        }
+    }
+	
+	protected final void generateAttribute(String key, double[] values) {
+	    mockData.put(key, values[fillerProvider.unsignedinteger(values.length-1)]);                                
+	}
+
+	protected final void generateSignedAttribute(String key, int decimals, double beginRange, double endRange, double rounded) {
+		mockData.put(key, fillerProvider.signeddouble(decimals, beginRange, endRange, rounded));
+	}
+
+	protected final void generateUnsignedAttribute(String key, int decimals, double beginRange, double endRange, double rounded) {
+		mockData.put(key, fillerProvider.signeddouble(decimals, beginRange, endRange, rounded));
+	}
+	
+	protected final void generateAttribute(String key, int[] values) {
+	    mockData.put(key, values[fillerProvider.unsignedinteger(values.length-1)]);                                
+	}
+
+	protected final void generateSignedAttribute(String key, int beginRange, int endRange, double rounded) {
+		mockData.put(key, fillerProvider.signedinteger(beginRange, endRange, rounded));
+	}
+
+	protected final void generateUnsignedAttribute(String key, int beginRange, int endRange, double rounded) {
+		mockData.put(key, fillerProvider.signedinteger(beginRange, endRange, rounded));
+	}
+
+	protected final void generateAttribute(String key, ABaseMockObject subObject) {
+		subObject.reset();
+		subObject.generateData();
+		for (String subkey : subObject.mockData.keySet()) {
+			mockData.put(key+"."+subkey, subObject.mockData.get(subkey));
+		}
+	}
+	
+	protected final void generateBooleanAttribute(String key) {
+        mockData.put(key, fillerProvider.trueOrFalse());
+	}
+	
+	protected final void generateDateAttribute(String key, int pastYears, int futureYears) {
+        mockData.put(key, fillerProvider.date(pastYears, futureYears));
+	}
+	
+	protected final void generateParagraphsAttribute(String key, int count) {
+        mockData.put(key, fillerProvider.paragraphs(count));
+	}
+	
+	protected final void generateSentencesAttribute(String key, int count) {
+        mockData.put(key, fillerProvider.sentences(count));
+	}
+	
+	protected final void generateWordsAttribute(String key, int count) {
+        mockData.put(key, fillerProvider.words(count));
+	}
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/ABaseMockResource.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/ABaseMockResource.java
new file mode 100644
index 0000000..97e3154
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/ABaseMockResource.java
@@ -0,0 +1,65 @@
+/**
+ *                                                                            
+ * 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.utils.entitymock;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+public abstract class ABaseMockResource extends ABaseMockObject {
+	
+	protected Set<String> mockDataRows;
+	protected List<String> mockAttributes;
+	
+	public ABaseMockResource() {
+		mockDataRows = new HashSet<String>();
+		mockAttributes = new ArrayList<String>();
+		mockData = new HashMap<String, Object>();
+	}
+
+	public void setAttributes(String... attributes) {
+		mockAttributes.clear();
+		for	(String attribute : attributes) {
+			mockAttributes.add(attribute);
+		}
+	}
+
+	public void addDataRow(String key, String... datarow) {
+		mockDataRows.add(key);
+		for	(int i=0; i<mockAttributes.size(); i++) {
+			if	(i<datarow.length) {
+				mockData.put(key+"."+mockAttributes.get(i), datarow[i]);
+			}
+			else {
+				mockData.put(key+"."+mockAttributes.get(i), "");
+			}
+		}
+	}
+	
+	public Set<String> getDataRows() {
+		return new HashSet<>(mockDataRows);
+	}
+
+	public Set<String> getAttributes() {
+		return new HashSet<>(mockAttributes);
+	}
+	
+	public final Object getAttribute(String dataRow, String attribute) {
+		return mockData.get(dataRow+"."+attribute);
+	}
+
+	protected void generateDataRow() {
+	}
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/AEntityMockDataGenerator.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/AEntityMockDataGenerator.java
new file mode 100644
index 0000000..db08e26
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/AEntityMockDataGenerator.java
@@ -0,0 +1,107 @@
+/**
+ *                                                                            
+ * 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.utils.entitymock;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+
+public abstract class AEntityMockDataGenerator extends ABaseMockObject implements IEntityMockDataGenerator {
+
+	@Override
+	public int compareTo(IEntityMockDataGenerator o) {
+		if	(getRunWithPriority() != o.getRunWithPriority()) {
+			return (new Integer(getRunWithPriority())).compareTo((new Integer(o.getRunWithPriority())));
+		}
+		else {
+			return getClass().getCanonicalName().compareTo(o.getClass().getCanonicalName());
+		}
+	}
+
+	protected Map<MockedEntityDto,List<Object>> mockDataClassMap;
+	protected Map<String,List<Object>> mockDataNamedMap;
+	protected Map<IDto,Map<String,Object>> dtoMockDataMap;
+
+	@Override
+	public int getRunWithPriority() {
+		return DEFAULT_PRIORITY;
+	}
+	
+	protected void initialize() {
+		mockDataClassMap = new LinkedHashMap<MockedEntityDto,List<Object>>();
+		mockDataNamedMap = new LinkedHashMap<String,List<Object>>();
+		dtoMockDataMap   = new LinkedHashMap<IDto,Map<String,Object>>();
+	}
+
+	public void addDtoMockData(IDto dto, Map<String,Object> mockData) {
+		dtoMockDataMap.put(dto, mockData);
+	}
+	
+	public Object getDtoAttribute(IDto dto, String key) {
+		Object value = null;
+		Map<String,Object> mockData = dtoMockDataMap.get(dto);
+		if	(mockData != null) {
+			value = mockData.get(key);
+		}
+		return value;
+	}
+	
+	protected final String getClassMapIndex(Class<?> forClass, String persistenceUnit) {
+		return forClass.getCanonicalName()+"@"+persistenceUnit;
+	}
+	
+	protected List<Object> getMockObjects(Class<?> forClass, String persistenceUnit) {
+		for	(MockedEntityDto key : mockDataClassMap.keySet()) {
+			if	(key.equals(forClass, persistenceUnit)) {
+				return mockDataClassMap.get(key);
+			}
+		}
+		return null;
+	}
+	
+	protected List<Object> getMockObjects(String mockEntityName) {
+		return mockDataNamedMap.get(mockEntityName);
+	}
+	
+	protected void addMockObjects(String mockEntityName, List<Object> objects) {
+		mockDataNamedMap.put(mockEntityName, objects);
+	}
+	
+	protected void addMockObjects(String mockEntityName, Class<?> forClass, String persistenceUnit, List<Object> addList) {
+		List<Object> targetList;
+		targetList = getMockObjects(forClass, persistenceUnit);
+		if	(targetList == null) {
+			targetList = new ArrayList<>(addList);
+			mockDataClassMap.put(new MockedEntityDto(forClass, persistenceUnit), targetList);
+		}
+		else {
+			targetList.addAll(addList);
+		}
+		targetList = getMockObjects(mockEntityName);
+		if	(targetList == null) {
+			targetList = new ArrayList<>(addList);
+			mockDataNamedMap.put(mockEntityName, targetList);
+		}
+		else {
+			targetList.addAll(addList);
+		}
+	}
+	
+	@Deprecated
+	protected final void generateDataRow() {
+	}
+
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/IEntityImportInitializationListener.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/IEntityImportInitializationListener.java
new file mode 100644
index 0000000..2e9f0bf
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/IEntityImportInitializationListener.java
@@ -0,0 +1,37 @@
+/**
+ *                                                                            
+ * 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.utils.entitymock;
+
+/**
+ * Interface, that each Entity import initialization provider should call regularly,
+ * that may be called on startup via the entity mock generator.
+ * <br>
+ * 
+ */
+public interface IEntityImportInitializationListener {
+	/**
+	 * Notify initialization step.
+	 *
+	 * @param stepTitle the step title
+	 * @param addSteps the add steps
+	 * @param progressOfStep the initial progress of step
+	 * @param count count of actual - sub - step
+	 * @param total total count of actual - sub - step
+	 */
+	public void notifyInitializationStep(String stepTitle, double progressOfStep, double sizeOfSubProgress, int count, int total);
+	
+	/**
+	 * @return the size of count, after which a new notification should be sent
+	 */
+	public int getInitializationSubStepNotifySize();
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/IEntityMockDataDbFiller.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/IEntityMockDataDbFiller.java
new file mode 100644
index 0000000..da70641
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/IEntityMockDataDbFiller.java
@@ -0,0 +1,42 @@
+/**
+ *                                                                            
+ * 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.utils.entitymock;
+
+
+/**
+ * Interface, that each Entity Mock Data DB Filler has to implement
+ */
+public interface IEntityMockDataDbFiller extends IEntityImportInitializationListener {
+
+	/**
+	 * Set a filter for Entity Mock Data Generators to be used.<br>
+	 * comma separated and full canonical class names<br>
+	 * Empty, null => no Entity Mock Data Generator is allowed
+	 * "*" => every Entity Mock Data Generator is allowed
+	 */
+	public void setMockDataGeneratorFilter(String filter);
+	
+	/**
+	 * Trigger filling of the DB with Entity Mock data
+	 */
+	public void triggerDbFill();
+	
+	/**
+	 * Notify initialization step.
+	 *
+	 * @param stepTitle the step title
+	 * @param addSteps the add steps
+	 * @param progressOfStep the progress of step
+	 */
+	public void notifyInitializationStep(String stepTitle, int addSteps, double progressOfStep);
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/IEntityMockDataGenerator.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/IEntityMockDataGenerator.java
new file mode 100644
index 0000000..1820209
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/IEntityMockDataGenerator.java
@@ -0,0 +1,59 @@
+/**
+ *                                                                            
+ * 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.utils.entitymock;
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.osbp.persistence.IPersistenceService;
+
+/**
+ * Interface, that each Entity (DTO) Mock Generator has to implement
+ */
+public interface IEntityMockDataGenerator extends Comparable<IEntityMockDataGenerator> {
+
+	final static int DEFAULT_PRIORITY = 10;
+	
+	/**
+	 * The priority can be set in the entitymock model from 1 (highest) to 9 (almost lowest).<br>
+	 * If is not explicit set, it's default value is 10 (lowest).
+	 * @return the priority, this generator should run, compared to other generators
+	 */
+	public int getRunWithPriority();
+	
+	/**
+	 * Run any datainterchanges references by the mock generator
+	 * @param persistenceService 
+	 */
+	public void runDataInterchanges(IPersistenceService persistenceService, IEntityMockDataDbFiller entityMockDbFiller);
+
+	/**
+	 * Generate entity DTO mock data objects, depending on the base .entitymock DSL instance.<br>
+	 * The map key holds a MockedEntityDto instance, which holds both the entity DTO class - for example <code>org.eclipse.osbp.foodmart.dtos.McustomerDto.class</code> -  and the target persistence unit.<br>
+	 * The map value is a list with generated entity DTO objects, in the example above instances of <code>org.eclipse.osbp.foodmart.dtos.McustomerDto</code>
+	 * @return the map and list of generated entity DTO objects
+	 */
+	public Map<MockedEntityDto,List<Object>> getMockData(IEntityMockDataDbFiller entityMockDbFiller);
+
+	/**
+	 * Gets the number of data interchange steps.
+	 * @return the data interchange steps
+	 */
+	public int getDataInterchangeSteps();
+
+	/**
+	 * Gets the number of entity mock steps.
+	 * @return the entity mock steps
+	 */
+	public int getEntityMockSteps();
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/Iterators.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/Iterators.java
new file mode 100644
index 0000000..f951c4a
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/Iterators.java
@@ -0,0 +1,147 @@
+/**
+ *                                                                            
+ * 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.utils.entitymock;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+public class Iterators {
+	
+	public static class IntegerIterator extends Iterators implements Iterator<Integer> {
+	    private final int until;
+	    private final int step;
+	    private int position;
+
+	    public IntegerIterator(int from, int until) {
+	    	this(from, until, 1);
+	    }
+
+	    public IntegerIterator(int from, int until, int step) {
+	    	if	(until < from) {
+	    		int swap = until;
+	    		until = from;
+	    		from = swap;
+	    	}
+	    	if	(step < 1) {
+	    		step = 1;
+	    	}
+	        this.until = until;
+	        this.step = step;
+	        position = from-step;
+	    }
+
+	    @Override
+	    public boolean hasNext() {
+	        return position < until;
+	    }
+
+	    @Override
+	    public Integer next() {
+	    	if	(!hasNext()) {
+	            throw new NoSuchElementException();
+	        }
+	        position += step;
+	        return position;
+	    }
+	}
+	
+	public static class DateIterator extends Iterators implements Iterator<Date> {
+	    private final Calendar until;
+	    private final int stepCount;
+	    private final int stepType;
+	    private Calendar position;
+
+	    private static Date toDate(String text) {
+	    	text = text.toLowerCase();
+	    	Calendar date = Calendar.getInstance(); 
+	    	if	(text.equals("yesterday")) {
+	    		date.add(Calendar.DAY_OF_YEAR, -1);
+	    	}
+	    	else if	(text.equals("today")) {
+	    	}
+	    	else if	(text.equals("tomorrow")) {
+	    		date.add(Calendar.DAY_OF_YEAR, 1);
+	    	}
+	    	else {
+	    		String[] tokens = text.split("-");
+		    	try {
+		    		if	(tokens.length == 3) {
+		    			date.set(
+	    					Integer.parseInt(tokens[0]),
+	    					Integer.parseInt(tokens[1])-1,
+	    					Integer.parseInt(tokens[2]));
+		    		}
+		    	}
+		    	catch (Exception e) {
+		    		System.err.println(e.getLocalizedMessage());
+		    	}
+	    	}
+	    	return date.getTime();
+	    }
+
+	    private static int toStepType(String text) {
+	    	switch (text.toLowerCase().charAt(0)) {
+	    		case 'y': return Calendar.YEAR;
+	    		case 'm': return Calendar.MONTH;
+	    		case 'w': return Calendar.WEEK_OF_YEAR;
+	    	}
+	    	return Calendar.DAY_OF_YEAR;
+	    }
+	    
+	    public DateIterator(String from, String until) {
+	    	this(toDate(from), toDate(until), 1, Calendar.DAY_OF_YEAR);
+	    }
+
+	    public DateIterator(Date from, Date until) {
+	    	this(from, until, 1, Calendar.DAY_OF_YEAR);
+	    }
+
+	    public DateIterator(String from, String until, int stepCount, String stepType) {
+	    	this(toDate(from), toDate(until), 1, toStepType(stepType));
+	    }
+
+	    public DateIterator(Date from, Date until, int stepCount, int stepType) {
+	    	if	(until.before(from)) {
+	    		Date swap = until;
+	    		until = from;
+	    		from = swap;
+	    	}
+	    	if	(stepCount < 1) {
+	    		stepCount = 1;
+	    	}
+	        this.until = Calendar.getInstance();
+	        this.until.setTime(until);
+	        this.stepCount = stepCount;
+	        this.stepType = stepType;
+	        position = Calendar.getInstance();
+	        position.setTime(from);
+	        position.add(stepType, -stepCount);
+	    }
+
+	    @Override
+	    public boolean hasNext() {
+	        return position.before(until);
+	    }
+
+	    @Override
+	    public Date next() {
+	    	if	(!hasNext()) {
+	            throw new NoSuchElementException();
+	        }
+	        position.add(stepType, stepCount);
+	        return position.getTime();
+	    }
+	}
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/MockedEntityDto.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/MockedEntityDto.java
new file mode 100644
index 0000000..8c36cce
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/entitymock/MockedEntityDto.java
@@ -0,0 +1,40 @@
+/**
+ *                                                                            
+ * 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.utils.entitymock;
+
+public class MockedEntityDto {
+
+	private final Class<?> entityDtoClass;
+	private final String persistenceUnit;
+
+	public static final String getClassMapIndex(Class<?> forClass, String persistenceUnit) {
+		return forClass.getCanonicalName()+"@"+persistenceUnit;
+	}
+	
+	public MockedEntityDto(Class<?> entityDtoClass, String persistenceUnit) {
+		this.entityDtoClass = entityDtoClass;
+		this.persistenceUnit = persistenceUnit;
+	}
+
+	public Class<?> getEntityDtoClass() {
+		return entityDtoClass;
+	}
+
+	public String getPersistenceUnit() {
+		return persistenceUnit;
+	}
+	
+	public boolean equals(Class<?> forClass, String persistenceUnit) {
+		return getClassMapIndex(forClass, persistenceUnit).equals(getClassMapIndex(this.entityDtoClass, this.persistenceUnit));
+	}
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/fillertext/FillerTextProvider.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/fillertext/FillerTextProvider.java
new file mode 100644
index 0000000..091180e
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/fillertext/FillerTextProvider.java
@@ -0,0 +1,686 @@
+/**
+ *                                                                            
+ * 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.utils.fillertext;
+
+import java.sql.Date;
+import java.sql.Time;
+import java.util.HashMap;
+import java.util.Locale;
+
+import org.eclipse.osbp.utils.fillertext.provider.BaseProvider;
+import org.eclipse.osbp.utils.fillertext.provider.DateProvider;
+import org.eclipse.osbp.utils.fillertext.provider.TextProvider;
+import org.joda.time.DateTime;
+
+/**
+ * Provides filler texts (german: Blindtext) for different data types,
+ * depending on the locale set.
+ * <br><br>
+ * <b><u><i>Filler text</i> vs. <i>Mock object</i></u></b><br>
+ * There is an essential difference between <i>Filler text</i> and <i>Mock object</i>!
+ * <ul>
+ * <li><b><a href="https://en.wikipedia.org/wiki/Filler_text">Filler text</a> (german: <a href="https://de.wikipedia.org/wiki/Blindtext">Blindtext</a>)</b><br>
+ * [...] (also placeholder text or dummy text) is text that shares some characteristics of a real written text, but <b>is random or otherwise generated</b>. It may be used to display a sample of fonts, generate text for testing, or to spoof an e-mail spam filter. The process of using filler text is sometimes called Greeking, although <b>the text itself may be nonsense</b>, or largely Latin, as in Lorem ipsum.[...]<br>
+ * [...] Mit Hilfe des Blindtextes kann die Verteilung des Textes auf der Seite (Layout oder Satzspiegel) sowie Lesbarkeit und Platzbedarf der verwendeten Schriftarten (Typografie) beurteilt werden. Er <b>besteht aus einer mehr oder minder sinnlosen Folge von Wörtern, oft auch nur aus wortähnlichen Silbenfolgen</b>. Ein bekanntes Beispiel dafür ist das „lateinische“ Lorem ipsum.[...]
+ * </li>
+ * <li><b><a href="https://en.wikipedia.org/wiki/Mock_object">Mock object</a> (german: <a href="https://de.wikipedia.org/wiki/Mock-Objekt">Mock-Objekt</a>)</b><br>
+ * [...] are <b>simulated objects that mimic the behavior of real objects in controlled ways</b>. A programmer typically creates a mock object to test the behavior of some other object, in much the same way that a car designer uses a crash test dummy to simulate the dynamic behavior of a human in vehicle impacts.[...]<br>
+ * [...] implementieren die Schnittstellen, über die das zu testende Objekt auf seine Umgebung zugreift. Sie <b>stellen sicher, dass die erwarteten Methodenaufrufe vollständig, mit den korrekten Parametern und in der erwarteten Reihenfolge durchgeführt werden</b>. Das Mock-Objekt liefert keine Echtdaten zurück, sondern <b>vorher zum Testfall passend festgelegte Werte</b>. Das Mock-Objekt kann somit dazu verwendet werden, <b>ein bestimmtes Verhalten nachzustellen</b>.[...]
+ * </li>
+ * </ul>
+ */
+public class FillerTextProvider {
+
+	private static HashMap<Locale, FillerTextProvider> sProviders = new HashMap<>();
+	private final BaseProvider fBaseProducer;
+	private final DateProvider fDateProducer;
+	private final TextProvider fTextProducer;
+	private final Locale fLocale;
+	
+	/**
+	 *  Get the provider for the given locale. The provider will be cached!
+	 *  @see #destroy()
+	 *  @param locale
+	 *  @return the provider
+	 */
+	public static FillerTextProvider get(Locale locale) {
+		FillerTextProvider provider = sProviders.get(locale);
+		if	(provider == null) {
+			provider = new FillerTextProvider(locale);
+			sProviders.put(locale, provider);
+		}
+		return provider;
+	}
+	
+	private FillerTextProvider(Locale locale) {
+		fLocale = locale;
+		fBaseProducer = new BaseProvider();
+		fDateProducer = new DateProvider(fBaseProducer);
+		fTextProducer = new TextProvider(fBaseProducer, fLocale);
+	}
+	
+	/**
+	 *  The provider is removed from the cache
+	 *  @see #get(Locale)
+	 */
+	public void destroy() {
+		sProviders.remove(this);
+	}
+	
+	/**
+	 *  The provider uses some internal objects to return consistent filled text,
+	 *  for example first, last, full name and email.<br>
+	 *  To force the provider to generate new internal objects, call {@link #reset()}!<br>
+	 *  This could be necessary, if more than one data row has to be generated.
+	 */
+	public void reset() {
+//		fPerson = null;
+	}
+	
+	/**
+	 *  generate a filled text for the given {@link javax.sql.Types}
+	 *  @see #generate(FillerTextType, Object...) 
+	 *  @param type any supported java.sql.Types
+	 *  @param params
+	 *  @return the generated filler text object
+	 */
+	public Object generate(int type, Object...params) {
+		return generate(FillerTextType.typeFor(type), params);
+	}
+	
+	/**
+	 *  generate a filled text for the given type string
+	 *  @see #generate(FillerTextType, Object...) 
+	 *  @param type string, can be any <u>case insensitive</u> name of {@link FillerTextType}
+	 *  @param params
+	 *  @return the generated filler text object
+	 */
+	public Object generate(String type, Object...params) {
+		return generate(FillerTextType.typeFor(type), params);
+	}
+
+	/**
+	 *  generate a filled text for the given {@link FillerTextType}
+	 *  @param type
+	 *  @param params, see source code and the corresponding methods for supported paramaters
+	 *  @return the generated filler text object
+	 */
+	public Object generate(FillerTextType type, Object...params) {
+		if	((params.length == 1) && (params[0] instanceof Object[])) {
+			params = (Object[]) params[0];
+		}
+		switch(type) {
+			case TIMESTAMP:
+				return timestamp(params);
+			case DATE:
+				return date(params);
+			case TIME:
+				return time();
+			case SIGNEDINTEGER:
+				return signedinteger(params);
+			case UNSIGNEDINTEGER:
+				return unsignedinteger(params);
+			case SIGNEDDOUBLE:
+			case SIGNEDDECIMAL:
+				return signeddouble(params);
+			case UNSIGNEDDOUBLE:
+			case UNSIGNEDDECIMAL:
+				return unsigneddouble(params);
+			case TRUEORFALSE:
+				return trueOrFalse();
+			case BLOB:
+			case PARAGRAPH: 
+				if	((params.length == 1) && (params[0] instanceof Integer)) {
+					return paragraphs((int) params[0]);
+				}
+				else {
+					return paragraph();
+				}
+			case OTHER:
+			case SENTENCE: 
+				if	((params.length == 1) && (params[0] instanceof Integer)) {
+					return sentences((int) params[0]);
+				}
+				else {
+					return sentence();
+				}
+			case WORD: 
+			case TEXT:
+			default:
+				if	((params.length == 1) && (params[0] instanceof Integer)) {
+					return words((int) params[0]);
+				}
+				else {
+					return word();
+				}
+		}
+	}
+
+	/**
+	 * @see FillerTextType#UNSIGNEDINTEGER
+	 * @param params may be<ul>
+	 * 			<li>none - generate an unsigned (positive) integer in the range 0..100</li>
+	 * 			<li>(int)max - generate an unsigned (positive) integer in the range 0..max; same as {@link #unsignedinteger(int)}</li>
+	 * 			<li>(int)min,(int)max - generate an unsigned (positive) integer in the range min..max; same as {@link #unsignedinteger(int, int)}</li>
+	 * 			<li>(int)min,(int)max,(int)round - generate an unsigned (positive) integer in the range min..max rounding to round; same as {@link #unsignedinteger(int, int, int)}</li>
+	 * </ul>
+	 * @return the generated filler text object
+	 */
+	public int unsignedinteger(Object...params) {
+		if	((params.length == 1) && (params[0] instanceof Object[])) {
+			params = (Object[]) params[0];
+		}
+		int length = 0;
+		while ((params.length > length) && (params[length] instanceof Integer)) {
+			length++;
+		}
+		switch (length) {
+			case 0:
+				return unsignedinteger(100);
+			case 1:
+				return unsignedinteger((int)params[0]);
+			case 2:
+				return unsignedinteger((int)params[0], (int)params[1]);
+			case 3:
+			default:
+				return unsignedinteger((int)params[0], (int)params[1], (int)params[2]);
+		}
+	}
+
+	/**
+	 * @see FillerTextType#UNSIGNEDINTEGER
+	 * @param max - generate an unsigned (positive) integer in the range 0..max
+	 * @return the generated filler text object
+	 */
+	public int unsignedinteger(int max) {
+		return unsignedinteger(0, Math.max(0, max));
+	}
+
+	/**
+	 * generate an unsigned (positive) integer in the range min..max
+	 * @see FillerTextType#UNSIGNEDINTEGER
+	 * @param min
+	 * @param max
+	 * @return the generated filler text object
+	 */
+	public int unsignedinteger(int min, int max) {
+		return unsignedinteger(min, max, 1);
+	}
+
+	/**
+	 * generate an unsigned (positive) integer in the range min..max
+	 * @see FillerTextType#UNSIGNEDINTEGER
+	 * @param min
+	 * @param max
+	 * @param round
+	 * @return the generated filler text object
+	 */
+	public int unsignedinteger(int min, int max, int round) {
+		int result = fBaseProducer.randomBetween(Math.min(min, max), Math.max(min, max));
+		if	(round > 1) {
+			result = ((result + round/2) / round) * round;
+		}
+		return result;
+	}
+
+	/**
+	 * @see FillerTextType#SIGNEDINTEGER
+	 * @param params may be<ul>
+	 * 			<li>none - generate a signed (positive or negative) integer in the range -100..100</li>
+	 * 			<li>(int)max - generate a signed (positive or negative) integer in the range -max..max; same as {@link #signedinteger(int)}</li>
+	 * 			<li>(int)min,(int)max - generate a signed (positive or negative) integer in the range min..max; same as {@link #signedinteger(int, int)}</li>
+	 * 			<li>(int)min,(int)max,(int)round - generate an unsigned (positive) integer in the range min..max rounding to round; same as {@link #signedinteger(int, int, int)}</li>
+	 * </ul>
+	 * @return the generated filler text object
+	 */
+	public int signedinteger(Object...params) {
+		if	((params.length == 1) && (params[0] instanceof Object[])) {
+			params = (Object[]) params[0];
+		}
+		int length = 0;
+		while ((params.length > length) && (params[length] instanceof Integer)) {
+			length++;
+		}
+		switch (length) {
+			case 0:
+				return signedinteger(100);
+			case 1:
+				return signedinteger((int)params[0]);
+			case 2:
+				return signedinteger((int)params[0], (int)params[1]);
+			case 3:
+			default:
+				return signedinteger((int)params[0], (int)params[1], (int)params[2]);
+		}
+	}
+
+	/**
+	 * @see FillerTextType#SIGNEDINTEGER
+	 * @param max - generate a signed (positive or negative) integer in the range -max..max
+	 * @return the generated filler text object
+	 */
+	public int signedinteger(int range) {
+		return signedinteger(-Math.abs(range), Math.abs(range));
+	}
+
+	/**
+	 * generate a signed (positive or negative) integer in the range min..max
+	 * @see FillerTextType#SIGNEDINTEGER
+	 * @param min
+	 * @param max
+	 * @return the generated filler text object
+	 */
+	public int signedinteger(int min, int max) {
+		return signedinteger(min, max, 1);
+	}
+
+	/**
+	 * generate a signed (positive or negative) integer in the range min..max
+	 * @see FillerTextType#SIGNEDINTEGER
+	 * @param min
+	 * @param max
+	 * @param round, must be positive
+	 * @return the generated filler text object
+	 */
+	public int signedinteger(int min, int max, int round) {
+		int result = fBaseProducer.randomBetween(Math.min(min, max), Math.max(min, max));
+		if	(round > 1) {
+			result = ((result + round/2) / round) * round;
+		}
+		return result;
+	}
+
+	/**
+	 * @see FillerTextType#UNSIGNEDDOUBLE
+	 * @param params may be<ul>
+	 * 			<li>none - generate an unsigned (positive) double in the range 0.00..100.00 with two decimal digits</li>
+	 * 			<li>(int)decimals - generate an unsigned (positive) double in the range 0.00..100.00 with (decimal) decimal digits; same as {@link #unsigneddouble(int)}</li>
+	 * 			<li>(int)decimals,(double)max - generate an unsigned (positive) double in the range 0..max with (decimal) decimal digits; same as {@link #unsigneddouble(int,double)}</li>
+	 * 			<li>(int)decimals,(double)min,(double)max - generate an unsigned (positive) double in the range min..max with (decimal) decimal digits; same as {@link #unsigneddouble(int,double,double)}</li>
+	 * 			<li>(int)decimals,(double)min,(double)max,(double)round - generate an unsigned (positive) double in the range min..max with (decimal) decimal digits rounding; same as {@link #unsigneddouble(int,double,double,double)}</li>
+	 * </ul>
+	 * @return the generated filler text object
+	 */
+	public double unsigneddouble(Object...params) {
+		if	((params.length == 1) && (params[0] instanceof Object[])) {
+			params = (Object[]) params[0];
+		}
+		int length = 0;
+		int decimals = 2;
+		if	((params.length > 0) && (params[0] instanceof Integer)) {
+			decimals = (int)params[0];
+			while ((params.length > length+1) && (params[length+1] instanceof Double)) {
+				length++;
+			}
+		}
+		switch (length) {
+			case 0:
+				return unsigneddouble(decimals);
+			case 1:
+				return unsigneddouble(decimals, (double)params[1]);
+			case 2:
+				return unsigneddouble(decimals, (double)params[1], (double)params[2]);
+			case 3:
+			default:
+				return unsigneddouble(decimals, (double)params[1], (double)params[2], (double)params[3]);
+		}
+	}
+	
+	/**
+	 * @see FillerTextType#UNSIGNEDDOUBLE
+	 * @param decimals - generate an unsigned (positive) double in the range 0.00..100.00 with (decimal) decimal digits
+	 * @return the generated filler text object
+	 */
+	public double unsigneddouble(int decimals) {
+		return unsigneddouble(decimals, 100);
+	}
+	
+	/**
+	 * generate an unsigned (positive) double in the range 0..max with (decimal) decimal digits
+	 * @see FillerTextType#UNSIGNEDDOUBLE
+	 * @param decimals
+	 * @param max
+	 * @return the generated filler text object
+	 */
+	public double unsigneddouble(int decimals, double max) {
+		return unsigneddouble(decimals, 0, Math.max(0, max));
+	}
+
+	/**
+	 * generate an unsigned (positive) double in the range min..max with (decimal) decimal digits
+	 * @see FillerTextType#UNSIGNEDDOUBLE
+	 * @param decimals
+	 * @param min
+	 * @param max
+	 * @return the generated filler text object
+	 */
+	public double unsigneddouble(int decimals, double min, double max) {
+		return unsigneddouble(decimals, min, max, 0.0);
+	}
+
+	/**
+	 * generate an unsigned (positive) double in the range min..max with (decimal) decimal digits
+	 * @see FillerTextType#UNSIGNEDDOUBLE
+	 * @param decimals
+	 * @param min
+	 * @param max
+	 * @param round; must be > 0.0
+	 * @return the generated filler text object
+	 */
+	public double unsigneddouble(int decimals, double min, double max, double round) {
+		double factor = Math.pow(10.0, Math.max(0, decimals));
+		double result = fBaseProducer.randomBetween(Math.min(min, max), Math.max(min, max));
+		if	(round > 0.0) {
+			result = Math.round((result + round/2) / round) * round;
+		}
+		return Math.rint (result * factor) / factor;
+	}
+
+	/**
+	 * @see FillerTextType#SIGNEDDOUBLE
+	 * @param params may be<ul>
+	 * 			<li>none - generate a signed (positive or negative) double in the range 0.00..100.00 with two decimal digits</li>
+	 * 			<li>(int)decimals - generate a signed (positive or negative) double in the range 0.00..100.00 with (decimal) decimal digits; same as {@link #signeddouble(int)}</li>
+	 * 			<li>(int)decimals,(double)max - generate  signed (positive or negative) double in the range 0..max with (decimal) decimal digits; same as {@link #signeddouble(int,double)}</li>
+	 * 			<li>(int)decimals,(double)min,(double)max - generate a signed (positive or negative) double in the range min..max with (decimal) decimal digits; same as {@link #signeddouble(int,double,double)}</li>
+	 * 			<li>(int)decimals,(double)min,(double)max,(double)round - generate an signed (positive or negative) double in the range min..max with (decimal) decimal digits rounding; same as {@link #signeddouble(int,double,double,double)}</li>
+	 * </ul>
+	 * @return the generated filler text object
+	 */
+	public double signeddouble(Object...params) {
+		if	((params.length == 1) && (params[0] instanceof Object[])) {
+			params = (Object[]) params[0];
+		}
+		int length = 0;
+		int decimals = 2;
+		if	((params.length > 0) && (params[0] instanceof Integer)) {
+			decimals = (int)params[0];
+			while ((params.length > length+1) && (params[length+1] instanceof Double)) {
+				length++;
+			}
+		}
+		switch (length) {
+			case 0:
+				return signeddouble(decimals);
+			case 1:
+				return signeddouble(decimals, (double)params[1]);
+			case 2:
+				return signeddouble(decimals, (double)params[1], (double)params[2]);
+			case 3:
+			default:
+				return signeddouble(decimals, (double)params[1], (double)params[2], (double)params[3]);
+		}
+	}
+
+	/**
+	 * @see FillerTextType#SIGNEDDOUBLE
+	 * @param decimals - generate a signed (positive or negative) double in the range 0.00..100.00 with (decimal) decimal digits
+	 * @return the generated filler text object
+	 */
+	public double signeddouble(int decimals) {
+		return signeddouble(decimals, 100);
+	}
+
+	/**
+	 * generate  signed (positive or negative) double in the range 0..max with (decimal) decimal digits
+	 * @see FillerTextType#SIGNEDDOUBLE
+	 * @param decimals
+	 * @param max
+	 * @return the generated filler text object
+	 */
+	public double signeddouble(int decimals, double range) {
+		return signeddouble(decimals, -Math.abs(range), Math.abs(range));
+	}
+
+	/**
+	 * generate a signed (positive or negative) double in the range min..max with (decimal) decimal digits
+	 * @see FillerTextType#SIGNEDDOUBLE
+	 * @param decimals
+	 * @param max
+	 * @param min
+	 * @return the generated filler text object
+	 */
+	public double signeddouble(int decimals, double min, double max) {
+		return signeddouble(decimals, min, max, 0.0);
+	}
+
+	/**
+	 * generate a signed (positive or negative) double in the range min..max with (decimal) decimal digits
+	 * @see FillerTextType#SIGNEDDOUBLE
+	 * @param decimals
+	 * @param max
+	 * @param min
+	 * @param round; must be > 0.0
+	 * @return the generated filler text object
+	 */
+	public double signeddouble(int decimals, double min, double max, double round) {
+		double factor = Math.pow(10.0, Math.max(0, decimals));
+		double result = fBaseProducer.randomBetween(Math.min(min, max), Math.max(min, max));
+		if	(round > 0.0) {
+			result = Math.round((result + round/2) / round) * round;
+		}
+		return Math.rint (result * factor) / factor;
+	}
+	
+	/**
+	 *  @see FillerTextType#TRUEORFALSE
+	 *  @return the generated filler text object
+	 */
+	public Boolean trueOrFalse() {
+		return fBaseProducer.trueOrFalse();
+	}
+
+	/**
+	 * @see FillerTextType#TIMESTAMP
+	 * @param params may be<ul>
+	 * 			<li>none - same as {@link #timestamp(int)} with parameter 0</li>
+	 * 			<li>(int)yearsToPastOrInFuture - generate a timestamp with a range of years from now; same as {@link #timestamp(int)}</li>
+	 * 			<li>(int)from,(int)to - generate a timestamp between two years including both years; same as {@link #timestamp(int, int)}</li>
+	 * </ul>
+	 *  @return the generated filler text object
+	 */
+	public DateTime timestamp(Object...params) {
+		if	((params.length == 1) && (params[0] instanceof Object[])) {
+			params = (Object[]) params[0];
+		}
+		int length = 0;
+		while ((params.length > length) && (params[length] instanceof Integer)) {
+			length++;
+		}
+		switch (length) {
+			case 0:
+				return timestamp(0);
+			case 1:
+				return timestamp((int) params[0]);
+			case 2:
+				default:
+				return timestamp((int) params[0], (int) params[1]);
+		}
+	}
+	
+	/**
+	 *  generate a timestamp between two years including both years
+	 *  @see FillerTextType#TIMESTAMP
+	 *  @param from may be<ul>
+	 *  <li>either a year after 1900</li>
+	 *  <li>otherwise it will be interpreted as an offset to the actual year</li>
+	 *  </ul>
+	 *  @param to may be<ul>
+	 *  <li>either a year after 1900</li>
+	 *  <li>otherwise it will be interpreted as an offset to the actual year</li>
+	 *  </ul>
+	 *  @return the generated filler text object
+	 */
+	public DateTime timestamp(int from, int to) {
+		if	(from < 1900) {
+			from += DateTime.now().getYear();
+		}
+		if	(to < 1900) {
+			to += DateTime.now().getYear();
+		}
+		return fDateProducer.randomDateBetweenYears(Math.min(from,  to), Math.max(from, to));
+	}
+
+	/**
+	 *  generate a timestamp with a range of years from now
+	 *  @see FillerTextType#TIMESTAMP
+	 *  @param yearsToPastOrInFuture may be<ul>
+	 *  <li>0, then a timestamp inside the actual year will be generated
+	 *  <li>negative, then a timestamp in the yearsToPastOrInFuture years before now = past will be generated 
+	 *  <li>postive, then a timestamp in the yearsToPastOrInFuture years before now = will be generated 
+	 *  </ul>
+	 *  @return the generated filler text object
+	 */
+	public DateTime timestamp(int yearsToPastOrInFuture) {
+		if	(yearsToPastOrInFuture == 0) {
+			return timestamp(0, 0);
+		}
+		else if	(yearsToPastOrInFuture < 0) {
+			return fDateProducer.randomDateInThePast(-yearsToPastOrInFuture);
+		}
+		else {
+			return fDateProducer.randomDateInTheFuture(yearsToPastOrInFuture);
+		}
+	}
+
+	/**
+	 * @see FillerTextType#DATE
+	 * @param params may be<ul>
+	 * 			<li>none - same as {@link #date(int)} with parameter 0</li>
+	 * 			<li>(int)yearsToPastOrInFuture - generate a date with a range of years from now; same as {@link #date(int)}</li>
+	 * 			<li>(int)from,(int)to - generate a date between two years including both years; same as {@link #date(int, int)}</li>
+	 * </ul>
+	 *  @return the generated filler text object
+	 */
+	@SuppressWarnings("deprecation")
+	public Date date(Object...params) {
+		DateTime dt = timestamp(params);
+		return (new Date(dt.getYear()-1900, dt.getMonthOfYear()-1, dt.getDayOfMonth()));		
+	}
+
+	/**
+	 *  generate a date (without time) between two years including both years
+	 *  @see FillerTextType#DATE
+	 *  @param from may be<ul>
+	 *  <li>either a year after 1900</li>
+	 *  <li>otherwise it will be interpreted as an offset to the actual year</li>
+	 *  </ul>
+	 *  @param to may be<ul>
+	 *  <li>either a year after 1900</li>
+	 *  <li>otherwise it will be interpreted as an offset to the actual year</li>
+	 *  </ul>
+	 *  @return the generated filler text object
+	 */
+	@SuppressWarnings("deprecation")
+	public Date date(int from, int to) {
+		DateTime dt = timestamp(from, to);
+		return (new Date(dt.getYear()-1900, dt.getMonthOfYear()-1, dt.getDayOfMonth()));		
+	}
+
+	/**
+	 *  generate a date (without time) with a range of years from now
+	 *  @see FillerTextType#DATE
+	 *  @param yearsToPastOrInFuture may be<ul>
+	 *  <li>0, then a date inside the actual year will be generated
+	 *  <li>negative, then a date in the yearsToPastOrInFuture years before now = past will be generated 
+	 *  <li>postive, then a date in the yearsToPastOrInFuture years before now = will be generated 
+	 *  </ul>
+	 *  @return the generated filler text object
+	 */
+	@SuppressWarnings("deprecation")
+	public Date date(int yearsToPastOrInFuture) {
+		DateTime dt = timestamp(yearsToPastOrInFuture);
+		return (new Date(dt.getYear()-1900, dt.getMonthOfYear()-1, dt.getDayOfMonth()));		
+	}
+	
+	/**
+	 *  generate a time (without date)
+	 *  @see FillerTextType#TIME
+	 *  @return the generated filler text object
+	 */
+	@SuppressWarnings("deprecation")
+	public Time time() {
+		DateTime dt = fDateProducer.randomDateInThePast(1);
+		return (new Time(dt.getHourOfDay(), dt.getMinuteOfHour(), dt.getSecondOfMinute()));		
+	}
+	
+	/**
+	 *  @see FillerTextType#PARAGRAPH 
+	 *  @return the generated filler text object, containing one paragraph
+	 */
+	public String paragraph() {
+		return fTextProducer.paragraph(1);
+	}
+	
+	/**
+	 *  @see FillerTextType#PARAGRAPH 
+	 *  @param count 0 uses the internal default count value
+	 *  @return the generated filler text object, containing count paragraph(s)
+	 */
+	public String paragraphs(int count) {
+		if	(count > 0) {
+			return fTextProducer.paragraph(count);
+		}
+		else {
+			return paragraph();
+		}
+	}
+	
+	/**
+	 *  @see FillerTextType#SENTENCE 
+	 *  @return the generated filler text object, containing one sentence
+	 */
+	public String sentence() {
+		return fTextProducer.sentence(1);
+	}
+	
+	/**
+	 *  @see FillerTextType#SENTENCE 
+	 *  @param count 0 uses the internal default count value
+	 *  @return the generated filler text object, containing count sentence(s)
+	 */
+	public String sentences(int count) {
+		if	(count > 0) {
+			return fTextProducer.sentence(count);
+		}
+		else {
+			return sentence();
+		}
+	}
+	
+	/**
+	 *  @see FillerTextType#WORD 
+	 *  @return the generated filler text object, containing one word
+	 */
+	public String word() {
+		return fTextProducer.word(1);
+	}
+	
+	/**
+	 *  @see FillerTextType#WORD 
+	 *  @param count 0 uses the internal default count value
+	 *  @return the generated filler text object, containing count word(s)
+	 */
+	public String words(int count) {
+		if	(count > 0) {
+			return fTextProducer.word(count);
+		}
+		else {
+			return word();
+		}
+	}
+
+	public String numerify(String numberString) {
+		return fBaseProducer.numerify(numberString);
+	}
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/fillertext/FillerTextType.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/fillertext/FillerTextType.java
new file mode 100644
index 0000000..cba7ea1
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/fillertext/FillerTextType.java
@@ -0,0 +1,162 @@
+/**
+ *                                                                            
+ * 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.utils.fillertext;
+
+import java.sql.Time;
+import java.sql.Types;
+import java.sql.Date;
+
+import org.joda.time.DateTime;
+
+public enum FillerTextType {
+	/** simple text */
+	TEXT(Types.CHAR, String.class),
+	/** timestamp or date & time */
+	TIMESTAMP(Types.TIMESTAMP, DateTime.class),
+	/** signed (positive) integer */
+	SIGNEDINTEGER(Types.INTEGER, Integer.class),
+	/** unsigned (positive or negative) integer */
+	UNSIGNEDINTEGER(Types.INTEGER, Integer.class),
+	/** date without time */
+	DATE(Types.DATE, Date.class),
+	/** time without date */
+	TIME(Types.TIME, Time.class),
+	/** boolean */
+	TRUEORFALSE(Types.BOOLEAN, Boolean.class),
+	/** signed (positive) double */
+	SIGNEDDOUBLE(Types.DOUBLE, Double.class),
+	/** unsigned (positive or negative) double */
+	UNSIGNEDDOUBLE(Types.DOUBLE, Double.class),
+//	JAVA_OBJECT(Types.JAVA_OBJECT),
+//	BINARY(Types.BINARY),
+	/** any other tex */
+	OTHER(Types.OTHER, TEXT),
+	/** any other text */
+	BLOB(Types.BLOB, TEXT),
+	/** signed (positive) double */
+	SIGNEDDECIMAL(Types.DECIMAL, SIGNEDDOUBLE),
+	/** unsigned (positive or negative) double */
+	UNSIGNEDDECIMAL(Types.DECIMAL, UNSIGNEDDOUBLE),
+	//
+	/** word(s) */
+	WORD(TEXT),
+	/** sentence(s) */
+	SENTENCE(TEXT),
+	/** paragraph(s) */
+	PARAGRAPH(TEXT),
+//	/** localized first name */
+//	FIRSTNAME(TEXT),
+//	/** localized last name */
+//	LASTNAME(TEXT),
+//	/** localized full name = first & last name */
+//	FULLNAME(TEXT),
+//	/** localized email containing first & last name */
+//	EMAIL(TEXT),
+//	/** localized postal code */
+//	POSTALCODE(TEXT),
+//	/** localized city */
+//	CITY(TEXT),
+//	/** localized phone number */
+//	PHONE(TEXT),
+//	/** localized phone number */
+//	GENDER_MALE(Types.BOOLEAN, Boolean.class),
+	;
+
+	private final int fSqlType;
+	private final FillerTextType fParentType;
+	private final Class<?> fObjectClass;
+	 
+	private FillerTextType(int sqlType, Class<?> objectClass) {
+		this(sqlType, objectClass, null);
+	}
+	 
+	private FillerTextType(FillerTextType parentType) {
+		this(0, null, parentType);
+	}
+	 
+	private FillerTextType(int sqlType, FillerTextType parentType) {
+		this(sqlType, null, parentType);
+	}
+	 
+	private FillerTextType(int sqlType, Class<?> objectClass, FillerTextType parentType) {
+		fSqlType = sqlType;
+		fObjectClass = objectClass;
+		fParentType = parentType;
+	}
+
+	/**
+	 * @param object to be checked, if it is compatible to the corresponding class
+	 * @return true/false
+	 */
+	public boolean instanceOf(Object object) {
+		if	(fParentType == null) {
+			return fObjectClass.isInstance(object);
+		}
+		else {
+			return fParentType.instanceOf(object);
+		}
+	}
+	
+	/**
+	 * @return the corresponding {@link java.sql.Types}
+	 */
+	public int getSqlType() {
+		if	(fParentType == null) {
+			return fSqlType;
+		}
+		else {
+			return fParentType.getSqlType();
+		}
+	}
+
+	/**
+	 * @return the returning class
+	 */
+	public Class<?> getObjectClass() {
+		if	(fParentType == null) {
+			return fObjectClass;
+		}
+		else {
+			return fParentType.getObjectClass();
+		}
+	}
+
+	/**
+	 * @param name <u>case insensitive</u> name to searched for
+	 * @return the corresponding {@link FillerTextType}
+	 */
+	public static FillerTextType typeFor(String name) {
+		for	(FillerTextType type : values()) {
+			if	(name.equalsIgnoreCase(type.toString())) {
+				return type;
+			}
+		}
+		return OTHER.fParentType;
+	}
+	
+	/**
+	 * @param sqlType the {@link java.sql.Types} to be searched for
+	 * @return the <u>first</u> corresponding {@link FillerTextType}
+	 */
+	public static FillerTextType typeFor(int sqlType) {
+		for	(FillerTextType type : values()) {
+			if	(type.fSqlType == sqlType) {
+				while (type.fParentType != null) {
+					type = type.fParentType;
+				}
+				return type;
+			}
+		}
+		return OTHER.fParentType;
+	}
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/fillertext/provider/BaseProvider.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/fillertext/provider/BaseProvider.java
new file mode 100644
index 0000000..257436f
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/fillertext/provider/BaseProvider.java
@@ -0,0 +1,58 @@
+/**
+ *                                                                            
+ * 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.utils.fillertext.provider;
+
+import java.util.Random;
+
+public class BaseProvider {
+
+	private final Random fRandom;
+
+	public BaseProvider() {
+		fRandom = new Random();
+	}
+	
+	public boolean trueOrFalse() {
+		return fRandom.nextBoolean();
+	}
+
+	public int randomBetween(int min, int max) {
+		int range = max - min + 1;
+		int randomInt = range > 0 ? fRandom.nextInt(range) : 0;
+		return min + randomInt;
+	}
+
+	public long randomBetween(long min, long max) {
+		long range = (max - min) + 1;
+		return min + (long) (fRandom.nextDouble() * range);
+	}
+
+	public double randomBetween(double min, double max) {
+		double range = max - min;
+		double randomDouble = range > 0 ? fRandom.nextDouble() * range : 0;
+		return min + randomDouble;
+	}
+
+	public String numerify(String numberString) {
+		String result = "";
+		for	(int i=0; i < numberString.length(); i++) {
+			if	(numberString.charAt(i) == '#') {
+				result += '0'+randomBetween(0, 9);
+			}
+			else {
+				result += numberString.charAt(i);
+			}
+		}
+		return result;
+	}
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/fillertext/provider/DateProvider.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/fillertext/provider/DateProvider.java
new file mode 100644
index 0000000..7042e3c
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/fillertext/provider/DateProvider.java
@@ -0,0 +1,55 @@
+/**
+ *                                                                            
+ * 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.utils.fillertext.provider;
+
+import org.joda.time.DateTime;
+
+public class DateProvider {
+
+	private final BaseProvider fBaseProvider;
+	
+	public DateProvider(BaseProvider baseProvider) {
+		fBaseProvider = baseProvider;
+	}
+
+	public DateTime randomDateInThePast(int yearsToPast) {
+		DateTime now = DateTime.now();
+		return randomDateBetweenTwoDates(
+			firstDayOfYear(now.getYear()-yearsToPast),
+			now
+		);
+	}
+
+	public DateTime randomDateInTheFuture(int yearsInFuture) {
+		DateTime now = DateTime.now();
+		return randomDateBetweenTwoDates(
+			now,
+			new DateTime(firstDayOfYear(now.getYear()+yearsInFuture+1).getMillis() - 1)
+		);
+	}
+
+	public DateTime randomDateBetweenYears(int startYear, int endYear) {
+		return randomDateBetweenTwoDates(
+			firstDayOfYear(startYear),
+			new DateTime(firstDayOfYear(endYear+1).getMillis() - 1)
+		);
+	}
+	
+	private DateTime firstDayOfYear(int year) {
+		return new DateTime(year, 1, 1, 0, 0);
+	}
+	
+	private DateTime randomDateBetweenTwoDates(DateTime from, DateTime to) {
+		return new DateTime(fBaseProvider.randomBetween(from.getMillis(), to.getMillis()));
+	}
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/fillertext/provider/TextConfigurator.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/fillertext/provider/TextConfigurator.java
new file mode 100644
index 0000000..b85de05
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/fillertext/provider/TextConfigurator.java
@@ -0,0 +1,163 @@
+/**
+ *                                                                            
+ * 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.utils.fillertext.provider;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+
+public class TextConfigurator {
+
+	private Locale locale;
+	private String alphabet = "abcdefghijklmnopqrstuvwxyz";
+	private String loremipsum = "";
+	private String text = "";
+	private Set<String> words = null;
+	private Set<String> sentences = null;
+	private Set<String> paragraphs = null;
+
+	private static final Locale DEFAULT = Locale.ENGLISH;
+	private static final Map<Locale,String> ALPHABETS = new HashMap<Locale, String> ();
+	private static final Map<Locale,String> LOREM_IPSUMS = new HashMap<Locale, String> ();
+	
+	static {
+		ALPHABETS.put(Locale.ENGLISH, "abcdefghijklmnopqrstuvwxyz");
+		ALPHABETS.put(Locale.GERMAN,  "abcdefghijklmnopqrstuvwxyzäöüß");
+		ALPHABETS.put(Locale.FRENCH,  "abcdefghijklmnopqrstuvwxyzáàâéè");
+		
+		LOREM_IPSUMS.put(Locale.ENGLISH,
+			"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean suscipit ullamcorper ipsum, at varius leo sagittis ut. Morbi varius nisl non eleifend imperdiet. Integer porttitor arcu sit amet elit rhoncus, eget bibendum felis mattis. Aenean nec accumsan metus. Fusce venenatis ipsum nec accumsan varius. Suspendisse vitae nisi cursus, pretium nulla id, tincidunt urna. Aenean porttitor lacus nec sapien commodo laoreet. Praesent tristique sagittis felis ut porta. Nam non diam urna. Nullam nec lorem iaculis, elementum elit ut, malesuada urna. Donec ac erat interdum, porta mi a, porttitor risus.\r\n"+
+			"Phasellus vulputate molestie mattis. Donec lobortis nisl sit amet nunc venenatis fermentum. Nam accumsan dignissim cursus. Nullam ornare tristique dui tempor tincidunt. Aenean a dignissim erat. Fusce lacinia mauris sit amet ante convallis sodales. Sed eleifend posuere dui. Curabitur venenatis aliquam ex, vitae rhoncus quam scelerisque id. Quisque egestas diam urna, eget fringilla tortor tristique ac. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.\r\n"+
+			"Maecenas volutpat ipsum vel pellentesque eleifend. Aenean felis lectus, consectetur vel lacinia nec, scelerisque a ex. Etiam placerat finibus odio, a mollis lorem congue in. Nullam laoreet nec odio eu venenatis. Sed convallis velit pulvinar, vestibulum neque sit amet, ultricies arcu. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut sit amet ex sit amet massa semper bibendum in id est.\r\n"+
+			"In nulla velit, laoreet vitae bibendum eget, pulvinar sit amet arcu. Nunc fermentum metus at dui condimentum, id sodales elit vehicula. Vivamus consequat finibus felis, sed accumsan urna faucibus sit amet. Suspendisse at sagittis diam. Donec fermentum risus sed dignissim auctor. Phasellus vel est diam. Donec venenatis neque eget ex tempus ornare. Duis tellus magna, pharetra sit amet dui eu, interdum mollis ante. Maecenas malesuada pulvinar metus, quis posuere dui egestas in. Fusce quis lacus facilisis, feugiat eros a, accumsan ante. In et quam pharetra, varius mauris nec, commodo urna.\r\n"+
+			"Nullam vel fermentum lectus. Sed vel mauris at sapien dictum sodales. Fusce a tristique tellus. Sed vel pulvinar odio. Nunc ut libero at nunc molestie consequat. Vivamus facilisis varius quam non vestibulum. Nullam volutpat interdum ipsum eu lacinia. Ut a ullamcorper neque. Morbi vulputate felis viverra lacinia blandit. In gravida, enim eu eleifend fermentum, lacus augue rutrum velit, vitae lacinia metus augue a neque.\r\n"+
+			"Nulla in nulla dolor. Donec ac velit mollis nunc scelerisque pharetra. Phasellus id nisl et arcu eleifend commodo eget nec elit. Vestibulum at diam quam. Quisque vestibulum in erat vitae lacinia. Phasellus et iaculis dui. Quisque justo risus, feugiat et facilisis ut, sagittis ut sem.\r\n"+
+			"Cras pretium nisl orci, vel blandit erat vestibulum in. Vestibulum vitae arcu consequat sem viverra consectetur eu a velit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus et ullamcorper felis, id luctus dolor. Vestibulum eu nulla et mi fermentum ultricies et in neque. Nam sollicitudin leo neque, vel efficitur massa dictum vitae. Praesent eget posuere est.\r\n"+
+			"Integer eros leo, tincidunt a facilisis ut, imperdiet efficitur erat. Vivamus at nibh nulla. Etiam nisl orci, convallis quis metus sed, tincidunt aliquet nisl. Morbi posuere vehicula neque, lacinia pulvinar metus egestas nec. Nulla sodales mauris eget tellus sagittis porttitor. Aenean sed nunc id odio pharetra mattis quis ut purus. Sed sem velit, tempus vitae luctus eget, ullamcorper at odio. Etiam elit ipsum, iaculis non cursus at, elementum a augue. Ut sollicitudin fermentum lorem, in vestibulum ligula sodales sodales. Mauris sed sem pellentesque, bibendum lacus in, egestas justo. Etiam sit amet dui purus. Praesent et gravida purus. Aenean auctor tempus viverra. Quisque in sem id arcu consectetur eleifend. Cras at lorem in libero consectetur mollis id posuere justo. Sed finibus mauris nec metus fringilla luctus.\r\n"+
+			"Nulla sagittis tortor id cursus auctor. Vivamus sagittis convallis metus, sed semper elit ultrices eu. Praesent sodales ante vitae nibh suscipit, nec accumsan felis euismod. Nulla at orci venenatis, semper magna vitae, rhoncus libero. Nunc ut consequat quam. Aenean dictum nibh eu lorem accumsan commodo. Praesent egestas aliquam velit, nec varius arcu sodales quis. Sed lobortis tellus nunc, eget suscipit dolor consequat a. Quisque laoreet consequat nisl, at rhoncus sem cursus feugiat. Suspendisse id ipsum at tellus rutrum facilisis. Nullam nec massa nec urna tincidunt ornare. In magna est, sagittis fringilla tempus eget, tempus sed eros. Proin elementum porta gravida.\r\n"+
+			"Donec non lorem quis orci egestas semper a sed arcu. Donec vestibulum maximus mollis. Vestibulum vel lorem vel justo semper euismod. Nam pellentesque odio a odio varius molestie. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Mauris dapibus nibh et ornare pulvinar. Curabitur eget aliquet risus. Etiam sed pretium nulla. Duis sapien ipsum, lobortis non eros in, tristique hendrerit turpis.\r\n"+
+			"Cras pharetra ac diam id viverra. Vivamus sit amet ex eleifend, volutpat ligula et, ullamcorper elit. Ut dignissim mollis elit, non eleifend felis pharetra quis. Proin pretium, est eu pharetra semper, ipsum ex volutpat felis, ut iaculis elit tortor eget est. Curabitur ut ullamcorper orci, in finibus massa. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed sed lacinia massa, sed dapibus velit. Donec eget bibendum purus. Sed suscipit ultricies accumsan. Aenean pellentesque facilisis felis, in lacinia mauris faucibus ac. Nunc mauris diam, posuere sed ullamcorper vitae, pharetra vel nisi. Nunc vehicula urna massa, vitae ultrices ex luctus sed.\r\n"+
+			"Etiam pellentesque posuere leo, ac pellentesque justo. Pellentesque laoreet ipsum id nunc volutpat, ut consequat felis vestibulum. Nullam iaculis augue est, eu mattis ante condimentum non. Pellentesque quis tristique libero. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed a ipsum a odio pharetra egestas nec sit amet sem. Integer quis aliquam lectus.\r\n"+
+			"Quisque at justo auctor, venenatis lacus sit amet, finibus tellus. Vivamus rhoncus lacinia lorem quis malesuada. Phasellus scelerisque vehicula ex. Fusce finibus purus placerat, rhoncus erat blandit, tincidunt dolor. Nam a justo iaculis enim auctor imperdiet vel sed libero. Nulla sit amet orci sollicitudin, facilisis mauris sit amet, dignissim turpis. Donec ut enim quis justo dictum consequat.\r\n"+
+			"Sed eget augue consequat, pulvinar dui eget, suscipit arcu. Pellentesque et lacinia nisi, eu iaculis odio. Aenean fermentum quam a nibh hendrerit, accumsan hendrerit dui egestas. Ut sit amet nulla vitae risus pulvinar vestibulum non id lorem. Integer pretium condimentum interdum. Maecenas tincidunt vel ipsum vel accumsan. Sed finibus mi vel sem rhoncus consectetur. Donec malesuada, arcu id malesuada pulvinar, ex ante vehicula dolor, at pharetra massa leo ut felis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc efficitur ex ac tincidunt dignissim. Donec in nisi quis nulla scelerisque ullamcorper quis nec mi. Curabitur convallis eu enim vel mollis. Duis rhoncus, est id sagittis feugiat, tortor purus elementum nunc, in iaculis est erat fermentum orci. Proin cursus, lacus euismod finibus vulputate, ante dolor commodo dui, a dictum lacus justo vitae velit. Proin sit amet ex gravida, sodales justo non, ullamcorper ipsum. Nullam porta vehicula efficitur.\r\n"+
+			"Mauris euismod finibus accumsan. Nulla ornare sagittis dignissim. Vestibulum eget aliquam augue. Aliquam malesuada eu dolor nec placerat. Nullam gravida eu eros non maximus. Aliquam vulputate libero eu maximus elementum. Fusce ex purus, pretium quis eros ut, consequat maximus ipsum. Aenean id ullamcorper turpis. Etiam efficitur et quam elementum viverra. Aenean lacinia, nisi eu faucibus efficitur, magna ligula dictum nulla, vel porta orci nibh id nisi. Morbi sit amet tempor magna. Praesent vitae orci eu est eleifend finibus. Aliquam vel nisi vel justo fermentum rutrum sit amet in mauris. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\r\n"+
+			"Proin ante urna, congue non orci a, vehicula tincidunt velit. In accumsan justo sed eros laoreet volutpat. Phasellus venenatis cursus nulla sed consectetur. Maecenas at dolor mauris. Nulla eget iaculis neque, in malesuada nisl. Etiam posuere enim vitae erat condimentum tristique. Nulla vitae tempus ante. Aenean iaculis nisl id accumsan dignissim. Proin iaculis quam eget augue commodo, in egestas ex semper. Praesent ut mauris tortor. Donec vestibulum ante id vulputate luctus. Ut eu accumsan metus. Integer in ligula nulla.\r\n"+
+			"Nulla facilisi. Proin molestie erat eget dui volutpat tristique. Nullam accumsan dui sodales nunc consectetur semper. Duis posuere lacus id elit interdum, eu pellentesque dui blandit. Vestibulum eget rutrum urna. In lacus eros, mollis nec scelerisque ac, eleifend nec sapien. Ut varius pretium felis, eu rutrum libero feugiat in. Sed feugiat tristique nisi nec imperdiet. Vivamus quis pulvinar mauris, a tempor arcu. Maecenas auctor, tellus eget imperdiet suscipit, lacus velit eleifend nisi, ac tempus ipsum elit id tellus. Duis justo felis, placerat a finibus in, sodales sit amet ipsum. Nunc vel mauris eget sem tristique accumsan. Suspendisse libero enim, tincidunt nec imperdiet ut, finibus eget magna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce eleifend id dolor at fermentum.\r\n"+
+			"Fusce lectus tortor, tincidunt id commodo et, mattis eu ipsum. Integer id magna nec dui rhoncus suscipit vel quis libero. Phasellus venenatis, libero ac congue facilisis, tellus ligula semper ligula, ac semper diam dolor sit amet diam. Curabitur ante nulla, placerat quis felis at, pretium condimentum ante. In ac felis quis orci consectetur condimentum. In eu odio venenatis, finibus urna et, tincidunt leo. Cras at urna id sapien pretium maximus. Proin quam nulla, porta vestibulum neque et, viverra mollis neque. Nam et viverra mauris. Proin sit amet placerat est, in blandit metus. Donec nec dui vel tortor commodo interdum sit amet at urna. Nunc ligula ex, molestie nec eleifend at, dapibus at ex. Interdum et malesuada fames ac ante ipsum primis in faucibus.\r\n"+
+			"Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc rutrum leo dolor, eu auctor enim sagittis ac. Ut facilisis cursus ornare. Donec nec leo blandit, pellentesque elit a, suscipit sapien. Maecenas et risus scelerisque, rutrum ligula vel, pellentesque elit. Cras nec lobortis metus, id vehicula enim. Aliquam viverra ligula ligula, ut luctus nunc suscipit vitae. Pellentesque vel dictum leo. Aenean leo quam, convallis a varius nec, laoreet eget augue.\r\n"+
+			"Phasellus viverra ante eu sem blandit, vel sagittis urna eleifend. Nunc facilisis tincidunt mauris vel gravida. Sed nec ipsum vel neque tempor bibendum sit amet sed mi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In erat eros, porta sit amet varius sed, mattis ac risus. Donec maximus felis sed dictum faucibus. Ut tristique lacus eget felis venenatis ultrices. Nam luctus tortor quis est molestie, ac blandit sem dictum. Ut fermentum, diam ac pharetra imperdiet, dui enim eleifend orci, quis posuere ligula turpis vitae lorem. In vitae semper orci. Proin faucibus ligula vel arcu imperdiet laoreet. In purus felis, consectetur vel accumsan nec, vestibulum in sapien. Curabitur commodo nisi eu arcu scelerisque, eu laoreet orci tristique. Nullam in tellus dolor. Curabitur tempor quam a arcu posuere tincidunt. Integer id metus et lacus vestibulum pulvinar."
+		);
+		/*
+		LOREM_IPSUMS.put(Locale.GERMAN,
+			"Weit hinten, hinter den Wortbergen, fern der Länder Vokalien und Konsonantien leben die Blindtexte. Abgeschieden wohnen sie in Buchstabhausen an der Küste des Semantik, eines großen Sprachozeans.\r\n"+
+			"Ein kleines Bächlein namens Duden fließt durch ihren Ort und versorgt sie mit den nötigen Regelialien. Es ist ein paradiesmatisches Land, in dem einem gebratene Satzteile in den Mund fliegen.\r\n"+
+			"Nicht einmal von der allmächtigen Interpunktion werden die Blindtexte beherrscht – ein geradezu unorthographisches Leben. Eines Tages aber beschloß eine kleine Zeile Blindtext, ihr Name war Lorem Ipsum, hinaus zu gehen in die weite Grammatik.\r\n"+
+			"Der große Oxmox riet ihr davon ab, da es dort wimmele von bösen Kommata, wilden Fragezeichen und hinterhältigen Semikoli, doch das Blindtextchen ließ sich nicht beirren. Es packte seine sieben Versalien, schob sich sein Initial in den Gürtel und machte sich auf den Weg.\r\n"+
+			"Als es die ersten Hügel des Kursivgebirges erklommen hatte, warf es einen letzten Blick zurück auf die Skyline seiner Heimatstadt Buchstabhausen, die Headline von Alphabetdorf und die Subline seiner eigenen Straße, der Zeilengasse.\r\n"+
+			"Wehmütig lief ihm eine rhetorische Frage über die Wange, dann setzte es seinen Weg fort. Unterwegs traf es eine Copy.\r\n"+
+			"Die Copy warnte das Blindtextchen, da, wo sie herkäme wäre sie zigmal umgeschrieben worden und alles, was von ihrem Ursprung noch übrig wäre, sei das Wort und und das Blindtextchen solle umkehren und wieder in sein eigenes, sicheres Land zurückkehren.\r\n"+
+			"Doch alles Gutzureden konnte es nicht überzeugen und so dauerte es nicht lange, bis ihm ein paar heimtückische Werbetexter auflauerten, es mit Longe und Parole betrunken machten und es dann in ihre Agentur schleppten, wo sie es für ihre Projekte wieder und wieder mißbrauchten.\r\n"+
+			"Und wenn es nicht umgeschrieben wurde, dann benutzen Sie es immernoch. Weit hinten, hinter den Wortbergen, fern der Länder Vokalien und Konsonantien leben die Blindtexte. Abgeschieden wohnen sie in Buchstabhausen an der Küste des Semantik, eines großen Sprachozeans.\r\n"+
+			"Ein kleines Bächlein namens Duden fließt durch ihren Ort und versorgt sie mit den nötigen Regelialien. Es ist ein paradiesmatisches Land, in dem einem gebratene Satzteile in den Mund fliegen.\r\n"+
+			"Nicht einmal von der allmächtigen Interpunktion werden die Blindtexte beherrscht – ein geradezu unorthographisches Leben. Eines Tages aber beschloß eine kleine Zeile Blindtext, ihr Name war Lorem Ipsum, hinaus zu gehen in die weite Grammatik.\r\n"+
+			"Der große Oxmox riet ihr davon ab, da es dort wimmele von bösen Kommata, wilden Fragezeichen und hinterhältigen Semikoli, doch das Blindtextchen ließ sich nicht beirren. Es packte seine sieben Versalien, schob sich sein Initial in den Gürtel und machte sich auf den Weg.\r\n"+
+			"Als es die ersten Hügel des Kursivgebirges erklommen hatte, warf es einen letzten Blick zurück auf die Skyline seiner Heimatstadt Buchstabhausen, die Headline von Alphabetdorf und die Subline seiner eigenen Straße, der Zeilengasse.\r\n"+
+			"Wehmütig lief ihm eine rhetorische Frage über die Wange, dann setzte es seinen Weg fort. Unterwegs traf es eine Copy.\r\n"+
+			"Die Copy warnte das Blindtextchen, da, wo sie herkäme wäre sie zigmal umgeschrieben worden und alles, was von ihrem Ursprung noch übrig wäre, sei das Wort und und das Blindtextchen solle umkehren und wieder in sein eigenes, sicheres Land zurückkehren.\r\n"+
+			"Doch alles Gutzureden konnte es nicht überzeugen und so dauerte es nicht lange, bis ihm ein paar heimtückische Werbetexter auflauerten, es mit Longe und Parole betrunken machten und es dann in ihre Agentur schleppten, wo sie es für ihre Projekte wieder und wieder mißbrauchten. Und wenn es nicht umgeschrieben wurde, dann benutzen Sie es immernoch.\r\n"+
+			"Weit hinten, hinter den Wortbergen, fern der Länder Vokalien und Konsonantien leben die Blindtexte. Abgeschieden wohnen sie in Buchstabhausen an der Küste des Semantik, eines großen Sprachozeans. Ein kleines Bächlein namens Duden fließt durch ihren Ort und versorgt sie mit den nötigen Regelialien.\r\n"+
+			"Es ist ein paradiesmatisches Land, in dem einem gebratene Satzteile in den Mund fliegen. Nicht einmal von der allmächtigen Interpunktion werden die Blindtexte beherrscht – ein geradezu unorthographisches Leben. Eines Tages aber beschloß eine kleine Zeile Blindtext, ihr Name war Lorem Ipsum, hinaus zu gehen in die weite Grammatik.\r\n"+
+			"Der große Oxmox riet ihr davon ab, da es dort wimmele von bösen Kommata, wilden Fragezeichen und hinterhältigen Semikoli, doch das Blindtextchen ließ sich nicht beirren. Es packte seine sieben Versalien, schob sich sein Initial in den Gürtel und machte sich auf den Weg.\r\n"+
+			"Als es die ersten Hügel des Kursivgebirges erklommen hatte, warf es einen letzten Blick zurück auf die Skyline seiner Heimatstadt Buchstabhausen, die Headline von Alphabetdorf und die Subline seiner eigenen Straße, der Zeilengasse. Wehmütig lief ihm eine rhetorische Frage über die Wange, dann setzte es seinen Weg fort. Unterwegs traf es eine Copy. Die Copy warnte das Blindtextchen, da, wo sie herkäme wäre sie zigmal umgeschrieben worden und alles, was von ihrem Ursprung noch übrig wäre, sei das Wort und und das Blindtextchen solle umkehren und wieder in sein eigenes, sicheres Land zurückkehren. Doch alles Gutzureden."
+		);
+		*/
+	}
+	
+	protected TextConfigurator(Locale locale) {
+		this.locale = locale;
+		Locale locale2 = new Locale(locale.getLanguage());
+		if	(ALPHABETS.containsKey(locale)) {
+			alphabet = ALPHABETS.get(locale);
+		}
+		else if	(ALPHABETS.containsKey(locale2)) {
+			alphabet = ALPHABETS.get(locale2);
+		}
+		else {
+			alphabet = ALPHABETS.get(DEFAULT);
+		}
+		if	(LOREM_IPSUMS.containsKey(locale)) {
+			loremipsum = LOREM_IPSUMS.get(locale);
+		}
+		else if	(LOREM_IPSUMS.containsKey(locale2)) {
+			loremipsum = LOREM_IPSUMS.get(locale2);
+		}
+		else {
+			loremipsum = LOREM_IPSUMS.get(DEFAULT);
+		}
+	}
+	
+	protected String getAlphabet() {
+		return alphabet;
+	}
+	
+	protected String getLoremIpsum() {
+		return loremipsum;
+	}
+
+	protected Set<String> getParagraphs() {
+		if	(paragraphs == null) {
+			paragraphs = new HashSet<String>();
+			String[] items = loremipsum.split("\r\n");
+			for (String item : items) {
+				paragraphs.add(item);
+			}
+		}
+		return paragraphs;
+	}
+	
+	protected Set<String> getSentences() {
+		if	(sentences == null) {
+			sentences = new HashSet<String>();
+			String[] items = loremipsum.split("[\\.,\\s!;?:]+");
+			for (String item : items) {
+				sentences.add(item.trim());
+			}
+		}
+		return sentences;
+	}
+	
+	protected Set<String> getWords() {
+		if	(words == null) {
+			words = new HashSet<String>();
+			String[] items;
+			if	(text.isEmpty()) {
+				items = loremipsum.split(" ");
+			}
+			else {
+				items = text.split(" ");
+			}
+			for (String item : items) {
+				words.add(item
+					.replace(".", "")
+					.replace(",", "")
+					.replace(";", "")
+					.replace("!", "")
+					.replace("?", "")
+				);
+			}
+		}
+		return words;
+	}
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/fillertext/provider/TextProvider.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/fillertext/provider/TextProvider.java
new file mode 100644
index 0000000..4e6c261
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/fillertext/provider/TextProvider.java
@@ -0,0 +1,55 @@
+/**
+ *                                                                            
+ * 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.utils.fillertext.provider;
+
+import java.util.Locale;
+import java.util.Set;
+
+
+public class TextProvider {
+
+	private final TextConfigurator fConfigurator;
+	private final BaseProvider fBaseProvider;
+	
+	public TextProvider(BaseProvider baseProvider, Locale locale) {
+		fBaseProvider = baseProvider;
+		fConfigurator = new TextConfigurator(locale);
+	}
+
+	public String paragraph(int count) {
+		return combine(fConfigurator.getParagraphs(), "\r\n", count);
+	}
+
+	public String sentence(int count) {
+		return combine(fConfigurator.getSentences(), " ", count);
+	}
+
+	public String word(int count) {
+		return combine(fConfigurator.getWords(), " ", count);
+	}
+	
+	private String combine(Set<String> options, String glue, int count) {
+		String[] items = options.toArray(new String[0]);
+		String result = null;
+		for	(int i = 0; i < count; i++) {
+			if	(result == null) {
+				result = "";
+			}
+			else {
+				result += glue;
+			}
+			result += items[fBaseProvider.randomBetween(0, items.length-1)];
+		}
+		return result;
+	}
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/session/HttpSessionAttributes.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/session/HttpSessionAttributes.java
new file mode 100644
index 0000000..76cc1d5
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/session/HttpSessionAttributes.java
@@ -0,0 +1,81 @@
+/**
+ *                                                                            
+ * 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.utils.session;
+
+import com.vaadin.server.VaadinService;
+import com.vaadin.server.WrappedSession;
+
+/**
+ * Attributes saved for the http session = session static
+ */
+public class HttpSessionAttributes {
+
+	private static WrappedSession session() {
+		return VaadinService.getCurrentRequest().getWrappedSession();
+	}
+	
+	/**
+	 * remove variable
+	 * @param variable
+	 */
+	public static void remove(String variable) {
+		session().removeAttribute(variable);
+	}
+
+	/**
+	 * set variable
+	 * @param variable
+	 * @param value
+	 */
+	public static void set(String variable, Object value) {
+		session().setAttribute(variable, value);
+	}
+
+	/**
+	 * get variable
+	 * @param variable
+	 */
+	public static Object get(String variable) {
+	    return session().getAttribute(variable);
+	}
+	
+	/**
+	 * remove variable
+	 * @param variable
+	 */
+    public static <T> void remove(Class<T> variable) {
+    	session().setAttribute(variable.getCanonicalName(), null);
+    }
+
+	/**
+	 * set variable
+	 * @param variable
+	 * @param value
+	 */
+    public static <T> void set(Class<T> variable, T value) {
+    	session().setAttribute(variable.getCanonicalName(), value);
+    }
+	
+	/**
+	 * get variable
+	 * @param variable
+	 */
+    public static <T> T get(Class<T> variable) {
+    	try {
+    		return (T) session().getAttribute(variable.getCanonicalName());
+    	}
+    	catch (Exception e) {
+    		return null;
+    	}
+    }
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/session/UriPath.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/session/UriPath.java
new file mode 100644
index 0000000..c0c0215
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/session/UriPath.java
@@ -0,0 +1,83 @@
+/**
+ *                                                                            
+ * 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.utils.session;
+
+import java.net.URI;
+
+import org.osgi.framework.FrameworkUtil;
+
+import com.vaadin.server.Page;
+import com.vaadin.server.VaadinService;
+
+public class UriPath {
+
+	/**
+	 * @return the theme name of the current vaadin application, which can be used inside a uri
+	 */
+	public static String getThemeName() {
+		try {
+			return VaadinService.getCurrent().getConfiguredTheme(VaadinService.getCurrentRequest());
+		}
+		catch (Exception e) {
+			return null;
+		}
+	}
+
+	/**
+	 * @return [<code>protocol</code>]<code>://</code>[<code>host</code>](<code>:</code>[<code>port</code>])
+	 */
+	public static String getProtocolHostPort() {
+		URI location = Page.getCurrent().getLocation();
+		String retcode = location.getScheme() + "://" +location.getHost();
+		if	(location.getPort() > 0) {
+			retcode += ":"+location.getPort();
+		}
+		return retcode;
+	}
+	
+	/**
+	 * see also {@link #getAbsoluteBasicResourceUri(String)
+	 * @param classInBundle a class residing in the bundle 
+	 * @return the absolute basic resource uri, which can be used by a browser <b><u>without</u> the protocol, host and port</b>
+	 */
+	public static String getAbsoluteBasicResourceUri(Class<?> classInBundle) {
+		try {
+			return getAbsoluteBasicResourceUri(FrameworkUtil.getBundle(classInBundle).getSymbolicName());
+		}
+		catch (Exception e) {
+			return null;
+		}
+	}
+	
+	/**
+	 * see also {@link #getAbsoluteBasicResourceUri(String, Class)<br>
+	 * The absolute basic uri defined by the bundle given will be generated!
+	 * @param symbolicBundleName the symbolic bundle name, where the requested resource should reside 
+	 * @return the absolute uri, which can be used by a browser
+	 */
+	public static String getAbsoluteBasicResourceUri(String symbolicBundleName) {
+		try {
+			return
+				getProtocolHostPort() +
+				VaadinService.getCurrentRequest().getContextPath() +
+				"/VAADIN/themes/" +
+				getThemeName() +
+				"/plugin/" +
+				symbolicBundleName +
+				"/";
+		}
+		catch (Exception e) {
+			return null;
+		}
+	}
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/session/VaadinSessionAttributes.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/session/VaadinSessionAttributes.java
new file mode 100644
index 0000000..7380a20
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/session/VaadinSessionAttributes.java
@@ -0,0 +1,75 @@
+/**
+ *                                                                            
+ * 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.utils.session;
+
+import com.vaadin.server.VaadinSession;
+
+/**
+ * Attributes saved for the vaadin session = session static
+ */
+public class VaadinSessionAttributes {
+
+	private static VaadinSession session() {
+		return VaadinSession.getCurrent();
+	}
+	
+	/**
+	 * remove variable
+	 * @param variable
+	 */
+	public static void remove(String variable) {
+		set(variable, null);
+	}
+
+	/**
+	 * set variable
+	 * @param variable
+	 * @param value
+	 */
+	public static void set(String variable, Object value) {
+		session().setAttribute(variable, value);
+	}
+
+	/**
+	 * get variable
+	 * @param variable
+	 */
+	public static Object get(String variable) {
+	    return session().getAttribute(variable);
+	}
+
+	/**
+	 * remove variable
+	 * @param variable
+	 */
+    public static <T> void remove(Class<T> variable) {
+    	set(variable, null);
+    }
+
+	/**
+	 * set variable
+	 * @param variable
+	 * @param value
+	 */
+    public static <T> void set(Class<T> variable, T value) {
+    	session().setAttribute(variable, value);
+    }
+	
+	/**
+	 * get variable
+	 * @param variable
+	 */
+    public static <T> T get(Class<T> variable) {
+    	return session().getAttribute(variable);
+    }
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/theme/EnumCssClass.java b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/theme/EnumCssClass.java
new file mode 100644
index 0000000..1ed9765
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/theme/EnumCssClass.java
@@ -0,0 +1,55 @@
+/**
+ *                                                                            
+ * 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.utils.theme;
+
+/**
+ *  CSS Style Class Names for OSBP html components
+ */
+public enum EnumCssClass {
+	/** combobox with icon */
+	COMBOBOX_WITH_ICON,
+	VIEW_HEADER_H2,
+	BOX,
+	CHART,
+	TABLE,
+	HAS_FOCUS,
+	SELECT_LANGUAGE,
+	SELECTION_AREA,
+	MULTI_SELECTION,
+	MULTI_SELECTION_AREA,
+	SINGLE_SELECTION,
+	SINGLE_SELECTION_AREA,
+	DATA_COMPONENT,
+	DATA_AREA,
+	MULTI_AREA,
+	WORK_AREA,
+	LOWER_AREA,
+	TOP_AREA,
+	SIDE_AREA,
+	VIEW,
+	CHART_VIEW,
+	DIALOG_VIEW,
+	ORGANIZATION_VIEW,
+	REPORT_VIEW,
+	TABLE_VIEW,
+	TOPOLOGY_VIEW,
+	MPARTTOOLBARAREA,
+	MPARTTOOLBAR;
+
+	public String styleName() {
+		return toString();
+	}
+	public String toString() {
+		return "os-"+super.toString().toLowerCase().replaceAll("_", "-");
+	}
+}
diff --git a/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/xtext/GenericFormatter.xtend b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/xtext/GenericFormatter.xtend
new file mode 100644
index 0000000..175ab69
--- /dev/null
+++ b/org.eclipse.osbp.utils/src/org/eclipse/osbp/utils/xtext/GenericFormatter.xtend
@@ -0,0 +1,204 @@
+/**
+ *                                                                            
+ *  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
+ * 
+ * 
+ *  This copyright notice shows up in the generated Java code
+ *
+ */
+ 
+package org.eclipse.osbp.utils.xtext
+
+import org.eclipse.emf.ecore.impl.EClassImpl
+import org.eclipse.xtext.Grammar
+import org.eclipse.xtext.GrammarUtil
+import org.eclipse.xtext.IGrammarAccess
+import org.eclipse.xtext.ParserRule
+import org.eclipse.xtext.formatting.impl.FormattingConfig
+import org.eclipse.xtext.impl.ParserRuleImpl
+import org.eclipse.xtext.xbase.services.XtypeGrammarAccess
+
+class GenericFormatter {
+	
+	/**
+	 * <p>
+	 * Variant of method when no import block is specified. Then only one empty line before each
+	 * first level element of the given element name is inserted.
+	 * </p>
+	 * 
+	 * @example	<u>ReportDSLFormatter</u>:<br>
+	 * 			<code>
+	 * 			...FormattingConfig cfg<br>
+	 * 			gf = new GenericFormatter()<br>
+	 * 			gf.formatFirstLevelBlocks( cfg, grammar.grammar, "PageTemplates" )
+	 * 			</code>
+	 * 
+	 * @param	config			Dsl-specific FormattingConfig instance
+	 * @param	grammarRaw		Dsl-specific grammar
+	 * @param	baseElementName	Name of dsl-specific class of first level elements
+	 * 
+	 * @return	void
+	 * 
+	 * @since	20160728, gu
+	 * @changed	yymmdd, name
+	 */
+	def formatFirstLevelBlocks ( FormattingConfig config, Grammar grammarRaw, String baseElementName ) {
+		formatFirstLevelBlocks( config, grammarRaw, baseElementName, null )
+	} 
+	
+
+	/**
+	 * <p>
+	 * Formats intersection between first level elements (= first level underneath package
+	 * definition, i.e. import and following blocks).<br>
+	 * Inserts one empty line between two blocks each.
+	 * </p>
+	 * 
+	 * @example	<u>DatamartDSLFormatter</u>:<br>
+	 * 			<code>
+	 * 			...FormattingConfig cfg<br>
+	 * 			gf = new GenericFormatter()<br>
+	 * 			gf.formatFirstLevelBlocks( cfg, grammar.grammar, "DatamartImport", "DatamartDefinition" )
+	 * 			</code>
+	 * 
+	 * @param	config			Dsl-specific FormattingConfig instance
+	 * @param	grammarRaw		Dsl-specific grammar
+	 * @param	baseElementName	Name of dsl-specific class of first level elements
+	 * @param	importClassName	Name of dsl-specific import class
+	 * 
+	 * @return	void
+	 * 
+	 * @since	20160728, gu
+	 * @changed	yymmdd, name
+	 */
+	def formatFirstLevelBlocks ( FormattingConfig config, Grammar grammarRaw, String baseElementName, String importClassName ) {
+		var ParserRule baseElementDef	= GrammarUtil.findRuleForName( grammarRaw, baseElementName ) as ParserRule
+
+		if	( importClassName != null ) {
+			var ParserRule importDef = GrammarUtil.findRuleForName( grammarRaw, importClassName ) as ParserRule
+			config.setLinewrap( 2 ).between( importDef, baseElementDef )
+		}
+
+		config.setLinewrap( 2 ).before( baseElementDef )
+//		config.setLinewrap( 1, 2, 2 ).before( baseElementDef )
+	} 
+
+	
+	/**
+	 * Overloaded variant for those who can't provide a <i>XtypeGrammarAccess</i> instance.
+	 */
+	def genericFormatting ( FormattingConfig config, IGrammarAccess grammar ) {
+		genericFormatting( config, grammar, null )
+	} 
+	
+	def genericFormatting ( FormattingConfig config, IGrammarAccess grammar, XtypeGrammarAccess grammarAccess ) {
+		config.setAutoLinewrap(400)
+
+		if	( grammarAccess != null ) {
+			// It's usually a good idea to activate the following three statements.
+			// They will add and preserve newlines around comments
+			//		c.setLinewrap( 0, 1, 2 ).before( SL_COMMENTRule )
+			//		c.setLinewrap( 0, 1, 2 ).before( ML_COMMENTRule )
+			//		c.setLinewrap( 0, 1, 1 ).after ( ML_COMMENTRule )
+			config.setLinewrap( 0, 1, 2 ).before( grammarAccess.SL_COMMENTRule )
+			config.setLinewrap( 0, 1, 1 ).after ( grammarAccess.SL_COMMENTRule )
+			config.setLinewrap( 0, 1, 2 ).before( grammarAccess.ML_COMMENTRule )
+			config.setLinewrap( 1, 1, 2 ).after ( grammarAccess.ML_COMMENTRule )
+		}
+
+		for(pair : grammar.findKeywordPairs("{", "}")) {
+			// a space before the first '{'
+			config.setSpace(" ").before(pair.getFirst()) //$NON-NLS-1$
+			// indentation between
+			config.setIndentation(pair.first, pair.second)
+			config.setLinewrap().after(pair.first)
+//			config.setLinewrap( 1, 1, 2 ).after(pair.first)
+			config.setLinewrap( 1, 1, 2 ).around(pair.second)
+//			config.setLinewrap(1,1,1).after(pair.first)		1 for all is default!
+//			config.setLinewrap(1,1,1).around(pair.second)
+		}
+
+		for(kw : grammar.findKeywords(".")) {
+			config.setNoSpace().around(kw)
+			config.setNoLinewrap().around(kw)
+		}
+
+		for (kw : grammar.findKeywords(";")) {
+			config.setNoSpace().before(kw)
+			config.setLinewrap().after(kw)
+		}
+
+		for (kw : grammar.findKeywords(",")) {
+			config.setNoSpace().before(kw)
+		}
+
+		for ( pair : grammar.findKeywordPairs( "(", ")" ) ) {
+			config.setNoSpace().before(pair.first)
+			config.setSpace(" ").after(pair.first)
+			config.setNoLinewrap().around(pair.first)
+			config.setSpace( " " ).before(pair.second)
+//			config.setNoSpace().before(pair.second)
+//			config.setNoLinewrap().around(pair.second)
+			config.setNoLinewrap().before(pair.second)
+			config.setLinewrap( 0, 0, 1 ).after( pair.second )
+//			config.setNoLinewrap().bounds( pair.first, pair.second )
+//			config.setNoLinewrap().range( pair.first, pair.second )
+		}
+
+		for(pair : grammar.findKeywordPairs("[", "]")) {
+			config.setNoSpace().before(pair.first)
+			config.setSpace(" ").after(pair.first)
+//			config.setNoSpace().around(pair.first)
+			config.setNoLinewrap().around(pair.first)
+			config.setSpace( " " ).before(pair.second)
+			config.setNoSpace().after(pair.second)
+//			config.setNoSpace().around(pair.second)
+			config.setNoLinewrap().around(pair.second)
+		}
+
+		var allRules = GrammarUtil.allRules(grammar.grammar)
+		// linewrap before all rules
+		var ruleCalls = grammar.findRuleCalls(allRules.toArray(newArrayOfSize(allRules.size)))
+		for(ruleCall : ruleCalls) {
+
+			//	No newline before and after comparison operators (e.g. '=', '<', 'like', etc.)
+			//	(Currently only used for Datamart-DSL!)
+			if	( ruleCall.rule.name.equals("OperatorEnum") ) {
+				config.setNoLinewrap().around( ruleCall )
+			}
+
+			if (ruleCall.rule instanceof ParserRuleImpl && 
+				ruleCall.rule.type.classifier instanceof EClassImpl ) {
+				if	( ruleCall.rule.name.equals( "MessageDefaultFormat" ) ) {
+					config.setSpace( " " ).before( ruleCall )
+//					config.setNoLinewrap().before( ruleCall )
+//					config.setLinewrap  ().before( ruleCall )
+				}
+
+//				if	( ruleCall.rule.name.contains("Operator") ) {
+//					config.setNoLinewrap().around( ruleCall )
+//				}
+
+				if	( ( !ruleCall.rule.name.startsWith("X") || ruleCall.rule.name.equals("XImportSection") ) &&
+//				if	( !ruleCall.rule.name.startsWith("X") &&
+					  !ruleCall.rule.name.contains("Jvm") &&
+//					  !ruleCall.rule.name.contains("Addition") &&
+//					  !ruleCall.rule.name.contains("Operand") &&
+//					  !ruleCall.rule.name.contains("Operator") &&
+//					  !ruleCall.rule.name.contains("Property") &&
+					  !ruleCall.rule.name.contains("Expression") ) {
+				config.setLinewrap( 0, 1, 2 ).before(ruleCall.rule)
+//				config.setLinewrap(1,1,1).around(ruleCall.rule)
+				}
+			}
+		}
+	}
+}
diff --git a/org.eclipse.osbp.utils/test/org/eclipse/osbp/utils/common/test/EntityUtilsTest.java b/org.eclipse.osbp.utils/test/org/eclipse/osbp/utils/common/test/EntityUtilsTest.java
new file mode 100644
index 0000000..b62dd25
--- /dev/null
+++ b/org.eclipse.osbp.utils/test/org/eclipse/osbp/utils/common/test/EntityUtilsTest.java
@@ -0,0 +1,45 @@
+package org.eclipse.osbp.utils.common.test;
+
+import static org.junit.Assert.*;
+
+import org.eclipse.osbp.dsl.semantic.dto.util.NamingConventionsUtil;
+import org.eclipse.osbp.utils.common.EntityUtils;
+import org.junit.Before;
+import org.junit.Test;
+
+public class EntityUtilsTest {
+
+	private String qualifiedEntityName;
+	private String qualifiedDtoName;
+//	private String qualifiedEnumName;
+//	private String qualifiedEnumDtoName;
+	private String entityName;
+	private String pckgEntity;
+	private String dtoName;
+	private String pckgDto;
+
+	@Before
+	public void initialize(){
+		entityName = "Mcategory";
+		pckgEntity = "org.eclipse.osbp.foodmart.entities";
+		dtoName = "McategoryDto";
+		pckgDto = "org.eclipse.osbp.foodmart.dtos";
+		qualifiedEntityName = "org.eclipse.osbp.foodmart.entities.Mcategory";
+		qualifiedDtoName = "org.eclipse.osbp.foodmart.dtos.McategoryDto";
+//		qualifiedEnumName = "org.eclipse.osbp.foodmart.entities.MEnum";
+//		qualifiedEnumDtoName = "org.eclipse.osbp.foodmart.dtos.MEnum";
+	}
+	
+	@Test
+	public void testGetQualifiedDtoNameForQualifiedEntityName() {
+		String qualifiedDtoName = EntityUtils.getQualifiedDtoNameForQualifiedEntityName(qualifiedEntityName);
+		assertEquals(this.qualifiedDtoName, qualifiedDtoName);
+//		String qualifiedEnumDtoName = EntityUtils.getQualifiedDtoNameForQualifiedEntityName(qualifiedEntityName);
+//		assertEquals(this.qualifiedEnumDtoName, qualifiedEnumDtoName);
+		String dtoName = NamingConventionsUtil.toDtoName(entityName);
+		assertEquals(this.dtoName, dtoName);
+		String pckgDto = NamingConventionsUtil.toDtoPackage(pckgEntity);
+		assertEquals(this.pckgDto, pckgDto);
+	}
+
+}
diff --git a/org.eclipse.osbp.utils/test/org/eclipse/osbp/utils/currency/test/Sample.java b/org.eclipse.osbp.utils/test/org/eclipse/osbp/utils/currency/test/Sample.java
new file mode 100644
index 0000000..d43c9ef
--- /dev/null
+++ b/org.eclipse.osbp.utils/test/org/eclipse/osbp/utils/currency/test/Sample.java
@@ -0,0 +1,50 @@
+/**
+ *                                                                            
+ * 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.utils.currency.test;
+
+import java.util.Currency;
+import java.util.Locale;
+
+import org.joda.money.CurrencyUnit;
+
+import org.eclipse.osbp.utils.currency.EuroBasedExchangeReferenceRates;
+
+
+public class Sample {
+
+	public static void main(String[] args) {
+		Locale locale = Locale.getDefault();
+		System.err.println(locale+" = "+locale.getDisplayName());
+		CurrencyUnit current = CurrencyUnit.of(locale);
+		System.err.println(information(current));
+		System.err.println("total "+CurrencyUnit.registeredCurrencies().size()+" currencies");
+		for	(CurrencyUnit available : CurrencyUnit.registeredCurrencies()) {
+			if	(!current.equals(available)) {
+				System.err.println(information(available));
+			}
+		}
+		EuroBasedExchangeReferenceRates.loadEuroForeignExchangeReferenceRates();
+		System.err.println("total "+EuroBasedExchangeReferenceRates.registeredCurrencies().size()+" currencies");
+		for	(CurrencyUnit available : EuroBasedExchangeReferenceRates.registeredCurrencies()) {
+//			if	(!current.equals(available)) {
+				System.err.println(EuroBasedExchangeReferenceRates.getCurrencyConversionData(available).toString());
+//			}
+		}
+		EuroBasedExchangeReferenceRates.unloadEuroForeignExchangeReferenceRates();
+	}
+	
+	private static String information(CurrencyUnit currencyUnit) {
+		Currency currency = currencyUnit.toCurrency();
+		return currencyUnit.getCode()+" = "+currencyUnit.getSymbol()+" = "+currency.getDisplayName()+" / "+currencyUnit.getDefaultFractionDigits()+" digits";
+	}
+}
diff --git a/org.eclipse.osbp.utils/test/org/eclipse/osbp/utils/fillertext/test/FillerTextExample.java b/org.eclipse.osbp.utils/test/org/eclipse/osbp/utils/fillertext/test/FillerTextExample.java
new file mode 100644
index 0000000..d539d51
--- /dev/null
+++ b/org.eclipse.osbp.utils/test/org/eclipse/osbp/utils/fillertext/test/FillerTextExample.java
@@ -0,0 +1,132 @@
+/**
+ *                                                                            
+ * 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.utils.fillertext.test;
+
+import java.util.Locale;
+
+import org.eclipse.osbp.utils.fillertext.FillerTextProvider;
+import org.eclipse.osbp.utils.fillertext.FillerTextType;
+
+/**
+ *  Example generating some filler text ("Blindtext").<br>
+ *  It's not possible to unit test it, because everytime new values will be generated! 
+ */
+public class FillerTextExample {
+	
+	private static void result(String variable, Object...values) {
+		System.out.format("%-50s >", variable);
+		for	(Object value : values) {
+			System.out.print(" = "+value.toString());
+		}
+		System.out.println();
+	}
+	
+	public static void main(String[] args) {
+		
+		Locale [] locales = new Locale[] {
+			Locale.GERMAN,
+			Locale.ENGLISH,
+			Locale.forLanguageTag("pl")
+		};
+
+		// --- sample using the api in different ways ---
+		System.out.println("=== api examples ===");
+		{
+			FillerTextProvider provider = FillerTextProvider.get(Locale.GERMAN);
+			
+			// --- it's possible to use either the generic {@link FillerTextProvider#generate()} or the specific methods ---
+			System.out.println("--- some date and time filler texts ---");
+			result("Date 'past 10 years' via enum",					provider.generate(FillerTextType.DATE, -10));
+			result("Date 'past 10 years' via string",				provider.generate("date", -10));
+			result("Date 'past 10 years' via string",				provider.generate("DATE", -10));
+			result("Date 'past 10 years' via API",					provider.date(-10));
+			
+			result("Date 'future 5 years'",							provider.generate("Date", 5));
+			
+			result("Date 'between 1980 and 1990'",					provider.date(1980, 1990));
+			result("Date 'between past 10 and future 20 years'",	provider.date(-10, 20));
+			
+			result("Time",											provider.time());
+
+			result("Timestamp within this year",					provider.timestamp());
+
+			System.out.println("--- some integer and double filler texts ---");
+			result("Unsigned Integer - default", 			(Integer)provider.unsignedinteger());
+			result("Unsigned Integer - maximum 365", 		(Integer)provider.unsignedinteger(365), (Integer)provider.generate("unsignedinteger", 365), (Integer)provider.generate(FillerTextType.UNSIGNEDINTEGER, 365));
+			result("Unsigned Integer - between 18 and 65", 	(Integer)provider.unsignedinteger(18, 65));
+			
+			result("Signed Integer - default", 				(Integer)provider.signedinteger());
+			result("Signed Integer - range -365 to 365",	(Integer)provider.signedinteger(365), (Integer)provider.generate("signedinteger", 365), (Integer)provider.generate(FillerTextType.SIGNEDINTEGER, 365));
+			result("Signed Integer - between -18 and 65", 	(Integer)provider.signedinteger(-18, 65), (Integer)provider.generate("signedinteger", -18, 65), (Integer)provider.generate(FillerTextType.SIGNEDINTEGER, -18, 65));
+			
+			result("Unsigned Double - default", 						(Double)provider.unsigneddouble());
+			result("Unsigned Double - 3 decimals",	 					(Double)provider.unsigneddouble(3));
+			result("Unsigned Double - 1 decimal, max 10",				(Double)provider.unsigneddouble(1, 10.0), (Double)provider.generate("unsigneddouble", 1, 10.0), (Double)provider.generate(FillerTextType.UNSIGNEDDOUBLE, 1, 10.0));
+			result("Unsigned Double - 1 decimal, between 10 and 20", 	(Double)provider.unsigneddouble(1, 10.0, 20.0), (Double)provider.generate("unsigneddouble", 1, 10.0, 20.0), (Double)provider.generate(FillerTextType.UNSIGNEDDOUBLE, 1, 10.0, 20.0));
+			
+			result("Unsigned Double - default", 						(Double)provider.signeddouble());
+			result("Unsigned Double - 3 decimals",	 					(Double)provider.signeddouble(3));
+			result("Unsigned Double - 1 decimal, range -10 to 10",		(Double)provider.signeddouble(1, 10.0), (Double)provider.generate("signeddouble", 1, 10.0), (Double)provider.generate(FillerTextType.SIGNEDDOUBLE, 1, 10.0));
+			result("Unsigned Double - 1 decimal, between -10 and 20", 	(Double)provider.signeddouble(1, -10.0, 20.0), (Double)provider.generate("signeddouble", 1, -10.0, 20.0), (Double)provider.generate(FillerTextType.SIGNEDDOUBLE, 1, -10.0, 20.0));
+
+			System.out.println("--- some text filler texts ---");
+			result("one word", 		provider.word());
+			result("5 words", 		provider.words(5));
+			result("one sentence", 	provider.sentence());
+			result("5 sentences", 	provider.sentences(5));
+			result("one paragraph", provider.paragraph());
+			result("5 paragraphs", 	provider.paragraphs(5));
+			
+//			System.out.println("--- a example person filler text ---");
+//			result("First name",	provider.firstName(), provider.generate("firstname"), provider.generate(FillerTextType.FIRSTNAME));
+//			result("Last name",		provider.lastName(), provider.generate("lastName"), provider.generate(FillerTextType.LASTNAME));
+//			result("Full name",		provider.fullName(), provider.generate("fullName"), provider.generate(FillerTextType.FULLNAME));
+//			result("Email",			provider.email(), provider.generate("email"), provider.generate(FillerTextType.EMAIL));
+//			result("City",			provider.city(), provider.generate("city"), provider.generate(FillerTextType.CITY));
+//			result("Postal code",	provider.postalCode(), provider.generate("postalCode"), provider.generate(FillerTextType.POSTALCODE));
+
+//			System.out.println("--- THE SAME example person filler text ---");
+//			result("First name",	provider.firstName());
+//			result("Last name",		provider.generate(FillerTextType.LASTNAME));
+//			result("Full name",		provider.generate("fullname"));
+//			result("Email",			provider.email());
+//			result("City",			provider.city());
+//			result("Postal code",	provider.postalCode());
+			
+//			System.out.println("--- another example person filler text because of calling provider.reset() ---");
+//			provider.reset();
+//			result("First name",	provider.firstName());
+//			result("Last name",		provider.generate(FillerTextType.LASTNAME));
+//			result("Full name",		provider.generate("fullname"));
+//			result("Email",			provider.email());
+//			result("City",			provider.city());
+//			result("Postal code",	provider.postalCode());
+		}
+		
+		System.out.println("=== start ===");
+		// --- traverse all requested locales ---
+		for	(Locale locale : locales) {
+			System.out.println("--- locale: "+locale.toString());
+			
+			FillerTextProvider provider = FillerTextProvider.get(locale);
+			provider.reset();
+			// --- use every filler text type ---
+			for	(FillerTextType type : FillerTextType.values()) {
+				result(type.toString(), provider.generate(type));
+			}
+			System.out.println();
+		}
+		System.out.println("=== done ===");
+	}
+	
+}
diff --git a/org.eclipse.osbp.utils/xtend-gen/org/eclipse/osbp/utils/annotation/CommonUtils.java b/org.eclipse.osbp.utils/xtend-gen/org/eclipse/osbp/utils/annotation/CommonUtils.java
new file mode 100644
index 0000000..f0ee58b
--- /dev/null
+++ b/org.eclipse.osbp.utils/xtend-gen/org/eclipse/osbp/utils/annotation/CommonUtils.java
@@ -0,0 +1,139 @@
+/**
+ * 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
+ * 
+ * 
+ *  This copyright notice shows up in the generated Java code
+ */
+package org.eclipse.osbp.utils.annotation;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import javax.inject.Inject;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.common.types.JvmAnnotationReference;
+import org.eclipse.xtext.common.types.JvmAnnotationValue;
+import org.eclipse.xtext.common.types.JvmBooleanAnnotationValue;
+import org.eclipse.xtext.common.types.JvmEnumAnnotationValue;
+import org.eclipse.xtext.common.types.JvmEnumerationLiteral;
+import org.eclipse.xtext.common.types.JvmOperation;
+import org.eclipse.xtext.common.types.JvmStringAnnotationValue;
+import org.eclipse.xtext.common.types.JvmTypeAnnotationValue;
+import org.eclipse.xtext.common.types.JvmTypeReference;
+import org.eclipse.xtext.common.types.TypesFactory;
+
+@SuppressWarnings("all")
+public class CommonUtils {
+  @Inject
+  private TypesFactory typesFactory;
+  
+  public void addStringValuesToAnnotation(final JvmAnnotationReference annotationRef, final ArrayList<String> annotationStringList) {
+    JvmStringAnnotationValue value = this.typesFactory.createJvmStringAnnotationValue();
+    for (final String annotationString : annotationStringList) {
+      EList<String> _values = value.getValues();
+      _values.add(annotationString);
+    }
+    EList<JvmAnnotationValue> _explicitValues = annotationRef.getExplicitValues();
+    _explicitValues.add(value);
+  }
+  
+  /**
+   * Creates a string annotation value and adds it to the given annotation reference
+   */
+  protected JvmAnnotationValue _addAnnAttr(final JvmAnnotationReference annRef, final EObject context, final String name, final String stringValue) {
+    final String[] stringValues = { stringValue };
+    return this.addAnnAttrArr(annRef, context, name, stringValues);
+  }
+  
+  /**
+   * Creates a string annotation value and adds it to the given annotation reference
+   */
+  public JvmStringAnnotationValue addAnnAttrArr(final JvmAnnotationReference annRef, final EObject context, final String name, final String[] stringValues) {
+    final JvmStringAnnotationValue value = this.typesFactory.createJvmStringAnnotationValue();
+    EList<JvmAnnotationValue> _explicitValues = annRef.getExplicitValues();
+    _explicitValues.add(value);
+    final JvmOperation op = this.typesFactory.createJvmOperation();
+    op.setSimpleName(name);
+    value.setOperation(op);
+    for (final String stringValue : stringValues) {
+      EList<String> _values = value.getValues();
+      _values.add(stringValue);
+    }
+    return value;
+  }
+  
+  /**
+   * Creates a boolean annotation value and adds it to the given annotation reference
+   */
+  protected JvmAnnotationValue _addAnnAttr(final JvmAnnotationReference annRef, final EObject context, final String name, final boolean booleanValue) {
+    final JvmBooleanAnnotationValue value = this.typesFactory.createJvmBooleanAnnotationValue();
+    EList<JvmAnnotationValue> _explicitValues = annRef.getExplicitValues();
+    _explicitValues.add(value);
+    final JvmOperation op = this.typesFactory.createJvmOperation();
+    op.setSimpleName(name);
+    value.setOperation(op);
+    EList<Boolean> _values = value.getValues();
+    _values.add(Boolean.valueOf(booleanValue));
+    return value;
+  }
+  
+  /**
+   * Creates a string annotation value and adds it to the given annotation reference
+   */
+  protected JvmAnnotationValue _addAnnAttr(final JvmAnnotationReference annRef, final EObject context, final String name, final JvmTypeReference typeValue) {
+    final JvmTypeAnnotationValue value = this.typesFactory.createJvmTypeAnnotationValue();
+    EList<JvmAnnotationValue> _explicitValues = annRef.getExplicitValues();
+    _explicitValues.add(value);
+    final JvmOperation op = this.typesFactory.createJvmOperation();
+    op.setSimpleName(name);
+    value.setOperation(op);
+    EList<JvmTypeReference> _values = value.getValues();
+    _values.add(typeValue);
+    return value;
+  }
+  
+  /**
+   * Creates an enum annotation value and adds it to the given annotation reference
+   */
+  protected JvmAnnotationValue _addAnnAttr(final JvmAnnotationReference annRef, final EObject context, final String name, final Enum<?>... enums) {
+    final JvmEnumAnnotationValue value = this.typesFactory.createJvmEnumAnnotationValue();
+    EList<JvmAnnotationValue> _explicitValues = annRef.getExplicitValues();
+    _explicitValues.add(value);
+    for (final Enum<?> enumxx : enums) {
+      {
+        final JvmOperation op = this.typesFactory.createJvmOperation();
+        op.setSimpleName(name);
+        value.setOperation(op);
+        final JvmEnumerationLiteral literal = this.typesFactory.createJvmEnumerationLiteral();
+        String _name = enumxx.name();
+        literal.setSimpleName(_name);
+        EList<JvmEnumerationLiteral> _values = value.getValues();
+        _values.add(literal);
+      }
+    }
+    return value;
+  }
+  
+  public JvmAnnotationValue addAnnAttr(final JvmAnnotationReference annRef, final EObject context, final String name, final Object typeValue) {
+    if (typeValue instanceof JvmTypeReference) {
+      return _addAnnAttr(annRef, context, name, (JvmTypeReference)typeValue);
+    } else if (typeValue instanceof Boolean) {
+      return _addAnnAttr(annRef, context, name, (Boolean)typeValue);
+    } else if (typeValue instanceof String) {
+      return _addAnnAttr(annRef, context, name, (String)typeValue);
+    } else if (typeValue instanceof Enum[]) {
+      return _addAnnAttr(annRef, context, name, (Enum<?>[])typeValue);
+    } else {
+      throw new IllegalArgumentException("Unhandled parameter types: " +
+        Arrays.<Object>asList(annRef, context, name, typeValue).toString());
+    }
+  }
+}
diff --git a/org.eclipse.osbp.utils/xtend-gen/org/eclipse/osbp/utils/common/EntityUtils.java b/org.eclipse.osbp.utils/xtend-gen/org/eclipse/osbp/utils/common/EntityUtils.java
new file mode 100644
index 0000000..19920b1
--- /dev/null
+++ b/org.eclipse.osbp.utils/xtend-gen/org/eclipse/osbp/utils/common/EntityUtils.java
@@ -0,0 +1,284 @@
+/**
+ * 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
+ * 
+ * 
+ *  This copyright notice shows up in the generated Java code
+ */
+package org.eclipse.osbp.utils.common;
+
+import com.google.common.base.Objects;
+import java.util.Iterator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.osbp.dsl.semantic.common.types.LEnum;
+import org.eclipse.osbp.dsl.semantic.common.types.LType;
+import org.eclipse.osbp.dsl.semantic.common.types.LTypedPackage;
+import org.eclipse.osbp.dsl.semantic.dto.LDto;
+import org.eclipse.osbp.dsl.semantic.dto.OSBPDtoPackage;
+import org.eclipse.osbp.dsl.semantic.dto.util.NamingConventionsUtil;
+import org.eclipse.osbp.dsl.semantic.entity.LBean;
+import org.eclipse.osbp.dsl.semantic.entity.LEntity;
+import org.eclipse.osbp.dsl.semantic.entity.OSBPEntityPackage;
+import org.eclipse.osbp.utils.common.ServiceListener;
+import org.eclipse.xtend2.lib.StringConcatenation;
+import org.eclipse.xtext.common.types.JvmType;
+import org.eclipse.xtext.naming.QualifiedName;
+import org.eclipse.xtext.resource.IEObjectDescription;
+import org.eclipse.xtext.xbase.lib.Exceptions;
+
+@SuppressWarnings("all")
+public class EntityUtils {
+  public static String getQualifiedDtoNameForEntity(final JvmType type) {
+    try {
+      String qualifiedEntityName = type.getQualifiedName();
+      Resource _eResource = type.eResource();
+      ResourceSet resourceSet = _eResource.getResourceSet();
+      String searchName = EntityUtils.getQualifiedDtoNameForQualifiedEntityName(qualifiedEntityName);
+      final Iterable<IEObjectDescription> objectDescs = ServiceListener.getEObjectDescriptions(OSBPDtoPackage.Literals.LDTO, searchName);
+      Iterator<IEObjectDescription> _iterator = objectDescs.iterator();
+      boolean _hasNext = _iterator.hasNext();
+      if (_hasNext) {
+        Iterator<IEObjectDescription> _iterator_1 = objectDescs.iterator();
+        final IEObjectDescription eobjectDesc = _iterator_1.next();
+        boolean _notEquals = (!Objects.equal(resourceSet, null));
+        if (_notEquals) {
+          QualifiedName _name = eobjectDesc.getName();
+          return _name.toString();
+        }
+      }
+    } catch (final Throwable _t) {
+      if (_t instanceof Exception) {
+        final Exception e = (Exception)_t;
+        e.printStackTrace();
+      } else {
+        throw Exceptions.sneakyThrow(_t);
+      }
+    }
+    return null;
+  }
+  
+  /**
+   * get the full qualified dto name for a LEnum
+   * <br>
+   * <b>The DTO for an LEnum <u>never</u> ends with the postfix <code>Dto</code>!</b>
+   */
+  public static String getDtoFQNForLEnum(final LEnum lenum) {
+    EObject container = ((EObject) lenum);
+    while (((!Objects.equal(container, null)) && (!(container instanceof LTypedPackage)))) {
+      EObject _eContainer = container.eContainer();
+      container = _eContainer;
+    }
+    StringConcatenation _builder = new StringConcatenation();
+    String _name = ((LTypedPackage) container).getName();
+    _builder.append(_name, "");
+    _builder.append(".");
+    String _name_1 = lenum.getName();
+    _builder.append(_name_1, "");
+    return EntityUtils.applyDtoPackageNameFromEntityPackageNameForEnum(_builder.toString());
+  }
+  
+  /**
+   * get the full qualified dto name for a LBean
+   * <br>
+   * <b>The DTO for an LBean <u>always</u> ends with the postfix <code>Dto</code>!</b>
+   */
+  public static String getDtoFQNForLBean(final LBean bean) {
+    String _fQNForLBean = EntityUtils.getFQNForLBean(bean);
+    return EntityUtils.getQualifiedDtoNameForQualifiedEntityName(_fQNForLBean);
+  }
+  
+  /**
+   * get the full qualified dto name for a LEntity
+   * <br>
+   * <b>The DTO for an LEntity <u>always</u> ends with the postfix <code>Dto</code>!</b>
+   */
+  public static String getDtoFQNForLEntity(final LEntity entity) {
+    String _fQNForLEntity = EntityUtils.getFQNForLEntity(entity);
+    return EntityUtils.getQualifiedDtoNameForQualifiedEntityName(_fQNForLEntity);
+  }
+  
+  /**
+   * get the full qualified name for a LEntity
+   */
+  public static String getFQNForLEntity(final LEntity entity) {
+    StringConcatenation _builder = new StringConcatenation();
+    EObject _eContainer = entity.eContainer();
+    String _name = ((LTypedPackage) _eContainer).getName();
+    _builder.append(_name, "");
+    _builder.append(".");
+    String _name_1 = entity.getName();
+    _builder.append(_name_1, "");
+    return _builder.toString();
+  }
+  
+  /**
+   * get the full qualified name for a LBean
+   */
+  public static String getFQNForLBean(final LBean bean) {
+    StringConcatenation _builder = new StringConcatenation();
+    EObject _eContainer = bean.eContainer();
+    String _name = ((LTypedPackage) _eContainer).getName();
+    _builder.append(_name, "");
+    _builder.append(".");
+    String _name_1 = bean.getName();
+    _builder.append(_name_1, "");
+    return _builder.toString();
+  }
+  
+  /**
+   * get the full qualified dto name for a LEntity!
+   * <br>
+   * <b>The DTO for an LEntity <u>always</u> ends with the postfix <code>Dto</code>!</b>
+   */
+  public static String getQualifiedDtoNameForQualifiedEntityName(final String qualifiedEntityName) {
+    return NamingConventionsUtil.toDtoQualifiedName(qualifiedEntityName);
+  }
+  
+  private final static String DTOS_PACKAGE_TOKEN = ".dtos.";
+  
+  /**
+   * <b><u>Dirty Hack</u></b>: Apply the package name modification from LEnum to LDto
+   * <br>
+   * <b>The LEnum <u>may or may not</u> reside in a package <code>*.entities.*</code>!</b>
+   * <br>
+   * <b>The LDto <u>always</u> resides in a package <code>*.dtos.*</code>!</b>
+   */
+  protected static String applyDtoPackageNameFromEntityPackageNameForEnum(final String fullQualifiedEnumName) {
+    String fullQualifiedDtoName = NamingConventionsUtil.toDtoQualifiedNameForEnum(fullQualifiedEnumName);
+    boolean _contains = fullQualifiedDtoName.contains(EntityUtils.DTOS_PACKAGE_TOKEN);
+    boolean _not = (!_contains);
+    if (_not) {
+      int lastDot = fullQualifiedDtoName.lastIndexOf(".");
+      String _substring = fullQualifiedDtoName.substring(0, lastDot);
+      String _plus = (_substring + EntityUtils.DTOS_PACKAGE_TOKEN);
+      String _substring_1 = fullQualifiedDtoName.substring((lastDot + 1));
+      String _plus_1 = (_plus + _substring_1);
+      fullQualifiedDtoName = _plus_1;
+    }
+    return fullQualifiedDtoName;
+  }
+  
+  public static LEntity getEntityFromDto(final JvmType type) {
+    LEntity entity = null;
+    try {
+      String qualifiedDtoName = type.getQualifiedName();
+      Resource _eResource = type.eResource();
+      ResourceSet resourceSet = _eResource.getResourceSet();
+      final Iterable<IEObjectDescription> objectDescs = ServiceListener.getEObjectDescriptions(OSBPDtoPackage.Literals.LDTO, qualifiedDtoName);
+      Iterator<IEObjectDescription> _iterator = objectDescs.iterator();
+      boolean _hasNext = _iterator.hasNext();
+      if (_hasNext) {
+        Iterator<IEObjectDescription> _iterator_1 = objectDescs.iterator();
+        final IEObjectDescription eobjectDesc = _iterator_1.next();
+        boolean _notEquals = (!Objects.equal(resourceSet, null));
+        if (_notEquals) {
+          URI _eObjectURI = eobjectDesc.getEObjectURI();
+          EObject _eObject = resourceSet.getEObject(_eObjectURI, true);
+          LDto dto = ((LDto) _eObject);
+          boolean _and = false;
+          boolean _notEquals_1 = (!Objects.equal(dto, null));
+          if (!_notEquals_1) {
+            _and = false;
+          } else {
+            LType _wrappedType = dto.getWrappedType();
+            boolean _notEquals_2 = (!Objects.equal(_wrappedType, null));
+            _and = _notEquals_2;
+          }
+          if (_and) {
+            LType _wrappedType_1 = dto.getWrappedType();
+            boolean _eIsProxy = _wrappedType_1.eIsProxy();
+            if (_eIsProxy) {
+              String _replace = qualifiedDtoName.replace(".dtos.", ".entities.");
+              String _replace_1 = _replace.replace("Dto", "");
+              final Iterable<IEObjectDescription> entityDescs = ServiceListener.getEObjectDescriptions(OSBPEntityPackage.Literals.LENTITY, _replace_1);
+              Iterator<IEObjectDescription> _iterator_2 = entityDescs.iterator();
+              boolean _hasNext_1 = _iterator_2.hasNext();
+              if (_hasNext_1) {
+                Iterator<IEObjectDescription> _iterator_3 = entityDescs.iterator();
+                final IEObjectDescription entityObjectDesc = _iterator_3.next();
+                boolean _notEquals_3 = (!Objects.equal(resourceSet, null));
+                if (_notEquals_3) {
+                  URI _eObjectURI_1 = entityObjectDesc.getEObjectURI();
+                  EObject _eObject_1 = resourceSet.getEObject(_eObjectURI_1, true);
+                  entity = ((LEntity) _eObject_1);
+                }
+              }
+            } else {
+              LType _wrappedType_2 = dto.getWrappedType();
+              entity = ((LEntity) _wrappedType_2);
+            }
+          }
+        }
+      }
+    } catch (final Throwable _t) {
+      if (_t instanceof Exception) {
+        final Exception e = (Exception)_t;
+      } else {
+        throw Exceptions.sneakyThrow(_t);
+      }
+    }
+    return entity;
+  }
+  
+  public static LEntity getEntityFromDto(final LDto dto) {
+    LEntity entity = null;
+    boolean _and = false;
+    boolean _notEquals = (!Objects.equal(dto, null));
+    if (!_notEquals) {
+      _and = false;
+    } else {
+      LType _wrappedType = dto.getWrappedType();
+      boolean _notEquals_1 = (!Objects.equal(_wrappedType, null));
+      _and = _notEquals_1;
+    }
+    if (_and) {
+      LType _wrappedType_1 = dto.getWrappedType();
+      boolean _eIsProxy = _wrappedType_1.eIsProxy();
+      if (_eIsProxy) {
+        throw new IllegalStateException();
+      } else {
+        LType _wrappedType_2 = dto.getWrappedType();
+        entity = ((LEntity) _wrappedType_2);
+      }
+    }
+    return entity;
+  }
+  
+  public static LDto getDto(final JvmType type) {
+    try {
+      String qualifiedDtoName = type.getQualifiedName();
+      Resource _eResource = type.eResource();
+      ResourceSet resourceSet = _eResource.getResourceSet();
+      final Iterable<IEObjectDescription> objectDescs = ServiceListener.getEObjectDescriptions(OSBPDtoPackage.Literals.LDTO, qualifiedDtoName);
+      Iterator<IEObjectDescription> _iterator = objectDescs.iterator();
+      boolean _hasNext = _iterator.hasNext();
+      if (_hasNext) {
+        Iterator<IEObjectDescription> _iterator_1 = objectDescs.iterator();
+        final IEObjectDescription eobjectDesc = _iterator_1.next();
+        boolean _notEquals = (!Objects.equal(resourceSet, null));
+        if (_notEquals) {
+          URI _eObjectURI = eobjectDesc.getEObjectURI();
+          EObject _eObject = resourceSet.getEObject(_eObjectURI, true);
+          return ((LDto) _eObject);
+        }
+      }
+    } catch (final Throwable _t) {
+      if (_t instanceof Exception) {
+        final Exception e = (Exception)_t;
+      } else {
+        throw Exceptions.sneakyThrow(_t);
+      }
+    }
+    return null;
+  }
+}
diff --git a/org.eclipse.osbp.utils/xtend-gen/org/eclipse/osbp/utils/constants/GeneratorConstants.java b/org.eclipse.osbp.utils/xtend-gen/org/eclipse/osbp/utils/constants/GeneratorConstants.java
new file mode 100644
index 0000000..4b53567
--- /dev/null
+++ b/org.eclipse.osbp.utils/xtend-gen/org/eclipse/osbp/utils/constants/GeneratorConstants.java
@@ -0,0 +1,41 @@
+/**
+ * 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
+ * 
+ * 
+ *  This copyright notice shows up in the generated Java code
+ */
+package org.eclipse.osbp.utils.constants;
+
+import org.eclipse.xtend2.lib.StringConcatenation;
+import org.eclipse.xtext.xbase.lib.Functions.Function0;
+
+@SuppressWarnings("all")
+public class GeneratorConstants {
+  public final static String GENERATED_CLASSES_DOCUMENTATION = new Function0<String>() {
+    public String apply() {
+      StringConcatenation _builder = new StringConcatenation();
+      _builder.append("<b>This class was auto generated! Leave it unmodified to avoid unpredictable results!</b>");
+      return _builder.toString();
+    }
+  }.apply();
+  
+  public final static String I18N_RESOURCE_PATH_NAME = "i18n";
+  
+  private final static String I18N_RESOURCE_FILE_NAME = "I18N";
+  
+  private final static String I18N_RESOURCE_FILE_EXTENSION = ".properties";
+  
+  public final static String I18N_RESOURCE_FULL_FILE_NAME = (GeneratorConstants.I18N_RESOURCE_FILE_NAME + GeneratorConstants.I18N_RESOURCE_FILE_EXTENSION);
+  
+  public final static String I18N_RESOURCE_FULL_PATH_NAME = (((GeneratorConstants.I18N_RESOURCE_PATH_NAME + "/") + GeneratorConstants.I18N_RESOURCE_FILE_NAME) + GeneratorConstants.I18N_RESOURCE_FILE_EXTENSION);
+  
+  public final static String I18N_RESOURCE_FULL_BUNDLE_NAME = ((GeneratorConstants.I18N_RESOURCE_PATH_NAME + ".") + GeneratorConstants.I18N_RESOURCE_FILE_NAME);
+}
diff --git a/org.eclipse.osbp.utils/xtend-gen/org/eclipse/osbp/utils/constants/PathConstants.java b/org.eclipse.osbp.utils/xtend-gen/org/eclipse/osbp/utils/constants/PathConstants.java
new file mode 100644
index 0000000..8d10986
--- /dev/null
+++ b/org.eclipse.osbp.utils/xtend-gen/org/eclipse/osbp/utils/constants/PathConstants.java
@@ -0,0 +1,38 @@
+/**
+ * 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
+ * 
+ * 
+ *  This copyright notice shows up in the generated Java code
+ */
+package org.eclipse.osbp.utils.constants;
+
+import org.eclipse.xtend2.lib.StringConcatenation;
+import org.eclipse.xtext.xbase.lib.Functions.Function0;
+
+@SuppressWarnings("all")
+public class PathConstants {
+  public final static String JS_PLUGIN_PREFIX = new Function0<String>() {
+    public String apply() {
+      StringConcatenation _builder = new StringConcatenation();
+      _builder.append("theme://plugin/");
+      return _builder.toString();
+    }
+  }.apply();
+  
+  public final static String COMPEX_UTILS_JS_PLUGIN_PATH = new Function0<String>() {
+    public String apply() {
+      StringConcatenation _builder = new StringConcatenation();
+      _builder.append(PathConstants.JS_PLUGIN_PREFIX, "");
+      _builder.append("org.eclipse.osbp.utils.js/org/eclipse/osbp/utils/js/");
+      return _builder.toString();
+    }
+  }.apply();
+}
diff --git a/org.eclipse.osbp.utils/xtend-gen/org/eclipse/osbp/utils/entityhelper/DataType.java b/org.eclipse.osbp.utils/xtend-gen/org/eclipse/osbp/utils/entityhelper/DataType.java
new file mode 100644
index 0000000..06dfb50
--- /dev/null
+++ b/org.eclipse.osbp.utils/xtend-gen/org/eclipse/osbp/utils/entityhelper/DataType.java
@@ -0,0 +1,404 @@
+/**
+ * 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
+ * 
+ * 
+ *  This copyright notice shows up in the generated Java code
+ */
+package org.eclipse.osbp.utils.entityhelper;
+
+import com.google.common.base.Objects;
+import com.google.inject.Inject;
+import java.util.Date;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.osbp.dsl.semantic.common.types.LDataType;
+import org.eclipse.osbp.dsl.semantic.common.types.LScalarType;
+import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute;
+import org.eclipse.osbp.ecview.dsl.extensions.TypeHelper;
+import org.eclipse.osbp.ui.api.datamart.IDataMart;
+import org.eclipse.xtext.common.types.JvmEnumerationType;
+import org.eclipse.xtext.common.types.JvmType;
+import org.eclipse.xtext.common.types.JvmTypeReference;
+import org.eclipse.xtext.common.types.access.IJvmTypeProvider;
+import org.eclipse.xtext.xbase.lib.Extension;
+
+@SuppressWarnings("all")
+public class DataType {
+  @Inject
+  @Extension
+  private TypeHelper typeHelper;
+  
+  @Inject
+  private IJvmTypeProvider.Factory typeProviderFactory;
+  
+  public LDataType getLDataType(final LEntityAttribute attributeRef) {
+    LScalarType type = attributeRef.getType();
+    LDataType lDataType = ((LDataType) null);
+    if ((type instanceof LDataType)) {
+      lDataType = ((LDataType) type);
+    }
+    return lDataType;
+  }
+  
+  public JvmType getJvmType(final LEntityAttribute attributeRef) {
+    LScalarType type = attributeRef.getType();
+    LDataType lDataType = ((LDataType) null);
+    JvmType ltype = ((JvmType) null);
+    if ((type instanceof LDataType)) {
+      lDataType = ((LDataType) type);
+      boolean _isDate = lDataType.isDate();
+      if (_isDate) {
+        Resource _eResource = attributeRef.eResource();
+        ResourceSet _resourceSet = _eResource.getResourceSet();
+        final IJvmTypeProvider typeProvider = this.getTypeProvider(_resourceSet);
+        String _name = Date.class.getName();
+        return typeProvider.findTypeByName(_name);
+      } else {
+        boolean _isAsBlob = lDataType.isAsBlob();
+        if (_isAsBlob) {
+          Resource _eResource_1 = attributeRef.eResource();
+          ResourceSet _resourceSet_1 = _eResource_1.getResourceSet();
+          final IJvmTypeProvider typeProvider_1 = this.getTypeProvider(_resourceSet_1);
+          return typeProvider_1.findTypeByName("byte[]");
+        } else {
+          JvmTypeReference jvmTypeReference = lDataType.getJvmTypeReference();
+          JvmType _type = jvmTypeReference.getType();
+          ltype = _type;
+          boolean _notEquals = (!Objects.equal(ltype, null));
+          if (_notEquals) {
+            return ltype;
+          }
+        }
+      }
+    }
+    JvmTypeReference typeJvm = attributeRef.getTypeJvm();
+    JvmType typeJvmType = typeJvm.getType();
+    return typeJvmType;
+  }
+  
+  public IJvmTypeProvider getTypeProvider(final ResourceSet rs) {
+    return this.typeProviderFactory.findOrCreateTypeProvider(rs);
+  }
+  
+  public IDataMart.EType getBasicType(final String typeIdentifier) {
+    boolean _notEquals = (!Objects.equal(typeIdentifier, null));
+    if (_notEquals) {
+      String identifier = typeIdentifier;
+      boolean _startsWith = typeIdentifier.startsWith("java.lang.");
+      if (_startsWith) {
+        int _length = "java.lang.".length();
+        String _substring = typeIdentifier.substring(_length);
+        String _lowerCase = _substring.toLowerCase();
+        identifier = _lowerCase;
+      }
+      boolean _matched = false;
+      if (!_matched) {
+        if (Objects.equal(identifier, "boolean")) {
+          _matched=true;
+          return IDataMart.EType.BOOLEAN;
+        }
+      }
+      if (!_matched) {
+        if (Objects.equal(identifier, "byte")) {
+          _matched=true;
+          return IDataMart.EType.BYTE;
+        }
+      }
+      if (!_matched) {
+        if (Objects.equal(identifier, "short")) {
+          _matched=true;
+          return IDataMart.EType.SHORT;
+        }
+      }
+      if (!_matched) {
+        if (Objects.equal(identifier, "int")) {
+          _matched=true;
+          return IDataMart.EType.INTEGER;
+        }
+      }
+      if (!_matched) {
+        if (Objects.equal(identifier, "integer")) {
+          _matched=true;
+          return IDataMart.EType.INTEGER;
+        }
+      }
+      if (!_matched) {
+        if (Objects.equal(identifier, "long")) {
+          _matched=true;
+          return IDataMart.EType.LONG;
+        }
+      }
+      if (!_matched) {
+        if (Objects.equal(identifier, "double")) {
+          _matched=true;
+          return IDataMart.EType.DOUBLE;
+        }
+      }
+      if (!_matched) {
+        if (Objects.equal(identifier, "float")) {
+          _matched=true;
+          return IDataMart.EType.FLOAT;
+        }
+      }
+      if (!_matched) {
+        if (Objects.equal(identifier, "BigDecimal")) {
+          _matched=true;
+          return IDataMart.EType.DOUBLE;
+        }
+      }
+      if (!_matched) {
+        if (Objects.equal(identifier, "java.math.BigDecimal")) {
+          _matched=true;
+          return IDataMart.EType.DOUBLE;
+        }
+      }
+      if (!_matched) {
+        if (Objects.equal(identifier, "string")) {
+          _matched=true;
+          return IDataMart.EType.STRING;
+        }
+      }
+      if (!_matched) {
+        if (Objects.equal(identifier, "java.util.Date")) {
+          _matched=true;
+          return IDataMart.EType.DATE;
+        }
+      }
+    }
+    return IDataMart.EType.none;
+  }
+  
+  public IDataMart.EType getBasicType(final JvmType type) {
+    boolean _isBoolean = this.typeHelper.isBoolean(type);
+    if (_isBoolean) {
+      return IDataMart.EType.BOOLEAN;
+    } else {
+      boolean _isNumberWithDigits = this.typeHelper.isNumberWithDigits(type);
+      if (_isNumberWithDigits) {
+        String _identifier = type.getIdentifier();
+        final IDataMart.EType retcode = this.getBasicType(_identifier);
+        boolean _notEquals = (!Objects.equal(retcode, IDataMart.EType.none));
+        if (_notEquals) {
+          return retcode;
+        }
+        return IDataMart.EType.DOUBLE;
+      } else {
+        boolean _isNumberWithoutDigits = this.typeHelper.isNumberWithoutDigits(type);
+        if (_isNumberWithoutDigits) {
+          String _identifier_1 = type.getIdentifier();
+          final IDataMart.EType retcode_1 = this.getBasicType(_identifier_1);
+          boolean _notEquals_1 = (!Objects.equal(retcode_1, IDataMart.EType.none));
+          if (_notEquals_1) {
+            return retcode_1;
+          }
+          return IDataMart.EType.INTEGER;
+        } else {
+          boolean _isString = this.typeHelper.isString(type);
+          if (_isString) {
+            return IDataMart.EType.STRING;
+          } else {
+            boolean _isDate = this.typeHelper.isDate(type);
+            if (_isDate) {
+              return IDataMart.EType.DATE;
+            } else {
+              if ((type instanceof JvmEnumerationType)) {
+                return IDataMart.EType.LENUM;
+              }
+            }
+          }
+        }
+      }
+    }
+    String _identifier_2 = type.getIdentifier();
+    return this.getBasicType(_identifier_2);
+  }
+  
+  public IDataMart.EType getBasicType(final LEntityAttribute attribute) {
+    LDataType lDataType = this.getLDataType(attribute);
+    boolean _notEquals = (!Objects.equal(lDataType, null));
+    if (_notEquals) {
+      boolean _isDate = lDataType.isDate();
+      if (_isDate) {
+        return IDataMart.EType.DATE;
+      }
+      String _name = lDataType.getName();
+      boolean _equals = "blobMapping".equals(_name);
+      if (_equals) {
+        return IDataMart.EType.BLOPMAPPING;
+      }
+    }
+    JvmType _jvmType = this.getJvmType(attribute);
+    return this.getBasicType(_jvmType);
+  }
+  
+  public IDataMart.EType getBasicType(final Class<?> typeClass) {
+    String _canonicalName = typeClass.getCanonicalName();
+    return this.getBasicType(_canonicalName);
+  }
+  
+  public boolean canBeCastFrom(final LEntityAttribute targetAttribute, final Class<?> sourceClass) {
+    IDataMart.EType _basicType = this.getBasicType(sourceClass);
+    return this.canBeCastFrom(targetAttribute, _basicType);
+  }
+  
+  public boolean canBeCastFrom(final LEntityAttribute targetAttribute, final IDataMart.EType sourceType) {
+    IDataMart.EType targetType = this.getBasicType(targetAttribute);
+    if (targetType != null) {
+      switch (targetType) {
+        case BOOLEAN:
+          return Objects.equal(sourceType, IDataMart.EType.BOOLEAN);
+        case BYTE:
+          return Objects.equal(sourceType, IDataMart.EType.BYTE);
+        case DATE:
+          return Objects.equal(sourceType, IDataMart.EType.DATE);
+        case FLOAT:
+          boolean _or = false;
+          boolean _or_1 = false;
+          boolean _or_2 = false;
+          boolean _or_3 = false;
+          boolean _equals = Objects.equal(sourceType, IDataMart.EType.FLOAT);
+          if (_equals) {
+            _or_3 = true;
+          } else {
+            boolean _equals_1 = Objects.equal(sourceType, IDataMart.EType.LONG);
+            _or_3 = _equals_1;
+          }
+          if (_or_3) {
+            _or_2 = true;
+          } else {
+            boolean _equals_2 = Objects.equal(sourceType, IDataMart.EType.INTEGER);
+            _or_2 = _equals_2;
+          }
+          if (_or_2) {
+            _or_1 = true;
+          } else {
+            boolean _equals_3 = Objects.equal(sourceType, IDataMart.EType.SHORT);
+            _or_1 = _equals_3;
+          }
+          if (_or_1) {
+            _or = true;
+          } else {
+            boolean _equals_4 = Objects.equal(sourceType, IDataMart.EType.BOOLEAN);
+            _or = _equals_4;
+          }
+          return _or;
+        case DOUBLE:
+          boolean _or_4 = false;
+          boolean _or_5 = false;
+          boolean _or_6 = false;
+          boolean _or_7 = false;
+          boolean _or_8 = false;
+          boolean _equals_5 = Objects.equal(sourceType, IDataMart.EType.FLOAT);
+          if (_equals_5) {
+            _or_8 = true;
+          } else {
+            boolean _equals_6 = Objects.equal(sourceType, IDataMart.EType.DOUBLE);
+            _or_8 = _equals_6;
+          }
+          if (_or_8) {
+            _or_7 = true;
+          } else {
+            boolean _equals_7 = Objects.equal(sourceType, IDataMart.EType.LONG);
+            _or_7 = _equals_7;
+          }
+          if (_or_7) {
+            _or_6 = true;
+          } else {
+            boolean _equals_8 = Objects.equal(sourceType, IDataMart.EType.INTEGER);
+            _or_6 = _equals_8;
+          }
+          if (_or_6) {
+            _or_5 = true;
+          } else {
+            boolean _equals_9 = Objects.equal(sourceType, IDataMart.EType.SHORT);
+            _or_5 = _equals_9;
+          }
+          if (_or_5) {
+            _or_4 = true;
+          } else {
+            boolean _equals_10 = Objects.equal(sourceType, IDataMart.EType.BOOLEAN);
+            _or_4 = _equals_10;
+          }
+          return _or_4;
+        case SHORT:
+          boolean _or_9 = false;
+          boolean _equals_11 = Objects.equal(sourceType, IDataMart.EType.SHORT);
+          if (_equals_11) {
+            _or_9 = true;
+          } else {
+            boolean _equals_12 = Objects.equal(sourceType, IDataMart.EType.BOOLEAN);
+            _or_9 = _equals_12;
+          }
+          return _or_9;
+        case INTEGER:
+          boolean _or_10 = false;
+          boolean _or_11 = false;
+          boolean _equals_13 = Objects.equal(sourceType, IDataMart.EType.INTEGER);
+          if (_equals_13) {
+            _or_11 = true;
+          } else {
+            boolean _equals_14 = Objects.equal(sourceType, IDataMart.EType.SHORT);
+            _or_11 = _equals_14;
+          }
+          if (_or_11) {
+            _or_10 = true;
+          } else {
+            boolean _equals_15 = Objects.equal(sourceType, IDataMart.EType.BOOLEAN);
+            _or_10 = _equals_15;
+          }
+          return _or_10;
+        case LONG:
+          boolean _or_12 = false;
+          boolean _or_13 = false;
+          boolean _or_14 = false;
+          boolean _equals_16 = Objects.equal(sourceType, IDataMart.EType.LONG);
+          if (_equals_16) {
+            _or_14 = true;
+          } else {
+            boolean _equals_17 = Objects.equal(sourceType, IDataMart.EType.INTEGER);
+            _or_14 = _equals_17;
+          }
+          if (_or_14) {
+            _or_13 = true;
+          } else {
+            boolean _equals_18 = Objects.equal(sourceType, IDataMart.EType.SHORT);
+            _or_13 = _equals_18;
+          }
+          if (_or_13) {
+            _or_12 = true;
+          } else {
+            boolean _equals_19 = Objects.equal(sourceType, IDataMart.EType.BOOLEAN);
+            _or_12 = _equals_19;
+          }
+          return _or_12;
+        case STRING:
+          return true;
+        case TIME:
+          return Objects.equal(sourceType, IDataMart.EType.TIME);
+        case LENUM:
+          boolean _or_15 = false;
+          boolean _equals_20 = Objects.equal(sourceType, IDataMart.EType.INTEGER);
+          if (_equals_20) {
+            _or_15 = true;
+          } else {
+            boolean _equals_21 = Objects.equal(sourceType, IDataMart.EType.BOOLEAN);
+            _or_15 = _equals_21;
+          }
+          return _or_15;
+        case none:
+          return false;
+        default:
+          break;
+      }
+    }
+    return false;
+  }
+}
diff --git a/org.eclipse.osbp.utils/xtend-gen/org/eclipse/osbp/utils/xtext/GenericFormatter.java b/org.eclipse.osbp.utils/xtend-gen/org/eclipse/osbp/utils/xtext/GenericFormatter.java
new file mode 100644
index 0000000..d529006
--- /dev/null
+++ b/org.eclipse.osbp.utils/xtend-gen/org/eclipse/osbp/utils/xtext/GenericFormatter.java
@@ -0,0 +1,286 @@
+/**
+ * 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
+ * 
+ * 
+ *  This copyright notice shows up in the generated Java code
+ */
+package org.eclipse.osbp.utils.xtext;
+
+import com.google.common.base.Objects;
+import java.util.List;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.impl.EClassImpl;
+import org.eclipse.xtext.AbstractRule;
+import org.eclipse.xtext.Grammar;
+import org.eclipse.xtext.GrammarUtil;
+import org.eclipse.xtext.IGrammarAccess;
+import org.eclipse.xtext.Keyword;
+import org.eclipse.xtext.ParserRule;
+import org.eclipse.xtext.RuleCall;
+import org.eclipse.xtext.TerminalRule;
+import org.eclipse.xtext.TypeRef;
+import org.eclipse.xtext.formatting.impl.FormattingConfig;
+import org.eclipse.xtext.impl.ParserRuleImpl;
+import org.eclipse.xtext.util.Pair;
+import org.eclipse.xtext.xbase.services.XtypeGrammarAccess;
+
+@SuppressWarnings("all")
+public class GenericFormatter {
+  /**
+   * <p>
+   * Variant of method when no import block is specified. Then only one empty line before each
+   * first level element of the given element name is inserted.
+   * </p>
+   * 
+   * @example	<u>ReportDSLFormatter</u>:<br>
+   * 			<code>
+   * 			...FormattingConfig cfg<br>
+   * 			gf = new GenericFormatter()<br>
+   * 			gf.formatFirstLevelBlocks( cfg, grammar.grammar, "PageTemplates" )
+   * 			</code>
+   * 
+   * @param	config			Dsl-specific FormattingConfig instance
+   * @param	grammarRaw		Dsl-specific grammar
+   * @param	baseElementName	Name of dsl-specific class of first level elements
+   * 
+   * @return	void
+   * 
+   * @since	20160728, gu
+   * @changed	yymmdd, name
+   */
+  public void formatFirstLevelBlocks(final FormattingConfig config, final Grammar grammarRaw, final String baseElementName) {
+    this.formatFirstLevelBlocks(config, grammarRaw, baseElementName, null);
+  }
+  
+  /**
+   * <p>
+   * Formats intersection between first level elements (= first level underneath package
+   * definition, i.e. import and following blocks).<br>
+   * Inserts one empty line between two blocks each.
+   * </p>
+   * 
+   * @example	<u>DatamartDSLFormatter</u>:<br>
+   * 			<code>
+   * 			...FormattingConfig cfg<br>
+   * 			gf = new GenericFormatter()<br>
+   * 			gf.formatFirstLevelBlocks( cfg, grammar.grammar, "DatamartImport", "DatamartDefinition" )
+   * 			</code>
+   * 
+   * @param	config			Dsl-specific FormattingConfig instance
+   * @param	grammarRaw		Dsl-specific grammar
+   * @param	baseElementName	Name of dsl-specific class of first level elements
+   * @param	importClassName	Name of dsl-specific import class
+   * 
+   * @return	void
+   * 
+   * @since	20160728, gu
+   * @changed	yymmdd, name
+   */
+  public void formatFirstLevelBlocks(final FormattingConfig config, final Grammar grammarRaw, final String baseElementName, final String importClassName) {
+    AbstractRule _findRuleForName = GrammarUtil.findRuleForName(grammarRaw, baseElementName);
+    ParserRule baseElementDef = ((ParserRule) _findRuleForName);
+    boolean _notEquals = (!Objects.equal(importClassName, null));
+    if (_notEquals) {
+      AbstractRule _findRuleForName_1 = GrammarUtil.findRuleForName(grammarRaw, importClassName);
+      ParserRule importDef = ((ParserRule) _findRuleForName_1);
+      FormattingConfig.LinewrapLocator _setLinewrap = config.setLinewrap(2);
+      _setLinewrap.between(importDef, baseElementDef);
+    }
+    FormattingConfig.LinewrapLocator _setLinewrap_1 = config.setLinewrap(2);
+    _setLinewrap_1.before(baseElementDef);
+  }
+  
+  /**
+   * Overloaded variant for those who can't provide a <i>XtypeGrammarAccess</i> instance.
+   */
+  public void genericFormatting(final FormattingConfig config, final IGrammarAccess grammar) {
+    this.genericFormatting(config, grammar, null);
+  }
+  
+  public void genericFormatting(final FormattingConfig config, final IGrammarAccess grammar, final XtypeGrammarAccess grammarAccess) {
+    config.setAutoLinewrap(400);
+    boolean _notEquals = (!Objects.equal(grammarAccess, null));
+    if (_notEquals) {
+      FormattingConfig.LinewrapLocator _setLinewrap = config.setLinewrap(0, 1, 2);
+      TerminalRule _sL_COMMENTRule = grammarAccess.getSL_COMMENTRule();
+      _setLinewrap.before(_sL_COMMENTRule);
+      FormattingConfig.LinewrapLocator _setLinewrap_1 = config.setLinewrap(0, 1, 1);
+      TerminalRule _sL_COMMENTRule_1 = grammarAccess.getSL_COMMENTRule();
+      _setLinewrap_1.after(_sL_COMMENTRule_1);
+      FormattingConfig.LinewrapLocator _setLinewrap_2 = config.setLinewrap(0, 1, 2);
+      TerminalRule _mL_COMMENTRule = grammarAccess.getML_COMMENTRule();
+      _setLinewrap_2.before(_mL_COMMENTRule);
+      FormattingConfig.LinewrapLocator _setLinewrap_3 = config.setLinewrap(1, 1, 2);
+      TerminalRule _mL_COMMENTRule_1 = grammarAccess.getML_COMMENTRule();
+      _setLinewrap_3.after(_mL_COMMENTRule_1);
+    }
+    List<Pair<Keyword, Keyword>> _findKeywordPairs = grammar.findKeywordPairs("{", "}");
+    for (final Pair<Keyword, Keyword> pair : _findKeywordPairs) {
+      {
+        FormattingConfig.SpaceLocator _setSpace = config.setSpace(" ");
+        Keyword _first = pair.getFirst();
+        _setSpace.before(_first);
+        Keyword _first_1 = pair.getFirst();
+        Keyword _second = pair.getSecond();
+        config.setIndentation(_first_1, _second);
+        FormattingConfig.LinewrapLocator _setLinewrap_4 = config.setLinewrap();
+        Keyword _first_2 = pair.getFirst();
+        _setLinewrap_4.after(_first_2);
+        FormattingConfig.LinewrapLocator _setLinewrap_5 = config.setLinewrap(1, 1, 2);
+        Keyword _second_1 = pair.getSecond();
+        _setLinewrap_5.around(_second_1);
+      }
+    }
+    List<Keyword> _findKeywords = grammar.findKeywords(".");
+    for (final Keyword kw : _findKeywords) {
+      {
+        FormattingConfig.NoSpaceLocator _setNoSpace = config.setNoSpace();
+        _setNoSpace.around(kw);
+        FormattingConfig.NoLinewrapLocator _setNoLinewrap = config.setNoLinewrap();
+        _setNoLinewrap.around(kw);
+      }
+    }
+    List<Keyword> _findKeywords_1 = grammar.findKeywords(";");
+    for (final Keyword kw_1 : _findKeywords_1) {
+      {
+        FormattingConfig.NoSpaceLocator _setNoSpace = config.setNoSpace();
+        _setNoSpace.before(kw_1);
+        FormattingConfig.LinewrapLocator _setLinewrap_4 = config.setLinewrap();
+        _setLinewrap_4.after(kw_1);
+      }
+    }
+    List<Keyword> _findKeywords_2 = grammar.findKeywords(",");
+    for (final Keyword kw_2 : _findKeywords_2) {
+      FormattingConfig.NoSpaceLocator _setNoSpace = config.setNoSpace();
+      _setNoSpace.before(kw_2);
+    }
+    List<Pair<Keyword, Keyword>> _findKeywordPairs_1 = grammar.findKeywordPairs("(", ")");
+    for (final Pair<Keyword, Keyword> pair_1 : _findKeywordPairs_1) {
+      {
+        FormattingConfig.NoSpaceLocator _setNoSpace_1 = config.setNoSpace();
+        Keyword _first = pair_1.getFirst();
+        _setNoSpace_1.before(_first);
+        FormattingConfig.SpaceLocator _setSpace = config.setSpace(" ");
+        Keyword _first_1 = pair_1.getFirst();
+        _setSpace.after(_first_1);
+        FormattingConfig.NoLinewrapLocator _setNoLinewrap = config.setNoLinewrap();
+        Keyword _first_2 = pair_1.getFirst();
+        _setNoLinewrap.around(_first_2);
+        FormattingConfig.SpaceLocator _setSpace_1 = config.setSpace(" ");
+        Keyword _second = pair_1.getSecond();
+        _setSpace_1.before(_second);
+        FormattingConfig.NoLinewrapLocator _setNoLinewrap_1 = config.setNoLinewrap();
+        Keyword _second_1 = pair_1.getSecond();
+        _setNoLinewrap_1.before(_second_1);
+        FormattingConfig.LinewrapLocator _setLinewrap_4 = config.setLinewrap(0, 0, 1);
+        Keyword _second_2 = pair_1.getSecond();
+        _setLinewrap_4.after(_second_2);
+      }
+    }
+    List<Pair<Keyword, Keyword>> _findKeywordPairs_2 = grammar.findKeywordPairs("[", "]");
+    for (final Pair<Keyword, Keyword> pair_2 : _findKeywordPairs_2) {
+      {
+        FormattingConfig.NoSpaceLocator _setNoSpace_1 = config.setNoSpace();
+        Keyword _first = pair_2.getFirst();
+        _setNoSpace_1.before(_first);
+        FormattingConfig.SpaceLocator _setSpace = config.setSpace(" ");
+        Keyword _first_1 = pair_2.getFirst();
+        _setSpace.after(_first_1);
+        FormattingConfig.NoLinewrapLocator _setNoLinewrap = config.setNoLinewrap();
+        Keyword _first_2 = pair_2.getFirst();
+        _setNoLinewrap.around(_first_2);
+        FormattingConfig.SpaceLocator _setSpace_1 = config.setSpace(" ");
+        Keyword _second = pair_2.getSecond();
+        _setSpace_1.before(_second);
+        FormattingConfig.NoSpaceLocator _setNoSpace_2 = config.setNoSpace();
+        Keyword _second_1 = pair_2.getSecond();
+        _setNoSpace_2.after(_second_1);
+        FormattingConfig.NoLinewrapLocator _setNoLinewrap_1 = config.setNoLinewrap();
+        Keyword _second_2 = pair_2.getSecond();
+        _setNoLinewrap_1.around(_second_2);
+      }
+    }
+    Grammar _grammar = grammar.getGrammar();
+    List<AbstractRule> allRules = GrammarUtil.allRules(_grammar);
+    int _size = allRules.size();
+    AbstractRule[] _newArrayOfSize = new AbstractRule[_size];
+    AbstractRule[] _array = allRules.<AbstractRule>toArray(_newArrayOfSize);
+    List<RuleCall> ruleCalls = grammar.findRuleCalls(_array);
+    for (final RuleCall ruleCall : ruleCalls) {
+      {
+        AbstractRule _rule = ruleCall.getRule();
+        String _name = _rule.getName();
+        boolean _equals = _name.equals("OperatorEnum");
+        if (_equals) {
+          FormattingConfig.NoLinewrapLocator _setNoLinewrap = config.setNoLinewrap();
+          _setNoLinewrap.around(ruleCall);
+        }
+        boolean _and = false;
+        AbstractRule _rule_1 = ruleCall.getRule();
+        if (!(_rule_1 instanceof ParserRuleImpl)) {
+          _and = false;
+        } else {
+          AbstractRule _rule_2 = ruleCall.getRule();
+          TypeRef _type = _rule_2.getType();
+          EClassifier _classifier = _type.getClassifier();
+          _and = (_classifier instanceof EClassImpl);
+        }
+        if (_and) {
+          AbstractRule _rule_3 = ruleCall.getRule();
+          String _name_1 = _rule_3.getName();
+          boolean _equals_1 = _name_1.equals("MessageDefaultFormat");
+          if (_equals_1) {
+            FormattingConfig.SpaceLocator _setSpace = config.setSpace(" ");
+            _setSpace.before(ruleCall);
+          }
+          boolean _and_1 = false;
+          boolean _and_2 = false;
+          boolean _or = false;
+          AbstractRule _rule_4 = ruleCall.getRule();
+          String _name_2 = _rule_4.getName();
+          boolean _startsWith = _name_2.startsWith("X");
+          boolean _not = (!_startsWith);
+          if (_not) {
+            _or = true;
+          } else {
+            AbstractRule _rule_5 = ruleCall.getRule();
+            String _name_3 = _rule_5.getName();
+            boolean _equals_2 = _name_3.equals("XImportSection");
+            _or = _equals_2;
+          }
+          if (!_or) {
+            _and_2 = false;
+          } else {
+            AbstractRule _rule_6 = ruleCall.getRule();
+            String _name_4 = _rule_6.getName();
+            boolean _contains = _name_4.contains("Jvm");
+            boolean _not_1 = (!_contains);
+            _and_2 = _not_1;
+          }
+          if (!_and_2) {
+            _and_1 = false;
+          } else {
+            AbstractRule _rule_7 = ruleCall.getRule();
+            String _name_5 = _rule_7.getName();
+            boolean _contains_1 = _name_5.contains("Expression");
+            boolean _not_2 = (!_contains_1);
+            _and_1 = _not_2;
+          }
+          if (_and_1) {
+            FormattingConfig.LinewrapLocator _setLinewrap_4 = config.setLinewrap(0, 1, 2);
+            AbstractRule _rule_8 = ruleCall.getRule();
+            _setLinewrap_4.before(_rule_8);
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..88510ee
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,153 @@
+<?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 implementation 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.releng.maven</groupId>
+		<artifactId>org.eclipse.osbp.releng.maven.parent.tycho</artifactId>
+		<version>0.9.0-SNAPSHOT</version>
+		<relativePath/>
+	</parent>
+
+	<groupId>org.eclipse.osbp.utils</groupId>
+	<artifactId>org.eclipse.osbp.utils.aggregator</artifactId>
+	<version>0.9.0-SNAPSHOT</version>
+	<packaging>pom</packaging>
+
+	<url>${osbp.site.repository.url}</url>
+	<scm>
+		<url>${osbp.scm.url}</url>
+		<connection>${osbp.scm.connection}</connection>
+		<developerConnection>${osbp.scm.connection.dev}</developerConnection>
+		<tag>HEAD</tag>
+	</scm>
+	<distributionManagement>
+		<site>
+			<id>gh-pages</id>
+			<name>OSBP GitHub Pages</name>
+			<url>${distribution.site.url}</url>
+		</site>
+	</distributionManagement>
+
+	<properties>
+		<osbp.gitrepo.name>${project.groupId}</osbp.gitrepo.name>		
+	</properties>
+
+	<modules>
+		<module>org.eclipse.osbp.utils</module>
+		<module>org.eclipse.osbp.utils.feature</module>
+	</modules>
+
+	<build>
+		<pluginManagement>
+			<plugins>
+				<plugin>
+					<groupId>org.codehaus.mojo</groupId>
+					<artifactId>build-helper-maven-plugin</artifactId>
+					<executions>
+						<execution>
+							<id>add-source</id>
+							<phase>initialize</phase>
+							<goals>
+								<goal>add-source</goal>
+							</goals>
+							<configuration>
+								<sources>
+									<source>src-gen</source>
+									<source>xtend-gen</source>
+								</sources>
+							</configuration>
+						</execution>
+					</executions>
+				</plugin>
+				<plugin>
+					<groupId>org.eclipse.tycho</groupId>
+					<artifactId>tycho-source-plugin</artifactId>
+					<version>${tycho-version}</version>
+					<executions>
+						<execution>
+							<id>plugin-source</id>
+							<goals>
+								<goal>plugin-source</goal>
+							</goals>
+						</execution>
+					</executions>
+				</plugin>
+				<plugin>
+					<groupId>org.eclipse.xtend</groupId>
+					<artifactId>xtend-maven-plugin</artifactId>
+					<version>${xtext.version}</version>
+					<executions>
+						<execution>
+							<goals>
+								<goal>compile</goal>
+								<goal>xtend-install-debug-info</goal>
+								<goal>testCompile</goal>
+								<goal>xtend-test-install-debug-info</goal>
+							</goals>
+						</execution>
+					</executions>
+					<configuration>
+						<outputDirectory>xtend-gen</outputDirectory>
+					</configuration>
+				</plugin>
+				<plugin>
+					<groupId>org.eclipse.osbp.tools.maven</groupId>
+					<artifactId>org.eclipse.osbp.tools.maven.entity</artifactId>
+					<version>0.9.0-SNAPSHOT</version>
+					<executions>
+						<execution>
+							<goals>
+								<goal>compile</goal>
+								<goal>testCompile</goal>
+							</goals>
+						</execution>
+					</executions>
+					<configuration>
+						<outputDirectory>src-gen</outputDirectory>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+		<plugins>
+			<plugin>
+				<artifactId>maven-clean-plugin</artifactId>
+				<configuration>
+					<filesets>
+						<fileset>
+							<directory>xtend-gen</directory>
+							<includes>
+								<include>**</include>
+							</includes>
+						</fileset>
+					</filesets>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.eclipse.xtend</groupId>
+				<artifactId>xtend-maven-plugin</artifactId>
+				<executions>
+					<execution>
+						<goals>
+							<goal>compile</goal>
+							<goal>testCompile</goal>
+						</goals>
+						<configuration>
+							<outputDirectory>xtend-gen</outputDirectory>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+</project>