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/org.eclipse.osbp.abstractstatemachine.feature/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.abstractstatemachine.feature/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.abstractstatemachine.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.abstractstatemachine.feature/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.abstractstatemachine.feature/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.abstractstatemachine.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.abstractstatemachine.feature/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.abstractstatemachine.feature/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.abstractstatemachine.feature/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.abstractstatemachine/.settings/com.vaadin.integration.eclipse.prefs b/org.eclipse.osbp.abstractstatemachine/.settings/com.vaadin.integration.eclipse.prefs
new file mode 100644
index 0000000..e1173bc
--- /dev/null
+++ b/org.eclipse.osbp.abstractstatemachine/.settings/com.vaadin.integration.eclipse.prefs
@@ -0,0 +1,2 @@
+com.vaadin.integration.eclipse.previousCompileAction=widgetset
+eclipse.preferences.version=1
diff --git a/org.eclipse.osbp.abstractstatemachine/.settings/org.eclipse.bpmn2.modeler.core.prefs b/org.eclipse.osbp.abstractstatemachine/.settings/org.eclipse.bpmn2.modeler.core.prefs
new file mode 100644
index 0000000..4bffcea
--- /dev/null
+++ b/org.eclipse.osbp.abstractstatemachine/.settings/org.eclipse.bpmn2.modeler.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+target.runtime=org.jboss.runtime.jbpm5
diff --git a/org.eclipse.osbp.abstractstatemachine/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.abstractstatemachine/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.abstractstatemachine/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.abstractstatemachine/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.abstractstatemachine/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..a698e59
--- /dev/null
+++ b/org.eclipse.osbp.abstractstatemachine/.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.abstractstatemachine/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.abstractstatemachine/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.abstractstatemachine/.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.abstractstatemachine/.settings/org.eclipse.pde.core.prefs b/org.eclipse.osbp.abstractstatemachine/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..f29e940
--- /dev/null
+++ b/org.eclipse.osbp.abstractstatemachine/.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.abstractstatemachine/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.abstractstatemachine/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.abstractstatemachine/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.abstractstatemachine/META-INF/MANIFEST.MF b/org.eclipse.osbp.abstractstatemachine/META-INF/MANIFEST.MF
index 14c1dee..d147823 100644
--- a/org.eclipse.osbp.abstractstatemachine/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.abstractstatemachine/META-INF/MANIFEST.MF
@@ -16,8 +16,12 @@
  org.eclipse.osgi.services;bundle-version="3.5.100",
  com.vaadin.shared;bundle-version="[7.7.6,7.8.0)",
  org.eclipse.osbp.fork.jpos;bundle-version="[1.14.0,1.15.0)",
- org.eclipse.osbp.jpa.services;bundle-version="0.9.0"
-Import-Package: javax.servlet;version="2.6.0",
+ org.eclipse.osbp.jpa.services;bundle-version="0.9.0",
+ org.eclipse.e4.ui.model.workbench,
+ org.eclipse.osbp.vaadin.addons.keyevents;bundle-version="0.9.0",
+ org.jsoup;bundle-version="1.8.3"
+Import-Package: com.vaadin.ui,
+ javax.servlet;version="2.6.0",
  javax.servlet.http;version="2.6.0",
  org.eclipse.e4.core.contexts,
  org.eclipse.osbp.preferences;version="0.9.0",
diff --git a/org.eclipse.osbp.abstractstatemachine/src/org/eclipse/osbp/abstractstatemachine/AbstractDataProvider.java b/org.eclipse.osbp.abstractstatemachine/src/org/eclipse/osbp/abstractstatemachine/AbstractDataProvider.java
index 4f16f6f..a51d886 100644
--- a/org.eclipse.osbp.abstractstatemachine/src/org/eclipse/osbp/abstractstatemachine/AbstractDataProvider.java
+++ b/org.eclipse.osbp.abstractstatemachine/src/org/eclipse/osbp/abstractstatemachine/AbstractDataProvider.java
@@ -58,7 +58,11 @@
 
 	@Override
 	public Boolean find(IDataProvider.Provider listener, String dtoAlias, String fieldName, Object search) {
-		return find(listener, dtoAlias, new Query(new LCompare.Equal(fieldName, search)));
+		Boolean retval = find(listener, dtoAlias, new Query(new LCompare.Equal(fieldName, search)));
+		if(!retval) {
+			LOGGER.error("find for {} failed", search);
+		}
+		return retval;
 	}
 
 	@Override
