diff --git a/org.eclipse.osbp.vaaclipse.addons.softwarefactory/META-INF/MANIFEST.MF b/org.eclipse.osbp.vaaclipse.addons.softwarefactory/META-INF/MANIFEST.MF
index 890a208..20ed1ef 100644
--- a/org.eclipse.osbp.vaaclipse.addons.softwarefactory/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.vaaclipse.addons.softwarefactory/META-INF/MANIFEST.MF
@@ -107,8 +107,7 @@
  org.eclipse.osbp.vaaclipse.addons.softwarefactory.perspective;version="0.9.0",
  org.eclipse.osbp.vaaclipse.addons.softwarefactory.service;version="0.9.0",
  org.eclipse.osbp.vaaclipse.addons.softwarefactory.systemsettings;version="0.9.9",
- org.eclipse.osbp.vaaclipse.addons.softwarefactory.userfilter;version="0.9.0",
- org.eclipse.osbp.vaaclipse.addons.softwarefactory.welcome;version="0.9.0"
+ org.eclipse.osbp.vaaclipse.addons.softwarefactory.userfilter;version="0.9.0"
 Bundle-ActivationPolicy: lazy
 Bundle-Activator: org.eclipse.osbp.vaaclipse.addons.softwarefactory.Activator
 Service-Component: OSGI-INF/*.xml
diff --git a/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/perspective/DialogProvider.java b/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/perspective/DialogProvider.java
index ce41dc1..947a154 100644
--- a/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/perspective/DialogProvider.java
+++ b/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/perspective/DialogProvider.java
@@ -87,12 +87,10 @@
 import org.eclipse.osbp.runtime.common.event.SelectionStore;
 import org.eclipse.osbp.runtime.common.filter.IDTOHistorizedService;
 import org.eclipse.osbp.runtime.common.filter.IDTOService;
-import org.eclipse.osbp.runtime.common.filter.IDTOService;
 import org.eclipse.osbp.runtime.common.validation.IStatus;
 import org.eclipse.osbp.runtime.common.validation.ValidationKind;
 import org.eclipse.osbp.runtime.web.vaadin.components.dialogs.AcceptDeleteDialog;
 import org.eclipse.osbp.runtime.web.vaadin.components.dialogs.AcceptLoosingDataDialog;
-import org.eclipse.osbp.runtime.web.vaadin.components.dialogs.AcceptSaveDialog;
 import org.eclipse.osbp.runtime.web.vaadin.components.dialogs.QueryDeleteDialog;
 import org.eclipse.osbp.runtime.web.vaadin.databinding.VaadinObservables;
 import org.eclipse.osbp.ui.api.contextfunction.IViewEmbeddedProvider;
@@ -505,9 +503,13 @@
 	@Override
 	public void validationChanged(IFieldValidationManager.Event event) {
 		// add them to the Vaaclipse status manager
-		IStatusScope scope = statusManager.getScopeFor(mPart);
-		scope.modifyStatus(event.getOldStatus(), event.getNewStatus());
-		applyValidationResult();
+		if(mPart != null) {
+			IStatusScope scope = statusManager.getScopeFor(mPart);
+			scope.modifyStatus(event.getOldStatus(), event.getNewStatus());
+			applyValidationResult();
+		} else {
+			viewContext.setBean(BEAN_SLOT__VALIDATION_ERROR, Boolean.FALSE);
+		}
 	}
 
 	/**
@@ -515,8 +517,9 @@
 	 */
 	protected void applyValidationResult() {
 		// set the validation result
-		viewContext.setBean(BEAN_SLOT__VALIDATION_ERROR, Boolean.FALSE);
-		log.debug("applyValidationResult {}", ((Boolean)viewContext.getBean(BEAN_SLOT__VALIDATION_ERROR)).booleanValue());
+		boolean validationError = ((Boolean)viewContext.getBean(BEAN_SLOT__VALIDATION_ERROR)).booleanValue();
+		viewContext.setBean(BEAN_SLOT__VALIDATION_ERROR, validationError);
+		log.debug("applyValidationResult {}", validationError);
 	}
 
 	@IsValid
