catch up with development
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/jenkins.build.config.xml b/jenkins.build.config.xml
index 545c3ce..4611cbd 100644
--- a/jenkins.build.config.xml
+++ b/jenkins.build.config.xml
@@ -15,8 +15,8 @@
 <jenkins>
 	<!-- DO NOT EDIT BELOW THIS LINE -->
         <jenkins.build.dependencies>
+                <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.persistence</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.ui.api</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.utils</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.vaaclipse</jenkins.build.dependency>
diff --git a/org.eclipse.osbp.bpm.api.feature/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.bpm.api.feature/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.bpm.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.bpm.api.feature/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.bpm.api.feature/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.bpm.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.bpm.api.feature/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.bpm.api.feature/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.bpm.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.bpm.api.feature/feature.xml b/org.eclipse.osbp.bpm.api.feature/feature.xml
index 27f752e..bee42d2 100644
--- a/org.eclipse.osbp.bpm.api.feature/feature.xml
+++ b/org.eclipse.osbp.bpm.api.feature/feature.xml
@@ -14,7 +14,8 @@
         id="org.eclipse.osbp.bpm.api.feature"
         label="%featureName"
         version="0.9.0.qualifier"
-        provider-name="%providerName">
+        provider-name="%providerName"
+		plugin="org.eclipse.osbp.bpm.api">
         
     <description>
         %description
diff --git a/org.eclipse.osbp.bpm.api/.classpath b/org.eclipse.osbp.bpm.api/.classpath
new file mode 100644
index 0000000..43b9862
--- /dev/null
+++ b/org.eclipse.osbp.bpm.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.bpm.api/.project b/org.eclipse.osbp.bpm.api/.project
index d7b38fb..ac1fb95 100644
--- a/org.eclipse.osbp.bpm.api/.project
+++ b/org.eclipse.osbp.bpm.api/.project
@@ -6,11 +6,6 @@
 	</projects>
 	<buildSpec>
 		<buildCommand>
-			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
 			<name>org.eclipse.jdt.core.javabuilder</name>
 			<arguments>
 			</arguments>
@@ -42,7 +37,6 @@
 		</buildCommand>
 	</buildSpec>
 	<natures>
-		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
 		<nature>org.eclipse.m2e.core.maven2Nature</nature>
 		<nature>org.eclipse.pde.PluginNature</nature>
 		<nature>org.eclipse.jdt.core.javanature</nature>
diff --git a/org.eclipse.osbp.bpm.api/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.bpm.api/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.bpm.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.bpm.api/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.bpm.api/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/org.eclipse.osbp.bpm.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.bpm.api/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.bpm.api/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.bpm.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.bpm.api/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.bpm.api/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.bpm.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.bpm.api/META-INF/MANIFEST.MF b/org.eclipse.osbp.bpm.api/META-INF/MANIFEST.MF
index 85c7e32..5c0e27d 100644
--- a/org.eclipse.osbp.bpm.api/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.bpm.api/META-INF/MANIFEST.MF
@@ -4,14 +4,14 @@
 Bundle-SymbolicName: org.eclipse.osbp.bpm.api
 Bundle-Version: 0.9.0.qualifier
 Require-Bundle: org.eclipse.core.runtime,
- org.drools.api;bundle-version="5.5.1",
  org.eclipse.osbp.vaaclipse.publicapi;bundle-version="[0.9.0,0.10.0)",
- org.slf4j.api;bundle-version="1.7.2"
+ org.slf4j.api;bundle-version="1.7.2",
+ org.eclipse.osbp.ui.api
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: javax.validation;version="1.1.0.Final",
  javax.validation.constraints;version="1.1.0.Final",
+ org.eclipse.osbp.core.api.persistence;version="0.9.0",
  org.eclipse.osbp.dsl.common.datatypes;version="0.9.0",
