catch up with dev
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b9f0a46
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,37 @@
+**/bin/
+**/target/
+**._trace
+**git.properties
+**/target/
+**/.metadata/
+
+**/emf-gen/**/.gitignore
+**/src-gen/**/.gitignore
+**/git.properties
+**/*.java._trace
+**/*.log
+**/*.log.properties
+
+**/bin/
+**/build/
+*.class
+*.ctrl
+**/Debug/
+.DS_Store
+*.ear
+*.war
+
+**/*.actionbin
+**/*.blipbin
+**/*.chartbin
+**/*.cubebin
+**/*.datatypebin
+**/*.dtobin
+**/*.entitybin
+**/*.servicebin
+**/*.tablebin
+**/*.uibin
+**/*.uisemanticbin
+**/*.xtendbin
+**/*.xtextbin
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/jenkins.build.config.xml b/jenkins.build.config.xml
index bcaceb9..0d22506 100644
--- a/jenkins.build.config.xml
+++ b/jenkins.build.config.xml
@@ -17,6 +17,6 @@
 	<!-- DO NOT EDIT BELOW THIS LINE -->
         <jenkins.build.dependencies>
                 <jenkins.build.dependency>org.eclipse.osbp.dsl</jenkins.build.dependency>
-                <jenkins.build.dependency>org.eclipse.osbp.ecview.core</jenkins.build.dependency>
+                <jenkins.build.dependency>org.eclipse.osbp.runtime</jenkins.build.dependency>
         </jenkins.build.dependencies>
 </jenkins>
diff --git a/mavenizing_started b/mavenizing_started
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/mavenizing_started
diff --git a/org.eclipse.osbp.ui.api.feature/.gitignore b/org.eclipse.osbp.ui.api.feature/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.ui.api.feature/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.ui.api.feature/.project b/org.eclipse.osbp.ui.api.feature/.project
index 78ec128..a60e8d8 100644
--- a/org.eclipse.osbp.ui.api.feature/.project
+++ b/org.eclipse.osbp.ui.api.feature/.project
@@ -16,12 +16,12 @@
 			</arguments>
 		</buildCommand>
 		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
 			<arguments>
 			</arguments>
 		</buildCommand>
 		<buildCommand>
-			<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
 			<arguments>
 			</arguments>
 		</buildCommand>
diff --git a/org.eclipse.osbp.ui.api.feature/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.ui.api.feature/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.ui.api.feature/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.ui.api.feature/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.ui.api.feature/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.ui.api.feature/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.ui.api.feature/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.ui.api.feature/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.ui.api.feature/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.ui.api.feature/feature.xml b/org.eclipse.osbp.ui.api.feature/feature.xml
index 5866cf6..6740bce 100644
--- a/org.eclipse.osbp.ui.api.feature/feature.xml
+++ b/org.eclipse.osbp.ui.api.feature/feature.xml
@@ -14,7 +14,8 @@
         id="org.eclipse.osbp.ui.api.feature"
         label="%featureName"
         version="0.9.0.qualifier"
-        provider-name="%providerName">
+        provider-name="%providerName"
+		plugin="org.eclipse.osbp.ui.api">
         
     <description>
         %description
diff --git a/org.eclipse.osbp.ui.api/.classpath b/org.eclipse.osbp.ui.api/.classpath
new file mode 100644
index 0000000..cf36b56
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src/"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.ui.api/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.ui.api/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.ui.api/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.ui.api/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.osbp.ui.api/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.ui.api/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.ui.api/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.ui.api/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.ui.api/META-INF/MANIFEST.MF b/org.eclipse.osbp.ui.api/META-INF/MANIFEST.MF
index fcfcbfe..c47c746 100644
--- a/org.eclipse.osbp.ui.api/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.ui.api/META-INF/MANIFEST.MF
@@ -4,17 +4,23 @@
 Bundle-SymbolicName: org.eclipse.osbp.ui.api
 Bundle-Version: 0.9.0.qualifier
 Require-Bundle: org.eclipse.core.runtime,
- com.vaadin.server;bundle-version="7.5.7"
+ com.vaadin.server;bundle-version="7.7.6",
+ org.eclipse.osbp.runtime.common,
+ org.eclipse.e4.ui.model.workbench,
+ org.eclipse.e4.core.contexts
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.osbp.ui.api.complexdatacontainer;version="0.9.0",
  org.eclipse.osbp.ui.api.contextfunction;version="0.9.0";uses:="com.vaadin.ui",
  org.eclipse.osbp.ui.api.customfields;version="0.9.0";uses:="com.vaadin.server,org.eclipse.e4.core.services.events,com.vaadin.ui",
  org.eclipse.osbp.ui.api.datamart;version="0.9.0",
+ org.eclipse.osbp.ui.api.e4;version="0.9.0",
  org.eclipse.osbp.ui.api.functionlibrary;version="0.9.0";uses:="org.eclipse.osbp.ui.api.statemachine",
  org.eclipse.osbp.ui.api.layout;version="0.9.0",
+ org.eclipse.osbp.ui.api.menu;version="0.9.0",
  org.eclipse.osbp.ui.api.message;version="0.9.0",
  org.eclipse.osbp.ui.api.metadata;version="0.9.0";uses:="org.eclipse.emf.ecore,org.eclipse.osbp.dsl.xtext.types.bundles",
  org.eclipse.osbp.ui.api.organization;version="0.9.0",
+ org.eclipse.osbp.ui.api.perspective;version="0.9.0",
  org.eclipse.osbp.ui.api.pos;version="0.9.0";uses:="org.eclipse.osbp.ui.api.statemachine",
  org.eclipse.osbp.ui.api.report;version="0.9.0",
  org.eclipse.osbp.ui.api.statemachine;version="0.9.0";
@@ -31,20 +37,23 @@
  org.eclipse.osbp.ui.api.useraccess;version="0.9.0";uses:="org.eclipse.osbp.dsl.common.datatypes,org.eclipse.osbp.ui.api.complexdatacontainer,org.eclipse.osbp.ui.api.userfilter",
  org.eclipse.osbp.ui.api.userfilter;version="0.9.0",
  org.eclipse.osbp.ui.initialization;version="0.9.0"
-Import-Package: javax.validation;version="1.1.0.Final",
+Import-Package: com.vaadin.ui,
+ javax.validation;version="1.1.0.Final",
  javax.validation.constraints;version="1.1.0.Final",
  mondrian.rolap;version="3.5.0",
  org.eclipse.e4.core.services.events,
  org.eclipse.e4.ui.model.application,
+ org.eclipse.e4.ui.model.application.commands,
+ org.eclipse.e4.ui.model.application.ui,
  org.eclipse.emf.ecore,
  org.eclipse.osbp.dsl.common.datatypes;version="0.9.0",
- org.eclipse.osbp.dsl.dto.lib.services;version="0.9.0",
+ org.eclipse.osbp.dsl.semantic.common.types;version="0.9.0",
+ org.eclipse.osbp.dsl.semantic.entity;version="0.9.0",
  org.eclipse.osbp.dsl.xtext.types.bundles;version="0.9.0",
- org.eclipse.osbp.ecview.core.common.context;version="0.9.0",
- org.eclipse.xtext.common.types,
  org.eclipse.xtext.resource,
  org.eclipse.xtext.util,
  org.joda.time;version="2.7.0",
- org.slf4j;resolution:=optional
+ org.slf4j;resolution:=optional,
+ org.vaadin.hene.popupbutton;version="2.5.0"
 Bundle-ClassPath: .
 Bundle-Vendor: Eclipse OSBP
diff --git a/org.eclipse.osbp.ui.api/build.properties b/org.eclipse.osbp.ui.api/build.properties
index 5364007..f68af27 100644
--- a/org.eclipse.osbp.ui.api/build.properties
+++ b/org.eclipse.osbp.ui.api/build.properties
@@ -1,8 +1,18 @@
 source.. = src/
 output.. = target/classes/
-bin.includes = about.properties,  about.mappings,  about.ini,  about.html,  META-INF/,\
+bin.includes = about.properties,\
+               about.mappings,\
+               about.ini,\
+               about.html,\
+               META-INF/,\
                .,\
                license.html,\
-               LICENSE.txt
-src.includes = about.properties,  about.mappings,  about.ini,  about.html,  LICENSE.txt,\
-               license.html
+               LICENSE.txt,\
+               epl-v10.html
+src.includes = about.properties,\
+               about.mappings,\
+               about.ini,\
+               about.html,\
+               LICENSE.txt,\
+               license.html,\
+               epl-v10.html
diff --git a/org.eclipse.osbp.ui.api/pom.xml b/org.eclipse.osbp.ui.api/pom.xml
index 2aaa8fd..8184207 100644
--- a/org.eclipse.osbp.ui.api/pom.xml
+++ b/org.eclipse.osbp.ui.api/pom.xml
@@ -29,7 +29,7 @@
         <dependency>
             <groupId>org.eclipse.osbp.dependencies</groupId>
             <artifactId>org.eclipse.osbp.dependencies.feature.vaadin</artifactId>
-            <version>7.5.7</version>
+            <version>${vaadin.version}</version>
             <type>eclipse-feature</type>
         </dependency>
     </dependencies>
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/contextfunction/ICommandsProvider.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/contextfunction/ICommandsProvider.java
new file mode 100644
index 0000000..feb3e76
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/contextfunction/ICommandsProvider.java
@@ -0,0 +1,10 @@
+package org.eclipse.osbp.ui.api.contextfunction;
+
+import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.e4.ui.model.application.commands.MCommand;
+import org.eclipse.e4.ui.model.application.ui.MUIElement;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+
+public interface ICommandsProvider {
+	void init(MApplication application);
+}
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/contextfunction/IUserMenuProvider.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/contextfunction/IUserMenuProvider.java
index 04eadf9..524dec5 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/contextfunction/IUserMenuProvider.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/contextfunction/IUserMenuProvider.java
@@ -12,8 +12,10 @@
  */
 package org.eclipse.osbp.ui.api.contextfunction;
 
