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 1ff5579..a4b1e40 100644
--- a/jenkins.build.config.xml
+++ b/jenkins.build.config.xml
@@ -16,11 +16,11 @@
 	<!-- DO NOT EDIT BELOW THIS LINE -->
         <jenkins.build.dependencies>
                 <jenkins.build.dependency>org.eclipse.osbp.bpm.api</jenkins.build.dependency>
+                <jenkins.build.dependency>org.eclipse.osbp.core.api</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.dsl</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.ecview.extension</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.ecview.extension.api</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.eventbroker</jenkins.build.dependency>
-                <jenkins.build.dependency>org.eclipse.osbp.persistence</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.preferences</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.runtime</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.runtime.web</jenkins.build.dependency>
diff --git a/org.eclipse.osbp.osgi.hybrid.api.feature/.gitignore b/org.eclipse.osbp.osgi.hybrid.api.feature/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.osgi.hybrid.api.feature/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.osgi.hybrid.api.feature/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.osgi.hybrid.api.feature/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.osgi.hybrid.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.osgi.hybrid.api.feature/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.osgi.hybrid.api.feature/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.osgi.hybrid.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.osgi.hybrid.api.feature/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.osgi.hybrid.api.feature/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.osgi.hybrid.api.feature/.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.osgi.hybrid.api.feature/feature.xml b/org.eclipse.osbp.osgi.hybrid.api.feature/feature.xml
index 99c2a80..64aac3e 100644
--- a/org.eclipse.osbp.osgi.hybrid.api.feature/feature.xml
+++ b/org.eclipse.osbp.osgi.hybrid.api.feature/feature.xml
@@ -14,7 +14,8 @@
         id="org.eclipse.osbp.osgi.hybrid.api.feature"
         label="%featureName"
         version="0.9.0.qualifier"
-        provider-name="%providerName">
+        provider-name="%providerName"
+		plugin="org.eclipse.osbp.osgi.hybrid.api">
         
     <description>
         %description
diff --git a/org.eclipse.osbp.osgi.hybrid.api.feature/pom.xml b/org.eclipse.osbp.osgi.hybrid.api.feature/pom.xml
index 7464a40..fa15f87 100644
--- a/org.eclipse.osbp.osgi.hybrid.api.feature/pom.xml
+++ b/org.eclipse.osbp.osgi.hybrid.api.feature/pom.xml
@@ -72,6 +72,13 @@
     </build>
 
     <dependencies>
+		<dependency>
+			<groupId>org.eclipse.osbp.dependencies</groupId>
+			<artifactId>
+				org.eclipse.osbp.dependencies.bundle.activemq.all.osgi
+			</artifactId>
+			<version>5.14.5-SNAPSHOT</version>
+		</dependency>
         <dependency>
             <groupId>org.eclipse.osbp.osgi.hybrid.api</groupId>
             <artifactId>org.eclipse.osbp.osgi.hybrid.api</artifactId>
diff --git a/org.eclipse.osbp.osgi.hybrid.api/.classpath b/org.eclipse.osbp.osgi.hybrid.api/.classpath
new file mode 100644
index 0000000..43b9862
--- /dev/null
+++ b/org.eclipse.osbp.osgi.hybrid.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.osgi.hybrid.api/.gitignore b/org.eclipse.osbp.osgi.hybrid.api/.gitignore
new file mode 100644
index 0000000..09e3bc9
--- /dev/null
+++ b/org.eclipse.osbp.osgi.hybrid.api/.gitignore
@@ -0,0 +1,2 @@
+/bin/
+/target/
diff --git a/org.eclipse.osbp.osgi.hybrid.api/.settings/com.vaadin.integration.eclipse.prefs b/org.eclipse.osbp.osgi.hybrid.api/.settings/com.vaadin.integration.eclipse.prefs
new file mode 100644
index 0000000..0904e44
--- /dev/null
+++ b/org.eclipse.osbp.osgi.hybrid.api/.settings/com.vaadin.integration.eclipse.prefs
@@ -0,0 +1,2 @@
+com.vaadin.integration.eclipse.mavenLatestVersionsUpgrade=["7.7.7"]
+eclipse.preferences.version=1
diff --git a/org.eclipse.osbp.osgi.hybrid.api/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.osgi.hybrid.api/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.osgi.hybrid.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.osgi.hybrid.api/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.osgi.hybrid.api/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..a698e59
--- /dev/null
+++ b/org.eclipse.osbp.osgi.hybrid.api/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.osbp.osgi.hybrid.api/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.osgi.hybrid.api/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.osgi.hybrid.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.osgi.hybrid.api/.settings/org.eclipse.pde.core.prefs b/org.eclipse.osbp.osgi.hybrid.api/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..f29e940
--- /dev/null
+++ b/org.eclipse.osbp.osgi.hybrid.api/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/org.eclipse.osbp.osgi.hybrid.api/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.osgi.hybrid.api/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.osgi.hybrid.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.osgi.hybrid.api/META-INF/MANIFEST.MF b/org.eclipse.osbp.osgi.hybrid.api/META-INF/MANIFEST.MF
index 89f7a1f..566119c 100644
--- a/org.eclipse.osbp.osgi.hybrid.api/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.osgi.hybrid.api/META-INF/MANIFEST.MF
@@ -1,38 +1,37 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: org.eclipse.osbp.osgi.hybrid.api
-Bundle-SymbolicName: org.eclipse.osbp.osgi.hybrid.api;singleton:=true
+Bundle-SymbolicName: org.eclipse.osbp.osgi.hybrid.api
 Bundle-Version: 0.9.0.qualifier
 Bundle-Vendor: Eclipse OSBP
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.slf4j.api;bundle-version="1.7.2",
  org.apache.log4j,