- org.eclipse.osbp.persistence;version="0.9.0",
  org.eclipse.osbp.ui.api.user;version="0.9.0",
  org.eclipse.osbp.utils.constants;version="0.9.0"
 Export-Package: org.eclipse.osbp.bpm.api;version="0.9.0"
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/AbstractBPMEvent.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/AbstractBPMEvent.java
deleted file mode 100644
index f897436..0000000
--- a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/AbstractBPMEvent.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- *                                                                            
- *  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.bpm.api;
-
-import java.util.List;
-
-import org.eclipse.osbp.dsl.common.datatypes.IDto;
-
-/**
- * API for a bpm event.
- * <ul>
- * <li>start events</li>
- * <li>gateways</i>
- * <li>end events</i>
- * </ul>
- * <i>Pure</i> events - excluding gateways -
- * <ul>
- * <li>must not perform any actions!</li>
- * <li>must not perform any persisting of dtos in the product persistence</li>
- * </ul>
- */
-public abstract class AbstractBPMEvent extends AbstractBlipBPMItem implements IBlipBPMWorkloadModifiableItem {
-
-	/** see {@link org.eclipse.osbp.bpm.api.AbstractBlipBPMItem#AbstractBPMItem(String, String)} */
-	protected AbstractBPMEvent(String blipId, String bpmId) {
-		super(blipId, bpmId);
-	}
-
-	@Override
-	@Deprecated
-	public final Class<?> getOperativeDtoClass() {
-		return null;
-	}
-
-	@Override
-	@Deprecated
-	public final void addOperativeDto(IDto workloadDto, IDto operativeDto) {
-	}
-
-	@Override
-	@Deprecated
-	public final void addOperativeDtos(IDto workloadDto, List<IDto> operativeDtos) {
-	}
-
-	@Override
-	@Deprecated
-	public final void removeAllOperativeDtos(IDto workloadDto) {
-	}
-
-	@Override
-	@Deprecated
-	public final void removeOperativeDto(IDto workloadDto, IDto operativeDto) {
-	}
-
-	@Override
-	@Deprecated
-	public final void removeOperativeDtos(IDto workloadDto, List<IDto> operativeDtos) {
-	}
-
-	@Override
-	@Deprecated
-	public final List<IDto> getOperativeDtos(IDto workloadDto) {
-		return null;
-	}
-}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/AbstractBPMServiceTask.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/AbstractBPMServiceTask.java
deleted file mode 100644
index fc42b8c..0000000
--- a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/AbstractBPMServiceTask.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- *                                                                            
- *  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.bpm.api;
-
-import java.util.List;
-
-import org.eclipse.osbp.dsl.common.datatypes.IDto;
-
-/**
- * API for a bpm system task
- */
-public abstract class AbstractBPMServiceTask extends AbstractBlipBPMItem implements IBlipBPMUserTask {
-
-	protected final String onEntryFunction;
-	protected final String onExitFunction;
-	protected final ServiceExecutionMode executionMode;
-	protected final ServiceImplementation implementation;
-	protected final int timeoutInSecs;
-	protected final String classOrInterface;
-	protected final String methodOrOperation;
-	
-	/** see {@link org.eclipse.osbp.bpm.api.AbstractBlipBPMItem#AbstractBPMItem(String, String)} */
-	protected AbstractBPMServiceTask(String blipId, String bpmId, String onEntryFunction, String onExitFunction,
-			ServiceExecutionMode executionMode, int timeoutInSecs,
-			ServiceImplementation implementation, String classOrInterface, String methodOrOperation) {
-		super(blipId, bpmId);
-		this.onEntryFunction = onEntryFunction;
-		this.onExitFunction = onExitFunction;
-		this.executionMode = executionMode;
-		this.timeoutInSecs = (timeoutInSecs > 0) ? timeoutInSecs : 10;
-		this.implementation = implementation;
-		this.classOrInterface = classOrInterface;
-		this.methodOrOperation = methodOrOperation; 
-	}
-
-	@Override
-	public final String getOnEntryFunction() {
-		return onEntryFunction;
-	}
-
-	@Override
-	public final String getOnExitFunction() {
-		return onExitFunction;
-	}
-	
-	public ServiceExecutionMode getExecutionMode() {
-		return executionMode;
-	}
-
-	public int getTimeoutInSecs() {
-		return timeoutInSecs;
-	}
-
-	public ServiceImplementation getImplementation() {
-		return implementation;
-	}
-
-	public String getFunctionLibraryClass() {
-		if	(implementation.equals(ServiceImplementation.FUNCTION_LIBRARY)) {
-			return classOrInterface;
-		}
-		return null;
-	}
-
-	public String getFunctionLibraryMethod() {
-		if	(implementation.equals(ServiceImplementation.FUNCTION_LIBRARY)) {
-			return methodOrOperation;
-		}
-		return null;
-	}
-
-	public String getWebServiceInterface() {
-		if	(implementation.equals(ServiceImplementation.WEB_SERVICE)) {
-			return classOrInterface;
-		}
-		return null;
-	}
-
-	public String getWebServiceOperation() {
-		if	(implementation.equals(ServiceImplementation.WEB_SERVICE)) {
-			return methodOrOperation;
-		}
-		return null;
-	}
-
-	public String getJavaInterface() {
-		if	(implementation.equals(ServiceImplementation.JAVA_METHOD)) {
-			return classOrInterface;
-		}
-		return null;
-	}
-
-	public String getJavaOperation() {
-		if	(implementation.equals(ServiceImplementation.JAVA_METHOD)) {
-			return methodOrOperation;
-		}
-		return null;
-	}
-
-	public String getParameterType() {
-		Class<?> clazz = getOperativeDtoClass();
-		if	(clazz == null) {
-			return null;
-		}
-		else {
-			return clazz.getCanonicalName();
-		}
-	}
-
-//	@Override
-//	@Deprecated
-//	public final Class<?> getOperativeDtoClass() {
-//		return null;
-//	}
-
-	@Override
-	@Deprecated
-	public final List<IDto> getOperativeDtos(IDto workloadDto) {
-		return null;
-	}
-}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/AbstractBlipBPMFunctionProvider.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/AbstractBlipBPMFunctionProvider.java
deleted file mode 100644
index 05082fb..0000000
--- a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/AbstractBlipBPMFunctionProvider.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- *                                                                            
- *  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.bpm.api;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.inject.Inject;
-
-import org.eclipse.osbp.bpm.api.AbstractBlipBPMUserTask;
-import org.eclipse.osbp.bpm.api.AbstractBlipBPMItem;
-import org.eclipse.osbp.bpm.api.IBPMEngine;
-import org.eclipse.osbp.bpm.api.IBlipBPMFunctionProvider;
-import org.eclipse.osbp.bpm.api.IBlipBPMStartInfo;
-import org.eclipse.osbp.bpm.api.IBlipBPMWorkloadModifiableItem;
-import org.eclipse.osbp.dsl.common.datatypes.IDto;
-import org.osgi.framework.FrameworkUtil;
-
-@SuppressWarnings("all")
-public abstract class AbstractBlipBPMFunctionProvider implements IBlipBPMFunctionProvider {
-	
-	protected abstract IBPMEngine getBpmEngine();
-	
-	protected abstract IBPMTaskClient getTaskClient();
-
-	protected Map<String, IBlipBPMStartInfo> startInfos;
-  
-	protected List<String> errors;
-  
-	protected abstract Map<String, IBlipBPMStartInfo> initializeStartInfos();
-  
-	protected abstract boolean initializeBpmEngine();
-
-	@Override
-	public IBlipBPMStartInfo getStartInfo(Object taskSummary) {
-		IBlipBPMStartInfo startInfo = null;
-		String processId = getProcessId(taskSummary);
-		if	(processId != null) {
-			startInfo = startInfos.get(processId);
-		}
-		return startInfo;
-	}
-	
-	protected String getProcessId(Object taskSummary) {
-		if	(getTaskClient() != null) {
-			return getTaskClient().getProcessId(taskSummary);
-		}
-		return null;
-	}
-	
-	@Override
-	public final boolean initBlip() {
-		startInfos = initializeStartInfos();
-		errors = new ArrayList<String>();
-		return initializeBpmEngine();
-	}
-  
-	@Override
-	public final void startProcess(final String processName) {
-		if	(getBpmEngine() != null) {
-			IBlipBPMStartInfo bpm = startInfos.get(processName);
-			Map<String,Object> metadata = new HashMap<String,Object>();
-			metadata.put(VARIABLE_PROCESS_PROTOCOL, "");
-			metadata.put(VARIABLE_PROCESS_WORKLOAD_DTO_FQN, bpm.getWorkloadDtoFqn());
-			metadata.put(VARIABLE_PROCESS_WORKLOAD_DTO, bpm.createWorkloadDto());
-			getBpmEngine().startProcess(bpm, metadata);
-		}
-	}
-
-	@Override
-	public final Map<String, IBlipBPMStartInfo> getBpmns() {
-		return startInfos;
-	}
-  
-	@Override
-	public final List<String> getErrors() {
-		return errors;
-	}
-}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/AbstractBlipBPMItem.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/AbstractBlipBPMItem.java
deleted file mode 100644
index c778d2f..0000000
--- a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/AbstractBlipBPMItem.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- *                                                                            
- *  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.bpm.api;
-
-import java.util.List;
-
-import org.eclipse.osbp.dsl.common.datatypes.IDto;
-
-
-/**
- * API for bpm items. See the <code><a href="../BlipDSL.xtext">blip grammar</a></code>
- * <ul>
- * <li>start events</li>
- * <li>human tasks</li>
- * <li>system tasks</li>
- * <li>persist tasks</li>
- * <li>gateways</li>
- * <li>end events</i>
- * </ul>
- * The API allows modifying the process workload dto.
- */
-public abstract class AbstractBlipBPMItem implements IBlipBPMItem {
-
-	/** the process unique id inside the blip */
-	private final String fBlipId;
-	/** the process unique id inside the BPM definition */
-	protected final String fBpmId;
-
-	/**
-	 * @param blipId the process unique id inside the blip
-	 * @param bpmId the process unique id inside the BPM definition
-	 */
-	protected AbstractBlipBPMItem(String blipId, String bpmId) {
-		fBlipId = blipId;
-		fBpmId = bpmId;
-	}
-
-	@Override
-	abstract public Class<?> getOperativeDtoClass();
-	
-	@Override
-	abstract public List<IDto> getOperativeDtos(IDto workloadDto);
-
-	public String getBlipId() {
-		return fBlipId;
-	}
-}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/AbstractBlipBPMUserTask.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/AbstractBlipBPMUserTask.java
deleted file mode 100644
index ccdc30e..0000000
--- a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/AbstractBlipBPMUserTask.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- *                                                                            
- *  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.bpm.api;
-
-
-/**
- * API for a bpm human task
- */
-public abstract class AbstractBlipBPMUserTask extends AbstractBlipBPMItem implements IBlipBPMUserTask {
-
-	protected final String onEntryFunction;
-	protected final String onExitFunction;
-	
-	/** see {@link org.eclipse.osbp.bpm.api.AbstractBlipBPMItem#AbstractBPMItem(String, String)} */
-	protected AbstractBlipBPMUserTask(String blipId, String bpmId, String onEntryFunction, String onExitFunction) {
-		super(blipId, bpmId);
-		this.onEntryFunction = onEntryFunction;
-		this.onExitFunction = onExitFunction;
-	}
-
-	@Override
-	public final String getOnEntryFunction() {
-		return onEntryFunction;
-	}
-
-	@Override
-	public final String getOnExitFunction() {
-		return onExitFunction;
-	}
-}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMCallActivity.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMCallActivity.java
deleted file mode 100644
index 0c6683c..0000000
--- a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMCallActivity.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- *                                                                            
- *  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.bpm.api;
-
-import java.util.List;
-
-import org.eclipse.osbp.dsl.common.datatypes.IDto;
-
-
-/**
- * API for a bpm sub process
- */
-public class BPMCallActivity extends AbstractBlipBPMItem implements IBlipBPMUserTask {
-
-	protected final String onEntryFunction;
-	protected final String onExitFunction;
-	
-	/** see {@link org.eclipse.osbp.bpm.api.AbstractBlipBPMItem#AbstractBPMItem(String, String)} */
-	public BPMCallActivity(String blipId, String bpmId, String onEntryFunction, String onExitFunction) {
-		super(blipId, bpmId);
-		this.onEntryFunction = onEntryFunction;
-		this.onExitFunction = onExitFunction;
-	}
-
-	@Override
-	public final String getOnEntryFunction() {
-		return onEntryFunction;
-	}
-
-	@Override
-	public final String getOnExitFunction() {
-		return onExitFunction;
-	}
-
-	@Override
-	public Class<?> getOperativeDtoClass() {
-		return null;
-	}
-
-	@Override
-	public List<IDto> getOperativeDtos(IDto workloadDto) {
-		return null;
-	}
-}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMEndEvent.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMEndEvent.java
deleted file mode 100644
index d864288..0000000
--- a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMEndEvent.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- *                                                                            
- *  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.bpm.api;
-
-/**
- * API for a bpm end event.
- */
-public final class BPMEndEvent extends AbstractBPMEvent {
-
-	protected final boolean terminatesProcess;
-	
-	/** see {@link org.eclipse.osbp.bpm.api.AbstractBPMEvent#AbstractBPMEvent(String, String)} */
-	public BPMEndEvent(String blipId, String bpmId, boolean terminatesProcess) {
-		super(blipId, bpmId);
-		this.terminatesProcess = terminatesProcess;
-	}
-
-	public boolean isTerminatesProcess() {
-		return terminatesProcess;
-	}
-}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMOperation.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMOperation.java
new file mode 100644
index 0000000..96cfee1
--- /dev/null
+++ b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMOperation.java
@@ -0,0 +1,19 @@
+package org.eclipse.osbp.bpm.api;
+
+public enum BPMOperation {
+    Claim,
+    Start,
+    Stop,
+    Release,
+    Suspend,
+    Resume,
+    Skip,
+    Delegate,
+    Forward,
+    Complete,
+    Fail,
+    Register,
+    Remove,
+    Activate,
+    Exit
+}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMPersistTask.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMPersistTask.java
deleted file mode 100644
index 7ef885c..0000000
--- a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMPersistTask.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- *                                                                            
- *  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.bpm.api;
-
-
-/**
- * API for a bpm system persist task explicitly used to persist workload dtos back into the productive persistence
- */
-public class BPMPersistTask extends BPMScriptTask {
-
-	/** see {@link org.eclipse.osbp.bpm.api.BPMScriptTask#AbstractBPMSystemTask(String, String)} */
-	protected BPMPersistTask(String blipId, String bpmId, String function) {
-		super(blipId, bpmId, function);
-	}
-}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMPropertyUtils.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMPropertyUtils.java
new file mode 100644
index 0000000..64863ae
--- /dev/null
+++ b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMPropertyUtils.java
@@ -0,0 +1,5 @@
+package org.eclipse.osbp.bpm.api;
+
+public class BPMPropertyUtils {
+
+}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMScriptTask.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMScriptTask.java
deleted file mode 100644
index 767dc84..0000000
--- a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMScriptTask.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- *                                                                            
- *  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.bpm.api;
-
-import java.util.List;
-
-import org.eclipse.osbp.dsl.common.datatypes.IDto;
-
-/**
- * API for a bpm system task
- */
-public class BPMScriptTask extends AbstractBlipBPMItem {
-
-	protected final String function;
-	
-	/** see {@link org.eclipse.osbp.bpm.api.AbstractBlipBPMItem#AbstractBPMItem(String, String)} */
-	public BPMScriptTask(String blipId, String bpmId, String function) {
-		super(blipId, bpmId);
-		this.function = function;
-	}
-
-	public String getFunction() {
-		return function;
-	}
-	
-	@Override
-	@Deprecated
-	public final Class<?> getOperativeDtoClass() {
-		return null;
-	}
-
-	@Override
-	@Deprecated
-	public final List<IDto> getOperativeDtos(IDto workloadDto) {
-		return null;
-	}
-}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMSplitGateway.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMSplitGateway.java
deleted file mode 100644
index 9b12784..0000000
--- a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMSplitGateway.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- *                                                                            
- *  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.bpm.api;
-
-
-/**
- * API for a bpm gateway.
- * <br>
- * Gateways
- * <ul>
- * <li>must not perform any actions!</li>
- * <li>must not perform any persisting of dtos in the product persistence</li>
- * <li>Gateways only have to evaluate the state of the bpm process - depending on the actual workload - , to define which outgoing path should be taken!</li>
- * </ul>
- */
-public class BPMSplitGateway extends AbstractBPMEvent {
-
-	public enum GatewayMode {
-		/** Split.TYPE_XOR */
-		EXCLUSIVE,
-		/** Split.TYPE_OR */
-		INCLUSIVE,
-		/** Split.TYPE_AND */
-		PARALLEL,
-	}
-	
-	private final GatewayMode gatewayMode;
-	private final IBlipBPMOutgoing[] outgoings;
-	
-	/** see {@link org.eclipse.osbp.bpm.api.AbstractBPMEvent#AbstractBPMEvent(String, String)} */
-	public BPMSplitGateway(String blipId, String bpmId, GatewayMode gatewayMode, IBlipBPMOutgoing... outgoings) {
-		super(blipId, bpmId);
-		this.gatewayMode = gatewayMode;
-		this.outgoings = outgoings;
-	}
-	
-	public GatewayMode getGatewayMode() {
-		return gatewayMode;
-	}
-	
-	public IBlipBPMOutgoing[] getOutgoings() {
-		return outgoings;
-	}
-}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMStartEvent.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMStartEvent.java
deleted file mode 100644
index b733373..0000000
--- a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMStartEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- *                                                                            
- *  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.bpm.api;
-
-/**
- * API for a bpm start event.
- */
-public final class BPMStartEvent extends AbstractBPMEvent {
-
-	/** see {@link org.eclipse.osbp.bpm.api.AbstractBPMEvent#AbstractBPMEvent(String, String)} */
-	protected BPMStartEvent(String blipId, String bpmId) {
-		super(blipId, bpmId);
-	}
-}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMStatus.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMStatus.java
new file mode 100644
index 0000000..8d1da0a
--- /dev/null
+++ b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMStatus.java
@@ -0,0 +1,5 @@
+package org.eclipse.osbp.bpm.api;
+
+public enum BPMStatus {
+    Created, Ready, Reserved, InProgress, Suspended, Completed, Failed, Error, Exited, Obsolete
+}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMTaskClientPerspectiveListener.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMTaskClientPerspectiveListener.java
new file mode 100644
index 0000000..7471fc7
--- /dev/null
+++ b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMTaskClientPerspectiveListener.java
@@ -0,0 +1,6 @@
+package org.eclipse.osbp.bpm.api;
+
+public interface BPMTaskClientPerspectiveListener {
+	void openPerspective(BPMTaskSummary taskSummary);
+	void closePerspective(BPMTaskSummary taskSummary);
+}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMTaskEventType.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMTaskEventType.java
new file mode 100644
index 0000000..9134997
--- /dev/null
+++ b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMTaskEventType.java
@@ -0,0 +1,93 @@
+package org.eclipse.osbp.bpm.api;
+
+public enum BPMTaskEventType {
+	Create("cr"), Claim("cl"), Stop("st"), Complete("co"), Fail("fa"), Forward("fo"), Release("re"), Skipped(
+			"sk"), Started("be"), // begun
+
+	Suspended("ss"), SuspendedUntil("su"), Resume("rs"), Removed("rm"), SetPriority("sp"),
+
+	AddedAttachment("aa"), DeletedAttachment("da"), AddedComment("ac"), UpdatedComment("uc"),
+
+	Delegated("de"), SetOutput("so"), DeleteOutput("do"), SetFault("sf"), DeleteFault("df"), Activate("at"), Nominate(
+			"no"), SetGenericHumanRole("sr"), Expire("ex"), Escalated("es"), Cancel("ca"),
+
+	UnknownUserEvent("us");
+
+	private String type;
+
+	private BPMTaskEventType(String t) {
+		type = t;
+	}
+
+	public String getValue() {
+		return type;
+	}
+
+	public static BPMTaskEventType getTypeFromValue(String type) {
+		int hashCode = type.hashCode();
+		switch (hashCode) {
+		case 3123:
+			return BPMTaskEventType.Activate;
+		case 3104:
+			return BPMTaskEventType.AddedAttachment;
+		case 3106:
+			return BPMTaskEventType.AddedComment;
+		case 3166:
+			return BPMTaskEventType.Cancel;
+		case 3177:
+			return BPMTaskEventType.Claim;
+		case 3180:
+			return BPMTaskEventType.Complete;
+		case 3183:
+			return BPMTaskEventType.Create;
+		case 3201:
+			return BPMTaskEventType.Delegated;
+		case 3202:
+			return BPMTaskEventType.DeleteFault;
+		case 3211:
+			return BPMTaskEventType.DeleteOutput;
+		case 3197:
+			return BPMTaskEventType.DeletedAttachment;
+		case 3246:
+			return BPMTaskEventType.Escalated;
+		case 3251:
+			return BPMTaskEventType.Expire;
+		case 3259:
+			return BPMTaskEventType.Fail;
+		case 3273:
+			return BPMTaskEventType.Forward;
+		case 3521:
+			return BPMTaskEventType.Nominate;
+		case 3635:
+			return BPMTaskEventType.Release;
+		case 3643:
+			return BPMTaskEventType.Removed;
+		case 3649:
+			return BPMTaskEventType.Resume;
+		case 3667:
+			return BPMTaskEventType.SetFault;
+		case 3679:
+			return BPMTaskEventType.SetGenericHumanRole;
+		case 3676:
+			return BPMTaskEventType.SetOutput;
+		case 3677:
+			return BPMTaskEventType.SetPriority;
+		case 3672:
+			return BPMTaskEventType.Skipped;
+		case 3139:
+			return BPMTaskEventType.Started;
+		case 3681:
+			return BPMTaskEventType.Stop;
+		case 3680:
+			return BPMTaskEventType.Suspended;
+		case 3682:
+			return BPMTaskEventType.SuspendedUntil;
+		case 3742:
+			return BPMTaskEventType.UnknownUserEvent;
+		case 3726:
+			return BPMTaskEventType.UpdatedComment;
+		default:
+			throw new IllegalStateException("Unknown type: " + type);
+		}
+	}
+}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMTaskSummary.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMTaskSummary.java
new file mode 100644
index 0000000..6045610
--- /dev/null
+++ b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMTaskSummary.java
@@ -0,0 +1,257 @@
+package org.eclipse.osbp.bpm.api;
+
+import java.util.Date;
+
+public class BPMTaskSummary {
+    private long    id;
+
+    private String  name;
+
+    private String  subject;
+
+    private String  description;
+
+    private BPMStatus  status;
+
+    private int     priority;
+
+    private boolean skipable;
+
+    private String    actualOwner;
+
+    private String    createdBy;
+
+    private Date    createdOn;
+
+    private Date    activationTime;
+
+    private Date    expirationTime;
+    
+    private long    processInstanceId;
+    
+    private String  processId;
+    
+    private int processSessionId;
+    
+
+    public BPMTaskSummary(long id,
+    		           long processInstanceId,
+                       String name,
+                       String subject,
+                       String description,
+                       BPMStatus status,
+                       int priority,
+                       boolean skipable,
+                       String actualOwner,
+                       String createdBy,
+                       Date createdOn,
+                       Date activationTime,
+                       Date expirationTime,
+                       String processId,
+                       int processSessionId) {
+        super();
+        this.id = id;
+        this.processInstanceId = processInstanceId;
+        this.name = name;
+        this.subject = subject;
+        this.description = description;
+        this.status = status;
+        this.priority = priority;
+        this.skipable = skipable;
+        this.actualOwner = actualOwner;
+        this.createdBy = createdBy;
+        this.createdOn = createdOn;
+        this.activationTime = activationTime;
+        this.expirationTime = expirationTime;
+        this.processId = processId;
+        this.processSessionId = processSessionId;
+    }
+
+    public BPMTaskSummary() {
+    }
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+    
+    public long getProcessInstanceId() {
+    	return processInstanceId;
+    }
+    
+    public void setProcessInstanceId(long processInstanceId) {
+    	this.processInstanceId = processInstanceId;
+    }
+    
+	public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public BPMStatus getStatus() {
+        return status;
+    }
+
+    public void setStatus(BPMStatus status) {
+        this.status = status;
+    }
+
+    public int getPriority() {
+        return priority;
+    }
+
+    public void setPriority(int priority) {
+        this.priority = priority;
+    }
+
+    public boolean isSkipable() {
+        return skipable;
+    }
+
+    public void setSkipable(boolean skipable) {
+        this.skipable = skipable;
+    }
+
+    public String getActualOwner() {
+        return actualOwner;
+    }
+
+    public void setActualOwner(String actualOwner) {
+        this.actualOwner = actualOwner;
+    }
+
+    public String getCreatedBy() {
+        return createdBy;
+    }
+
+    public void setCreatedBy(String createdBy) {
+        this.createdBy = createdBy;
+    }
+
+    public Date getCreatedOn() {
+        return createdOn;
+    }
+
+    public void setCreatedOn(Date createdOn) {
+        this.createdOn = createdOn;
+    }
+
+    public Date getActivationTime() {
+        return activationTime;
+    }
+
+    public void setActivationTime(Date activationTime) {
+        this.activationTime = activationTime;
+    }
+
+    public Date getExpirationTime() {
+        return expirationTime;
+    }
+
+    public void setExpirationTime(Date expirationTime) {
+        this.expirationTime = expirationTime;
+    }
+    
+    public String getProcessId() {
+		return processId;
+	}
+
+	public void setProcessId(String processId) {
+		this.processId = processId;
+	}
+	
+	public int getProcessSessionId() {
+		return processSessionId;
+	}
+
+	public void setProcessSessionId(int processSessionId) {
+		this.processSessionId = processSessionId;
+	}
+
+	@Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((activationTime == null) ? 0 : activationTime.hashCode());
+        result = prime * result + ((actualOwner == null) ? 0 : actualOwner.hashCode());
+        result = prime * result + ((createdBy == null) ? 0 : createdBy.hashCode());
+        result = prime * result + ((createdOn == null) ? 0 : createdOn.hashCode());
+        result = prime * result + ((description == null) ? 0 : description.hashCode());
+        result = prime * result + ((expirationTime == null) ? 0 : expirationTime.hashCode());
+        result = prime * result + (int) (id ^ (id >>> 32));
+        result = prime * result + (int) (processInstanceId ^ (processInstanceId >>> 32));
+        result = prime * result + ((name == null) ? 0 : name.hashCode());
+        result = prime * result + priority;
+        result = prime * result + (skipable ? 1231 : 1237);
+        result = prime * result + ((status == null) ? 0 : status.hashCode());
+        result = prime * result + ((subject == null) ? 0 : subject.hashCode());
+        result = prime * result + ((processId == null) ? 0 : processId.hashCode());
+        result = prime * result + processSessionId;
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if ( this == obj ) return true;
+        if ( obj == null ) return false;
+        if ( !(obj instanceof BPMTaskSummary) ) return false;
+        BPMTaskSummary other = (BPMTaskSummary) obj;
+        if ( processInstanceId != other.processInstanceId) return false;
+        if ( activationTime == null ) {
+            if ( other.activationTime != null ) return false;
+        } else if ( activationTime.getTime() != other.activationTime.getTime() ) return false;
+        if ( actualOwner == null ) {
+            if ( other.actualOwner != null ) return false;
+        } else if ( !actualOwner.equals( other.actualOwner ) ) return false;
+        if ( createdBy == null ) {
+            if ( other.createdBy != null ) return false;
+        } else if ( !createdBy.equals( other.createdBy ) ) return false;
+        if ( createdOn == null ) {
+            if ( other.createdOn != null ) return false;
+        } else if ( createdOn.getTime() != other.createdOn.getTime() ) return false;
+        if ( description == null ) {
+            if ( other.description != null ) return false;
+        } else if ( !description.equals( other.description ) ) return false;
+        if ( expirationTime == null ) {
+            if ( other.expirationTime != null ) return false;
+        } else if ( expirationTime.getTime() != other.expirationTime.getTime() ) return false;
+        if ( name == null ) {
+            if ( other.name != null ) return false;
+        } else if ( !name.equals( other.name ) ) return false;
+        if ( priority != other.priority ) return false;
+        if ( skipable != other.skipable ) return false;
+        if ( status == null ) {
+            if ( other.status != null ) return false;
+        } else if ( !status.equals( other.status ) ) return false;
+        if ( subject == null ) {
+            if ( other.subject != null ) return false;
+        } else if ( !subject.equals( other.subject ) ) return false;
+        if ( processId == null ) {
+            if ( other.processId != null ) return false;
+        } else if ( !processId.equals( other.processId ) ) return false;
+        if ( processSessionId != other.processSessionId ) return false;
+        return true;
+    }
+}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMTaskUserEvent.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMTaskUserEvent.java
new file mode 100644
index 0000000..5cf7e87
--- /dev/null
+++ b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMTaskUserEvent.java
@@ -0,0 +1,55 @@
+package org.eclipse.osbp.bpm.api;
+
+import java.util.Date;
+
+public class BPMTaskUserEvent {
+	private String type;
+	private Long id;
+	protected Long taskId;
+	protected Date eventTime = new Date();
+	protected String userId;
+	protected int sessionId;
+
+	public BPMTaskUserEvent() {
+	}
+
+	public BPMTaskUserEvent(long taskId, String userId, int sessionId) {
+		this.taskId = taskId;
+		this.userId = userId;
+		this.sessionId = sessionId;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public long getTaskId() {
+		return taskId;
+	}
+
+	// no setter, automatically generated by db
+	public Long getId() {
+		return id;
+	}
+
+	// no setter,
+	public Date getEventTime() {
+		return eventTime;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public BPMTaskEventType getTaskEventType() {
+		return BPMTaskEventType.getTypeFromValue(type);
+	}
+
+	public int getSessionId() {
+		return sessionId;
+	}
+
+	public void setSessionId(int sessionId) {
+		this.sessionId = sessionId;
+	}
+}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMUser.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMUser.java
new file mode 100644
index 0000000..c355540
--- /dev/null
+++ b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BPMUser.java
@@ -0,0 +1,17 @@
+package org.eclipse.osbp.bpm.api;
+
+public class BPMUser {
+	private String id;
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public BPMUser(String id) {
+		this.id = id;
+	}
+}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BlipBPMOutgoing.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BlipBPMOutgoing.java
deleted file mode 100644
index 49383af..0000000
--- a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BlipBPMOutgoing.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- *                                                                            
- *  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.bpm.api;
-
-public class BlipBPMOutgoing implements IBlipBPMOutgoing {
-
-	protected final String blipId;
-	protected final String bpmId;
-	protected final int priority;
-	protected final boolean isDefault;
-	protected final String testFunction;
-
-	public BlipBPMOutgoing(String blipId, String bpmId, int priority) {
-		this.blipId = blipId;
-		this.bpmId = bpmId;
-		this.priority = priority;
-		this.isDefault = true;
-		this.testFunction = BlipBaseFunctionGroup.DEFAULT_SEQUENCE_FLOW;
-	}
-
-	public BlipBPMOutgoing(String blipId, String bpmId, int priority, String testFunction) {
-		this.blipId = blipId;
-		this.bpmId = bpmId;
-		this.priority = priority;
-		this.isDefault = false;
-		this.testFunction = testFunction;
-	}
-	
-	@Override
-	public String getBlipId() {
-		return blipId;
-	}
-	
-	@Override
-	public String getBpmId() {
-		return bpmId;
-	}
-
-	@Override
-	public int getPriority() {
-		return priority;
-	}
-
-	@Override
-	public boolean isDefault() {
-		return isDefault;
-	}
-
-	@Override
-	public String getTestFunction() {
-		return testFunction;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BlipBPMProcessProtocol.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BlipBPMProcessProtocol.java
deleted file mode 100644
index e4366c5..0000000
--- a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BlipBPMProcessProtocol.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/**
- *                                                                            
- *  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.bpm.api;
-
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-import org.eclipse.osbp.utils.constants.ExtendedDate;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class BlipBPMProcessProtocol extends TreeMap<Long, String> implements IBlipBPMProcessProtocol {
-
-	private static final long serialVersionUID = -5351403298895312061L;
-	private final static Logger log = LoggerFactory.getLogger(BlipBPMProcessProtocol.class);
-	private Set<Long> processIds = new TreeSet<>();
-	
-	protected BlipBPMProcessProtocol(long processId) {
-		this.processIds.add(processId);
-	}
-
-	@Override
-	public void addToProtocol(long actualProcessId, String line) {
-		addToProtocol(actualProcessId, line, null);
-	}
-	
-	/** TODO */
-	@Override
-	public void addToProtocol(long actualProcessId, String line, IBlipBPMProcessProtocol toBeMerged) {
-		if	((toBeMerged != null) && !this.equals(toBeMerged)) {
-//			if	(!processIds.contains(toBeMerged.getProcessIds())) {
-//				log.warn("Merging protocols for different process ids "+this.processId+" and "+toBeMerged.getProcessId());
-//			}
-			processIds.addAll(toBeMerged.getProcessIds());
-			for	(long millis : toBeMerged.keySet()) {
-				String newLine = toBeMerged.get(millis);
-				if	(!containsKey(millis) || newLine.equals(get(millis))) {
-					insertToProtocol(millis, newLine);
-				}
-			}
-		}
-		if	((line != null) && !line.isEmpty()) {
-			insertToProtocol(System.currentTimeMillis(), "#"+actualProcessId+": "+line);
-		}
-	}
-
-	static final int MAX_RETRIES = 50;
-
-	@Override
-	public String processIdsAsString() {
-		String result = "";
-		for (long id : processIds) {
-			if	(!result.isEmpty()) {
-				result += "|";
-			}
-			result += id;
-		}
-		return result;
-	}
-	
-	private void insertToProtocol(final long initialMillis, String line) {
-		long millis = initialMillis;
-		int retry = MAX_RETRIES+1;
-		while	((retry > 0) && containsKey(millis)) {
-			retry--;
-			millis++;
-		}
-		if	(retry > 0) {
-			put(millis, line);
-		}
-		else {
-			throw new IllegalArgumentException("Could not insert protocol line for "+processIdsAsString()+" between "+ExtendedDate.timeStampToString(initialMillis)+" and "+ExtendedDate.timeStampToString(millis));
-		}
-	}
-
-	@Override
-	public boolean containsProcessId(long searchProcessId) {
-		return processIds.contains(searchProcessId);
-	}
-	
-	@Override
-	public Set<Long> getProcessIds() {
-		return processIds;
-	}
-
-	@Override
-	public void updateProcessId(long processId) {
-		this.processIds.add(processId);
-	}
-	
-	/** TODO */
-	@Override
-	public String toString() {
-		StringBuffer output = new StringBuffer();
-		output.append("Protocol - Process ID(s):"+processIdsAsString()+" - "+size()+" lines");
-		int line = 0;
-		Set<Long> keys = keySet();
-		for	(long millis : keys) {
-			line++;
-			output.append(System.lineSeparator()+"- #"+line+" - "+ExtendedDate.timeStampToString(millis)+" - "+get(millis));
-		}
-		return output.toString();
-	}
-}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BlipBPMProcessProtocolCache.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BlipBPMProcessProtocolCache.java
deleted file mode 100644
index 0fecb2f..0000000
--- a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BlipBPMProcessProtocolCache.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/**
- *                                                                            
- *  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.bpm.api;
-
-import java.util.HashSet;
-
-import org.drools.runtime.process.ProcessContext;
-import org.drools.runtime.process.ProcessInstance;
-import org.jbpm.ruleflow.instance.RuleFlowProcessInstance;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class BlipBPMProcessProtocolCache extends HashSet<IBlipBPMProcessProtocol> implements IBlipBPMProcessProtocolCache {
-
-	private static final long serialVersionUID = 73752867741992785L;
-	private final static Logger log = LoggerFactory.getLogger(BlipBPMProcessProtocolCache.class);
-	
-	protected long getProcessId(Object context) {
-		Exception e = null;
-		try {
-			if	(context instanceof Long) {
-				return (Long)context;
-			}
-			if	(context instanceof Integer) {
-				return (Long)context;
-			}
-			if	(context instanceof ProcessInstance) {
-				return ((ProcessInstance)context).getId();
-			}
-			if	(context instanceof ProcessContext) {
-				return (((ProcessContext) context).getNodeInstance().getProcessInstance().getId());
-			}
-		}
-		catch (Exception e1) {
-			e = e1;
-		}
-		String error = "Given context "+context.getClass().getCanonicalName()+" can't be inspected for the process instance id";
-		if	(e != null) {
-			error += " "+e.getLocalizedMessage();
-		}
-		log.error(error);
-		throw new IllegalArgumentException(error);
-	}
-	
-	protected long getParentProcessId(Object context) {
-		Exception e = null;
-		try {
-			if	(context instanceof ProcessContext) {
-				if	(((ProcessContext) context).getNodeInstance().getNodeInstanceContainer() instanceof RuleFlowProcessInstance) {
-					RuleFlowProcessInstance ruleFlowProcessInstance = (RuleFlowProcessInstance) ((ProcessContext) context).getNodeInstance().getNodeInstanceContainer();
-					if	(ruleFlowProcessInstance.getMetaData().containsKey("ParentProcessInstanceId")) {
-						return (Long)ruleFlowProcessInstance.getMetaData().get("ParentProcessInstanceId");
-					}
-				}
-			}
-		}
-		catch (Exception e1) {
-		}
-		return 0;
-	}
-	
-	@Override
-	public IBlipBPMProcessProtocol mergeToProtocol(Object context, IBlipBPMProcessProtocol toBeMerged) {
-		return addToProtocol(context, null, toBeMerged);
-	}
-
-	@Override
-	public IBlipBPMProcessProtocol addToProtocol(Object context, String line) {
-		return addToProtocol(context, line, null);
-	}
-
-	@Override
-	public IBlipBPMProcessProtocol addToProtocol(Object context, String line, IBlipBPMProcessProtocol toBeMerged) {
-		IBlipBPMProcessProtocol protocol = getProtocol(context);
-		protocol.addToProtocol(getProcessId(context), line, toBeMerged);
-		return protocol;
-	}
-	
-	@Override
-	public IBlipBPMProcessProtocol getProtocol(Object context) {
-		long processId = getProcessId(context);
-		long parentProcessId = getParentProcessId(context);
-		IBlipBPMProcessProtocol protocol = get(processId);
-		if	((protocol == null) && (parentProcessId > 0)) {
-			protocol = get(parentProcessId);
-			if	(protocol != null) {
-				protocol.updateProcessId(processId);
-			}
-		}
-		if	(protocol == null) {
-			protocol = new BlipBPMProcessProtocol(processId);
-			add(protocol);
-		}
-//		else if	(protocol.getProcessId() == 0) {
-//			protocol.updateProcessId(processId);
-//		}
-		else if (!protocol.containsProcessId(processId)) {
-			String error = "Wrong process id for context "+processId+" and protocol found "+protocol.processIdsAsString();
-			log.error(error);
-			throw new IllegalArgumentException(error);
-		}
-		return protocol;
-	}
-
-	private IBlipBPMProcessProtocol get(long searchProcessId) {
-		for	(IBlipBPMProcessProtocol protocol : this) {
-			if	(protocol.containsProcessId(searchProcessId)) {
-				return protocol;
-			}
-		}
-		return null;
-	}
-
-	@Override
-	public void removeFromCache(Object context) {
-		remove(getProcessId(context));
-	}
-}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BlipBaseFunctionGroup.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BlipBaseFunctionGroup.java
deleted file mode 100644
index d55a169..0000000
--- a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/BlipBaseFunctionGroup.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/**
- *                                                                            
- *  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.bpm.api;
-
-import org.drools.runtime.process.ProcessContext;
-import org.eclipse.osbp.dsl.common.datatypes.IDto;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- *  Base class for blip function groups. It provides basic functions to handle blips.
- */
-public abstract class BlipBaseFunctionGroup {
-
-	private static IBlipBPMProcessProtocolCache protocolCache;
-	private final static Logger log = LoggerFactory.getLogger(BlipBaseFunctionGroup.class);
-
-	@Deprecated
-	public final static void setProtocolCache(IBlipBPMProcessProtocolCache protocolCache) {
-		if	(BlipBaseFunctionGroup.protocolCache == null) {
-			BlipBaseFunctionGroup.protocolCache = protocolCache;
-		}
-		else if (BlipBaseFunctionGroup.protocolCache != protocolCache) {
-			BlipBaseFunctionGroup.protocolCache = protocolCache;
-		}
-	}
-	
-	/**
-	 *  This method can be used as the default sequence flow on exclusive split gateways!
-	 *  @param  kcontext  should be the {@link org.drools.runtime.process.ProcessContext} available in BPM (Java/mvel) scripts
-	 *  @return <b>always</b> <code>true</code>
-	 */
-	public final static boolean defaultSequenceFlow(Object kcontext) {
-		return true;
-	}
-
-	/**
-	 *  name of the function defaultSequenceFlow(kcontext) to be used in the blip grammar
-	 */
-	protected final static String DEFAULT_SEQUENCE_FLOW = "defaultSequenceFlow";
-
-	/**
-	 *  @see    hints in {@link #getVariable(Object, String)
-	 *  @param  kcontext  should be the {@link org.drools.runtime.process.ProcessContext} available in BPM (Java/mvel) scripts
-	 *  @return the protocol of this process instance, which can be generated with appendProcessProtocol()
-	 */
-	public final static IBlipBPMProcessProtocol getProcessProtocol(Object kcontext) {
-		return protocolCache.mergeToProtocol(kcontext, (IBlipBPMProcessProtocol)getVariable(kcontext, IBlipBPMConstants.VARIABLE_PROCESS_PROTOCOL));
-	}
-	
-	/**
-	 *  @see    hints in {@link #getVariable(Object, String)
-	 *  @param  kcontext  should be the {@link org.drools.runtime.process.ProcessContext} available in BPM (Java/mvel) scripts
-	 *  @param  line      new line for the protocol
-	 *  @return the new protocol of this process instance
-	 */
-	public final static IBlipBPMProcessProtocol appendProcessProtocol(Object kcontext, String line) {
-		IBlipBPMProcessProtocol protocol = protocolCache.addToProtocol(kcontext, line, getProcessProtocol(kcontext));
-		setVariable(kcontext, IBlipBPMConstants.VARIABLE_PROCESS_PROTOCOL, protocol);
-		return protocol;
-	}
-	
-	/**
-	 *  @see    hints in {@link #getVariable(Object, String)
-	 *  @param  kcontext  should be the {@link org.drools.runtime.process.ProcessContext} available in BPM (Java/mvel) scripts
-	 *  @return the workload dto of this process instance
-	 */
-	public final static Object getWorkloadDto(Object kcontext) {
-		return getVariable(kcontext, IBlipBPMConstants.VARIABLE_PROCESS_WORKLOAD_DTO);
-	}
-
-	/**
-	 *  @see    hints in {@link #getVariable(Object, String)
-	 *  @param  kcontext    should be the {@link org.drools.runtime.process.ProcessContext} available in BPM (Java/mvel) scripts
-	 *  @param  workloadDto the new/modified workload dto for this process instance
-	 */
-	public final static void setWorkloadDto(Object kcontext, IDto workloadDto) {
-		setVariable(kcontext, IBlipBPMConstants.VARIABLE_PROCESS_WORKLOAD_DTO, workloadDto);
-	}
-
-	/**
-	 *  @see    hints in {@link #getVariable(Object, String)
-	 *  @param  kcontext  should be the {@link org.drools.runtime.process.ProcessContext} available in BPM (Java/mvel) scripts
-	 *  @return the full qualified name for the workload dto used in this process instance
-	 */
-	public final static Object getWorkloadDtoFQN(Object kcontext) {
-		return getVariable(kcontext, IBlipBPMConstants.VARIABLE_PROCESS_WORKLOAD_DTO_FQN);
-	}
-	
-	/**
-	 *  Local process variables are available in
-	 *  <ul>
-	 *  <li>in <i>User Tasks</i> ony, if they are mapped from local process variables to task variables</li>
-	 *  <li>in <i>Script Tasks</i>, <i>Gateways</i>, etc. via (Java/mvel) scripts</li>
-	 *  </ul> 
-	 *  @param  kcontext  should be the {@link org.drools.runtime.process.ProcessContext} available in BPM (Java/mvel) scripts
-	 *  @param  variable  name of the process instance variable
-	 *  @return the value of the process instance variable or <code>null</code>
-	 */
-	protected final static Object getVariable(Object kcontext, String variable) {
-		return getVariable(kcontext, variable, null);
-	}
-	
-	/**
-	 *  Local process variables are available in
-	 *  <ul>
-	 *  <li>in <i>User Tasks</i> ony, if they are mapped from local process variables to task variables</li>
-	 *  <li>in <i>Script Tasks</i>, <i>Gateways</i>, etc. via (Java/mvel) scripts</li>
-	 *  </ul> 
-	 *  @param  kcontext       should be the {@link org.drools.runtime.process.ProcessContext} available in BPM (Java/mvel) scripts
-	 *  @param  variable       name of the process instance variable
-	 *  @param  defaultValue   default value, if the variable has not been set before
-	 *  @return the value of the process instance variable or <code>defaultValue</code>
-	 */
-	protected final static Object getVariable(Object kcontext, String variable, Object defaultValue) {
-		Object value = defaultValue;
-		if	((variable instanceof String) && (kcontext instanceof ProcessContext) && !variable.isEmpty()) {
-			try {
-				value = ((ProcessContext) kcontext).getVariable(variable);
-			}
-			catch (Exception e) {
-				log.error("getVariable(\""+variable+"\"): ", e);
-			}
-		}
-		else if (kcontext == null) {
-			log.error("getVariable(\""+variable+"\"): kcontext must be instance of ProcessContext, but is <null>");
-		}
-		else if (!(kcontext instanceof ProcessContext)) {
-			log.error("getVariable(\""+variable+"\"): kcontext must be instance of ProcessContext, but is "+kcontext.getClass().getCanonicalName());
-		}
-		return value;
-	}
-
-	/**
-	 *  @see    hints in {@link #getVariable(Object, String)
-	 *  @param  kcontext  should be the {@link org.drools.runtime.process.ProcessContext} available in BPM (Java/mvel) scripts
-	 *  @param  variable  name of the process instance variable to be set
-	 *  @param  value     the new value of the process instance variable
-	 */
-	protected final static void setVariable(Object kcontext, String variable, Object value) {
-		if	((variable instanceof String) && (kcontext instanceof ProcessContext) && !variable.isEmpty()) {
-			try {
-				((ProcessContext) kcontext).setVariable(variable, value);
-			}
-			catch (Exception e) {
-				log.error("setVariable(\""+variable+"\",<value>): ", e);
-			}
-		}
-		else if (kcontext == null) {
-			log.error("getVariable(\""+variable+"\"): kcontext must be instance of ProcessContext, but is <null>");
-		}
-		else if (!(kcontext instanceof ProcessContext)) {
-			log.error("getVariable(\""+variable+"\"): kcontext must be instance of ProcessContext, but is "+kcontext.getClass().getCanonicalName());
-		}
-	}
-}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBPMEngine.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBPMEngine.java
index bda9904..d696aa5 100644
--- a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBPMEngine.java
+++ b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBPMEngine.java
@@ -12,39 +12,24 @@
  */
 package org.eclipse.osbp.bpm.api;
 
-import java.util.ArrayList;
 import java.util.Map;
+import java.util.Set;
 
-import org.drools.KnowledgeBase;
-import org.drools.builder.KnowledgeBuilder;
-import org.drools.event.process.ProcessEventListener;
-import org.drools.io.ResourceFactoryService;
-import org.eclipse.osbp.persistence.IPersistenceService;
-import org.jbpm.task.Group;
-import org.jbpm.task.User;
-import org.jbpm.task.event.TaskEventListener;
-import org.jbpm.task.service.TaskService;
+import org.eclipse.osbp.ui.api.useraccess.IBlipProcessPermissions;
 
 public interface IBPMEngine {
-	public Map<String, ArrayList<String>> getGroupsbyuser();
-	public Map<String, ArrayList<String>> getUsersbygroup();
-	public Map<String, User> getUsers();
-	public Map<String, Group> getGroups();
-	public KnowledgeBuilder getKnowledgeBuilder();
-	public KnowledgeBase getKnowledgeBase();
-	public ResourceFactoryService getResourceFactoryService();
-	public TaskService getTaskService();
-	public void startProcess(IBlipBPMStartInfo bpm, Map <String, Object> parameters); 
-	public IPersistenceService getPersistenceService();
-	public void registerResource(String processId, String resourceName);
-	public String getResourceName(String processId);
-	public void initBPMUsers();
-	public void addOrganizationalResource(String user, String group);
-	public void addProcessEventListener(ProcessEventListener listener);
-	public void removeProcessEventListener(ProcessEventListener listener);
-	public void addTaskEventListener(TaskEventListener listener);
-	public void removeTaskEventListener(TaskEventListener listener);
-	public boolean addBpmn(String processId, String bundleResourceName, Class<?> clz);
+	void clearErrors();
+	String getErrors();
+	boolean registerProcess(IBlipBPMStartInfo startInfo, String resourceBundlePath, Class<?> bundleClass, IBlipProcessPermissions blipProcessPermissions);
+	void startProcess(IBlipBPMStartInfo bpm, Map <String, Object> parameters); 
+	String getResourceName(String processId);
+	void initBPMUsers();
+	Set<String> getGroups();
+	Set<String> getUsers();
+	void addProcessEventListener(Object listener);
+	void removeProcessEventListener(Object listener);
+	void addTaskEventListener(Object listener);
+	void removeTaskEventListener(Object listener);
 	/**
 	 * @param   taskInformationObject   object containing information about the task; it can be<ul>
 	 *      <li>process instance of type {@link org.drools.runtime.process.ProcessInstance}</li>
@@ -54,7 +39,7 @@
 	 * </ul>
 	 * @return  map with String for key and Object for values
 	 */
-	public Map<String,Object> getProcessVariables(Object taskInformationObject);
+	Map<String,Object> getProcessVariables(Object taskInformationObject);
 	/**
 	 * @param   taskInformationObject   object containing information about the task; it can be<ul>
 	 *      <li>process instance of type {@link org.drools.runtime.process.ProcessInstance}</li>
@@ -65,7 +50,7 @@
 	 * @param   variable                name of the requested variable
 	 * @return  value of the variable or null
 	 */
-	public Object getProcessVariable(Object taskInformationObject, String variable);
+	Object getProcessVariable(Object taskInformationObject, String variable);
 	/**
 	 * @param   taskInformationObject   object containing information about the task; it can be<ul>
 	 *      <li>process instance of type {@link org.drools.runtime.process.ProcessInstance}</li>
@@ -76,10 +61,12 @@
 	 * @param   variable                name of the variable to be set
 	 * @param   value                   new values of the variable
 	 */
-	public Object setProcessVariable(Object taskInformationObject, String variable, Object value);
-	public void disposeKsession(Object ksession);
-	public Object reCreateKnowledgeSession(Object taskInformationObject);
-	public void beginTransaction();
-	public void commitTransaction();
-	public void rollbackTransaction();
+	Object setProcessVariable(Object taskInformationObject, String variable, Object value);
+	void disposeKsession(Object ksession);
+	Object reCreateKnowledgeSession(Object taskInformationObject);
+	void beginTransaction();
+	void commitTransaction();
+	void rollbackTransaction();
+	Object getVariable(Object kcontext, String variable, Object defaultValue);
+	void setVariable(Object kcontext, String variable, Object value);
 }
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBPMServiceTask.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBPMServiceTask.java
new file mode 100644
index 0000000..aefdc09
--- /dev/null
+++ b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBPMServiceTask.java
@@ -0,0 +1,14 @@
+package org.eclipse.osbp.bpm.api;
+
+public interface IBPMServiceTask extends IBlipBPMUserTask {
+	ServiceExecutionMode getExecutionMode();
+	int getTimeoutInSecs();
+	ServiceImplementation getImplementation();
+	String getFunctionLibraryClass();
+	String getFunctionLibraryMethod();
+	String getWebServiceInterface();
+	String getWebServiceOperation();
+	String getJavaInterface();
+	String getJavaOperation();
+	String getParameterType();
+}
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBPMTaskClient.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBPMTaskClient.java
index a949366..a1dab84 100644
--- a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBPMTaskClient.java
+++ b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBPMTaskClient.java
@@ -15,30 +15,27 @@
 import java.util.List;
 import java.util.Map;
 
-import org.jbpm.task.Task;
-import org.jbpm.task.event.entity.TaskEventType;
-import org.jbpm.task.query.TaskSummary;
-import org.jbpm.task.service.Operation;
 import org.eclipse.osbp.dsl.common.datatypes.IDto;
 import org.eclipse.osbp.ui.api.user.IUser;
 
 public interface IBPMTaskClient extends IBlipBPMConstants {
 
-	boolean operations(final long taskId, final IUser user, final IUser alternateUser, final Operation operation);
-	Task getTask(final Long taskId);
-   	TaskSummary getUserTask(final Long taskId, final IUser user);
-	List<TaskSummary> getUserTaskList(final IUser user, boolean owned);
+	boolean operations(final long taskId, final IUser user, final IUser alternateUser, final BPMOperation operation);
+   	BPMTaskSummary getUserTask(final Long taskId, final IUser user);
+	List<BPMTaskSummary> getUserTaskList(final IUser user, boolean owned);
 	void subscribeProcessCompletedEventNotification(IBPMTaskEventNotification notification);
 	void unsubscribeProcessCompletedEventNotification(IBPMTaskEventNotification notification);
 	void subscribeTaskEventNotification(IBPMTaskEventNotification notification);
-	void subscribeTaskEventNotification(TaskEventType type, IBPMTaskEventNotification notification);
+	void subscribeTaskEventNotification(BPMTaskEventType type, IBPMTaskEventNotification notification);
 	void unsubscribeTaskEventNotification(IBPMTaskEventNotification notification);
-	void unsubscribeTaskEventNotification(TaskEventType type, IBPMTaskEventNotification notification);
-	public IDto getWorkloadDto(Object processInstanceId);
-	public String getWorkloadDtoFqn(Object taskSummary);
-	public void setWorkloadDto(Object taskSummary, IDto workloadDto);
-	public String getProcessId(Object taskSummary);
-	public Map<String,Object> getProcessVariables(Object taskSummary);
-	public Object getProcessVariable(Object taskSummary, String variable);
-	public Object setProcessVariable(Object taskSummary, String variable, Object value);
+	void unsubscribeTaskEventNotification(BPMTaskEventType type, IBPMTaskEventNotification notification);
+	IDto getWorkloadDto(BPMTaskSummary taskSummary);
+	String getWorkloadDtoFqn(BPMTaskSummary taskSummary);
+	void setWorkloadDto(BPMTaskSummary taskSummary, IDto workloadDto);
+	String getProcessId(BPMTaskSummary taskSummary);
+	Map<String,Object> getProcessVariables(BPMTaskSummary taskSummary);
+	Object getProcessVariable(BPMTaskSummary taskSummary, String variable);
+	Object setProcessVariable(BPMTaskSummary taskSummary, String variable, Object value);
+	void registerPerspectiveListener(BPMTaskClientPerspectiveListener listener);
+	void unregisterPerspectiveListener(BPMTaskClientPerspectiveListener listener);
 }
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBPMTaskEventNotification.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBPMTaskEventNotification.java
index 2261904..94c1b4e 100644
--- a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBPMTaskEventNotification.java
+++ b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBPMTaskEventNotification.java
@@ -12,12 +12,8 @@
  */
 package org.eclipse.osbp.bpm.api;
 
-import org.drools.event.process.ProcessCompletedEvent;
-import org.jbpm.task.event.entity.TaskEventType;
-import org.jbpm.task.event.entity.TaskUserEvent;
-
 //@FunctionalInterface
 public interface IBPMTaskEventNotification {
-	void notifyProcessCompletedEvent(ProcessCompletedEvent event);
-	void notifyTaskEvent(TaskEventType type, TaskUserEvent event);
+	void notifyProcessCompletedEvent();
+	void notifyTaskEvent(BPMTaskEventType type, BPMTaskUserEvent event);
 }
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBlipBPMFunctionProvider.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBlipBPMFunctionProvider.java
index 63713b5..df02d7a 100644
--- a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBlipBPMFunctionProvider.java
+++ b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBlipBPMFunctionProvider.java
@@ -16,12 +16,10 @@
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.osbp.dsl.common.datatypes.IDto;
-
 public interface IBlipBPMFunctionProvider extends IBlipBPMConstants {
 	boolean initBlip();
 	Map<String, IBlipBPMStartInfo> getBpmns();
 	List<String> getErrors();
 	void startProcess(String processName);
-	public IBlipBPMStartInfo getStartInfo(Object processInstanceId);
+	public IBlipBPMStartInfo getStartInfo(BPMTaskSummary taskSummary);
 }
diff --git a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBlipBPMStartInfo.java b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBlipBPMStartInfo.java
index 8295ada..e0c86bb 100644
--- a/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBlipBPMStartInfo.java
+++ b/org.eclipse.osbp.bpm.api/src/org/eclipse/osbp/bpm/api/IBlipBPMStartInfo.java
@@ -80,5 +80,5 @@
 	/**
 	 * @return the list of all BPM service tasks in this blip
 	 */
-	public List<AbstractBPMServiceTask> getServiceTasks();
+	public List<IBPMServiceTask> getServiceTasks();
 }