+import org.vaadin.hene.popupbutton.PopupButton;
+
 import com.vaadin.ui.Component;
 
 public interface IUserMenuProvider {
-	Component getMenu();
+	Component getMenu(PopupButton popup);
 }
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/customfields/IBlobConverter.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/customfields/IBlobConverter.java
new file mode 100644
index 0000000..26cd2e4
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/customfields/IBlobConverter.java
@@ -0,0 +1,14 @@
+package org.eclipse.osbp.ui.api.customfields;
+
+import com.vaadin.server.StreamResource;
+
+public interface IBlobConverter {
+	void setInput(String input);
+	String getInput();
+	void setOutput(StreamResource resource);
+	StreamResource getOutput();
+	void setBlobService(IBlobService blobService);
+	IBlobService getBlobService();
+	void setResolution(int resolutionId);
+	int getResolution();
+}
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/customfields/IBlobEvent.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/customfields/IBlobEvent.java
new file mode 100644
index 0000000..82e6611
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/customfields/IBlobEvent.java
@@ -0,0 +1,34 @@
+package org.eclipse.osbp.ui.api.customfields;
+
+public interface IBlobEvent {
+	final String STARTED_BLOB_UPLOAD = "startedblobupload"; //$NON-NLS-1$
+	final String STOPPED_BLOB_UPLOAD = "stoppedblobupload"; //$NON-NLS-1$
+	/**
+	 * Provides a boolean that indicates if a blob was successfully uploaded and
+	 * persisted into the database.
+	 * 
+	 * @return boolean indicating a successfully uploaded and persisted blob
+	 *         into the database
+	 */
+	boolean isUploadSuccessful();
+	/**
+	 * Provides the uuid of the successfully uploaded and persisted blob into
+	 * the database or {@code null} otherwise.
+	 * 
+	 * @return uuid of the successfully uploaded and persisted blob into the
+	 *         database or {@code null} otherwise.
+	 */
+	String getUploadedBlobId();
+	/**
+	 * Provides the error message that indicates the reason of an unsuccessfully
+	 * attempt of uploading and persisting a blob into the database.
+	 * 
+	 * @return error message indicating why an uploading and persisting of a
+	 *         blob into the database was unsuccessfully.
+	 */
+	String getErrorMessage();
+	/**
+	 * @return the just uploaded filename to check for the right component when showing image
+	 */
+	String getUploadedFile();
+}
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/customfields/IBlobService.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/customfields/IBlobService.java
new file mode 100644
index 0000000..6527f6e
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/customfields/IBlobService.java
@@ -0,0 +1,198 @@
+/*
+ *                                                                            
+ *  Copyright (c) 2011 - 2017 - Loetz GmbH & Co KG, 69115 Heidelberg, Germany 
+ *                                                                            
+ *  All rights reserved. This program and the accompanying materials           
+ *  are made available under the terms of the Eclipse Public License v1.0       
+ *  which accompanies this distribution, and is available at                  
+ *  http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ *  Initial contribution:                                                      
+ *     Loetz GmbH & Co. KG                              
+ * 
+ */
+package org.eclipse.osbp.ui.api.customfields;
+
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
+import com.vaadin.server.StreamResource;
+
+public interface IBlobService {
+	
+	/**
+	 * Adds the blob upload listener.
+	 *
+	 * @param listener the listener
+	 */
+	void addBlobUploadListener(IBlobUploadEventListener listener);
+	
+	/**
+	 * Removes the blob upload listener.
+	 *
+	 * @param listener the listener
+	 */
+	void removeBlobUploadListener(IBlobUploadEventListener listener);
+	/**
+	 * Creates for the specified image blob data by {@link InputStream} the
+	 * base64 encoded image representation and a resized copy for each of the
+	 * predefined resolutions and persist them in to database via JPA.
+	 * 
+	 * If no blob uuid exists ({@code uploadedBlobUuid = null}, when a new image
+	 * is uploaded, a new entry with a new uuid is created.
+	 * 
+	 * Once the persistence of the blob data is successfully realized a positive
+	 * {@link BlobEvent} (with the flag {@code uploadSuccessful = true})
+	 * is created and all the {@link IBlobUploadEventListener} are notified.
+	 * 
+	 * But if the persistence of the blob data goes unsuccessful a negative
+	 * {@link BlobEvent} (with the flag {@code uploadSuccessful = false}
+	 * and a filled {@code errorMessage} is created and all the
+	 * {@link IBlobUploadEventListener} are notified.
+	 *
+	 * @param stream the stream
+	 * @param mimeType the mime type
+	 * @return the list
+	 * @throws IOException Signals that an I/O exception has occurred.
+	 */
+	List<Object> createBlobMappingBlobs(InputStream stream, int mimeType) throws IOException;
+	/**
+	 * Creates for the specified image blob data by {@link InputStream} the
+	 * base64 encoded image representation and a resized copy for each of the
+	 * predefined resolutions and persist them in to database via JPA.
+	 * 
+	 * If no blob uuid exists ({@code uploadedBlobUuid = null}, when a new image
+	 * is uploaded, a new entry with a new uuid is created.
+	 * 
+	 * Once the persistence of the blob data is successfully realized a positive
+	 * {@link BlobEvent} (with the flag {@code uploadSuccessful = true})
+	 * is created and all the {@link IBlobUploadEventListener} are notified.
+	 * 
+	 * But if the persistence of the blob data goes unsuccessful a negative
+	 * {@link BlobEvent} (with the flag {@code uploadSuccessful = false}
+	 * and a filled {@code errorMessage} is created and all the
+	 * {@link IBlobUploadEventListener} are notified.
+	 *
+	 * @param stream the stream
+	 * @param mimeType the mime type
+	 * @return the list
+	 * @throws IOException Signals that an I/O exception has occurred.
+	 */
+	List<Object> createBlobMappingBlobs(InputStream stream, String mimeType) throws IOException;
+	/**
+	 * Creates for the specified image blob data by;@link InputStream} the
+	 * base64 encoded image representation and a resized copy for each of the
+	 * predefined resolutions and persist them in to database via JPA.
+	 * 
+	 * Returns the UUID of the created blob mapping created.
+	 * 
+	 * If the persistence of the blob data fail, returns null.
+	 * 
+	 * @param stream
+	 * @param fileName
+	 * @param mimeType
+	 * @param blobAPI
+	 */
+	String createBlobMapping(InputStream stream, String fileName, String mimeType);
+	/**
+	 * Checks if the mime type by the specified mime type id;@code mimeTypeId}
+	 * corresponds to an image.
+	 * 
+	 * @param mimeTypeId
+	 * @return boolean indicating if it is an image
+	 */
+	boolean isImage(int mimeTypeId);
+	/**
+	 * Checks if the mime type by the specified mime type id;@code mimeTypeId}
+	 * corresponds to a pdf file.
+	 * 
+	 * @param mimeTypeId
+	 * @return boolean indicating if it is a pdf file
+	 */
+	boolean isPdf(int mimeTypeId);
+	/**
+	 * Checks if the mime type by the specified mime type id;@code mimeTypeId}
+	 * corresponds to a word file.
+	 * 
+	 * @param mimeTypeId
+	 * @return boolean indicating if it is a word file
+	 */
+	boolean isWord(int mimeTypeId);
+	/**
+	 * Checks if the mime type by the specified mime type id;@code mimeTypeId}
+	 * corresponds to a excel file.
+	 * 
+	 * @param mimeTypeId
+	 * @return boolean indicating if it is a excel file
+	 */
+	boolean isExcel(int mimeTypeId);
+	/**
+	 * Checks if the mime type corresponds to an image.
+	 * 
+	 * @param mimeTypeId
+	 * @return boolean indicating if it is an image
+	 */
+	boolean isImage(String mimeType);
+	
+	/**
+	 * Creates a base64 {@link String} as the representation of a specific blob
+	 * in a specific resolution.
+	 * 
+	 * In case of an image mime type it is the base 64 encoded string of the
+	 * image and otherwise a defined image for each mime type representing them.
+	 *
+	 * @param uuid the uuid
+	 * @param resolutionId the resolution id
+	 * @return the image
+	 */
+	String getImage(String uuid, int resolutionId);
+	/**
+	 * Creates a {@link StreamResource} as the representation of a specific blob
+	 * in a specific resolution.
+	 * 
+	 * In case of an image mime type it is the base 64 encoded string of the
+	 * image and otherwise a defined image for each mime type representing them.
+	 *
+	 * @param uuid the uuid
+	 * @param resolutionId the resolution id
+	 * @return the StreamResource
+	 */
+	StreamResource getResource(String uuid, int resolutionId);
+
+	/**
+	 * Gets the normalizer resolution id by name.
+	 *
+	 * @param displayResolution the display resolution
+	 * @return the normalizer resolution id by name
+	 */
+	int getNormalizerResolutionIdByName(String displayResolution);
+	
+	/**
+	 * Gets the buffered image from blob.
+	 *
+	 * @param uuid the uuid
+	 * @param resolutionId the resolution id
+	 * @return the buffered image
+	 */
+	BufferedImage getBufferedImage(String uuid, int resolutionId);
+
+	/**
+	 * Gets the image birt compatible.
+	 *
+	 * @param uuid the uuid
+	 * @param resolutionId the resolution id
+	 * @return the birt image
+	 */
+	String getBirtImage(String uuid, int resolutionId);
+
+	/**
+	 * Gets the byte array image.
+	 *
+	 * @param uuid the uuid
+	 * @param resolutionId the resolution id
+	 * @return the byte array image
+	 */
+	byte[] getByteArrayImage(String uuid, int resolutionId);
+}
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/customfields/IBlobTyping.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/customfields/IBlobTyping.java
new file mode 100644
index 0000000..1e0562c
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/customfields/IBlobTyping.java
@@ -0,0 +1,120 @@
+package org.eclipse.osbp.ui.api.customfields;
+
+import java.util.List;
+
+import javax.activation.MimeType;
+
+public interface IBlobTyping {
+	public final static String IMAGE_MIME_TYPE_PREFIX = "image";
+//	MimeTypeIDs
+	public final static int PDF_MIME_TYPE_ID = 7;
+	public final static int WORD_DOC_MIME_TYPE_ID = 8;
+	public final static int WORD_DOCX_MIME_TYPE_ID = 9;
+	public final static int EXCEL_XLS_MIME_TYPE_ID = 10;
+	public final static int EXCEL_XLSX_MIME_TYPE_ID = 11;
+	/**
+	 * Provides the defined mime type version.
+	 * 
+	 * @return the defined mime type version
+	 * @see MimeType
+	 */
+	String getMimeTypeVersion();
+	/**
+	 * Provides the defined content transfer encoding of the mime type.
+	 * 
+	 * @return the defined content transfer encoding
+	 * @see MimeType
+	 */
+	String getMimeTypeContentTransferEncoding();
+	/**
+	 * Provides a list of all the defined content type names of the mime type
+	 * object.
+	 * 
+	 * @return a list of all the defined content type names
+	 * @see ContentType
+	 */
+	List<String> getMimeTypeContentTypeNames();
+	/**
+	 * Provides the content type id for an individual position within the list
+	 * of all the defined content type objects of the mime type object.
+	 * 
+	 * @param index
+	 * @return the content type id or '-1' if not found
+	 * @see ContentType
+	 */
+	int getMimeTypeContentTypeIdByListIndex(int index);
+	/**
+	 * Provides the content type name for an individual position within the list
+	 * of all the defined content type objects of the mime type object.
+	 * 
+	 * @param index
+	 * @return the content type name as;@link String} or ""(blank) if not found
+	 * @see ContentType
+	 */
+	String getMimeTypeContentTypeByListIndex(int index);
+	/**
+	 * Provides the content type name for a specific content type id.
+	 * 
+	 * @param contentTypeId
+	 * @return the content type name as;@link String} or ""(blank) if not found
+	 * @see ContentType
+	 */
+	String getMimeTypeContentTypeById(int contentTypeId);
+	/**
+	 * Provides the content type id for a specific content type name.
+	 * 
+	 * @param contentTypeStr
+	 * @return the content type id or '-1' if not found
+	 * @see ContentType
+	 */
+	int getMimeTypeContentTypeId(String contentTypeStr);
+	/**
+	 * Provides the defined default normalizer resolution id.
+	 * 
+	 * @return default normalizer resolution id
+	 */
+	int getNormalizerDefaultResolutionId();
+	/**
+	 * Provides the normalizer resolution id for an individual position within
+	 * the list of all the defined resolution objects of the normalizer object.
+	 * 
+	 * @param index
+	 * @return the normalizer resolution id or '-1' if not found
+	 */
+	int getNormalizerResolutionIdByListIndex(int index);
+	/**
+	 * Provides the normalizer resolution name for an individual position within
+	 * the list of all the defined resolution objects of the normalizer object.
+	 * 
+	 * @param index
+	 * @return the normalizer resolution name as;@link String} or ""(blank) if
+	 *         not found
+	 */
+	String getNormalizerResolutionNameByListIndex(int index);
+	/**
+	 * Provides the normalizer resolution for an individual position within the
+	 * list of all the defined resolution objects of the normalizer object.
+	 * 
+	 * @param index
+	 * @return the normalizer resolution as;@link String} or ""(blank) if not
+	 *         found
+	 */
+	String getNormalizerResolutionByListIndex(int index);
+	/**
+	 * Provides the normalizer resolution id for a specific normalizer
+	 * resolution.
+	 * 
+	 * @param resolutionStr
+	 * @return the normalizer resolution id or '-1' if not found
+	 */
+	int getNormalizerResolutionIdByName(String resolutionStr);
+	/**
+	 * Provides the normalizer resolution for a specific normalizer resolution
+	 * id.
+	 * 
+	 * @param resolutionId
+	 * @return the normalizer resolution as;@link String} or ""(blank) if not
+	 *         found
+	 */
+	String getNormalizerResolutionById(int resolutionId);
+}
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/customfields/IBlobUploadEventListener.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/customfields/IBlobUploadEventListener.java
new file mode 100644
index 0000000..5c0efc6
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/customfields/IBlobUploadEventListener.java
@@ -0,0 +1,21 @@
+/**
+ *                                                                            
+ * 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 
+ * Jose Dominguez (Compex Systemhaus GmbH) - ongoing development 
+ */
+package org.eclipse.osbp.ui.api.customfields;
+
+import java.util.EventListener;
+
+public interface IBlobUploadEventListener extends EventListener
+{
+  void blobUploaded( IBlobEvent e );
+}
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/DatamartData.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/DatamartData.java
new file mode 100644
index 0000000..2e071e7
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/DatamartData.java
@@ -0,0 +1,87 @@
+/*
+ *                                                                            
+ *  Copyright (c) 2011 - 2017 - Loetz GmbH & Co KG, 69115 Heidelberg, Germany 
+ *                                                                            
+ *  All rights reserved. This program and the accompanying materials           
+ *  are made available under the terms of the Eclipse Public License v1.0       
+ *  which accompanies this distribution, and is available at                  
+ *  http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ *  Initial contribution:                                                      
+ *     Loetz GmbH & Co. KG
+ * 
+ */
+package org.eclipse.osbp.ui.api.datamart;
+
+import org.eclipse.osbp.runtime.common.event.IDualData;
+
+/**
+ * The Class DatamartData.
+ */
+public class DatamartData implements IDualData {
+	private String selectionValue;
+	private String formattedValue;
+	private String hierarchy = null;
+	private boolean isString = false;
+
+	@Override
+	public void asString(boolean isString) {
+		this.isString = isString;
+	}
+
+	@Override
+	public String getDatabaseSelectionValue() {
+		if(isString) {
+			return "'"+selectionValue.replace("'", "''")+"'";
+		}
+		return selectionValue;
+	}
+
+	@Override
+	public String getSelectionValue() {
+		return selectionValue;
+	}
+	
+	@Override
+	public void setSelectionValue(String selectionValue) {
+		this.selectionValue = selectionValue;
+	}
+
+	@Override
+	public String getFormattedValue() {
+		return formattedValue;
+	}
+
+	@Override
+	public void setFormattedValue(String formattedValue) {
+		this.formattedValue = formattedValue;
+	}
+
+	@Override
+	public String getHierarchy() {
+		return hierarchy;
+	}
+
+	@Override
+	public String getHierarchyWithBrackets() {
+		if (hierarchy != null) {
+			return "[" + hierarchy + "]";
+		}
+		return "";
+	}
+
+	@Override
+	public void setHierarchy(String hierarchy) {
+		this.hierarchy = hierarchy;
+	}
+
+	@Override
+	public boolean equals(IDualData item) {
+		if (item != null && (item.getHierarchy() == null || item.getHierarchy().equals(getHierarchy()))
+				&& item.getSelectionValue().equals(getSelectionValue())
+				&& item.getFormattedValue().equals(getFormattedValue())) {
+			return true;
+		}
+		return false;
+	}
+}
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/DatamartFilter.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/DatamartFilter.java
new file mode 100644
index 0000000..ca9fe4a
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/DatamartFilter.java
@@ -0,0 +1,624 @@
+/*
+ *                                                                            
+ *  Copyright (c) 2011 - 2017 - Loetz GmbH & Co KG, 69115 Heidelberg, Germany 
+ *                                                                            
+ *  All rights reserved. This program and the accompanying materials           
+ *  are made available under the terms of the Eclipse Public License v1.0       
+ *  which accompanies this distribution, and is available at                  
+ *  http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ *  Initial contribution:                                                      
+ *     Loetz GmbH & Co. KG
+ * 
+ */
+package org.eclipse.osbp.ui.api.datamart;
+
+import java.text.DateFormat;
+import java.util.AbstractMap.SimpleEntry;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent.EventDispatcherDataTag;
+import org.eclipse.osbp.runtime.common.event.IDualData;
+
+/**
+ * The Class DatamartFilter.
+ */
+public class DatamartFilter {
+    
+	/** The Constant FILTER_PLACEHOLDER. */
+	public static final String  FILTER_PLACEHOLDER = "#";
+
+    /**
+     * The Enum FilterType.
+     */
+    public enum FilterType {
+        
+        /**  single selection via combobox. */
+        SINGLE, 
+        
+        /**  multiple selection via listbox. */
+        MULTIPLE, 
+        
+        /**  cube condition except for something. */
+        EXCEPT, 
+        
+        /**  slice a single value. */
+        SINGLESLICER, 
+        
+        /**  slice multiple values. */
+        MULTIPLESLICER, 
+        
+        /**  hierarchy with single value. */
+        SINGLEHIERARCHY, 
+        
+        /**  hierarchy with multiple values. */
+        MULTIPLEHIERARCHY, 
+        
+        /**  range of two values. */
+        BETWEEN, 
+        
+        /**  range of two date values. */
+        BETWEEN_DATE, 
+        
+        /**  select by id. */
+        BY_ID
+    }
+    
+    /**
+     * The Enum FilterType.
+     */
+    public enum DateTimeFormat {
+    	
+    	/**  Date Format. */
+    	DATE(0, "DATE", "DATE"),
+    	
+    	/**  Time format. */
+    	TIME(1, "TIME", "TIME"),
+    	
+    	/**  date time format. */
+    	DATE_TIME(2, "DATE_TIME", "DATE_TIME");
+ 
+    	private int value;
+		private String name;
+		private String literal;
+
+		/**
+    	 * Only this class can construct instances.
+    	 */
+    	private DateTimeFormat(int value, String name, String literal) {
+    		this.value = value;
+    		this.name = name;
+    		this.literal = literal;
+    	}
+
+    	
+    	public int getValue() {
+			return value;
+		}
+
+		public String getName() {
+			return name;
+		}
+
+		public String getLiteral() {
+			return literal;
+		}
+
+		private static final DateTimeFormat[] VALUES_ARRAY =
+    			new DateTimeFormat[] {
+    				DATE,
+    				TIME,
+    				DATE_TIME,
+    			};
+    
+    	public static DateTimeFormat get(String literal) {
+    		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+    			DateTimeFormat result = VALUES_ARRAY[i];
+    			if (result.toString().equals(literal)) {
+    				return result;
+    			}
+    		}
+    		return null;
+    	}
+
+
+    }
+    
+    /**
+     * The Enum FilterType.
+     */
+    public enum DateResolution {
+    	
+    	SECOND(0, "SECOND", "SECOND"),
+
+    	MINUTE(1, "MINUTE", "MINUTE"),
+    	
+    	HOUR(2, "HOUR", "HOUR"),
+
+    	DAY(3, "DAY", "DAY"),
+
+    	MONTH(4, "MONTH", "MONTH"),
+
+    	YEAR(5, "YEAR", "YEAR"), 
+
+		UNDEFINED(6, "UNDEFINED", "UNDEFINED");
+    	
+    	private static final DateResolution[] VALUES_ARRAY =
+    			new DateResolution[] {
+    					SECOND,
+    					MINUTE,
+    					HOUR,
+    					DAY,
+    					MONTH,
+    					YEAR,
+    					UNDEFINED,
+    	};
+		private int value;
+		private String name;
+		private String literal;
+    	
+		/**
+		 * Only this class can construct instances.
+		 */
+		private DateResolution(int value, String name, String literal) {
+    		this.value = value;
+    		this.name = name;
+    		this.literal = literal;
+    	}
+
+		public int getValue() {
+			return value;
+		}
+
+		public String getName() {
+			return name;
+		}
+
+		public String getLiteral() {
+			return literal;
+		}
+    	
+		public static DateResolution get(String literal) {
+			for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+				DateResolution result = VALUES_ARRAY[i];
+				if (result.toString().equals(literal)) {
+					return result;
+				}
+			}
+			return null;
+		}
+
+    }
+    
+
+    /** The name. */
+    private String name;
+    
+    /** The type. */
+    private FilterType type;
+    
+    /** The sql command to fill data. */
+    private String sql;
+    
+    /** The sql command condition. */
+    private String condition;
+    
+    /** The selector. */
+    private IDatamartSelectable selector;
+    
+    /** The unselected data. */
+    private List<IDualData> data;
+
+    /** The selected data. */
+    private List<IDualData> selection;
+
+	private IDatamartBetweenInput inputComponent;
+
+	public DateTimeFormat format;
+
+	public DateResolution resolution;
+	
+    /**
+     * Instantiates a new datamart filter for non date data typed attributes.
+     *
+     * @param type the type
+     * @param dateFormatMap
+     * @param name the name
+     * @param sql the sql
+     */
+    public DatamartFilter(FilterType type, String name, String sql) {
+    	this.type = type;
+    	this.name = name;
+    	this.sql = sql;
+    	data = new ArrayList<>();
+    	selection = new ArrayList<>();
+	}
+
+    /**
+     * Instantiates a new datamart filter for date data typed attributes.
+     *
+     * @param type the type
+     * @param dateFormatMap
+     * @param name the name
+     * @param sql the sql
+     */
+    public DatamartFilter(FilterType type, Map<String, String> dateFormatMap, String name, String sql) {
+    	this.type = type;
+    	this.name = name;
+    	DateTimeFormat format = null;
+    	DateResolution resolution = null;
+    	for (Entry<String, String> entry : dateFormatMap.entrySet()){
+    		if (DateTimeFormat.get(entry.getKey()) != null ){
+    			format = DateTimeFormat.get(entry.getKey());
+    		} 
+    		if (DateResolution.get(entry.getValue()) != null ){
+    			resolution = DateResolution.get(entry.getValue());
+    		} 
+    	}
+    	this.format = format;
+    	this.resolution = resolution;
+    	this.sql = sql;
+    	data = new ArrayList<>();
+    	selection = new ArrayList<>();
+    }
+    
+	/**
+	 * Gets the name.
+	 *
+	 * @return the name
+	 */
+	public String getName() {
+		return name;
+	}
+	
+	/**
+	 * Gets the decorated name.
+	 *
+	 * @return the decorated name
+	 */
+	public String getDecoratedName() {
+		return DatamartFilter.decorate(name);
+	}
+
+
+	/**
+	 * Decorate a string to be replaced later by a selected value/list.
+	 *
+	 * @param input the input
+	 * @return the string
+	 */
+	public static String decorate(String input) {
+		return FILTER_PLACEHOLDER+input+FILTER_PLACEHOLDER;
+	}
+	
+	/**
+	 * Sets the name.
+	 *
+	 * @param name the new name
+	 */
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	/**
+	 * Gets the type.
+	 *
+	 * @return the type
+	 */
+	public FilterType getType() {
+		return type;
+	}
+
+	/**
+	 * Sets the type.
+	 *
+	 * @param type the new type
+	 */
+	public void setType(FilterType type) {
+		this.type = type;
+	}
+
+	/**
+	 * Gets the sql.
+	 *
+	 * @return the sql
+	 */
+	public String getSql() {
+		return sql;
+	}
+
+	/**
+	 * Sets the sql.
+	 *
+	 * @param sql the new sql
+	 */
+	public void setSql(String sql) {
+		this.sql = sql;
+	}
+
+	/**
+	 * Gets the condition.
+	 *
+	 * @return the condition
+	 */
+	public String getCondition() {
+		return condition;
+	}
+
+	/**
+	 * Sets the condition.
+	 *
+	 * @param condition the new condition
+	 */
+	public void setCondition(String condition) {
+		this.condition = condition;
+	}
+	
+	/**
+	 * Gets the selector.
+	 *
+	 * @return the selector
+	 */
+	public IDatamartSelectable getSelector() {
+		return selector;
+	}
+
+	/**
+	 * Sets the selector.
+	 *
+	 * @param selector the new selector
+	 */
+	public void setSelector(IDatamartSelectable selector) {
+		this.selector = selector;
+	}
+
+	/**
+	 * Gets the input component.
+	 *
+	 * @return the input component
+	 */
+	public IDatamartBetweenInput getBetweenInputComponent() {
+		return inputComponent;
+	}
+	
+	/**
+	 * Sets the input component.
+	 *
+	 * @param inputComponent the new input component
+	 */
+	public void setBetweenInputComponent(IDatamartBetweenInput inputComponent) {
+		this.inputComponent = inputComponent;
+	}
+	
+	/**
+	 * Gets the data.
+	 *
+	 * @return the data
+	 */
+	public List<IDualData> getData() {
+		return data;
+	}
+
+	/**
+	 * Sets the data.
+	 *
+	 * @param data the new data
+	 */
+	public void setData(List<IDualData> data) {
+		if(data != null) {
+			this.data.addAll(data);
+		}
+	}
+
+	/**
+	 * Adds the item.
+	 *
+	 * @param item the item
+	 */
+	public void addItem(IDualData item) {
+		data.add(item);
+	}
+	
+	/**
+	 * Removes an item from data.
+	 *
+	 * @param item the item
+	 */
+	public void removeItem(IDualData item) {
+		data.remove(item);
+	}
+	
+	/**
+	 * Clear data.
+	 */
+	public void clearData() {
+		data.clear();
+	}
+	
+	/**
+	 * Adds the item.
+	 *
+	 * @param value the value
+	 */
+	public void addItem(String value, boolean asString) {
+		if(value != null) {
+			IDualData item = new DatamartData();
+			item.setFormattedValue(value);
+			item.setSelectionValue(value);
+			item.asString(asString);
+			data.add(item);
+		}
+	}
+
+	/**
+	 * Adds the item.
+	 *
+	 * @param value the value
+	 * @param selectValue the select value
+	 */
+	public void addItem(String value, String selectValue, boolean asString) {
+		if(value != null) {
+			IDualData item = new DatamartData();
+			item.setFormattedValue(value);
+			item.setSelectionValue(selectValue);
+			item.asString(asString);
+			data.add(item);
+		}
+	}
+	
+	/**
+	 * Adds the olap item.
+	 *
+	 * @param hierarchy the hierarchy
+	 * @param uniqueName the unique name
+	 */
+	public void addOlapItem(String hierarchy, String uniqueName) {
+		if(uniqueName != null) {
+			IDualData item = new DatamartData();
+			item.setHierarchy(hierarchy);
+			item.setSelectionValue(uniqueName);
+			String value = uniqueName.replace("[", "").replace("]", "").replace(hierarchy+".", "");
+			String[] parts = value.split("\\.");
+			// take the last element as caption
+			item.setFormattedValue(parts[parts.length-1]);
+			if(!"#null".equals(value)) {
+				data.add(item);
+			}
+		}
+	}
+
+	/**
+	 * Gets the selected data.
+	 *
+	 * @return the selected data
+	 */
+	public List<IDualData> getSelectedData() {
+		return selection;
+	}
+
+	/**
+	 * Sets the selected data.
+	 *
+	 * @param selection the new selected data
+	 */
+	public void setSelectedData(List<IDualData> selection) {
+		if(selection != null) {
+			this.selection.addAll(selection);
+		}
+	}
+	
+	/**
+	 * Adds the selected item.
+	 *
+	 * @param item the item
+	 */
+	public void addSelectedItem(IDualData item) {
+		selection.add(item);
+	}
+	
+	/**
+	 * Adds the selected item.
+	 *
+	 * @param value the value
+	 */
+	public void addSelectedItem(String value) {
+		IDualData item = new DatamartData();
+		item.setFormattedValue(value);
+		item.setSelectionValue(value);
+		selection.add(item);
+	}
+
+	/**
+	 * Removes the selected item.
+	 *
+	 * @param item the item
+	 */
+	public void removeSelectedItem(IDualData item) {
+		selection.remove(item);
+	}
+	
+	/**
+	 * Clear selected data.
+	 */
+	public void clearSelectedData() {
+		selection.clear();
+	}
+	
+	/**
+	 * Can select data. Returns true if a filter matched the given selected data and selects the selector.
+	 *
+	 * @param selectedData the selected data
+	 * @param single the single
+	 * @param olap the olap
+	 * @return true, if successful
+	 */
+	@SuppressWarnings("unchecked")
+	public boolean canSelectData(Map<EventDispatcherDataTag, Object> selectedData, boolean single, boolean olap) {
+		for(EventDispatcherDataTag tag : selectedData.keySet()) {
+			switch(tag) {
+			case ID: 
+				return false;
+			case LIST:
+				switch(type) {
+				case SINGLE:
+				case MULTIPLE: 
+					return selectData((List<String>)selectedData.get(tag), false);
+				case EXCEPT: 
+				case SINGLESLICER: 
+				case SINGLEHIERARCHY:
+				case MULTIPLESLICER: 
+				case MULTIPLEHIERARCHY:
+					return selectData((List<String>)selectedData.get(tag), true);
+				default:
+					return false;
+				}
+			}
+		}
+		return false;
+	}
+	
+	/**
+	 * Select data.
+	 *
+	 * @param selected the selected
+	 * @param olap the olap
+	 * @return true, if successful
+	 */
+	private boolean selectData(List<String> selected, boolean olap) {
+		boolean first = true;
+		for(String item:selected) {
+			if(!olap) {
+				for(IDualData dd : data) {
+					if(dd.getSelectionValue().equals(item)) {
+						if(first) {
+							clearSelectedData();
+							first = false;
+						}
+						addSelectedItem(dd);
+						return true;
+					}
+				}
+			}
+			if(olap && !item.contains("[") && !data.isEmpty()) {
+				String prefix = data.get(0).getHierarchyWithBrackets()+".";
+				String suffix = ".["+item.replace(".", "].[")+"]";
+				for(IDualData dd : data) {
+					if(dd.getSelectionValue().startsWith(prefix) &&  dd.getSelectionValue().endsWith(suffix)) {
+						if(first) {
+							clearSelectedData();
+							first = false;
+						}
+						addSelectedItem(dd);
+						return true;
+					}
+				}
+			}
+		}
+		return false;
+	}
+
+}
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/DatamartPrimary.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/DatamartPrimary.java
new file mode 100644
index 0000000..bd87c1b
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/DatamartPrimary.java
@@ -0,0 +1,39 @@
+package org.eclipse.osbp.ui.api.datamart;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.osbp.dsl.semantic.entity.LEntity;
+import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute;
+
+public class DatamartPrimary<T> {
+	private String alias;
+	private String attributeName;
+	private String entityName;
+	private List<T> keys;
+	
+	public DatamartPrimary(String alias, String attributeName, String entityName) {
+		this.attributeName = attributeName;
+		this.entityName = entityName;
+		this.alias = alias;
+		keys = new ArrayList<T>();
+	}
+	public String getAlias() {
+		return alias;
+	}
+	public String getAttributeName() {
+		return attributeName;
+	}
+	public String getEntityName() {
+		return entityName;
+	}
+	public void clear() {
+		keys.clear();
+	}
+	public void add(T id) {
+		keys.add(id);
+	}
+	public boolean contains(T id) {
+		return keys.contains(id);
+	}
+}
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/IDataMart.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/IDataMart.java
index bbfedfd..2da94b2 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/IDataMart.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/IDataMart.java
@@ -3,7 +3,7 @@
  * 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       