diff --git a/org.eclipse.osbp.abstractstatemachine/src/org/eclipse/osbp/abstractstatemachine/AbstractPeripheralService.java b/org.eclipse.osbp.abstractstatemachine/src/org/eclipse/osbp/abstractstatemachine/AbstractPeripheralService.java
index 5edf050..02c61a6 100644
--- a/org.eclipse.osbp.abstractstatemachine/src/org/eclipse/osbp/abstractstatemachine/AbstractPeripheralService.java
+++ b/org.eclipse.osbp.abstractstatemachine/src/org/eclipse/osbp/abstractstatemachine/AbstractPeripheralService.java
@@ -13,7 +13,6 @@
  */
 package org.eclipse.osbp.abstractstatemachine;
 
-import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
 import java.net.MalformedURLException;
@@ -31,10 +30,16 @@
 import org.eclipse.osbp.ui.api.pos.ISignatureListener;
 import org.eclipse.osbp.ui.api.pos.IZVTTransactionData;
 import org.eclipse.osbp.ui.api.pos.PenData;
+import org.eclipse.osbp.ui.api.statemachine.IBeeper;
 import org.eclipse.osbp.ui.api.statemachine.IPeripheral;
 import org.eclipse.osbp.ui.api.statemachine.IStateMachine;
+import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
 import org.osgi.framework.FrameworkUtil;
 
+import com.vaadin.server.ExternalResource;
+import com.vaadin.ui.Audio;
+import com.vaadin.ui.Video;
+
 import jpos.BaseControl;
 import jpos.CashDrawer;
 import jpos.CashDrawerConst;
@@ -49,7 +54,6 @@
 import jpos.config.JposEntryRegistry;
 import jpos.epson.EpsonLineDisplayConst;
 import jpos.epson.EpsonPOSPrinterConst;
-import jpos.events.ErrorEvent;
 import jpos.events.ErrorListener;
 import jpos.events.OutputCompleteEvent;
 import jpos.events.OutputCompleteListener;
@@ -64,8 +68,12 @@
  * PeripheralService is a bridge between javaPOS and the state machine
  * participant.
  */