@@ -865,7 +868,8 @@
 		    	public void afterBind(IContext context) {
 		    		for(UiBeanSlot slot : dialogModel.getUiView().getBeanSlots()) {
 		    			if(dslMetadataService.hasSupertype(slot.getJvmType(), IStateMachineParticipant.class)) {
-		    				((IStateMachineParticipant)context.getBeanSlot(slot.getName()).getValue()).init();
+		    				IStateMachine sm = ((IStateMachineParticipant)context.getBeanSlot(slot.getName()).getValue()).getStatemachine();
+		    				((IStateMachineParticipant)context.getBeanSlot(slot.getName()).getValue()).init( sm.getHostName(), sm.getRemotePort());
 		    			}
 		    			if(dslMetadataService.hasSupertype(slot.getJvmType(), IDataProvider.class)) {
 				    		for(UiBeanSlot innerslot : dialogModel.getUiView().getBeanSlots()) {
@@ -1424,12 +1428,13 @@
 	 * Creates the embedded toolbar for embedded dialogs.
 	 */
 	private void createEmbeddedToolbar() {
-		taskButtons = new ArrayList<Button>();
+		taskButtons = new ArrayList<>();
 		HorizontalLayout tools = new HorizontalLayout();
 		tools.addStyleName("os-embedded-toolbar");
 		tools.setSpacing(false);
 
 		Button b = new Button(null, new Button.ClickListener() {
+			@Override
 			public void buttonClick(ClickEvent event) {
 				DTO savedDto = (DTO) viewContext.getBean(IViewContext.MAIN_BEAN_SLOT);
 				if(validate(savedDto)) {
@@ -1510,6 +1515,7 @@
 		return dslMetadataService;
 	}
 
+	@Override
 	public IThemeResourceService getThemeResourceService() {
 		return themeResourceService;
 	}
diff --git a/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/perspective/PerspectiveProvider.java b/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/perspective/PerspectiveProvider.java
index b661cc2..59c0d8a 100644
--- a/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/perspective/PerspectiveProvider.java
+++ b/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/perspective/PerspectiveProvider.java
@@ -77,6 +77,7 @@
 import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent.EventDispatcherCommand;
 import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent.EventDispatcherDataTag;
 import org.eclipse.osbp.runtime.common.event.IEventDispatcher;
+import org.eclipse.osbp.ui.api.contextfunction.IDashboardProvider;
 import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
 import org.eclipse.osbp.ui.api.organization.IOrganizationViewPartProvider;
 import org.eclipse.osbp.ui.api.perspective.IPerspectiveProvider;
@@ -87,7 +88,6 @@
 import org.eclipse.osbp.utils.vaadin.bpmn.BpmnView;
 import org.eclipse.osbp.utils.vaadin.saiku.SaikuView;
 import org.eclipse.osbp.vaaclipse.addons.softwarefactory.maintoolbar.IMainToolbarProvider;
-import org.eclipse.osbp.vaaclipse.addons.softwarefactory.welcome.WelcomeView;
 import org.eclipse.osbp.vaaclipse.publicapi.authentication.AuthenticationConstants;
 import org.eclipse.osbp.vaadin.emf.api.IModelingContext;
 import org.eclipse.osbp.xtext.action.ActionDSLPackage;
@@ -130,7 +130,6 @@
 import org.eclipse.osbp.xtext.perspective.PerspectiveTable;
 import org.eclipse.osbp.xtext.perspective.PerspectiveTopology;
 import org.eclipse.osbp.xtext.perspective.PerspectiveView;
-import org.eclipse.osbp.xtext.perspective.PerspectiveWelcome;
 import org.eclipse.osbp.xtext.reportdsl.Report;
 import org.eclipse.osbp.xtext.reportdsl.ReportDSLPackage;
 import org.eclipse.osbp.xtext.reportdsl.ReportPackage;
@@ -146,6 +145,7 @@
 import org.osgi.service.event.EventHandler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import com.vaadin.server.Page;
 
 /**
@@ -210,6 +210,10 @@
 	@Inject
 	private IEventDispatcher eventDispatcher;
 
+	@Inject
+	@Optional
+	private IDashboardProvider dashboardProvider;
+
 	/** The do logout. */
 	private EventHandler doLogout;
 
@@ -690,10 +694,6 @@
 		} else if (viewModel instanceof PerspectiveBPMN) {
 			String className = BpmnView.class.getCanonicalName();
 			return dslMetadataService.getClassURI(className, IPerspectiveProvider.PerspectiveViewType.BPMN);
-		} else if (viewModel instanceof PerspectiveWelcome) {
-			String className = WelcomeView.class.getCanonicalName();
-			Bundle bundle = FrameworkUtil.getBundle(WelcomeView.class);
-			return E4Constants.BUNDLE_PROTOCOL_SCHEME + "://" + bundle.getSymbolicName() + "/" + className;
 		} else if (viewModel instanceof PerspectiveSearch) {
 			String className = SearchView.class.getCanonicalName();
 			Bundle bundle = FrameworkUtil.getBundle(SearchView.class);
@@ -782,10 +782,6 @@
 		} else if (viewModel instanceof PerspectiveBPMN) {
 			String className = BpmnView.class.getCanonicalName();
 			return dslMetadataService.getClassURI(className, IPerspectiveProvider.PerspectiveViewType.BPMN);
-		} else if (viewModel instanceof PerspectiveWelcome) {
-			String className = WelcomeView.class.getCanonicalName();
-			Bundle bundle = FrameworkUtil.getBundle(WelcomeView.class);
-			return E4Constants.BUNDLE_PROTOCOL_SCHEME + "://" + bundle.getSymbolicName() + "/" + className;
 		} else if (viewModel instanceof PerspectiveSaiku) {
 			String className = SaikuView.class.getCanonicalName();
 			Bundle bundle = FrameworkUtil.getBundle(SaikuView.class);
@@ -1171,13 +1167,17 @@
 	 */
 	@Override
 	public void openPerspective(String perspectiveId) {
-		PerspectiveFound perspectiveFound = findPerspective(perspectiveId);
-		if (perspectiveFound != null) {
-			log.debug("{}", "openPerspective starts");
-			openPerspective(perspectiveFound, null);
-			log.debug("{}", "openPerspective finished");
+		if(IDSLMetadataService.DASHBOARD.equals(perspectiveId) && dashboardProvider != null) {
+			dashboardProvider.createDashboard(eclipseContext);
 		} else {
-			log.error("perspective id {} not found", perspectiveId);
+			PerspectiveFound perspectiveFound = findPerspective(perspectiveId);
+			if (perspectiveFound != null) {
+				log.debug("{}", "openPerspective starts");
+				openPerspective(perspectiveFound, null);
+				log.debug("{}", "openPerspective finished");
+			} else {
+				log.error("perspective id {} not found", perspectiveId);
+			}
 		}
 	}
 
diff --git a/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/service/OSBPServiceAddon.java b/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/service/OSBPServiceAddon.java
index 673b118..0783b7d 100644
--- a/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/service/OSBPServiceAddon.java
+++ b/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/service/OSBPServiceAddon.java
@@ -27,7 +27,6 @@
 import org.eclipse.e4.core.contexts.ContextInjectionFactory;
 import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.core.contexts.RunAndTrack;
-import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.core.services.translation.TranslationService;
 import org.eclipse.e4.ui.model.application.MApplication;
 import org.eclipse.e4.ui.model.application.commands.MBindingContext;
@@ -55,7 +54,6 @@
 import org.eclipse.osbp.runtime.common.event.IEventDispatcher;
 import org.eclipse.osbp.runtime.common.i18n.II18nService;
 import org.eclipse.osbp.ui.api.contextfunction.ICommandsProvider;
-import org.eclipse.osbp.ui.api.contextfunction.IDashboardProvider;
 import org.eclipse.osbp.ui.api.message.IMessageRequester;
 import org.eclipse.osbp.ui.api.message.MessageEvent;
 import org.eclipse.osbp.ui.api.message.MessageEvent.EventType;
@@ -72,7 +70,6 @@
 import org.eclipse.osbp.vaaclipse.addons.softwarefactory.handler.ThemeHandler;
 import org.eclipse.osbp.vaaclipse.addons.softwarefactory.handler.UserHandler;
 import org.eclipse.osbp.vaaclipse.addons.softwarefactory.perspective.PerspectiveProvider;
-import org.eclipse.osbp.vaaclipse.addons.softwarefactory.welcome.WelcomeView;
 import org.eclipse.osbp.vaaclipse.common.ecview.api.IECViewContainer;
 import org.eclipse.osbp.vaaclipse.publicapi.theme.ThemeEngine;
 import org.eclipse.osbp.vaaclipse.publicapi.theme.ThemeManager;
@@ -100,10 +97,6 @@
 	private ThemeManager themeManager;
 
 	private IDSLMetadataService dslMetadataService;
-	
-	@Inject
-	@Optional
-	private IDashboardProvider dashboardProvider;
 
 	protected Map<String, MessageDialog> messageDialogs = new HashMap<>();
 	protected Locale addonLocale;
@@ -161,10 +154,6 @@
 				return true;
 			}
 		});
-
-		if (perspectiveProvider != null) {
-			perspectiveProvider.openPerspective(IPerspectiveProvider.WELCOME_SCREEN_ID, "Welcome", WelcomeView.class);
-		}
 	}
 
 	/**
diff --git a/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/service/ThemeResourceService.java b/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/service/ThemeResourceService.java
index 2593666..80540ee 100644
--- a/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/service/ThemeResourceService.java
+++ b/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/service/ThemeResourceService.java
@@ -142,13 +142,13 @@
 	public String getThemeResourceHTML(String subject, Locale locale) {
 		String localeTag = locale.toLanguageTag();
 		String path = getRelativeResourePath(subject, ThemeResourceType.HTML);
-		String theme = themeManager.getThemeId();
 		StringBuilder htmlLoader = new StringBuilder();
-		htmlLoader.append("<iframe src=\"./VAADIN/themes/$THEME$/$PATH$?localeTag=$LOCALETAG$\""); 
+		htmlLoader.append("<iframe src=\"./VAADIN/themes/common/$PATH$?localeTag=$LOCALETAG$\""); 
 		htmlLoader.append("\twidth=\"100%\" height=\"100%\" name=\"$SUBJECT$ page\">");
 		htmlLoader.append("\t\t<p>Alternative $SUBJECT$ page</p>");
 		htmlLoader.append("</iframe>");
-		return htmlLoader.toString().replace("$SUBJEC$T", subject).replace("$THEME$", theme).replace("$PATH$", path).replace("$LOCALETAG$", localeTag);
+		String html = htmlLoader.toString().replace("$SUBJECT$", subject).replace("$PATH$", path).replace("$LOCALETAG$", localeTag);
+		return html;
 	}
 
 	@Override
@@ -163,8 +163,7 @@
 
 	@Override
 	public String getThemeResourceMxGraphPath() {
-		String theme = themeManager.getThemeId();
-		return "./VAADIN/themes/" + theme + "/mxGraph";
+		return "./VAADIN/themes/common/mxGraph";
 	}
 	
 }
diff --git a/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/welcome/WelcomeView.java b/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/welcome/WelcomeView.java
deleted file mode 100644
index 36f1b18..0000000
--- a/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/welcome/WelcomeView.java
+++ /dev/null
@@ -1,87 +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 2.0        
- *  which accompanies this distribution, and is available at                  
- *  https://www.eclipse.org/legal/epl-2.0/                                 
- *                                 
- *  SPDX-License-Identifier: EPL-2.0                                 
- *                                                                            
- *  Contributors:                                                      
- * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
- * 
- */
-package org.eclipse.osbp.vaaclipse.addons.softwarefactory.welcome;
-
-import java.util.Locale;
-
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-
-import org.eclipse.e4.core.contexts.IEclipseContext;
-import org.eclipse.e4.ui.model.application.MApplication;
-import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
-import org.eclipse.osbp.ui.api.user.IUser;
-
-import com.vaadin.server.ClientConnector;
-import com.vaadin.server.ClientConnector.AttachEvent;
-import com.vaadin.server.ClientConnector.DetachEvent;
-import com.vaadin.shared.ui.label.ContentMode;
-import com.vaadin.ui.AbstractComponent;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-
-public class WelcomeView implements IUser.UserLocaleListener, ClientConnector.DetachListener, ClientConnector.AttachListener {
-
-	private static final long serialVersionUID = 1L;
-	private AbstractComponent label = null;
-	private VerticalLayout parent;
-	private IThemeResourceService themeResourceService;
-	private IUser user;
-	private Locale locale;
-
-	@Inject
-	public WelcomeView(VerticalLayout parent, IEclipseContext context, MApplication app) {
-		this.parent = parent;
-		this.themeResourceService = context.get(IThemeResourceService.class);
-		this.user = context.get(IUser.class);
-		locale = user.getLocale();
-		parent.addStyleName("os-welcome");
-	    parent.addAttachListener(this);
-	    parent.addDetachListener(this);
-	}
-	
-	@PostConstruct
-	public void render() {
-		renderView();
-	}
-
-	private void renderView() {
-		if (label != null) {
-			parent.removeComponent(label);
-		}
-		label = new Label(themeResourceService.getThemeResourceHTML("WelcomeTRANSLATABLE", locale), ContentMode.HTML);
-		label.setSizeFull();
-		parent.addComponent(label);
-		parent.setMargin(true);
-	}
-
-	@Override
-	public void attach(AttachEvent event) {
-	    user.addUserLocaleListener(this);
-	}
-
-	@Override
-	public void detach(DetachEvent event) {
-	    user.removeUserLocaleListener(this);
-	}
-
-	@Override
-	public void localeChanged(Locale locale) {
-		this.locale = locale;
-		parent.removeAllComponents();
-		renderView();
-	}
-}