- com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
+ com.vaadin.server;bundle-version="[7.7.6,7.8.0)",
  javax.inject;bundle-version="1.0.0",
- javax.annotation;bundle-version="[1.1.0,1.2.0)",
  org.apache.commons.codec,
  org.eclipse.e4.core.contexts,
  org.eclipse.e4.core.services,
  org.eclipse.e4.ui.model.workbench,
  org.eclipse.e4.ui.workbench,
  org.eclipse.osgi.services,
- org.eclipse.core.databinding,
+ org.eclipse.core.databinding;bundle-version="[1.6.0,1.7.0)",
  org.eclipse.core.runtime,
- org.eclipse.core.databinding.beans,
+ org.eclipse.core.databinding.beans;bundle-version="[1.3.100,1.4.0)",
  org.apache.httpcomponents.httpcore,
  org.apache.httpcomponents.httpclient,
  org.jsoup,
  org.eclipse.osbp.runtime.web.vaadin.databinding;bundle-version="[0.9.0,0.10.0)",
- refresher.osgi;bundle-version="[1.2.3.7,1.2.4)",
+ refresher.osgi;bundle-version="[1.2.3,1.2.4)",
  org.eclipse.osbp.preferences;bundle-version="[0.9.0,0.10.0)",
  org.eclipse.osbp.webserver.messagequeue;bundle-version="[0.9.0,0.10.0)",
- org.eclipse.osbp.persistence;bundle-version="[0.9.0,0.10.0)",
- org.eclipse.osbp.utils;bundle-version="[0.9.0,0.10.0)",
  org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)",
  org.eclipse.osbp.dsl.dto.lib;bundle-version="[0.9.0,0.10.0)",
- org.eclipse.osbp.gitinfo;bundle-version="[0.9.0,0.10.0)"
+ org.eclipse.osbp.gitinfo;bundle-version="[0.9.0,0.10.0)",
+ com.vaadin.shared;bundle-version="[7.7.6,7.8.0)"
 Export-Package: org.eclipse.osbp.osgi.hybrid.api;version="0.9.0"
-Import-Package: javax.jms;version="1.1.0",
+Import-Package: javax.annotation,
+ javax.jms;version="1.1.0",
  org.apache.commons.lang3,
  org.eclipse.e4.core.di.annotations,
  org.eclipse.e4.core.di.extensions,
@@ -40,14 +39,17 @@
  org.eclipse.emf.ecore,
  org.eclipse.emf.ecore.util,
  org.eclipse.osbp.bpm.api;version="0.9.0",
+ org.eclipse.osbp.core.api.persistence;version="0.9.0",
  org.eclipse.osbp.dsl.common.datatypes;version="0.9.0",
  org.eclipse.osbp.ecview.extension.api;version="0.9.0",
  org.eclipse.osbp.ecview.extension.model;version="0.9.0",
  org.eclipse.osbp.ecview.extension.strategy;version="0.9.0",
  org.eclipse.osbp.eventbroker;version="0.9.0",
  org.eclipse.osbp.ui.api.themes;version="0.9.0",
