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..5f47942
--- /dev/null
+++ b/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.authentication.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..8f3c04d
--- /dev/null
+++ b/jenkins.build.config.xml
@@ -0,0 +1,26 @@
+<?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.persistence</jenkins.build.dependency>
+                <jenkins.build.dependency>org.eclipse.osbp.preferences</jenkins.build.dependency>
+                <jenkins.build.dependency>org.eclipse.osbp.runtime</jenkins.build.dependency>
+                <jenkins.build.dependency>org.eclipse.osbp.ui.api</jenkins.build.dependency>
+                <jenkins.build.dependency>org.eclipse.osbp.utils.blob</jenkins.build.dependency>
+                <jenkins.build.dependency>org.eclipse.osbp.xtext.i18n</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.authentication.feature/.project b/org.eclipse.osbp.authentication.feature/.project
new file mode 100644
index 0000000..e59c0fa
--- /dev/null
+++ b/org.eclipse.osbp.authentication.feature/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.authentication.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.authentication.feature/LICENSE.txt b/org.eclipse.osbp.authentication.feature/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.authentication.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.authentication.feature/apidocs/README.txt b/org.eclipse.osbp.authentication.feature/apidocs/README.txt
new file mode 100644
index 0000000..5f18672
--- /dev/null
+++ b/org.eclipse.osbp.authentication.feature/apidocs/README.txt
@@ -0,0 +1 @@
+keep this file for git
\ No newline at end of file
diff --git a/org.eclipse.osbp.authentication.feature/build.properties b/org.eclipse.osbp.authentication.feature/build.properties
new file mode 100644
index 0000000..3cc4326
--- /dev/null
+++ b/org.eclipse.osbp.authentication.feature/build.properties
@@ -0,0 +1,8 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               license.html,\
+               LICENSE.txt,\
+               epl-v10.html
+src.includes = epl-v10.html,\
+               license.html,\
+               LICENSE.txt
diff --git a/org.eclipse.osbp.authentication.feature/epl-v10.html b/org.eclipse.osbp.authentication.feature/epl-v10.html
new file mode 100644
index 0000000..b398acc
--- /dev/null
+++ b/org.eclipse.osbp.authentication.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.authentication.feature/feature.properties b/org.eclipse.osbp.authentication.feature/feature.properties
new file mode 100644
index 0000000..e9f7ed1
--- /dev/null
+++ b/org.eclipse.osbp.authentication.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 Authentication 
+
+# "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 Authentication.
+
+# "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.authentication.feature/feature.xml b/org.eclipse.osbp.authentication.feature/feature.xml
new file mode 100644
index 0000000..66fcf3c
--- /dev/null
+++ b/org.eclipse.osbp.authentication.feature/feature.xml
@@ -0,0 +1,46 @@
+<?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.authentication.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.authentication"
+        download-size="0"
+        install-size="0"
+        version="0.0.0"
+        unpack="false"/>
+        
+    <plugin
+        id="org.eclipse.osbp.user"
+        download-size="0"
+        install-size="0"
+        version="0.0.0"
+        unpack="false"/>
+
+
+</feature>
diff --git a/org.eclipse.osbp.authentication.feature/license.html b/org.eclipse.osbp.authentication.feature/license.html
new file mode 100644
index 0000000..6e579a5
--- /dev/null
+++ b/org.eclipse.osbp.authentication.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.authentication.feature/pom.xml b/org.eclipse.osbp.authentication.feature/pom.xml
new file mode 100644
index 0000000..e72ea41
--- /dev/null
+++ b/org.eclipse.osbp.authentication.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 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.authentication</groupId>
+		<artifactId>org.eclipse.osbp.authentication.aggregator</artifactId>
+		<version>0.9.0-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.osbp.authentication.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>
+				</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.authentication</groupId>
+			<artifactId>org.eclipse.osbp.authentication</artifactId>
+			<version>0.9.0-SNAPSHOT</version>
+		</dependency>
+		<dependency>
+			<groupId>org.eclipse.osbp.authentication</groupId>
+			<artifactId>org.eclipse.osbp.user</artifactId>
+			<version>0.9.0-SNAPSHOT</version>
+		</dependency>
+
+	</dependencies>
+
+</project>
diff --git a/org.eclipse.osbp.authentication.feature/src/main/javadoc/README.txt b/org.eclipse.osbp.authentication.feature/src/main/javadoc/README.txt
new file mode 100644
index 0000000..831da7e
--- /dev/null
+++ b/org.eclipse.osbp.authentication.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.authentication.feature/src/overview.html b/org.eclipse.osbp.authentication.feature/src/overview.html
new file mode 100644
index 0000000..5f3a826
--- /dev/null
+++ b/org.eclipse.osbp.authentication.feature/src/overview.html
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+  <HEAD>
+    <TITLE>OSBP Authentication Bundle Overview</TITLE>
+  </HEAD>
+  <BODY>
+    The <b>OSBP Authentication Bundle</b> implements the functionality needed for an application to identify a user.<br>
+    This is done by using the features of the Apache Shiro framework.
+    <p>
+    <p>
+    The following excerpt from the Shiro feature list gives an overview of the capabilities of Shiro:
+    
+	<li>The easiest to understand Java Security API anywhere. Class and Interface names are intuitive and make sense. Anything is pluggable but good defaults exist for everything.<br></li>
+
+	<li>Support authentication ('logins') across one or more pluggable data sources (LDAP, JDBC, ActiveDirectory, etc).<br></li>
+
+	<li>Perform authorization ('access control') based on roles or fine-grained permissions, also using pluggable data sources.<br></li>
+
+	<li>First-class caching support for enhanced application performance.<br></li>
+
+	<li>Built-in POJO-based Enterprise Session Management. Use in both web and non-web environments or in any environment where Single Sign On (SSO) or clustered or distributed sessions are desired.<br></li>
+
+	<li>Heterogeneous client session access. You are no longer forced to use only the httpSession or Stateful Session Beans, which often unnecessarily tie applications to specific environments. Flash applets, C# applications, Java Web Start, and Web Applications, etc. can now all share session state regardless of deployment environment.<br></li>
+
+	<li>Simple Single Sign-On (SSO) support piggybacking the above Enterprise Session Management. If sessions are federated across multiple applications, the user's authentication state can be shared too. Log in once to any application and the others all recognize that log-in.<br></li>
+
+	<li>Secure data with the easiest possible Cryptogrpahy APIs available, giving you power and simplicity beyond what Java provides by default for ciphers and hashes.<br></li>
+
+	<li>An incredibly robust yet low-configuration web framework that can secure any url or resource, automatically handle logins and logouts, perform Remember Me services, and more.<br></li>
+
+	<li>Extremely low number of required dependencies. Standalone configuration requires only slf4j-api.jar and one of slf4j's binding .jars. Web configuration additionally requires commons-beanutils-core.jar. Feature-based dependencies (Ehcache caching, Quartz-based Session validation, Spring dependency injection, etc.) can be added when needed.<br></li>
+    
+    <p>
+    For details about shiro check out <a href="http://shiro.apache.org/" >the Shiro homepage</a>
+    <p>
+    <p>
+    <h4>The Class Diagram</h4>
+    
+    <img src="org/eclipse/osbp/authentication/doc-files/model.png" alt="The Class Dependency Graph"> 
+  </BODY>
+</HTML>
\ No newline at end of file
diff --git a/org.eclipse.osbp.authentication/.project b/org.eclipse.osbp.authentication/.project
new file mode 100644
index 0000000..53f39fc
--- /dev/null
+++ b/org.eclipse.osbp.authentication/.project
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.authentication</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.osbp.ide.core.ui.shared.OSBPModelEnhancingBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.osbp.ide.core.ui.shared.OSBPI18nBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ds.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.babel.editor.rbeBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.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>
+		<nature>org.eclipse.osbp.ide.core.ui.shared.OSBPNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.authentication/LICENSE.txt b/org.eclipse.osbp.authentication/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.authentication/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.authentication/META-INF/MANIFEST.MF b/org.eclipse.osbp.authentication/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d2d57a6
--- /dev/null
+++ b/org.eclipse.osbp.authentication/META-INF/MANIFEST.MF
@@ -0,0 +1,112 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.authentication
+Bundle-SymbolicName: org.eclipse.osbp.authentication
+Bundle-Version: 0.9.0.qualifier
+Bundle-Vendor: Eclipse OSBP
+Bundle-Activator: org.eclipse.osbp.authentication.Activator
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+JPA-PersistenceUnits: authentication
+Import-Package: javax.servlet,
+ javax.servlet.http,
+ javax.validation,
+ org.apache.http.annotation;version="4.3.3",
+ org.osgi.framework
+Require-Bundle: com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
+ org.slf4j.api,
+ javax.persistence;bundle-version="2.1.0",
+ javax.annotation;bundle-version="[1.1.0,1.2.0)",
+ javax.inject;bundle-version="1.0.0",
+ org.apache.commons.beanutils;bundle-version="1.8.0",
+ org.eclipse.persistence.core;bundle-version="2.6.0",
+ org.apache.commons.io,
+ org.apache.commons.lang,
+ org.apache.commons.compress;bundle-version="1.6.0",
+ org.eclipse.persistence.jpa;bundle-version="2.6.0",
+ com.google.inject;bundle-version="3.0.0",
+ org.eclipse.xtext.xbase.lib;bundle-version="[2.7.3,2.8.0)";resolution:=optional,
+ org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.dsl.dto.lib;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.xtext.lazyresolver;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.dsl.xtext.lazyresolver.api;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.preferences;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.persistence;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.xtext.i18n;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.gitinfo;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.ui.api;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osgi;bundle-version="3.10.2",
+ org.eclipse.osgi.services,
+ javax.validation.api
+Bundle-ClassPath: .,
+ lib/shiro-all-1.2.3.jar
+Export-Package: org.apache.shiro,
+ org.apache.shiro.aop,
+ org.apache.shiro.authc,
+ org.apache.shiro.authc.credential,
+ org.apache.shiro.authc.pam,
+ org.apache.shiro.authz,
+ org.apache.shiro.authz.annotation,
+ org.apache.shiro.authz.aop,
+ org.apache.shiro.authz.permission,
+ org.apache.shiro.cache,
+ org.apache.shiro.cache.ehcache,
+ org.apache.shiro.codec,
+ org.apache.shiro.concurrent,
+ org.apache.shiro.config,
+ org.apache.shiro.crypto,
+ org.apache.shiro.crypto.hash,
+ org.apache.shiro.crypto.hash.format,
+ org.apache.shiro.dao,
+ org.apache.shiro.env,
+ org.apache.shiro.functor,
+ org.apache.shiro.io,
+ org.apache.shiro.jndi,
+ org.apache.shiro.ldap,
+ org.apache.shiro.mgt,
+ org.apache.shiro.realm,
+ org.apache.shiro.realm.activedirectory,
+ org.apache.shiro.realm.jdbc,
+ org.apache.shiro.realm.jndi,
+ org.apache.shiro.realm.ldap,
+ org.apache.shiro.realm.text,
+ org.apache.shiro.session,
+ org.apache.shiro.session.mgt,
+ org.apache.shiro.session.mgt.eis,
+ org.apache.shiro.session.mgt.quartz,
+ org.apache.shiro.spring,
+ org.apache.shiro.spring.aop,
+ org.apache.shiro.spring.remoting,
+ org.apache.shiro.spring.security.interceptor,
+ org.apache.shiro.spring.web,
+ org.apache.shiro.subject,
+ org.apache.shiro.subject.support,
+ org.apache.shiro.util,
+ org.apache.shiro.web.config,
+ org.apache.shiro.web.env,
+ org.apache.shiro.web.filter,
+ org.apache.shiro.web.filter.authc,
+ org.apache.shiro.web.filter.authz,
+ org.apache.shiro.web.filter.mgt,
+ org.apache.shiro.web.filter.session,
+ org.apache.shiro.web.mgt,
+ org.apache.shiro.web.servlet,
+ org.apache.shiro.web.session,
+ org.apache.shiro.web.session.mgt,
+ org.apache.shiro.web.subject,
+ org.apache.shiro.web.subject.support,
+ org.apache.shiro.web.tags,
+ org.apache.shiro.web.util,
+ org.eclipse.osbp.authentication;version="0.9.0",
+ org.eclipse.osbp.authentication.account.dtos;version="0.9.0",
+ org.eclipse.osbp.authentication.account.dtos.mapper;version="0.9.0",
+ org.eclipse.osbp.authentication.account.dtos.service;version="0.9.0",
+ org.eclipse.osbp.authentication.account.entities;version="0.9.0",
+ org.eclipse.osbp.authentication.exceptions;version="0.9.0",
+ org.eclipse.osbp.authentication.providerimpl;version="0.9.0",
+ org.eclipse.osbp.authentication.shiro.extensions;version="0.9.0",
+ org.eclipse.osbp.authentication.shiro.extensionsimpl;version="0.9.0",
+ org.eclipse.osbp.authentication.vaadin;version="0.9.0"
+Service-Component: OSGI-INF/*.xml
+Factory-Model: datatype, entity, dto 
diff --git a/org.eclipse.osbp.authentication/META-INF/persistence.xml b/org.eclipse.osbp.authentication/META-INF/persistence.xml
new file mode 100644
index 0000000..999e5a1
--- /dev/null
+++ b/org.eclipse.osbp.authentication/META-INF/persistence.xml
@@ -0,0 +1,13 @@
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_1_0.xsd"
+	version="1.0">
+	<persistence-unit name="authentication" 
+		transaction-type="RESOURCE_LOCAL">
+		<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+		<class>org.eclipse.osbp.authentication.account.entities.UserAccount</class>
+		<class>org.eclipse.osbp.authentication.account.entities.UserAccountFilter</class>
+	
+		<exclude-unlisted-classes>true</exclude-unlisted-classes>
+	</persistence-unit>
+</persistence>
diff --git a/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.ServiceListener.xml b/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.ServiceListener.xml
new file mode 100644
index 0000000..92ceb37
--- /dev/null
+++ b/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.ServiceListener.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.authentication.ServiceListener">
+   <reference bind="bindOrganizationService" cardinality="0..1" interface="org.eclipse.osbp.ui.api.useraccess.IOrganizationService" name="OrganizationService" policy="dynamic" unbind="unbindOrganizationService"/>
+   <implementation class="org.eclipse.osbp.authentication.ServiceListener"/>
+</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.account.dtos.mapper.UserAccountDtoMapper.xml b/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.account.dtos.mapper.UserAccountDtoMapper.xml
new file mode 100644
index 0000000..0e4895b
--- /dev/null
+++ b/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.account.dtos.mapper.UserAccountDtoMapper.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.osbp.authentication.account.dtos.mapper.useraccountdtomapper">
+       <implementation class="org.eclipse.osbp.authentication.account.dtos.mapper.UserAccountDtoMapper"/>
+       <service>
+		<provide interface="org.eclipse.osbp.dsl.dto.lib.IMapper"/>
+		  </service>
+		  
+		<property name="fordto.from.entity" type="String" value="org.eclipse.osbp.authentication.account.entities.UserAccount"/>
+		<property name="fordto.to.dto" type="String" value="org.eclipse.osbp.authentication.account.dtos.UserAccountDto"/>
+
+		<property name="forentity.from.dto" type="String" value="org.eclipse.osbp.authentication.account.dtos.UserAccountDto"/>
+		<property name="forentity.to.entity" type="String" value="org.eclipse.osbp.authentication.account.entities.UserAccount"/>
+		
+		<property name="service.pid" type="String" value="org.eclipse.osbp.authentication.account.dtos.mapper.useraccountdtomapper"/>
+		<reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess" 
+				cardinality="1..1" policy="static" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+</scr:component>
diff --git a/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.account.dtos.mapper.UserAccountFilterDtoMapper.xml b/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.account.dtos.mapper.UserAccountFilterDtoMapper.xml
new file mode 100644
index 0000000..008ff28
--- /dev/null
+++ b/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.account.dtos.mapper.UserAccountFilterDtoMapper.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.osbp.authentication.account.dtos.mapper.useraccountfilterdtomapper">
+       <implementation class="org.eclipse.osbp.authentication.account.dtos.mapper.UserAccountFilterDtoMapper"/>
+       <service>
+		<provide interface="org.eclipse.osbp.dsl.dto.lib.IMapper"/>
+		  </service>
+		  
+		<property name="fordto.from.entity" type="String" value="org.eclipse.osbp.authentication.account.entities.UserAccountFilter"/>
+		<property name="fordto.to.dto" type="String" value="org.eclipse.osbp.authentication.account.dtos.UserAccountFilterDto"/>
+
+		<property name="forentity.from.dto" type="String" value="org.eclipse.osbp.authentication.account.dtos.UserAccountFilterDto"/>
+		<property name="forentity.to.entity" type="String" value="org.eclipse.osbp.authentication.account.entities.UserAccountFilter"/>
+		
+		<property name="service.pid" type="String" value="org.eclipse.osbp.authentication.account.dtos.mapper.useraccountfilterdtomapper"/>
+		<reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess" 
+				cardinality="1..1" policy="static" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+</scr:component>
diff --git a/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.account.dtos.service.UserAccountDtoService.xml b/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.account.dtos.service.UserAccountDtoService.xml
new file mode 100644
index 0000000..c1e189c
--- /dev/null
+++ b/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.account.dtos.service.UserAccountDtoService.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.osbp.authentication.account.dtos.service.useraccountdtoservice">
+       <implementation class="org.eclipse.osbp.authentication.account.dtos.service.UserAccountDtoService"/>
+       <service>
+       	<provide interface="org.eclipse.osbp.dsl.dto.lib.services.IDTOService"/>
+       </service>
+       <property name="dto" type="String" value="org.eclipse.osbp.authentication.account.dtos.UserAccountDto"/>
+       <property name="service.pid" type="String" value="org.eclipse.osbp.authentication.account.dtos.service.useraccountdtoservice"/>
+<reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess" cardinality="1..1" 
+	policy="dynamic" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+<reference name="filterEnhancers" interface="org.eclipse.osbp.dsl.dto.lib.services.filters.IFilterEnhancer" cardinality="0..n"
+		policy="dynamic" bind="addFilterEnhancer" unbind="removeFilterEnhancer"/>
+</scr:component>
diff --git a/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.account.dtos.service.UserAccountFilterDtoService.xml b/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.account.dtos.service.UserAccountFilterDtoService.xml
new file mode 100644
index 0000000..a9bb4ff
--- /dev/null
+++ b/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.account.dtos.service.UserAccountFilterDtoService.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.osbp.authentication.account.dtos.service.useraccountfilterdtoservice">
+       <implementation class="org.eclipse.osbp.authentication.account.dtos.service.UserAccountFilterDtoService"/>
+       <service>
+       	<provide interface="org.eclipse.osbp.dsl.dto.lib.services.IDTOService"/>
+       </service>
+       <property name="dto" type="String" value="org.eclipse.osbp.authentication.account.dtos.UserAccountFilterDto"/>
+       <property name="service.pid" type="String" value="org.eclipse.osbp.authentication.account.dtos.service.useraccountfilterdtoservice"/>
+<reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess" cardinality="1..1" 
+	policy="dynamic" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+<reference name="filterEnhancers" interface="org.eclipse.osbp.dsl.dto.lib.services.filters.IFilterEnhancer" cardinality="0..n"
+		policy="dynamic" bind="addFilterEnhancer" unbind="removeFilterEnhancer"/>
+</scr:component>
diff --git a/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.providerimpl.UserAccessService.xml b/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.providerimpl.UserAccessService.xml
new file mode 100644
index 0000000..d3047a1
--- /dev/null
+++ b/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.providerimpl.UserAccessService.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" immediate="true" name="org.eclipse.osbp.authentication.providerimpl.UserAccessService">
+   <service>
+      <provide interface="org.eclipse.osbp.ui.api.useraccess.IUserAccessService"/>
+   </service>
+   <implementation class="org.eclipse.osbp.authentication.providerimpl.UserAccessService"/>
+</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.providerimpl.UserProtocol.xml b/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.providerimpl.UserProtocol.xml
new file mode 100644
index 0000000..1b0b82b
--- /dev/null
+++ b/org.eclipse.osbp.authentication/OSGI-INF/org.eclipse.osbp.authentication.providerimpl.UserProtocol.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" immediate="true" name="org.eclipse.osbp.authentication.providerimpl.UserProtocol">
+   <reference bind="bindPersistenceService" cardinality="1..1" interface="org.eclipse.osbp.persistence.IPersistenceService" name="PersistenceService" policy="static" unbind="unbindPersistenceService"/>
+   <implementation class="org.eclipse.osbp.authentication.providerimpl.UserProtocol"/>
+</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.authentication/about.html b/org.eclipse.osbp.authentication/about.html
new file mode 100644
index 0000000..64c0598
--- /dev/null
+++ b/org.eclipse.osbp.authentication/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.authentication/about.ini b/org.eclipse.osbp.authentication/about.ini
new file mode 100644
index 0000000..7df671f
--- /dev/null
+++ b/org.eclipse.osbp.authentication/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.authentication/about.mappings b/org.eclipse.osbp.authentication/about.mappings
new file mode 100644
index 0000000..4511a0a
--- /dev/null
+++ b/org.eclipse.osbp.authentication/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.authentication/about.properties b/org.eclipse.osbp.authentication/about.properties
new file mode 100644
index 0000000..28e72a6
--- /dev/null
+++ b/org.eclipse.osbp.authentication/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.authentication
+
+################ 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.authentication/build.properties b/org.eclipse.osbp.authentication/build.properties
new file mode 100644
index 0000000..d65fcd1
--- /dev/null
+++ b/org.eclipse.osbp.authentication/build.properties
@@ -0,0 +1,22 @@
+source.. = src/,\
+           src-gen/
+output.. = target/classes/
+bin.includes = about.properties,\
+               about.mappings,\
+               about.ini,\
+               about.html,\
+               META-INF/,\
+               OSGI-INF/,\
+               .,\
+               .classpath,\
+               modelsbin/,\
+               .project,\
+               i18n/,\
+               license.html,\
+               LICENSE.txt,\
+               epl-v10.html,\
+               lib/
+src.includes = about.properties,  about.mappings,  about.ini,  about.html, \
+               license.html,\
+               LICENSE.txt,\
+               epl-v10.html
diff --git a/org.eclipse.osbp.authentication/epl-v10.html b/org.eclipse.osbp.authentication/epl-v10.html
new file mode 100644
index 0000000..b398acc
--- /dev/null
+++ b/org.eclipse.osbp.authentication/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.authentication/i18n/I18N.properties b/org.eclipse.osbp.authentication/i18n/I18N.properties
new file mode 100644
index 0000000..b4cd5e5
--- /dev/null
+++ b/org.eclipse.osbp.authentication/i18n/I18N.properties
@@ -0,0 +1,43 @@
+#default
+activation_time=activation_time
+actual_owner=actual_owner
+cookie_hash_code=cookie_hash_code
+created_by=created_by
+created_on=created_on
+default_perpective=default_perpective
+description=description
+email=email
+enabled=enabled
+expiration_time=expiration_time
+extra_password=extra_password
+failed_attempt=failed_attempt
+filter=filter
+focusing_strategy=focusing_strategy
+force_pwd_change=force_pwd_change
+id=id
+invers=invers
+layouting_strategy=layouting_strategy
+locale_tag=locale_tag
+locked=locked
+name=name
+not_registered=not_registered
+password=password
+password_reset=password_reset
+position=position
+print_service=print_service
+priority=priority
+process_id=process_id
+process_instance_id=process_instance_id
+process_session_id=process_session_id
+profileimage=profileimage
+registered=registered
+status=status
+subject=subject
+successful_attempt=successful_attempt
+superuser=superuser
+supervisor=supervisor
+task_id=task_id
+theme=theme
+user_account=user_account
+user_account_filter=user_account_filter
+user_name=user_name
diff --git a/org.eclipse.osbp.authentication/i18n/I18N_de.properties b/org.eclipse.osbp.authentication/i18n/I18N_de.properties
new file mode 100644
index 0000000..a4a1425
--- /dev/null
+++ b/org.eclipse.osbp.authentication/i18n/I18N_de.properties
@@ -0,0 +1,43 @@
+#de
+activation_time=Activation time
+actual_owner=Actual owner
+cookie_hash_code=Hashcode
+created_by=Created by
+created_on=Created on
+default_perpective=Default perpective
+description=Description
+email=EMail
+enabled=freigegeben
+expiration_time=Expiration time
+extra_password=Extra password
+failed_attempt=fehlgeschlagene Versuche
+filter=Filter
+focusing_strategy=Focusing Strategie
+force_pwd_change=Passwort\u00E4nderung erzwingen
+id=ID
+invers=invers
+layouting_strategy=Layouting Strategie
+locale_tag=L\u00E4ndereinstellung
+locked=gesperrt
+name=Name
+not_registered=Not registered
+password=Passwort
+password_reset=Password reset
+position=Position
+print_service=Print service
+priority=Priority
+process_id=Process identifier
+process_instance_id=Process instance identifier
+process_session_id=Process session identifier
+profileimage=Profilbild
+registered=Registered
+status=Status
+subject=Subject
+successful_attempt=erfolgreiche Versuche
+superuser=Superbenutzer
+supervisor=Supervisor
+task_id=Task identifier
+theme=Theme
+user_account=Benutzerkonto
+user_account_filter=Filter f\u00FCr Benutzerkonto
+user_name=Benutzername
diff --git a/org.eclipse.osbp.authentication/i18n/I18N_de_AT.properties b/org.eclipse.osbp.authentication/i18n/I18N_de_AT.properties
new file mode 100644
index 0000000..6c73e1d
--- /dev/null
+++ b/org.eclipse.osbp.authentication/i18n/I18N_de_AT.properties
@@ -0,0 +1 @@
+#de_AT
diff --git a/org.eclipse.osbp.authentication/i18n/I18N_en.properties b/org.eclipse.osbp.authentication/i18n/I18N_en.properties
new file mode 100644
index 0000000..fa35f78
--- /dev/null
+++ b/org.eclipse.osbp.authentication/i18n/I18N_en.properties
@@ -0,0 +1,43 @@
+#en
+activation_time=Activation time
+actual_owner=Actual owner
+cookie_hash_code=cookie hash code
+created_by=Created by
+created_on=Created on
+default_perpective=Default perpective
+description=Description
+email=email
+enabled=enabled
+expiration_time=Expiration time
+extra_password=Extra password
+failed_attempt=failed attempt
+filter=filter
+focusing_strategy=focusing strategy
+force_pwd_change=force pwd change
+id=identifier
+invers=invers
+layouting_strategy=layouting strategy
+locale_tag=locale tag
+locked=locked
+name=Name
+not_registered=Not registered
+password=password
+password_reset=Password reset
+position=position
+print_service=Print service
+priority=Priority
+process_id=Process identifier
+process_instance_id=Process instance identifier
+process_session_id=Process session identifier
+profileimage=profileimage
+registered=Registered
+status=Status
+subject=Subject
+successful_attempt=successful attempt
+superuser=superuser
+supervisor=Supervisor
+task_id=Task identifier
+theme=theme
+user_account=user account
+user_account_filter=user account filter
+user_name=user name
diff --git a/org.eclipse.osbp.authentication/i18n/I18N_en_US.properties b/org.eclipse.osbp.authentication/i18n/I18N_en_US.properties
new file mode 100644
index 0000000..d89e21c
--- /dev/null
+++ b/org.eclipse.osbp.authentication/i18n/I18N_en_US.properties
@@ -0,0 +1 @@
+#en_US
diff --git a/org.eclipse.osbp.authentication/i18n/I18N_fr.properties b/org.eclipse.osbp.authentication/i18n/I18N_fr.properties
new file mode 100644
index 0000000..a84da83
--- /dev/null
+++ b/org.eclipse.osbp.authentication/i18n/I18N_fr.properties
@@ -0,0 +1 @@
+#fr
diff --git a/org.eclipse.osbp.authentication/license.html b/org.eclipse.osbp.authentication/license.html
new file mode 100644
index 0000000..6e579a5
--- /dev/null
+++ b/org.eclipse.osbp.authentication/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.authentication/modelsbin/account.datatype.datatypes_bin b/org.eclipse.osbp.authentication/modelsbin/account.datatype.datatypes_bin
new file mode 100644
index 0000000..1376944
--- /dev/null
+++ b/org.eclipse.osbp.authentication/modelsbin/account.datatype.datatypes_bin
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="ASCII"?>
+<types:LCommonModel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:types="http://osbp.eclipse.org/dsl/common/types/v1" xmlns:types_1="http://www.eclipse.org/xtext/common/JavaVMTypes">
+  <packages name="org.eclipse.osbp.authentication.account.datatypes">
+    <types xsi:type="types:LDataType" name="boolean" asPrimitive="true">
+      <jvmTypeReference xsi:type="types_1:JvmParameterizedTypeReference">
+        <type xsi:type="types_1:JvmGenericType" href="java:/Objects/java.lang.Boolean#java.lang.Boolean"/>
+      </jvmTypeReference>
+    </types>
+    <types xsi:type="types:LDataType" name="short" asPrimitive="true">
+      <jvmTypeReference xsi:type="types_1:JvmParameterizedTypeReference">
+        <type xsi:type="types_1:JvmGenericType" href="java:/Objects/java.lang.Short#java.lang.Short"/>
+      </jvmTypeReference>
+    </types>
+    <types xsi:type="types:LDataType" name="int" asPrimitive="true">
+      <jvmTypeReference xsi:type="types_1:JvmParameterizedTypeReference">
+        <type xsi:type="types_1:JvmGenericType" href="java:/Objects/java.lang.Integer#java.lang.Integer"/>
+      </jvmTypeReference>
+    </types>
+    <types xsi:type="types:LDataType" name="long" asPrimitive="true">
+      <jvmTypeReference xsi:type="types_1:JvmParameterizedTypeReference">
+        <type xsi:type="types_1:JvmGenericType" href="java:/Objects/java.lang.Long#java.lang.Long"/>
+      </jvmTypeReference>
+    </types>
+    <types xsi:type="types:LDataType" name="double" asPrimitive="true">
+      <jvmTypeReference xsi:type="types_1:JvmParameterizedTypeReference">
+        <type xsi:type="types_1:JvmGenericType" href="java:/Objects/java.lang.Double#java.lang.Double"/>
+      </jvmTypeReference>
+    </types>
+    <types xsi:type="types:LDataType" name="float" asPrimitive="true">
+      <jvmTypeReference xsi:type="types_1:JvmParameterizedTypeReference">
+        <type xsi:type="types_1:JvmGenericType" href="java:/Objects/java.lang.Float#java.lang.Float"/>
+      </jvmTypeReference>
+    </types>
+    <types xsi:type="types:LDataType" name="character" asPrimitive="true">
+      <jvmTypeReference xsi:type="types_1:JvmParameterizedTypeReference">
+        <type xsi:type="types_1:JvmGenericType" href="java:/Objects/java.lang.Character#java.lang.Character"/>
+      </jvmTypeReference>
+    </types>
+    <types xsi:type="types:LDataType" name="byte" asPrimitive="true">
+      <jvmTypeReference xsi:type="types_1:JvmParameterizedTypeReference">
+        <type xsi:type="types_1:JvmGenericType" href="java:/Objects/java.lang.Byte#java.lang.Byte"/>
+      </jvmTypeReference>
+    </types>
+    <types xsi:type="types:LDataType" name="Boolean">
+      <jvmTypeReference xsi:type="types_1:JvmParameterizedTypeReference">
+        <type xsi:type="types_1:JvmGenericType" href="java:/Objects/java.lang.Boolean#java.lang.Boolean"/>
+      </jvmTypeReference>
+    </types>
+    <types xsi:type="types:LDataType" name="Short">
+      <jvmTypeReference xsi:type="types_1:JvmParameterizedTypeReference">
+        <type xsi:type="types_1:JvmGenericType" href="java:/Objects/java.lang.Short#java.lang.Short"/>
+      </jvmTypeReference>
+    </types>
+    <types xsi:type="types:LDataType" name="Int">
+      <jvmTypeReference xsi:type="types_1:JvmParameterizedTypeReference">
+        <type xsi:type="types_1:JvmGenericType" href="java:/Objects/java.lang.Integer#java.lang.Integer"/>
+      </jvmTypeReference>
+    </types>
+    <types xsi:type="types:LDataType" name="Long">
+      <jvmTypeReference xsi:type="types_1:JvmParameterizedTypeReference">
+        <type xsi:type="types_1:JvmGenericType" href="java:/Objects/java.lang.Long#java.lang.Long"/>
+      </jvmTypeReference>
+    </types>
+    <types xsi:type="types:LDataType" name="Double">
+      <jvmTypeReference xsi:type="types_1:JvmParameterizedTypeReference">
+        <type xsi:type="types_1:JvmGenericType" href="java:/Objects/java.lang.Double#java.lang.Double"/>
+      </jvmTypeReference>
+    </types>
+    <types xsi:type="types:LDataType" name="Float">
+      <jvmTypeReference xsi:type="types_1:JvmParameterizedTypeReference">
+        <type xsi:type="types_1:JvmGenericType" href="java:/Objects/java.lang.Float#java.lang.Float"/>
+      </jvmTypeReference>
+    </types>
+    <types xsi:type="types:LDataType" name="Character">
+      <jvmTypeReference xsi:type="types_1:JvmParameterizedTypeReference">
+        <type xsi:type="types_1:JvmGenericType" href="java:/Objects/java.lang.Character#java.lang.Character"/>
+      </jvmTypeReference>
+    </types>
+    <types xsi:type="types:LDataType" name="Byte">
+      <jvmTypeReference xsi:type="types_1:JvmParameterizedTypeReference">
+        <type xsi:type="types_1:JvmGenericType" href="java:/Objects/java.lang.Byte#java.lang.Byte"/>
+      </jvmTypeReference>
+    </types>
+    <types xsi:type="types:LDataType" name="BigDecimal">
+      <jvmTypeReference xsi:type="types_1:JvmParameterizedTypeReference">
+        <type xsi:type="types_1:JvmGenericType" href="java:/Objects/java.math.BigDecimal#java.math.BigDecimal"/>
+      </jvmTypeReference>
+    </types>
+    <types xsi:type="types:LDataType" name="String">
+      <jvmTypeReference xsi:type="types_1:JvmParameterizedTypeReference">
+        <type xsi:type="types_1:JvmGenericType" href="java:/Objects/java.lang.String#java.lang.String"/>
+      </jvmTypeReference>
+    </types>
+    <types xsi:type="types:LDataType" name="BlobImage">
+      <jvmTypeReference xsi:type="types_1:JvmParameterizedTypeReference">
+        <type xsi:type="types_1:JvmGenericType" href="java:/Objects/java.lang.String#java.lang.String"/>
+      </jvmTypeReference>
+      <properties key="Blob" value="2"/>
+    </types>
+    <types xsi:type="types:LDataType" name="Date" date="true"/>
+    <types xsi:type="types:LDataType" name="datetype" date="true"/>
+    <types xsi:type="types:LDataType" name="timetype" date="true" dateType="TIME"/>
+    <types xsi:type="types:LDataType" name="blobtype" asBlob="true"/>
+  </packages>
+</types:LCommonModel>
diff --git a/org.eclipse.osbp.authentication/modelsbin/account.entity.entities_bin b/org.eclipse.osbp.authentication/modelsbin/account.entity.entities_bin
new file mode 100644
index 0000000..201dec9
--- /dev/null
+++ b/org.eclipse.osbp.authentication/modelsbin/account.entity.entities_bin
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="ASCII"?>
+<entity:LEntityModel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:entity="http://osbp.eclipse.org/dsl/entity/v1" xmlns:types="http://osbp.eclipse.org/dsl/common/types/v1">
+  <packages name="org.eclipse.osbp.authentication.account.entities">
+    <imports importedNamespace="org.eclipse.osbp.authentication.account.datatypes.*"/>
+    <types xsi:type="entity:LEntity" name="UserAccount" persistenceUnit="authentication">
+      <annotationInfo xsi:type="types:LClass"/>
+      <persistenceInfo/>
+      <features xsi:type="entity:LEntityAttribute" name="id" uuid="true">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.17"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="email">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.17"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="userName">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.17"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="password">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.17"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="extraPassword">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.17"/>
+        <constraints xsi:type="types:LDtCRegEx" pattern="[0-9]*"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="passwordReset">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.0"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="position">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.17"/>
+        <properties key="organization" value=""/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="defaultPerpective">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.17"/>
+        <properties key="perspective" value=""/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="enabled">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.0"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="locked">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.0"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="superuser">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.0"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="supervisor">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.0"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="forcePwdChange">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.0"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="notRegistered">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.0"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="failedAttempt">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.2"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="successfulAttempt">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.2"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="cookieHashCode">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.2"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="localeTag">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.17"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="profileimage">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.18"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="layoutingStrategy">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.17"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="focusingStrategy">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.17"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="theme">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.17"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="printService">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.17"/>
+      </features>
+      <features xsi:type="entity:LEntityReference" name="userAccountFilter" type="//@packages.0/@types.1" opposite="//@packages.0/@types.1/@features.3">
+        <multiplicity lower="MANY"/>
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+      </features>
+    </types>
+    <types xsi:type="entity:LEntity" name="UserAccountFilter" persistenceUnit="authentication">
+      <annotationInfo xsi:type="types:LClass"/>
+      <persistenceInfo/>
+      <features xsi:type="entity:LEntityAttribute" name="id" uuid="true">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.17"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="filter">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.17"/>
+      </features>
+      <features xsi:type="entity:LEntityAttribute" name="invers">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+        <type href="platform:/resource/org.eclipse.osbp.authentication/src/account.datatype#/0/@packages.0/@types.0"/>
+      </features>
+      <features xsi:type="entity:LEntityReference" name="userAccount" type="//@packages.0/@types.0" opposite="//@packages.0/@types.0/@features.23">
+        <annotationInfo xsi:type="entity:LEntityFeature"/>
+      </features>
+    </types>
+  </packages>
+</entity:LEntityModel>
diff --git a/org.eclipse.osbp.authentication/pom.xml b/org.eclipse.osbp.authentication/pom.xml
new file mode 100644
index 0000000..b7704f6
--- /dev/null
+++ b/org.eclipse.osbp.authentication/pom.xml
@@ -0,0 +1,43 @@
+<?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.authentication</groupId>
+		<artifactId>org.eclipse.osbp.authentication.aggregator</artifactId>
+		<version>0.9.0-SNAPSHOT</version>
+		<relativePath>..</relativePath>
+	</parent>
+	<artifactId>org.eclipse.osbp.authentication</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<dependencies>
+		<dependency>
+			<groupId>org.eclipse.osbp.preferences</groupId>
+			<artifactId>org.eclipse.osbp.preferences</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+	</dependencies>
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>src</directory>
+				<excludes>
+					<exclude>**/*.java</exclude>
+				</excludes>
+			</resource>
+		</resources>
+		<plugins>
+		</plugins>
+	</build>
+</project>
diff --git a/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/UserAccountDto.java b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/UserAccountDto.java
new file mode 100644
index 0000000..274a608
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/UserAccountDto.java
@@ -0,0 +1,834 @@
+package org.eclipse.osbp.authentication.account.dtos;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+import javax.validation.constraints.Pattern;
+import org.eclipse.osbp.authentication.account.dtos.UserAccountFilterDto;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainReference;
+import org.eclipse.osbp.runtime.common.annotations.Id;
+import org.eclipse.osbp.runtime.common.annotations.Properties;
+import org.eclipse.osbp.runtime.common.annotations.Property;
+import org.eclipse.osbp.runtime.jsr303.validation.common.InfoSeverity;
+
+@SuppressWarnings("all")
+public class UserAccountDto implements IDto, Serializable, PropertyChangeListener {
+  private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
+  
+  @Dispose
+  private boolean disposed;
+  
+  @Id
+  private String id = java.util.UUID.randomUUID().toString();
+  
+  private String email;
+  
+  private String userName;
+  
+  private String password;
+  
+  @Pattern(regexp = "[0-9]*", payload = InfoSeverity.class)
+  private String extraPassword;
+  
+  private boolean passwordReset;
+  
+  @Properties(properties = @Property(key = "organization", value = ""))
+  private String position;
+  
+  @Properties(properties = @Property(key = "perspective", value = ""))
+  private String defaultPerpective;
+  
+  private boolean enabled;
+  
+  private boolean locked;
+  
+  private boolean superuser;
+  
+  private boolean supervisor;
+  
+  private boolean forcePwdChange;
+  
+  private boolean notRegistered;
+  
+  private int failedAttempt;
+  
+  private int successfulAttempt;
+  
+  private int cookieHashCode;
+  
+  private String localeTag;
+  
+  @Properties(properties = @Property(key = "Blob", value = "2"))
+  private String profileimage;
+  
+  private String layoutingStrategy;
+  
+  private String focusingStrategy;
+  
+  private String theme;
+  
+  private String printService;
+  
+  @DomainReference
+  private List<UserAccountFilterDto> userAccountFilter;
+  
+  public UserAccountDto() {
+    installLazyCollections();
+  }
+  
+  /**
+   * Installs lazy collection resolving for entity {@link UserAccount} to the dto {@link UserAccountDto}.
+   * 
+   */
+  protected void installLazyCollections() {
+    userAccountFilter = new org.eclipse.osbp.dsl.dto.lib.OppositeDtoList<>(
+    				org.eclipse.osbp.dsl.dto.lib.MappingContext.getCurrent(),
+    				UserAccountFilterDto.class, "userAccount.id",
+    				(java.util.function.Supplier<Object> & Serializable) () -> this.getId());
+  }
+  
+  /**
+   * @return true, if the object is disposed. 
+   * Disposed means, that it is prepared for garbage collection and may not be used anymore. 
+   * Accessing objects that are already disposed will cause runtime exceptions.
+   * 
+   */
+  public boolean isDisposed() {
+    return this.disposed;
+  }
+  
+  /**
+   * @see PropertyChangeSupport#addPropertyChangeListener(PropertyChangeListener)
+   */
+  public void addPropertyChangeListener(final PropertyChangeListener listener) {
+    propertyChangeSupport.addPropertyChangeListener(listener);
+  }
+  
+  /**
+   * @see PropertyChangeSupport#addPropertyChangeListener(String, PropertyChangeListener)
+   */
+  public void addPropertyChangeListener(final String propertyName, final PropertyChangeListener listener) {
+    propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
+  }
+  
+  /**
+   * @see PropertyChangeSupport#removePropertyChangeListener(PropertyChangeListener)
+   */
+  public void removePropertyChangeListener(final PropertyChangeListener listener) {
+    propertyChangeSupport.removePropertyChangeListener(listener);
+  }
+  
+  /**
+   * @see PropertyChangeSupport#removePropertyChangeListener(String, PropertyChangeListener)
+   */
+  public void removePropertyChangeListener(final String propertyName, final PropertyChangeListener listener) {
+    propertyChangeSupport.removePropertyChangeListener(propertyName, listener);
+  }
+  
+  /**
+   * @see PropertyChangeSupport#firePropertyChange(String, Object, Object)
+   */
+  public void firePropertyChange(final String propertyName, final Object oldValue, final Object newValue) {
+    propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
+  }
+  
+  /**
+   * Checks whether the object is disposed.
+   * @throws RuntimeException if the object is disposed.
+   */
+  private void checkDisposed() {
+    if (isDisposed()) {
+      throw new RuntimeException("Object already disposed: " + this);
+    }
+  }
+  
+  /**
+   * Calling dispose will destroy that instance. The internal state will be 
+   * set to 'disposed' and methods of that object must not be used anymore. 
+   * Each call will result in runtime exceptions.<br/>
+   * If this object keeps composition containments, these will be disposed too. 
+   * So the whole composition containment tree will be disposed on calling this method.
+   */
+  @Dispose
+  public void dispose() {
+    if (isDisposed()) {
+      return;
+    }
+    firePropertyChange("disposed", this.disposed, this.disposed = true);
+  }
+  
+  /**
+   * Returns the id property or <code>null</code> if not present.
+   */
+  public String getId() {
+    return this.id;
+  }
+  
+  /**
+   * Sets the <code>id</code> property to this instance.
+   * 
+   * @param id - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setId(final String id) {
+    firePropertyChange("id", this.id, this.id = id );
+    				installLazyCollections();
+  }
+  
+  /**
+   * Returns the email property or <code>null</code> if not present.
+   */
+  public String getEmail() {
+    return this.email;
+  }
+  
+  /**
+   * Sets the <code>email</code> property to this instance.
+   * 
+   * @param email - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setEmail(final String email) {
+    firePropertyChange("email", this.email, this.email = email );
+  }
+  
+  /**
+   * Returns the userName property or <code>null</code> if not present.
+   */
+  public String getUserName() {
+    return this.userName;
+  }
+  
+  /**
+   * Sets the <code>userName</code> property to this instance.
+   * 
+   * @param userName - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setUserName(final String userName) {
+    firePropertyChange("userName", this.userName, this.userName = userName );
+  }
+  
+  /**
+   * Returns the password property or <code>null</code> if not present.
+   */
+  public String getPassword() {
+    return this.password;
+  }
+  
+  /**
+   * Sets the <code>password</code> property to this instance.
+   * 
+   * @param password - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setPassword(final String password) {
+    firePropertyChange("password", this.password, this.password = password );
+  }
+  
+  /**
+   * Returns the extraPassword property or <code>null</code> if not present.
+   */
+  public String getExtraPassword() {
+    return this.extraPassword;
+  }
+  
+  /**
+   * Sets the <code>extraPassword</code> property to this instance.
+   * 
+   * @param extraPassword - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setExtraPassword(final String extraPassword) {
+    firePropertyChange("extraPassword", this.extraPassword, this.extraPassword = extraPassword );
+  }
+  
+  /**
+   * Returns the passwordReset property or <code>null</code> if not present.
+   */
+  public boolean getPasswordReset() {
+    return this.passwordReset;
+  }
+  
+  /**
+   * Sets the <code>passwordReset</code> property to this instance.
+   * 
+   * @param passwordReset - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setPasswordReset(final boolean passwordReset) {
+    firePropertyChange("passwordReset", this.passwordReset, this.passwordReset = passwordReset );
+  }
+  
+  /**
+   * Returns the position property or <code>null</code> if not present.
+   */
+  public String getPosition() {
+    return this.position;
+  }
+  
+  /**
+   * Sets the <code>position</code> property to this instance.
+   * 
+   * @param position - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setPosition(final String position) {
+    firePropertyChange("position", this.position, this.position = position );
+  }
+  
+  /**
+   * Returns the defaultPerpective property or <code>null</code> if not present.
+   */
+  public String getDefaultPerpective() {
+    return this.defaultPerpective;
+  }
+  
+  /**
+   * Sets the <code>defaultPerpective</code> property to this instance.
+   * 
+   * @param defaultPerpective - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setDefaultPerpective(final String defaultPerpective) {
+    firePropertyChange("defaultPerpective", this.defaultPerpective, this.defaultPerpective = defaultPerpective );
+  }
+  
+  /**
+   * Returns the enabled property or <code>null</code> if not present.
+   */
+  public boolean getEnabled() {
+    return this.enabled;
+  }
+  
+  /**
+   * Sets the <code>enabled</code> property to this instance.
+   * 
+   * @param enabled - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setEnabled(final boolean enabled) {
+    firePropertyChange("enabled", this.enabled, this.enabled = enabled );
+  }
+  
+  /**
+   * Returns the locked property or <code>null</code> if not present.
+   */
+  public boolean getLocked() {
+    return this.locked;
+  }
+  
+  /**
+   * Sets the <code>locked</code> property to this instance.
+   * 
+   * @param locked - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setLocked(final boolean locked) {
+    firePropertyChange("locked", this.locked, this.locked = locked );
+  }
+  
+  /**
+   * Returns the superuser property or <code>null</code> if not present.
+   */
+  public boolean getSuperuser() {
+    return this.superuser;
+  }
+  
+  /**
+   * Sets the <code>superuser</code> property to this instance.
+   * 
+   * @param superuser - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setSuperuser(final boolean superuser) {
+    firePropertyChange("superuser", this.superuser, this.superuser = superuser );
+  }
+  
+  /**
+   * Returns the supervisor property or <code>null</code> if not present.
+   */
+  public boolean getSupervisor() {
+    return this.supervisor;
+  }
+  
+  /**
+   * Sets the <code>supervisor</code> property to this instance.
+   * 
+   * @param supervisor - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setSupervisor(final boolean supervisor) {
+    firePropertyChange("supervisor", this.supervisor, this.supervisor = supervisor );
+  }
+  
+  /**
+   * Returns the forcePwdChange property or <code>null</code> if not present.
+   */
+  public boolean getForcePwdChange() {
+    return this.forcePwdChange;
+  }
+  
+  /**
+   * Sets the <code>forcePwdChange</code> property to this instance.
+   * 
+   * @param forcePwdChange - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setForcePwdChange(final boolean forcePwdChange) {
+    firePropertyChange("forcePwdChange", this.forcePwdChange, this.forcePwdChange = forcePwdChange );
+  }
+  
+  /**
+   * Returns the notRegistered property or <code>null</code> if not present.
+   */
+  public boolean getNotRegistered() {
+    return this.notRegistered;
+  }
+  
+  /**
+   * Sets the <code>notRegistered</code> property to this instance.
+   * 
+   * @param notRegistered - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setNotRegistered(final boolean notRegistered) {
+    firePropertyChange("notRegistered", this.notRegistered, this.notRegistered = notRegistered );
+  }
+  
+  /**
+   * Returns the failedAttempt property or <code>null</code> if not present.
+   */
+  public int getFailedAttempt() {
+    return this.failedAttempt;
+  }
+  
+  /**
+   * Sets the <code>failedAttempt</code> property to this instance.
+   * 
+   * @param failedAttempt - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setFailedAttempt(final int failedAttempt) {
+    firePropertyChange("failedAttempt", this.failedAttempt, this.failedAttempt = failedAttempt );
+  }
+  
+  /**
+   * Returns the successfulAttempt property or <code>null</code> if not present.
+   */
+  public int getSuccessfulAttempt() {
+    return this.successfulAttempt;
+  }
+  
+  /**
+   * Sets the <code>successfulAttempt</code> property to this instance.
+   * 
+   * @param successfulAttempt - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setSuccessfulAttempt(final int successfulAttempt) {
+    firePropertyChange("successfulAttempt", this.successfulAttempt, this.successfulAttempt = successfulAttempt );
+  }
+  
+  /**
+   * Returns the cookieHashCode property or <code>null</code> if not present.
+   */
+  public int getCookieHashCode() {
+    return this.cookieHashCode;
+  }
+  
+  /**
+   * Sets the <code>cookieHashCode</code> property to this instance.
+   * 
+   * @param cookieHashCode - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setCookieHashCode(final int cookieHashCode) {
+    firePropertyChange("cookieHashCode", this.cookieHashCode, this.cookieHashCode = cookieHashCode );
+  }
+  
+  /**
+   * Returns the localeTag property or <code>null</code> if not present.
+   */
+  public String getLocaleTag() {
+    return this.localeTag;
+  }
+  
+  /**
+   * Sets the <code>localeTag</code> property to this instance.
+   * 
+   * @param localeTag - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setLocaleTag(final String localeTag) {
+    firePropertyChange("localeTag", this.localeTag, this.localeTag = localeTag );
+  }
+  
+  /**
+   * Returns the profileimage property or <code>null</code> if not present.
+   */
+  public String getProfileimage() {
+    return this.profileimage;
+  }
+  
+  /**
+   * Sets the <code>profileimage</code> property to this instance.
+   * 
+   * @param profileimage - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setProfileimage(final String profileimage) {
+    firePropertyChange("profileimage", this.profileimage, this.profileimage = profileimage );
+  }
+  
+  /**
+   * Returns the layoutingStrategy property or <code>null</code> if not present.
+   */
+  public String getLayoutingStrategy() {
+    return this.layoutingStrategy;
+  }
+  
+  /**
+   * Sets the <code>layoutingStrategy</code> property to this instance.
+   * 
+   * @param layoutingStrategy - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setLayoutingStrategy(final String layoutingStrategy) {
+    firePropertyChange("layoutingStrategy", this.layoutingStrategy, this.layoutingStrategy = layoutingStrategy );
+  }
+  
+  /**
+   * Returns the focusingStrategy property or <code>null</code> if not present.
+   */
+  public String getFocusingStrategy() {
+    return this.focusingStrategy;
+  }
+  
+  /**
+   * Sets the <code>focusingStrategy</code> property to this instance.
+   * 
+   * @param focusingStrategy - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setFocusingStrategy(final String focusingStrategy) {
+    firePropertyChange("focusingStrategy", this.focusingStrategy, this.focusingStrategy = focusingStrategy );
+  }
+  
+  /**
+   * Returns the theme property or <code>null</code> if not present.
+   */
+  public String getTheme() {
+    return this.theme;
+  }
+  
+  /**
+   * Sets the <code>theme</code> property to this instance.
+   * 
+   * @param theme - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setTheme(final String theme) {
+    firePropertyChange("theme", this.theme, this.theme = theme );
+  }
+  
+  /**
+   * Returns the printService property or <code>null</code> if not present.
+   */
+  public String getPrintService() {
+    return this.printService;
+  }
+  
+  /**
+   * Sets the <code>printService</code> property to this instance.
+   * 
+   * @param printService - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setPrintService(final String printService) {
+    firePropertyChange("printService", this.printService, this.printService = printService );
+  }
+  
+  /**
+   * Returns an unmodifiable list of userAccountFilter.
+   */
+  public List<UserAccountFilterDto> getUserAccountFilter() {
+    return Collections.unmodifiableList(internalGetUserAccountFilter());
+  }
+  
+  /**
+   * Returns the list of <code>UserAccountFilterDto</code>s thereby lazy initializing it. For internal use only!
+   * 
+   * @return list - the resulting list
+   * 
+   */
+  public List<UserAccountFilterDto> internalGetUserAccountFilter() {
+    if (this.userAccountFilter == null) {
+      this.userAccountFilter = new java.util.ArrayList<UserAccountFilterDto>();
+    }
+    return this.userAccountFilter;
+  }
+  
+  /**
+   * Adds the given userAccountFilterDto to this object. <p>
+   * Since the reference is a composition reference, the opposite reference <code>UserAccountFilterDto#userAccount</code> of the <code>userAccountFilterDto</code> will be handled automatically and no further coding is required to keep them in sync.<p>
+   * See {@link UserAccountFilterDto#setUserAccount(UserAccountFilterDto)}.
+   * 
+   * @param userAccountFilterDto - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void addToUserAccountFilter(final UserAccountFilterDto userAccountFilterDto) {
+    checkDisposed();
+    
+    userAccountFilterDto.setUserAccount(this);
+  }
+  
+  /**
+   * Removes the given userAccountFilterDto from this object. <p>
+   * 
+   * @param userAccountFilterDto - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void removeFromUserAccountFilter(final UserAccountFilterDto userAccountFilterDto) {
+    checkDisposed();
+    
+    userAccountFilterDto.setUserAccount(null);
+  }
+  
+  /**
+   * For internal use only!
+   */
+  public void internalAddToUserAccountFilter(final UserAccountFilterDto userAccountFilterDto) {
+    
+    if(!MappingContext.isMappingMode()) {
+    	// collections will become resolved! We need to send a delta notification.
+    	List<UserAccountFilterDto> oldList = new java.util.ArrayList<>(internalGetUserAccountFilter());
+    	internalGetUserAccountFilter().add(userAccountFilterDto);
+    	firePropertyChange("userAccountFilter", oldList, internalGetUserAccountFilter());
+    } else {
+    	// in mapping mode, we do NOT resolve any collection
+    	internalGetUserAccountFilter().add(userAccountFilterDto);
+    }
+  }
+  
+  /**
+   * For internal use only!
+   */
+  public void internalRemoveFromUserAccountFilter(final UserAccountFilterDto userAccountFilterDto) {
+    if(!MappingContext.isMappingMode()) {
+    	// collections will become resolved! We need to send a delta notification.
+    	List<UserAccountFilterDto> oldList = new java.util.ArrayList<>(internalGetUserAccountFilter());
+    	internalGetUserAccountFilter().remove(userAccountFilterDto);
+    	firePropertyChange("userAccountFilter", oldList, internalGetUserAccountFilter());	
+    }else{
+    	// in mapping mode, we do NOT resolve any collection
+    	internalGetUserAccountFilter().remove(userAccountFilterDto);
+    }
+  }
+  
+  /**
+   * Sets the <code>userAccountFilter</code> property to this instance.
+   * Since the reference has an opposite reference, the opposite <code>UserAccountFilterDto#
+   * userAccount</code> of the <code>userAccountFilter</code> will be handled automatically and no 
+   * further coding is required to keep them in sync.<p>
+   * See {@link UserAccountFilterDto#setUserAccount(UserAccountFilterDto)
+   * 
+   * @param userAccountFilter - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setUserAccountFilter(final List<UserAccountFilterDto> userAccountFilter) {
+    checkDisposed();
+    for (UserAccountFilterDto dto : internalGetUserAccountFilter().toArray(new UserAccountFilterDto[this.userAccountFilter.size()])) {
+    	removeFromUserAccountFilter(dto);
+    }
+    
+    if(userAccountFilter == null) {
+    	return;
+    }
+    
+    for (UserAccountFilterDto dto : userAccountFilter) {
+    	addToUserAccountFilter(dto);
+    }
+  }
+  
+  @Override
+  public boolean equals(final Object obj) {
+    if (this == obj)
+      return true;
+    if (obj == null)
+      return false;
+    if (getClass() != obj.getClass())
+      return false;
+    UserAccountDto other = (UserAccountDto) obj;
+    if (this.id == null) {
+      if (other.id != null)
+        return false;
+    } else if (!this.id.equals(other.id))
+      return false;
+    return true;
+  }
+  
+  @Override
+  public int hashCode() {
+     int prime = 31;
+    int result = 1;
+    result = prime * result + ((this.id== null) ? 0 : this.id.hashCode());
+    return result;
+  }
+  
+  public UserAccountDto createDto() {
+    return new UserAccountDto();
+  }
+  
+  public UserAccountDto copy(final MappingContext context) {
+    checkDisposed();
+    
+    if (context == null) {
+    	throw new IllegalArgumentException("Context must not be null!");
+    }
+    
+    if(context.isMaxLevel()){
+    	return null;
+    }
+    
+    // if context contains a copied instance of this object
+    // then return it
+    UserAccountDto newDto = context.get(this);
+    if(newDto != null){
+    	return newDto;
+    }
+    
+    try{
+    	context.increaseLevel();
+    	
+    	newDto = createDto();
+    	context.register(this, newDto);
+    	
+    	// first copy the containments and attributes
+    	copyContainments(this, newDto, context);
+    	
+    	// then copy cross references to ensure proper
+    	// opposite references are copied too.
+    	copyCrossReferences(this, newDto, context);
+    } finally {
+    	context.decreaseLevel();
+    }
+    
+    return newDto;
+  }
+  
+  public void copyContainments(final UserAccountDto dto, final UserAccountDto newDto, final MappingContext context) {
+    checkDisposed();
+    
+    if (context == null) {
+    	throw new IllegalArgumentException("Context must not be null!");
+    }
+    
+    
+    // copy attributes and beans (beans if derived from entity model)
+    // copy id
+    newDto.setId(getId());
+    // copy email
+    newDto.setEmail(getEmail());
+    // copy userName
+    newDto.setUserName(getUserName());
+    // copy password
+    newDto.setPassword(getPassword());
+    // copy extraPassword
+    newDto.setExtraPassword(getExtraPassword());
+    // copy passwordReset
+    newDto.setPasswordReset(getPasswordReset());
+    // copy position
+    newDto.setPosition(getPosition());
+    // copy defaultPerpective
+    newDto.setDefaultPerpective(getDefaultPerpective());
+    // copy enabled
+    newDto.setEnabled(getEnabled());
+    // copy locked
+    newDto.setLocked(getLocked());
+    // copy superuser
+    newDto.setSuperuser(getSuperuser());
+    // copy supervisor
+    newDto.setSupervisor(getSupervisor());
+    // copy forcePwdChange
+    newDto.setForcePwdChange(getForcePwdChange());
+    // copy notRegistered
+    newDto.setNotRegistered(getNotRegistered());
+    // copy failedAttempt
+    newDto.setFailedAttempt(getFailedAttempt());
+    // copy successfulAttempt
+    newDto.setSuccessfulAttempt(getSuccessfulAttempt());
+    // copy cookieHashCode
+    newDto.setCookieHashCode(getCookieHashCode());
+    // copy localeTag
+    newDto.setLocaleTag(getLocaleTag());
+    // copy profileimage
+    newDto.setProfileimage(getProfileimage());
+    // copy layoutingStrategy
+    newDto.setLayoutingStrategy(getLayoutingStrategy());
+    // copy focusingStrategy
+    newDto.setFocusingStrategy(getFocusingStrategy());
+    // copy theme
+    newDto.setTheme(getTheme());
+    // copy printService
+    newDto.setPrintService(getPrintService());
+    
+    // copy containment references (cascading is true)
+  }
+  
+  public void copyCrossReferences(final UserAccountDto dto, final UserAccountDto newDto, final org.eclipse.osbp.dsl.dto.lib.MappingContext context) {
+    checkDisposed();
+    
+    if (context == null) {
+    	throw new IllegalArgumentException("Context must not be null!");
+    }
+    
+    
+    // copy cross references (cascading is false)
+    // copy list of userAccountFilter dtos
+    for(org.eclipse.osbp.authentication.account.dtos.UserAccountFilterDto _dto : getUserAccountFilter()) {
+    	newDto.addToUserAccountFilter(_dto.copy(context));
+    }
+  }
+  
+  public void propertyChange(final java.beans.PropertyChangeEvent event) {
+    Object source = event.getSource();
+    
+    // forward the event from embeddable beans to all listeners. So the parent of the embeddable
+    // bean will become notified and its dirty state can be handled properly
+    { 
+    	// no super class available to forward event
+    }
+  }
+}
diff --git a/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/UserAccountFilterDto.java b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/UserAccountFilterDto.java
new file mode 100644
index 0000000..1e5a129
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/UserAccountFilterDto.java
@@ -0,0 +1,314 @@
+package org.eclipse.osbp.authentication.account.dtos;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.io.Serializable;
+import org.eclipse.osbp.authentication.account.dtos.UserAccountDto;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainReference;
+import org.eclipse.osbp.runtime.common.annotations.Id;
+
+@SuppressWarnings("all")
+public class UserAccountFilterDto implements IDto, Serializable, PropertyChangeListener {
+  private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
+  
+  @Dispose
+  private boolean disposed;
+  
+  @Id
+  private String id = java.util.UUID.randomUUID().toString();
+  
+  private String filter;
+  
+  private boolean invers;
+  
+  @DomainReference
+  private UserAccountDto userAccount;
+  
+  public UserAccountFilterDto() {
+    installLazyCollections();
+  }
+  
+  /**
+   * Installs lazy collection resolving for entity {@link UserAccountFilter} to the dto {@link UserAccountFilterDto}.
+   * 
+   */
+  protected void installLazyCollections() {
+    
+  }
+  
+  /**
+   * @return true, if the object is disposed. 
+   * Disposed means, that it is prepared for garbage collection and may not be used anymore. 
+   * Accessing objects that are already disposed will cause runtime exceptions.
+   * 
+   */
+  public boolean isDisposed() {
+    return this.disposed;
+  }
+  
+  /**
+   * @see PropertyChangeSupport#addPropertyChangeListener(PropertyChangeListener)
+   */
+  public void addPropertyChangeListener(final PropertyChangeListener listener) {
+    propertyChangeSupport.addPropertyChangeListener(listener);
+  }
+  
+  /**
+   * @see PropertyChangeSupport#addPropertyChangeListener(String, PropertyChangeListener)
+   */
+  public void addPropertyChangeListener(final String propertyName, final PropertyChangeListener listener) {
+    propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
+  }
+  
+  /**
+   * @see PropertyChangeSupport#removePropertyChangeListener(PropertyChangeListener)
+   */
+  public void removePropertyChangeListener(final PropertyChangeListener listener) {
+    propertyChangeSupport.removePropertyChangeListener(listener);
+  }
+  
+  /**
+   * @see PropertyChangeSupport#removePropertyChangeListener(String, PropertyChangeListener)
+   */
+  public void removePropertyChangeListener(final String propertyName, final PropertyChangeListener listener) {
+    propertyChangeSupport.removePropertyChangeListener(propertyName, listener);
+  }
+  
+  /**
+   * @see PropertyChangeSupport#firePropertyChange(String, Object, Object)
+   */
+  public void firePropertyChange(final String propertyName, final Object oldValue, final Object newValue) {
+    propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
+  }
+  
+  /**
+   * Checks whether the object is disposed.
+   * @throws RuntimeException if the object is disposed.
+   */
+  private void checkDisposed() {
+    if (isDisposed()) {
+      throw new RuntimeException("Object already disposed: " + this);
+    }
+  }
+  
+  /**
+   * Calling dispose will destroy that instance. The internal state will be 
+   * set to 'disposed' and methods of that object must not be used anymore. 
+   * Each call will result in runtime exceptions.<br/>
+   * If this object keeps composition containments, these will be disposed too. 
+   * So the whole composition containment tree will be disposed on calling this method.
+   */
+  @Dispose
+  public void dispose() {
+    if (isDisposed()) {
+      return;
+    }
+    firePropertyChange("disposed", this.disposed, this.disposed = true);
+  }
+  
+  /**
+   * Returns the id property or <code>null</code> if not present.
+   */
+  public String getId() {
+    return this.id;
+  }
+  
+  /**
+   * Sets the <code>id</code> property to this instance.
+   * 
+   * @param id - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setId(final String id) {
+    firePropertyChange("id", this.id, this.id = id );
+    				installLazyCollections();
+  }
+  
+  /**
+   * Returns the filter property or <code>null</code> if not present.
+   */
+  public String getFilter() {
+    return this.filter;
+  }
+  
+  /**
+   * Sets the <code>filter</code> property to this instance.
+   * 
+   * @param filter - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setFilter(final String filter) {
+    firePropertyChange("filter", this.filter, this.filter = filter );
+  }
+  
+  /**
+   * Returns the invers property or <code>null</code> if not present.
+   */
+  public boolean getInvers() {
+    return this.invers;
+  }
+  
+  /**
+   * Sets the <code>invers</code> property to this instance.
+   * 
+   * @param invers - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setInvers(final boolean invers) {
+    firePropertyChange("invers", this.invers, this.invers = invers );
+  }
+  
+  /**
+   * Returns the userAccount property or <code>null</code> if not present.
+   */
+  public UserAccountDto getUserAccount() {
+    return this.userAccount;
+  }
+  
+  /**
+   * Sets the <code>userAccount</code> property to this instance.
+   * Since the reference has an opposite reference, the opposite <code>UserAccountDto#
+   * userAccountFilter</code> of the <code>userAccount</code> will be handled automatically and no 
+   * further coding is required to keep them in sync.<p>
+   * See {@link UserAccountDto#setUserAccountFilter(UserAccountDto)
+   * 
+   * @param userAccount - the property
+   * @throws RuntimeException if instance is <code>disposed</code>
+   * 
+   */
+  public void setUserAccount(final UserAccountDto userAccount) {
+    checkDisposed();
+    if (this.userAccount != null) {
+    	this.userAccount.internalRemoveFromUserAccountFilter(this);
+    }
+    
+    internalSetUserAccount(userAccount);
+    
+    if (this.userAccount != null) {
+    	this.userAccount.internalAddToUserAccountFilter(this);
+    }
+  }
+  
+  /**
+   * For internal use only!
+   */
+  public void internalSetUserAccount(final UserAccountDto userAccount) {
+    firePropertyChange("userAccount", this.userAccount, this.userAccount = userAccount);
+  }
+  
+  @Override
+  public boolean equals(final Object obj) {
+    if (this == obj)
+      return true;
+    if (obj == null)
+      return false;
+    if (getClass() != obj.getClass())
+      return false;
+    UserAccountFilterDto other = (UserAccountFilterDto) obj;
+    if (this.id == null) {
+      if (other.id != null)
+        return false;
+    } else if (!this.id.equals(other.id))
+      return false;
+    return true;
+  }
+  
+  @Override
+  public int hashCode() {
+     int prime = 31;
+    int result = 1;
+    result = prime * result + ((this.id== null) ? 0 : this.id.hashCode());
+    return result;
+  }
+  
+  public UserAccountFilterDto createDto() {
+    return new UserAccountFilterDto();
+  }
+  
+  public UserAccountFilterDto copy(final MappingContext context) {
+    checkDisposed();
+    
+    if (context == null) {
+    	throw new IllegalArgumentException("Context must not be null!");
+    }
+    
+    if(context.isMaxLevel()){
+    	return null;
+    }
+    
+    // if context contains a copied instance of this object
+    // then return it
+    UserAccountFilterDto newDto = context.get(this);
+    if(newDto != null){
+    	return newDto;
+    }
+    
+    try{
+    	context.increaseLevel();
+    	
+    	newDto = createDto();
+    	context.register(this, newDto);
+    	
+    	// first copy the containments and attributes
+    	copyContainments(this, newDto, context);
+    	
+    	// then copy cross references to ensure proper
+    	// opposite references are copied too.
+    	copyCrossReferences(this, newDto, context);
+    } finally {
+    	context.decreaseLevel();
+    }
+    
+    return newDto;
+  }
+  
+  public void copyContainments(final UserAccountFilterDto dto, final UserAccountFilterDto newDto, final MappingContext context) {
+    checkDisposed();
+    
+    if (context == null) {
+    	throw new IllegalArgumentException("Context must not be null!");
+    }
+    
+    
+    // copy attributes and beans (beans if derived from entity model)
+    // copy id
+    newDto.setId(getId());
+    // copy filter
+    newDto.setFilter(getFilter());
+    // copy invers
+    newDto.setInvers(getInvers());
+    
+    // copy containment references (cascading is true)
+  }
+  
+  public void copyCrossReferences(final UserAccountFilterDto dto, final UserAccountFilterDto newDto, final org.eclipse.osbp.dsl.dto.lib.MappingContext context) {
+    checkDisposed();
+    
+    if (context == null) {
+    	throw new IllegalArgumentException("Context must not be null!");
+    }
+    
+    
+    // copy cross references (cascading is false)
+    // copy dto userAccount
+    if(getUserAccount() != null) {
+    	newDto.setUserAccount(getUserAccount().copy(context));
+    }
+  }
+  
+  public void propertyChange(final java.beans.PropertyChangeEvent event) {
+    Object source = event.getSource();
+    
+    // forward the event from embeddable beans to all listeners. So the parent of the embeddable
+    // bean will become notified and its dirty state can be handled properly
+    { 
+    	// no super class available to forward event
+    }
+  }
+}
diff --git a/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/mapper/UserAccountDtoMapper.java b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/mapper/UserAccountDtoMapper.java
new file mode 100644
index 0000000..7baf26f
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/mapper/UserAccountDtoMapper.java
@@ -0,0 +1,782 @@
+package org.eclipse.osbp.authentication.account.dtos.mapper;
+
+import java.util.List;
+import org.eclipse.osbp.authentication.account.dtos.UserAccountDto;
+import org.eclipse.osbp.authentication.account.dtos.UserAccountFilterDto;
+import org.eclipse.osbp.authentication.account.entities.UserAccount;
+import org.eclipse.osbp.authentication.account.entities.UserAccountFilter;
+import org.eclipse.osbp.dsl.dto.lib.IMapper;
+import org.eclipse.osbp.dsl.dto.lib.IMapperAccess;
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+
+/**
+ * This class maps the dto {@link UserAccountDto} to and from the entity {@link UserAccount}.
+ * 
+ */
+@SuppressWarnings("all")
+public class UserAccountDtoMapper<DTO extends UserAccountDto, ENTITY extends UserAccount> implements IMapper<DTO, ENTITY> {
+  private IMapperAccess mapperAccess;
+  
+  /**
+   * Returns the mapper instance that may map between the given dto and entity. Or <code>null</code> if no mapper is available.
+   * 
+   * @param dtoClass - the class of the dto that should be mapped
+   * @param entityClass - the class of the entity that should be mapped
+   * @return the mapper instance or <code>null</code>
+   */
+  protected <D, E> IMapper<D, E> getToDtoMapper(final Class<D> dtoClass, final Class<E> entityClass) {
+    return mapperAccess.getToDtoMapper(dtoClass, entityClass);
+  }
+  
+  /**
+   * Returns the mapper instance that may map between the given dto and entity. Or <code>null</code> if no mapper is available.
+   * 
+   * @param dtoClass - the class of the dto that should be mapped
+   * @param entityClass - the class of the entity that should be mapped
+   * @return the mapper instance or <code>null</code>
+   */
+  protected <D, E> IMapper<D, E> getToEntityMapper(final Class<D> dtoClass, final Class<E> entityClass) {
+    return mapperAccess.getToEntityMapper(dtoClass, entityClass);
+  }
+  
+  /**
+   * Called by OSGi-DS. Binds the mapper access service.
+   * 
+   * @param service - The mapper access service
+   * 
+   */
+  protected void bindMapperAccess(final IMapperAccess mapperAccess) {
+    this.mapperAccess = mapperAccess;
+  }
+  
+  /**
+   * Called by OSGi-DS. Binds the mapper access service.
+   * 
+   * @param service - The mapper access service
+   * 
+   */
+  protected void unbindMapperAccess(final IMapperAccess mapperAccess) {
+    this.mapperAccess = null;
+  }
+  
+  /**
+   * Creates a new instance of the entity
+   */
+  public UserAccount createEntity() {
+    return new UserAccount();
+  }
+  
+  /**
+   * Creates a new instance of the dto
+   */
+  public UserAccountDto createDto() {
+    return new UserAccountDto();
+  }
+  
+  /**
+   * Maps the entity {@link UserAccount} to the dto {@link UserAccountDto}.
+   * 
+   * @param dto - The target dto
+   * @param entity - The source entity
+   * @param context - The context to get information about depth,...
+   * 
+   */
+  public void mapToDTO(final UserAccountDto dto, final UserAccount entity, final MappingContext context) {
+    if(context == null){
+    	throw new IllegalArgumentException("Please pass a context!");
+    }
+    context.register(createDtoHash(entity), dto);
+    
+    dto.setId(toDto_id(entity, context));
+    dto.setEmail(toDto_email(entity, context));
+    dto.setUserName(toDto_userName(entity, context));
+    dto.setPassword(toDto_password(entity, context));
+    dto.setExtraPassword(toDto_extraPassword(entity, context));
+    dto.setPasswordReset(toDto_passwordReset(entity, context));
+    dto.setPosition(toDto_position(entity, context));
+    dto.setDefaultPerpective(toDto_defaultPerpective(entity, context));
+    dto.setEnabled(toDto_enabled(entity, context));
+    dto.setLocked(toDto_locked(entity, context));
+    dto.setSuperuser(toDto_superuser(entity, context));
+    dto.setSupervisor(toDto_supervisor(entity, context));
+    dto.setForcePwdChange(toDto_forcePwdChange(entity, context));
+    dto.setNotRegistered(toDto_notRegistered(entity, context));
+    dto.setFailedAttempt(toDto_failedAttempt(entity, context));
+    dto.setSuccessfulAttempt(toDto_successfulAttempt(entity, context));
+    dto.setCookieHashCode(toDto_cookieHashCode(entity, context));
+    dto.setLocaleTag(toDto_localeTag(entity, context));
+    dto.setProfileimage(toDto_profileimage(entity, context));
+    dto.setLayoutingStrategy(toDto_layoutingStrategy(entity, context));
+    dto.setFocusingStrategy(toDto_focusingStrategy(entity, context));
+    dto.setTheme(toDto_theme(entity, context));
+    dto.setPrintService(toDto_printService(entity, context));
+  }
+  
+  /**
+   * Maps the dto {@link UserAccountDto} to the entity {@link UserAccount}.
+   * 
+   * @param dto - The source dto
+   * @param entity - The target entity
+   * @param context - The context to get information about depth,...
+   * 
+   */
+  public void mapToEntity(final UserAccountDto dto, final UserAccount entity, final MappingContext context) {
+    if(context == null){
+    	throw new IllegalArgumentException("Please pass a context!");
+    }
+    
+    context.register(createEntityHash(dto), entity);
+    context.registerMappingRoot(createEntityHash(dto), dto);
+    
+    entity.setId(toEntity_id(dto, entity, context));
+    entity.setEmail(toEntity_email(dto, entity, context));
+    entity.setUserName(toEntity_userName(dto, entity, context));
+    entity.setPassword(toEntity_password(dto, entity, context));
+    entity.setExtraPassword(toEntity_extraPassword(dto, entity, context));
+    entity.setPasswordReset(toEntity_passwordReset(dto, entity, context));
+    entity.setPosition(toEntity_position(dto, entity, context));
+    entity.setDefaultPerpective(toEntity_defaultPerpective(dto, entity, context));
+    entity.setEnabled(toEntity_enabled(dto, entity, context));
+    entity.setLocked(toEntity_locked(dto, entity, context));
+    entity.setSuperuser(toEntity_superuser(dto, entity, context));
+    entity.setSupervisor(toEntity_supervisor(dto, entity, context));
+    entity.setForcePwdChange(toEntity_forcePwdChange(dto, entity, context));
+    entity.setNotRegistered(toEntity_notRegistered(dto, entity, context));
+    entity.setFailedAttempt(toEntity_failedAttempt(dto, entity, context));
+    entity.setSuccessfulAttempt(toEntity_successfulAttempt(dto, entity, context));
+    entity.setCookieHashCode(toEntity_cookieHashCode(dto, entity, context));
+    entity.setLocaleTag(toEntity_localeTag(dto, entity, context));
+    entity.setProfileimage(toEntity_profileimage(dto, entity, context));
+    entity.setLayoutingStrategy(toEntity_layoutingStrategy(dto, entity, context));
+    entity.setFocusingStrategy(toEntity_focusingStrategy(dto, entity, context));
+    entity.setTheme(toEntity_theme(dto, entity, context));
+    entity.setPrintService(toEntity_printService(dto, entity, context));
+    toEntity_userAccountFilter(dto, entity, context);
+  }
+  
+  /**
+   * Maps the property id from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toDto_id(final UserAccount in, final MappingContext context) {
+    return in.getId();
+  }
+  
+  /**
+   * Maps the property id from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toEntity_id(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getId();
+  }
+  
+  /**
+   * Maps the property email from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toDto_email(final UserAccount in, final MappingContext context) {
+    return in.getEmail();
+  }
+  
+  /**
+   * Maps the property email from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toEntity_email(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getEmail();
+  }
+  
+  /**
+   * Maps the property userName from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toDto_userName(final UserAccount in, final MappingContext context) {
+    return in.getUserName();
+  }
+  
+  /**
+   * Maps the property userName from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toEntity_userName(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getUserName();
+  }
+  
+  /**
+   * Maps the property password from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toDto_password(final UserAccount in, final MappingContext context) {
+    return in.getPassword();
+  }
+  
+  /**
+   * Maps the property password from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toEntity_password(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getPassword();
+  }
+  
+  /**
+   * Maps the property extraPassword from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toDto_extraPassword(final UserAccount in, final MappingContext context) {
+    return in.getExtraPassword();
+  }
+  
+  /**
+   * Maps the property extraPassword from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toEntity_extraPassword(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getExtraPassword();
+  }
+  
+  /**
+   * Maps the property passwordReset from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected boolean toDto_passwordReset(final UserAccount in, final MappingContext context) {
+    return in.getPasswordReset();
+  }
+  
+  /**
+   * Maps the property passwordReset from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected boolean toEntity_passwordReset(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getPasswordReset();
+  }
+  
+  /**
+   * Maps the property position from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toDto_position(final UserAccount in, final MappingContext context) {
+    return in.getPosition();
+  }
+  
+  /**
+   * Maps the property position from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toEntity_position(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getPosition();
+  }
+  
+  /**
+   * Maps the property defaultPerpective from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toDto_defaultPerpective(final UserAccount in, final MappingContext context) {
+    return in.getDefaultPerpective();
+  }
+  
+  /**
+   * Maps the property defaultPerpective from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toEntity_defaultPerpective(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getDefaultPerpective();
+  }
+  
+  /**
+   * Maps the property enabled from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected boolean toDto_enabled(final UserAccount in, final MappingContext context) {
+    return in.getEnabled();
+  }
+  
+  /**
+   * Maps the property enabled from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected boolean toEntity_enabled(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getEnabled();
+  }
+  
+  /**
+   * Maps the property locked from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected boolean toDto_locked(final UserAccount in, final MappingContext context) {
+    return in.getLocked();
+  }
+  
+  /**
+   * Maps the property locked from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected boolean toEntity_locked(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getLocked();
+  }
+  
+  /**
+   * Maps the property superuser from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected boolean toDto_superuser(final UserAccount in, final MappingContext context) {
+    return in.getSuperuser();
+  }
+  
+  /**
+   * Maps the property superuser from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected boolean toEntity_superuser(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getSuperuser();
+  }
+  
+  /**
+   * Maps the property supervisor from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected boolean toDto_supervisor(final UserAccount in, final MappingContext context) {
+    return in.getSupervisor();
+  }
+  
+  /**
+   * Maps the property supervisor from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected boolean toEntity_supervisor(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getSupervisor();
+  }
+  
+  /**
+   * Maps the property forcePwdChange from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected boolean toDto_forcePwdChange(final UserAccount in, final MappingContext context) {
+    return in.getForcePwdChange();
+  }
+  
+  /**
+   * Maps the property forcePwdChange from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected boolean toEntity_forcePwdChange(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getForcePwdChange();
+  }
+  
+  /**
+   * Maps the property notRegistered from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected boolean toDto_notRegistered(final UserAccount in, final MappingContext context) {
+    return in.getNotRegistered();
+  }
+  
+  /**
+   * Maps the property notRegistered from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected boolean toEntity_notRegistered(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getNotRegistered();
+  }
+  
+  /**
+   * Maps the property failedAttempt from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected int toDto_failedAttempt(final UserAccount in, final MappingContext context) {
+    return in.getFailedAttempt();
+  }
+  
+  /**
+   * Maps the property failedAttempt from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected int toEntity_failedAttempt(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getFailedAttempt();
+  }
+  
+  /**
+   * Maps the property successfulAttempt from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected int toDto_successfulAttempt(final UserAccount in, final MappingContext context) {
+    return in.getSuccessfulAttempt();
+  }
+  
+  /**
+   * Maps the property successfulAttempt from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected int toEntity_successfulAttempt(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getSuccessfulAttempt();
+  }
+  
+  /**
+   * Maps the property cookieHashCode from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected int toDto_cookieHashCode(final UserAccount in, final MappingContext context) {
+    return in.getCookieHashCode();
+  }
+  
+  /**
+   * Maps the property cookieHashCode from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected int toEntity_cookieHashCode(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getCookieHashCode();
+  }
+  
+  /**
+   * Maps the property localeTag from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toDto_localeTag(final UserAccount in, final MappingContext context) {
+    return in.getLocaleTag();
+  }
+  
+  /**
+   * Maps the property localeTag from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toEntity_localeTag(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getLocaleTag();
+  }
+  
+  /**
+   * Maps the property profileimage from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toDto_profileimage(final UserAccount in, final MappingContext context) {
+    return in.getProfileimage();
+  }
+  
+  /**
+   * Maps the property profileimage from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toEntity_profileimage(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getProfileimage();
+  }
+  
+  /**
+   * Maps the property layoutingStrategy from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toDto_layoutingStrategy(final UserAccount in, final MappingContext context) {
+    return in.getLayoutingStrategy();
+  }
+  
+  /**
+   * Maps the property layoutingStrategy from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toEntity_layoutingStrategy(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getLayoutingStrategy();
+  }
+  
+  /**
+   * Maps the property focusingStrategy from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toDto_focusingStrategy(final UserAccount in, final MappingContext context) {
+    return in.getFocusingStrategy();
+  }
+  
+  /**
+   * Maps the property focusingStrategy from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toEntity_focusingStrategy(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getFocusingStrategy();
+  }
+  
+  /**
+   * Maps the property theme from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toDto_theme(final UserAccount in, final MappingContext context) {
+    return in.getTheme();
+  }
+  
+  /**
+   * Maps the property theme from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toEntity_theme(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getTheme();
+  }
+  
+  /**
+   * Maps the property printService from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toDto_printService(final UserAccount in, final MappingContext context) {
+    return in.getPrintService();
+  }
+  
+  /**
+   * Maps the property printService from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toEntity_printService(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    return in.getPrintService();
+  }
+  
+  /**
+   * Maps the property userAccountFilter from the given entity to the dto.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return A list of mapped dtos
+   * 
+   */
+  protected List<UserAccountFilterDto> toDto_userAccountFilter(final UserAccount in, final MappingContext context) {
+    // nothing to do here. Mapping is done by OppositeLists
+    return null;
+  }
+  
+  /**
+   * Maps the property userAccountFilter from the given dto to the entity.
+   * 
+   * @param in - The source dto
+   * @param parentEntity - The parent entity
+   * @param context - The context to get information about depth,...
+   * @return A list of mapped entities
+   * 
+   */
+  protected List<UserAccountFilter> toEntity_userAccountFilter(final UserAccountDto in, final UserAccount parentEntity, final MappingContext context) {
+    org.eclipse.osbp.dsl.dto.lib.IMapper<UserAccountFilterDto, UserAccountFilter> mapper = getToEntityMapper(UserAccountFilterDto.class, UserAccountFilter.class);
+    if(mapper == null) {
+    	throw new IllegalStateException("Mapper must not be null!");
+    }
+    
+    org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<UserAccountFilterDto> childsList = 
+    	(org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<UserAccountFilterDto>) in.internalGetUserAccountFilter();
+    
+    // if entities are being added, then they are passed to
+    // #addToContainerChilds of the parent entity. So the container ref is setup
+    // properly!
+    // if entities are being removed, then they are passed to the
+    // #internalRemoveFromChilds method of the parent entity. So they are
+    // removed directly from the list of entities.
+    childsList.mapToEntity(mapper,
+    		parentEntity::addToUserAccountFilter,
+    		parentEntity::internalRemoveFromUserAccountFilter);
+    return null;
+  }
+  
+  public String createDtoHash(final Object in) {
+    return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(UserAccountDto.class, in);
+  }
+  
+  public String createEntityHash(final Object in) {
+    return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(UserAccount.class, in);
+  }
+}
diff --git a/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/mapper/UserAccountFilterDtoMapper.java b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/mapper/UserAccountFilterDtoMapper.java
new file mode 100644
index 0000000..9e96dcc
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/mapper/UserAccountFilterDtoMapper.java
@@ -0,0 +1,271 @@
+package org.eclipse.osbp.authentication.account.dtos.mapper;
+
+import org.eclipse.osbp.authentication.account.dtos.UserAccountDto;
+import org.eclipse.osbp.authentication.account.dtos.UserAccountFilterDto;
+import org.eclipse.osbp.authentication.account.entities.UserAccount;
+import org.eclipse.osbp.authentication.account.entities.UserAccountFilter;
+import org.eclipse.osbp.dsl.dto.lib.IMapper;
+import org.eclipse.osbp.dsl.dto.lib.IMapperAccess;
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+
+/**
+ * This class maps the dto {@link UserAccountFilterDto} to and from the entity {@link UserAccountFilter}.
+ * 
+ */
+@SuppressWarnings("all")
+public class UserAccountFilterDtoMapper<DTO extends UserAccountFilterDto, ENTITY extends UserAccountFilter> implements IMapper<DTO, ENTITY> {
+  private IMapperAccess mapperAccess;
+  
+  /**
+   * Returns the mapper instance that may map between the given dto and entity. Or <code>null</code> if no mapper is available.
+   * 
+   * @param dtoClass - the class of the dto that should be mapped
+   * @param entityClass - the class of the entity that should be mapped
+   * @return the mapper instance or <code>null</code>
+   */
+  protected <D, E> IMapper<D, E> getToDtoMapper(final Class<D> dtoClass, final Class<E> entityClass) {
+    return mapperAccess.getToDtoMapper(dtoClass, entityClass);
+  }
+  
+  /**
+   * Returns the mapper instance that may map between the given dto and entity. Or <code>null</code> if no mapper is available.
+   * 
+   * @param dtoClass - the class of the dto that should be mapped
+   * @param entityClass - the class of the entity that should be mapped
+   * @return the mapper instance or <code>null</code>
+   */
+  protected <D, E> IMapper<D, E> getToEntityMapper(final Class<D> dtoClass, final Class<E> entityClass) {
+    return mapperAccess.getToEntityMapper(dtoClass, entityClass);
+  }
+  
+  /**
+   * Called by OSGi-DS. Binds the mapper access service.
+   * 
+   * @param service - The mapper access service
+   * 
+   */
+  protected void bindMapperAccess(final IMapperAccess mapperAccess) {
+    this.mapperAccess = mapperAccess;
+  }
+  
+  /**
+   * Called by OSGi-DS. Binds the mapper access service.
+   * 
+   * @param service - The mapper access service
+   * 
+   */
+  protected void unbindMapperAccess(final IMapperAccess mapperAccess) {
+    this.mapperAccess = null;
+  }
+  
+  /**
+   * Creates a new instance of the entity
+   */
+  public UserAccountFilter createEntity() {
+    return new UserAccountFilter();
+  }
+  
+  /**
+   * Creates a new instance of the dto
+   */
+  public UserAccountFilterDto createDto() {
+    return new UserAccountFilterDto();
+  }
+  
+  /**
+   * Maps the entity {@link UserAccountFilter} to the dto {@link UserAccountFilterDto}.
+   * 
+   * @param dto - The target dto
+   * @param entity - The source entity
+   * @param context - The context to get information about depth,...
+   * 
+   */
+  public void mapToDTO(final UserAccountFilterDto dto, final UserAccountFilter entity, final MappingContext context) {
+    if(context == null){
+    	throw new IllegalArgumentException("Please pass a context!");
+    }
+    context.register(createDtoHash(entity), dto);
+    
+    dto.setId(toDto_id(entity, context));
+    dto.setFilter(toDto_filter(entity, context));
+    dto.setInvers(toDto_invers(entity, context));
+    dto.setUserAccount(toDto_userAccount(entity, context));
+  }
+  
+  /**
+   * Maps the dto {@link UserAccountFilterDto} to the entity {@link UserAccountFilter}.
+   * 
+   * @param dto - The source dto
+   * @param entity - The target entity
+   * @param context - The context to get information about depth,...
+   * 
+   */
+  public void mapToEntity(final UserAccountFilterDto dto, final UserAccountFilter entity, final MappingContext context) {
+    if(context == null){
+    	throw new IllegalArgumentException("Please pass a context!");
+    }
+    
+    context.register(createEntityHash(dto), entity);
+    context.registerMappingRoot(createEntityHash(dto), dto);
+    
+    entity.setId(toEntity_id(dto, entity, context));
+    entity.setFilter(toEntity_filter(dto, entity, context));
+    entity.setInvers(toEntity_invers(dto, entity, context));
+    entity.setUserAccount(toEntity_userAccount(dto, entity, context));
+  }
+  
+  /**
+   * Maps the property id from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toDto_id(final UserAccountFilter in, final MappingContext context) {
+    return in.getId();
+  }
+  
+  /**
+   * Maps the property id from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toEntity_id(final UserAccountFilterDto in, final UserAccountFilter parentEntity, final MappingContext context) {
+    return in.getId();
+  }
+  
+  /**
+   * Maps the property filter from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toDto_filter(final UserAccountFilter in, final MappingContext context) {
+    return in.getFilter();
+  }
+  
+  /**
+   * Maps the property filter from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected String toEntity_filter(final UserAccountFilterDto in, final UserAccountFilter parentEntity, final MappingContext context) {
+    return in.getFilter();
+  }
+  
+  /**
+   * Maps the property invers from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected boolean toDto_invers(final UserAccountFilter in, final MappingContext context) {
+    return in.getInvers();
+  }
+  
+  /**
+   * Maps the property invers from the given entity to dto property.
+   * 
+   * @param in - The source entity
+   * @param parentEntity - The parentEntity
+   * @param context - The context to get information about depth,...
+   * @return the mapped value
+   * 
+   */
+  protected boolean toEntity_invers(final UserAccountFilterDto in, final UserAccountFilter parentEntity, final MappingContext context) {
+    return in.getInvers();
+  }
+  
+  /**
+   * Maps the property userAccount from the given entity to the dto.
+   * 
+   * @param in - The source entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped dto
+   * 
+   */
+  protected UserAccountDto toDto_userAccount(final UserAccountFilter in, final MappingContext context) {
+    if(in.getUserAccount() != null) {
+    	// find a mapper that knows how to map the concrete input type.
+    	org.eclipse.osbp.dsl.dto.lib.IMapper<UserAccountDto, UserAccount> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<UserAccountDto, UserAccount>) getToDtoMapper(UserAccountDto.class, in.getUserAccount().getClass());
+    	if(mapper == null) {
+    		throw new IllegalStateException("Mapper must not be null!");
+    	}
+    	UserAccountDto dto = null;
+    	dto = context.get(mapper.createDtoHash(in.getUserAccount()));
+    	if(dto != null) {
+    		if(context.isRefresh()){
+    			mapper.mapToDTO(dto, in.getUserAccount(), context);
+    		}
+    		return dto;
+    	}
+    	
+    	context.increaseLevel();
+    	dto = mapper.createDto();
+    	mapper.mapToDTO(dto, in.getUserAccount(), context);
+    	context.decreaseLevel();
+    	return dto;
+    } else {
+    	return null;
+    }
+  }
+  
+  /**
+   * Maps the property userAccount from the given dto to the entity.
+   * 
+   * @param in - The source dto
+   * @param parentEntity - The parent entity
+   * @param context - The context to get information about depth,...
+   * @return the mapped entity
+   * 
+   */
+  protected UserAccount toEntity_userAccount(final UserAccountFilterDto in, final UserAccountFilter parentEntity, final MappingContext context) {
+    if(in.getUserAccount() != null) {
+    	// find a mapper that knows how to map the concrete input type.
+    	org.eclipse.osbp.dsl.dto.lib.IMapper<UserAccountDto, UserAccount> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<UserAccountDto, UserAccount>) getToEntityMapper(in.getUserAccount().getClass(), UserAccount.class);
+    	if(mapper == null) {
+    		throw new IllegalStateException("Mapper must not be null!");
+    	}
+    
+    	UserAccount entity = null;
+    	entity = context.get(mapper.createEntityHash(in.getUserAccount()));
+    	if(entity != null) {
+    		return entity;
+    	} else {
+    		entity = (UserAccount) context
+    			.findEntityByEntityManager(UserAccount.class, in.getUserAccount().getId());
+    		if (entity != null) {
+    			context.register(mapper.createEntityHash(entity), entity);
+    			return entity;
+    		}
+    	}
+    
+    	entity = mapper.createEntity();
+    	mapper.mapToEntity(in.getUserAccount(), entity, context);	
+    	return entity;
+    } else {
+    	return null;
+    }	
+  }
+  
+  public String createDtoHash(final Object in) {
+    return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(UserAccountFilterDto.class, in);
+  }
+  
+  public String createEntityHash(final Object in) {
+    return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(UserAccountFilter.class, in);
+  }
+}
diff --git a/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/service/UserAccountDtoService.java b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/service/UserAccountDtoService.java
new file mode 100644
index 0000000..d0d10ba
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/service/UserAccountDtoService.java
@@ -0,0 +1,25 @@
+package org.eclipse.osbp.authentication.account.dtos.service;
+
+import org.eclipse.osbp.authentication.account.dtos.UserAccountDto;
+import org.eclipse.osbp.authentication.account.entities.UserAccount;
+import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOServiceWithMutablePersistence;
+
+@SuppressWarnings("all")
+public class UserAccountDtoService extends AbstractDTOServiceWithMutablePersistence<UserAccountDto, UserAccount> {
+  public UserAccountDtoService() {
+    // set the default persistence ID
+    setPersistenceId("authentication");
+  }
+  
+  public Class<UserAccountDto> getDtoClass() {
+    return UserAccountDto.class;
+  }
+  
+  public Class<UserAccount> getEntityClass() {
+    return UserAccount.class;
+  }
+  
+  public Object getId(final UserAccountDto dto) {
+    return dto.getId();
+  }
+}
diff --git a/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/service/UserAccountFilterDtoService.java b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/service/UserAccountFilterDtoService.java
new file mode 100644
index 0000000..4ad69e1
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/service/UserAccountFilterDtoService.java
@@ -0,0 +1,25 @@
+package org.eclipse.osbp.authentication.account.dtos.service;
+
+import org.eclipse.osbp.authentication.account.dtos.UserAccountFilterDto;
+import org.eclipse.osbp.authentication.account.entities.UserAccountFilter;
+import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOServiceWithMutablePersistence;
+
+@SuppressWarnings("all")
+public class UserAccountFilterDtoService extends AbstractDTOServiceWithMutablePersistence<UserAccountFilterDto, UserAccountFilter> {
+  public UserAccountFilterDtoService() {
+    // set the default persistence ID
+    setPersistenceId("authentication");
+  }
+  
+  public Class<UserAccountFilterDto> getDtoClass() {
+    return UserAccountFilterDto.class;
+  }
+  
+  public Class<UserAccountFilter> getEntityClass() {
+    return UserAccountFilter.class;
+  }
+  
+  public Object getId(final UserAccountFilterDto dto) {
+    return dto.getId();
+  }
+}
diff --git a/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/entities/UserAccount.java b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/entities/UserAccount.java
new file mode 100644
index 0000000..88d3acb
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/entities/UserAccount.java
@@ -0,0 +1,631 @@
+/**
+ * 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.authentication.account.entities;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.persistence.Column;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
+import javax.persistence.PreRemove;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import javax.validation.constraints.Pattern;
+import org.eclipse.osbp.authentication.account.entities.UserAccountFilter;
+import org.eclipse.osbp.dsl.common.datatypes.IEntity;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.Properties;
+import org.eclipse.osbp.runtime.common.annotations.Property;
+import org.eclipse.osbp.runtime.jsr303.validation.common.InfoSeverity;
+import org.eclipse.persistence.annotations.Noncacheable;
+
+@Entity
+@Table(name = "USER_ACCOUNT")
+@DiscriminatorValue(value = "USER_ACCOUNT")
+@SuppressWarnings("all")
+public class UserAccount implements IEntity {
+  @Transient
+  @Dispose
+  private boolean disposed;
+  
+  @Id
+  private String id = java.util.UUID.randomUUID().toString();
+  
+  @Column(name = "EMAIL")
+  private String email;
+  
+  @Column(name = "USER_NAME")
+  private String userName;
+  
+  @Column(name = "PASSWORD")
+  private String password;
+  
+  @Column(name = "EXTRA_PASSWORD")
+  @Pattern(regexp = "[0-9]*", payload = InfoSeverity.class)
+  private String extraPassword;
+  
+  @Column(name = "PASSWORD_RESET")
+  private boolean passwordReset;
+  
+  @Column(name = "POSITION")
+  @Properties(properties = @Property(key = "organization", value = ""))
+  private String position;
+  
+  @Column(name = "DEFAULT_PERPECTIVE")
+  @Properties(properties = @Property(key = "perspective", value = ""))
+  private String defaultPerpective;
+  
+  @Column(name = "ENABLED")
+  private boolean enabled;
+  
+  @Column(name = "LOCKED")
+  private boolean locked;
+  
+  @Column(name = "SUPERUSER")
+  private boolean superuser;
+  
+  @Column(name = "SUPERVISOR")
+  private boolean supervisor;
+  
+  @Column(name = "FORCE_PWD_CHANGE")
+  private boolean forcePwdChange;
+  
+  @Column(name = "NOT_REGISTERED")
+  private boolean notRegistered;
+  
+  @Column(name = "FAILED_ATTEMPT")
+  private int failedAttempt;
+  
+  @Column(name = "SUCCESSFUL_ATTEMPT")
+  private int successfulAttempt;
+  
+  @Column(name = "COOKIE_HASH_CODE")
+  private int cookieHashCode;
+  
+  @Column(name = "LOCALE_TAG")
+  private String localeTag;
+  
+  @Column(name = "PROFILEIMAGE")
+  @Properties(properties = @Property(key = "Blob", value = "2"))
+  private String profileimage;
+  
+  @Column(name = "LAYOUTING_STRATEGY")
+  private String layoutingStrategy;
+  
+  @Column(name = "FOCUSING_STRATEGY")
+  private String focusingStrategy;
+  
+  @Column(name = "THEME")
+  private String theme;
+  
+  @Column(name = "PRINT_SERVICE")
+  private String printService;
+  
+  @JoinColumn(name = "USER_ACCOUNT_FILTER_ID")
+  @OneToMany(mappedBy = "userAccount")
+  @Noncacheable
+  private List<UserAccountFilter> userAccountFilter;
+  
+  /**
+   * @return true, if the object is disposed. 
+   * Disposed means, that it is prepared for garbage collection and may not be used anymore. 
+   * Accessing objects that are already disposed will cause runtime exceptions.
+   * 
+   */
+  @Dispose
+  public boolean isDisposed() {
+    return this.disposed;
+  }
+  
+  /**
+   * Checks whether the object is disposed.
+   * @throws RuntimeException if the object is disposed.
+   */
+  private void checkDisposed() {
+    if (isDisposed()) {
+      throw new RuntimeException("Object already disposed: " + this);
+    }
+  }
+  
+  /**
+   * Calling dispose will destroy that instance. The internal state will be 
+   * set to 'disposed' and methods of that object must not be used anymore. 
+   * Each call will result in runtime exceptions.<br>
+   * If this object keeps composition containments, these will be disposed too. 
+   * So the whole composition containment tree will be disposed on calling this method.
+   */
+  @Dispose
+  public void dispose() {
+    if (isDisposed()) {
+      return;
+    }
+    disposed = true;
+  }
+  
+  /**
+   * @return Returns the id property or <code>null</code> if not present.
+   */
+  public String getId() {
+    checkDisposed();
+    return this.id;
+  }
+  
+  /**
+   * Sets the id property to this instance.
+   */
+  public void setId(final String id) {
+    checkDisposed();
+    this.id = id;
+  }
+  
+  /**
+   * @return Returns the email property or <code>null</code> if not present.
+   */
+  public String getEmail() {
+    checkDisposed();
+    return this.email;
+  }
+  
+  /**
+   * Sets the email property to this instance.
+   */
+  public void setEmail(final String email) {
+    checkDisposed();
+    this.email = email;
+  }
+  
+  /**
+   * @return Returns the userName property or <code>null</code> if not present.
+   */
+  public String getUserName() {
+    checkDisposed();
+    return this.userName;
+  }
+  
+  /**
+   * Sets the userName property to this instance.
+   */
+  public void setUserName(final String userName) {
+    checkDisposed();
+    this.userName = userName;
+  }
+  
+  /**
+   * @return Returns the password property or <code>null</code> if not present.
+   */
+  public String getPassword() {
+    checkDisposed();
+    return this.password;
+  }
+  
+  /**
+   * Sets the password property to this instance.
+   */
+  public void setPassword(final String password) {
+    checkDisposed();
+    this.password = password;
+  }
+  
+  /**
+   * @return Returns the extraPassword property or <code>null</code> if not present.
+   */
+  public String getExtraPassword() {
+    checkDisposed();
+    return this.extraPassword;
+  }
+  
+  /**
+   * Sets the extraPassword property to this instance.
+   */
+  public void setExtraPassword(final String extraPassword) {
+    checkDisposed();
+    this.extraPassword = extraPassword;
+  }
+  
+  /**
+   * @return Returns the passwordReset property or <code>null</code> if not present.
+   */
+  public boolean getPasswordReset() {
+    checkDisposed();
+    return this.passwordReset;
+  }
+  
+  /**
+   * Sets the passwordReset property to this instance.
+   */
+  public void setPasswordReset(final boolean passwordReset) {
+    checkDisposed();
+    this.passwordReset = passwordReset;
+  }
+  
+  /**
+   * @return Returns the position property or <code>null</code> if not present.
+   */
+  public String getPosition() {
+    checkDisposed();
+    return this.position;
+  }
+  
+  /**
+   * Sets the position property to this instance.
+   */
+  public void setPosition(final String position) {
+    checkDisposed();
+    this.position = position;
+  }
+  
+  /**
+   * @return Returns the defaultPerpective property or <code>null</code> if not present.
+   */
+  public String getDefaultPerpective() {
+    checkDisposed();
+    return this.defaultPerpective;
+  }
+  
+  /**
+   * Sets the defaultPerpective property to this instance.
+   */
+  public void setDefaultPerpective(final String defaultPerpective) {
+    checkDisposed();
+    this.defaultPerpective = defaultPerpective;
+  }
+  
+  /**
+   * @return Returns the enabled property or <code>null</code> if not present.
+   */
+  public boolean getEnabled() {
+    checkDisposed();
+    return this.enabled;
+  }
+  
+  /**
+   * Sets the enabled property to this instance.
+   */
+  public void setEnabled(final boolean enabled) {
+    checkDisposed();
+    this.enabled = enabled;
+  }
+  
+  /**
+   * @return Returns the locked property or <code>null</code> if not present.
+   */
+  public boolean getLocked() {
+    checkDisposed();
+    return this.locked;
+  }
+  
+  /**
+   * Sets the locked property to this instance.
+   */
+  public void setLocked(final boolean locked) {
+    checkDisposed();
+    this.locked = locked;
+  }
+  
+  /**
+   * @return Returns the superuser property or <code>null</code> if not present.
+   */
+  public boolean getSuperuser() {
+    checkDisposed();
+    return this.superuser;
+  }
+  
+  /**
+   * Sets the superuser property to this instance.
+   */
+  public void setSuperuser(final boolean superuser) {
+    checkDisposed();
+    this.superuser = superuser;
+  }
+  
+  /**
+   * @return Returns the supervisor property or <code>null</code> if not present.
+   */
+  public boolean getSupervisor() {
+    checkDisposed();
+    return this.supervisor;
+  }
+  
+  /**
+   * Sets the supervisor property to this instance.
+   */
+  public void setSupervisor(final boolean supervisor) {
+    checkDisposed();
+    this.supervisor = supervisor;
+  }
+  
+  /**
+   * @return Returns the forcePwdChange property or <code>null</code> if not present.
+   */
+  public boolean getForcePwdChange() {
+    checkDisposed();
+    return this.forcePwdChange;
+  }
+  
+  /**
+   * Sets the forcePwdChange property to this instance.
+   */
+  public void setForcePwdChange(final boolean forcePwdChange) {
+    checkDisposed();
+    this.forcePwdChange = forcePwdChange;
+  }
+  
+  /**
+   * @return Returns the notRegistered property or <code>null</code> if not present.
+   */
+  public boolean getNotRegistered() {
+    checkDisposed();
+    return this.notRegistered;
+  }
+  
+  /**
+   * Sets the notRegistered property to this instance.
+   */
+  public void setNotRegistered(final boolean notRegistered) {
+    checkDisposed();
+    this.notRegistered = notRegistered;
+  }
+  
+  /**
+   * @return Returns the failedAttempt property or <code>null</code> if not present.
+   */
+  public int getFailedAttempt() {
+    checkDisposed();
+    return this.failedAttempt;
+  }
+  
+  /**
+   * Sets the failedAttempt property to this instance.
+   */
+  public void setFailedAttempt(final int failedAttempt) {
+    checkDisposed();
+    this.failedAttempt = failedAttempt;
+  }
+  
+  /**
+   * @return Returns the successfulAttempt property or <code>null</code> if not present.
+   */
+  public int getSuccessfulAttempt() {
+    checkDisposed();
+    return this.successfulAttempt;
+  }
+  
+  /**
+   * Sets the successfulAttempt property to this instance.
+   */
+  public void setSuccessfulAttempt(final int successfulAttempt) {
+    checkDisposed();
+    this.successfulAttempt = successfulAttempt;
+  }
+  
+  /**
+   * @return Returns the cookieHashCode property or <code>null</code> if not present.
+   */
+  public int getCookieHashCode() {
+    checkDisposed();
+    return this.cookieHashCode;
+  }
+  
+  /**
+   * Sets the cookieHashCode property to this instance.
+   */
+  public void setCookieHashCode(final int cookieHashCode) {
+    checkDisposed();
+    this.cookieHashCode = cookieHashCode;
+  }
+  
+  /**
+   * @return Returns the localeTag property or <code>null</code> if not present.
+   */
+  public String getLocaleTag() {
+    checkDisposed();
+    return this.localeTag;
+  }
+  
+  /**
+   * Sets the localeTag property to this instance.
+   */
+  public void setLocaleTag(final String localeTag) {
+    checkDisposed();
+    this.localeTag = localeTag;
+  }
+  
+  /**
+   * @return Returns the profileimage property or <code>null</code> if not present.
+   */
+  public String getProfileimage() {
+    checkDisposed();
+    return this.profileimage;
+  }
+  
+  /**
+   * Sets the profileimage property to this instance.
+   */
+  public void setProfileimage(final String profileimage) {
+    checkDisposed();
+    this.profileimage = profileimage;
+  }
+  
+  /**
+   * @return Returns the layoutingStrategy property or <code>null</code> if not present.
+   */
+  public String getLayoutingStrategy() {
+    checkDisposed();
+    return this.layoutingStrategy;
+  }
+  
+  /**
+   * Sets the layoutingStrategy property to this instance.
+   */
+  public void setLayoutingStrategy(final String layoutingStrategy) {
+    checkDisposed();
+    this.layoutingStrategy = layoutingStrategy;
+  }
+  
+  /**
+   * @return Returns the focusingStrategy property or <code>null</code> if not present.
+   */
+  public String getFocusingStrategy() {
+    checkDisposed();
+    return this.focusingStrategy;
+  }
+  
+  /**
+   * Sets the focusingStrategy property to this instance.
+   */
+  public void setFocusingStrategy(final String focusingStrategy) {
+    checkDisposed();
+    this.focusingStrategy = focusingStrategy;
+  }
+  
+  /**
+   * @return Returns the theme property or <code>null</code> if not present.
+   */
+  public String getTheme() {
+    checkDisposed();
+    return this.theme;
+  }
+  
+  /**
+   * Sets the theme property to this instance.
+   */
+  public void setTheme(final String theme) {
+    checkDisposed();
+    this.theme = theme;
+  }
+  
+  /**
+   * @return Returns the printService property or <code>null</code> if not present.
+   */
+  public String getPrintService() {
+    checkDisposed();
+    return this.printService;
+  }
+  
+  /**
+   * Sets the printService property to this instance.
+   */
+  public void setPrintService(final String printService) {
+    checkDisposed();
+    this.printService = printService;
+  }
+  
+  /**
+   * @return Returns an unmodifiable list of userAccountFilter.
+   */
+  public List<UserAccountFilter> getUserAccountFilter() {
+    checkDisposed();
+    return Collections.unmodifiableList(internalGetUserAccountFilter());
+  }
+  
+  /**
+   * Sets the given userAccountFilter to the object. Currently contained userAccountFilter instances will be removed.
+   * 
+   * @param userAccountFilter the list of new instances
+   */
+  public void setUserAccountFilter(final List<UserAccountFilter> userAccountFilter) {
+    // remove the old userAccountFilter
+    for(UserAccountFilter oldElement : new ArrayList<UserAccountFilter>(this.internalGetUserAccountFilter())){
+      removeFromUserAccountFilter(oldElement);
+    }
+    
+    // add the new userAccountFilter
+    for(UserAccountFilter newElement : userAccountFilter){
+      addToUserAccountFilter(newElement);
+    }
+  }
+  
+  /**
+   * For internal use only! Returns the list of <code>UserAccountFilter</code>s thereby lazy initializing it.
+   */
+  public List<UserAccountFilter> internalGetUserAccountFilter() {
+    if (this.userAccountFilter == null) {
+      this.userAccountFilter = new ArrayList<UserAccountFilter>();
+    }
+    return this.userAccountFilter;
+  }
+  
+  /**
+   * Adds the given userAccountFilter to this object. <p>
+   * Since the reference is a composition reference, the opposite reference (UserAccountFilter.userAccount)
+   * of the userAccountFilter will be handled automatically and no further coding is required to keep them in sync. 
+   * See {@link UserAccountFilter#setUserAccount(UserAccountFilter)}.
+   * 
+   */
+  public void addToUserAccountFilter(final UserAccountFilter userAccountFilter) {
+    checkDisposed();
+    userAccountFilter.setUserAccount(this);
+  }
+  
+  /**
+   * Removes the given userAccountFilter from this object. <p>
+   * 
+   */
+  public void removeFromUserAccountFilter(final UserAccountFilter userAccountFilter) {
+    checkDisposed();
+    userAccountFilter.setUserAccount(null);
+  }
+  
+  /**
+   * For internal use only!
+   */
+  public void internalAddToUserAccountFilter(final UserAccountFilter userAccountFilter) {
+    internalGetUserAccountFilter().add(userAccountFilter);
+  }
+  
+  /**
+   * For internal use only!
+   */
+  public void internalRemoveFromUserAccountFilter(final UserAccountFilter userAccountFilter) {
+    internalGetUserAccountFilter().remove(userAccountFilter);
+  }
+  
+  @Override
+  public boolean equals(final Object obj) {
+    if (this == obj)
+      return true;
+    if (obj == null)
+      return false;
+    if (getClass() != obj.getClass())
+      return false;
+    UserAccount other = (UserAccount) obj;
+    if (this.id == null) {
+      if (other.id != null)
+        return false;
+    } else if (!this.id.equals(other.id))
+      return false;
+    return true;
+  }
+  
+  @Override
+  public int hashCode() {
+     int prime = 31;
+    int result = 1;
+    result = prime * result + ((this.id== null) ? 0 : this.id.hashCode());
+    return result;
+  }
+  
+  /**
+   * Iterates all cross references and removes them from the parent to avoid ConstraintViolationException
+   */
+  @PreRemove
+  protected void preRemove() {
+    // remove the userAccountFilter
+    for(UserAccountFilter oldElement : new ArrayList<UserAccountFilter>(this.internalGetUserAccountFilter())){
+      removeFromUserAccountFilter(oldElement);
+    }
+  }
+}
diff --git a/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/entities/UserAccountFilter.java b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/entities/UserAccountFilter.java
new file mode 100644
index 0000000..c9d3365
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/entities/UserAccountFilter.java
@@ -0,0 +1,192 @@
+/**
+ * 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.authentication.account.entities;
+
+import javax.persistence.Column;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.PreRemove;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import org.eclipse.osbp.authentication.account.entities.UserAccount;
+import org.eclipse.osbp.dsl.common.datatypes.IEntity;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+
+@Entity
+@Table(name = "USER_ACCOUNT_FILTER")
+@DiscriminatorValue(value = "USER_ACCOUNT_FILTER")
+@SuppressWarnings("all")
+public class UserAccountFilter implements IEntity {
+  @Transient
+  @Dispose
+  private boolean disposed;
+  
+  @Id
+  private String id = java.util.UUID.randomUUID().toString();
+  
+  @Column(name = "FILTER")
+  private String filter;
+  
+  @Column(name = "INVERS")
+  private boolean invers;
+  
+  @ManyToOne(fetch = FetchType.LAZY)
+  @JoinColumn(name = "USER_ACCOUNT_ID")
+  private UserAccount userAccount;
+  
+  /**
+   * @return true, if the object is disposed. 
+   * Disposed means, that it is prepared for garbage collection and may not be used anymore. 
+   * Accessing objects that are already disposed will cause runtime exceptions.
+   * 
+   */
+  @Dispose
+  public boolean isDisposed() {
+    return this.disposed;
+  }
+  
+  /**
+   * Checks whether the object is disposed.
+   * @throws RuntimeException if the object is disposed.
+   */
+  private void checkDisposed() {
+    if (isDisposed()) {
+      throw new RuntimeException("Object already disposed: " + this);
+    }
+  }
+  
+  /**
+   * Calling dispose will destroy that instance. The internal state will be 
+   * set to 'disposed' and methods of that object must not be used anymore. 
+   * Each call will result in runtime exceptions.<br>
+   * If this object keeps composition containments, these will be disposed too. 
+   * So the whole composition containment tree will be disposed on calling this method.
+   */
+  @Dispose
+  public void dispose() {
+    if (isDisposed()) {
+      return;
+    }
+    disposed = true;
+  }
+  
+  /**
+   * @return Returns the id property or <code>null</code> if not present.
+   */
+  public String getId() {
+    checkDisposed();
+    return this.id;
+  }
+  
+  /**
+   * Sets the id property to this instance.
+   */
+  public void setId(final String id) {
+    checkDisposed();
+    this.id = id;
+  }
+  
+  /**
+   * @return Returns the filter property or <code>null</code> if not present.
+   */
+  public String getFilter() {
+    checkDisposed();
+    return this.filter;
+  }
+  
+  /**
+   * Sets the filter property to this instance.
+   */
+  public void setFilter(final String filter) {
+    checkDisposed();
+    this.filter = filter;
+  }
+  
+  /**
+   * @return Returns the invers property or <code>null</code> if not present.
+   */
+  public boolean getInvers() {
+    checkDisposed();
+    return this.invers;
+  }
+  
+  /**
+   * Sets the invers property to this instance.
+   */
+  public void setInvers(final boolean invers) {
+    checkDisposed();
+    this.invers = invers;
+  }
+  
+  /**
+   * @return Returns the userAccount property or <code>null</code> if not present.
+   */
+  public UserAccount getUserAccount() {
+    checkDisposed();
+    return this.userAccount;
+  }
+  
+  /**
+   * Sets the userAccount property to this instance.
+   * Since the reference is a container reference, the opposite reference (UserAccount.userAccountFilter)
+   * of the userAccount will be handled automatically and no further coding is required to keep them in sync.
+   * See {@link UserAccount#setUserAccountFilter(UserAccount)}.
+   */
+  public void setUserAccount(final UserAccount userAccount) {
+    checkDisposed();
+    if (this.userAccount != null) {
+      this.userAccount.internalRemoveFromUserAccountFilter(this);
+    }
+    this.userAccount = userAccount;
+    if (this.userAccount != null) {
+      this.userAccount.internalAddToUserAccountFilter(this);
+    }
+    
+  }
+  
+  @Override
+  public boolean equals(final Object obj) {
+    if (this == obj)
+      return true;
+    if (obj == null)
+      return false;
+    if (getClass() != obj.getClass())
+      return false;
+    UserAccountFilter other = (UserAccountFilter) obj;
+    if (this.id == null) {
+      if (other.id != null)
+        return false;
+    } else if (!this.id.equals(other.id))
+      return false;
+    return true;
+  }
+  
+  @Override
+  public int hashCode() {
+     int prime = 31;
+    int result = 1;
+    result = prime * result + ((this.id== null) ? 0 : this.id.hashCode());
+    return result;
+  }
+  
+  /**
+   * Iterates all cross references and removes them from the parent to avoid ConstraintViolationException
+   */
+  @PreRemove
+  protected void preRemove() {
+    
+  }
+}
diff --git a/org.eclipse.osbp.authentication/src/account.datatype b/org.eclipse.osbp.authentication/src/account.datatype
new file mode 100644
index 0000000..39be23c
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/account.datatype
@@ -0,0 +1,28 @@
+package org.eclipse.osbp.authentication.account.datatypes {
+	
+	datatype boolean jvmType java.lang.Boolean as primitive;
+	datatype short jvmType java.lang.Short as primitive;
+	datatype int jvmType java.lang.Integer as primitive;
+	datatype long jvmType java.lang.Long as primitive;
+	datatype double jvmType java.lang.Double as primitive;
+	datatype float jvmType java.lang.Float as primitive;
+	datatype character jvmType java.lang.Character as primitive;
+	datatype byte jvmType java.lang.Byte as primitive;
+
+	datatype Boolean jvmType java.lang.Boolean;
+	datatype Short jvmType java.lang.Short;
+	datatype Int jvmType java.lang.Integer;
+	datatype Long jvmType java.lang.Long;
+	datatype Double jvmType java.lang.Double;
+	datatype Float jvmType java.lang.Float;
+	datatype Character jvmType java.lang.Character;
+	datatype Byte jvmType java.lang.Byte;
+	datatype BigDecimal jvmType java.math.BigDecimal;
+
+	datatype String jvmType java.lang.String;
+	datatype BlobImage jvmType java.lang.String properties (key="Blob" value="2");
+	datatype Date dateType date;
+	datatype datetype dateType date;
+	datatype timetype dateType time;
+	datatype blobtype as blob;	
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.authentication/src/account.dto b/org.eclipse.osbp.authentication/src/account.dto
new file mode 100644
index 0000000..c65191d
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/account.dto
@@ -0,0 +1,40 @@
+
+package org.eclipse.osbp.authentication.account.dtos {
+	import org.eclipse.osbp.authentication.account.entities.*;
+	autoDto UserAccountDto wraps UserAccount {
+
+		inherit var id
+		inherit var email
+		inherit var userName
+		inherit var password
+		inherit var extraPassword
+		inherit var passwordReset
+		inherit var position
+		inherit var defaultPerpective
+		inherit var enabled
+		inherit var locked
+		inherit var superuser
+		inherit var supervisor
+		inherit var forcePwdChange
+		inherit var notRegistered
+		inherit var failedAttempt
+		inherit var successfulAttempt
+		inherit var cookieHashCode
+		inherit var localeTag
+		inherit var profileimage
+		inherit var layoutingStrategy
+		inherit var focusingStrategy
+		inherit var theme
+		inherit var printService
+		inherit ref userAccountFilter mapto UserAccountFilterDto
+	}
+
+	autoDto UserAccountFilterDto wraps UserAccountFilter {
+
+		inherit var id
+		inherit var filter
+		inherit var invers
+		inherit ref userAccount mapto UserAccountDto
+	}
+
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.authentication/src/account.entity b/org.eclipse.osbp.authentication/src/account.entity
new file mode 100644
index 0000000..259d82b
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/account.entity
@@ -0,0 +1,52 @@
+/**
+ *                                                                            
+ *  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.authentication.account.entities {
+	import org.eclipse.osbp.authentication.account.datatypes.*;
+
+	entity UserAccount {
+		persistenceUnit "authentication";
+		uuid String id;
+		var String email;
+		var String userName;
+		var String password;
+		var String [regex("[0-9]*")] extraPassword;
+		var boolean passwordReset;
+		var String position properties (key="organization" value="");
+		var String defaultPerpective properties (key="perspective" value="");
+		var boolean enabled;
+		var boolean locked;
+		var boolean superuser;
+		var boolean supervisor;
+		var boolean forcePwdChange; 
+		var boolean notRegistered;
+		var int failedAttempt;
+		var int successfulAttempt;
+		var int cookieHashCode;
+		var String localeTag;
+		var BlobImage profileimage;
+		var String layoutingStrategy;
+		var String focusingStrategy;
+		var String theme;
+		var String printService;
+		ref UserAccountFilter [*] userAccountFilter opposite userAccount;
+	}
+	
+	entity UserAccountFilter {
+		persistenceUnit "authentication";
+		uuid String id;
+		var String filter;
+		var boolean invers; 
+		ref UserAccount userAccount opposite userAccountFilter; 
+	}
+}
diff --git a/org.eclipse.osbp.authentication/src/account.service b/org.eclipse.osbp.authentication/src/account.service
new file mode 100644
index 0000000..a1e8c63
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/account.service
@@ -0,0 +1,13 @@
+
+package org.eclipse.osbp.authentication.account.dtos.services {
+	import org.eclipse.osbp.authentication.account.dtos.*;
+}
+package org.eclipse.osbp.authentication.account.dtos.service {
+	import org.eclipse.osbp.authentication.account.dtos.*;
+	dtoservice UserAccountDtoService provides UserAccountDto {
+		mutable persistenceUnit authentication;
+	}
+	dtoservice UserAccountFilterDtoService provides UserAccountFilterDto {
+		mutable persistenceUnit authentication;
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/Activator.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/Activator.java
new file mode 100644
index 0000000..d91b4d1
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/Activator.java
@@ -0,0 +1,61 @@
+/**
+ *                                                                            
+ * 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.authentication;
+
+import org.eclipse.osbp.gitinfo.Loginfo;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class Activator.
+ * 
+ */
+public class Activator implements BundleActivator {
+
+	/** The context. */
+	private static BundleContext context;
+
+	/**
+	 * Gets the context.
+	 *
+	 * @return the context
+	 */
+	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;
+	}
+
+	/*
+	 * (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.authentication/src/org/eclipse/osbp/authentication/ServiceListener.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/ServiceListener.java
new file mode 100644
index 0000000..bc8db50
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/ServiceListener.java
@@ -0,0 +1,104 @@
+/**
+ *                                                                            
+ * 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.authentication;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.osbp.ui.api.complexdatacontainer.IComplexDataContainer;
+import org.eclipse.osbp.ui.api.complexdatacontainer.IComplexDataContainerChangedListener;
+import org.eclipse.osbp.ui.api.useraccess.IOrganizationService;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The listener interface for receiving service events. The class that is
+ * interested in processing a service event implements this interface, and the
+ * object created with that class is registered with a component using the
+ * component's <code>addServiceListener</code> method. When the service event
+ * occurs, that object's appropriate method is invoked.
+ *
+ */
+// TODO: check reference
+/*
+ * reference not found
+ * 
+ * @see ServiceEvent
+ */
+@Component
+public class ServiceListener {
+
+	/** The Constant LOGGER. */
+	private static final Logger LOGGER = LoggerFactory.getLogger(ServiceListener.class);
+
+	/** The Constant sOrganizationServices. */
+	public static final Map<String, IOrganizationService> sOrganizationServices = new HashMap<String, IOrganizationService>();
+
+	/** The listeners which are listening for changed complex data changes. */
+	public static final Set<IComplexDataContainerChangedListener> complexDataContainerChangedListeners = new HashSet<IComplexDataContainerChangedListener>();
+
+	/**
+	 * Gets the organization services.
+	 *
+	 * @return the organization services
+	 */
+	public static Set<IOrganizationService> getOrganizationServices() {
+		return new HashSet<IOrganizationService>(sOrganizationServices.values());
+	}
+
+	/**
+	 * Bind organization service.
+	 *
+	 * @param organization
+	 *            the organization
+	 */
+	@Reference(cardinality = ReferenceCardinality.OPTIONAL, policy = ReferencePolicy.DYNAMIC)
+	public void bindOrganizationService(IOrganizationService organization) {
+		LOGGER.debug(ServiceListener.class.getCanonicalName() + ": " + organization.getClass().getCanonicalName() + " bound");
+		sOrganizationServices.put(organization.getClass().getCanonicalName(), organization);
+		triggerComplexDataContainerChangedListeners();
+	}
+
+	/**
+	 * Unbind organization service.
+	 *
+	 * @param organization
+	 *            the organization
+	 */
+	public void unbindOrganizationService(IOrganizationService organization) {
+		LOGGER.debug(ServiceListener.class.getCanonicalName() + ": " + organization.getClass().getCanonicalName() + " unbound");
+		sOrganizationServices.remove(organization.getClass().getCanonicalName());
+		triggerComplexDataContainerChangedListeners();
+	}
+
+	public static void addComplexDataContainerChangedListener(IComplexDataContainerChangedListener listener) {
+		complexDataContainerChangedListeners.add(listener);
+	}
+
+	public static void removeComplexDataContainerChangedListener(IComplexDataContainerChangedListener listener) {
+		complexDataContainerChangedListeners.remove(listener);
+	}
+
+	public static void triggerComplexDataContainerChangedListeners() {
+		for	(IComplexDataContainerChangedListener listener : complexDataContainerChangedListeners) {
+			listener.complexDataContainerChanged();
+		}
+	}
+}
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/doc-files/model.png b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/doc-files/model.png
new file mode 100644
index 0000000..515879e
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/doc-files/model.png
Binary files differ
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/doc-files/model.ucls b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/doc-files/model.ucls
new file mode 100644
index 0000000..5bc1336
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/doc-files/model.ucls
@@ -0,0 +1,841 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<class-diagram version="1.1.9" icons="true" always-add-relationships="false" generalizations="true" realizations="true" 
+  associations="true" dependencies="false" nesting-relationships="true" router="FAN">  
+  <class id="1" language="java" name="org.eclipse.osbp.authentication.providerimpl.AuthorizationInformation" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/AuthorizationInformation.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="164" x="1429" y="37"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <enumeration id="2" language="java" name="org.eclipse.osbp.authentication.provider.AAuthorization.Group" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/provider/AAuthorization.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="58" x="1995" y="193"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </enumeration>  
+  <class id="3" language="java" name="org.eclipse.osbp.authentication.providerimpl.PermissionList" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/PermissionList.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="110" x="58" y="110"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <class id="4" language="java" name="org.eclipse.osbp.authentication.account.dtos.AccountDtosTranslator" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/AccountDtosTranslator.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="155" x="258" y="37"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <class id="5" language="java" name="org.eclipse.osbp.authentication.provider.AAuthorization.Permission" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/provider/AAuthorization.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="89" x="1943" y="110"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <interface id="6" language="java" name="org.eclipse.osbp.authentication.provider.IOrgNode" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/provider/IOrgNode.java" binary="false" 
+    corner="BOTTOM_RIGHT">    
+    <position height="23" width="77" x="1056" y="193"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </interface>  
+  <class id="7" language="java" name="org.eclipse.osbp.authentication.provider.ARoleAuthorizationGroup" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/provider/ARoleAuthorizationGroup.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="170" x="1733" y="110"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <class id="8" language="java" name="org.eclipse.osbp.authentication.account.dtos.UserAccountDto" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/UserAccountDto.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="24" width="142" x="1244" y="37"/>    
+    <display autosize="false" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <class id="9" language="java" name="org.eclipse.osbp.authentication.vaadin.VaadinSessionManager" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/vaadin/VaadinSessionManager.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="158" x="670" y="266"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <class id="10" language="java" name="org.eclipse.osbp.authentication.providerimpl.AuthenticationInformation" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/AuthenticationInformation.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="171" x="47" y="37"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <class id="11" language="java" name="org.eclipse.osbp.authentication.providerimpl.UserProtocol" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/UserProtocol.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="99" x="754" y="110"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <class id="12" language="java" name="org.eclipse.osbp.authentication.providerimpl.UserAccessService" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/UserAccessService.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="137" x="697" y="193"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <class id="13" language="java" name="org.eclipse.osbp.authentication.shiro.extensions.LDAPRealm" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/LDAPRealm.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="91" x="208" y="110"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <interface id="14" language="java" name="org.eclipse.osbp.authentication.shiro.extensions.IPortalAuthenticationToken" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/IPortalAuthenticationToken.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="177" x="463" y="193"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </interface>  
+  <class id="15" language="java" name="org.eclipse.osbp.authentication.provider.AOrganization" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/provider/AOrganization.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="105" x="893" y="110"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <enumeration id="16" language="java" 
+    name="org.eclipse.osbp.authentication.exceptions.UserConstraintException.Violations" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/exceptions/UserConstraintException.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="80" x="1038" y="110"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </enumeration>  
+  <enumeration id="17" language="java" name="org.eclipse.osbp.authentication.provider.AAuthorization.PermissionResult" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/provider/AAuthorization.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="125" x="1568" y="110"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </enumeration>  
+  <class id="18" language="java" name="org.eclipse.osbp.authentication.vaadin.VaadinSessionProvider" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/vaadin/VaadinSessionProvider.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="156" x="720" y="329"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <class id="19" language="java" name="org.eclipse.osbp.authentication.account.dtos.UserAccountFilterDto" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/UserAccountFilterDto.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="145" x="1244" y="110"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <class id="20" language="java" name="org.eclipse.osbp.authentication.provider.AAuthorization" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/provider/AAuthorization.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="109" x="2053" y="37"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <enumeration id="21" language="java" name="org.eclipse.osbp.authentication.provider.AAuthorization.Type" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/provider/AAuthorization.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="50" x="2114" y="193"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </enumeration>  
+  <class id="22" language="java" name="org.eclipse.osbp.authentication.provider.APosition.GuestPosition" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/provider/APosition.java" binary="false" 
+    corner="BOTTOM_RIGHT">    
+    <position height="23" width="103" x="1486" y="193"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <interface id="23" language="java" name="org.eclipse.osbp.authentication.shiro.extensions.IUserAccess" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/IUserAccess.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="97" x="596" y="110"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </interface>  
+  <class id="24" language="java" 
+    name="org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensionsimpl/UserAccessAuthorizationRealm.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="209" x="463" y="37"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <enumeration id="25" language="java" name="org.eclipse.osbp.authentication.provider.AAuthorization.Action" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/provider/AAuthorization.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="60" x="1995" y="266"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </enumeration>  
+  <class id="26" language="java" name="org.eclipse.osbp.authentication.shiro.extensions.DTORealm" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/DTORealm.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="84" x="339" y="110"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <interface id="27" language="java" name="org.eclipse.osbp.authentication.provider.IUserAccessService" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/provider/IUserAccessService.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="140" x="889" y="266"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </interface>  
+  <class id="28" language="java" name="org.eclipse.osbp.authentication.provider.APosition" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/provider/APosition.java" binary="false" 
+    corner="BOTTOM_RIGHT">    
+    <position height="23" width="79" x="1429" y="110"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <class id="29" language="java" name="org.eclipse.osbp.authentication.provider.APosition.AMultiPosition" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/provider/APosition.java" binary="false" 
+    corner="BOTTOM_RIGHT">    
+    <position height="23" width="107" x="1339" y="193"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <class id="30" language="java" name="org.eclipse.osbp.authentication.provider.APosition.APositionTemplate" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/provider/APosition.java" binary="false" 
+    corner="BOTTOM_RIGHT">    
+    <position height="23" width="132" x="1639" y="193"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <interface id="31" language="java" name="org.eclipse.osbp.authentication.provider.IOrganizationService" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/provider/IOrganizationService.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="142" x="874" y="193"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </interface>  
+  <class id="32" language="java" name="org.eclipse.osbp.authentication.provider.ASubOrganization" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/provider/ASubOrganization.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="126" x="1173" y="193"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <class id="33" language="java" name="org.eclipse.osbp.authentication.vaadin.SubjectProvider" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/vaadin/SubjectProvider.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="115" x="515" y="266"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <class id="34" language="java" name="org.eclipse.osbp.authentication.shiro.extensions.StaticRealm" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/StaticRealm.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="93" x="463" y="110"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <class id="35" language="java" name="org.eclipse.osbp.authentication.exceptions.UserConstraintException" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/exceptions/UserConstraintException.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="166" x="1038" y="37"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <interface id="36" language="java" name="org.eclipse.osbp.authentication.provider.IPermissionList" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/provider/IPermissionList.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="113" x="58" y="193"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </interface>  
+  <interface id="37" language="java" name="org.eclipse.osbp.authentication.provider.ISubOrganization" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/provider/ISubOrganization.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="121" x="1114" y="266"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </interface>  
+  <class id="38" language="java" name="org.eclipse.osbp.authentication.shiro.extensionsimpl.PortalUsernamePasswordToken" 
+    project="org.eclipse.osbp.authentication" 
+    file="/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensionsimpl/PortalUsernamePasswordToken.java" 
+    binary="false" corner="BOTTOM_RIGHT">    
+    <position height="23" width="209" x="714" y="37"/>    
+    <display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="false" package="false" protected="false" private="false" static="false"/>      
+      <operations public="false" package="false" protected="false" private="false" static="false"/>    
+    </display>  
+  </class>  
+  <realization id="39">    
+    <end type="SOURCE" refId="28"/>    
+    <end type="TARGET" refId="6"/>  
+  </realization>  
+  <nesting id="40">    
+    <bendpoint x="2062" y="110"/>    
+    <end type="SOURCE" refId="20"/>    
+    <end type="TARGET" refId="2"/>  
+  </nesting>  
+  <realization id="41">    
+    <end type="SOURCE" refId="24"/>    
+    <end type="TARGET" refId="23"/>  
+  </realization>  
+  <association id="42">    
+    <end type="SOURCE" refId="28" navigable="false">      
+      <attribute id="43" name="fRootNode">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="44" minimum="0" maximum="1">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="28" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <association id="45">    
+    <end type="SOURCE" refId="5" navigable="false">      
+      <attribute id="46" name="fType">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="47" minimum="0" maximum="1">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="21" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <association id="48">    
+    <end type="SOURCE" refId="24" navigable="false">      
+      <attribute id="49" name="sPositionPermissions">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="50" minimum="0" maximum="2147483647">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="3" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <association id="51">    
+    <bendpoint x="858" y="266"/>    
+    <end type="SOURCE" refId="12" navigable="false">      
+      <attribute id="52" name="vaadinSessionProvider">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="53" minimum="0" maximum="1">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="18" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <association id="54">    
+    <end type="SOURCE" refId="15" navigable="false">      
+      <attribute id="55" name="fOrgNodeMap">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="56" minimum="0" maximum="2147483647">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="6" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <generalization id="57">    
+    <end type="SOURCE" refId="34"/>    
+    <end type="TARGET" refId="24"/>  
+  </generalization>  
+  <association id="58">    
+    <end type="SOURCE" refId="9" navigable="false">      
+      <attribute id="59" name="sessionProvider">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="60" minimum="0" maximum="1">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="18" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <generalization id="61">    
+    <end type="SOURCE" refId="29"/>    
+    <end type="TARGET" refId="28"/>  
+  </generalization>  
+  <association id="62">    
+    <end type="SOURCE" refId="1" navigable="false">      
+      <attribute id="63" name="fPosition">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="64" minimum="0" maximum="1">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="28" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <association id="65">    
+    <end type="SOURCE" refId="8" navigable="false">      
+      <attribute id="66" name="userAccountFilter">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="67" minimum="0" maximum="2147483647">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="19" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <association id="68">    
+    <end type="SOURCE" refId="33" navigable="false">      
+      <attribute id="69" name="sessionProvider">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="70" minimum="0" maximum="1">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="18" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <association id="71">    
+    <end type="SOURCE" refId="4" navigable="false">      
+      <attribute id="72" name="instance">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="73" minimum="0" maximum="1">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="4" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <association id="74">    
+    <bendpoint x="1964" y="193"/>    
+    <end type="SOURCE" refId="5" navigable="false">      
+      <attribute id="75" name="fAction">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="76" minimum="0" maximum="1">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="25" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <realization id="77">    
+    <end type="SOURCE" refId="32"/>    
+    <end type="TARGET" refId="37"/>  
+  </realization>  
+  <nesting id="78">    
+    <bendpoint x="2083" y="110"/>    
+    <bendpoint x="2083" y="193"/>    
+    <end type="SOURCE" refId="20"/>    
+    <end type="TARGET" refId="25"/>  
+  </nesting>  
+  <realization id="79">    
+    <bendpoint x="723" y="110"/>    
+    <end type="SOURCE" refId="38"/>    
+    <end type="TARGET" refId="14"/>  
+  </realization>  
+  <association id="80">    
+    <end type="SOURCE" refId="22" navigable="false">      
+      <attribute id="81" name="sInstance">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="82" minimum="0" maximum="1">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="22" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <association id="83">    
+    <end type="SOURCE" refId="2" navigable="false">      
+      <attribute id="84" name="fDefaultAction">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="85" minimum="0" maximum="1">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="25" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <association id="86">    
+    <end type="SOURCE" refId="20" navigable="false">      
+      <attribute id="87" name="fAuthorizationGroups">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="88" minimum="0" maximum="2147483647">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="7" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <association id="89">    
+    <end type="SOURCE" refId="26" navigable="false">      
+      <attribute id="90" name="dtoToken">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="91" minimum="0" maximum="1">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="14" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <generalization id="92">    
+    <end type="SOURCE" refId="32"/>    
+    <end type="TARGET" refId="28"/>  
+  </generalization>  
+  <association id="93">    
+    <end type="SOURCE" refId="2" navigable="false">      
+      <attribute id="94" name="fAnyActions">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="95" minimum="0" maximum="2147483647">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="25" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <association id="96">    
+    <end type="SOURCE" refId="34" navigable="false">      
+      <attribute id="97" name="staticToken">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="98" minimum="0" maximum="1">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="14" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <association id="99">    
+    <end type="SOURCE" refId="13" navigable="false">      
+      <attribute id="100" name="ldapToken">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="101" minimum="0" maximum="1">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="14" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <nesting id="102">    
+    <end type="SOURCE" refId="35"/>    
+    <end type="TARGET" refId="16"/>  
+  </nesting>  
+  <nesting id="103">    
+    <end type="SOURCE" refId="28"/>    
+    <end type="TARGET" refId="22"/>  
+  </nesting>  
+  <generalization id="104">    
+    <end type="SOURCE" refId="12"/>    
+    <end type="TARGET" refId="11"/>  
+  </generalization>  
+  <association id="105">    
+    <end type="SOURCE" refId="12" navigable="false">      
+      <attribute id="106" name="subjectProvider">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="107" minimum="0" maximum="1">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="33" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <nesting id="108">    
+    <end type="SOURCE" refId="20"/>    
+    <end type="TARGET" refId="17"/>  
+  </nesting>  
+  <association id="109">    
+    <end type="SOURCE" refId="12" navigable="false">      
+      <attribute id="110" name="vaadinSessionManager">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="111" minimum="0" maximum="1">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="9" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <association id="112">    
+    <end type="SOURCE" refId="35" navigable="false">      
+      <attribute id="113" name="constraintsViolations">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="114" minimum="0" maximum="2147483647">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="16" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <association id="115">    
+    <end type="SOURCE" refId="28" navigable="false">      
+      <attribute id="116" name="fSuperOrdinate">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="117" minimum="0" maximum="1">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="28" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <generalization id="118">    
+    <end type="SOURCE" refId="22"/>    
+    <end type="TARGET" refId="28"/>  
+  </generalization>  
+  <generalization id="119">    
+    <end type="SOURCE" refId="13"/>    
+    <end type="TARGET" refId="24"/>  
+  </generalization>  
+  <generalization id="120">    
+    <end type="SOURCE" refId="30"/>    
+    <end type="TARGET" refId="28"/>  
+  </generalization>  
+  <association id="121">    
+    <end type="SOURCE" refId="15" navigable="false">      
+      <attribute id="122" name="fGuestOrgNode">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="123" minimum="0" maximum="1">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="6" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <association id="124">    
+    <end type="SOURCE" refId="19" navigable="false">      
+      <attribute id="125" name="userAccount">        
+        <position height="0" width="0" x="28" y="-30"/>      
+      </attribute>      
+      <multiplicity id="126" minimum="0" maximum="1">        
+        <position height="0" width="0" x="28" y="-30"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="8" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <nesting id="127">    
+    <end type="SOURCE" refId="28"/>    
+    <end type="TARGET" refId="29"/>  
+  </nesting>  
+  <nesting id="128">    
+    <end type="SOURCE" refId="20"/>    
+    <end type="TARGET" refId="5"/>  
+  </nesting>  
+  <nesting id="129">    
+    <end type="SOURCE" refId="28"/>    
+    <end type="TARGET" refId="30"/>  
+  </nesting>  
+  <association id="130">    
+    <end type="SOURCE" refId="5" navigable="false">      
+      <attribute id="131" name="fGroup">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="132" minimum="0" maximum="1">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="2" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <generalization id="133">    
+    <end type="SOURCE" refId="26"/>    
+    <end type="TARGET" refId="24"/>  
+  </generalization>  
+  <realization id="134">    
+    <end type="SOURCE" refId="15"/>    
+    <end type="TARGET" refId="31"/>  
+  </realization>  
+  <nesting id="135">    
+    <bendpoint x="2104" y="110"/>    
+    <end type="SOURCE" refId="20"/>    
+    <end type="TARGET" refId="21"/>  
+  </nesting>  
+  <association id="136">    
+    <end type="SOURCE" refId="38" navigable="false">      
+      <attribute id="137" name="protocol">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </attribute>      
+      <multiplicity id="138" minimum="0" maximum="1">        
+        <position height="0" width="0" x="0" y="0"/>      
+      </multiplicity>    
+    </end>    
+    <end type="TARGET" refId="11" navigable="true"/>    
+    <display labels="false" multiplicity="false"/>  
+  </association>  
+  <generalization id="139">    
+    <end type="SOURCE" refId="37"/>    
+    <end type="TARGET" refId="6"/>  
+  </generalization>  
+  <classifier-display autosize="true" stereotype="false" package="false" initial-value="false" signature="false" 
+    sort-features="false" accessors="true" visibility="true">    
+    <attributes public="false" package="false" protected="false" private="false" static="false"/>    
+    <operations public="false" package="false" protected="false" private="false" static="false"/>  
+  </classifier-display>  
+  <association-display labels="false" multiplicity="false"/>
+</class-diagram>
\ No newline at end of file
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/exceptions/UserConstraintException.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/exceptions/UserConstraintException.java
new file mode 100644
index 0000000..1640043
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/exceptions/UserConstraintException.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.authentication.exceptions;
+
+import java.util.Set;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class UserConstraintException.
+ */
+public class UserConstraintException extends Exception {
+
+    /** The Constant serialVersionUID. */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * The Enum Violations.
+	 */
+	public static enum Violations {
+				/** The username not unique. */
+				USERNAME_NOT_UNIQUE,
+				/** The email not unique. */
+				EMAIL_NOT_UNIQUE,
+				/** The unknown error. */
+				UNKNOWN_ERROR}
+
+    /** The constraints violations. */
+    private Set<Violations> constraintsViolations ;
+
+    /**
+     * Instantiates a new user constraint exception.
+     *
+     * @param constraintsViolations the constraints violations
+     */
+    public UserConstraintException(Set<Violations> constraintsViolations) {
+        this.constraintsViolations = constraintsViolations;
+    }
+
+    /**
+     * Gets the constraints violations.
+     *
+     * @return the constraints violations
+     */
+    public Set<Violations> getConstraintsViolations() {
+        return constraintsViolations;
+    }
+
+    /**
+     * Sets the constraints violations.
+     *
+     * @param constraintsViolations the new constraints violations
+     */
+    public void setConstraintsViolations(Set<Violations> constraintsViolations) {
+        this.constraintsViolations = constraintsViolations;
+    }
+}
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/package-info.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/package-info.java
new file mode 100644
index 0000000..026d444
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/package-info.java
@@ -0,0 +1,27 @@
+/**
+ *                                                                            
+ * 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 
+ */
+
+/**
+ * 
+ *  Implements authentication capabilities based on Apache Shiro.
+ *  
+ *   
+ *  @since  0.9.0
+ *  
+ *  <p>The Class Dependency Graph<br>
+ *  <img src="doc-files/model.png" alt="The Class Dependency Graph">
+ */
+package org.eclipse.osbp.authentication;
+
+
+
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/AuthenticationInformation.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/AuthenticationInformation.java
new file mode 100644
index 0000000..c9b6bfc
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/AuthenticationInformation.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.authentication.providerimpl;
+
+import org.apache.shiro.authc.SimpleAuthenticationInfo;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class AuthenticationInformation.
+ */
+public class AuthenticationInformation extends SimpleAuthenticationInfo {
+	
+	/** The Constant serialVersionUID. */
+	private static final long serialVersionUID = -6543741457178913445L;
+	
+	/** The enabled. */
+	private boolean enabled;
+	
+	/** The locked. */
+	private boolean locked;
+
+	/**
+	 * Instantiates a new authentication information.
+	 *
+	 * @param principal the principal
+	 * @param credentials the credentials
+	 * @param realmName the realm name
+	 * @param enabled the enabled
+	 * @param locked the locked
+	 */
+	public AuthenticationInformation(Object principal, Object credentials,
+			String realmName, boolean enabled, boolean locked) {
+		super(principal, credentials, realmName);
+		this.enabled = enabled;
+		this.locked = locked;
+	}
+
+	/**
+	 * Checks if is enabled.
+	 *
+	 * @return true, if is enabled
+	 */
+	public boolean isEnabled() {
+		return enabled;
+	}
+
+	/**
+	 * Sets the enabled.
+	 *
+	 * @param enabled the new enabled
+	 */
+	public void setEnabled(boolean enabled) {
+		this.enabled = enabled;
+	}
+
+	/**
+	 * Checks if is locked.
+	 *
+	 * @return true, if is locked
+	 */
+	public boolean isLocked() {
+		return locked;
+	}
+
+	/**
+	 * Sets the locked.
+	 *
+	 * @param locked the new locked
+	 */
+	public void setLocked(boolean locked) {
+		this.locked = locked;
+	}
+}
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/AuthorizationInformation.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/AuthorizationInformation.java
new file mode 100644
index 0000000..601f279
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/AuthorizationInformation.java
@@ -0,0 +1,94 @@
+/**
+ *                                                                            
+ * 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.authentication.providerimpl;
+
+import java.util.Collection;
+import java.util.HashSet;
+
+import org.apache.shiro.authz.SimpleAuthorizationInfo;
+import org.apache.shiro.subject.PrincipalCollection;
+import org.eclipse.osbp.ui.api.useraccess.AbstractPosition;
+import org.eclipse.osbp.ui.api.useraccess.IPermissionList;
+
+/**
+ * The Class AuthorizationInformation holds metadata of the authenticated subject.
+ */
+public class AuthorizationInformation extends SimpleAuthorizationInfo {
+
+	/** The Constant serialVersionUID. */
+	private static final long serialVersionUID = 8654353182167477248L;
+	
+	/** The position. */
+	private final AbstractPosition fPosition;
+	
+	/** The portal id. */
+	private final String fPortalId;
+	
+	/** The principal. */
+	private final PrincipalCollection fPrincipal;
+	
+	/**
+	 * Instantiates a new authorization information.
+	 *
+	 * @param portalId the portal id
+	 * @param principals the principals
+	 * @param position the position
+	 * @param roles the roles
+	 * @param permissions the permissions
+	 */
+	public AuthorizationInformation(String portalId, PrincipalCollection principals, AbstractPosition position, Collection<String> roles, IPermissionList permissions) {
+		super();
+		fPortalId = portalId;
+		fPrincipal = principals;
+		fPosition = position;
+		if(roles != null) {
+			super.setRoles(new HashSet<String>(roles));
+		}
+		if  (permissions != null) {
+			for  (String permission : permissions.getPermissions()) {
+				while (permission.endsWith(":*")) {
+					permission = permission.substring(0, permission.length()-2);
+				}
+				super.addStringPermission(permission);
+			}
+		}
+	}
+	
+	/**
+	 * Gets the portal id.
+	 *
+	 * @return the portal id
+	 */
+	public String getPortalId() {
+		return fPortalId;
+	}
+	
+	/**
+	 * Gets the username.
+	 *
+	 * @return the username
+	 */
+	public String getUsername() {
+		return fPrincipal.getPrimaryPrincipal().toString();
+	}
+	
+	/**
+	 * Gets the position.
+	 *
+	 * @return the position
+	 */
+	public AbstractPosition getPosition() {
+		return fPosition;
+	}
+
+}
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/UserAccessService.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/UserAccessService.java
new file mode 100644
index 0000000..fed01ba
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/UserAccessService.java
@@ -0,0 +1,983 @@
+/**
+ *                                                                            
+ * 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.authentication.providerimpl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authc.AuthenticationException;
+import org.apache.shiro.authz.AuthorizationInfo;
+import org.apache.shiro.config.Ini;
+import org.apache.shiro.mgt.SecurityManager;
+import org.apache.shiro.realm.AuthenticatingRealm;
+import org.apache.shiro.subject.Subject;
+import org.apache.shiro.util.Factory;
+import org.apache.shiro.util.ThreadContext;
+import org.apache.shiro.web.config.WebIniSecurityManagerFactory;
+import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
+import org.eclipse.osbp.authentication.ServiceListener;
+import org.eclipse.osbp.authentication.account.dtos.UserAccountDto;
+import org.eclipse.osbp.authentication.account.dtos.UserAccountFilterDto;
+import org.eclipse.osbp.authentication.shiro.extensions.StaticRealm;
+import org.eclipse.osbp.authentication.shiro.extensionsimpl.PortalUsernamePasswordToken;
+import org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm;
+import org.eclipse.osbp.authentication.vaadin.SubjectProvider;
+import org.eclipse.osbp.authentication.vaadin.VaadinSessionManager;
+import org.eclipse.osbp.authentication.vaadin.VaadinSessionProvider;
+import org.eclipse.osbp.dsl.dto.lib.services.Query;
+import org.eclipse.osbp.preferences.ProductConfiguration;
+import org.eclipse.osbp.ui.api.complexdatacontainer.IComplexDataContainerChangedListener;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Permission;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.PermissionResult;
+import org.eclipse.osbp.ui.api.useraccess.AbstractPosition;
+import org.eclipse.osbp.ui.api.useraccess.IOrganizationService;
+import org.eclipse.osbp.ui.api.useraccess.IPermissionList;
+import org.eclipse.osbp.ui.api.useraccess.IPosition;
+import org.eclipse.osbp.ui.api.useraccess.ISubOrganization;
+import org.eclipse.osbp.ui.api.useraccess.IUserAccessService;
+import org.eclipse.osbp.ui.api.userfilter.UserFilterMap;
+import org.osgi.service.component.annotations.Component;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.vaadin.server.Page;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class UserAccessService.
+ */
+@Component(service = IUserAccessService.class, immediate = true)
+public class UserAccessService extends UserProtocol implements
+		IUserAccessService {
+
+	/** The Constant LOGGER. */
+	private static final Logger LOGGER = LoggerFactory
+			.getLogger(UserAccessService.class);
+
+	/** The s factory. */
+	private static Factory<SecurityManager> sFactory;
+
+	/** The s security manager. */
+	private static SecurityManager sSecurityManager;
+
+	/** The vaadin session provider. */
+	private static VaadinSessionProvider vaadinSessionProvider;
+
+	/** The vaadin session manager. */
+	private static VaadinSessionManager vaadinSessionManager;
+
+	/** The subject provider. */
+	private static SubjectProvider subjectProvider;
+
+	/** The Constant USER_KEY. */
+	private static final String USER_KEY = "user";
+
+	/** The Constant USER_FILTER_MAP_KEY. */
+	private static final String USER_FILTER_MAP_KEY = "userFilterMap";
+
+	/** The Constant POSITION_KEY. */
+	private static final String POSITION_KEY = "position";
+
+	/** The Constant ROLES_KEY. */
+	private static final String ROLES_KEY = "roles";
+
+	/** The Constant PERMISSIONS_KEY. */
+	private static final String PERMISSIONS_KEY = "permissions";
+
+	/** The Constant AUTHENTICATED_BY_REALM. */
+	private static final String AUTHENTICATED_BY_REALM = "realm";
+
+	/** The Constant AUTHORIZATION_KEY. */
+	private static final String AUTHORIZATION_KEY = ThreadContext.class
+			.getName() + "_AUTHORIZATION_KEY";
+
+	/**
+	 * Instantiates a new user access service.
+	 */
+	public UserAccessService() {
+		super();
+	}
+
+	static {
+		// We use a factory that can injects a .ini file and
+		// returns a SecurityManager instance
+		Ini ini = new Ini();
+		ini.load(ProductConfiguration.getShiroConfiguration(StaticRealm.class
+				.getCanonicalName()));
+		sFactory = new WebIniSecurityManagerFactory(ini);
+		// the following line works with reflection and looks for shiro in the
+		// current bundle. no osgi possible in this version.
+		sSecurityManager = sFactory.getInstance();
+		vaadinSessionProvider = new VaadinSessionProvider();
+		vaadinSessionManager = new VaadinSessionManager(vaadinSessionProvider);
+		// the vaadin session embeds the shiro subject
+		((DefaultWebSecurityManager) sSecurityManager)
+				.setSessionManager(vaadinSessionManager);
+		subjectProvider = new SubjectProvider(vaadinSessionProvider);
+		SecurityUtils.setSecurityManager(sSecurityManager);
+		LOGGER.debug("security manager is set");
+	}
+
+	@Override
+	public void addComplexDataContainerChangedListener(
+			IComplexDataContainerChangedListener listener) {
+		ServiceListener.addComplexDataContainerChangedListener(listener);
+	}
+
+	@Override
+	public void removeComplexDataContainerChangedListener(
+			IComplexDataContainerChangedListener listener) {
+		ServiceListener.removeComplexDataContainerChangedListener(listener);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getAuthorizations()
+	 */
+	@Override
+	public AuthorizationInfo getAuthorizations() {
+		AuthorizationInfo info = null;
+		AuthenticatingRealm realm = null;
+		if (isAuthenticated()) {
+			try {
+				info = (AuthorizationInfo) ThreadContext.get(AUTHORIZATION_KEY);
+			} catch (Exception e) {
+			} // NOP // NOSONAR
+			try {
+				realm = (AuthenticatingRealm) ThreadContext
+						.get(AUTHENTICATED_BY_REALM);
+			} catch (Exception e) {
+			} // NOP // NOSONAR
+			if (info == null) {
+				info = new AuthorizationInformation(
+						(realm instanceof UserAccessAuthorizationRealm) ? ((UserAccessAuthorizationRealm) realm).getPortalId()
+								: "", subjectProvider.get().getPrincipals(),
+						getPosition(), getRoles(), getPermissions());
+				ThreadContext.put(AUTHORIZATION_KEY, info);
+			}
+		}
+		return info;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#isAuthenticated()
+	 */
+	@Override
+	public boolean isAuthenticated() {
+		return subjectProvider.get().isAuthenticated();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#authenticate(java
+	 * .lang.String, java.lang.String, java.lang.String)
+	 */
+	@Override
+	public boolean authenticate(String portal, String username, String password) {
+		PortalUsernamePasswordToken token = new PortalUsernamePasswordToken(
+				Page.getCurrent().getWebBrowser().getAddress(), portal,
+				username, password);
+		token.setRememberMe(false);
+		token.setUserProtocol(this);
+		AuthenticatingRealm realm = null;
+		try {
+			Subject subject = subjectProvider.get();
+			subject.login(token);
+			realm = token.getAuthenticatedByRealm();
+			UserAccountDto user = null;
+			UserFilterMap userFilterMap = null;
+			AbstractPosition position = null;
+			String defaultPerspective = null;
+			Collection<String> roles = null;
+			IPermissionList permissions = null;
+			if (realm instanceof UserAccessAuthorizationRealm) {
+				user = ((UserAccessAuthorizationRealm) realm)
+						.findUserAccount(username);
+				userFilterMap = createFilterMap(user);
+				position = ((UserAccessAuthorizationRealm) realm)
+						.findPositionForUser(username);
+				defaultPerspective = user.getDefaultPerpective();
+				permissions = ((UserAccessAuthorizationRealm) realm)
+						.findPermissionsForUser(username);
+			}
+			if (position != null) {
+				roles = position.getRoles();
+			}
+			setSessionAttribute(AUTHENTICATED_BY_REALM,
+					token.getAuthenticatedByRealm());
+			setSessionAttribute(USER_KEY, user);
+			setSessionAttribute(USER_FILTER_MAP_KEY, userFilterMap);
+			setSessionAttribute(POSITION_KEY, position);
+			setSessionAttribute(ROLES_KEY, roles);
+			setSessionAttribute(PERMISSIONS_KEY, permissions);
+
+			LOGGER.debug(subjectProvider.get().getSession().getAttributeKeys()
+					.toString());
+			trackSuccessfulLoginAttempt(username);
+			// if(isPermitted(Permission.forEntityProperty("Memployee",
+			// "first_name", Action.noneditable)).isPermitted()) {
+			// LOGGER.debug("mEmployee.first_name is non-editable");
+			// } else {
+			// LOGGER.debug("mEmployee.first_name is editable");
+			// }
+			// if (isPermitted(Permission.forBpm("ProductMaintenance",
+			// Action.executable)).isPermitted()) {
+			// LOGGER.debug("ProductMaintenance can be executed");
+			// } else {
+			// LOGGER.debug("ProductMaintenance cannot be executed");
+			// }
+			return true;
+		} catch (AuthenticationException ae) { // NOSONAR
+			// captcha
+			int cnt = trackFailedLoginAttempt(username);
+			if (cnt > ProductConfiguration.getMaxLoginAttempts()) {
+				lockAccount(username, true);
+			}
+			try {
+				// wait exponentially along failed logins up to a maximum of
+				// 18,2 hours to prevent "Rapid-Fire Login Attempts"
+				// http://stackoverflow.com/questions/549/the-definitive-guide-to-form-based-website-authentication
+				Thread.sleep((long) (1000.0 * Math.pow(2, Math.min(cnt, 16))));
+			} catch (InterruptedException e) { // NOSONAR
+			}
+			LOGGER.error("Authentication: " + ae.getLocalizedMessage());
+		}
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#authenticate(int,
+	 * java.lang.String, java.lang.String)
+	 */
+	@Override
+	public boolean authenticate(int portalId, String username, String password) {
+		return authenticate(Integer.toString(portalId), username, password);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#authenticate(java
+	 * .lang.String, java.lang.String)
+	 */
+	@Override
+	public boolean authenticate(String username, String password) {
+		return authenticate("", username, password);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#setSessionAttribute
+	 * (java.lang.String, java.lang.Object)
+	 */
+	@Override
+	public void setSessionAttribute(String key, Object value) {
+		subjectProvider.get().getSession().setAttribute(key, value);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getSessionAttribute
+	 * (java.lang.String)
+	 */
+	@Override
+	public Object getSessionAttribute(String key) {
+		return subjectProvider.get().getSession().getAttribute(key);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.ui.api.useraccess.IUserAccessService#logout()
+	 */
+	@Override
+	public void logout() {
+		Subject subject = subjectProvider.get();
+		try {
+			setSessionAttribute(AUTHENTICATED_BY_REALM, null);
+			setSessionAttribute(USER_KEY, null);
+			setSessionAttribute(POSITION_KEY, null);
+			setSessionAttribute(ROLES_KEY, null);
+			setSessionAttribute(PERMISSIONS_KEY, null);
+		} catch (Exception e) {
+		} // NOSONAR
+		try {
+			subject.logout();
+		} catch (Exception e) {
+		} // NOSONAR
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getUser()
+	 */
+	@Override
+	public UserAccountDto getUser() {
+		UserAccountDto user = (UserAccountDto) getSessionAttribute(USER_KEY);
+		if (user == null) {
+			LOGGER.error("Authentication getUser returned null");
+		}
+		return user;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getProfileimageId()
+	 */
+	@Override
+	public String getProfileimageId() {
+		UserAccountDto user = getUser();
+		if (user != null) {
+			return user.getProfileimage();
+		}
+		return "";
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getPositionName()
+	 */
+	@Override
+	public String getPositionName() {
+		UserAccountDto user = getUser();
+		if (user != null) {
+			return user.getPosition();
+		}
+		return "";
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getId()
+	 */
+	@Override
+	public String getId() {
+		UserAccountDto user = getUser();
+		if (user != null) {
+			return user.getId();
+		}
+		return "";
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getEmail()
+	 */
+	@Override
+	public String getEmail() {
+		UserAccountDto user = getUser();
+		if (user != null) {
+			return user.getEmail();
+		}
+		return "";
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getLocaleTag()
+	 */
+	@Override
+	public String getLocaleTag() {
+		UserAccountDto user = getUser();
+		if (user != null) {
+			return user.getLocaleTag();
+		}
+		return "";
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getLayoutingStrategy
+	 * ()
+	 */
+	@Override
+	public String getLayoutingStrategy() {
+		UserAccountDto user = getUser();
+		if (user != null) {
+			return user.getLayoutingStrategy();
+		}
+		return "";
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getFocusingStrategy
+	 * ()
+	 */
+	@Override
+	public String getFocusingStrategy() {
+		UserAccountDto user = getUser();
+		if (user != null) {
+			return user.getFocusingStrategy();
+		}
+		return "";
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getTheme()
+	 */
+	@Override
+	public String getTheme() {
+		UserAccountDto user = getUser();
+		if (user != null) {
+			return user.getTheme();
+		}
+		return "";
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getPrintService()
+	 */
+	@Override
+	public String getPrintService() {
+		UserAccountDto user = getUser();
+		if (user != null) {
+			return user.getPrintService();
+		}
+		return "";
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.ui.api.useraccess.IUserAccessService#isSuperuser()
+	 */
+	@Override
+	public boolean isSuperuser() {
+		UserAccountDto user = getUser();
+		if (user != null) {
+			return user.getSuperuser();
+		}
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.ui.api.useraccess.IUserAccessService#isSupervisor()
+	 */
+	@Override
+	public boolean isSupervisor() {
+		UserAccountDto user = getUser();
+		if (user != null) {
+			return user.getSupervisor();
+		}
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getPosition()
+	 */
+	@Override
+	public AbstractPosition getPosition() {
+		return (AbstractPosition) getSessionAttribute(POSITION_KEY);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getPerspective()
+	 */
+	@Override
+	public String getPerspective() {
+		UserAccountDto user = getUser();
+		if (user != null) {
+			return user.getDefaultPerpective();
+		}
+		return "";
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getExtraPassword()
+	 */
+	@Override
+	public String getExtraPassword() {
+		UserAccountDto user = getUser();
+		if (user != null) {
+			return user.getExtraPassword();
+		}
+		return "";
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getExtraPassword()
+	 */
+	@Override
+	public boolean isPasswordReset() {
+		UserAccountDto user = getUser();
+		if (user != null) {
+			return user.getPasswordReset();
+		}
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getRoles()
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Collection<String> getRoles() {
+		return (Collection<String>) getSessionAttribute(ROLES_KEY);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getPermissions()
+	 */
+	@Override
+	public IPermissionList getPermissions() {
+		return (IPermissionList) getSessionAttribute(PERMISSIONS_KEY);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#isPermitted(org
+	 * .eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Permission)
+	 */
+	@Override
+	public PermissionResult isPermitted(Permission permission) {
+		// --- check if this permission is granted ---
+		if (getPermissions() != null) {
+			boolean retcode = getPermissions().getPermissions().contains(
+					permission.toString());
+			// --- if it is granted, but the requested permission has an veto
+			// ---
+			if (retcode && permission.hasVeto()) {
+				try {
+					// --- check for the EXPLICIT "negative" permission ---
+					if (getPermissions().getPermissions().contains(
+							permission.toString()
+									+ IPermissionList.NEGATIVE_POSTFIX)) {
+						return PermissionResult.EXPLICIT_DENIED;
+					}
+				} catch (Exception e) {
+				} // NOP // NOSONAR
+				return PermissionResult.EXPLICIT_GRANTED;
+			}
+			return retcode ? PermissionResult.EXPLICIT_GRANTED
+					: PermissionResult.IMPLICIT_DENIED;
+		}
+		if (permission.isAttribute()) {
+			return PermissionResult.IMPLICIT_DENIED;
+		}
+		return PermissionResult.EXPLICIT_GRANTED;
+	}
+
+	/**
+	 * Gets the organization service.
+	 *
+	 * @return the organization service
+	 */
+	public final IOrganizationService getOrganizationService() {
+		if (ServiceListener.getOrganizationServices().size() == 1) {
+			return ServiceListener.getOrganizationServices().iterator().next();
+		}
+		return null;
+	}
+
+	/**
+	 * Gets the authentication realm.
+	 *
+	 * @return the authentication realm
+	 */
+	private AuthenticatingRealm getAuthenticationRealm() {
+		return (AuthenticatingRealm) getSessionAttribute(AUTHENTICATED_BY_REALM);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getAllUsers()
+	 */
+	@Override
+	public Set<String> getAllUsers() {
+		AuthenticatingRealm realm = getAuthenticationRealm();
+		if (realm instanceof UserAccessAuthorizationRealm) {
+			return ((UserAccessAuthorizationRealm) realm).getAllUsers();
+		} else {
+			return null;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getAllUsersPositions
+	 * ()
+	 */
+	@Override
+	public Map<String, String> getAllUsersPositions() {
+		AuthenticatingRealm realm = getAuthenticationRealm();
+		if (realm instanceof UserAccessAuthorizationRealm) {
+			return ((UserAccessAuthorizationRealm) realm)
+					.getAllUsersPositions();
+		} else {
+			return null;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getAllEmails()
+	 */
+	@Override
+	public Set<String> getAllEmails() {
+		AuthenticatingRealm realm = getAuthenticationRealm();
+		if (realm instanceof UserAccessAuthorizationRealm) {
+			return ((UserAccessAuthorizationRealm) realm).getAllEmails();
+		} else {
+			return null;
+		}
+	}
+
+	// @Override - no, use the inherited one
+	// public String encryptPassword(String decryptedPassword) {
+	// return super.encryptPassword(decryptedPassword);
+	// }
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#findUsersForPosition
+	 * (java.lang.String)
+	 */
+	@Override
+	public Set<String> findUsersForPosition(String position) {
+		AuthenticatingRealm realm = getAuthenticationRealm();
+		if (realm instanceof UserAccessAuthorizationRealm) {
+			return ((UserAccessAuthorizationRealm) realm)
+					.findUsersForPosition(position);
+		} else {
+			return null;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getAllPositions()
+	 */
+	@Override
+	public Set<AbstractPosition> getAllPositions() {
+		AuthenticatingRealm realm = getAuthenticationRealm();
+		if (realm instanceof UserAccessAuthorizationRealm) {
+			Set<AbstractPosition> retcode = new HashSet<>();
+			for (IOrganizationService organizationService : ServiceListener
+					.getOrganizationServices()) {
+				String organizationID = ProductConfiguration
+						.getAuthenticationOrganizationId();
+				ISubOrganization organization = organizationService
+						.getOrganization(organizationID);
+				if (organization != null) {
+					for (IPosition position : organization.getPositions()) {
+						retcode.add((AbstractPosition) position);
+					}
+				}
+			}
+			if (retcode.isEmpty()) {
+				retcode = null;
+			}
+			return retcode;
+		} else {
+			return null;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#findPositionForUser
+	 * (java.lang.String)
+	 */
+	@Override
+	public AbstractPosition findPositionForUser(String username) {
+		AuthenticatingRealm realm = getAuthenticationRealm();
+		if (realm instanceof UserAccessAuthorizationRealm) {
+			return ((UserAccessAuthorizationRealm) realm)
+					.findPositionForUser(username);
+		} else {
+			return null;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.ui.api.useraccess.IUserAccessService#
+	 * findPositionForPositionName(java.lang.String)
+	 */
+	@Override
+	public AbstractPosition findPositionForPositionName(String positionName) {
+		AuthenticatingRealm realm = getAuthenticationRealm();
+		if (realm instanceof UserAccessAuthorizationRealm) {
+			return ((UserAccessAuthorizationRealm) realm)
+					.findPositionForPositionName(positionName);
+		} else {
+			return null;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#findRolesForUser
+	 * (java.lang.String)
+	 */
+	@Override
+	public Collection<String> findRolesForUser(String username) {
+		AuthenticatingRealm realm = getAuthenticationRealm();
+		if (realm instanceof UserAccessAuthorizationRealm) {
+			return ((UserAccessAuthorizationRealm) realm)
+					.findRolesForUser(username);
+		} else {
+			return null;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#findPermissionsForUser
+	 * (java.lang.String)
+	 */
+	@Override
+	public IPermissionList findPermissionsForUser(String username) {
+		AuthenticatingRealm realm = getAuthenticationRealm();
+		if (realm instanceof UserAccessAuthorizationRealm) {
+			return ((UserAccessAuthorizationRealm) realm)
+					.findPermissionsForUser(username);
+		} else {
+			return null;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getUserFilterMap()
+	 */
+	@Override
+	public UserFilterMap getUserFilterMap() {
+		UserFilterMap userFilterMap = (UserFilterMap) getSessionAttribute(USER_FILTER_MAP_KEY);
+		if (userFilterMap == null) {
+			LOGGER.error("Authentication getUserFilterMap returned null");
+		}
+		return userFilterMap;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#checkUsernameUniqueness
+	 * (java.lang.String)
+	 */
+	@Override
+	public boolean checkLoggedInUsernameExists(String username) {
+		AuthenticatingRealm realm = getAuthenticationRealm();
+		if (realm instanceof UserAccessAuthorizationRealm) {
+			return ((UserAccessAuthorizationRealm) realm)
+					.checkUsernameExists(username);
+		} else {
+			return false;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#checkUsernameUniqueness
+	 * (java.lang.String)
+	 */
+	@Override
+	public boolean checkNotLoggedInUsernameExists(String username) {
+		UserAccountDto userAccount = findUserAccount(username);
+		if (userAccount != null) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#checkEmailUniqueness
+	 * (java.lang.String)
+	 */
+	@Override
+	public boolean checkEmailExists(String email) {
+		AuthenticatingRealm realm = getAuthenticationRealm();
+		if (realm instanceof UserAccessAuthorizationRealm) {
+			return ((UserAccessAuthorizationRealm) realm)
+					.checkEmailExists(email);
+		} else {
+			return false;
+		}
+	}
+
+	// @Override
+	// public void encryptPasswords() {
+	// super.encryptPasswords();
+	// }
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.ui.api.useraccess.IUserAccessService#getAllUserAccountRoles
+	 * ()
+	 */
+	@Override
+	public Map<String, Collection<String>> getAllUserAccountRoles() {
+		Map<String, Collection<String>> userRolesMap = new HashMap<>();
+		List<String> adminRoles = new ArrayList<String>();
+		Query query = new Query();
+		int size = UserProtocol.getDtoUserAccountDtoService().size(query);
+		Collection<UserAccountDto> users = UserProtocol
+				.getDtoUserAccountDtoService().getByIndex(0, size, query);
+		for (UserAccountDto user : users) {
+			if (user.getUserName() != null && user.getPosition() != null) {
+				boolean needsDefault = true;
+				for (IOrganizationService organizationService : ServiceListener
+						.getOrganizationServices()) {
+					// as positions in organigram are not allowed to have spaces
+
+					String organizationID = ProductConfiguration
+							.getAuthenticationOrganizationId();
+					ISubOrganization organization = organizationService
+							.getOrganization(organizationID);
+					if (organization != null) {
+						IPosition position = organization.getPosition(user
+								.getPosition().replace(" ", "_"));
+						if (position != null
+								&& position instanceof AbstractPosition) {
+							userRolesMap.put(user.getUserName(),
+									((AbstractPosition) position).getRoles());
+							needsDefault = false;
+						}
+					}
+				}
+				if (needsDefault) {
+					List<String> userRoles = new ArrayList<String>();
+					userRoles.add(IUserAccessService.DEFAULTUSERROLE);
+					userRolesMap.put(user.getUserName(), userRoles);
+				}
+			}
+		}
+		// finally, add the admin and assign all roles
+		for (IOrganizationService organization : ServiceListener
+				.getOrganizationServices()) {
+			adminRoles.addAll(organization.getRoles());
+		}
+		// if the organizations provide no roles
+		if (adminRoles.isEmpty()) {
+			adminRoles.add(IUserAccessService.DEFAULTUSERROLE);
+			adminRoles.add(IUserAccessService.DEFAULTADMINROLE);
+		}
+		userRolesMap.put(IUserAccessService.ADMINISTRATOR, adminRoles);
+		return userRolesMap;
+	}
+
+	/**
+	 * Helper Method that converts the user account filter strings into a map.
+	 *
+	 * @param user
+	 *            the user
+	 * @return the filter map
+	 */
+	private UserFilterMap createFilterMap(UserAccountDto user) {
+		UserFilterMap filterMap = new UserFilterMap();
+		for (UserAccountFilterDto filter : user.getUserAccountFilter()) {
+			String[] splitFilter = filter.getFilter().split(":");
+			if (filter.getInvers()) {
+				List<String> notFilterValueList = filterMap.getNotFilterMap()
+						.get(splitFilter[0]);
+				notFilterValueList = ((notFilterValueList != null) ? notFilterValueList
+						: new ArrayList<String>());
+				notFilterValueList.add(splitFilter[1]);
+				filterMap.getNotFilterMap().put(splitFilter[0],
+						notFilterValueList);
+			} else {
+				List<String> inFilterValueList = filterMap.getInFilterMap()
+						.get(splitFilter[0]);
+				inFilterValueList = ((inFilterValueList != null) ? inFilterValueList
+						: new ArrayList<String>());
+				inFilterValueList.add(splitFilter[1]);
+				filterMap.getInFilterMap().put(splitFilter[0],
+						inFilterValueList);
+			}
+		}
+		return filterMap;
+	}
+}
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/UserProtocol.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/UserProtocol.java
new file mode 100644
index 0000000..2ffea44
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/UserProtocol.java
@@ -0,0 +1,470 @@
+/**
+ *                                                                            
+ * 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.authentication.providerimpl;
+
+import java.util.Collection;
+
+import org.apache.shiro.authc.credential.DefaultPasswordService;
+import org.apache.shiro.authc.credential.PasswordService;
+import org.eclipse.osbp.authentication.account.dtos.UserAccountDto;
+import org.eclipse.osbp.dsl.dto.lib.impl.DtoServiceAccess;
+import org.eclipse.osbp.dsl.dto.lib.services.IDTOServiceWithMutablePersistence;
+import org.eclipse.osbp.dsl.dto.lib.services.Query;
+import org.eclipse.osbp.dsl.dto.lib.services.filters.LCompare;
+import org.eclipse.osbp.persistence.IPersistenceService;
+import org.eclipse.osbp.ui.api.useraccess.IUserAccessService;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.service.component.ComponentContext;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The Class UserProtocol controls login attempts of users, if successful or
+ * not. User accounts will be locked on too many unsuccessful login attempts.
+ * The maximum tries is configured in the preferences.
+ */
+@Component(service = {}, immediate = true)
+public class UserProtocol {
+
+	/** The dto user account dto service. */
+	private static IDTOServiceWithMutablePersistence<UserAccountDto> dtoUserAccountDtoService = null;
+
+	/** The find by user name. */
+	private static boolean findByUserName = true; // false means find by email
+
+	/** The Constant LOGGER. */
+	private static final Logger LOGGER = LoggerFactory.getLogger(UserProtocol.class);
+
+	/** The persistence service. */
+	private IPersistenceService persistenceService;
+
+	/** The persistence id. */
+	private static String persistenceId = "authentication";
+
+	/** The password service. */
+	private static PasswordService passwordService = null;
+
+	//
+	// OSGI Infrastructure
+	//
+
+	/**
+	 * Called by OSGi-DS to activate the service.
+	 *
+	 * @param context
+	 *            the context
+	 * @throws Exception
+	 *             the exception
+	 */
+	protected void activate(ComponentContext context) {
+		LOGGER.debug("UserProtocol activated");
+	}
+
+	/**
+	 * Internal activate.
+	 *
+	 * @throws InvalidSyntaxException
+	 *             the invalid syntax exception
+	 */
+	@SuppressWarnings("restriction")
+	protected static void internalActivate() {
+		if (UserProtocol.dtoUserAccountDtoService == null) {
+			UserProtocol.dtoUserAccountDtoService = (IDTOServiceWithMutablePersistence<UserAccountDto>) DtoServiceAccess
+					.getService(UserAccountDto.class);
+		}
+		// for password encryption
+		if (UserProtocol.passwordService == null) {
+			UserProtocol.passwordService = new DefaultPasswordService();
+		}
+	}
+
+	/**
+	 * Called by OSGi-DS to deactivate the service.
+	 *
+	 * @param context
+	 *            the context
+	 */
+	protected void deactivate(ComponentContext context) {
+		// NOP
+	}
+
+	/**
+	 * Gets the dto user account dto service.
+	 *
+	 * @return the dto user account dto service
+	 */
+	public static IDTOServiceWithMutablePersistence<UserAccountDto> getDtoUserAccountDtoService() {
+		UserProtocol.internalActivate();
+		return UserProtocol.dtoUserAccountDtoService;
+	}
+
+	/**
+	 * Gets the password service.
+	 *
+	 * @return the password service
+	 */
+	public static PasswordService getPasswordService() {
+		return UserProtocol.passwordService;
+	}
+
+	/**
+	 * Find user account.
+	 *
+	 * @param username
+	 *            the username
+	 * @return the user account dto
+	 */
+	// TODO (JCD): New method that ONLY finds a user. That´s all!
+	public UserAccountDto findUserAccount(String username) {
+		Collection<UserAccountDto> users = null;
+		try {
+			// try to find by username
+			users = getDtoUserAccountDtoService().find(new Query(new LCompare.Equal("userName", username)));
+		} catch (Exception e) {
+			LOGGER.error("Exception while trying to find user", e);
+		}
+		if (users != null) {
+			if (users.size() > 1) {
+				LOGGER.error("user account is not unique - first match taken");
+			} else if (users.isEmpty()) {
+				LOGGER.debug("user account not found");
+				return null;
+			}
+			return users.iterator().next();
+		}
+		return null;
+	}
+
+	/**
+	 * Find user account.
+	 *
+	 * @param username
+	 *            the username
+	 * @return the user account dto
+	 */
+	// TODO (JCD): I changed this method into OLD due to the not knowing heed of
+	// a method that finds a user by email using the introduced username and
+	// that creates a new user if it doesn´t exist and that all in a
+	// find.Method. Very strange!!!!
+	public UserAccountDto findUserAccount_OLD(String username) {
+		Collection<UserAccountDto> users = null;
+		try {
+			if (isFindByUserName()) {
+				// try to find by username first
+				users = getDtoUserAccountDtoService().find(new Query(new LCompare.Equal("userName", username)));
+			} else {
+				// try to find by email
+				users = getDtoUserAccountDtoService().find(new Query(new LCompare.Equal("email", username)));
+			}
+		} catch (Exception e) {
+			LOGGER.error("Exception while trying to find user", e);
+		}
+		if (users != null) {
+			if (users.size() > 1) {
+				LOGGER.error("user account is not unique - first match taken");
+			} else if (users.isEmpty()) {
+				LOGGER.debug("user account not found -create one");
+				UserAccountDto userAccount = new UserAccountDto();
+				userAccount.setEnabled(true);
+				if (isFindByUserName()) {
+					userAccount.setUserName(username);
+				} else {
+					userAccount.setEmail(username);
+				}
+				getDtoUserAccountDtoService().update(userAccount);
+				return userAccount;
+			}
+			return users.iterator().next();
+		}
+		return null;
+	}
+
+	/**
+	 * Update user account.
+	 *
+	 * @param user
+	 *            the user
+	 */
+	public void updateUserAccount(UserAccountDto user) {
+		getDtoUserAccountDtoService().update(user);
+	}
+
+	/**
+	 * Delete user account.
+	 *
+	 * @param user
+	 *            the user
+	 */
+	public void deleteUserAccount(UserAccountDto user) {
+		getDtoUserAccountDtoService().delete(user);
+	}
+
+	/**
+	 * Track successful login attempt.
+	 *
+	 * @param username
+	 *            the username
+	 */
+	public void trackSuccessfulLoginAttempt(String username) {
+		UserAccountDto user = this.findUserAccount(username);
+		if (user != null) {
+			int cnt = user.getSuccessfulAttempt();
+			cnt++;
+			user.setSuccessfulAttempt(cnt);
+			user.setFailedAttempt(0);
+			updateUserAccount(user);
+		}
+	}
+
+	/**
+	 * Track failed login attempt.
+	 *
+	 * @param username
+	 *            the username
+	 * @return the int
+	 */
+	public int trackFailedLoginAttempt(String username) {
+		if (IUserAccessService.ADMINISTRATOR.equals(username)) {
+			return 0;
+		}
+		UserAccountDto user = findUserAccount(username);
+		if (user != null) {
+			int cnt = user.getFailedAttempt();
+			cnt++;
+			user.setFailedAttempt(cnt);
+			updateUserAccount(user);
+			return cnt;
+		}
+		return 0;
+	}
+
+	/**
+	 * Checks if is account locked.
+	 *
+	 * @param username
+	 *            the username
+	 * @return true, if is account locked
+	 */
+	public boolean isAccountLocked(String username) {
+		if (IUserAccessService.ADMINISTRATOR.equals(username)) {
+			return false;
+		}
+		UserAccountDto user = findUserAccount(username);
+		if (user != null) {
+			return user.getLocked();
+		}
+		return false;
+	}
+
+	/**
+	 * Checks if the account is still not registered.
+	 *
+	 * @param username
+	 *            the username
+	 * @return true, if the account is still not registered
+	 */
+	public boolean isAccountNotRegistered(String username) {
+		if (IUserAccessService.ADMINISTRATOR.equals(username)) {
+			return false;
+		}
+		UserAccountDto user = findUserAccount(username);
+		if (user != null) {
+			return user.getNotRegistered();
+		}
+		return false;
+	}
+
+	/**
+	 * Checks if is account enabled.
+	 *
+	 * @param username
+	 *            the username
+	 * @return true, if is account enabled
+	 */
+	public boolean isAccountEnabled(String username) {
+		if (IUserAccessService.ADMINISTRATOR.equals(username)) {
+			return true;
+		}
+		UserAccountDto user = findUserAccount(username);
+		if (user != null) {
+			return user.getEnabled();
+		}
+		return false;
+	}
+
+	/**
+	 * Lock account.
+	 *
+	 * @param username
+	 *            the username
+	 * @param locked
+	 *            the locked
+	 */
+	public void lockAccount(String username, boolean locked) {
+		UserAccountDto user = findUserAccount(username);
+		if (user != null) {
+			user.setLocked(locked);
+			updateUserAccount(user);
+		}
+	}
+
+	/**
+	 * Enable account.
+	 *
+	 * @param username
+	 *            the username
+	 * @param enabled
+	 *            the enabled
+	 */
+	public void enableAccount(String username, boolean enabled) {
+		UserAccountDto user = findUserAccount(username);
+		if (user != null) {
+			user.setEnabled(enabled);
+			updateUserAccount(user);
+		}
+	}
+
+	/**
+	 * Sets the cookie hash.
+	 *
+	 * @param username
+	 *            the username
+	 * @param cookie
+	 *            the cookie
+	 */
+	public void setCookieHash(String username, String cookie) {
+		UserAccountDto user = findUserAccount(username);
+		if (user != null) {
+			user.setCookieHashCode(hashCodeForCookie(cookie));
+			updateUserAccount(user);
+		}
+	}
+
+	/**
+	 * Hash code for cookie.
+	 *
+	 * @param cookie
+	 *            the cookie
+	 * @return the int
+	 */
+	private int hashCodeForCookie(String cookie) {
+		return cookie == null ? 0 : cookie.hashCode();
+	}
+
+	/**
+	 * Checks if is cookie valid.
+	 *
+	 * @param username
+	 *            the username
+	 * @param cookie
+	 *            the cookie
+	 * @return true, if is cookie valid
+	 */
+	public boolean isCookieValid(String username, String cookie) {
+		UserAccountDto user = findUserAccount(username);
+		if (user != null) {
+			if (Integer.compareUnsigned(user.getCookieHashCode(), hashCodeForCookie(cookie)) == 0) {
+				LOGGER.debug("cookie is valid");
+				return true;
+			} else {
+				LOGGER.debug("fraud detected as an invalid cookie was presented. expected:" + user.getCookieHashCode() + " found:"
+						+ cookie.hashCode());
+				return false;
+			}
+		} else {
+			LOGGER.error("user '{}' could not be found", username);
+			return true;
+		}
+	}
+
+	/**
+	 * Checks if is find by user name.
+	 *
+	 * @return true, if is find by user name
+	 */
+	public boolean isFindByUserName() {
+		return findByUserName;
+	}
+
+	/**
+	 * Gets the persistence service.
+	 *
+	 * @return the persistence service
+	 */
+	public IPersistenceService getPersistenceService() {
+		return persistenceService;
+	}
+
+	/**
+	 * Gets the persistence id.
+	 *
+	 * @return the persistence id
+	 */
+	public static String getPersistenceId() {
+		return persistenceId;
+	}
+
+	/**
+	 * Encrypt password.
+	 *
+	 * @param decryptedPassword
+	 *            the decrypted password
+	 * @return the string
+	 */
+	public String encryptPassword(String decryptedPassword) {
+		return UserProtocol.passwordService.encryptPassword(decryptedPassword);
+	}
+
+	/**
+	 * Encrypt passwords.
+	 */
+	public void encryptPasswords() {
+		Query query = new Query(new LCompare.Equal("enabled", 0));
+		int size = getDtoUserAccountDtoService().size(query);
+		Collection<UserAccountDto> users = getDtoUserAccountDtoService().getByIndex(0, size, query);
+		for (UserAccountDto user : users) {
+			user.setPassword(encryptPassword(user.getPassword()));
+			user.setEnabled(true);
+			getDtoUserAccountDtoService().update(user);
+		}
+	}
+
+	/**
+	 * Bind persistence service.
+	 *
+	 * @param persistenceService
+	 *            the persistence service
+	 */
+	@Reference(cardinality = ReferenceCardinality.MANDATORY, policy = ReferencePolicy.STATIC)
+	public synchronized void bindPersistenceService(final IPersistenceService persistenceService) {
+		this.persistenceService = persistenceService;
+		this.persistenceService.registerPersistenceUnit(persistenceId, getClass());
+		internalActivate();
+		LOGGER.debug("UserProtocolPersistenceService bound");
+	}
+
+	/**
+	 * Unbind persistence service.
+	 *
+	 * @param persistenceService
+	 *            the persistence service
+	 */
+	public synchronized void unbindPersistenceService(final IPersistenceService persistenceService) { // NOSONAR
+		this.persistenceService = null;
+		LOGGER.debug("UserProtocolPersistenceService unbound");
+	}
+}
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/DTORealm.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/DTORealm.java
new file mode 100644
index 0000000..1edccbb
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/DTORealm.java
@@ -0,0 +1,257 @@
+/**
+ *                                                                            
+ * 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.authentication.shiro.extensions;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.inject.Inject;
+
+import org.apache.shiro.authc.AccountException;
+import org.apache.shiro.authc.AuthenticationException;
+import org.apache.shiro.authc.AuthenticationInfo;
+import org.apache.shiro.authc.AuthenticationToken;
+import org.apache.shiro.authc.DisabledAccountException;
+import org.apache.shiro.authc.LockedAccountException;
+import org.apache.shiro.authc.UnknownAccountException;
+import org.apache.shiro.authc.UsernamePasswordToken;
+import org.apache.shiro.authc.credential.CredentialsMatcher;
+import org.apache.shiro.authc.credential.PasswordMatcher;
+import org.apache.shiro.authz.AuthorizationException;
+import org.apache.shiro.authz.AuthorizationInfo;
+import org.apache.shiro.subject.PrincipalCollection;
+import org.eclipse.osbp.dsl.dto.lib.services.Query;
+import org.eclipse.osbp.dsl.dto.lib.services.filters.LCompare;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.eclipse.osbp.authentication.account.dtos.UserAccountDto;
+import org.eclipse.osbp.authentication.providerimpl.AuthenticationInformation;
+import org.eclipse.osbp.authentication.providerimpl.AuthorizationInformation;
+import org.eclipse.osbp.authentication.providerimpl.UserProtocol;
+import org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm;
+import org.eclipse.osbp.preferences.ProductConfiguration;
+import org.eclipse.osbp.ui.api.useraccess.AbstractPosition;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class DTORealm.
+ */
+public class DTORealm extends UserAccessAuthorizationRealm {
+	
+	/** The Constant LOGGER. */
+	private static final Logger LOGGER = LoggerFactory.getLogger("realm");
+	
+	/** The dto token. */
+	private IPortalAuthenticationToken dtoToken = null;
+
+	/**
+	 * Instantiates a new DTO realm.
+	 *
+	 * @throws Exception the exception
+	 */
+	public DTORealm() throws Exception {
+		setName(ProductConfiguration.SHIRO_DTO_REALM); 		// This name must match the name in the User class's getPrincipals() method
+		// we use shiro's 500.000 iterations salted password
+		setCredentialsMatcher(new PasswordMatcher());
+		setAuthorizationCachingEnabled(true); 
+		if	(!org.eclipse.osbp.preferences.ProductConfigurationPrefs.SHIRO_DTO_REALM_CLASS.equals(getClass().getCanonicalName())) {
+			throw new IllegalArgumentException("configuration key in preferences has to be modified");
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm#doGetAuthorizationInfo(org.apache.shiro.subject.PrincipalCollection)
+	 */
+	@Override
+	protected AuthorizationInfo doGetAuthorizationInfo(final PrincipalCollection principals) {
+		
+        //null usernames are invalid
+        if (principals == null) {
+            throw new AuthorizationException("PrincipalCollection method argument cannot be null.");
+        }
+        
+        final String username = (String) getAvailablePrincipal(principals);
+		UserAccountDto account = findUserAccount(username);
+		if (account == null) {
+			return null;
+		}
+
+		// the positions are linked by the username
+		AbstractPosition position = findPositionForUser(account.getUserName());
+		if(position == null) {
+			return null;
+		}
+		return new AuthorizationInformation(
+			getPortalId(),
+			principals, 
+			position, 
+			position.getRoles(), 
+			findPermissionsForUser(username));
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm#doGetAuthenticationInfo(org.apache.shiro.authc.AuthenticationToken)
+	 */
+	@Override
+	protected AuthenticationInfo doGetAuthenticationInfo(final AuthenticationToken token) throws AuthenticationException {
+        dtoToken = (IPortalAuthenticationToken)token;
+		if (!(token instanceof UsernamePasswordToken)) {
+			throw new IllegalStateException("Token has to be instance of UsernamePasswordToken class");
+		}
+
+		final UsernamePasswordToken userPassToken = (UsernamePasswordToken) token;
+
+		if (userPassToken.getUsername() == null) {
+			throw new AccountException("Null usernames are not allowed by this realm.");
+		}
+
+		UserAccountDto account = findUserAccount(userPassToken.getUsername());
+		if (account == null)
+			throw new UnknownAccountException();
+		
+		final AuthenticationInformation authenticationInfo = new AuthenticationInformation(account.getUserName(), account.getPassword(), ProductConfiguration.SHIRO_DTO_REALM, account.getEnabled(), account.getLocked()); 
+        if ( authenticationInfo.isLocked() ) {
+            LOGGER.debug("Account {} is locked.", token);
+            throw new LockedAccountException();
+        }
+
+        if ( ! authenticationInfo.isEnabled() ) {
+            LOGGER.debug("Account {} is disabled.", token);
+            throw new DisabledAccountException();
+        }
+
+    	dtoToken.setAuthenticatedByRealm(this);
+		return authenticationInfo;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.apache.shiro.realm.AuthenticatingRealm#setCredentialsMatcher(org.apache.shiro.authc.credential.CredentialsMatcher)
+	 */
+	@Override
+	@Inject
+	public void setCredentialsMatcher(final CredentialsMatcher credentialsMatcher) {
+		super.setCredentialsMatcher(credentialsMatcher);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.apache.shiro.realm.AuthenticatingRealm#supports(org.apache.shiro.authc.AuthenticationToken)
+	 */
+	@Override
+    public boolean supports(AuthenticationToken token) {
+        return token != null && token instanceof IPortalAuthenticationToken &&
+            getPortalId().equals(((IPortalAuthenticationToken)token).getPortalId());
+    }
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm#getAllUsers()
+	 */
+	@Override
+	public Set<String> getAllUsers() {
+		Set<String> retcode = new HashSet<>();
+		Query query = new Query();
+		dtoToken.getUserProtocol();
+		int size = UserProtocol.getDtoUserAccountDtoService().size(query);
+		dtoToken.getUserProtocol();
+		Collection<UserAccountDto> users = UserProtocol.getDtoUserAccountDtoService().getByIndex(0, size, query);
+		for(UserAccountDto user:users) {
+			if (user.getUserName() != null) {
+				retcode.add(user.getUserName());
+			}
+		}
+		return retcode;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm#getAllUsersPositions()
+	 */
+	@Override
+	public Map<String,String> getAllUsersPositions() {
+		Map<String,String> retcode = new HashMap<>();
+		Query query = new Query();
+		dtoToken.getUserProtocol();
+		int size = UserProtocol.getDtoUserAccountDtoService().size(query);
+		dtoToken.getUserProtocol();
+		Collection<UserAccountDto> users = UserProtocol.getDtoUserAccountDtoService().getByIndex(0, size, query);
+		for(UserAccountDto user:users) {
+			if (user.getUserName() != null) {
+				retcode.put(user.getUserName(), user.getPosition());
+			}
+		}
+		return retcode;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensions.IUserAccess#getAllEmails()
+	 */
+	@Override
+	public Set<String> getAllEmails() {
+		Set<String> retcode = new HashSet<>();
+		Query query = new Query();
+		dtoToken.getUserProtocol();
+		int size = UserProtocol.getDtoUserAccountDtoService().size(query);
+		dtoToken.getUserProtocol();
+		Collection<UserAccountDto> users = UserProtocol.getDtoUserAccountDtoService().getByIndex(0, size, query);
+		for(UserAccountDto user:users) {
+			if (user.getEmail() != null) {
+				retcode.add(user.getEmail());
+			}
+		}
+		return retcode;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm#findUserAccount(java.lang.String)
+	 */
+	@Override
+	public UserAccountDto findUserAccount(String username) {
+		Collection<UserAccountDto> users = null; // NOSONAR
+		if (dtoToken.getUserProtocol().isFindByUserName()) {
+			dtoToken.getUserProtocol();
+			// try to find by username first
+			users = UserProtocol.getDtoUserAccountDtoService().find(new Query(new LCompare.Equal("userName", username))); // NOSONAR
+		}
+		else {
+			dtoToken.getUserProtocol();
+			// try to find by email
+			users = UserProtocol.getDtoUserAccountDtoService().find(new Query(new LCompare.Equal("email", username)));
+		}
+		if (users == null || users.isEmpty() ) {
+			LOGGER.debug("user account not found");
+			return null;
+		}
+		else if (users.size() > 1) {
+			LOGGER.error("user account is not unique '{}'- first match taken", username);
+		}
+		return users.iterator().next();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm#findUsersForPosition(java.lang.String)
+	 */
+	@Override
+	public Set<String> findUsersForPosition(String orgNode) {
+		Set<String> retcode = new HashSet<>();
+		dtoToken.getUserProtocol();
+		Collection<UserAccountDto> users = UserProtocol.getDtoUserAccountDtoService().find(new Query());
+		for(UserAccountDto user:users) {
+			if(orgNode.equals(user.getPosition())) {
+				retcode.add(user.getUserName());
+			}
+		}
+		return retcode;
+	}
+	
+}
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/IPortalAuthenticationToken.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/IPortalAuthenticationToken.java
new file mode 100644
index 0000000..0b7c947
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/IPortalAuthenticationToken.java
@@ -0,0 +1,53 @@
+/**
+ *                                                                            
+ * 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.authentication.shiro.extensions;
+
+import org.apache.shiro.authc.AuthenticationToken;
+import org.apache.shiro.realm.AuthenticatingRealm;
+
+import org.eclipse.osbp.authentication.providerimpl.UserProtocol;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Interface IPortalAuthenticationToken.
+ */
+public interface IPortalAuthenticationToken extends AuthenticationToken {
+    
+    /**
+     * Gets the portal id.
+     *
+     * @return the portal id
+     */
+    String getPortalId();
+	
+	/**
+	 * Sets the authenticated by realm.
+	 *
+	 * @param authenticatingRealm the new authenticated by realm
+	 */
+	void setAuthenticatedByRealm(AuthenticatingRealm authenticatingRealm);
+	
+	/**
+	 * Sets the user protocol.
+	 *
+	 * @param protocol the new user protocol
+	 */
+	void setUserProtocol(UserProtocol protocol);
+	
+	/**
+	 * Gets the user protocol.
+	 *
+	 * @return the user protocol
+	 */
+	UserProtocol getUserProtocol();
+}
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/IUserAccess.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/IUserAccess.java
new file mode 100644
index 0000000..1f38aa8
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/IUserAccess.java
@@ -0,0 +1,127 @@
+/**
+ *                                                                            
+ * 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.authentication.shiro.extensions;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.osbp.authentication.account.dtos.UserAccountDto;
+import org.eclipse.osbp.ui.api.useraccess.AbstractPosition;
+import org.eclipse.osbp.ui.api.useraccess.IPermissionList;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Interface IUserAccess.
+ */
+public interface IUserAccess {
+	
+	/**
+	 * Gets the portal id.
+	 *
+	 * @return the portal id
+	 */
+	String getPortalId();
+	
+	/**
+	 * Sets the portal id.
+	 *
+	 * @param portalId the new portal id
+	 */
+	void setPortalId(String portalId);
+	
+	/**
+	 * Gets the all users.
+	 *
+	 * @return the all users
+	 */
+	Set<String> getAllUsers();
+	
+	/**
+	 * Gets the all emails.
+	 *
+	 * @return the all emails
+	 */
+	Set<String> getAllEmails();
+	
+	/**
+	 * Find user account.
+	 *
+	 * @param username the username
+	 * @return the user account dto
+	 */
+	UserAccountDto findUserAccount(String username);
+	
+	/**
+	 * Find users for position.
+	 *
+	 * @param orgNode the org node
+	 * @return the sets the
+	 */
+	Set<String> findUsersForPosition(String orgNode);
+	
+	/**
+	 * Find position for user.
+	 *
+	 * @param username the username
+	 * @return the a position
+	 */
+	AbstractPosition findPositionForUser(String username);
+	
+	/**
+	 * Find roles for user.
+	 *
+	 * @param username the username
+	 * @return the collection
+	 */
+	Collection<String> findRolesForUser(String username);
+	
+	/**
+	 * Find permissions for user.
+	 *
+	 * @param username the username
+	 * @return the permission list
+	 */
+	IPermissionList findPermissionsForUser(String username);
+	
+	/**
+	 * Check username uniqueness.
+	 *
+	 * @param username the username
+	 * @return true, if successful
+	 */
+	boolean checkUsernameExists(String username);
+	
+	/**
+	 * Check email uniqueness.
+	 *
+	 * @param email the email
+	 * @return true, if successful
+	 */
+	boolean checkEmailExists(String email);
+	
+	/**
+	 * Gets the all users positions.
+	 *
+	 * @return the all users positions
+	 */
+	Map<String, String> getAllUsersPositions();
+	
+	/**
+	 * Find position for position name.
+	 *
+	 * @param positionName the position name
+	 * @return the a position
+	 */
+	AbstractPosition findPositionForPositionName(String positionName);
+}
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/LDAPRealm.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/LDAPRealm.java
new file mode 100644
index 0000000..f63ab6d
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/LDAPRealm.java
@@ -0,0 +1,662 @@
+/**
+ *                                                                            
+ * 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.authentication.shiro.extensions;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.naming.AuthenticationNotSupportedException;
+import javax.naming.NameNotFoundException;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
+import javax.naming.ldap.LdapContext;
+
+import org.apache.shiro.authc.AuthenticationException;
+import org.apache.shiro.authc.AuthenticationInfo;
+import org.apache.shiro.authc.AuthenticationToken;
+import org.apache.shiro.authc.SimpleAuthenticationInfo;
+import org.apache.shiro.authc.credential.AllowAllCredentialsMatcher;
+import org.apache.shiro.authz.AuthorizationException;
+import org.apache.shiro.authz.AuthorizationInfo;
+import org.apache.shiro.ldap.UnsupportedAuthenticationMechanismException;
+import org.apache.shiro.realm.ldap.JndiLdapContextFactory;
+import org.apache.shiro.realm.ldap.LdapContextFactory;
+import org.apache.shiro.realm.ldap.LdapUtils;
+import org.apache.shiro.subject.PrincipalCollection;
+import org.apache.shiro.util.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.eclipse.osbp.authentication.account.dtos.UserAccountDto;
+import org.eclipse.osbp.authentication.providerimpl.AuthorizationInformation;
+import org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm;
+import org.eclipse.osbp.preferences.ProductConfiguration;
+import org.eclipse.osbp.ui.api.useraccess.AbstractPosition;
+
+/**
+ * The Class LDAPRealm provides a layer for authentication via LDAP services.
+ */
+@SuppressWarnings("rawtypes")
+public class LDAPRealm extends UserAccessAuthorizationRealm {
+
+    /** The Constant log. */
+    private static final Logger log = LoggerFactory.getLogger("realm");
+
+    /** The Constant USERDN_SUBSTITUTION_TOKEN. */
+    //The zero index currently means nothing, but could be utilized in the future for other substitution techniques.
+    private static final String USERDN_SUBSTITUTION_TOKEN = "{0}";
+
+    /** The user dn prefix. */
+    private String userDnPrefix;
+    
+    /** The user dn suffix. */
+    private String userDnSuffix;
+
+    /**
+     * The LdapContextFactory instance used to acquire {@link javax.naming.ldap.LdapContext LdapContext}'s at runtime
+     * to acquire connections to the LDAP directory to perform authentication attempts and authorizatino queries.
+     */
+    private LdapContextFactory contextFactory;
+    
+    /** The authentication info. */
+    private AuthenticationInfo authenticationInfo = null;
+    
+    /** The authorization info. */
+    private AuthorizationInfo authorizationInfo = null;
+    
+    /** The ldap token. */
+    private IPortalAuthenticationToken ldapToken = null; 
+
+    /**
+     * Instantiates a new LDAP realm.
+     */
+    public LDAPRealm() {
+        //Credentials Matching is not necessary - the LDAP directory will do it automatically:
+        setCredentialsMatcher(new AllowAllCredentialsMatcher());
+        //Any Object principal and Object credentials may be passed to the LDAP provider, so accept any token:
+        setAuthenticationTokenClass(AuthenticationToken.class);
+        setName(ProductConfiguration.SHIRO_LDAP_REALM);
+        contextFactory = new JndiLdapContextFactory();
+		setAuthorizationCachingEnabled(true);
+		if	(!org.eclipse.osbp.preferences.ProductConfigurationPrefs.SHIRO_LDAP_REALM_CLASS.equals(getClass().getCanonicalName())) {
+			throw new IllegalArgumentException("configuration key in preferences has to be modified");
+		}
+    }
+
+    /**
+     * Returns the User DN prefix to use when building a runtime User DN value or {@code null} if no
+     * {@link #getUserDnTemplate() userDnTemplate} has been configured.  If configured, this value is the text that
+     * occurs before the {@link #USERDN_SUBSTITUTION_TOKEN} in the {@link #getUserDnTemplate() userDnTemplate} value.
+     *
+     * @return the the User DN prefix to use when building a runtime User DN value or {@code null} if no
+     *         {@link #getUserDnTemplate() userDnTemplate} has been configured.
+     */
+    protected String getUserDnPrefix() {
+        return userDnPrefix;
+    }
+
+    /**
+     * Returns the User DN suffix to use when building a runtime User DN value.  or {@code null} if no
+     * {@link #getUserDnTemplate() userDnTemplate} has been configured.  If configured, this value is the text that
+     * occurs after the {@link #USERDN_SUBSTITUTION_TOKEN} in the {@link #getUserDnTemplate() userDnTemplate} value.
+     *
+     * @return the User DN suffix to use when building a runtime User DN value or {@code null} if no
+     *         {@link #getUserDnTemplate() userDnTemplate} has been configured.
+     */
+    protected String getUserDnSuffix() {
+        return userDnSuffix;
+    }
+
+    /**
+     * Sets the User Distinguished Name (DN) template to use when creating User DNs at runtime.  A User DN is an LDAP
+     * fully-qualified unique user identifier which is required to establish a connection with the LDAP
+     * directory to authenticate users and query for authorization information.
+     * <h2>Usage</h2>
+     * User DN formats are unique to the LDAP directory's schema, and each environment differs - you will need to
+     * specify the format corresponding to your directory.  You do this by specifying the full User DN as normal, but
+     * but you use a <b>{@code {0}}</b> placeholder token in the string representing the location where the
+     * user's submitted principal (usually a username or uid) will be substituted at runtime.
+     * <p>
+     * For example,  if your directory
+     * uses an LDAP {@code uid} attribute to represent usernames, the User DN for the {@code jsmith} user may look like
+     * this:
+     * <br>
+     * <pre>uid=jsmith,ou=users,dc=mycompany,dc=com</pre>
+     * <p>
+     * in which case you would set this property with the following template value:
+     * <br>
+     * <pre>uid=<b>{0}</b>,ou=users,dc=mycompany,dc=com</pre>
+     * <p>
+     * If no template is configured, the raw {@code AuthenticationToken}
+     * {@link AuthenticationToken#getPrincipal() principal} will be used as the LDAP principal.  This is likely
+     * incorrect as most LDAP directories expect a fully-qualified User DN as opposed to the raw uid or username.  So,
+     * ensure you set this property to match your environment!
+     *
+     * @param template the User Distinguished Name template to use for runtime substitution
+     * @throws IllegalArgumentException if the template is null, empty, or does not contain the
+     *                                  {@code {0}} substitution token.
+     * @see LdapContextFactory#getLdapContext(Object,Object)
+     */
+    public void setUserDnTemplate(String template) {
+        if (!StringUtils.hasText(template)) {
+            String msg = "User DN template cannot be null or empty.";
+            throw new IllegalArgumentException(msg);
+        }
+        int index = template.indexOf(USERDN_SUBSTITUTION_TOKEN);
+        if (index < 0) {
+            String msg = "User DN template must contain the '" +
+                    USERDN_SUBSTITUTION_TOKEN + "' replacement token to understand where to " +
+                    "insert the runtime authentication principal.";
+            throw new IllegalArgumentException(msg);
+        }
+        String prefix = template.substring(0, index);
+        String suffix = template.substring(prefix.length() + USERDN_SUBSTITUTION_TOKEN.length());
+        if (log.isDebugEnabled()) {
+            log.debug("Determined user DN prefix [{}] and suffix [{}]", prefix, suffix);
+        }
+        this.userDnPrefix = prefix;
+        this.userDnSuffix = suffix;
+    }
+
+    /**
+     * Returns the User Distinguished Name (DN) template to use when creating User DNs at runtime - see the
+     * {@link #setUserDnTemplate(String) setUserDnTemplate} JavaDoc for a full explanation.
+     *
+     * @return the User Distinguished Name (DN) template to use when creating User DNs at runtime.
+     */
+    public String getUserDnTemplate() {
+        return getUserDn(USERDN_SUBSTITUTION_TOKEN);
+    }
+
+    /**
+     * Returns the LDAP User Distinguished Name (DN) to use when acquiring an
+     * {@link javax.naming.ldap.LdapContext LdapContext} from the {@link LdapContextFactory}.
+     * <p>
+     * If the the {@link #getUserDnTemplate() userDnTemplate} property has been set, this implementation will construct
+     * the User DN by substituting the specified {@code principal} into the configured template.  If the
+     * {@link #getUserDnTemplate() userDnTemplate} has not been set, the method argument will be returned directly
+     * (indicating that the submitted authentication token principal <em>is</em> the User DN).
+     *
+     * @param principal the principal to substitute into the configured {@link #getUserDnTemplate() userDnTemplate}.
+     * @return the constructed User DN to use at runtime when acquiring an {@link javax.naming.ldap.LdapContext}.
+     * @throws IllegalArgumentException if the method argument is null or empty
+     * @throws IllegalStateException    if the {@link #getUserDnTemplate userDnTemplate} has not been set.
+     * @see LdapContextFactory#getLdapContext(Object, Object)
+     */
+    protected String getUserDn(String principal) throws IllegalArgumentException, IllegalStateException {
+        if (!StringUtils.hasText(principal)) {
+            throw new IllegalArgumentException("User principal cannot be null or empty for User DN construction.");
+        }
+        String prefix = getUserDnPrefix();
+        String suffix = getUserDnSuffix();
+        if (prefix == null && suffix == null) {
+            log.debug("userDnTemplate property has not been configured, indicating the submitted " +
+                    "AuthenticationToken's principal is the same as the User DN.  Returning the method argument " +
+                    "as is.");
+            return principal;
+        }
+
+        int prefixLength = prefix != null ? prefix.length() : 0;
+        int suffixLength = suffix != null ? suffix.length() : 0;
+        StringBuilder sb = new StringBuilder(prefixLength + principal.length() + suffixLength);
+        if (prefixLength > 0) {
+            sb.append(prefix);
+        }
+        sb.append(principal);
+        if (suffixLength > 0) {
+            sb.append(suffix);
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Sets the LdapContextFactory instance used to acquire connections to the LDAP directory during authentication
+     * attempts and authorization queries.  Unless specified otherwise, the default is a {@link JndiLdapContextFactory}
+     * instance.
+     *
+     * @param contextFactory the LdapContextFactory instance used to acquire connections to the LDAP directory during
+     *                       authentication attempts and authorization queries
+     */
+    public void setContextFactory(LdapContextFactory contextFactory) {
+        this.contextFactory = contextFactory;
+    }
+
+    /**
+     * Returns the LdapContextFactory instance used to acquire connections to the LDAP directory during authentication
+     * attempts and authorization queries.  Unless specified otherwise, the default is a {@link JndiLdapContextFactory}
+     * instance.
+     *
+     * @return the LdapContextFactory instance used to acquire connections to the LDAP directory during
+     *         authentication attempts and authorization queries
+     */
+    public LdapContextFactory getContextFactory() {
+        return this.contextFactory;
+    }
+
+    /*--------------------------------------------
+    |               M E T H O D S                |
+    ============================================*/
+
+    /**
+     * Delegates to {@link #queryForAuthenticationInfo(org.apache.shiro.authc.AuthenticationToken, LdapContextFactory)},
+     * wrapping any {@link NamingException}s in a Shiro {@link AuthenticationException} to satisfy the parent method
+     * signature.
+     *
+     * @param token the authentication token containing the user's principal and credentials.
+     * @return the {@link AuthenticationInfo} acquired after a successful authentication attempt
+     * @throws AuthenticationException if the authentication attempt fails or if a
+     *                                 {@link NamingException} occurs.
+     */
+    @Override
+    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
+        ldapToken = (IPortalAuthenticationToken)token;
+        try {
+            authenticationInfo = queryForAuthenticationInfo(token, getContextFactory());
+        } catch (AuthenticationNotSupportedException e) {
+            String msg = "Unsupported configured authentication mechanism";
+            log.debug(msg);
+            throw new UnsupportedAuthenticationMechanismException(msg, e);
+        } catch (javax.naming.AuthenticationException e) {
+        	String msg = "LDAP authentication failed."+e.getLocalizedMessage();
+        	if (e.getExplanation()!= null) {
+        		msg += e.getExplanation();
+        	}
+            log.debug(msg);
+            throw new AuthenticationException("LDAP authentication failed.", e);
+        } catch (NamingException e) {
+            String msg = "LDAP naming error while attempting to authenticate user.";
+            log.debug(msg);
+            throw new AuthenticationException(msg, e);
+        }
+        if  (authenticationInfo != null) {
+        	ldapToken.setAuthenticatedByRealm(this);
+        }
+		return authenticationInfo;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm#doGetAuthorizationInfo(org.apache.shiro.subject.PrincipalCollection)
+     */
+    @Override
+    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
+        try {
+        	authorizationInfo = queryForAuthorizationInfo(principals, getContextFactory());
+        } catch (NamingException e) {
+            String msg = "LDAP naming error while attempting to retrieve authorization for user [" + principals + "].";
+            log.debug(msg);
+            throw new AuthorizationException(msg, e);
+        }
+
+        return authorizationInfo;
+    }
+
+    /**
+     * Returns the principal to use when creating the LDAP connection for an authentication attempt.
+     * <p>
+     * This implementation uses a heuristic: it checks to see if the specified token's
+     * {@link AuthenticationToken#getPrincipal() principal} is a {@code String}, and if so,
+     * {@link #getUserDn(String) converts it} from what is
+     * assumed to be a raw uid or username {@code String} into a User DN {@code String}.  Almost all LDAP directories
+     * expect the authentication connection to present a User DN and not an unqualified username or uid.
+     * <p>
+     * If the token's {@code principal} is not a String, it is assumed to already be in the format supported by the
+     * underlying {@link LdapContextFactory} implementation and the raw principal is returned directly.
+     *
+     * @param token the {@link AuthenticationToken} submitted during the authentication process
+     * @return the User DN or raw principal to use to acquire the LdapContext.
+     * @see LdapContextFactory#getLdapContext(Object, Object)
+     */
+    protected Object getLdapPrincipal(AuthenticationToken token) {
+        Object principal = token.getPrincipal();
+        if (principal instanceof String) {
+            String sPrincipal = (String) principal;
+            return getUserDn(sPrincipal);
+        }
+        return principal;
+    }
+
+    /**
+     * This implementation opens an LDAP connection using the token's
+     * {@link #getLdapPrincipal(org.apache.shiro.authc.AuthenticationToken) discovered principal} and provided
+     * {@link AuthenticationToken#getCredentials() credentials}.  If the connection opens successfully, the
+     * authentication attempt is immediately considered successful and a new
+     * {@link AuthenticationInfo} instance is
+     * {@link #createAuthenticationInfo(org.apache.shiro.authc.AuthenticationToken, Object, Object, javax.naming.ldap.LdapContext) created}
+     * and returned.  If the connection cannot be opened, either because LDAP authentication failed or some other
+     * JNDI problem, an {@link NamingException} will be thrown.
+     *
+     * @param token              the submitted authentication token that triggered the authentication attempt.
+     * @param ldapContextFactory factory used to retrieve LDAP connections.
+     * @return an {@link AuthenticationInfo} instance representing the authenticated user's information.
+     * @throws NamingException if any LDAP errors occur.
+     */
+    protected AuthenticationInfo queryForAuthenticationInfo(AuthenticationToken token,
+                                                            LdapContextFactory ldapContextFactory)
+            throws NamingException {
+
+        Object principal = token.getPrincipal();
+        Object credentials = token.getCredentials();
+
+        log.debug("Authenticating user '{}' through LDAP", principal);
+
+        principal = getLdapPrincipal(token);
+        LdapContext ctx = null;
+
+        try {
+            ctx = ldapContextFactory.getLdapContext(principal, credentials);
+            //context was opened successfully, which means their credentials were valid.  Return the AuthenticationInfo:
+            return createAuthenticationInfo(token, principal, credentials, ctx);
+        } finally {
+            LdapUtils.closeContext(ctx);
+        }
+    }
+
+    /**
+     * Returns the {@link AuthenticationInfo} resulting from a Subject's successful LDAP authentication attempt.
+     * <p>
+     * This implementation ignores the {@code ldapPrincipal}, {@code ldapCredentials}, and the opened
+     * {@code ldapContext} arguments and merely returns an {@code AuthenticationInfo} instance mirroring the
+     * submitted token's principal and credentials.  This is acceptable because this method is only ever invoked after
+     * a successful authentication attempt, which means the provided principal and credentials were correct, and can
+     * be used directly to populate the (now verified) {@code AuthenticationInfo}.
+     * <p>
+     * Subclasses however are free to override this method for more advanced construction logic.
+     *
+     * @param token           the submitted {@code AuthenticationToken} that resulted in a successful authentication
+     * @param ldapPrincipal   the LDAP principal used when creating the LDAP connection.  Unlike the token's
+     *                        {@link AuthenticationToken#getPrincipal() principal}, this value is usually a constructed
+     *                        User DN and not a simple username or uid.  The exact value is depending on the
+     *                        configured
+     *                        <a href="http://download-llnw.oracle.com/javase/tutorial/jndi/ldap/auth_mechs.html">
+     *                        LDAP authentication mechanism</a> in use.
+     * @param ldapCredentials the LDAP credentials used when creating the LDAP connection.
+     * @param ldapContext     the LdapContext created that resulted in a successful authentication.  It can be used
+     *                        further by subclasses for more complex operations.  It does not need to be closed -
+     *                        it will be closed automatically after this method returns.
+     * @return the {@link AuthenticationInfo} resulting from a Subject's successful LDAP authentication attempt.
+     * @throws NamingException if there was any problem using the {@code LdapContext}
+     */
+    protected AuthenticationInfo createAuthenticationInfo(AuthenticationToken token, Object ldapPrincipal,
+                                                          Object ldapCredentials, LdapContext ldapContext)
+            throws NamingException {
+        return new SimpleAuthenticationInfo(token.getPrincipal(), token.getCredentials(), ProductConfiguration.SHIRO_LDAP_REALM);
+    }
+
+
+    /**
+     * Method to build an
+     * {@link AuthorizationInfo} object by querying the LDAP context for the
+     * specified principal.
+     * <br>
+     * @param principals          the principals of the Subject whose AuthenticationInfo should be queried from the LDAP server.
+     * @param ldapContextFactory factory used to retrieve LDAP connections.
+     * @return an {@link AuthorizationInfo} instance containing information retrieved from the LDAP server.
+     * @throws NamingException if any LDAP errors occur during the search.
+     */
+	protected AuthorizationInfo queryForAuthorizationInfo(
+			PrincipalCollection principals,
+			LdapContextFactory ldapContextFactory) throws NamingException {
+		// return super.queryForAuthorizationInfo(principals, ldapContextFactory);
+		String username = principals.toString();
+		AbstractPosition position = findPositionForUser(username);
+		if (position == null) {
+			return null;
+		}
+		return new AuthorizationInformation(
+			getPortalId(),
+			principals, 
+			position, 
+			position.getRoles(), 
+			findPermissionsForUser(username));
+	}
+
+	/* (non-Javadoc)
+	 * @see org.apache.shiro.realm.AuthenticatingRealm#supports(org.apache.shiro.authc.AuthenticationToken)
+	 */
+	@Override
+    public boolean supports(AuthenticationToken token) {
+        return token != null && token instanceof IPortalAuthenticationToken &&
+            getPortalId().equals(((IPortalAuthenticationToken)token).getPortalId());
+    }
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm#getAllUsers()
+	 */
+	@Override
+	public Set<String> getAllUsers() {
+		Set<String> retcode = new HashSet<>();
+		if (authenticationInfo == null) {
+			return retcode;
+		}
+        LdapContext ctx = null;
+        NamingEnumeration results = null;
+        try {
+            ctx = getContextFactory().getLdapContext(authenticationInfo.getPrincipals(), authenticationInfo.getCredentials());
+			SearchControls controls = new SearchControls();
+			controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+			results = ctx.search("", "(objectclass=person)", controls);
+			while (results.hasMore()) {
+				SearchResult searchResult = (SearchResult) results.next();            
+				Attributes attributes = searchResult.getAttributes();
+				retcode.add(""+attributes.get("cn").get());
+//	            System.out.println("dn----------> "+searchResult.getName());
+//	            System.out.println("cn----------> "+attributes.get("cn").get()); 
+//	            if (attributes.get("givenName")!=null)
+//	                 System.out.println("First Name--> "+attributes.get("givenName").get());
+//	            System.out.println("Last Name---> "+attributes.get("sn").get());
+//	            System.out.println("Mail--------> "+attributes.get("mail").get()+"\n\n");				
+			}
+        } catch (NameNotFoundException e) {
+            log.error(e.getLocalizedMessage());
+        } catch (NamingException e) {
+        	log.error(e.getExplanation());
+        } finally {
+			if (results != null) {
+				try {
+					results.close();
+				} catch (Exception e) { // NOSONAR
+					log.error(e.getLocalizedMessage());
+				}
+			}
+            LdapUtils.closeContext(ctx);
+        }
+		return retcode;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm#getAllUsersPositions()
+	 */
+	@Override
+	public Map<String,String> getAllUsersPositions() {
+		Map<String,String> retcode = new HashMap<>();
+		if (authenticationInfo == null) {
+			return retcode;
+		}
+        LdapContext ctx = null;
+        NamingEnumeration results = null;
+        try {
+            ctx = getContextFactory().getLdapContext(authenticationInfo.getPrincipals(), authenticationInfo.getCredentials());
+			SearchControls controls = new SearchControls();
+			controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+			results = ctx.search("", "(objectclass=person)", controls);
+			while (results.hasMore()) {
+				SearchResult searchResult = (SearchResult) results.next();            
+				Attributes attributes = searchResult.getAttributes();
+				// the ldap database must be extended for the attribute 'position'
+				retcode.put(""+attributes.get("cn").get(),""+attributes.get("position").get());
+//	            System.out.println("dn----------> "+searchResult.getName());
+//	            System.out.println("cn----------> "+attributes.get("cn").get()); 
+//	            if (attributes.get("givenName")!=null)
+//	                 System.out.println("First Name--> "+attributes.get("givenName").get());
+//	            System.out.println("Last Name---> "+attributes.get("sn").get());
+//	            System.out.println("Mail--------> "+attributes.get("mail").get()+"\n\n");				
+			}
+        } catch (NameNotFoundException e) { // NOSONAR
+            log.error(e.getLocalizedMessage());
+        } catch (NamingException e) { // NOSONAR
+        	log.error(e.getExplanation());
+        } finally {
+			if (results != null) {
+				try {
+					results.close();
+				} catch (Exception e) { // NOSONAR
+					log.error(e.getLocalizedMessage());
+				}
+			}
+            LdapUtils.closeContext(ctx);
+        }
+		return retcode;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensions.IUserAccess#getAllEmails()
+	 */
+	@Override
+	public Set<String> getAllEmails() {
+		Set<String> retcode = new HashSet<>();
+		if (authenticationInfo == null) {
+			return retcode;
+		}
+		LdapContext ctx = null;
+		NamingEnumeration results = null;
+		try {
+			ctx = getContextFactory().getLdapContext(authenticationInfo.getPrincipals(), authenticationInfo.getCredentials());
+			SearchControls controls = new SearchControls();
+			controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+			results = ctx.search("", "(objectclass=person)", controls);
+			while (results.hasMore()) {
+				SearchResult searchResult = (SearchResult) results.next();            
+				Attributes attributes = searchResult.getAttributes();
+				retcode.add(""+attributes.get("mail").get());
+			}
+		} catch (NameNotFoundException e) { // NOSONAR
+			log.error(e.getLocalizedMessage());
+		} catch (NamingException e) { // NOSONAR
+			log.error(e.getExplanation());
+		} finally {
+			if (results != null) {
+				try {
+					results.close();
+				} catch (Exception e) { // NOSONAR
+					log.error(e.getLocalizedMessage());
+				}
+			}
+			LdapUtils.closeContext(ctx);
+		}
+		return retcode;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm#findUserAccount(java.lang.String)
+	 */
+	@Override
+	public UserAccountDto findUserAccount(String username) {
+		HashSet<UserAccountDto> users = new HashSet<>();
+		if (authenticationInfo == null) {
+			return null;
+		}
+        LdapContext ctx = null;
+        NamingEnumeration results = null;
+        try {
+            ctx = getContextFactory().getLdapContext(authenticationInfo.getPrincipals(), authenticationInfo.getCredentials());
+			SearchControls controls = new SearchControls();
+			controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+			if (ldapToken.getUserProtocol().isFindByUserName()) {
+				// common name search
+				results = ctx.search("", "(cn="+username+")", controls);
+			}
+			else {
+				// email search
+				results = ctx.search("", "(mail="+username+")", controls);
+			}
+			while (results.hasMore()) {
+				SearchResult searchResult = (SearchResult) results.next();            
+			    Attributes attributes = searchResult.getAttributes();
+			    UserAccountDto user = new UserAccountDto();
+			    user.setEnabled(true);
+	            if (attributes.get("position")!=null) {
+	            	user.setPosition(""+attributes.get("position").get());
+	            }
+			    user.setEmail(""+attributes.get("mail").get());
+			    user.setUserName(""+attributes.get("cn").get());
+			    users.add(user);
+			}
+        } catch (NameNotFoundException e) {
+            log.error(e.getLocalizedMessage());
+        } catch (NamingException e) { // NOSONAR
+        	log.error(e.getExplanation());
+        } finally {
+			if (results != null) {
+				try {
+					results.close();
+				} catch (Exception e) { // NOSONAR
+					log.error(e.getLocalizedMessage());
+				}
+			}
+            LdapUtils.closeContext(ctx);
+        }
+		if (users.size() > 1) {
+			log.error("user account is not unique - first match taken");
+		} else if (users.isEmpty()) {
+			log.debug("user account not found");
+			return null;
+		}
+		return users.iterator().next();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm#findUsersForPosition(java.lang.String)
+	 */
+	@Override
+	public Set<String> findUsersForPosition(String orgNode) {
+		Set<String> retcode = new HashSet<>();
+		if (authenticationInfo == null) {
+			return retcode;
+		}
+        LdapContext ctx = null;
+        NamingEnumeration results = null;
+        try {
+            ctx = getContextFactory().getLdapContext(authenticationInfo.getPrincipals(), authenticationInfo.getCredentials());
+			SearchControls controls = new SearchControls();
+			controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+			results = ctx.search("", "(objectclass=person)", controls);
+			while (results.hasMore()) {
+				SearchResult searchResult = (SearchResult) results.next();            
+				Attributes attributes = searchResult.getAttributes();
+	            if (attributes.get("position")!=null && 
+	            	orgNode.equals((String)attributes.get("position").get()) ) {
+	            	
+            		retcode.add(""+attributes.get("cn").get());
+	            }
+			}
+        } catch (NameNotFoundException e) { // NOSONAR
+            log.error(e.getLocalizedMessage());
+        } catch (NamingException e) { // NOSONAR
+        	log.error(e.getExplanation());
+        } finally {
+			if (results != null) {
+				try {
+					results.close();
+				} catch (Exception e) { // NOSONAR
+					log.error(e.getLocalizedMessage());
+				}
+			}
+            LdapUtils.closeContext(ctx);
+        }
+		return retcode;
+	}
+}
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/StaticRealm.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/StaticRealm.java
new file mode 100644
index 0000000..acece03
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/StaticRealm.java
@@ -0,0 +1,232 @@
+/**
+ *                                                                            
+ * 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.authentication.shiro.extensions;
+
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.shiro.authc.AccountException;
+import org.apache.shiro.authc.AuthenticationException;
+import org.apache.shiro.authc.AuthenticationInfo;
+import org.apache.shiro.authc.AuthenticationToken;
+import org.apache.shiro.authc.DisabledAccountException;
+import org.apache.shiro.authc.LockedAccountException;
+import org.apache.shiro.authc.UnknownAccountException;
+import org.apache.shiro.authc.UsernamePasswordToken;
+import org.apache.shiro.authc.credential.PasswordMatcher;
+import org.apache.shiro.authz.AuthorizationException;
+import org.apache.shiro.authz.AuthorizationInfo;
+import org.apache.shiro.subject.PrincipalCollection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.eclipse.osbp.authentication.account.dtos.UserAccountDto;
+import org.eclipse.osbp.authentication.providerimpl.AuthenticationInformation;
+import org.eclipse.osbp.authentication.providerimpl.AuthorizationInformation;
+import org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm;
+import org.eclipse.osbp.preferences.ProductConfiguration;
+import org.eclipse.osbp.ui.api.useraccess.AbstractPosition;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class StaticRealm.
+ */
+public class StaticRealm extends UserAccessAuthorizationRealm {
+	
+	/** The Constant LOGGER. */
+	private static final Logger LOGGER = LoggerFactory.getLogger("realm");
+	
+	/** The Constant NAME_ADMINISTRATOR. */
+	private static final String NAME_ADMINISTRATOR="Administrator";
+	
+	/** The Constant PASSWORD_ADMINISTRATOR. */
+	private static final String PASSWORD_ADMINISTRATOR="Administrator";
+	
+	/** The Constant POS_ADMINISTRATOR. */
+	private static final String POS_ADMINISTRATOR="Administrator";
+	
+	/** The static token. */
+	private IPortalAuthenticationToken staticToken = null;
+
+	/**
+	 * Instantiates a new static realm.
+	 */
+	public StaticRealm() {
+		setName(ProductConfiguration.SHIRO_STATIC_REALM); 		// This name must match the name in the User class's getPrincipals() method
+		setCredentialsMatcher(new PasswordMatcher());
+		setAuthorizationCachingEnabled(true); 
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm#doGetAuthorizationInfo(org.apache.shiro.subject.PrincipalCollection)
+	 */
+	@Override
+	protected AuthorizationInfo doGetAuthorizationInfo(final PrincipalCollection principals) {
+        if (principals == null) {
+            throw new AuthorizationException("PrincipalCollection method argument cannot be null.");
+        }
+        
+        final String username = (String) getAvailablePrincipal(principals);
+		UserAccountDto account = findUserAccount(username);
+		if (account == null) {
+			return null;
+		}
+
+		// the positions are linked by the username
+		AbstractPosition position = findPositionForUser(account.getUserName()); 
+		if(position == null) {
+			return null;
+		}
+		return new AuthorizationInformation(
+			getPortalId(),
+			principals, 
+			position, 
+			position.getRoles(), 
+			findPermissionsForUser(username));
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm#doGetAuthenticationInfo(org.apache.shiro.authc.AuthenticationToken)
+	 */
+	@Override
+	protected AuthenticationInfo doGetAuthenticationInfo(final AuthenticationToken token) throws AuthenticationException {
+        staticToken = (IPortalAuthenticationToken)token;
+		if (!(token instanceof UsernamePasswordToken)) {
+			throw new IllegalStateException("Token has to be instance of UsernamePasswordToken class");
+		}
+
+		final UsernamePasswordToken userPassToken = (UsernamePasswordToken) token;
+
+		if (userPassToken.getUsername() == null) {
+			throw new AccountException("Null usernames are not allowed by this realm.");
+		}
+
+		UserAccountDto account = findUserAccount(userPassToken.getUsername());
+		if (account == null)
+			throw new UnknownAccountException();
+		
+		final AuthenticationInformation authenticationInfo = new AuthenticationInformation( account.getUserName(), 
+																							account.getPassword(), 
+																							ProductConfiguration.SHIRO_STATIC_REALM, 
+																							account.getEnabled(), 
+																							account.getLocked()); 
+        if ( authenticationInfo.isLocked() ) {
+            LOGGER.debug("Account {} is locked.", token);
+            throw new LockedAccountException();
+        }
+
+        if ( ! authenticationInfo.isEnabled() ) {
+            LOGGER.debug("Account {} is disabled.", token);
+            throw new DisabledAccountException();
+        }
+
+    	staticToken.setAuthenticatedByRealm(this);
+
+		return authenticationInfo;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.apache.shiro.realm.AuthenticatingRealm#supports(org.apache.shiro.authc.AuthenticationToken)
+	 */
+	@Override
+    public boolean supports(AuthenticationToken token) {
+        return token != null && token instanceof IPortalAuthenticationToken &&
+            getPortalId().equals(((IPortalAuthenticationToken)token).getPortalId());
+    }
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensions.IUserAccess#getAllEmails()
+	 */
+	@Override
+	public Set<String> getAllEmails() {
+		Set<String> retcode = new HashSet<>();
+		retcode.add(ProductConfiguration.getAdminEmail());
+		return retcode;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm#getAllUsers()
+	 */
+	@Override
+	public Set<String> getAllUsers() {
+		Set<String> retcode = new HashSet<>();
+		retcode.add(NAME_ADMINISTRATOR);
+		return retcode;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm#getAllUsersPositions()
+	 */
+	@Override
+	public Map<String, String> getAllUsersPositions() {
+		Map<String,String> retcode = new HashMap<>();
+		retcode.put(NAME_ADMINISTRATOR, PASSWORD_ADMINISTRATOR);
+		return retcode;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm#findUserAccount(java.lang.String)
+	 */
+	@Override
+	public UserAccountDto findUserAccount(String username) {
+		if(!NAME_ADMINISTRATOR.equals(username)) {
+			return null;
+		}
+		UserAccountDto user = new UserAccountDto();
+		user.setEmail(ProductConfiguration.getAdminEmail());
+		user.setEnabled(true);
+		user.setLocked(false);
+		user.setPosition(POS_ADMINISTRATOR);
+		user.setUserName(NAME_ADMINISTRATOR);
+		user.setPassword(encryptPassword(generatePassword()));
+		return user;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm#findUsersForPosition(java.lang.String)
+	 */
+	@Override
+	public Set<String> findUsersForPosition(String orgNode) {
+		Set<String> retcode = new HashSet<>();
+		retcode.add(NAME_ADMINISTRATOR);
+		return retcode;
+	}
+
+	/**
+	 * Generate password.
+	 *
+	 * @return the string
+	 */
+	private String generatePassword() {
+		Calendar cal = Calendar.getInstance();
+		Integer number = new Integer(cal.get(Calendar.DATE)*100);
+		number += cal.get(Calendar.MONTH);
+		number ++; // month is idiotically 0 based
+		number += cal.get(Calendar.YEAR);
+		number += cal.get(Calendar.HOUR_OF_DAY)*100;
+		return number.toString();
+	}
+	
+	/**
+	 * Encrypt password.
+	 *
+	 * @param decryptedPassword the decrypted password
+	 * @return the string
+	 */
+	private String encryptPassword(String decryptedPassword) {
+		return staticToken.getUserProtocol().encryptPassword(decryptedPassword);
+	}
+
+}
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensionsimpl/PortalUsernamePasswordToken.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensionsimpl/PortalUsernamePasswordToken.java
new file mode 100644
index 0000000..f3e2b27
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensionsimpl/PortalUsernamePasswordToken.java
@@ -0,0 +1,221 @@
+/**
+ *                                                                            
+ * 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.authentication.shiro.extensionsimpl;
+
+import org.apache.shiro.authc.UsernamePasswordToken;
+import org.apache.shiro.realm.AuthenticatingRealm;
+
+import org.eclipse.osbp.authentication.providerimpl.UserProtocol;
+import org.eclipse.osbp.authentication.shiro.extensions.IPortalAuthenticationToken;
+
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class PortalUsernamePasswordToken.
+ */
+public class PortalUsernamePasswordToken extends UsernamePasswordToken implements IPortalAuthenticationToken {
+	
+	/** The Constant serialVersionUID. */
+	private static final long serialVersionUID = 3390075289568367652L;
+	
+	/** The authenticating realm. */
+	private AuthenticatingRealm fAuthenticatingRealm;
+	
+	/** The protocol. */
+	private UserProtocol protocol;
+	
+	/**
+	 * Instantiates a new portal username password token.
+	 */
+	public PortalUsernamePasswordToken() {
+		super();
+		portalId = "";
+	}
+
+	/**
+	 * Instantiates a new portal username password token.
+	 *
+	 * @param clientHost the client host
+	 * @param portalId the portal id
+	 * @param username the username
+	 * @param password the password
+	 * @param rememberMe the remember me
+	 * @param host the host
+	 */
+	public PortalUsernamePasswordToken(String clientHost, String portalId, String username, char[] password, boolean rememberMe, String host) {
+		super(username, password, rememberMe, host);
+		this.portalId = portalId;
+		setHost(clientHost);
+	}
+
+	/**
+	 * Instantiates a new portal username password token.
+	 *
+	 * @param clientHost the client host
+	 * @param portalId the portal id
+	 * @param username the username
+	 * @param password the password
+	 * @param rememberMe the remember me
+	 */
+	public PortalUsernamePasswordToken(String clientHost, String portalId, String username, char[] password,
+			boolean rememberMe) {
+		super(username, password, rememberMe);
+		this.portalId = portalId;
+		setHost(clientHost);
+	}
+
+	/**
+	 * Instantiates a new portal username password token.
+	 *
+	 * @param clientHost the client host
+	 * @param portalId the portal id
+	 * @param username the username
+	 * @param password the password
+	 * @param host the host
+	 */
+	public PortalUsernamePasswordToken(String clientHost, String portalId, String username, char[] password,
+			String host) {
+		super(username, password, host);
+		this.portalId = portalId;
+		setHost(clientHost);
+	}
+
+	/**
+	 * Instantiates a new portal username password token.
+	 *
+	 * @param clientHost the client host
+	 * @param portalId the portal id
+	 * @param username the username
+	 * @param password the password
+	 */
+	public PortalUsernamePasswordToken(String clientHost, String portalId, String username, char[] password) {
+		super(username, password);
+		this.portalId = portalId;
+		setHost(clientHost);
+	}
+
+	/**
+	 * Instantiates a new portal username password token.
+	 *
+	 * @param clientHost the client host
+	 * @param portalId the portal id
+	 * @param username the username
+	 * @param password the password
+	 * @param rememberMe the remember me
+	 * @param host the host
+	 */
+	public PortalUsernamePasswordToken(String clientHost, String portalId, String username, String password,
+			boolean rememberMe, String host) {
+		super(username, password, rememberMe, host);
+		this.portalId = portalId;
+		setHost(clientHost);
+	}
+
+	/**
+	 * Instantiates a new portal username password token.
+	 *
+	 * @param clientHost the client host
+	 * @param portalId the portal id
+	 * @param username the username
+	 * @param password the password
+	 * @param rememberMe the remember me
+	 */
+	public PortalUsernamePasswordToken(String clientHost, String portalId, String username, String password,
+			boolean rememberMe) {
+		super(username, password, rememberMe);
+		this.portalId = portalId;
+		setHost(clientHost);
+	}
+
+	/**
+	 * Instantiates a new portal username password token.
+	 *
+	 * @param clientHost the client host
+	 * @param portalId the portal id
+	 * @param username the username
+	 * @param password the password
+	 * @param host the host
+	 */
+	public PortalUsernamePasswordToken(String clientHost, String portalId, String username, String password,
+			String host) {
+		super(username, password, host);
+		this.portalId = portalId;
+		setHost(clientHost);
+	}
+
+	/**
+	 * Instantiates a new portal username password token.
+	 *
+	 * @param clientHost the client host
+	 * @param portalId the portal id
+	 * @param username the username
+	 * @param password the password
+	 */
+	public PortalUsernamePasswordToken(String clientHost, String portalId, String username, String password) {
+		super(username, password);
+		this.portalId = portalId;
+		setHost(clientHost);
+	}
+
+	/** The portal id. */
+	private String portalId; //add getter/setter
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensions.IPortalAuthenticationToken#getPortalId()
+	 */
+	public String getPortalId() {
+		return portalId;
+	}
+
+	/**
+	 * Sets the portal id.
+	 *
+	 * @param portalId the new portal id
+	 */
+	public void setPortalId(String portalId) {
+		this.portalId = portalId;
+	}
+
+	/**
+	 * Gets the authenticated by realm.
+	 *
+	 * @return the authenticated by realm
+	 */
+	public AuthenticatingRealm getAuthenticatedByRealm() {
+		return fAuthenticatingRealm;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensions.IPortalAuthenticationToken#setAuthenticatedByRealm(org.apache.shiro.realm.AuthenticatingRealm)
+	 */
+	@Override
+	public void setAuthenticatedByRealm(AuthenticatingRealm authenticatingRealm) {
+		fAuthenticatingRealm = authenticatingRealm;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensions.IPortalAuthenticationToken#setUserProtocol(org.eclipse.osbp.authentication.providerimpl.UserProtocol)
+	 */
+	@Override
+	public void setUserProtocol(UserProtocol protocol) {
+		this.protocol = protocol;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensions.IPortalAuthenticationToken#getUserProtocol()
+	 */
+	@Override
+	public UserProtocol getUserProtocol() {
+		return protocol;
+	}
+}
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensionsimpl/UserAccessAuthorizationRealm.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensionsimpl/UserAccessAuthorizationRealm.java
new file mode 100644
index 0000000..1326d0b
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensionsimpl/UserAccessAuthorizationRealm.java
@@ -0,0 +1,243 @@
+/**
+ *                                                                            
+ * 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.authentication.shiro.extensionsimpl;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.shiro.authc.AuthenticationException;
+import org.apache.shiro.authc.AuthenticationInfo;
+import org.apache.shiro.authc.AuthenticationToken;
+import org.apache.shiro.authz.AuthorizationInfo;
+import org.apache.shiro.realm.AuthorizingRealm;
+import org.apache.shiro.subject.PrincipalCollection;
+import org.eclipse.osbp.authentication.ServiceListener;
+import org.eclipse.osbp.authentication.account.dtos.UserAccountDto;
+import org.eclipse.osbp.authentication.shiro.extensions.IUserAccess;
+import org.eclipse.osbp.preferences.ProductConfiguration;
+import org.eclipse.osbp.ui.api.useraccess.AbstractPosition;
+import org.eclipse.osbp.ui.api.useraccess.IOrganizationService;
+import org.eclipse.osbp.ui.api.useraccess.IPermissionList;
+import org.eclipse.osbp.ui.api.useraccess.IPosition;
+import org.eclipse.osbp.ui.api.useraccess.ISubOrganization;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class UserAccessAuthorizationRealm.
+ * 
+ * some useful hints upon integration vaadin / shiro
+ * https://github.com/davidsowerby/krail/tree/master/src/main/java/uk/q3c
+ * https://vaadin.com/forum/#!/thread/2009907/3349290
+ * https://vaadin.com/forum#!/thread/8644145
+ * http://mikepilone.blogspot.de/2013/07/vaadin-shiro-and-push.html
+ * https://github.com/vaadin-kim/shiro-example
+ */
+public abstract class UserAccessAuthorizationRealm extends AuthorizingRealm implements IUserAccess {
+
+	/** The Constant LOGGER. */
+	private static final Logger LOGGER = LoggerFactory.getLogger(UserAccessAuthorizationRealm.class);
+
+	/** The portal id. */
+	private String portalId = "";
+
+	// private static final Logger LOGGER =
+	// LoggerFactory.getLogger(UserAccessAuthorizationRealm.class);
+
+	/**
+	 * Instantiates a new user access authorization realm.
+	 */
+	public UserAccessAuthorizationRealm() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.authentication.shiro.extensions.IUserAccess#getAllUsers
+	 * ()
+	 */
+	@Override
+	public abstract Set<String> getAllUsers();
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.authentication.shiro.extensions.IUserAccess#
+	 * getAllUsersPositions()
+	 */
+	@Override
+	public abstract Map<String, String> getAllUsersPositions();
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.authentication.shiro.extensions.IUserAccess#findUserAccount
+	 * (java.lang.String)
+	 */
+	@Override
+	public abstract UserAccountDto findUserAccount(String username);
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.authentication.shiro.extensions.IUserAccess#
+	 * findUsersForPosition(java.lang.String)
+	 */
+	@Override
+	public abstract Set<String> findUsersForPosition(String positionName);
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.authentication.shiro.extensions.IUserAccess#
+	 * findPositionForUser(java.lang.String)
+	 */
+	@Override
+	public AbstractPosition findPositionForUser(String username) {
+		UserAccountDto user = findUserAccount(username);
+		if (user != null) {
+			return findPositionForPositionName(user.getPosition());
+		}
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.authentication.shiro.extensions.IUserAccess#
+	 * findPositionForPositionName(java.lang.String)
+	 */
+	@Override
+	public AbstractPosition findPositionForPositionName(String positionName) {
+		if (positionName != null) {
+			// as positions in organization are not allowed to have spaces
+			String pos = positionName.replace(" ", "_");
+			for (IOrganizationService organizationService : ServiceListener.getOrganizationServices()) {
+				String organizationID = ProductConfiguration.getAuthenticationOrganizationId();
+				ISubOrganization organization = organizationService.getOrganization(organizationID);
+				if (organization != null) {
+					IPosition position = (organization != null) ? organization.getPosition(pos) : null;
+					if (position != null && position instanceof AbstractPosition) {
+						return (AbstractPosition) position;
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.authentication.shiro.extensions.IUserAccess#findRolesForUser
+	 * (java.lang.String)
+	 */
+	@Override
+	public Collection<String> findRolesForUser(String username) {
+		AbstractPosition position = findPositionForUser(username);
+		if (position != null) {
+			return position.getRoles();
+		}
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.authentication.shiro.extensions.IUserAccess#
+	 * findPermissionsForUser(java.lang.String)
+	 */
+	@Override
+	public IPermissionList findPermissionsForUser(String username) {
+		AbstractPosition position = findPositionForUser(username);
+		if (position != null) {
+			return position.getPermissionList();
+		}
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.authentication.shiro.extensions.IUserAccess#getPortalId
+	 * ()
+	 */
+	@Override
+	public String getPortalId() {
+		return portalId;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.authentication.shiro.extensions.IUserAccess#setPortalId
+	 * (java.lang.String)
+	 */
+	@Override
+	public void setPortalId(String portalId) {
+		this.portalId = portalId;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.apache.shiro.realm.AuthorizingRealm#doGetAuthorizationInfo(org.apache
+	 * .shiro.subject.PrincipalCollection)
+	 */
+	@Override
+	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.apache.shiro.realm.AuthenticatingRealm#doGetAuthenticationInfo(org
+	 * .apache.shiro.authc.AuthenticationToken)
+	 */
+	@Override
+	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.authentication.shiro.extensions.IUserAccess#
+	 * checkUsernameUniqueness(java.lang.String)
+	 */
+	@Override
+	public boolean checkUsernameExists(String username) {
+		return getAllUsers().contains(username);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.authentication.shiro.extensions.IUserAccess#
+	 * checkEmailUniqueness(java.lang.String)
+	 */
+	@Override
+	public boolean checkEmailExists(String email) {
+		return getAllEmails().contains(email);
+	}
+}
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/vaadin/SubjectProvider.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/vaadin/SubjectProvider.java
new file mode 100644
index 0000000..36c18c0
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/vaadin/SubjectProvider.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.authentication.vaadin;
+
+//import com.google.inject.Inject;
+import com.google.inject.Provider;
+import com.vaadin.server.VaadinSession;
+
+import org.apache.http.annotation.ThreadSafe;
+//import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.subject.Subject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Use this instead of using {@link org.apache.shiro.SecurityUtils#getSubject()} directly, to ensure that the Subject instance remains
+ * consistent for the duration of a Vaadin Session.
+ * 
+ * depends on ideas of David Sowerby
+ */
+@ThreadSafe
+public class SubjectProvider implements Provider<Subject> {
+    
+    /** The log. */
+    private static Logger log = LoggerFactory.getLogger(SubjectProvider.class);
+    
+    /** The session provider. */
+    private final VaadinSessionProvider sessionProvider;
+
+	/**
+	 * Instantiates a new subject provider.
+	 *
+	 * @param sessionProvider the session provider
+	 */
+	public SubjectProvider(VaadinSessionProvider sessionProvider) {
+        super();
+        this.sessionProvider = sessionProvider;
+    }
+
+    /* (non-Javadoc)
+     * @see com.google.inject.Provider#get()
+     */
+    @Override
+    public synchronized Subject get() {
+        Subject subject = null;
+        try {
+            VaadinSession session = sessionProvider.get();
+            subject = session.getAttribute(Subject.class);
+            if (subject == null) {
+                log.debug("VaadinSession is valid, but does not have a stored Subject, creating a new Subject");
+                subject = new Subject.Builder().buildSubject();
+                log.debug("storing Subject instance in VaadinSession");
+                session.setAttribute(Subject.class, subject);
+            }
+            return subject;
+
+        } catch (IllegalStateException ise) {
+            // this may happen in background threads which are not using a session, or during testing
+            log.debug("There is no VaadinSession, creating a new Subject");
+            subject = new Subject.Builder().buildSubject();
+            return subject;
+        }
+    }
+}
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/vaadin/VaadinSessionManager.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/vaadin/VaadinSessionManager.java
new file mode 100644
index 0000000..c2b3851
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/vaadin/VaadinSessionManager.java
@@ -0,0 +1,129 @@
+/**
+ *                                                                            
+ * 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.authentication.vaadin;
+
+//import com.google.inject.Inject;
+import com.vaadin.server.VaadinSession;
+import org.apache.shiro.session.Session;
+import org.apache.shiro.session.SessionException;
+import org.apache.shiro.session.mgt.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.UUID;
+
+// TODO: Auto-generated Javadoc
+/**
+ * depends on ideas of David Sowerby.
+ * 
+ * 
+  * A {@link SessionManager} implementation that uses the {@link VaadinSession} for the current user to persist and
+ * locate the Shiro {@link Session}. This tightly ties the Shiro security Session lifecycle to that of the
+ * VaadinSession
+ * allowing expiration, persistence, and clustering to be handled only in the Vaadin configuration rather than be
+ * duplicated in both the Vaadin and Shiro configuration.
+ *
+ * @author mpilone
+ */
+public class VaadinSessionManager implements SessionManager {
+    /**
+     * The session attribute name prefix used for storing the Shiro Session in the VaadinSession.
+     */
+    private final static String SESSION_ATTRIBUTE_PREFIX = VaadinSessionManager.class.getName() + ".session.";
+    
+    /** The log. */
+    private static Logger log = LoggerFactory.getLogger(VaadinSessionManager.class);
+    /**
+     * The session factory used to create new sessions. In the future, it may make more sense to simply implement a
+     * {@link Session} that is a lightweight wrapper on the {@link VaadinSession} rather than storing a
+     * {@link SimpleSession} in the {@link VaadinSession}. However by using a SimpleSession, the security information
+     * is
+     * contained in a neat bucket inside the overall VaadinSession.
+     */
+    private final SessionFactory sessionFactory;
+    
+    /** The session provider. */
+    private final VaadinSessionProvider sessionProvider;
+
+    /**
+     * Constructs the VaadinSessionManager.
+     *
+     * @param sessionProvider the session provider
+     */
+
+    public VaadinSessionManager(VaadinSessionProvider sessionProvider) {
+        this.sessionProvider = sessionProvider;
+        sessionFactory = new SimpleSessionFactory();
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.shiro.session.mgt.SessionManager#start(org.apache.shiro.session .mgt.SessionContext)
+     */
+    @Override
+    public Session start(SessionContext context) {
+        log.debug("starting VaadinSessionManager");
+        // Retrieve the VaadinSession for the current user.
+        VaadinSession vaadinSession = sessionProvider.get();
+
+        // Create a new security session using the session factory.
+        SimpleSession shiroSession = (SimpleSession) sessionFactory.createSession(context);
+
+        // Assign a unique ID to the session now because this session manager
+        // doesn't use a SessionDAO for persistence as it delegates to any
+        // VaadinSession configured persistence.
+        shiroSession.setId(UUID.randomUUID()
+                               .toString());
+
+        // Put the security session in the VaadinSession. We use the session's ID as
+        // part of the key just to be safe so we can double check that the security
+        // session matches when it is requested in getSession.
+        vaadinSession.setAttribute(SESSION_ATTRIBUTE_PREFIX + shiroSession.getId(), shiroSession);
+
+        return shiroSession;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.shiro.session.mgt.SessionManager#getSession(org.apache.shiro .session.mgt.SessionKey)
+     */
+    @Override
+    public Session getSession(SessionKey key) throws SessionException {
+
+        // Retrieve the VaadinSession for the current user.
+        VaadinSession vaadinSession = sessionProvider.get();
+
+        String attributeName = SESSION_ATTRIBUTE_PREFIX + key.getSessionId();
+
+        if (vaadinSession != null) {
+            // If we have a valid VaadinSession, try to get the Shiro Session.
+            SimpleSession shiroSession = (SimpleSession) vaadinSession.getAttribute(attributeName);
+
+            if (shiroSession != null) {
+
+                // Make sure the Shiro Session hasn't been stopped or expired (i.e. the
+                // user logged out).
+                if (shiroSession.isValid()) {
+                    return shiroSession;
+                } else {
+                    // This is an invalid or expired session so we'll clean it up.
+                    vaadinSession.setAttribute(attributeName, null);
+                }
+            }
+        }
+
+        return null;
+    }
+}
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/vaadin/VaadinSessionProvider.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/vaadin/VaadinSessionProvider.java
new file mode 100644
index 0000000..5991614
--- /dev/null
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/vaadin/VaadinSessionProvider.java
@@ -0,0 +1,46 @@
+/**
+ *                                                                            
+ * 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.authentication.vaadin;
+
+import com.vaadin.server.VaadinSession;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+// TODO: Auto-generated Javadoc
+/**
+ * depends on ideas of David Sowerby.
+ */
+public class VaadinSessionProvider {
+    
+    /** The log. */
+    private static Logger log = LoggerFactory.getLogger(VaadinSessionProvider.class);
+
+    /**
+     * Gets the.
+     *
+     * @return the vaadin session
+     */
+    public VaadinSession get() {
+        VaadinSession session = VaadinSession.getCurrent();
+
+        // This may happen in background threads, or testing
+        if (session == null) {
+            String msg = "Vaadin session not present.  If you are testing, use a Mock for this provider";
+            log.warn(msg);
+            throw new IllegalStateException(msg);
+        }
+
+        return session;
+    }
+
+}
diff --git a/org.eclipse.osbp.user/.project b/org.eclipse.osbp.user/.project
new file mode 100644
index 0000000..a97848c
--- /dev/null
+++ b/org.eclipse.osbp.user/.project
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.user</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ds.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.babel.editor.rbeBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.babel.editor.rbeNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.user/LICENSE.txt b/org.eclipse.osbp.user/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.user/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.user/META-INF/MANIFEST.MF b/org.eclipse.osbp.user/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..55758c1
--- /dev/null
+++ b/org.eclipse.osbp.user/META-INF/MANIFEST.MF
@@ -0,0 +1,27 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.user
+Bundle-SymbolicName: org.eclipse.osbp.user
+Bundle-Vendor: Eclipse OSBP
+Bundle-Version: 0.9.0.qualifier
+Bundle-Activator: org.eclipse.osbp.user.Activator
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.e4.core.di.extensions,
+ com.vaadin.server;bundle-version="7.5.7",
+ javax.annotation;bundle-version="[1.1.0,1.2.0)",
+ org.eclipse.osbp.dsl.dto.lib;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.utils.blob;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.authentication;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osgi.services;bundle-version="3.4.0",
+ org.eclipse.e4.ui.model.workbench,
+ org.eclipse.e4.core.contexts;bundle-version="1.3.100",
+ org.eclipse.e4.core.services
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Import-Package: org.eclipse.osbp.ui.api.customfields;version="0.9.0",
+ org.eclipse.osbp.ui.api.user;version="0.9.0",
+ org.eclipse.osbp.ui.api.useraccess;version="0.9.0",
+ org.slf4j
+Export-Package: org.eclipse.osbp.user;version="0.9.0"
+Service-Component: OSGI-INF/*.xml
+
diff --git a/org.eclipse.osbp.user/OSGI-INF/org.eclipse.osbp.user.UserBinder.xml b/org.eclipse.osbp.user/OSGI-INF/org.eclipse.osbp.user.UserBinder.xml
new file mode 100644
index 0000000..cd248d0
--- /dev/null
+++ b/org.eclipse.osbp.user/OSGI-INF/org.eclipse.osbp.user.UserBinder.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.user.UserBinder">
+   <reference bind="bindUserAccessService" cardinality="1..1" interface="org.eclipse.osbp.ui.api.useraccess.IUserAccessService" name="UserAccessService" policy="static" unbind="unbindUserAccessService"/>
+   <implementation class="org.eclipse.osbp.user.UserBinder"/>
+</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.user/about.html b/org.eclipse.osbp.user/about.html
new file mode 100644
index 0000000..64c0598
--- /dev/null
+++ b/org.eclipse.osbp.user/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.user/about.ini b/org.eclipse.osbp.user/about.ini
new file mode 100644
index 0000000..7df671f
--- /dev/null
+++ b/org.eclipse.osbp.user/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.user/about.mappings b/org.eclipse.osbp.user/about.mappings
new file mode 100644
index 0000000..4511a0a
--- /dev/null
+++ b/org.eclipse.osbp.user/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.user/about.properties b/org.eclipse.osbp.user/about.properties
new file mode 100644
index 0000000..94644d4
--- /dev/null
+++ b/org.eclipse.osbp.user/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.user
+
+################ 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.user/build.properties b/org.eclipse.osbp.user/build.properties
new file mode 100644
index 0000000..d7586b8
--- /dev/null
+++ b/org.eclipse.osbp.user/build.properties
@@ -0,0 +1,12 @@
+output.. = target/classes/
+bin.includes = about.properties,  about.mappings,  about.ini,  about.html,  META-INF/,\
+               .,\
+               .settings/,\
+               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			   
+source.. = src/
diff --git a/org.eclipse.osbp.user/epl-v10.html b/org.eclipse.osbp.user/epl-v10.html
new file mode 100644
index 0000000..b398acc
--- /dev/null
+++ b/org.eclipse.osbp.user/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.user/license.html b/org.eclipse.osbp.user/license.html
new file mode 100644
index 0000000..6e579a5
--- /dev/null
+++ b/org.eclipse.osbp.user/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.user/pom.xml b/org.eclipse.osbp.user/pom.xml
new file mode 100644
index 0000000..89b8ba9
--- /dev/null
+++ b/org.eclipse.osbp.user/pom.xml
@@ -0,0 +1,31 @@
+<?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.authentication</groupId>
+		<artifactId>org.eclipse.osbp.authentication.aggregator</artifactId>
+		<version>0.9.0-SNAPSHOT</version>
+		<relativePath>..</relativePath>
+	</parent>
+	<artifactId>org.eclipse.osbp.user</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<dependencies>
+		<dependency>
+			<groupId>org.eclipse.osbp.preferences</groupId>
+			<artifactId>org.eclipse.osbp.preferences</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+	</dependencies>
+
+</project>
diff --git a/org.eclipse.osbp.user/src/org/eclipse/osbp/user/Activator.java b/org.eclipse.osbp.user/src/org/eclipse/osbp/user/Activator.java
new file mode 100644
index 0000000..643b91b
--- /dev/null
+++ b/org.eclipse.osbp.user/src/org/eclipse/osbp/user/Activator.java
@@ -0,0 +1,52 @@
+/**
+ *                                                                            
+ * 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.user;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class Activator.
+ */
+public class Activator implements BundleActivator {
+
+	/** The context. */
+	private static BundleContext context;
+
+	/**
+	 * Gets the context.
+	 *
+	 * @return the context
+	 */
+	static BundleContext getContext() {
+		return context;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext bundleContext) throws Exception {
+		Activator.context = bundleContext;
+	}
+
+	/*
+	 * (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.user/src/org/eclipse/osbp/user/ApplicationLocalization.java b/org.eclipse.osbp.user/src/org/eclipse/osbp/user/ApplicationLocalization.java
new file mode 100644
index 0000000..d01db7d
--- /dev/null
+++ b/org.eclipse.osbp.user/src/org/eclipse/osbp/user/ApplicationLocalization.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.user;
+
+import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.e4.ui.model.application.ui.MElementContainer;
+import org.eclipse.e4.ui.model.application.ui.MLocalizable;
+import org.eclipse.e4.ui.model.application.ui.MUIElement;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+
+public class ApplicationLocalization {
+	/**
+	 * Updates the default locale for all children of the given E4 window.
+	 *
+	 * @param app the app
+	 */
+	public static void updateLocalization(MApplication app) {
+		traverseLocalizationChildren(app);
+	}
+
+	// update localization for all children of MWindow
+	protected static void traverseLocalizationChildren(MElementContainer<?> parent) {
+		for(MUIElement element:parent.getChildren()) {
+			if(element.isToBeRendered()) {
+				if(element instanceof MLocalizable) {
+					((MLocalizable)element).updateLocalization();
+				}
+				if(element instanceof MElementContainer<?>) {
+					traverseLocalizationChildren((MElementContainer<?>) element);
+				}
+				if(element instanceof MPart) {
+					if(((MPart)element).getToolbar() != null) {
+						((MPart)element).getToolbar().updateLocalization();
+						traverseLocalizationChildren(((MPart)element).getToolbar());
+					}
+				}
+			}
+		}
+	}
+}
diff --git a/org.eclipse.osbp.user/src/org/eclipse/osbp/user/User.java b/org.eclipse.osbp.user/src/org/eclipse/osbp/user/User.java
new file mode 100644
index 0000000..522467a
--- /dev/null
+++ b/org.eclipse.osbp.user/src/org/eclipse/osbp/user/User.java
@@ -0,0 +1,342 @@
+/**
+ *                                                                            
+ * 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.user;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Locale;
+
+import org.eclipse.e4.core.di.extensions.EventUtils;
+import org.eclipse.e4.core.services.translation.TranslationService;
+import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.osbp.ui.api.user.IUser;
+import org.eclipse.osbp.ui.api.useraccess.IUserAccessService;
+import org.eclipse.osbp.utils.blob.component.BlobUploadComponent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The Class User represents the subject currently signed in and carries his
+ * data. User can be injected. It conforms the vaaclipse AuthenticationProvider
+ * mechanism.
+ */
+@SuppressWarnings("restriction")
+public class User extends Hashtable<String, Object> implements IUser {
+
+	/** The application. */
+	private MApplication application;
+	/** The Constant serialVersionUID. */
+	private static final long serialVersionUID = 1L;
+
+	/** The id. */
+	private String id;
+
+	/** The user name. */
+	private String userName;
+
+	/** The position. */
+	private String position;
+
+	/** The perspective. */
+	private String perspective;
+
+	/** The extra password. */
+	private String extraPassword;
+
+	/** The supervisor. */
+	private boolean supervisor;
+
+	/** The email. */
+	private String email;
+
+	/** The roles. */
+	private Collection<String> roles;
+
+	/** The locale. */
+	private Locale locale;
+
+	/** The layouting strategy. */
+	private String layoutingStrategy;
+
+	/** The focusing strategy. */
+	private String focusingStrategy;
+
+	/** The theme. */
+	private String theme;
+
+	/** The print service. */
+	private String printService;
+
+	/** The Constant LOGGER. */
+	private static final Logger LOGGER = LoggerFactory.getLogger(User.class);
+
+	/** The blob upload component. */
+	private BlobUploadComponent blobUploadComponent;
+
+	/** The listeners. */
+	private List<UserLocaleListener> listeners;
+
+	/**
+	 * Instantiates a new user.
+	 *
+	 * @param userName
+	 *            the user name
+	 */
+	/**
+	 * @param userName
+	 *            the user name
+	 */
+	public User(String userName) {
+		super();
+		this.userName = userName;
+		if (UserBinder.getUserAccessService() != null) {
+			blobUploadComponent = new BlobUploadComponent();
+			blobUploadComponent.setValue(UserBinder.getUserAccessService().getProfileimageId());
+			position = UserBinder.getUserAccessService().getPositionName();
+			perspective = UserBinder.getUserAccessService().getPerspective();
+			extraPassword = UserBinder.getUserAccessService().getExtraPassword();
+			supervisor = UserBinder.getUserAccessService().isSupervisor();
+			email = UserBinder.getUserAccessService().getEmail();
+			roles = UserBinder.getUserAccessService().getRoles();
+			id = UserBinder.getUserAccessService().getId();
+			layoutingStrategy = UserBinder.getUserAccessService().getLayoutingStrategy();
+			focusingStrategy = UserBinder.getUserAccessService().getFocusingStrategy();
+			theme = UserBinder.getUserAccessService().getTheme();
+			printService = UserBinder.getUserAccessService().getPrintService();
+			if (UserBinder.getUserAccessService().getLocaleTag() != null) {
+				locale = Locale.forLanguageTag(UserBinder.getUserAccessService().getLocaleTag());
+			} else {
+				locale = Locale.forLanguageTag("en-US");
+			}
+		} else {
+			locale = Locale.forLanguageTag("en-US");
+		}
+		put(EventUtils.DATA, this);
+		put(userClass, IUser.class);
+		LOGGER.debug("User is initialized");
+	}
+
+	/**
+	 * Gets the layouting strategy.
+	 *
+	 * @return the layouting strategy
+	 */
+	public String getLayoutingStrategy() {
+		return layoutingStrategy;
+	}
+
+	/**
+	 * Gets the focusing strategy.
+	 *
+	 * @return the focusing strategy
+	 */
+	public String getFocusingStrategy() {
+		return focusingStrategy;
+	}
+
+	/**
+	 * Gets the theme.
+	 *
+	 * @return the theme
+	 */
+	public String getTheme() {
+		return theme;
+	}
+
+	/**
+	 * Gets the print service.
+	 *
+	 * @return the print service
+	 */
+	public String getPrintService() {
+		return printService;
+	}
+
+	/**
+	 * Sets the print service.
+	 *
+	 * @param printService
+	 *            the new print service
+	 */
+	public void setPrintService(String printService) {
+		this.printService = printService;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osbp.vaaclipse.publicapi.authentication.IUser#getUserName()
+	 */
+	public String getUserName() {
+		return userName;
+	}
+
+	/**
+	 * Sets the user name.
+	 *
+	 * @param userName
+	 *            the new user name
+	 */
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	/**
+	 * Gets the id.
+	 *
+	 * @return the id
+	 */
+	public String getId() {
+		return id;
+	}
+
+	/**
+	 * Gets the position.
+	 *
+	 * @return the position
+	 */
+	public String getPosition() {
+		return position;
+	}
+
+	/**
+	 * Gets the extra password.
+	 *
+	 * @return the extra password
+	 */
+	public String getExtraPassword() {
+		return extraPassword;
+	}
+
+	/**
+	 * Gets the supervisor.
+	 *
+	 * @return the supervisor
+	 */
+	public boolean isSupervisor() {
+		return supervisor;
+	}
+
+	/**
+	 * Gets the perspective id.
+	 *
+	 * @return the perspective id
+	 */
+	public String getPerspective() {
+		return perspective;
+	}
+
+	/**
+	 * Gets the email.
+	 *
+	 * @return the email
+	 */
+	public String getEmail() {
+		return email;
+	}
+
+	/**
+	 * Gets the roles.
+	 *
+	 * @return the roles
+	 */
+	public Collection<String> getRoles() {
+		return roles;
+	}
+
+	/**
+	 * Gets the locale.
+	 *
+	 * @return the locale
+	 */
+	public Locale getLocale() {
+		return locale;
+	}
+
+	/**
+	 * Sets the locale.
+	 *
+	 * @param locale
+	 *            the new locale
+	 */
+	public void setLocale(Locale locale) {
+		this.locale = locale;
+		// force e4 application to switch locale and update localization
+		if (application != null) {
+			application.getContext().set(TranslationService.LOCALE, locale.toLanguageTag());
+			ApplicationLocalization.updateLocalization(application);
+		}
+		notifyUserLocaleChanged(locale);
+	}
+
+	/**
+	 * Gets the blob upload component.
+	 *
+	 * @return the blob upload component
+	 */
+	public BlobUploadComponent getBlobUploadComponent() {
+		return blobUploadComponent;
+	}
+
+	/**
+	 * Gets the user access service.
+	 *
+	 * @return the user access service
+	 */
+	public IUserAccessService getUserAccessService() {
+		return UserBinder.getUserAccessService();
+	}
+
+	@Override
+	public void addUserLocaleListener(UserLocaleListener listener) {
+		if (listeners == null) {
+			listeners = new ArrayList<User.UserLocaleListener>();
+		}
+
+		if (!listeners.contains(listener)) {
+			listeners.add(listener);
+			if (locale != null) {
+				listener.localeChanged(locale);
+			}
+		}
+	}
+
+	@Override
+	public void removeUserLocaleListener(UserLocaleListener listener) {
+		if (listeners == null) {
+			return;
+		}
+
+		listeners.remove(listener);
+	}
+
+	@Override
+	public void notifyUserLocaleChanged(Locale locale) {
+		if (listeners == null) {
+			return;
+		}
+
+		for (UserLocaleListener listener : listeners.toArray(new UserLocaleListener[listeners.size()])) {
+			listener.localeChanged(locale);
+		}
+	}
+
+	@Override
+	public void setApplication(MApplication application) {
+		this.application = application;
+		setLocale(locale);
+	}
+}
diff --git a/org.eclipse.osbp.user/src/org/eclipse/osbp/user/UserBinder.java b/org.eclipse.osbp.user/src/org/eclipse/osbp/user/UserBinder.java
new file mode 100644
index 0000000..d766a59
--- /dev/null
+++ b/org.eclipse.osbp.user/src/org/eclipse/osbp/user/UserBinder.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.user;
+
+import org.eclipse.osbp.ui.api.useraccess.IUserAccessService;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class UserBinder.
+ */
+@Component
+public class UserBinder {
+	
+	/** The Constant LOGGER. */
+	private static final Logger LOGGER = LoggerFactory.getLogger("servicebinder");
+	
+	/** The user access service. */
+	private static IUserAccessService userAccessService;
+
+	/**
+	 * Gets the user access service.
+	 *
+	 * @return the user access service
+	 */
+	public static IUserAccessService getUserAccessService() {
+		return userAccessService;
+	}
+	
+	/**
+	 * Bind user access service.
+	 *
+	 * @param userAccessService the user access service
+	 */
+	@Reference(cardinality = ReferenceCardinality.MANDATORY, policy = ReferencePolicy.STATIC)
+	public synchronized void bindUserAccessService(final IUserAccessService userAccessService) {
+		UserBinder.userAccessService = userAccessService;
+		LOGGER.debug("UserMenuAuthenticationService bound");
+	}
+
+	/**
+	 * Unbind user access service.
+	 *
+	 * @param userAccessService the user access service
+	 */
+	public synchronized void unbindUserAccessService(final IUserAccessService userAccessService) {
+		UserBinder.userAccessService = null;
+		LOGGER.debug("UserMenuAuthenticationService unbound");
+	}
+
+}
diff --git a/org.eclipse.osbp.user/src/org/eclipse/osbp/user/package-info.java b/org.eclipse.osbp.user/src/org/eclipse/osbp/user/package-info.java
new file mode 100644
index 0000000..c2e0695
--- /dev/null
+++ b/org.eclipse.osbp.user/src/org/eclipse/osbp/user/package-info.java
@@ -0,0 +1,16 @@
+/**
+ *                                                                            
+ * 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.user;
+
+
+
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..7c26d99
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,91 @@
+<?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.releng.maven</groupId>
+		<artifactId>org.eclipse.osbp.releng.maven.parent.tycho</artifactId>
+		<version>0.9.0-SNAPSHOT</version>
+		<relativePath />
+	</parent>
+
+	<groupId>org.eclipse.osbp.authentication</groupId>
+	<artifactId>org.eclipse.osbp.authentication.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.authentication</module>
+		<module>org.eclipse.osbp.user</module>
+		<module>org.eclipse.osbp.authentication.feature</module>
+	</modules>
+
+	<build>
+		<pluginManagement>
+			<plugins>
+				<plugin>
+					<groupId>org.eclipse.tycho</groupId>
+					<artifactId>target-platform-configuration</artifactId>
+					<version>${tycho-version}</version>
+					<configuration>
+						<resolver>p2</resolver>
+						<pomDependencies>consider</pomDependencies>
+						<environments>
+							<environment>
+								<os>win32</os>
+								<ws>win32</ws>
+								<arch>x86_64</arch>
+							</environment>
+							<environment>
+								<os>linux</os>
+								<ws>gtk</ws>
+								<arch>x86</arch>
+							</environment>
+							<environment>
+								<os>linux</os>
+								<ws>gtk</ws>
+								<arch>x86_64</arch>
+							</environment>
+							<environment>
+								<os>macosx</os>
+								<ws>cocoa</ws>
+								<arch>x86_64</arch>
+							</environment>
+						</environments>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+	</build>
+</project>