-public abstract class AbstractPeripheralService extends AbstractStateMachineParticipant
-		implements IPeripheral, IPeripheral.Command, StatusUpdateListener, ErrorListener, OutputCompleteListener, ISignatureListener {
+public abstract class AbstractPeripheralService extends AbstractStateMachineParticipant	implements IPeripheral, IPeripheral.Command, StatusUpdateListener, ErrorListener, OutputCompleteListener, ISignatureListener {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 5490886401274716894L;
 
 	/** The devices. */
 	protected Map<String, BaseControl> devices = new HashMap<>();
@@ -88,7 +96,27 @@
 	/** is init done correctly? */
 	protected boolean initDone = false;
 	
+	/** The pen data supplied by signature pad. */
 	private List<PenData> penData = new ArrayList<>();
+	
+	/** The beeper. */
+	protected IBeeper beeper;
+	
+	/** The audio. */
+	protected Audio audio;
+	
+	/** The video. */
+	protected Video video;
+	
+	@Override
+	public boolean equals(Object obj) {
+		return super.equals(obj);
+	}
+
+	@Override
+	public int hashCode() {
+		return super.hashCode();
+	}
 
 	/*
 	 * (non-Javadoc)
@@ -111,7 +139,7 @@
 	 * 
 	 * @see foodmartdialogdslplugin.AbstractStateMachineParticipant#init()
 	 */
-	@Override
+	@Override 
 	public void init() {
 		LOGGER.debug("Library path=" + System.getProperty("java.library.path"));
 		// load all names of configured devices, instantiate and cache it
@@ -135,11 +163,6 @@
 		SimpleServiceManager serviceManager = new SimpleServiceManager(jposProperties);
 		serviceManager.getEntryRegistry().load();
 		props = serviceManager.getEntryRegistry();
-		if (props != null && props.getSize() != 0) {
-			initDone = initDevices();
-		} else {
-			LOGGER.debug("no devices are configured in file:{}", configFile);
-		}
 	}
 
 	/*
@@ -904,7 +927,7 @@
 	 * @see jpos.events.ErrorListener#errorOccurred(jpos.events.ErrorEvent)
 	 */
 	@Override
-	public void errorOccurred(ErrorEvent e) { // NOSONAR
+	public void errorOccurred(jpos.events.ErrorEvent e) { // NOSONAR
 		switch (e.getErrorCodeExtended()) {
 		case POSPrinterConst.JPOS_EPTR_COVER_OPEN:
 			if (statemachine != null) {
@@ -1203,7 +1226,7 @@
 	public void setSignatureOpen(String dummy) {
 		if(POSServiceBinder.getSignatureService() != null) {
 			if(POSServiceBinder.getSignatureService().openTablet(statemachine.getBlobService())) {
-				statemachine.schedule(statemachine, 500L, new MessageEvent(EventType.TRIGGER, "onSignaturePadOpen"));
+				statemachine.schedule(statemachine, 500, new MessageEvent(EventType.TRIGGER, "onSignaturePadOpen"));
 			}
 		}
 	}
@@ -1283,4 +1306,24 @@
 	public String getSignatureBlob() {
 		return POSServiceBinder.getSignatureService().getSignatureBlob(statemachine.getSceenWidth(), statemachine.getScreenHeight());
 	}
+
+    public void setBeeper(String parameters) {
+    	Integer duration;
+    	Integer frequency;
+		String[] parts = parameters.split("\\|");
+		duration = Integer.parseInt(parts[0]);
+		frequency = Integer.parseInt(parts[1]);
+		beeper.beep(duration, frequency);
+    }
+
+    public void setPlayer(String name) {
+    	video.setSources(statemachine.getThemeResourceService().getThemeResource(name, ThemeResourceType.VIDEO));
+		video.play();
+    }
+
+    public void setSound(String name) { 
+    	audio.setSources(statemachine.getThemeResourceService().getThemeResource(name, ThemeResourceType.SOUND));
+//    	audio.setSources(new ExternalResource("http://www.podtrac.com/pts/redirect.mp3?http://piledriver.hipcast.com/deluge/WrestleManiaX7OSWReview55.mp3"));
+    	audio.play();
+    }
 }
diff --git a/org.eclipse.osbp.abstractstatemachine/src/org/eclipse/osbp/abstractstatemachine/AbstractStateMachine.java b/org.eclipse.osbp.abstractstatemachine/src/org/eclipse/osbp/abstractstatemachine/AbstractStateMachine.java
index b79a6a9..2436b1e 100644
--- a/org.eclipse.osbp.abstractstatemachine/src/org/eclipse/osbp/abstractstatemachine/AbstractStateMachine.java
+++ b/org.eclipse.osbp.abstractstatemachine/src/org/eclipse/osbp/abstractstatemachine/AbstractStateMachine.java
@@ -20,17 +20,18 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
-import java.util.Timer;
-import java.util.TimerTask;
 import java.util.concurrent.CopyOnWriteArraySet;
 
 import javax.annotation.PreDestroy;
+import javax.swing.Timer;
 
 import org.eclipse.e4.core.contexts.IEclipseContext;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.osbp.dsl.common.datatypes.IDto;
 import org.eclipse.osbp.runtime.common.filter.IQuery;
 import org.eclipse.osbp.runtime.common.session.ISession;
@@ -49,13 +50,19 @@
 import org.eclipse.osbp.ui.api.user.IUser;
 import org.eclipse.osbp.utils.vaadin.MessageDialog;
 import org.eclipse.osbp.utils.vaadin.YesNoDialog;
+import org.eclipse.osbp.vaadin.addons.keyevents.KeyEventExtension;
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
 import org.slf4j.Logger;
 
+import com.vaadin.event.ShortcutAction.KeyCode;
 import com.vaadin.server.Page;
 import com.vaadin.server.WebBrowser;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.HasComponents;
+import com.vaadin.ui.Panel;
 import com.vaadin.ui.UI;
+import com.vaadin.ui.VerticalLayout;
 
 public abstract class AbstractStateMachine implements IStateMachine, IMessageRequester.ClickRecipient {
 	private static final String ENABLED = "Enabled";
@@ -66,7 +73,6 @@
 	protected Map<String, MessageDialog> messageDialogs = new HashMap<>();
 	protected Map<String, YesNoDialog> yesnoDialogs = new HashMap<>();
 	protected WebBrowser webBrowser = Page.getCurrent().getWebBrowser();
-	protected Timer timer;
 	protected IUser user;
 	protected Locale locale;
 	protected IDSLMetadataService dslMetadataService;
@@ -77,6 +83,78 @@
 	protected SelectableChannel channel;
 	protected String lastTrigger;
 	protected IEclipseContext eclipseContext;
+	protected Map<Integer, String> keyMapper = new HashMap<Integer, String>() {
+		private static final long serialVersionUID = 8801421284339992078L;
+		{
+			put(KeyCode.BACKSPACE, "BACKSPACE");
+			put(KeyCode.TAB, "TAB");
+			put(KeyCode.ENTER, "ENTER");
+			put(KeyCode.ESCAPE, "ESC");
+			put(KeyCode.PAGE_UP, "PGUP");
+			put(KeyCode.PAGE_DOWN, "PGDOWN");
+			put(KeyCode.END, "END");
+			put(KeyCode.HOME, "HOME");
+			put(KeyCode.ARROW_LEFT, "LEFTARROW");
+			put(KeyCode.ARROW_UP, "UPARROW");
+			put(KeyCode.ARROW_RIGHT, "RIGHTARROW");
+			put(KeyCode.ARROW_DOWN, "DOWNARROW");
+			put(KeyCode.INSERT, "INSERT");
+			put(KeyCode.DELETE, "DELETE");
+			put(KeyCode.F1, "F1");
+			put(KeyCode.F2, "F2");
+			put(KeyCode.F3, "F3");
+			put(KeyCode.F4, "F4");
+			put(KeyCode.F5, "F5");
+			put(KeyCode.F6, "F6");
+			put(KeyCode.F7, "F7");
+			put(KeyCode.F8, "F8");
+			put(KeyCode.F9, "F9");
+			put(KeyCode.F10, "F10");
+			put(KeyCode.F11, "F11");
+			put(KeyCode.F12, "F12");
+		}
+	};
+	private KeyEventExtension extension = null;
+
+	@Override
+	public void installKeyEventConsumer(VerticalLayout layout) {
+		extension = KeyEventExtension.addTo(layout);
+		extension.setCallback(this::keyPressed);
+	}
+
+	@Override
+	public void uninstallKeyEventConsumer() {
+		if(extension != null) {
+			extension.remove();
+			extension = null;
+		}
+	}
+
+	protected Component findById(HasComponents root, String id) {
+		Iterator<Component> iterate = root.iterator();
+		while (iterate.hasNext()) {
+			Component c = iterate.next();
+			if (id.equals(c.getId())) {
+				return c;
+			}
+			if (c instanceof HasComponents) {
+				Component cc = findById((HasComponents) c, id);
+				if (cc != null)
+					return cc;
+			}
+		}
+		return null;
+	}
+
+	protected void keyPressed(org.eclipse.osbp.vaadin.addons.keyevents.client.Event event) {
+		if (!Character.isISOControl(event.charCode)) {
+			processEvent(this, new MessageEvent(EventType.KEYBOARD, Character.toString((char) event.charCode)));
+		} else {
+			 if (keyMapper.containsKey(event.charCode)) {
+				 processEvent(this, new MessageEvent(EventType.FUNCTIONALKEYBOARD, keyMapper.get(event.charCode)));
+			 }
+		}
+	}
 
 	private void addEventProvider(IEventSource.Enabler listener) {
 		enablerList.add(listener);
@@ -467,8 +545,6 @@
 
 	@PreDestroy
 	void destroy() {
-		timer.cancel();
-		timer = null;
 	}
 
 	@Override
@@ -482,31 +558,12 @@
 	}
 
 	@Override
-	public void schedule(IStateMachine statemachine, long milliseconds, MessageEvent event) {
-		if (timer == null) {
-			timer = new Timer();
-		} else {
-			timer.cancel();
-			timer.purge();
-			timer = new Timer();
-		}
-		timer.schedule(new EventSourceTask(statemachine, event), milliseconds);
-	}
-
-	class EventSourceTask extends TimerTask {
-		private IStateMachine statemachine;
-		private MessageEvent event;
-
-		public EventSourceTask(IStateMachine statemachine, MessageEvent event) {
-			this.statemachine = statemachine;
-			this.event = event;
-		}
-
-		@Override
-		public void run() {
-			if (UI.getCurrent().isAttached())
-				statemachine.processEvent(statemachine, event);
-		}
+	public void schedule(IStateMachine statemachine, int milliseconds, MessageEvent event) {
+		Timer timer = new Timer(milliseconds, action -> {
+			statemachine.processEvent(statemachine, event);
+		});
+		timer.setRepeats(false);
+		timer.start();
 	}
 
 	/**
diff --git a/org.eclipse.osbp.abstractstatemachine/src/org/eclipse/osbp/abstractstatemachine/AbstractStateMachineParticipant.java b/org.eclipse.osbp.abstractstatemachine/src/org/eclipse/osbp/abstractstatemachine/AbstractStateMachineParticipant.java
index a323000..72dcc19 100644
--- a/org.eclipse.osbp.abstractstatemachine/src/org/eclipse/osbp/abstractstatemachine/AbstractStateMachineParticipant.java
+++ b/org.eclipse.osbp.abstractstatemachine/src/org/eclipse/osbp/abstractstatemachine/AbstractStateMachineParticipant.java
@@ -34,15 +34,25 @@
 
 public abstract class AbstractStateMachineParticipant implements
 		IStateMachineParticipant {
-
+	private static final long serialVersionUID = -7670617914357429160L;
 	/** The LOGGER. */
 	protected static final Logger LOGGER = LoggerFactory
 			.getLogger(AbstractStateMachineParticipant.class);
 	protected PropertyChangeSupport pcs = new PropertyChangeSupport(this);
-	protected IStateMachine statemachine;
+	protected transient IStateMachine statemachine;
 	protected Locale locale;
 
-	public void addPropertyChangeListener(PropertyChangeListener listener) {
+	@Override
+	public boolean equals(Object obj) {
+		return super.equals(obj);
+	}
+
+	@Override
+	public int hashCode() {
+		return super.hashCode();
+	}
+
+	void addPropertyChangeListener(PropertyChangeListener listener) {
 		pcs.addPropertyChangeListener(listener);
 	}
 