- org.eclipse.osbp.ui.api.useraccess,
+ org.eclipse.osbp.ui.api.useraccess;version="0.9.0",
+ org.eclipse.osbp.utils.session;version="0.9.0",
  org.osgi.service.event;version="1.3.0"
 Bundle-Activator: org.eclipse.osbp.osgi.hybrid.api.Activator
 Service-Component: OSGI-INF/*.xml
 Bundle-ActivationPolicy: lazy
+Bundle-ClassPath: .
diff --git a/org.eclipse.osbp.osgi.hybrid.api/build.properties b/org.eclipse.osbp.osgi.hybrid.api/build.properties
index 72a2fec..20e4ef5 100644
--- a/org.eclipse.osbp.osgi.hybrid.api/build.properties
+++ b/org.eclipse.osbp.osgi.hybrid.api/build.properties
@@ -1,6 +1,10 @@
 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/,\
                .,\
                OSGI-INF/,\
                .classpath,\
diff --git a/org.eclipse.osbp.osgi.hybrid.api/pom.xml b/org.eclipse.osbp.osgi.hybrid.api/pom.xml
index c9c648e..167766e 100644
--- a/org.eclipse.osbp.osgi.hybrid.api/pom.xml
+++ b/org.eclipse.osbp.osgi.hybrid.api/pom.xml
@@ -20,4 +20,13 @@
     </parent>
     <artifactId>org.eclipse.osbp.osgi.hybrid.api</artifactId>
     <packaging>eclipse-plugin</packaging>
+	<dependencies>
+		<dependency>
+			<groupId>org.eclipse.osbp.dependencies</groupId>
+			<artifactId>
+				org.eclipse.osbp.dependencies.bundle.activemq.all.osgi
+			</artifactId>
+			<version>5.14.5-SNAPSHOT</version>
+		</dependency>
+	</dependencies>
 </project>
diff --git a/org.eclipse.osbp.osgi.hybrid.api/src/org/eclipse/osbp/osgi/hybrid/api/AbstractHybridVaaclipseView.java b/org.eclipse.osbp.osgi.hybrid.api/src/org/eclipse/osbp/osgi/hybrid/api/AbstractHybridVaaclipseView.java
index 56e7016..66be602 100644
--- a/org.eclipse.osbp.osgi.hybrid.api/src/org/eclipse/osbp/osgi/hybrid/api/AbstractHybridVaaclipseView.java
+++ b/org.eclipse.osbp.osgi.hybrid.api/src/org/eclipse/osbp/osgi/hybrid/api/AbstractHybridVaaclipseView.java
@@ -13,8 +13,6 @@
 package org.eclipse.osbp.osgi.hybrid.api;
 
 import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -23,33 +21,24 @@
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 
-import org.apache.commons.lang3.StringUtils;
 import org.eclipse.e4.core.contexts.IEclipseContext;
-import org.eclipse.e4.core.di.extensions.EventUtils;
 import org.eclipse.e4.core.services.events.IEventBroker;
 import org.eclipse.e4.ui.model.application.MApplication;
 import org.eclipse.e4.ui.model.application.ui.MUIElement;
 import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
-import org.eclipse.e4.ui.workbench.modeling.EModelService;
 import org.eclipse.e4.ui.workbench.modeling.EPartService;
 import org.eclipse.e4.ui.workbench.modeling.IPartListener;
 import org.eclipse.osbp.bpm.api.IBlipBPMConstants;
+import org.eclipse.osbp.core.api.persistence.IPersistenceService;
 import org.eclipse.osbp.dsl.common.datatypes.IDto;
-import org.eclipse.osbp.eventbroker.EventBrokerMsg;
-import org.eclipse.osbp.persistence.IPersistenceService;
 import org.eclipse.osbp.runtime.web.vaadin.databinding.VaadinObservables;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
-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;
 import org.eclipse.osbp.ui.api.useraccess.AbstractPosition;
-import org.eclipse.osbp.ui.api.useraccess.IPermissionList;
-import org.eclipse.osbp.utils.common.IEntityIdModificationListenerView;
 import org.eclipse.osbp.webserver.messagequeue.ECXMqMessageAttribute;
 import org.eclipse.osbp.webserver.messagequeue.ECXMqMessageEvent;
-import org.osgi.service.event.Event;
-import org.osgi.service.event.EventHandler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -60,7 +49,7 @@
 import com.vaadin.ui.UI;
 import com.vaadin.ui.VerticalLayout;
 
-public abstract class AbstractHybridVaaclipseView implements IHybridVaadinVaaclipseListener, IPartListener, IEntityIdModificationListenerView {
+public abstract class AbstractHybridVaaclipseView implements IHybridVaadinVaaclipseListener, IPartListener {
 	
 	@Inject
 	IEventBroker eventBroker;
@@ -68,37 +57,24 @@
 	@Inject
 	protected IPersistenceService persistenceService;
 
-	//
-	// @Inject
-	// private AbstractBlipBPMFunctionProvider taskProvider;
-	//
-	// @Inject
-	// protected IBPMTaskClient taskClient;
-	//
-	// private String workloadDtoFqn;
-	// private IDto initialWorkloadDto;
-	// private Class<?> operativeDtoClass;
-	// private List<IDto> initialOperativeDtos;
-
 	private static final Logger LOGGER = LoggerFactory.getLogger(AbstractHybridVaaclipseView.class);
 
-	public static enum RenderMode {
+	public enum RenderMode {
 		SYNCHRONOUSLY, ASYNCHRONOUSLY
 	}
 
-	private final IEclipseContext fEclipseContext;
-	private final MApplication fE4App;
-	private final VerticalLayout fParent;
+	private IEclipseContext fEclipseContext;
+	private MApplication fE4App;
+	private VerticalLayout fParent;
 	private boolean fViewInitialized;
-	protected final EventHandler fModifiedEntityIdsListener;
-	private Map<String, Set<Object>> fListeningForEntityIdsModifications = new HashMap<>();
 
-	private RenderMode renderMode = RenderMode.ASYNCHRONOUSLY;
+	private RenderMode renderMode = RenderMode.SYNCHRONOUSLY;
 	private boolean firstTime = true;
 	private int pollingInterval = 2000;
 
 	private RecursiveFocusBlurListener fRecursiveFocusBlurListener;
 
+	public AbstractHybridVaaclipseView() {}
 	/**
 	 * <b><i><u>Warning:</u> never use initializing class attributes in the definition!<br>
 	 * Due to Java specific internals the overriden method createView() will be called before that initializing will be done!<br>
@@ -113,24 +89,6 @@
 		fEclipseContext = context;
 		fViewInitialized = false;
 		fParent = parent;
-		fModifiedEntityIdsListener = new EventHandler() {
-
-			@Override
-			public void handleEvent(Event event) {
-				Object data = event.getProperty(EventUtils.DATA);
-				// --- only if data contains an event broker message ---
-				if (data instanceof EventBrokerMsg) {
-					EventBrokerMsg eventBrokerMsg = (EventBrokerMsg) data;
-					// eventBrokerMsg.getInt() == 1 means INSERT and no id check is required
-					// otherwise it is an UPDATE and a id check is mandatory
-					if (eventBrokerMsg.getInt() == 1) {
-						refreshViewDueToModifiedEntityId(eventBrokerMsg.getName(), eventBrokerMsg.getId());
-					} else {
-						checkOnModifiedEntityId(eventBrokerMsg, true);
-					}
-				}
-			}
-		};
 		fRecursiveFocusBlurListener = RecursiveFocusBlurListener.attachFor(fParent);
 	}
 
@@ -161,97 +119,6 @@
 		area.addComponent(msg);
 	}
 
-	private String beautifyEntityName(String entityName) {
-		return StringUtils.strip(entityName.replace('.', '/'), "/").toLowerCase();
-	}
-
-	private Object beautifyEntityId(Object id) {
-		if (id instanceof String) {
-			id = ((String) id).trim();
-			try {
-				Double.parseDouble((String) id);
-				// --- if it's a double ---
-				id = StringUtils.removeEnd((String) id, "0");
-				id = StringUtils.removeEnd((String) id, ".");
-			} catch (Exception e) {
-				// NOTHING CAN BE DONE
-			}
-		}
-		return id;
-	}
-
-	@Override
-	public void resetListeningForEntityIdsModifications() {
-		fListeningForEntityIdsModifications = null;
-	}
-
-	public boolean broadcastEntityIdModified(String packageName, String entityName, String id) {
-		if (eventBroker != null) {
-			return eventBroker.send(EventBrokerMsg.REFRESH_VIEW + EventBrokerMsg.getEntityIdModifiedCategory(packageName, entityName), new EventBrokerMsg(id, entityName));
-		} else {
-			return false;
-		}
-	}
-
-	@Override
-	public boolean checkOnModifiedEntityId(EventBrokerMsg message, boolean doRefresh) {
-		return checkOnModifiedEntityId(message.getName(), message.getId(), doRefresh);
-	}
-
-	@Override
-	public boolean checkOnModifiedEntityId(String entityName, Object id, boolean doRefresh) {
-		// --- check if the entity sent is known ---
-		entityName = beautifyEntityName(entityName);
-		id = beautifyEntityId(id);
-		Set<Object> ids = fListeningForEntityIdsModifications.get(entityName);
-		if (ids instanceof Set) {
-			// --- if the id for that entity is known ---
-			if (ids.contains(id)) {
-				// --- force refresh of the report ---
-				if (doRefresh) {
-					refreshViewDueToModifiedEntityId(entityName, id);
-				}
-				return true;
-			}
-		}
-		return false;
-	}
-
-	@Override
-	public void refreshViewDueToModifiedEntityId(String entity, Object id) {
-		addEntityIdToModifyListener(entity, id);
-	}
-
-	@Override
-	public void addEntityIdToModifyListener(String entityName, Object id) {
-		// --- build the entity map if necessary ---
-		if (fListeningForEntityIdsModifications == null) {
-			fListeningForEntityIdsModifications = new HashMap<>();
-		}
-		entityName = beautifyEntityName(entityName);
-		Set<Object> ids = fListeningForEntityIdsModifications.get(entityName);
-		// --- build the ids set if necessary ---
-		if (ids == null) {
-			ids = new HashSet<>();
-			fListeningForEntityIdsModifications.put(entityName, ids);
-		}
-		// --- put the primary key ---
-		ids.add(beautifyEntityId(id));
-	}
-
-	@Override
-	public void removeEntityIdFromModifyListener(String entityName, Object id) {
-		// --- build the entity map if necessary ---
-		if (fListeningForEntityIdsModifications != null) {
-			Set<Object> ids = fListeningForEntityIdsModifications.get(beautifyEntityName(entityName));
-			// --- build the ids set if necessary ---
-			if (ids != null) {
-				// --- put the primary key ---
-				ids.remove(id);
-			}
-		}
-	}
-
 	public final MApplication getApplication() {
 		return fE4App;
 	}
@@ -265,7 +132,7 @@
 	}
 
 	public final MPart getPart() {
-		return (MPart) fEclipseContext.get(MPart.class);
+		return fEclipseContext.get(MPart.class);
 	}
 
 	public final String getProcessWorkloadDtoFqn() {
@@ -284,6 +151,7 @@
 		return (String) getTransientDataVariable(IBlipBPMConstants.VARIABLE_TASK_OPERATIVE_DTO_FQN);
 	}
 
+	@SuppressWarnings("unchecked")
 	public final List<IDto> getTaskInitialOperativeDtos() {
 		return (List<IDto>) getTransientDataVariable(IBlipBPMConstants.VARIABLE_TASK_OPERATIVE_DTOS);
 	}
@@ -308,7 +176,7 @@
 	}
 
 	public final IPersistenceService getPersistenceService() {
-		return (IPersistenceService) fEclipseContext.get(IPersistenceService.class);
+		return fEclipseContext.get(IPersistenceService.class);
 	}
 
 	protected final boolean isViewInitialized() {
@@ -321,9 +189,9 @@
 	 * 
 	 * @param parent
 	 */