+ * are made available under the terms of the Eclipse  License v1.0       
  * which accompanies this distribution, and is available at                  
  * http://www.eclipse.org/legal/epl-v10.html                                 
  *                                                                            
@@ -17,26 +17,25 @@
 
 import org.eclipse.osbp.ui.api.user.IUser;
 
-public interface IDataMart {
-    public enum EType {
-        BOOLEAN, DATE, FLOAT, DOUBLE, BYTE, SHORT, INTEGER, LONG, STRING, TIME, BLOPMAPPING, LENUM, none
-    }
+ public interface IDataMart {
+     enum EType {
+        BOOLEAN, DATE, FLOAT, DOUBLE, BYTE, SHORT, INTEGER, LONG, STRING, TIME, BLOPMAPPING, LENUM, NONE
+     }
     
-	public final static String DATAMART_CLASS_POSTFIX = "Datamart";
-	public final static String DATAMART_ID_COLUMN_PREFIX = "__";
-	public final static String DATAMART_ID_COLUMN_POSTFIX = "__ID__";
-	
-	public static final String  singleSelectDecorator = "$";
-	public static final String  multiSelectDecorator = "§";
-	public static final String  exceptDecorator = "%";
-	public static final String  slicerSingleSelectDecorator = "?";
-	public static final String  slicerMultiSelectDecorator = "!";
-	public static final String  sqlFilterNothing = "'*'";
-	public static final String  filterIdPlaceholder = "&";
-	
-	public static String decorate(String decorator, String input) {return decorator+input+decorator;}
-
-	public abstract HashMap<String, ArrayList<IDualData>> getFilters(IUser user);
-	public abstract HashMap<String, EType> getIdMap();
-	public abstract HashMap<String, EType> getTypesMap(IUser user);
+	 static final String DATAMART_CLASS_POSTFIX = "Datamart";
+	 static final String DATAMART_SERVICE_POSTFIX = "DatamartService";
+	 static final String DATAMART_CONTAINER_POSTFIX = "DatamartContainer";
+	 static final String DATAMART_ID_COLUMN_PREFIX = "__";
+	 static final String DATAMART_ID_COLUMN_POSTFIX = "__ID__";
+	 static final String  SQLFILTERNOTHING = "'*'";
+	 void setUser(IUser user);
+	 IUser getUser();
+	 ArrayList<DatamartFilter> getFilters();
+	 void renderFilters();
+	 HashMap<String, EType> getIdMap();
+	 HashMap<String, EType> getTypesMap();
+	 ArrayList<DatamartPrimary<?>> getPrimaryList();
+	 void computeConditions();
+	 void clearCache();
+	 String getResultAttribute(String attributeName);
 }
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/IDatamartBetweenInput.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/IDatamartBetweenInput.java
new file mode 100644
index 0000000..9649045
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/IDatamartBetweenInput.java
@@ -0,0 +1,50 @@
+package org.eclipse.osbp.ui.api.datamart;
+
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.ui.AbstractField;
+
+public interface IDatamartBetweenInput {
+
+	String getFrom();
+
+	void setFrom(String from);
+
+	String getUntil();
+
+	void setUntil(String until);
+	
+	<T> AbstractField<T> getFromInput();
+
+	<T> AbstractField<T> getUntilInput();
+	
+	/**
+	 * Sets the caption.
+	 *
+	 * @param caption the new caption
+	 */
+	void setCaption(String caption);
+
+	/**
+	 * Sets the description.
+	 *
+	 * @param description the new description
+	 */
+	void setDescription(String description);
+	
+   /**
+	 * Adds the value change listener.
+	 *
+	 * @param listener the listener
+	 */
+	void addValueChangeListener(ValueChangeListener listener);
+	
+	/**
+	 * Removes the value change listener.
+	 *
+	 * @param listener the listener
+	 */
+	void removeValueChangeListener(ValueChangeListener listener);
+
+	
+	
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/IDatamartContainer.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/IDatamartContainer.java
new file mode 100644
index 0000000..d4dc898
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/IDatamartContainer.java
@@ -0,0 +1,7 @@
+package org.eclipse.osbp.ui.api.datamart;
+
+public interface IDatamartContainer {
+
+	Object getIdValue();
+
+}
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/IDatamartFilterGenerator.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/IDatamartFilterGenerator.java
index 0b47637..f1c2787 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/IDatamartFilterGenerator.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/IDatamartFilterGenerator.java
@@ -1,44 +1,101 @@
+/*
+ *                                                                            
+ *  Copyright (c) 2011 - 2017 - Loetz GmbH & Co KG, 69115 Heidelberg, Germany 
+ *                                                                            
+ *  All rights reserved. This program and the accompanying materials           
+ *  are made available under the terms of the Eclipse Public License v1.0       
+ *  which accompanies this distribution, and is available at                  
+ *  http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ *  Initial contribution:                                                      
+ *     Loetz GmbH & Co. KG
+ * 
+ */
 package org.eclipse.osbp.ui.api.datamart;
 
-import java.util.Locale;
-import java.util.Map;
-
+import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent;
 import org.eclipse.osbp.ui.api.layout.IViewLayoutManager;
-import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
-import org.eclipse.osbp.ui.api.user.IUser;
 
-import com.vaadin.data.Property.ValueChangeListener;
-
+/**
+ * The Interface IDatamartFilterGenerator.
+ */
 public interface IDatamartFilterGenerator {
-	void setDslMetadataService(IDSLMetadataService dslMetadataService);
+	
+	/** The Constant MULTISELECTION_ROWS. */
+	public static final int MULTISELECTION_ROWS=10;
+	
+	/** The Constant SHOW_CAPTION. */
+	public static final boolean SHOW_CAPTION=false;
 
-	boolean createFilter(IDataMart datamart, IUser user,
-			ValueChangeListener filterChangeListener,
-			IViewLayoutManager layoutManager);
+	/**
+	 * Creates the UI filters.
+	 *
+	 * @param layoutManager the layout manager
+	 * @return true, if successful
+	 */
+	boolean createUIFilters(IViewLayoutManager layoutManager);
 
-	boolean createFilter(IDataMart datamart, IUser user,
-			ValueChangeListener filterChangeListener,
-			IViewLayoutManager layoutManager, boolean showCaption);
+	/**
+	 * Select item.
+	 *
+	 * @param filterID the filter ID
+	 * @param selection the selection
+	 */
+	void selectItem(String filterID, String selection);
+	
+	/**
+	 * Select item.
+	 *
+	 * @param event the event
+	 * @param byId, if true also id events are processed
+	 * @return true, if selection must trigger a dataRefresh
+	 */
+	boolean selectItem(EventDispatcherEvent event, boolean byId);
 
-	void setId(String idProperty, String id);
+	/**
+	 * Reset item.
+	 *
+	 * @param filterID the filter ID
+	 */
+	void resetItem(String filterID);
 
-	void resetId();
-
-	Map<String, IDatamartSelectable> getSelectors();
-
-	boolean isCube();
-
-	void setCube(boolean cube);
-
-	void resetItem(String filter);
-
-	Map<String, String> getFilter(boolean isCube);
-
-	void setLocale(Locale locale);
-
-	void selectItem(String filter, String selection);
-
-	void updateFilter(IDataMart datamart, IUser user,
-			ValueChangeListener filterChangeListener);
-
+	/**
+	 * Update filter.
+	 */
+	void updateFilter();
+	
+	/**
+	 * Adds the filter change listener.
+	 *
+	 * @param listener the listener
+	 */
+	void addFilterChangeListener(FilterChangeListener listener);
+	
+	/**
+	 * Removes the change listener.
+	 *
+	 * @param listener the listener
+	 */
+	void removeFilterChangeListener(FilterChangeListener listener);
+	
+	/**
+	 * The listener interface for receiving filterChange events.
+	 * The class that is interested in processing a filterChange
+	 * event implements this interface, and the object created
+	 * with that class is registered with a component using the
+	 * component's <code>addFilterChangeListener<code> method. When
+	 * the filterChange event occurs, that object's appropriate
+	 * method is invoked.
+	 *
+	 * @see FilterChangeEvent
+	 */
+	public interface FilterChangeListener { 
+		
+		/**
+		 * Filter changed. Notify all listeners.
+		 *
+		 * @param changedFilter the changed filter
+		 */
+		void filterChanged(DatamartFilter changedFilter);
+	}
 }
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/IDatamartSelectable.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/IDatamartSelectable.java
index 6502891..17d8daa 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/IDatamartSelectable.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/datamart/IDatamartSelectable.java
@@ -15,6 +15,8 @@
 import java.util.Collection;
 import java.util.List;
 
+import org.eclipse.osbp.runtime.common.event.IDualData;
+
 import com.vaadin.data.Container;
 import com.vaadin.data.Property.ValueChangeListener;
 import com.vaadin.server.Sizeable.Unit;
@@ -43,26 +45,17 @@
 	void update(Collection<IDualData> options);
 	
 	/**
-	 * Gets the filter name.
-	 *
-	 * @return the filter name
-	 */
-	String getFilterName();
-	
-	/**
-	 * Sets the filter name.
-	 *
-	 * @param filterName the new filter name
-	 */
-	void setFilterName(String filterName);
-	
-	/**
 	 * Gets the selected items.
 	 *
 	 * @return the selected items
 	 */
 	List<IDualData> getSelectedItems();
 	
+	/**
+	 * Gets a selected single value.
+	 *
+	 * @return the value
+	 */
 	Object getValue();
 	
 	/**
@@ -113,6 +106,7 @@
 	 * @param listener the listener
 	 */
 	void removeValueChangeListener(ValueChangeListener listener);
+	
 	/**
 	 * Sets the caption.
 	 *
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/e4/IE4Dialog.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/e4/IE4Dialog.java
new file mode 100644
index 0000000..b380581
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/e4/IE4Dialog.java
@@ -0,0 +1,5 @@
+package org.eclipse.osbp.ui.api.e4;
+
+public interface IE4Dialog {
+
+}
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/e4/IE4Focusable.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/e4/IE4Focusable.java
new file mode 100644
index 0000000..4f27c1f
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/e4/IE4Focusable.java
@@ -0,0 +1,5 @@
+package org.eclipse.osbp.ui.api.e4;
+
+public interface IE4Focusable {
+
+}
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/e4/IE4Table.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/e4/IE4Table.java
new file mode 100644
index 0000000..9e84d76
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/e4/IE4Table.java
@@ -0,0 +1,5 @@
+package org.eclipse.osbp.ui.api.e4;
+
+public interface IE4Table {
+
+}
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/functionlibrary/IFunctionLibraryService.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/functionlibrary/IFunctionLibraryService.java
index b091bcd..3e5ff00 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/functionlibrary/IFunctionLibraryService.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/functionlibrary/IFunctionLibraryService.java
@@ -15,6 +15,7 @@
 
 import java.util.Locale;
 
+import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.osbp.ui.api.statemachine.IStateMachine;
 
 /**
@@ -22,16 +23,16 @@
  */
 public interface IFunctionLibraryService {
 
-	public Object callFunctionLibrary(String className, String methodName,
+	public Object invoke(String className, String methodName,
 			Object fieldValue, Locale locale, Object... params);
 
-	public Object callFunctionLibrary(String className, String methodName,
+	public Object invoke(String className, String methodName,
 			Object fieldValue);
 
-	public Object callFunctionLibrary(String className, String methodName,
+	public Object invoke(String className, String methodName,
 			Locale locale);
 
-	public Object callFunctionLibrary(String className, String methodName);
+	public Object invoke(String className, String methodName);
 
 	public boolean guard(IStateMachine statemachine, String className, String methodName);
 
@@ -40,4 +41,11 @@
 
 	public Object function(IStateMachine statemachine, String className,
 			String methodName, Object... params);
+
+	public boolean execute(IEclipseContext context, String className,
+			String methodName, Object... params);
+
+	public boolean canExecute(IEclipseContext context, String className,
+			String methodName, Object... params);
+
 }
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/menu/IMenuItemHandler.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/menu/IMenuItemHandler.java
new file mode 100644
index 0000000..9d1b2f4
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/menu/IMenuItemHandler.java
@@ -0,0 +1,6 @@
+package org.eclipse.osbp.ui.api.menu;
+
+public interface IMenuItemHandler {
+	void execute(Object item);
+	boolean canExecute();
+}
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/metadata/IDSLMetadataService.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/metadata/IDSLMetadataService.java
index a23bb06..0544d95 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/metadata/IDSLMetadataService.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/metadata/IDSLMetadataService.java
@@ -23,10 +23,10 @@
 import org.eclipse.xtext.resource.IEObjectDescription;
 import org.eclipse.xtext.util.Pair;
 
-// TODO: Auto-generated Javadoc
 /**
  * The Interface IDSLMetadataService.
  */
+@SuppressWarnings("restriction")
 public interface IDSLMetadataService {
 
 	/**
@@ -38,6 +38,12 @@
 		/** The perspective literal placeholder. */
 		PERSPECTIVES
 	}
+	
+	public static final class ThrowableMessages {
+		private ThrowableMessages() {
+		}
+		public static final String NAMING_LOGIC_NOT_REGISTERD = "No registered naming logic for ";
+	}
 
 	/**
 	 * Gets dsl grammar elements identified by a literal enum.
@@ -60,6 +66,13 @@
 	 * @return the metadata
 	 */
 	EObject getMetadata(String id, EClass eclass);
+	
+	/**
+	 * Returns the ecview id for the given Dialog.
+	 * @param dialog
+	 * @return
+	 */
+	String getECViewId(EObject dialog);
 
 	/**
 	 * Gets the all metadata descriptions.
@@ -75,9 +88,6 @@
 	 * based on Xtext, then the returned fqn should be used from the
 	 * EObjectDescription.
 	 * 
-	 * TODO Riegel - ensure that all DSLs generate a proper fqn. For now they
-	 * are missing their package in the FQN.
-	 *
 	 * @param eObject
 	 *            the EObject
 	 * @return the fully qualified name
@@ -124,6 +134,14 @@
 	String getClassURI(EObject eObject, String kind);
 
 	/**
+	 * Gets the class for the given eObject and extension.
+	 *
+	 * @param eObject the e object
+	 * @param extension the extension
+	 * @return the class
+	 */
+	Class<?> getClass(EObject eObject, String extension);
+	/**
 	 * Gets a class instance for the given eObject and extension.
 	 *
 	 * @param eObject the e object
@@ -135,12 +153,11 @@
 	/**
 	 * Gets a resource URL from the bundle of the given extension.
 	 *
-	 * @param eObject the e object
+	 * @param resourceName the resource name
 	 * @param dslExtension the dsl extension e.g. report
-	 * @param resourceExtension the resource extension e.g. rptdesign
 	 * @return the resource URL
 	 */
-	URL getResourceURL(EObject eObject, String dslExtension, String resourceExtension);
+	URL getResourceURL(String resourceName, String dslExtension);
 	
 	/**
 	 * Resolves the given proxy using the internal resource set.
@@ -184,7 +201,6 @@
 	 *
 	 * @return the type provider
 	 */
-	@SuppressWarnings("restriction")
 	BundleSpaceTypeProvider getTypeProvider();
 
 	/**
@@ -210,4 +226,22 @@
 	 *             the class not found exception
 	 */
 	Class<?> createType(String typeName) throws ClassNotFoundException;
+	
+	/**
+	 * Execute a unit of work via {@link IMetadataBuilderService}.
+	 *
+	 * @param <T> the generic type
+	 * @param state the state
+	 * @param unitOfWork the unit of work
+	 */
+	<T> void execute(T state, Object unitOfWork);
+
+	/**
+	 * Gets the root entity class of a datamart.
+	 *
+	 * @param canonicalName the canonical name of the datamart
+	 * @return the entity root class
+	 */
+	Class<?> getDatamartRootClass(String canonicalName);
+	String getDatamartRootClassIdentifierName(String canonicalName);
 }
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/perspective/IPerspectiveProvider.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/perspective/IPerspectiveProvider.java
new file mode 100644
index 0000000..f8b9f47
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/perspective/IPerspectiveProvider.java
@@ -0,0 +1,104 @@
+/*
+ *                                                                            
+ *  Copyright (c) 2011 - 2017 - Loetz GmbH & Co KG, 69115 Heidelberg, Germany 
+ *                                                                            
+ *  All rights reserved. This program and the accompanying materials           
+ *  are made available under the terms of the Eclipse Public License v1.0       
+ *  which accompanies this distribution, and is available at                  
+ *  http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ *  Initial contribution:                                                      
+ *     Loetz GmbH & Co. KG                              
+ * 
+ */
+package org.eclipse.osbp.ui.api.perspective;
+
+public interface IPerspectiveProvider {
+
+	public static final class PerspectiveViewType {
+		private PerspectiveViewType() {
+		}
+		public static final String TABLE = "table";
+		public static final String CHART = "chart";
+		public static final String DIALOG = "dialog";
+		public static final String REPORT = "report";
+		public static final String TOPOLOGY = "topology";
+		public static final String BPMN = "bpmn";
+		public static final String ORGANIZATION = "organization";
+		public static final String WELCOME = "welcome";
+		public static final String SEARCH = "search";
+		public static final String DATAINTERCHANGE = "data";
+	}
+	
+	public static final class FilterConstants {
+		private FilterConstants() {
+		}
+		public static final String FILTER_DTO_CLASS = "filterDtoClass";//$NON-NLS-1$
+		public static final String FILTER_DEPTH = "filterDepth";//$NON-NLS-1$
+		public static final String FILTER_COLUMNS = "filterCols";//$NON-NLS-1$
+	}
+	
+	public static final class KanbanConstants {
+		private KanbanConstants() {
+		}
+		public static final String DTO = "dto";//$NON-NLS-1$
+		public static final String CARD = "card";//$NON-NLS-1$
+		public static final String DIALOG = "dialog";//$NON-NLS-1$
+	}
+	
+	public static final class E4Constants {
+		private E4Constants() {
+		}
+		public static final String TRIMBAR = "TRIMBAR";//$NON-NLS-1$
+		public static final String TOOLBARCONTROLS = "TOOLBARCONTROLS";//$NON-NLS-1$
+		public static final String TOOLBARCONTROLITEM_PREFIX = "TOOLBARCONTROLITEM.";//$NON-NLS-1$
+		public static final String TOOLBARITEM_PREFIX = "TOOLBARITEM.";//$NON-NLS-1$
+		public static final String PERSPECTIVESTACK = "PERSPECTIVESTACK";//$NON-NLS-1$
+		public static final String PERSPECTIVE_PREFIX = "PERSPECTIVE.";//$NON-NLS-1$
+		public static final String BUNDLE_PROTOCOL_SCHEME = "bundleclass";//$NON-NLS-1$
+
+		/**
+		 * The NS URI of the model element to be shown in the part. This
+		 * information must be put into {@link MPart#getPersistedState()}.<br>
+		 * For instance: For {@link PerspectiveDialog} use
+		 * {@link DialogDSLPackage#eNS_URI}
+		 */
+		public static final String OSBP_NS_URI = "osbp-NS-Uri";
+		
+		/**
+		 * The flavor of the type. For instance table vs. grid.
+		 */
+		public static final String OSBP_FLAVOR = "osbp-NS-Uri-flavor";
+
+		/**
+		 * The fully qualified name <code>{package.name}.{object.name}</code> of
+		 * the model element to be shown in the part. This information must be
+		 * put into {@link MPart#getPersistedState()}.<br>
+		 * For instance: For {@link PerspectiveDialog} use the FQN for
+		 * {@link Dialog}.
+		 * 
+		 */
+		public static final String OSBP_FQN = "osbp-model-fqn";
+		/**
+		 * Removes the perspective from stack if it is closed.
+		 */
+		public static final String TAG_REMOVE_ON_CLOSE = "remove_on_close";
+
+		/**
+		 * The perspective is not visible in the open perspective dialog.
+		 */
+		public static final String TAG_NOT_IN_OPEN_PERSPECTIVE_DIALOG = "not_in_open_perspective_dialog";
+
+	}
+
+	void openPerspective(String perspectiveId);
+	
+	/**
+	 * Open a not-model-based perspective.
+	 *
+	 * @param elementId the element id
+	 * @param labelName the label name
+	 * @param clazz the clazz
+	 */
+	void openPerspective(String elementId, String labelName, Class<?> clazz);
+}
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/pos/ISignatureEvent.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/pos/ISignatureEvent.java
new file mode 100644
index 0000000..b8fd379
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/pos/ISignatureEvent.java
@@ -0,0 +1,9 @@
+package org.eclipse.osbp.ui.api.pos;
+
+import java.util.List;
+
+public interface ISignatureEvent {
+	int getButtonId();
+	List<PenData> getPenData();
+	Exception getException(); 
+}
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/pos/ISignatureListener.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/pos/ISignatureListener.java
new file mode 100644
index 0000000..8571387
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/pos/ISignatureListener.java
@@ -0,0 +1,5 @@
+package org.eclipse.osbp.ui.api.pos;
+
+public interface ISignatureListener {
+	void notifyFinished(ISignatureEvent event);
+}
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/pos/ISignatureService.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/pos/ISignatureService.java
new file mode 100644
index 0000000..3f751a1
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/pos/ISignatureService.java
@@ -0,0 +1,102 @@
+/*
+ *                                                                            
+ *  Copyright (c) 2011 - 2017 - Loetz GmbH & Co KG, 69115 Heidelberg, Germany 
+ *                                                                            
+ *  All rights reserved. This program and the accompanying materials           
+ *  are made available under the terms of the Eclipse Public License v1.0       
+ *  which accompanies this distribution, and is available at                  
+ *  http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ *  Initial contribution:                                                      
+ *     Loetz GmbH & Co. KG                              
+ * 
+ */
+package org.eclipse.osbp.ui.api.pos;
+
+import java.awt.image.BufferedImage;
+
+import org.eclipse.osbp.ui.api.customfields.IBlobService;
+
+public interface ISignatureService {
+	
+	/**
+	 * Open tablet.
+	 *
+	 * @param blobService the blob service
+	 * @return true, if successful
+	 */
+	boolean openTablet(IBlobService blobService);
+	
+	/**
+	 * Close tablet.
+	 */
+	void closeTablet();
+	
+	/**
+	 * Clear tablet.
+	 */
+	void clearTablet();
+	
+	/**
+	 * Sets the tablet labels, e.g. ok, clear, cancel
+	 * allTexts must be pipe separated and must contain 3 elements.
+	 * Must be called before openTablet 
+	 *
+	 * @param allLabels the new tablet labels
+	 */
+	void setTabletLabel(String allLabels);
+	
+	/**
+	 * Adds the listener.
+	 *
+	 * @param listener the listener
+	 */
+	void addListener(ISignatureListener listener);
+	
+	/**
+	 * Removes the listener.
+	 *
+	 * @param listener the listener
+	 */
+	void removeListener(ISignatureListener listener);
+	
+	/**
+	 * Capture tablet signature. Enable notofications.
+	 */
+	void captureTablet();
+	
+	/**
+	 * Idle tablet. No more notifications.
+	 */
+	void idleTablet();
+	
+	/**
+	 * Sets the background image for the capturing screen.
+	 *
+	 * @param imageId the new capture image
+	 */
+	void setCaptureImage(String imageId);
+	
+	/**
+	 * Adds the slide.
+	 *
+	 * @param slideName the slide name
+	 */
+	void addSlideTablet(String slideId);
+	
+	/**
+	 * Sets the delay between each slide in mSec
+	 *
+	 * @param delay the new slide delay
+	 */
+	void setSlideDelay(long delay);
+	
+	/**
+	 * Gets the signature blob as uuid from blobMapping.
+	 *
+	 * @param width the client-width it should be scaled to
+	 * @param height the client-height it should be scaled to
+	 * @return the signature blob
+	 */
+	String getSignatureBlob(int width, int height);
+}
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/pos/PenData.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/pos/PenData.java
new file mode 100644
index 0000000..bcd569e
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/pos/PenData.java
@@ -0,0 +1,37 @@
+package org.eclipse.osbp.ui.api.pos;
+
+public class PenData {
+	private int rdy;
+	private int sw;
+	private int pressure;
+	private int x;
+	private int y;
+	
+	public PenData(int rdy, int sw, int pressure, int x, int y) {
+		this.rdy = rdy;
+		this.sw = sw;
+		this.pressure = pressure;
+		this.x = x;
+		this.rdy = y;
+	}
+
+	public int getRdy() {
+		return rdy;
+	}
+
+	public int getSw() {
+		return sw;
+	}
+
+	public int getPressure() {
+		return pressure;
+	}
+
+	public int getX() {
+		return x;
+	}
+
+	public int getY() {
+		return y;
+	}
+}
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/report/IReportProvider.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/report/IReportProvider.java
index 1d19243..274c54f 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/report/IReportProvider.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/report/IReportProvider.java
@@ -3,8 +3,7 @@
 import java.io.InputStream;
 import java.util.Map;
 
-import org.eclipse.osbp.ui.api.datamart.IDataMart;
-import org.eclipse.osbp.ui.api.datamart.IDatamartFilterGenerator;
+import org.eclipse.osbp.ui.api.customfields.IBlobService;
 import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
 import org.eclipse.osbp.ui.api.user.IUser;
@@ -13,18 +12,17 @@
 	public final static String APPCONTEXT_REPORT = "AppContext_Report";
 	public final static String APPCONTEXT_THEMERESOURCESERVICE = "ThemeResourceService_Report";
 	public final static String APPCONTEXT_DSLMETADATASERVICE = "DSLMetadataService_Report";
+	public final static String APPCONTEXT_BLOBSERVICE = "BlobService_Report";
+
 	public final static String APPCONTEXT_USER = "User_Report";
 	public final static String APPCONTEXT_DATAMARTINSTANCE = "DatamartInstance_Report";
 	public final static String APPCONTEXT_FILTERMAP = "FilterMap_Report";
 	public final static String APPCONTEXT_PROPERTYLOOKUP = "PropertyLookup_Report";
 
 	public enum Rendering {
-		PDF_FILE(false, true, true, false, false), PDF_STREAM(false, true,
-				false, true, false),
+		PDF_FILE(false, true, true, false, false), PDF_STREAM(false, true, false, true, false),
 		/** @see {@link http://www.eclipse.org/forums/index.php/t/204085/} */
-		PDF_PRINT_STREAM(false, true, false, true, true), HTML_FILE(true,
-				false, true, false, false), HTML_STREAM(true, false, false,
-				true, false);
+		PDF_PRINT_STREAM(false, true, false, true, true), HTML_FILE(true, false, true, false, false), HTML_STREAM(true, false, false, true, false);
 
 		public boolean asHtml() {
 			return fAsHtml;
@@ -52,8 +50,7 @@
 		private final boolean fAsStream;
 		private final boolean fForPrinting;
 
-		Rendering(boolean asHtml, boolean asPdf, boolean asFile,
-				boolean asStream, boolean forPrinting) {
+		Rendering(boolean asHtml, boolean asPdf, boolean asFile, boolean asStream, boolean forPrinting) {
 			fAsHtml = asHtml;
 			fAsPdf = asPdf;
 			fAsFile = asFile;
@@ -62,15 +59,14 @@
 		}
 	}
 
-	void printReportAsPdf(String reportId, IUser user,
-			IDSLMetadataService dslMetadataService, Map<String, String> filterMap);
+	void printReportAsPdf(String reportId, IUser user, IDSLMetadataService dslMetadataService, IBlobService blobService,
+			Map<String, String> filterMap);
 
-	InputStream get(String reportId, IUser user,
-			IDSLMetadataService dslMetadataService, Map<String, String> filterMap);
+	InputStream get(String reportId, IUser user, IDSLMetadataService dslMetadataService, IBlobService blobService,
+			Map<String, String> filterMap);
 
-	InputStream get(String reportId, IUser user,
-			IDSLMetadataService dslMetadataService, Map<String, String> filterMap,
-			Rendering renderer, IThemeResourceService themeResourceService,
+	InputStream get(String reportId, IUser user, IDSLMetadataService dslMetadataService, Map<String, String> filterMap,
+			Rendering renderer, IThemeResourceService themeResourceService, IBlobService blobService,
 			String outputPath);
 
 }
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/statemachine/IDataProvider.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/statemachine/IDataProvider.java
index 47c6837..338fe15 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/statemachine/IDataProvider.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/statemachine/IDataProvider.java
@@ -1,19 +1,23 @@
 package org.eclipse.osbp.ui.api.statemachine;
 
-import java.util.Stack;
+import java.util.Collection;
 
 import org.eclipse.osbp.dsl.common.datatypes.IDto;
-import org.eclipse.osbp.dsl.dto.lib.services.Query;
+import org.eclipse.osbp.runtime.common.filter.IQuery;
 
+@FunctionalInterface
 public interface IDataProvider {
-	void initDatasource(String dtoName);
+	void addDatasource(String dtoAlias, Class<?> dtoServiceClass);
 	public interface Provider extends IStateMachineParticipant {
-		Boolean find(Provider listener, String dtoName, Query query);
-		Boolean find(Provider listener, String dtoName, String fieldname, Object search);
-		Boolean operation(Provider listener, String name, Stack<Object> parameter);
-		void addTo(Provider listener, String dtoName, String listName, IDto dto);
-		void removeFrom(Provider listener, String dtoName, String listName, IDto dto);
-		void update(Provider listener, String dtoName, IDto dto);
-		void delete(Provider listener, String dtoName, IDto dto);
+		Boolean find(Provider listener, String dtoAlias, IQuery query);
+		Boolean find(Provider listener, String dtoAlias, String fieldname, Object search);
+		Collection<? extends IDto> findAll(String dtoAlias, IQuery query);
+		Collection<? extends IDto> findAll(String dtoAlias, String fieldName, Object search);
+		Collection<? extends IDto> findAll(String dtoAlias, String fieldName);
+		void addTo(Provider listener, String dtoAlias, String listName, IDto dto);
+		void removeFrom(Provider listener, String dtoAlias, String listName, IDto dto);
+		void update(Provider listener, String dtoAlias, IDto dto);
+		void reload(Provider listener, String dtoAlias, IDto dto);
+		void delete(Provider listener, String dtoAlias, IDto dto);
 	}
 }
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/statemachine/IPeripheral.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/statemachine/IPeripheral.java
index 3b0a074..6681ffc 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/statemachine/IPeripheral.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/statemachine/IPeripheral.java
@@ -1,8 +1,28 @@
+/*
+ *                                                                            
+ *  Copyright (c) 2011 - 2017 - Loetz GmbH & Co KG, 69115 Heidelberg, Germany 
+ *                                                                            
+ *  All rights reserved. This program and the accompanying materials           
+ *  are made available under the terms of the Eclipse Public License v1.0       
+ *  which accompanies this distribution, and is available at                  
+ *  http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ *  Initial contribution:                                                      
+ *     Loetz GmbH & Co. KG                              
+ * 
+ */
 package org.eclipse.osbp.ui.api.statemachine;
 
 public interface IPeripheral{
-	void initDevices();
+	boolean initDevices();
 	void releaseDevices();
-	public interface Command extends IStateMachineParticipant {
+	
+	/**
+	 * Checks if init was done successfully.
+	 *
+	 * @return true, if is inits the done
+	 */
+	boolean isInitDone();
+	public interface Command  extends IStateMachineParticipant {
 	}
 }
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/statemachine/IStateMachine.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/statemachine/IStateMachine.java
index 567d797..d4e0f64 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/statemachine/IStateMachine.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/statemachine/IStateMachine.java
@@ -1,12 +1,15 @@
 package org.eclipse.osbp.ui.api.statemachine;
 
 import java.nio.channels.SelectableChannel;
+import java.util.Collection;
 import java.util.Locale;
+import java.util.Map;
 import java.util.Set;
-import java.util.Stack;
 
+import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.osbp.dsl.common.datatypes.IDto;
-import org.eclipse.osbp.dsl.dto.lib.services.Query;
+import org.eclipse.osbp.runtime.common.filter.IQuery;
+import org.eclipse.osbp.ui.api.customfields.IBlobService;
 import org.eclipse.osbp.ui.api.message.MessageEvent;
 import org.eclipse.osbp.ui.api.message.MessageEvent.EventType;
 import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
@@ -16,15 +19,12 @@
 import org.joda.time.DateTime;
 
 public interface IStateMachine {
-	class Data {
-		public String name;
-		public Double value;
-		public Boolean state;
-		public Object object;
-	};
-
 	String getIPAddress();
+	
+	String getHostName();
 
+	boolean isItMe(String hostName);
+	
 	DateTime getNow();
 
 	void processEvent(IStateMachine statemachine, MessageEvent event);
@@ -41,10 +41,14 @@
 
 	void enable(String id, Boolean enable);
 
+	void toggle(String id);
+
 	Object get(String id);
 
 	void set(String id, Object content);
 
+	void set(String id, String device, Object content);
+	
 	void clear(String id);
 
 	void append(String id, String key);
@@ -65,7 +69,11 @@
 
 	Boolean find(String dtoName, String fieldName, Object search);
 
-	Boolean find(String dtoName, Query query);
+	Boolean find(String dtoName, IQuery query);
+	
+	Collection<? extends IDto> findAll(String dtoAlias, IQuery query);
+
+	Collection<? extends IDto> findAll(String dtoAlias, String fieldName, Object search);
 	
 	void addTo(String dtoName, String listName, IDto dto);
 
@@ -73,9 +81,9 @@
 	
 	void update(String dtoName);
 
-	void delete(String dtoName);
+	void reload(String dtoName);
 
-	Boolean operation(String name, Stack<Object> parameter);
+	void delete(String dtoName);
 
 	String getUserAgentInfo();
 
@@ -114,8 +122,6 @@
 
 	Locale getLocale();
 
-	Stack<Object> getParameters();
-
 	void setDslMetadataService(IDSLMetadataService dslMetadataService);
 
 	IDSLMetadataService getDslMetadataService();
@@ -140,8 +146,6 @@
 
 	void dispatchMessages(MessageEvent event);
 	
-	void clearParameters();
-	
 	Object getStorage(String key, String attribute);
 	
 	Set<String> getStorageAttributes(String key);
@@ -155,5 +159,14 @@
 	void closeChannel();
 
 	String getLastTrigger();
+	
+	void setEclipseContext(IEclipseContext eclipseContext);
+	
+	IEclipseContext getEclipseContext();
+	
+	void sendSlaveData(Map<String, Object> data);
 
+	void setBlobService(IBlobService blobService);
+	
+	IBlobService getBlobService();
 }
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/statemachine/IStateMachineParticipant.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/statemachine/IStateMachineParticipant.java
index f746e99..df9a647 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/statemachine/IStateMachineParticipant.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/statemachine/IStateMachineParticipant.java
@@ -3,15 +3,11 @@
 import java.lang.reflect.Method;
 import java.util.Locale;
 
-import org.eclipse.osbp.ecview.core.common.context.IViewContext;
-
 public interface IStateMachineParticipant {
 	void setStatemachine(IStateMachine statemachine);
 
 	IStateMachine getStatemachine();
 
-	void setViewContext(IViewContext viewContext);
-
 	void init();
 
 	void setLocale(Locale locale);
@@ -20,10 +16,18 @@
 
 	Method setter(Object listener, String id, Class<?> parameter);
 
+	Method setter(Object listener, String id, Class<?> content, int contentIndex);
+
+	Method setter(Object listener, String id, Object content, int contentIndex);
+	
 	Class<?> getReturnType(Object obj, String id);
 
+	void toggle(Object obj, String id);
+
 	void set(Object obj, String id, Object content);
 
+	void set(Object obj, String id, String device, Object content);
+
 	Object get(Object obj, String id);
 
 	void clear(Object obj, String id);
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/themes/EnumCssClass.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/themes/EnumCssClass.java
new file mode 100644
index 0000000..7c4a7a5
--- /dev/null
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/themes/EnumCssClass.java
@@ -0,0 +1,55 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation 
+ */
+package org.eclipse.osbp.ui.api.themes;
+
+/**
+ *  CSS Style Class Names for OSBP html components
+ */
+public enum EnumCssClass {
+	/** combobox with icon */
+	COMBOBOX_WITH_ICON,
+	VIEW_HEADER_H2,
+	BOX,
+	CHART,
+	TABLE,
+	HAS_FOCUS,
+	SELECT_LANGUAGE,
+	SELECTION_AREA,
+	MULTI_SELECTION,
+	MULTI_SELECTION_AREA,
+	SINGLE_SELECTION,
+	SINGLE_SELECTION_AREA,
+	DATA_COMPONENT,
+	DATA_AREA,
+	MULTI_AREA,
+	WORK_AREA,
+	LOWER_AREA,
+	TOP_AREA,
+	SIDE_AREA,
+	VIEW,
+	CHART_VIEW,
+	DIALOG_VIEW,
+	ORGANIZATION_VIEW,
+	REPORT_VIEW,
+	TABLE_VIEW,
+	TOPOLOGY_VIEW,
+	MPARTTOOLBARAREA,
+	MPARTTOOLBAR;
+
+	public String styleName() {
+		return toString();
+	}
+	public String toString() {
+		return "os-"+super.toString().toLowerCase().replaceAll("_", "-");
+	}
+}
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/themes/IThemeResourceService.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/themes/IThemeResourceService.java
index 4110a4c..3284922 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/themes/IThemeResourceService.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/themes/IThemeResourceService.java
@@ -14,10 +14,15 @@
 
 import java.io.InputStream;
 
+import org.eclipse.equinox.app.IApplicationContext;
+
 import com.vaadin.server.Resource;
 
 public interface IThemeResourceService {
 	
+	/** The id. */
+	public static String ID = IThemeResourceService.class.getName();
+
 	/** all available theme resource types */
 	static public enum ThemeResourceType {
 		/** any "big" images like background images */
@@ -26,9 +31,18 @@
 		ICON,
 		/** flag icon, mostly 16x16 px */
 		FLAG,
+		/** html resource */
+		HTML
 	}
 	
 	/**
+	 * Inits the themeResourceService
+	 *
+	 * @param appContext the app context
+	 * @param themeEngine the theme engine
+	 */
+	void init(IApplicationContext appContext, Object themeEngine);	
+	/**
 	 * Resets the base paths of the theme resource  
 	 */
 	void reset();
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/user/IUser.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/user/IUser.java
index db34f9c..711dbe0 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/user/IUser.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/user/IUser.java
@@ -14,7 +14,6 @@
 import java.util.Locale;
 
 import org.eclipse.e4.ui.model.application.MApplication;
-import org.eclipse.osbp.ui.api.customfields.IBlobUploadComponent;
 
 /**
  * Every user object needs to implement this interface.
@@ -38,6 +37,12 @@
 	String getUserName();
 
 	/**
+	 * Gets the profile image id.
+	 *
+	 * @return the profile image id
+	 */
+	String getProfileImageId();
+	/**
 	 * Gets the layouting strategy.
 	 *
 	 * @return the layouting strategy
@@ -116,13 +121,6 @@
 	String getEmail();
 	
 	/**
-	 * Gets the blob upload component.
-	 *
-	 * @return the blob upload component
-	 */
-	IBlobUploadComponent getBlobUploadComponent();
-
-	/**
 	 * Gets the roles.
 	 *
 	 * @return the roles
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/AbstractAuthorization.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/AbstractAuthorization.java
index 37fc79d..35b79e7 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/AbstractAuthorization.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/AbstractAuthorization.java
@@ -12,51 +12,31 @@
  */
 package org.eclipse.osbp.ui.api.useraccess;
 
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
-// TODO: Auto-generated Javadoc
 /**
- * The Class AAuthorization.
+ * AbstractAuthorization holds permissions per role associated to one position.
+ * Grants and vetoes can be queried. Grants apply to object level, vetoes to attributes and relationships.
+ * Conflicts arising from merged roles of a position are resolved favoring the more generous grant and the less restrictive veto  
  */
 public abstract class AbstractAuthorization {
 
-	/** The authorization groups. */
-	private final HashMap<String, AbstractRoleAuthorizationGroup> fAuthorizationGroups;
+	/** The role permissions. */
+	private HashMap<String, List<Set<Permission>>> rolePermissions = new HashMap<>();
 
 	/**
-	 * Instantiates a new a authorization.
+	 * Adds the role permissions.
 	 *
-	 * @param authorizationGroups
-	 *            the authorization groups
+	 * @param roleName the role name
+	 * @param permissions the permissions
 	 */
-	protected AbstractAuthorization(AbstractRoleAuthorizationGroup... authorizationGroups) {
-		fAuthorizationGroups = new HashMap<String, AbstractRoleAuthorizationGroup>();
-		for (AbstractRoleAuthorizationGroup authorizationGroup : authorizationGroups) {
-			fAuthorizationGroups.put(authorizationGroup.getRoleName(), authorizationGroup);
-		}
-	}
-
-	/**
-	 * Gets the authorization group name.
-	 *
-	 * @return the authorization group name
-	 */
-	final public String getAuthorizationGroupName() {
-		return this.getClass().getSimpleName();
-	}
-
-	/**
-	 * Adds the role authorization group.
-	 *
-	 * @param roleName
-	 *            the role name
-	 * @param group
-	 *            the group
-	 */
-	final public void addRoleAuthorizationGroup(String roleName, AbstractRoleAuthorizationGroup group) {
-		fAuthorizationGroups.put(roleName, group);
+	public void addRolePermissions(String roleName, List<Set<Permission>> permissions) {
+		rolePermissions.put(roleName, permissions);
 	}
 
 	/**
@@ -66,8 +46,8 @@
 	 *            the role
 	 * @return the role authorization group
 	 */
-	final public AbstractRoleAuthorizationGroup getRoleAuthorizationGroup(String role) {
-		return fAuthorizationGroups.get(role);
+	public final List<Set<Permission>> getRolePermissions(String role) {
+		return rolePermissions.get(role);
 	}
 
 	/**
@@ -75,117 +55,96 @@
 	 *
 	 * @return the authorization groups
 	 */
-	final public HashMap<String, AbstractRoleAuthorizationGroup> getAuthorizationGroups() {
-		return this.fAuthorizationGroups;
+	public final Map<String, List<Set<Permission>>> getAuthorizationGroups() {
+		return this.rolePermissions;
+	}
+	
+	/**
+	 * Gets the roles.
+	 *
+	 * @return the roles
+	 */
+	public final Collection<String> getRoles() {
+		return rolePermissions.keySet();
 	}
 
+	public boolean isApplicableGrant(Group group, Action action, String descriptor) {
+		for(String roleName : getRoles()) {
+			for(Set<Permission> permissionSet : getAuthorizationGroups().get(roleName)) {
+				for(Permission permission:permissionSet) {
+					if(permission.clazz.equals(descriptor) && permission.group == group && permission.action.getWeight() >= action.getWeight()) {
+						return true;
+					}
+				}
+			}
+		}
+		return false;
+	}
+
+	public boolean isApplicableVeto(Group group, Action action, String descriptor, String property) {
+		for(String roleName : getRoles()) {
+			for(Set<Permission> permissionSet : getAuthorizationGroups().get(roleName)) {
+				for(Permission permission:permissionSet) {
+					if(permission.clazz.equals(descriptor) && permission.attribute != null && permission.attribute.equals(property) && permission.group == group && permission.action.getWeight() < action.getWeight()) {
+						return false;
+					}
+				}
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * Granted.
+	 *
+	 * @param group the group
+	 * @param clas the clas
+	 * @param actions the actions
+	 * @return the sets the
+	 */
+	public static final Set<Permission> granted(Group group, String clas, Action... actions) {
+		Set<Permission> granted = new HashSet<>();
+		for (Action action : actions) {
+			granted.add(new Permission(group, clas, action));
+		}
+		return granted;
+	}
+	
+	/**
+	 * Denied.
+	 *
+	 * @param group the group
+	 * @param clas the clas
+	 * @param attribute the attribute
+	 * @param actions the actions
+	 * @return the sets the
+	 */
+	public static final Set<Permission> denied(Group group, String clas, String attribute, Action... actions) {
+		Set<Permission> denied = new HashSet<>();
+		for (Action action : actions) {
+			denied.add(new Permission(group, clas, attribute, action));
+		}
+		return denied;
+	}
+	
 	/**
 	 * The Class Permission.
 	 */
 	public static class Permission {
-
-		/** The Constant ANY. */
-		private final static String ANY = "*";
-
 		/** The Constant SEPARATOR. */
-		private final static String SEPARATOR = ":";
-
-		/** The type. */
-		private final Type fType;
+		private static final String SEPARATOR = ":";
 
 		/** The group. */
-		private final Group fGroup;
+		private final Group group;
 
 		/** The class. */
-		private final String fClass;
+		private final String clazz;
 
 		/** The attribute. */
-		private final String fAttribute;
+		private final String attribute;
 
 		/** The action. */
-		private final Action fAction;
-
-		/**
-		 * For blip process start.
-		 *
-		 * @param blipProcess
-		 *            the blip process
-		 * @param action
-		 *            the action
-		 * @return the permission
-		 */
-		public static Permission forBlipProcess(String blipProcess, Action action) {
-			return new Permission(Group.blipProcess, blipProcess, action);
-		}
-
-		/**
-		 * For blip user task execute.
-		 *
-		 * @param blipUserTask
-		 *            the blip user task
-		 * @param action
-		 *            the action
-		 * @return the permission
-		 */
-		public static Permission forBlipUserTask(String blipUserTask, Action action) {
-			return new Permission(Group.blipUserTask, blipUserTask, action);
-		}
-
-		/**
-		 * For entity.
-		 *
-		 * @param entity
-		 *            the entity
-		 * @param action
-		 *            the action
-		 * @return the permission
-		 */
-		public static Permission forEntity(String entity, Action action) {
-			return new Permission(Group.entity, entity, action);
-		}
-
-		/**
-		 * For entity property.
-		 *
-		 * @param entity
-		 *            the entity
-		 * @param property
-		 *            the property
-		 * @param action
-		 *            the action
-		 * @return the permission
-		 */
-		public static Permission forEntityProperty(String entity, String property, Action action) {
-			return new Permission(Group.entity, entity, property, action);
-		}
-
-		/**
-		 * For dto.
-		 *
-		 * @param dto
-		 *            the dto
-		 * @param action
-		 *            the action
-		 * @return the permission
-		 */
-		public static Permission forDto(String dto, Action action) {
-			return new Permission(Group.dto, dto, action);
-		}
-
-		/**
-		 * For dto property.
-		 *
-		 * @param dto
-		 *            the dto
-		 * @param property
-		 *            the property
-		 * @param action
-		 *            the action
-		 * @return the permission
-		 */
-		public static Permission forDtoProperty(String dto, String property, Action action) {
-			return new Permission(Group.dto, dto, property, action);
-		}
+		private final Action action;
 
 		/**
 		 * Instantiates a new permission.
@@ -198,23 +157,7 @@
 		 *            the action
 		 */
 		public Permission(Group group, String clas, Action action) {
-			this(Type.GRANT, group, clas, null, action);
-		}
-
-		/**
-		 * Instantiates a new permission.
-		 *
-		 * @param group
-		 *            the group
-		 * @param clas
-		 *            the clas
-		 * @param attribute
-		 *            the attribute
-		 * @param action
-		 *            the action
-		 */
-		public Permission(Group group, String clas, String attribute, Action action) {
-			this(Type.GRANT, group, clas, attribute, action);
+			this(group, clas, null, action);
 		}
 
 		/**
@@ -231,12 +174,11 @@
 		 * @param action
 		 *            the action
 		 */
-		public Permission(Type type, Group group, String clas, String attribute, Action action) {
-			fGroup = group;
-			fClass = clas;
-			fAttribute = attribute;
-			fAction = action;
-			fType = type;
+		public Permission(Group group, String clas, String attribute, Action action) {
+			this.group = group;
+			this.clazz = clas;
+			this.attribute = attribute;
+			this.action = action;
 		}
 
 		/*
@@ -244,348 +186,83 @@
 		 * 
 		 * @see java.lang.Object#toString()
 		 */
+		@Override
 		public String toString() {
-			return fGroup.toString() + SEPARATOR + fClass + SEPARATOR + fAttribute + SEPARATOR + fAction.toString();
-		}
-
-		/**
-		 * Checks if is permitted.
-		 *
-		 * @return true, if is permitted
-		 */
-		public boolean isPermitted() {
-			return fType.isPermitted();
-		}
-
-		/**
-		 * Checks for veto.
-		 *
-		 * @return true, if successful
-		 */
-		public boolean hasVeto() {
-			return !fType.isPermitted();
-		}
-
-		/**
-		 * Checks if permission is for an attribute. Negative logic!
-		 *
-		 * @return true, if is attribute
-		 */
-		public boolean isAttribute() {
-			return fAttribute != null;
-		}
-	}
-
-	/**
-	 * The Enum Type.
-	 */
-	public static enum Type {
-
-		/** The grant. */
-		GRANT(true),
-		/** The deny. */
-		DENY(false);
-
-		/** The permitted. */
-		private final boolean fPermitted;
-
-		/**
-		 * Instantiates a new type.
-		 *
-		 * @param permitted
-		 *            the permitted
-		 */
-		private Type(boolean permitted) {
-			fPermitted = permitted;
-		}
-
-		/**
-		 * Checks if is permitted.
-		 *
-		 * @return true, if is permitted
-		 */
-		public boolean isPermitted() {
-			return fPermitted;
+			return group.toString() + SEPARATOR + clazz + SEPARATOR + attribute + SEPARATOR + action.toString();
 		}
 	}
 
 	/**
 	 * The Enum Group.
 	 */
-	public static enum Group {
+	public enum Group {
 
 		/** The blip process start. */
-		blipProcess(Action.startable),
+		PROCESS,
 
 		/** The blip user task execute. */
-		blipUserTask(Action.executable),
+		TASK,
 
 		/** The entity. */
-		entity(Action.readable, Action.creatable, Action.updatable, Action.deletable),
+		ENTITY,
 
 		/** The bean. */
-		bean(Action.readable, Action.creatable, Action.updatable, Action.deletable),
+		BEAN,
 
 		/** The dto. */
-		dto(Action.readable, Action.creatable, Action.updatable, Action.deletable);
-
-		/** The default action. */
-		private final Action fDefaultAction;
-
-		/** The any actions. */
-		private final Action[] fAnyActions;
-
-		/**
-		 * Instantiates a new group.
-		 *
-		 * @param defaultAction
-		 *            the default action
-		 * @param anyActions
-		 *            the any actions
-		 */
-		private Group(Action defaultAction, Action... anyActions) {
-			fDefaultAction = defaultAction;
-			fAnyActions = anyActions;
-		}
-
-		/**
-		 * By name.
-		 *
-		 * @param value
-		 *            the value
-		 * @return the group
-		 */
-		public static Group byName(String value) {
-			for (Group item : values()) {
-				if (value.equalsIgnoreCase(item.toString())) {
-					return item;
-				}
-			}
-			return null;
-		}
-
-		/**
-		 * Checks for default action.
-		 *
-		 * @return true, if successful
-		 */
-		public boolean hasDefaultAction() {
-			return (fDefaultAction != null);
-		}
-
-		/**
-		 * Gets the default action.
-		 *
-		 * @return the default action
-		 */
-		public Action getDefaultAction() {
-			return fDefaultAction;
-		}
-
-		/**
-		 * Gets the any actions.
-		 *
-		 * @return the any actions
-		 */
-		public Action[] getAnyActions() {
-			return fAnyActions;
-		}
+		DTO;
 	}
 
 	/**
 	 * The Enum Action.
 	 */
-	public static enum Action {
-
+	public enum Action {
 		/** can a new entity instance be CREATED. */
-		creatable,
+		CREATABLE(3),
 
 		/** can an entity instance be READ. */
-		readable,
+		READABLE(1),
 
 		/** can an entity instance be UPDATED. */
-		updatable,
+		UPDATABLE(2),
 
 		/** can an entity instance be DELETED. */
-		deletable,
+		DELETEABLE(4),
 
 		/** can an entity instance be CREATED, READ, UPDATED and DELETED. */
-		any,
+		ANY(1000),
+		
 		/** is the entity.property INVISIBLE, otherwise at least visible */
-		invisible,
+		INVISIBLE(3),
+		
 		/** is entity.property DISABLED, otherwise at least enabled */
-		disabled(invisible),
+		DISABLED(2),
+		
 		/** is entity.property NONEDITABLE, otherwise at least editable */
-		noneditable(disabled),
+		NONEDITABLE(1),
 
+		/** The unvetoed. */
+		UNVETOED(0),
+		
 		/** is the blip process startable. */
-		startable,
+		STARTABLE(1),
 
 		/** is the blip user task event executable. */
-		executable;
+		TASKABLE(1);
+				
 		
-		/** The depends on action. */
-		private final Action fDependsOnAction;
-
-		/** The auto granted actions. */
-		private Set<Action> fAutoGrantedActions;
-
-		/** The auto denied actions. */
-		private Set<Action> fAutoDeniedActions;
+		private final int weight;
 
 		/**
 		 * Instantiates a new action.
 		 */
-		private Action() {
-			this(null);
+		private Action(int weight) {
+			this.weight = weight;
+		}
+		
+		public int getWeight() {
+			return weight;
 		}
 
-		/**
-		 * Instantiates a new action.
-		 *
-		 * @param dependsOnAction
-		 *            the depends on action
-		 */
-		private Action(Action dependsOnAction) {
-			fDependsOnAction = dependsOnAction;
-		}
-
-		/**
-		 * By name.
-		 *
-		 * @param value
-		 *            the value
-		 * @return the action
-		 */
-		public static Action byName(String value) {
-			if (value != null) {
-				for (Action item : values()) {
-					if (value.equalsIgnoreCase(item.toString())) {
-						return item;
-					}
-				}
-			}
-			return null;
-		}
-
-		/**
-		 * Check auto granted actions.
-		 */
-		private void checkAutoGrantedActions() {
-			if (fAutoGrantedActions == null) {
-				fAutoGrantedActions = new HashSet<Action>();
-				if (fDependsOnAction != null) {
-					fAutoGrantedActions.add(fDependsOnAction);
-					fAutoGrantedActions.addAll(fDependsOnAction.getAutoGrantedActions());
-				}
-			}
-		}
-
-		/**
-		 * Check auto denied actions.
-		 */
-		private void checkAutoDeniedActions() {
-			if (fAutoDeniedActions == null) {
-				fAutoDeniedActions = new HashSet<Action>();
-				for (Action checkAction : values()) {
-					if (this.equals(checkAction.fDependsOnAction)) {
-						fAutoDeniedActions.add(checkAction);
-						fAutoDeniedActions.addAll(checkAction.getAutoDeniedActions());
-					}
-				}
-			}
-		}
-
-		/**
-		 * Checks for auto granted actions.
-		 *
-		 * @return true, if successful
-		 */
-		public boolean hasAutoGrantedActions() {
-			checkAutoGrantedActions();
-			return !fAutoGrantedActions.isEmpty();
-		}
-
-		/**
-		 * Gets the auto granted actions.
-		 *
-		 * @return the auto granted actions
-		 */
-		public Set<Action> getAutoGrantedActions() {
-			checkAutoGrantedActions();
-			return fAutoGrantedActions;
-		}
-
-		/**
-		 * Checks for auto denied actions.
-		 *
-		 * @return true, if successful
-		 */
-		public boolean hasAutoDeniedActions() {
-			checkAutoDeniedActions();
-			return !fAutoDeniedActions.isEmpty();
-		}
-
-		/**
-		 * Gets the auto denied actions.
-		 *
-		 * @return the auto denied actions
-		 */
-		public Set<Action> getAutoDeniedActions() {
-			checkAutoDeniedActions();
-			return fAutoDeniedActions;
-		}
-	}
-
-	/**
-	 * The Enum PermissionResult.
-	 */
-	public static enum PermissionResult {
-
-		/** The explicit granted. */
-		EXPLICIT_GRANTED(true, true),
-
-		/** The explicit denied. */
-		EXPLICIT_DENIED(true, false),
-
-		/** The implicit denied. */
-		IMPLICIT_DENIED(false, false);
-
-		/** The permitted. */
-		private final boolean fPermitted;
-
-		/** The explicit. */
-		private final boolean fExplicit;
-
-		/**
-		 * Instantiates a new permission result.
-		 *
-		 * @param explicit
-		 *            the explicit
-		 * @param permitted
-		 *            the permitted
-		 */
-		private PermissionResult(boolean explicit, boolean permitted) {
-			fExplicit = explicit;
-			fPermitted = permitted;
-		}
-
-		/**
-		 * Checks if is explicit.
-		 *
-		 * @return true, if is explicit
-		 */
-		public boolean isExplicit() {
-			return fExplicit;
-		}
-
-		/**
-		 * Checks if is permitted.
-		 *
-		 * @return true, if is permitted
-		 */
-		public boolean isPermitted() {
-			return fPermitted;
-		}
 	}
 }
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/AbstractOrgElement.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/AbstractOrgElement.java
index 6ba7d66..fab8cf1 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/AbstractOrgElement.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/AbstractOrgElement.java
@@ -13,7 +13,6 @@
 package org.eclipse.osbp.ui.api.useraccess;
 
 
-// TODO: Auto-generated Javadoc
 /**
  * The Class APosition.
  */
@@ -33,6 +32,9 @@
 
 	/** The name of the node. */
 	private String name;
+	
+	/** The link alias. */
+	private String linkAlias;
 
 	public IOrgElement getSuperOrdinate() {
 		return superOrdinate;
@@ -59,6 +61,17 @@
 	public void setName(String name) {
 		this.name = name;
 	}
+	
+	@Override
+	public String getLinkAlias() {
+		return linkAlias;
+	}
+	
+	public void setLinkAlias(String linkAlias) {
+		this.linkAlias = linkAlias;
+	}
+	
+	
 
 	/*
 	 * (non-Javadoc)
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/AbstractPosition.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/AbstractPosition.java
index 2974937..7443897 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/AbstractPosition.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/AbstractPosition.java
@@ -13,10 +13,7 @@
 package org.eclipse.osbp.ui.api.useraccess;
 
 import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
 
-// TODO: Auto-generated Javadoc
 /**
  * The Class APosition.
  */
@@ -25,25 +22,7 @@
 	/** The Constant serialVersionUID. */
 	private static final long serialVersionUID = 8654353192167477349L;
 
-	/** The role names. */
-	private Set<String> roleNames = new HashSet<>();
-
-	/** The permission list. */
-	private IPermissionList permissions;
-
-	public void setRoles(Set<String> roles) {
-		this.roleNames = roles;
-	}
-
-	/**
-	 * Adds a role
-	 *
-	 * @param role
-	 *            the role
-	 */
-	public void addRole(String role) {
-		roleNames.add(role);
-	}
+	private AbstractAuthorization authorization;
 
 	/**
 	 * Gets the roles.
@@ -51,15 +30,17 @@
 	 * @return the roles
 	 */
 	public Collection<String> getRoles() {
-		return roleNames;
+		return authorization.getRoles();
 	}
-
+	
 	@Override
-	public IPermissionList getPermissionList() {
-		return permissions;
+	public AbstractAuthorization getAuthorization() {
+		return authorization;
+	}
+	
+	@Override
+	public void setAuthorization(AbstractAuthorization authorization) {
+		this.authorization = authorization;
 	}
 
-	public void setPermissionList(IPermissionList permissions) {
-		this.permissions = permissions;
-	}
 }
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/AbstractSubOrganization.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/AbstractSubOrganization.java
index f3484ce..d2a7956 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/AbstractSubOrganization.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/AbstractSubOrganization.java
@@ -17,7 +17,6 @@
 import java.util.List;
 import java.util.Map;
 
-// TODO: Auto-generated Javadoc
 /**
  * The Class ASubOrganization.
  */
@@ -26,26 +25,17 @@
 	/** The title of an organization. */
 	private String title;
 	/** The position map of all positions including of its sub organizations. */
-	private Map<String, IPosition> positionMap = new HashMap<String, IPosition>();
+	private Map<String, IPosition> positionMap = new HashMap<>();
+	
+	/** The alias map to the position map. */
+	private Map<String, IPosition> linkAliasMap = new HashMap<>();
 	/**
 	 * The position map only of the own positions without its sub organizations
 	 * .
 	 */
-	private Map<String, IPosition> ownPositionMap = new HashMap<String, IPosition>();
+	private Map<String, IPosition> ownPositionMap = new HashMap<>();
 	/** The sub organization map. */
-	private Map<String, ISubOrganization> subOrgMap = new HashMap<String, ISubOrganization>();
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.osbp.authentication.provider.ISubOrganization#getFilterValueList
-	 * ()
-	 */
-	@Override
-	public List<String> getFilterValueList() {
-		return null;
-	}
+	private Map<String, ISubOrganization> subOrgMap = new HashMap<>();
 
 	/**
 	 * Gets the title.
@@ -79,6 +69,13 @@
 		return positionMap.get(name);
 	}
 
+
+	@Override
+	public IPosition getPositionByLinkAlias(String name) {
+		addSubOrgPositions();
+		return linkAliasMap.get(name);
+	}
+
 	/*
 	 * (non-Javadoc)
 	 * 
@@ -86,7 +83,7 @@
 	 * org.eclipse.osbp.ui.api.useraccess.IOrganizationService#getPositions()
 	 */
 	@Override
-	final public Collection<IPosition> getPositions() {
+	public final Collection<IPosition> getPositions() {
 		addSubOrgPositions();
 		return positionMap.values();
 	}
@@ -101,26 +98,27 @@
 			}
 			for (IPosition subOrgPosition : subOrg.getOwnPositions()) {
 				positionMap.put(subOrgPosition.getName(), subOrgPosition);
+				linkAliasMap.put(subOrgPosition.getLinkAlias(), subOrgPosition);
 			}
 		}
 	}
 
 	@Override
-	final public Collection<IPosition> getOwnPositions() {
+	public final Collection<IPosition> getOwnPositions() {
 		return ownPositionMap.values();
 	}
 
-	final public void setPosition(IPosition position) {
+	public final void setPosition(IPosition position) {
 		positionMap.put(position.getName(), position);
+		linkAliasMap.put(position.getLinkAlias(), position);
 		ownPositionMap.put(position.getName(), position);
 	}
 
-	final public Collection<ISubOrganization> getSubOrganizations() {
+	public final Collection<ISubOrganization> getSubOrganizations() {
 		return subOrgMap.values();
 	}
 
 	public void setSubOrganization(ISubOrganization subOrg) {
 		subOrgMap.put(subOrg.getName(), subOrg);
 	}
-
 }
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/IOrgElement.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/IOrgElement.java
index 9e0e539..9576757 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/IOrgElement.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/IOrgElement.java
@@ -24,6 +24,13 @@
 	 * @return the name
 	 */
 	String getName();
+	
+	/**
+	 * Gets the link alias.
+	 *
+	 * @return the link alias
+	 */
+	String getLinkAlias();
 
 	/**
 	 * Checks for superior.
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/IPosition.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/IPosition.java
index 87f3800..28fe582 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/IPosition.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/IPosition.java
@@ -1,5 +1,20 @@
+/*
+ *                                                                            
+ *  Copyright (c) 2011 - 2017 - Loetz GmbH & Co KG, 69115 Heidelberg, Germany 
+ *                                                                            
+ *  All rights reserved. This program and the accompanying materials           
+ *  are made available under the terms of the Eclipse Public License v1.0       
+ *  which accompanies this distribution, and is available at                  
+ *  http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ *  Initial contribution:                                                      
+ *     Loetz GmbH & Co. KG                              
+ * 
+ */
 package org.eclipse.osbp.ui.api.useraccess;
 
+import java.util.Collection;
+
 public interface IPosition extends IOrgElement {
 
 	/**
@@ -7,6 +22,19 @@
 	 *
 	 * @return the permission list
 	 */
-	IPermissionList getPermissionList();
-
+	AbstractAuthorization getAuthorization();
+	
+	/**
+	 * Sets the authorization.
+	 *
+	 * @param authorization the new authorization
+	 */
+	void setAuthorization(AbstractAuthorization authorization);
+	
+	/**
+	 * Gets the roles as String collection.
+	 *
+	 * @return the roles
+	 */
+	Collection<String> getRoles();
 }
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/ISubOrganization.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/ISubOrganization.java
index 8c51dd1..5770f2e 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/ISubOrganization.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/ISubOrganization.java
@@ -22,13 +22,6 @@
 public interface ISubOrganization extends IOrgElement {
 
 	/**
-	 * Gets the filter value list.
-	 *
-	 * @return the filter value list
-	 */
-	public java.util.List getFilterValueList();
-
-	/**
 	 * Gets the position node.
 	 *
 	 * @param name
@@ -38,6 +31,13 @@
 	IPosition getPosition(final String name);
 
 	/**
+	 * Gets the position by link alias.
+	 *
+	 * @param name the name
+	 * @return the position by link alias
+	 */
+	IPosition getPositionByLinkAlias(final String name);
+	/**
 	 * Sets the position node.
 	 *
 	 * @param name
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/IUserAccessService.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/IUserAccessService.java
index 21ba4b6..13efe83 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/IUserAccessService.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/api/useraccess/IUserAccessService.java
@@ -18,8 +18,8 @@
 
 import org.eclipse.osbp.dsl.common.datatypes.IDto;
 import org.eclipse.osbp.ui.api.complexdatacontainer.IComplexDataContainer;
-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.AbstractAuthorization.Action;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Group;
 import org.eclipse.osbp.ui.api.userfilter.UserFilterMap;
 
 // TODO: Auto-generated Javadoc
@@ -46,6 +46,13 @@
 	 * @return the user
 	 */
 	IDto getUser();
+	
+	/**
+	 * Gets the user name.
+	 *
+	 * @return the user name
+	 */
+	String getUserName();
 
 	/**
 	 * Gets the profileimage id.
@@ -115,16 +122,28 @@
 	 *
 	 * @return the permissions
 	 */
-	IPermissionList getPermissions();
+	AbstractAuthorization getAuthorization();
 
 	/**
-	 * Checks if is permitted.
+	 * Checks if the given accessmode is granted.
 	 *
-	 * @param permission
-	 *            the permission
-	 * @return the permission result
+	 * @param group the group
+	 * @param action the action
+	 * @param objectDescriptor the object descriptors
+	 * @return true, if is granted
 	 */
-	PermissionResult isPermitted(Permission permission);
+	boolean isGranted(Group group, Action action, String objectDescriptor);
+
+	/**
+	 * Checks if property is vetoed, means if a property is invisible, etc.
+	 *
+	 * @param group the group
+	 * @param action the action
+	 * @param objectDescriptor the object descriptor
+	 * @param propertyDescriptor the property descriptor
+	 * @return true, if is vetoed
+	 */
+	boolean isVetoed(Group group, Action action, String objectDescriptor, String propertyDescriptor);
 
 	/**
 	 * Checks if is authenticated.
@@ -274,7 +293,7 @@
 	 *            the username
 	 * @return the i permission list
 	 */
-	IPermissionList findPermissionsForUser(String username);
+	AbstractAuthorization findPermissionsForUser(String username);
 
 	/**
 	 * Check user name uniqueness for logged in users.
diff --git a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/initialization/AbstractInitializationListener.java b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/initialization/AbstractInitializationListener.java
index 9be66a8..f038d26 100644
--- a/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/initialization/AbstractInitializationListener.java
+++ b/org.eclipse.osbp.ui.api/src/org/eclipse/osbp/ui/initialization/AbstractInitializationListener.java
@@ -29,7 +29,7 @@
 		}
 	}
 
-	private Set<IInitializationProvider> initializationProviders = new HashSet<IInitializationProvider>();
+	private Set<IInitializationProvider> initializationProviders = new HashSet<>();
 	
 	/* (non-Javadoc)
 	 * @see org.eclipse.osbp.ui.initialization.IInitializationListener#bindInitializationProvider(org.eclipse.osbp.ui.initialization.AbstractInitializationProvider)