-	abstract protected void createView(final VerticalLayout parent);
+	protected abstract void createView(final VerticalLayout parent);
 
-	abstract protected void createComponents();
+	protected abstract void createComponents();
 
 	// renderData is used for components that are not fully embedded in vaadin's connector structure
 	// and must be repainted when parent window resizes
@@ -366,14 +234,14 @@
 		}
 	}
 
-	private IThemeResourceService getThemeResourceService() {
+	public IThemeResourceService getThemeResourceService() {
 		if (fEclipseContext.containsKey(IThemeResourceService.class)) {
 			return fEclipseContext.get(IThemeResourceService.class);
 		}
 		return null;
 	}
 
-	private EPartService getPartService() {
+	public EPartService getPartService() {
 		if (fEclipseContext.containsKey(EPartService.class)) {
 			return fEclipseContext.get(EPartService.class);
 		}
@@ -381,16 +249,18 @@
 	}
 
 	protected void preInit() {
-		getPartService().addPartListener(this);
-		HybridVaadinVaaclipseConnector.instance(fEclipseContext).addListener(this);
-		HybridVaadinVaaclipseConnector.instance(fEclipseContext).setE4Application(fE4App);
+		EPartService partService = getPartService();
+		if(partService != null) {
+			partService.addPartListener(this);
+			HybridVaadinVaaclipseConnector.instance(fEclipseContext).addListener(this);
+			HybridVaadinVaaclipseConnector.instance(fEclipseContext).setE4Application(fE4App);
+		}
 	}
 
 	@PreDestroy
 	public void preDestroy() {
 		fRecursiveFocusBlurListener.detach();
 		HybridVaadinVaaclipseConnector.instance(fEclipseContext).removeListener(this);
-		fListeningForEntityIdsModifications = null;
 	}
 
 	/**
@@ -410,6 +280,7 @@
 	 * @param authenticated
 	 *            true if the user is authenticated now!
 	 */
+	@Override
 	public void setAuthenticated(boolean authenticated) {
 		// now send the list of perspectives
 		HybridVaadinVaaclipseConnector.instance(fEclipseContext).updatePerspectiveList();
@@ -431,12 +302,8 @@
 		return HybridVaadinVaaclipseConnector.instance(fEclipseContext).getRoles();
 	}
 
-	protected final IPermissionList getAuthenticatedPermissions() {
-		return HybridVaadinVaaclipseConnector.instance(fEclipseContext).getPermissions();
-	}
-
-	protected final PermissionResult isAuthenticatedPermitted(Permission permission) {
-		return HybridVaadinVaaclipseConnector.instance(fEclipseContext).isPermitted(permission);
+	protected final AbstractAuthorization getAuthenticatedPermissions() {
+		return HybridVaadinVaaclipseConnector.instance(fEclipseContext).getAuthorization();
 	}
 
 	protected final Set<String> getAllUsers() {
@@ -473,18 +340,15 @@
 	public final boolean onMessage(ECXMqMessageEvent event, Map<ECXMqMessageAttribute, Object> body) {
 		boolean retcode = false;
 		switch (event) {
-		// !!! handled by connector ...
-		case TRY_AUTHENTICATE:
-		case DISPOSE:
-		case LOGOUT:
-			break;
-		// ... handled by connector !!!
 		case FOCUS_PERSPECTIVE:
 			retcode = HybridVaadinVaaclipseConnector.instance(fEclipseContext).onFocusPerspective(body.get(ECXMqMessageAttribute.PERSPECTIVE_ID).toString());
 			break;
 		case REQUEST_ICON:
 			retcode = HybridVaadinVaaclipseConnector.instance(fEclipseContext).requestIcon(body.get(ECXMqMessageAttribute.PERSPECTIVE_ID).toString());
 			break;
+		case TRY_AUTHENTICATE:
+		case DISPOSE:
+		case LOGOUT:
 		default:
 			break;
 		}
@@ -498,7 +362,7 @@
 		if (active instanceof MPerspective) {
 			HybridVaadinVaaclipseConnector.instance(fEclipseContext).updatePerspectiveList();
 			HybridVaadinVaaclipseConnector.instance(fEclipseContext).updateFocusPerspective(active.getElementId());
-		} else if ((part != null || getPartService().getActivePart() != null)) {
+		} else if (part != null || getPartService().getActivePart() != null) {
 			LOGGER.debug("part activated:" + (part == null ? "<null>" : part.getElementId() + " '" + part.getLabel() + "'"));
 			List<MPerspective> existing = HybridVaadinVaaclipseConnector.instance(fEclipseContext).findPerspectives();
 			for (MPerspective perspective : existing) {
diff --git a/org.eclipse.osbp.osgi.hybrid.api/src/org/eclipse/osbp/osgi/hybrid/api/HybridVaadinVaaclipseConnector.java b/org.eclipse.osbp.osgi.hybrid.api/src/org/eclipse/osbp/osgi/hybrid/api/HybridVaadinVaaclipseConnector.java
index 35eebf8..125523c 100644
--- a/org.eclipse.osbp.osgi.hybrid.api/src/org/eclipse/osbp/osgi/hybrid/api/HybridVaadinVaaclipseConnector.java
+++ b/org.eclipse.osbp.osgi.hybrid.api/src/org/eclipse/osbp/osgi/hybrid/api/HybridVaadinVaaclipseConnector.java
@@ -43,10 +43,8 @@
 import org.eclipse.osbp.osgi.hybrid.api.IEventForNextRefresh.TryToAuthenticate;
 import org.eclipse.osbp.preferences.ProductConfiguration;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
-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;
 import org.eclipse.osbp.ui.api.useraccess.AbstractPosition;
-import org.eclipse.osbp.ui.api.useraccess.IPermissionList;
 import org.eclipse.osbp.ui.api.useraccess.IUserAccessService;
 import org.eclipse.osbp.utils.session.VaadinSessionAttributes;
 import org.eclipse.osbp.webserver.messagequeue.CXMqConsumer;
@@ -614,25 +612,12 @@
 	/**
 	 * @return the permission list for the authenticated session, otherwise null
 	 */
-	public IPermissionList getPermissions() {
+	public AbstractAuthorization getAuthorization() {
 		if 	(HybridServiceBinder.getUserAccessService() == null) {
 			return null;
 		}
 		else {
-			return HybridServiceBinder.getUserAccessService().getPermissions();
-		}
-	}
-
-	/**
-	 * @param permission the permission to be checked
-	 * @return true if the permission is permitted for the actual session
-	 */
-	public PermissionResult isPermitted(Permission permission) {
-		if 	(HybridServiceBinder.getUserAccessService() == null) {
-			return null;
-		}
-		else {
-			return HybridServiceBinder.getUserAccessService().isPermitted(permission);
+			return HybridServiceBinder.getUserAccessService().getAuthorization();
 		}
 	}
 
@@ -729,7 +714,7 @@
 	 * @param username name of the user
 	 * @return the permission list for the user; null will be returned if the session is not authenticated
 	 */
-	public IPermissionList findPermissionsForUser(String username) {
+	public AbstractAuthorization findPermissionsForUser(String username) {
 		if	(!isAuthenticated()) {
 			return null;
 		}
diff --git a/org.eclipse.osbp.osgi.hybrid.api/src/org/eclipse/osbp/osgi/hybrid/api/IHybridVaadinVaaclipseListener.java b/org.eclipse.osbp.osgi.hybrid.api/src/org/eclipse/osbp/osgi/hybrid/api/IHybridVaadinVaaclipseListener.java
index d61f7f7..63e45cb 100644
--- a/org.eclipse.osbp.osgi.hybrid.api/src/org/eclipse/osbp/osgi/hybrid/api/IHybridVaadinVaaclipseListener.java
+++ b/org.eclipse.osbp.osgi.hybrid.api/src/org/eclipse/osbp/osgi/hybrid/api/IHybridVaadinVaaclipseListener.java
@@ -16,4 +16,4 @@
 
 public interface IHybridVaadinVaaclipseListener extends ICXMqMessageListener {
 	void setAuthenticated(boolean authenticated);
-}
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.osgi.hybrid.api/src/org/eclipse/osbp/osgi/hybrid/api/RecursiveFocusBlurListener.java b/org.eclipse.osbp.osgi.hybrid.api/src/org/eclipse/osbp/osgi/hybrid/api/RecursiveFocusBlurListener.java
index fe236af..739e408 100644
--- a/org.eclipse.osbp.osgi.hybrid.api/src/org/eclipse/osbp/osgi/hybrid/api/RecursiveFocusBlurListener.java
+++ b/org.eclipse.osbp.osgi.hybrid.api/src/org/eclipse/osbp/osgi/hybrid/api/RecursiveFocusBlurListener.java
@@ -21,6 +21,7 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.eclipse.osbp.ui.api.themes.EnumCssClass;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -42,9 +43,6 @@
 import com.vaadin.ui.HasComponents.ComponentDetachEvent;
 import com.vaadin.ui.HasComponents.ComponentDetachListener;
 
-import org.eclipse.osbp.utils.theme.EnumCssClass;
-
-
 public class RecursiveFocusBlurListener implements ComponentAttachListener, ComponentDetachListener {
 
 	private static final Logger LOGGER = LoggerFactory.getLogger(RecursiveFocusBlurListener.class);
