diff --git a/.gitignore b/.gitignore
index a5198bc..ec79026 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,4 +13,37 @@
 **git.properties
 .DS_Store
 **.DS_Store
-**/target
\ No newline at end of file
+**/target
+**/target/
+**/.metadata/
+
+**/emf-gen/**/.gitignore
+**/src-gen/**/.gitignore
+**/git.properties
+**/*.java._trace
+**/*.log
+**/*.log.properties
+
+**/bin/
+**/build/
+*.class
+*.ctrl
+**/Debug/
+.DS_Store
+*.ear
+*.war
+
+**/*.actionbin
+**/*.blipbin
+**/*.chartbin
+**/*.cubebin
+**/*.datatypebin
+**/*.dtobin
+**/*.entitybin
+**/*.servicebin
+**/*.tablebin
+**/*.uibin
+**/*.uisemanticbin
+**/*.xtendbin
+**/*.xtextbin
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/jenkins.build.config.xml b/jenkins.build.config.xml
index d38c2bf..4631762 100644
--- a/jenkins.build.config.xml
+++ b/jenkins.build.config.xml
@@ -15,10 +15,8 @@
 <jenkins>
 	<!-- DO NOT EDIT BELOW THIS LINE -->
         <jenkins.build.dependencies>
-                <jenkins.build.dependency>org.eclipse.osbp.dsl</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.ecview.core</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.runtime</jenkins.build.dependency>
-                <jenkins.build.dependency>org.eclipse.osbp.runtime.web</jenkins.build.dependency>
-                <jenkins.build.dependency>org.eclipse.osbp.utils.themes.ui</jenkins.build.dependency>
+                <jenkins.build.dependency>org.eclipse.osbp.ui.api</jenkins.build.dependency>
         </jenkins.build.dependencies>
 </jenkins>
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.api/.classpath b/org.eclipse.osbp.mobile.vaadin.ecview.api/.classpath
new file mode 100644
index 0000000..cf36b56
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.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.mobile.vaadin.ecview.api/.gitignore b/org.eclipse.osbp.mobile.vaadin.ecview.api/.gitignore
new file mode 100644
index 0000000..1dd3331
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.api/.gitignore
@@ -0,0 +1,2 @@
+/target/
+/target/
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.api/.project b/org.eclipse.osbp.mobile.vaadin.ecview.api/.project
index d8eba45..a11259d 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.api/.project
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.api/.project
@@ -35,6 +35,11 @@
 			<arguments>
 			</arguments>
 		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ds.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
 	</buildSpec>
 	<natures>
 		<nature>org.eclipse.m2e.core.maven2Nature</nature>
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.api/.settings/com.vaadin.integration.eclipse.prefs b/org.eclipse.osbp.mobile.vaadin.ecview.api/.settings/com.vaadin.integration.eclipse.prefs
new file mode 100644
index 0000000..0904e44
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.api/.settings/com.vaadin.integration.eclipse.prefs
@@ -0,0 +1,2 @@
+com.vaadin.integration.eclipse.mavenLatestVersionsUpgrade=["7.7.7"]
+eclipse.preferences.version=1
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.api/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.mobile.vaadin.ecview.api/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.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.mobile.vaadin.ecview.api/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.mobile.vaadin.ecview.api/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.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.mobile.vaadin.ecview.api/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.mobile.vaadin.ecview.api/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.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.mobile.vaadin.ecview.api/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.mobile.vaadin.ecview.api/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.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.mobile.vaadin.ecview.api/META-INF/MANIFEST.MF b/org.eclipse.osbp.mobile.vaadin.ecview.api/META-INF/MANIFEST.MF
index 3c584d6..d089bd0 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.api/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.api/META-INF/MANIFEST.MF
@@ -7,14 +7,7 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.osbp.mobile.vaadin.ecview.api;version="0.9.0"
-Require-Bundle: com.vaadin.server;bundle-version="7.5.7",
- com.vaadin.shared;bundle-version="7.5.7",
- org.jsoup;bundle-version="1.8.3",
- org.eclipse.osbp.dsl.dto.lib,
- org.eclipse.osbp.ecview.core.common,
- org.eclipse.emf.common,
- org.eclipse.osbp.mobile.vaadin.ecview.model,
- org.eclipse.osbp.runtime.web.ecview.presentation.vaadin
-Import-Package: org.eclipse.osbp.utils.themes.ui;version="0.9.0",
- org.osgi.framework,
- org.osgi.util.tracker;version="1.5.1"
+Require-Bundle: com.vaadin.server;bundle-version="[7.7.6,7.8.0)"
+Import-Package: org.eclipse.osbp.ui.api.user
+
+
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.api/build.properties b/org.eclipse.osbp.mobile.vaadin.ecview.api/build.properties
index 6509591..3fba715 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.api/build.properties
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.api/build.properties
@@ -1,5 +1,9 @@
 source.. = src/
-bin.includes = about.properties,  about.mappings,  about.ini,  about.html,  META-INF/,\
+bin.includes = about.properties,\
+               about.mappings,\
+               about.ini,\
+               about.html,\
+               META-INF/,\
                .,\
                LICENSE.txt,\
                epl-v10.html,\
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.api/src/org/eclipse/osbp/mobile/vaadin/ecview/api/AbstractMobileView.java b/org.eclipse.osbp.mobile.vaadin.ecview.api/src/org/eclipse/osbp/mobile/vaadin/ecview/api/AbstractMobileView.java
deleted file mode 100644
index 542b0e0..0000000
--- a/org.eclipse.osbp.mobile.vaadin.ecview.api/src/org/eclipse/osbp/mobile/vaadin/ecview/api/AbstractMobileView.java
+++ /dev/null
@@ -1,292 +0,0 @@
-/**
- * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), 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:
- *         Florian Pirchner - Initial implementation
- */
-package org.eclipse.osbp.mobile.vaadin.ecview.api;
-
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.common.util.TreeIterator;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.osbp.dsl.dto.lib.impl.DtoServiceAccess;
-import org.eclipse.osbp.dsl.dto.lib.services.IDTOServiceWithMutablePersistence;
-import org.eclipse.osbp.ecview.core.common.context.ContextException;
-import org.eclipse.osbp.ecview.core.common.context.IViewContext;
-import org.eclipse.osbp.ecview.core.common.extender.IECViewCache;
-import org.eclipse.osbp.ecview.core.common.model.core.YView;
-import org.eclipse.osbp.ecview.core.extension.model.extension.YTable;
-import org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationBarButton;
-import org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.VaadinRenderer;
-import org.eclipse.osbp.utils.themes.ui.MobileUiTheme;
-import org.osgi.framework.FrameworkUtil;
-import org.osgi.util.tracker.ServiceTracker;
-
-import com.vaadin.ui.ComponentContainer;
-import com.vaadin.ui.Notification;
-import com.vaadin.ui.Notification.Type;
-import com.vaadin.ui.UI;
-import com.vaadin.ui.VerticalLayout;
-
-/**
- * The Class AbstractMobileView.
- */
-@SuppressWarnings("restriction")
-public abstract class AbstractMobileView extends VerticalLayout implements
-		IMobileUiParticipantHandle {
-
-	/** The Constant serialVersionUID. */
-	private static final long serialVersionUID = 195924123437668903L;
-
-	/** The view context. */
-	protected IViewContext viewContext;
-
-	/** The dto service. */
-	protected IDTOServiceWithMutablePersistence<?> dtoService;
-
-	/**
-	 * Gets the title text.
-	 *
-	 * @return the title text
-	 */
-	protected String getTitleText() {
-		return MobileUiTheme.MOBILE_TITLE;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.osbp.ecview.servlet.mobile.IMobileUiParticipantHandle#getTheme
-	 * ()
-	 */
-	@Override
-	public String getTheme() {
-		return MobileUiTheme.MOBILE_THEME;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.osbp.ecview.servlet.mobile.IMobileUiParticipantHandle#handle
-	 * (com.vaadin.ui.ComponentContainer, java.lang.String)
-	 */
-	@Override
-	public void handle(ComponentContainer mainLayout, String fragment) {
-		initialize(mainLayout, fragment);
-	}
-
-	/**
-	 * Gets the view id.
-	 *
-	 * @return the view id
-	 */
-	protected abstract String getViewId();
-
-	/**
-	 * Gets the dto class.
-	 *
-	 * @return the dto class
-	 */
-	protected abstract Class<?> getDtoClass();
-
-	/**
-	 * Register an observer at the EObject for the save-navigationBarAction.
-	 *
-	 * @param actionId
-	 *            the action id
-	 * @param observer
-	 *            the observer
-	 */
-	protected void registerHandler(String actionId, AdapterImpl observer) {
-		if ((actionId != null) && (observer != null)) {
-			VMNavigationBarButton vmButton = findAction(actionId);
-			if (vmButton != null) {
-				vmButton.eAdapters().add(observer);
-			} else {
-				Notification.show("Button for " + actionId
-						+ " could not be found!", Type.ERROR_MESSAGE);
-			}
-		}
-	}
-
-	/**
-	 * Register an observer at the EObject for the save-navigationBarAction.
-	 *
-	 * @param actionId
-	 *            the action id
-	 * @param observer
-	 *            the observer
-	 */
-	protected void unregisterHandler(String actionId, AdapterImpl observer) {
-		if ((actionId != null) && (observer != null)) {
-			VMNavigationBarButton vmButton = findAction(actionId);
-			if (vmButton != null) {
-				vmButton.eAdapters().remove(observer);
-			}
-		}
-	}
-
-	/**
-	 * Initialize.
-	 *
-	 * @param parent
-	 *            the parent
-	 * @param fragment
-	 *            the fragment
-	 */
-	protected void initialize(ComponentContainer parent, String fragment) {
-		parent.addComponent(this);
-		setSizeFull();
-
-		VerticalLayout renderLayout = new VerticalLayout();
-		addComponent(renderLayout);
-		renderLayout.setSizeFull();
-
-		dtoService = (IDTOServiceWithMutablePersistence<?>) DtoServiceAccess
-				.getService(getDtoClass());
-		if (dtoService == null) {
-			Notification.show(getDtoClass() + " could not be loaded!",
-					Type.ERROR_MESSAGE);
-		}
-		YView yView = findViewModel(getViewId());
-		if (yView == null) {
-			Notification.show(getViewId() + " could not be found!",
-					Type.ERROR_MESSAGE);
-			return;
-		}
-
-		// render the Vaadin UI
-		VaadinRenderer renderer = new VaadinRenderer();
-		try {
-			viewContext = renderer.render(renderLayout, yView, null);
-
-			doInitialize(viewContext, fragment);
-
-		} // NOSONAR
-		catch (ContextException e) { // NOSONAR - keep on going
-			e.printStackTrace(); // NOSONAR
-		}
-
-		if (getTitleText() != null) {
-			try {
-				UI.getCurrent().getPage().setTitle(getTitleText());
-			} catch (Exception e) { // NOSONAR - keep on going
-				e.printStackTrace(); // NOSONAR
-			}
-		}
-	}
-
-	/**
-	 * Do initialize.
-	 *
-	 * @param viewContext
-	 *            the view context
-	 * @param fragment
-	 *            the fragment
-	 */
-	protected void doInitialize(IViewContext viewContext, String fragment) {
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.osbp.ecview.servlet.mobile.IMobileUiParticipantHandle#dispose
-	 * ()
-	 */
-	@Override
-	public void dispose() {
-		try {
-			if (viewContext != null) {
-				viewContext.dispose();
-			}
-		} catch (Exception ex) { // NOSONAR - keep on going
-			ex.printStackTrace(); // NOSONAR
-		}
-	}
-
-	/**
-	 * Tries to find the view model using the ecview addons service.
-	 *
-	 * @param uiName
-	 *            the ui name
-	 * @return the y view
-	 */
-	protected YView findViewModel(String uiName) {
-		ServiceTracker<IECViewCache, IECViewCache> tracker = new ServiceTracker<>(
-				FrameworkUtil.getBundle(getClass()).getBundleContext(),
-				IECViewCache.class, null);
-		tracker.open();
-		try {
-			IECViewCache uiService = tracker.waitForService(5000);
-			return uiService.getView(uiName);
-		} catch (InterruptedException e) { // NOSONAR - keep on going
-			e.printStackTrace(); // NOSONAR
-		} finally {
-			tracker.close();
-		}
-		return null;
-	}
-
-	/**
-	 * Tries to find the VMNavigationBarButton in the viewcontext.
-	 *
-	 * @param id
-	 *            the id
-	 * @return VMNavigationBarButton or null
-	 */
-	protected VMNavigationBarButton findAction(String id) {
-		if (viewContext == null) {
-			return null;
-		}
-		if (id == null) {
-			return null;
-		}
-		YView yView = (YView) viewContext.getViewEditpart().getModel();
-		TreeIterator<EObject> contents = yView.eAllContents();
-		while (contents.hasNext()) {
-			EObject expected = contents.next();
-			if (expected instanceof VMNavigationBarButton) {
-				VMNavigationBarButton yButton = (VMNavigationBarButton) expected;
-				if (id.equals(yButton.getId())) { // NOSONAR - keep on going
-					return yButton;
-				}
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Tries to find the YTable in the viewcontext.
-	 *
-	 * @param id
-	 *            the id
-	 * @return YTable or null
-	 */
-	protected YTable findTable(String id) {
-		if (viewContext == null) {
-			return null;
-		}
-		if (id == null) {
-			return null;
-		}
-		YView yView = (YView) viewContext.getViewEditpart().getModel();
-		TreeIterator<EObject> contents = yView.eAllContents();
-		while (contents.hasNext()) {
-			EObject expected = contents.next();
-			if (expected instanceof YTable) {
-				YTable yTable = (YTable) expected;
-				if (id.equals(yTable.getId())) {
-					return yTable;
-				}
-			}
-		}
-		return null;
-	}
-}
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.api/src/org/eclipse/osbp/mobile/vaadin/ecview/api/IMobileUiParticipant.java b/org.eclipse.osbp.mobile.vaadin.ecview.api/src/org/eclipse/osbp/mobile/vaadin/ecview/api/IMobileUiParticipant.java
index 8133929..dc392d8 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.api/src/org/eclipse/osbp/mobile/vaadin/ecview/api/IMobileUiParticipant.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.api/src/org/eclipse/osbp/mobile/vaadin/ecview/api/IMobileUiParticipant.java
@@ -52,9 +52,22 @@
 	IMobileUiParticipantHandle createHandle(UI ui, String fragment);
 	
 	/**
+	 * Gets the handle.
+	 *
+	 * @return the handle
+	 */
+	IMobileUiParticipantHandle getHandle();
+	
+	/**
+	 * Sets the handle.
+	 */
+	void setHandle(IMobileUiParticipantHandle handle);
+	
+	/**
 	 * Gets the fragment name.
 	 *
 	 * @return the fragment name
 	 */
 	public abstract String getFragmentName();
+
 }
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.api/src/org/eclipse/osbp/mobile/vaadin/ecview/api/IMobileUiParticipantHandle.java b/org.eclipse.osbp.mobile.vaadin.ecview.api/src/org/eclipse/osbp/mobile/vaadin/ecview/api/IMobileUiParticipantHandle.java
index 9201c78..bdc38ee 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.api/src/org/eclipse/osbp/mobile/vaadin/ecview/api/IMobileUiParticipantHandle.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.api/src/org/eclipse/osbp/mobile/vaadin/ecview/api/IMobileUiParticipantHandle.java
@@ -1,15 +1,22 @@
-/**
- * Copyright (c) 2011, 2014 - Lunifera GmbH (Gross Enzersdorf, Austria), 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
+/*
+ *                                                                            
+ *  Copyright (c) 2011 - 2017 - Loetz GmbH & Co KG, 69115 Heidelberg, Germany 
+ *                                                                            
+ *  All rights reserved. This program and the accompanying materials           
+ *  are made available under the terms of the Eclipse Public License v1.0       
+ *  which accompanies this distribution, and is available at                  
+ *  http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ *  Initial contribution:                                                      
+ *     Loetz GmbH & Co. KG                              
  * 
- * Contributors: 
- * 		Florian Pirchner - Initial implementation
  */
 package org.eclipse.osbp.mobile.vaadin.ecview.api;
 
+import java.util.Locale;
+
+import org.eclipse.osbp.ui.api.user.IUser;
+
 import com.vaadin.ui.ComponentContainer;
 
 /**
@@ -26,6 +33,13 @@
 	 * @return
 	 */
 	String getTheme();
+	
+	/**
+	 * Sets the locale.
+	 *
+	 * @param locale the new locale
+	 */
+	void setLocale(Locale locale);
 
 	/**
 	 * Needs to visualize the site related to the given fragment.
@@ -33,7 +47,7 @@
 	 * @param mainLayout
 	 * @param fragment
 	 */
-	void handle(ComponentContainer mainLayout, String fragment);
+	void handle(ComponentContainer mainLayout, String fragment, IUser user);
 
 	/**
 	 * This method will dispose the handle.
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf/.classpath b/org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf/.classpath
new file mode 100644
index 0000000..46cec6e
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf/.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.7"/>
+	<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.mobile.vaadin.ecview.editparts.emf/.gitignore b/org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf/.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.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf/.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.mobile.vaadin.ecview.editparts.emf/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf/.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.mobile.vaadin.ecview.editparts.emf/META-INF/MANIFEST.MF b/org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf/META-INF/MANIFEST.MF
index c618bf4..f628363 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.editparts.emf/META-INF/MANIFEST.MF
@@ -13,10 +13,10 @@
  org.eclipse.osbp.ecview.core.common.model;bundle-version="[0.9.0,0.10.0)",
  org.eclipse.osbp.mobile.vaadin.ecview.model;bundle-version="[0.9.0,0.10.0)",
  org.eclipse.osbp.mobile.vaadin.ecview.editparts;bundle-version="[0.9.0,0.10.0)",
- org.eclipse.core.databinding.observable;bundle-version="[1.4.1,1.5.0)",
- org.eclipse.core.databinding;bundle-version="[1.4.2,1.5.0)",
+ org.eclipse.core.databinding.observable;bundle-version="[1.6.0,1.7.0)",
+ org.eclipse.core.databinding;bundle-version="[1.6.0,1.7.0)",
  org.eclipse.emf.databinding;bundle-version="1.3.0",
- org.eclipse.core.databinding.beans;bundle-version="1.2.200",
+ org.eclipse.core.databinding.beans;bundle-version="[1.3.100,1.4.0)",
  org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)",
  org.slf4j.api;bundle-version="1.7.2"
 Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.editparts/.classpath b/org.eclipse.osbp.mobile.vaadin.ecview.editparts/.classpath
new file mode 100644
index 0000000..cf36b56
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.editparts/.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.mobile.vaadin.ecview.editparts/.gitignore b/org.eclipse.osbp.mobile.vaadin.ecview.editparts/.gitignore
new file mode 100644
index 0000000..1dd3331
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.editparts/.gitignore
@@ -0,0 +1,2 @@
+/target/
+/target/
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.editparts/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.mobile.vaadin.ecview.editparts/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.editparts/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.editparts/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.mobile.vaadin.ecview.editparts/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.editparts/.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.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.editparts/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.mobile.vaadin.ecview.editparts/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.editparts/.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.mobile.vaadin.ecview.editparts/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.mobile.vaadin.ecview.editparts/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.editparts/.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.mobile.vaadin.ecview.editparts/META-INF/MANIFEST.MF b/org.eclipse.osbp.mobile.vaadin.ecview.editparts/META-INF/MANIFEST.MF
index c1a273b..8b6986c 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.editparts/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.editparts/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-SymbolicName: org.eclipse.osbp.mobile.vaadin.ecview.editparts
 Bundle-Vendor: Eclipse OSBP
 Bundle-Version: 0.9.0.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: org.osgi.service.component;version="1.2.0",
  org.slf4j
 Bundle-ActivationPolicy: lazy
@@ -16,7 +16,7 @@
    org.eclipse.osbp.ecview.core.common.presentation,
    org.eclipse.osbp.mobile.vaadin.ecview.editparts";version="0.9.0"
 Require-Bundle: org.eclipse.osbp.ecview.core.common;bundle-version="[0.9.0,0.10.0)",
- org.eclipse.osbp.ecview.core.common.model;bundle-version="0.9.0",
- org.eclipse.core.databinding;bundle-version="1.4.1",
+ org.eclipse.osbp.ecview.core.common.model;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.core.databinding;bundle-version="[1.6.0,1.7.0)",
  org.eclipse.osbp.ecview.core.extension.editparts;bundle-version="[0.9.0,0.10.0)",
  org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)"
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/.classpath b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/.classpath
new file mode 100644
index 0000000..22f3064
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<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="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/.project b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/.project
new file mode 100644
index 0000000..4753b98
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.mobile.vaadin.ecview.model.edit</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.babel.editor.rbeBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.babel.editor.rbeNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/META-INF/MANIFEST.MF b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..957c923
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.osbp.mobile.vaadin.ecview.model.edit;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.osbp.mobile.vaadin.ecview.model.provider.VaadinmobileEditPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: org.eclipse.osbp.mobile.vaadin.ecview.model.provider
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.osbp.mobile.vaadin.ecview.model;visibility:=reexport,
+ org.eclipse.emf.edit;visibility:=reexport,
+ org.eclipse.osbp.ecview.core.common.model;visibility:=reexport,
+ org.eclipse.osbp.ecview.core.common.model.edit;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/build.properties b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/build.properties
new file mode 100644
index 0000000..6e3e902
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/build.properties
@@ -0,0 +1,10 @@
+#
+
+bin.includes = .,\
+               icons/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMNavigationButton_page_VMNavigationPage.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMNavigationButton_page_VMNavigationPage.gif
new file mode 100644
index 0000000..fb796c9
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMNavigationButton_page_VMNavigationPage.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMNavigationCommand_targetPage_VMNavigationPage.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMNavigationCommand_targetPage_VMNavigationPage.gif
new file mode 100644
index 0000000..ad7adc9
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMNavigationCommand_targetPage_VMNavigationPage.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMNavigationPage_barActions_VMNavigationBarButton.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMNavigationPage_barActions_VMNavigationBarButton.gif
new file mode 100644
index 0000000..aff8996
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMNavigationPage_barActions_VMNavigationBarButton.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMNavigationPage_cellStyles_VMNavigationPageCellStyle.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMNavigationPage_cellStyles_VMNavigationPageCellStyle.gif
new file mode 100644
index 0000000..6baa8a5
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMNavigationPage_cellStyles_VMNavigationPageCellStyle.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTabSheet_tabs_VMTab.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTabSheet_tabs_VMTab.gif
new file mode 100644
index 0000000..f01be4e
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTabSheet_tabs_VMTab.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMHorizontalButtonGroup.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMHorizontalButtonGroup.gif
new file mode 100644
index 0000000..33440bf
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMHorizontalButtonGroup.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMNavigationBarButton.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMNavigationBarButton.gif
new file mode 100644
index 0000000..42bfbe3
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMNavigationBarButton.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMNavigationButton.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMNavigationButton.gif
new file mode 100644
index 0000000..a571571
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMNavigationButton.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMNavigationPage.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMNavigationPage.gif
new file mode 100644
index 0000000..30db790
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMNavigationPage.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMNavigationRoot.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMNavigationRoot.gif
new file mode 100644
index 0000000..29d9678
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMNavigationRoot.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMSearchPanel.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMSearchPanel.gif
new file mode 100644
index 0000000..0c2d652
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMSearchPanel.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMSwitch.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMSwitch.gif
new file mode 100644
index 0000000..672e981
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMSwitch.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMTabSheet.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMTabSheet.gif
new file mode 100644
index 0000000..8a80c2d
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMTabSheet.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMVerticalComponentGroup.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMVerticalComponentGroup.gif
new file mode 100644
index 0000000..b7be165
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_VMVerticalComponentGroup.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_YAction.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_YAction.gif
new file mode 100644
index 0000000..a10c850
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_YAction.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_YField.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_YField.gif
new file mode 100644
index 0000000..9a4c243
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_YField.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_YHelperLayout.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_YHelperLayout.gif
new file mode 100644
index 0000000..662e1ad
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_YHelperLayout.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_YLayout.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_YLayout.gif
new file mode 100644
index 0000000..9a4c243
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_embeddable_YLayout.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_orphanDatadescriptions_YDatadescription.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_orphanDatadescriptions_YDatadescription.gif
new file mode 100644
index 0000000..672e981
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/ctool16/CreateVMTab_orphanDatadescriptions_YDatadescription.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMHorizontalButtonGroup.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMHorizontalButtonGroup.gif
new file mode 100644
index 0000000..c673a52
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMHorizontalButtonGroup.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMNavigationBarButton.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMNavigationBarButton.gif
new file mode 100644
index 0000000..ed87474
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMNavigationBarButton.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMNavigationButton.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMNavigationButton.gif
new file mode 100644
index 0000000..48e3cf2
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMNavigationButton.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMNavigationCommand.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMNavigationCommand.gif
new file mode 100644
index 0000000..33854e9
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMNavigationCommand.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMNavigationPage.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMNavigationPage.gif
new file mode 100644
index 0000000..338fb8d
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMNavigationPage.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMNavigationPageCellStyle.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMNavigationPageCellStyle.gif
new file mode 100644
index 0000000..7b7c428
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMNavigationPageCellStyle.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMNavigationRoot.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMNavigationRoot.gif
new file mode 100644
index 0000000..739ebbf
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMNavigationRoot.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMSearchPanel.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMSearchPanel.gif
new file mode 100644
index 0000000..cb1755a
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMSearchPanel.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMSwitch.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMSwitch.gif
new file mode 100644
index 0000000..10d2229
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMSwitch.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMTab.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMTab.gif
new file mode 100644
index 0000000..a17dc7d
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMTab.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMTabSheet.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMTabSheet.gif
new file mode 100644
index 0000000..33854e9
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMTabSheet.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMVerticalComponentGroup.gif b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMVerticalComponentGroup.gif
new file mode 100644
index 0000000..b1f8afa
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/icons/full/obj16/VMVerticalComponentGroup.gif
Binary files differ
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/plugin.properties b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/plugin.properties
new file mode 100644
index 0000000..152df1a
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/plugin.properties
@@ -0,0 +1,64 @@
+#
+
+pluginName = Vaadinmobile Edit Support
+providerName = www.example.org
+
+_UI_CreateChild_text = {0}
+_UI_CreateChild_text2 = {1} {0}
+_UI_CreateChild_text3 = {1}
+_UI_CreateChild_tooltip = Create New {0} Under {1} Feature
+_UI_CreateChild_description = Create a new child of type {0} for the {1} feature of the selected {2}.
+_UI_CreateSibling_description = Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent.
+
+_UI_PropertyDescriptor_description = The {0} of the {1}
+
+_UI_VMHorizontalButtonGroup_type = VM Horizontal Button Group
+_UI_VMSwitch_type = VM Switch
+_UI_VMVerticalComponentGroup_type = VM Vertical Component Group
+_UI_VMTabSheet_type = VM Tab Sheet
+_UI_VMTab_type = VM Tab
+_UI_VMNavigationPage_type = VM Navigation Page
+_UI_VMNavigationPageCellStyle_type = VM Navigation Page Cell Style
+_UI_VMNavigationButton_type = VM Navigation Button
+_UI_VMNavigationCommand_type = VM Navigation Command
+_UI_VMNavigationHandler_type = VM Navigation Handler
+_UI_VMSearchPanel_type = VM Search Panel
+_UI_VMNavigationRoot_type = VM Navigation Root
+_UI_VMNavigationBarButton_type = VM Navigation Bar Button
+_UI_Unknown_type = Object
+
+_UI_Unknown_datatype= Value
+
+_UI_VMSwitch_datadescription_feature = Datadescription
+_UI_VMSwitch_value_feature = Value
+_UI_VMTabSheet_tabs_feature = Tabs
+_UI_VMTab_parent_feature = Parent
+_UI_VMTab_embeddable_feature = Embeddable
+_UI_VMTab_datadescription_feature = Datadescription
+_UI_VMTab_orphanDatadescriptions_feature = Orphan Datadescriptions
+_UI_VMNavigationPage_type_feature = Type
+_UI_VMNavigationPage_emfNsURI_feature = Emf Ns URI
+_UI_VMNavigationPage_typeQualifiedName_feature = Type Qualified Name
+_UI_VMNavigationPage_value_feature = Value
+_UI_VMNavigationPage_barActions_feature = Bar Actions
+_UI_VMNavigationPage_navigateBack_feature = Navigate Back
+_UI_VMNavigationPage_onNavigateBack_feature = On Navigate Back
+_UI_VMNavigationPage_datadescription_feature = Datadescription
+_UI_VMNavigationPage_cellStyles_feature = Cell Styles
+_UI_VMNavigationPageCellStyle_target_feature = Target
+_UI_VMNavigationPageCellStyle_alignment_feature = Alignment
+_UI_VMNavigationButton_page_feature = Page
+_UI_VMNavigationButton_datadescription_feature = Datadescription
+_UI_VMNavigationButton_lastClickTime_feature = Last Click Time
+_UI_VMNavigationCommand_navigationHandler_feature = Navigation Handler
+_UI_VMNavigationCommand_targetPage_feature = Target Page
+_UI_VMNavigationCommand_value_feature = Value
+_UI_VMSearchPanel_type_feature = Type
+_UI_VMSearchPanel_emfNsURI_feature = Emf Ns URI
+_UI_VMSearchPanel_typeQualifiedName_feature = Type Qualified Name
+_UI_VMSearchPanel_applyFilter_feature = Apply Filter
+_UI_VMSearchPanel_filter_feature = Filter
+_UI_VMNavigationBarButton_datadescription_feature = Datadescription
+_UI_VMNavigationBarButton_lastClickTime_feature = Last Click Time
+_UI_Unknown_feature = Unspecified
+
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/plugin.xml b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/plugin.xml
new file mode 100644
index 0000000..a5c4622
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/plugin.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+   <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+      <!-- @generated vaadinmobile -->
+      <factory
+            uri="http://osbp.org/ecview/v1/vaadin/mobile"
+            class="org.eclipse.osbp.mobile.vaadin.ecview.model.provider.VaadinMobileItemProviderAdapterFactory"
+            supportedTypes=
+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+               org.eclipse.emf.edit.provider.ITreeItemContentProvider
+               org.eclipse.emf.edit.provider.IItemLabelProvider
+               org.eclipse.emf.edit.provider.IItemPropertySource"/>
+   </extension>
+
+</plugin>
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMHorizontalButtonGroupItemProvider.java b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMHorizontalButtonGroupItemProvider.java
new file mode 100644
index 0000000..d721c79
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMHorizontalButtonGroupItemProvider.java
@@ -0,0 +1,170 @@
+/**
+ * Copyright (c) 2017 - Lunifera GmbH (Gross Enzersdorf, Austria), 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:
+ *         Florian Pirchner - Initial implementation
+ */
+package org.eclipse.osbp.mobile.vaadin.ecview.model.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+import org.eclipse.osbp.ecview.core.common.model.core.CoreModelPackage;
+
+import org.eclipse.osbp.ecview.core.common.model.core.provider.YLayoutItemProvider;
+
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VMHorizontalButtonGroup;
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobileFactory;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMHorizontalButtonGroup} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class VMHorizontalButtonGroupItemProvider extends YLayoutItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public VMHorizontalButtonGroupItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns VMHorizontalButtonGroup.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/VMHorizontalButtonGroup"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((VMHorizontalButtonGroup)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_VMHorizontalButtonGroup_type") :
+			getString("_UI_VMHorizontalButtonGroup_type") + " " + label;
+	}
+	
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMHorizontalButtonGroup()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMSwitch()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMVerticalComponentGroup()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMTabSheet()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationPage()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationButton()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMSearchPanel()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationRoot()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationBarButton()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return VaadinmobileEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMNavigationBarButtonItemProvider.java b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMNavigationBarButtonItemProvider.java
new file mode 100644
index 0000000..111b37e
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMNavigationBarButtonItemProvider.java
@@ -0,0 +1,228 @@
+/**
+ * Copyright (c) 2017 - Lunifera GmbH (Gross Enzersdorf, Austria), 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:
+ *         Florian Pirchner - Initial implementation
+ */
+package org.eclipse.osbp.mobile.vaadin.ecview.model.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.osbp.ecview.core.common.model.core.CoreModelPackage;
+
+import org.eclipse.osbp.ecview.core.common.model.core.provider.YActionItemProvider;
+
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationBarButton;
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobilePackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationBarButton} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class VMNavigationBarButtonItemProvider extends YActionItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public VMNavigationBarButtonItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addInitialEditablePropertyDescriptor(object);
+			addEditablePropertyDescriptor(object);
+			addDatadescriptionPropertyDescriptor(object);
+			addLastClickTimePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Initial Editable feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addInitialEditablePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_YEditable_initialEditable_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_YEditable_initialEditable_feature", "_UI_YEditable_type"),
+				 CoreModelPackage.Literals.YEDITABLE__INITIAL_EDITABLE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Editable feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addEditablePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_YEditable_editable_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_YEditable_editable_feature", "_UI_YEditable_type"),
+				 CoreModelPackage.Literals.YEDITABLE__EDITABLE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Datadescription feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addDatadescriptionPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMNavigationBarButton_datadescription_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMNavigationBarButton_datadescription_feature", "_UI_VMNavigationBarButton_type"),
+				 VaadinMobilePackage.Literals.VM_NAVIGATION_BAR_BUTTON__DATADESCRIPTION,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Last Click Time feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addLastClickTimePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMNavigationBarButton_lastClickTime_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMNavigationBarButton_lastClickTime_feature", "_UI_VMNavigationBarButton_type"),
+				 VaadinMobilePackage.Literals.VM_NAVIGATION_BAR_BUTTON__LAST_CLICK_TIME,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns VMNavigationBarButton.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/VMNavigationBarButton"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((VMNavigationBarButton)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_VMNavigationBarButton_type") :
+			getString("_UI_VMNavigationBarButton_type") + " " + label;
+	}
+	
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(VMNavigationBarButton.class)) {
+			case VaadinMobilePackage.VM_NAVIGATION_BAR_BUTTON__INITIAL_EDITABLE:
+			case VaadinMobilePackage.VM_NAVIGATION_BAR_BUTTON__EDITABLE:
+			case VaadinMobilePackage.VM_NAVIGATION_BAR_BUTTON__LAST_CLICK_TIME:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return VaadinmobileEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMNavigationButtonItemProvider.java b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMNavigationButtonItemProvider.java
new file mode 100644
index 0000000..6f73f52
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMNavigationButtonItemProvider.java
@@ -0,0 +1,219 @@
+/**
+ * Copyright (c) 2017 - Lunifera GmbH (Gross Enzersdorf, Austria), 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:
+ *         Florian Pirchner - Initial implementation
+ */
+package org.eclipse.osbp.mobile.vaadin.ecview.model.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.osbp.ecview.core.common.model.core.provider.YActionItemProvider;
+
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationButton;
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobileFactory;
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobilePackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationButton} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class VMNavigationButtonItemProvider extends YActionItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public VMNavigationButtonItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addDatadescriptionPropertyDescriptor(object);
+			addLastClickTimePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Datadescription feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addDatadescriptionPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMNavigationButton_datadescription_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMNavigationButton_datadescription_feature", "_UI_VMNavigationButton_type"),
+				 VaadinMobilePackage.Literals.VM_NAVIGATION_BUTTON__DATADESCRIPTION,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Last Click Time feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addLastClickTimePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMNavigationButton_lastClickTime_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMNavigationButton_lastClickTime_feature", "_UI_VMNavigationButton_type"),
+				 VaadinMobilePackage.Literals.VM_NAVIGATION_BUTTON__LAST_CLICK_TIME,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(VaadinMobilePackage.Literals.VM_NAVIGATION_BUTTON__PAGE);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns VMNavigationButton.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/VMNavigationButton"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((VMNavigationButton)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_VMNavigationButton_type") :
+			getString("_UI_VMNavigationButton_type") + " " + label;
+	}
+	
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(VMNavigationButton.class)) {
+			case VaadinMobilePackage.VM_NAVIGATION_BUTTON__LAST_CLICK_TIME:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+			case VaadinMobilePackage.VM_NAVIGATION_BUTTON__PAGE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(VaadinMobilePackage.Literals.VM_NAVIGATION_BUTTON__PAGE,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationPage()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return VaadinmobileEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMNavigationCommandItemProvider.java b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMNavigationCommandItemProvider.java
new file mode 100644
index 0000000..3b316e1
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMNavigationCommandItemProvider.java
@@ -0,0 +1,312 @@
+/**
+ * Copyright (c) 2017 - Lunifera GmbH (Gross Enzersdorf, Austria), 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:
+ *         Florian Pirchner - Initial implementation
+ */
+package org.eclipse.osbp.mobile.vaadin.ecview.model.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.osbp.ecview.core.common.model.core.CoreModelFactory;
+import org.eclipse.osbp.ecview.core.common.model.core.CoreModelPackage;
+
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationCommand;
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobileFactory;
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobilePackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationCommand} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class VMNavigationCommandItemProvider 
+	extends ItemProviderAdapter
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public VMNavigationCommandItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addTagsPropertyDescriptor(object);
+			addIdPropertyDescriptor(object);
+			addNamePropertyDescriptor(object);
+			addNavigationHandlerPropertyDescriptor(object);
+			addValuePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Tags feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTagsPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_YTaggable_tags_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_YTaggable_tags_feature", "_UI_YTaggable_type"),
+				 CoreModelPackage.Literals.YTAGGABLE__TAGS,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Id feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addIdPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_YElement_id_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_YElement_id_feature", "_UI_YElement_type"),
+				 CoreModelPackage.Literals.YELEMENT__ID,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Name feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNamePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_YElement_name_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_YElement_name_feature", "_UI_YElement_type"),
+				 CoreModelPackage.Literals.YELEMENT__NAME,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Navigation Handler feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNavigationHandlerPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMNavigationCommand_navigationHandler_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMNavigationCommand_navigationHandler_feature", "_UI_VMNavigationCommand_type"),
+				 VaadinMobilePackage.Literals.VM_NAVIGATION_COMMAND__NAVIGATION_HANDLER,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMNavigationCommand_value_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMNavigationCommand_value_feature", "_UI_VMNavigationCommand_type"),
+				 VaadinMobilePackage.Literals.VM_NAVIGATION_COMMAND__VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(CoreModelPackage.Literals.YELEMENT__PROPERTIES);
+			childrenFeatures.add(VaadinMobilePackage.Literals.VM_NAVIGATION_COMMAND__TARGET_PAGE);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns VMNavigationCommand.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/VMNavigationCommand"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((VMNavigationCommand)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_VMNavigationCommand_type") :
+			getString("_UI_VMNavigationCommand_type") + " " + label;
+	}
+	
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(VMNavigationCommand.class)) {
+			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__TAGS:
+			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__ID:
+			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__NAME:
+			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__VALUE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__PROPERTIES:
+			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__TARGET_PAGE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YELEMENT__PROPERTIES,
+				 CoreModelFactory.eINSTANCE.create(CoreModelPackage.Literals.YSTRING_TO_STRING_MAP)));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(VaadinMobilePackage.Literals.VM_NAVIGATION_COMMAND__TARGET_PAGE,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationPage()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return VaadinmobileEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMNavigationPageCellStyleItemProvider.java b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMNavigationPageCellStyleItemProvider.java
new file mode 100644
index 0000000..3058415
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMNavigationPageCellStyleItemProvider.java
@@ -0,0 +1,192 @@
+/**
+ * Copyright (c) 2017 - Lunifera GmbH (Gross Enzersdorf, Austria), 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:
+ *         Florian Pirchner - Initial implementation
+ */
+package org.eclipse.osbp.mobile.vaadin.ecview.model.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.osbp.ecview.core.common.model.core.YAlignment;
+
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationPageCellStyle;
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobilePackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationPageCellStyle} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class VMNavigationPageCellStyleItemProvider 
+	extends ItemProviderAdapter
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public VMNavigationPageCellStyleItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addTargetPropertyDescriptor(object);
+			addAlignmentPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Target feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTargetPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMNavigationPageCellStyle_target_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMNavigationPageCellStyle_target_feature", "_UI_VMNavigationPageCellStyle_type"),
+				 VaadinMobilePackage.Literals.VM_NAVIGATION_PAGE_CELL_STYLE__TARGET,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Alignment feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addAlignmentPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMNavigationPageCellStyle_alignment_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMNavigationPageCellStyle_alignment_feature", "_UI_VMNavigationPageCellStyle_type"),
+				 VaadinMobilePackage.Literals.VM_NAVIGATION_PAGE_CELL_STYLE__ALIGNMENT,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns VMNavigationPageCellStyle.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/VMNavigationPageCellStyle"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		YAlignment labelValue = ((VMNavigationPageCellStyle)object).getAlignment();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_VMNavigationPageCellStyle_type") :
+			getString("_UI_VMNavigationPageCellStyle_type") + " " + label;
+	}
+	
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(VMNavigationPageCellStyle.class)) {
+			case VaadinMobilePackage.VM_NAVIGATION_PAGE_CELL_STYLE__ALIGNMENT:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return VaadinmobileEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMNavigationPageItemProvider.java b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMNavigationPageItemProvider.java
new file mode 100644
index 0000000..c074d35
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMNavigationPageItemProvider.java
@@ -0,0 +1,416 @@
+/**
+ * Copyright (c) 2017 - Lunifera GmbH (Gross Enzersdorf, Austria), 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:
+ *         Florian Pirchner - Initial implementation
+ */
+package org.eclipse.osbp.mobile.vaadin.ecview.model.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.osbp.ecview.core.common.model.core.CoreModelPackage;
+
+import org.eclipse.osbp.ecview.core.common.model.core.provider.YLayoutItemProvider;
+
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationPage;
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobileFactory;
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobilePackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationPage} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class VMNavigationPageItemProvider extends YLayoutItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public VMNavigationPageItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addTypePropertyDescriptor(object);
+			addEmfNsURIPropertyDescriptor(object);
+			addTypeQualifiedNamePropertyDescriptor(object);
+			addValuePropertyDescriptor(object);
+			addNavigateBackPropertyDescriptor(object);
+			addOnNavigateBackPropertyDescriptor(object);
+			addDatadescriptionPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Type feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTypePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMNavigationPage_type_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMNavigationPage_type_feature", "_UI_VMNavigationPage_type"),
+				 VaadinMobilePackage.Literals.VM_NAVIGATION_PAGE__TYPE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Emf Ns URI feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addEmfNsURIPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMNavigationPage_emfNsURI_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMNavigationPage_emfNsURI_feature", "_UI_VMNavigationPage_type"),
+				 VaadinMobilePackage.Literals.VM_NAVIGATION_PAGE__EMF_NS_URI,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Type Qualified Name feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTypeQualifiedNamePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMNavigationPage_typeQualifiedName_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMNavigationPage_typeQualifiedName_feature", "_UI_VMNavigationPage_type"),
+				 VaadinMobilePackage.Literals.VM_NAVIGATION_PAGE__TYPE_QUALIFIED_NAME,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMNavigationPage_value_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMNavigationPage_value_feature", "_UI_VMNavigationPage_type"),
+				 VaadinMobilePackage.Literals.VM_NAVIGATION_PAGE__VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Navigate Back feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNavigateBackPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMNavigationPage_navigateBack_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMNavigationPage_navigateBack_feature", "_UI_VMNavigationPage_type"),
+				 VaadinMobilePackage.Literals.VM_NAVIGATION_PAGE__NAVIGATE_BACK,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the On Navigate Back feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addOnNavigateBackPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMNavigationPage_onNavigateBack_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMNavigationPage_onNavigateBack_feature", "_UI_VMNavigationPage_type"),
+				 VaadinMobilePackage.Literals.VM_NAVIGATION_PAGE__ON_NAVIGATE_BACK,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Datadescription feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addDatadescriptionPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMNavigationPage_datadescription_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMNavigationPage_datadescription_feature", "_UI_VMNavigationPage_type"),
+				 VaadinMobilePackage.Literals.VM_NAVIGATION_PAGE__DATADESCRIPTION,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(VaadinMobilePackage.Literals.VM_NAVIGATION_PAGE__BAR_ACTIONS);
+			childrenFeatures.add(VaadinMobilePackage.Literals.VM_NAVIGATION_PAGE__CELL_STYLES);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns VMNavigationPage.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/VMNavigationPage"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((VMNavigationPage)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_VMNavigationPage_type") :
+			getString("_UI_VMNavigationPage_type") + " " + label;
+	}
+	
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(VMNavigationPage.class)) {
+			case VaadinMobilePackage.VM_NAVIGATION_PAGE__TYPE:
+			case VaadinMobilePackage.VM_NAVIGATION_PAGE__EMF_NS_URI:
+			case VaadinMobilePackage.VM_NAVIGATION_PAGE__TYPE_QUALIFIED_NAME:
+			case VaadinMobilePackage.VM_NAVIGATION_PAGE__VALUE:
+			case VaadinMobilePackage.VM_NAVIGATION_PAGE__NAVIGATE_BACK:
+			case VaadinMobilePackage.VM_NAVIGATION_PAGE__ON_NAVIGATE_BACK:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+			case VaadinMobilePackage.VM_NAVIGATION_PAGE__BAR_ACTIONS:
+			case VaadinMobilePackage.VM_NAVIGATION_PAGE__CELL_STYLES:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMHorizontalButtonGroup()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMSwitch()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMVerticalComponentGroup()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMTabSheet()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationPage()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationButton()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMSearchPanel()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationRoot()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationBarButton()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(VaadinMobilePackage.Literals.VM_NAVIGATION_PAGE__BAR_ACTIONS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationBarButton()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(VaadinMobilePackage.Literals.VM_NAVIGATION_PAGE__CELL_STYLES,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationPageCellStyle()));
+	}
+
+	/**
+	 * This returns the label text for {@link org.eclipse.emf.edit.command.CreateChildCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getCreateChildText(Object owner, Object feature, Object child, Collection<?> selection) {
+		Object childFeature = feature;
+		Object childObject = child;
+
+		boolean qualify =
+			childFeature == CoreModelPackage.Literals.YLAYOUT__ELEMENTS ||
+			childFeature == VaadinMobilePackage.Literals.VM_NAVIGATION_PAGE__BAR_ACTIONS;
+
+		if (qualify) {
+			return getString
+				("_UI_CreateChild_text2",
+				 new Object[] { getTypeText(childObject), getFeatureText(childFeature), getTypeText(owner) });
+		}
+		return super.getCreateChildText(owner, feature, child, selection);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return VaadinmobileEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMNavigationRootItemProvider.java b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMNavigationRootItemProvider.java
new file mode 100644
index 0000000..6df337c
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMNavigationRootItemProvider.java
@@ -0,0 +1,170 @@
+/**
+ * Copyright (c) 2017 - Lunifera GmbH (Gross Enzersdorf, Austria), 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:
+ *         Florian Pirchner - Initial implementation
+ */
+package org.eclipse.osbp.mobile.vaadin.ecview.model.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+import org.eclipse.osbp.ecview.core.common.model.core.CoreModelPackage;
+
+import org.eclipse.osbp.ecview.core.common.model.core.provider.YLayoutItemProvider;
+
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationRoot;
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobileFactory;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationRoot} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class VMNavigationRootItemProvider extends YLayoutItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public VMNavigationRootItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns VMNavigationRoot.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/VMNavigationRoot"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((VMNavigationRoot)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_VMNavigationRoot_type") :
+			getString("_UI_VMNavigationRoot_type") + " " + label;
+	}
+	
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMHorizontalButtonGroup()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMSwitch()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMVerticalComponentGroup()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMTabSheet()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationPage()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationButton()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMSearchPanel()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationRoot()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationBarButton()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return VaadinmobileEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMSearchPanelItemProvider.java b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMSearchPanelItemProvider.java
new file mode 100644
index 0000000..6ca117b
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMSearchPanelItemProvider.java
@@ -0,0 +1,347 @@
+/**
+ * Copyright (c) 2017 - Lunifera GmbH (Gross Enzersdorf, Austria), 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:
+ *         Florian Pirchner - Initial implementation
+ */
+package org.eclipse.osbp.mobile.vaadin.ecview.model.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.osbp.ecview.core.common.model.core.CoreModelPackage;
+
+import org.eclipse.osbp.ecview.core.common.model.core.provider.YLayoutItemProvider;
+
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VMSearchPanel;
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobileFactory;
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobilePackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMSearchPanel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class VMSearchPanelItemProvider extends YLayoutItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public VMSearchPanelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSpacingPropertyDescriptor(object);
+			addMarginPropertyDescriptor(object);
+			addTypePropertyDescriptor(object);
+			addEmfNsURIPropertyDescriptor(object);
+			addTypeQualifiedNamePropertyDescriptor(object);
+			addApplyFilterPropertyDescriptor(object);
+			addFilterPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Spacing feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSpacingPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_YSpacingable_spacing_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_YSpacingable_spacing_feature", "_UI_YSpacingable_type"),
+				 CoreModelPackage.Literals.YSPACINGABLE__SPACING,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Margin feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addMarginPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_YMarginable_margin_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_YMarginable_margin_feature", "_UI_YMarginable_type"),
+				 CoreModelPackage.Literals.YMARGINABLE__MARGIN,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Type feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTypePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMSearchPanel_type_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMSearchPanel_type_feature", "_UI_VMSearchPanel_type"),
+				 VaadinMobilePackage.Literals.VM_SEARCH_PANEL__TYPE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Emf Ns URI feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addEmfNsURIPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMSearchPanel_emfNsURI_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMSearchPanel_emfNsURI_feature", "_UI_VMSearchPanel_type"),
+				 VaadinMobilePackage.Literals.VM_SEARCH_PANEL__EMF_NS_URI,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Type Qualified Name feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTypeQualifiedNamePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMSearchPanel_typeQualifiedName_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMSearchPanel_typeQualifiedName_feature", "_UI_VMSearchPanel_type"),
+				 VaadinMobilePackage.Literals.VM_SEARCH_PANEL__TYPE_QUALIFIED_NAME,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Apply Filter feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addApplyFilterPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMSearchPanel_applyFilter_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMSearchPanel_applyFilter_feature", "_UI_VMSearchPanel_type"),
+				 VaadinMobilePackage.Literals.VM_SEARCH_PANEL__APPLY_FILTER,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Filter feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addFilterPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMSearchPanel_filter_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMSearchPanel_filter_feature", "_UI_VMSearchPanel_type"),
+				 VaadinMobilePackage.Literals.VM_SEARCH_PANEL__FILTER,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns VMSearchPanel.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/VMSearchPanel"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((VMSearchPanel)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_VMSearchPanel_type") :
+			getString("_UI_VMSearchPanel_type") + " " + label;
+	}
+	
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(VMSearchPanel.class)) {
+			case VaadinMobilePackage.VM_SEARCH_PANEL__SPACING:
+			case VaadinMobilePackage.VM_SEARCH_PANEL__MARGIN:
+			case VaadinMobilePackage.VM_SEARCH_PANEL__TYPE:
+			case VaadinMobilePackage.VM_SEARCH_PANEL__EMF_NS_URI:
+			case VaadinMobilePackage.VM_SEARCH_PANEL__TYPE_QUALIFIED_NAME:
+			case VaadinMobilePackage.VM_SEARCH_PANEL__APPLY_FILTER:
+			case VaadinMobilePackage.VM_SEARCH_PANEL__FILTER:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMHorizontalButtonGroup()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMSwitch()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMVerticalComponentGroup()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMTabSheet()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationPage()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationButton()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMSearchPanel()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationRoot()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationBarButton()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return VaadinmobileEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMSwitchItemProvider.java b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMSwitchItemProvider.java
new file mode 100644
index 0000000..9f3d622
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMSwitchItemProvider.java
@@ -0,0 +1,195 @@
+/**
+ */
+package org.eclipse.osbp.mobile.vaadin.ecview.model.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.osbp.ecview.core.common.model.core.CoreModelPackage;
+
+import org.eclipse.osbp.ecview.core.common.model.core.provider.YFieldItemProvider;
+
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VMSwitch;
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobilePackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMSwitch} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class VMSwitchItemProvider extends YFieldItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public VMSwitchItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addDatadescriptionPropertyDescriptor(object);
+			addValuePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Datadescription feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addDatadescriptionPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMSwitch_datadescription_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMSwitch_datadescription_feature", "_UI_VMSwitch_type"),
+				 VaadinMobilePackage.Literals.VM_SWITCH__DATADESCRIPTION,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMSwitch_value_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMSwitch_value_feature", "_UI_VMSwitch_type"),
+				 VaadinMobilePackage.Literals.VM_SWITCH__VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns VMSwitch.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/VMSwitch"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((VMSwitch)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_VMSwitch_type") :
+			getString("_UI_VMSwitch_type") + " " + label;
+	}
+	
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(VMSwitch.class)) {
+			case VaadinMobilePackage.VM_SWITCH__VALUE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * This returns the label text for {@link org.eclipse.emf.edit.command.CreateChildCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getCreateChildText(Object owner, Object feature, Object child, Collection<?> selection) {
+		Object childFeature = feature;
+		Object childObject = child;
+
+		boolean qualify =
+			childFeature == CoreModelPackage.Literals.YFIELD__VALIDATORS ||
+			childFeature == CoreModelPackage.Literals.YFIELD__INTERNAL_VALIDATORS;
+
+		if (qualify) {
+			return getString
+				("_UI_CreateChild_text2",
+				 new Object[] { getTypeText(childObject), getFeatureText(childFeature), getTypeText(owner) });
+		}
+		return super.getCreateChildText(owner, feature, child, selection);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return VaadinmobileEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMTabItemProvider.java b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMTabItemProvider.java
new file mode 100644
index 0000000..8f524ac
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMTabItemProvider.java
@@ -0,0 +1,397 @@
+/**
+ */
+package org.eclipse.osbp.mobile.vaadin.ecview.model.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.osbp.ecview.core.common.model.core.CoreModelFactory;
+import org.eclipse.osbp.ecview.core.common.model.core.CoreModelPackage;
+
+import org.eclipse.osbp.ecview.core.common.model.datatypes.DatatypesFactory;
+
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VMTab;
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobileFactory;
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobilePackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMTab} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class VMTabItemProvider 
+	extends ItemProviderAdapter
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public VMTabItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addTagsPropertyDescriptor(object);
+			addIdPropertyDescriptor(object);
+			addNamePropertyDescriptor(object);
+			addCssClassPropertyDescriptor(object);
+			addCssIDPropertyDescriptor(object);
+			addDatadescriptionPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Tags feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTagsPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_YTaggable_tags_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_YTaggable_tags_feature", "_UI_YTaggable_type"),
+				 CoreModelPackage.Literals.YTAGGABLE__TAGS,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Id feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addIdPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_YElement_id_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_YElement_id_feature", "_UI_YElement_type"),
+				 CoreModelPackage.Literals.YELEMENT__ID,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Name feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNamePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_YElement_name_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_YElement_name_feature", "_UI_YElement_type"),
+				 CoreModelPackage.Literals.YELEMENT__NAME,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Css Class feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addCssClassPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_YCssAble_cssClass_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_YCssAble_cssClass_feature", "_UI_YCssAble_type"),
+				 CoreModelPackage.Literals.YCSS_ABLE__CSS_CLASS,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Css ID feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addCssIDPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_YCssAble_cssID_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_YCssAble_cssID_feature", "_UI_YCssAble_type"),
+				 CoreModelPackage.Literals.YCSS_ABLE__CSS_ID,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Datadescription feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addDatadescriptionPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_VMTab_datadescription_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_VMTab_datadescription_feature", "_UI_VMTab_type"),
+				 VaadinMobilePackage.Literals.VM_TAB__DATADESCRIPTION,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(CoreModelPackage.Literals.YELEMENT__PROPERTIES);
+			childrenFeatures.add(VaadinMobilePackage.Literals.VM_TAB__EMBEDDABLE);
+			childrenFeatures.add(VaadinMobilePackage.Literals.VM_TAB__ORPHAN_DATADESCRIPTIONS);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns VMTab.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/VMTab"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((VMTab)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_VMTab_type") :
+			getString("_UI_VMTab_type") + " " + label;
+	}
+	
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(VMTab.class)) {
+			case VaadinMobilePackage.VM_TAB__TAGS:
+			case VaadinMobilePackage.VM_TAB__ID:
+			case VaadinMobilePackage.VM_TAB__NAME:
+			case VaadinMobilePackage.VM_TAB__CSS_CLASS:
+			case VaadinMobilePackage.VM_TAB__CSS_ID:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+			case VaadinMobilePackage.VM_TAB__PROPERTIES:
+			case VaadinMobilePackage.VM_TAB__EMBEDDABLE:
+			case VaadinMobilePackage.VM_TAB__ORPHAN_DATADESCRIPTIONS:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YELEMENT__PROPERTIES,
+				 CoreModelFactory.eINSTANCE.create(CoreModelPackage.Literals.YSTRING_TO_STRING_MAP)));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(VaadinMobilePackage.Literals.VM_TAB__EMBEDDABLE,
+				 VaadinMobileFactory.eINSTANCE.createVMHorizontalButtonGroup()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(VaadinMobilePackage.Literals.VM_TAB__EMBEDDABLE,
+				 VaadinMobileFactory.eINSTANCE.createVMSwitch()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(VaadinMobilePackage.Literals.VM_TAB__EMBEDDABLE,
+				 VaadinMobileFactory.eINSTANCE.createVMVerticalComponentGroup()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(VaadinMobilePackage.Literals.VM_TAB__EMBEDDABLE,
+				 VaadinMobileFactory.eINSTANCE.createVMTabSheet()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(VaadinMobilePackage.Literals.VM_TAB__EMBEDDABLE,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationPage()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(VaadinMobilePackage.Literals.VM_TAB__EMBEDDABLE,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationButton()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(VaadinMobilePackage.Literals.VM_TAB__EMBEDDABLE,
+				 VaadinMobileFactory.eINSTANCE.createVMSearchPanel()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(VaadinMobilePackage.Literals.VM_TAB__EMBEDDABLE,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationRoot()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(VaadinMobilePackage.Literals.VM_TAB__EMBEDDABLE,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationBarButton()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(VaadinMobilePackage.Literals.VM_TAB__EMBEDDABLE,
+				 CoreModelFactory.eINSTANCE.createYLayout()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(VaadinMobilePackage.Literals.VM_TAB__EMBEDDABLE,
+				 CoreModelFactory.eINSTANCE.createYHelperLayout()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(VaadinMobilePackage.Literals.VM_TAB__EMBEDDABLE,
+				 CoreModelFactory.eINSTANCE.createYField()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(VaadinMobilePackage.Literals.VM_TAB__EMBEDDABLE,
+				 CoreModelFactory.eINSTANCE.createYAction()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(VaadinMobilePackage.Literals.VM_TAB__ORPHAN_DATADESCRIPTIONS,
+				 DatatypesFactory.eINSTANCE.createYDatadescription()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return VaadinmobileEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMTabSheetItemProvider.java b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMTabSheetItemProvider.java
new file mode 100644
index 0000000..e373103
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMTabSheetItemProvider.java
@@ -0,0 +1,168 @@
+/**
+ * Copyright (c) 2017 - Lunifera GmbH (Gross Enzersdorf, Austria), 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:
+ *         Florian Pirchner - Initial implementation
+ */
+package org.eclipse.osbp.mobile.vaadin.ecview.model.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.osbp.ecview.core.common.model.core.provider.YEmbeddableItemProvider;
+
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VMTabSheet;
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobileFactory;
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobilePackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMTabSheet} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class VMTabSheetItemProvider extends YEmbeddableItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public VMTabSheetItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(VaadinMobilePackage.Literals.VM_TAB_SHEET__TABS);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns VMTabSheet.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/VMTabSheet"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((VMTabSheet)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_VMTabSheet_type") :
+			getString("_UI_VMTabSheet_type") + " " + label;
+	}
+	
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(VMTabSheet.class)) {
+			case VaadinMobilePackage.VM_TAB_SHEET__TABS:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(VaadinMobilePackage.Literals.VM_TAB_SHEET__TABS,
+				 VaadinMobileFactory.eINSTANCE.createVMTab()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return VaadinmobileEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMVerticalComponentGroupItemProvider.java b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMVerticalComponentGroupItemProvider.java
new file mode 100644
index 0000000..867123a
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VMVerticalComponentGroupItemProvider.java
@@ -0,0 +1,170 @@
+/**
+ * Copyright (c) 2017 - Lunifera GmbH (Gross Enzersdorf, Austria), 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:
+ *         Florian Pirchner - Initial implementation
+ */
+package org.eclipse.osbp.mobile.vaadin.ecview.model.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+import org.eclipse.osbp.ecview.core.common.model.core.CoreModelPackage;
+
+import org.eclipse.osbp.ecview.core.common.model.core.provider.YLayoutItemProvider;
+
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VMVerticalComponentGroup;
+import org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobileFactory;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMVerticalComponentGroup} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class VMVerticalComponentGroupItemProvider extends YLayoutItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public VMVerticalComponentGroupItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns VMVerticalComponentGroup.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/VMVerticalComponentGroup"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((VMVerticalComponentGroup)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_VMVerticalComponentGroup_type") :
+			getString("_UI_VMVerticalComponentGroup_type") + " " + label;
+	}
+	
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMHorizontalButtonGroup()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMSwitch()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMVerticalComponentGroup()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMTabSheet()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationPage()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationButton()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMSearchPanel()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationRoot()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YLAYOUT__ELEMENTS,
+				 VaadinMobileFactory.eINSTANCE.createVMNavigationBarButton()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return VaadinmobileEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VaadinMobileItemProviderAdapterFactory.java b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VaadinMobileItemProviderAdapterFactory.java
new file mode 100644
index 0000000..4d2f90e
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VaadinMobileItemProviderAdapterFactory.java
@@ -0,0 +1,471 @@
+/**
+ * Copyright (c) 2017 - Lunifera GmbH (Gross Enzersdorf, Austria), 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:
+ *         Florian Pirchner - Initial implementation
+ */
+package org.eclipse.osbp.mobile.vaadin.ecview.model.provider;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.osbp.mobile.vaadin.ecview.model.util.VaadinMobileAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class VaadinMobileItemProviderAdapterFactory extends VaadinMobileAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public VaadinMobileItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMHorizontalButtonGroup} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected VMHorizontalButtonGroupItemProvider vmHorizontalButtonGroupItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMHorizontalButtonGroup}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createVMHorizontalButtonGroupAdapter() {
+		if (vmHorizontalButtonGroupItemProvider == null) {
+			vmHorizontalButtonGroupItemProvider = new VMHorizontalButtonGroupItemProvider(this);
+		}
+
+		return vmHorizontalButtonGroupItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMSwitch} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected VMSwitchItemProvider vmSwitchItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMSwitch}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createVMSwitchAdapter() {
+		if (vmSwitchItemProvider == null) {
+			vmSwitchItemProvider = new VMSwitchItemProvider(this);
+		}
+
+		return vmSwitchItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMVerticalComponentGroup} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected VMVerticalComponentGroupItemProvider vmVerticalComponentGroupItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMVerticalComponentGroup}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createVMVerticalComponentGroupAdapter() {
+		if (vmVerticalComponentGroupItemProvider == null) {
+			vmVerticalComponentGroupItemProvider = new VMVerticalComponentGroupItemProvider(this);
+		}
+
+		return vmVerticalComponentGroupItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMTabSheet} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected VMTabSheetItemProvider vmTabSheetItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMTabSheet}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createVMTabSheetAdapter() {
+		if (vmTabSheetItemProvider == null) {
+			vmTabSheetItemProvider = new VMTabSheetItemProvider(this);
+		}
+
+		return vmTabSheetItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMTab} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected VMTabItemProvider vmTabItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMTab}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createVMTabAdapter() {
+		if (vmTabItemProvider == null) {
+			vmTabItemProvider = new VMTabItemProvider(this);
+		}
+
+		return vmTabItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationPage} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected VMNavigationPageItemProvider vmNavigationPageItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationPage}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createVMNavigationPageAdapter() {
+		if (vmNavigationPageItemProvider == null) {
+			vmNavigationPageItemProvider = new VMNavigationPageItemProvider(this);
+		}
+
+		return vmNavigationPageItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationPageCellStyle} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected VMNavigationPageCellStyleItemProvider vmNavigationPageCellStyleItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationPageCellStyle}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createVMNavigationPageCellStyleAdapter() {
+		if (vmNavigationPageCellStyleItemProvider == null) {
+			vmNavigationPageCellStyleItemProvider = new VMNavigationPageCellStyleItemProvider(this);
+		}
+
+		return vmNavigationPageCellStyleItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationButton} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected VMNavigationButtonItemProvider vmNavigationButtonItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationButton}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createVMNavigationButtonAdapter() {
+		if (vmNavigationButtonItemProvider == null) {
+			vmNavigationButtonItemProvider = new VMNavigationButtonItemProvider(this);
+		}
+
+		return vmNavigationButtonItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationCommand} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected VMNavigationCommandItemProvider vmNavigationCommandItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createVMNavigationCommandAdapter() {
+		if (vmNavigationCommandItemProvider == null) {
+			vmNavigationCommandItemProvider = new VMNavigationCommandItemProvider(this);
+		}
+
+		return vmNavigationCommandItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMSearchPanel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected VMSearchPanelItemProvider vmSearchPanelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMSearchPanel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createVMSearchPanelAdapter() {
+		if (vmSearchPanelItemProvider == null) {
+			vmSearchPanelItemProvider = new VMSearchPanelItemProvider(this);
+		}
+
+		return vmSearchPanelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationRoot} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected VMNavigationRootItemProvider vmNavigationRootItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationRoot}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createVMNavigationRootAdapter() {
+		if (vmNavigationRootItemProvider == null) {
+			vmNavigationRootItemProvider = new VMNavigationRootItemProvider(this);
+		}
+
+		return vmNavigationRootItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationBarButton} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected VMNavigationBarButtonItemProvider vmNavigationBarButtonItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationBarButton}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createVMNavigationBarButtonAdapter() {
+		if (vmNavigationBarButtonItemProvider == null) {
+			vmNavigationBarButtonItemProvider = new VMNavigationBarButtonItemProvider(this);
+		}
+
+		return vmNavigationBarButtonItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (vmHorizontalButtonGroupItemProvider != null) vmHorizontalButtonGroupItemProvider.dispose();
+		if (vmSwitchItemProvider != null) vmSwitchItemProvider.dispose();
+		if (vmVerticalComponentGroupItemProvider != null) vmVerticalComponentGroupItemProvider.dispose();
+		if (vmTabSheetItemProvider != null) vmTabSheetItemProvider.dispose();
+		if (vmTabItemProvider != null) vmTabItemProvider.dispose();
+		if (vmNavigationPageItemProvider != null) vmNavigationPageItemProvider.dispose();
+		if (vmNavigationPageCellStyleItemProvider != null) vmNavigationPageCellStyleItemProvider.dispose();
+		if (vmNavigationButtonItemProvider != null) vmNavigationButtonItemProvider.dispose();
+		if (vmNavigationCommandItemProvider != null) vmNavigationCommandItemProvider.dispose();
+		if (vmSearchPanelItemProvider != null) vmSearchPanelItemProvider.dispose();
+		if (vmNavigationRootItemProvider != null) vmNavigationRootItemProvider.dispose();
+		if (vmNavigationBarButtonItemProvider != null) vmNavigationBarButtonItemProvider.dispose();
+	}
+
+}
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VaadinmobileEditPlugin.java b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VaadinmobileEditPlugin.java
new file mode 100644
index 0000000..d8241bc
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model.edit/src/org/eclipse/osbp/mobile/vaadin/ecview/model/provider/VaadinmobileEditPlugin.java
@@ -0,0 +1,100 @@
+/**
+ * Copyright (c) 2017 - Lunifera GmbH (Gross Enzersdorf, Austria), 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:
+ *         Florian Pirchner - Initial implementation
+ */
+package org.eclipse.osbp.mobile.vaadin.ecview.model.provider;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.osbp.ecview.core.common.model.binding.provider.ECViewCoreEditPlugin;
+
+/**
+ * This is the central singleton for the Vaadinmobile edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class VaadinmobileEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final VaadinmobileEditPlugin INSTANCE = new VaadinmobileEditPlugin();
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static Implementation plugin;
+
+	/**
+	 * Create the instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public VaadinmobileEditPlugin() {
+		super
+		  (new ResourceLocator [] {
+		     ECViewCoreEditPlugin.INSTANCE,
+		   });
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getPluginResourceLocator() {
+		return plugin;
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	public static Implementation getPlugin() {
+		return plugin;
+	}
+
+	/**
+	 * The actual implementation of the Eclipse <b>Plugin</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class Implementation extends EclipsePlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/.classpath b/org.eclipse.osbp.mobile.vaadin.ecview.model/.classpath
new file mode 100644
index 0000000..cf36b56
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/.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.mobile.vaadin.ecview.model/.gitignore b/org.eclipse.osbp.mobile.vaadin.ecview.model/.gitignore
new file mode 100644
index 0000000..1dd3331
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/.gitignore
@@ -0,0 +1,2 @@
+/target/
+/target/
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.mobile.vaadin.ecview.model/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.mobile.vaadin.ecview.model/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/.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.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.mobile.vaadin.ecview.model/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/.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.mobile.vaadin.ecview.model/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.mobile.vaadin.ecview.model/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/.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.mobile.vaadin.ecview.model/META-INF/MANIFEST.MF b/org.eclipse.osbp.mobile.vaadin.ecview.model/META-INF/MANIFEST.MF
index 9df28f5..0a0a1c1 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/META-INF/MANIFEST.MF
@@ -4,16 +4,17 @@
 Bundle-SymbolicName: org.eclipse.osbp.mobile.vaadin.ecview.model;singleton:=true
 Bundle-Version: 0.9.0.qualifier
 Bundle-ClassPath: .
-Bundle-Vendor: Eclipse OSBP
+Bundle-Vendor: Loetz GmbH&Co.KG (69115 Heidelberg,
+ Germany)
 Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Export-Package: org.eclipse.osbp.mobile.vaadin.ecview.model;
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.osbp.mobile.vaadin.ecview.model;version="0.9.0";
   uses:="org.eclipse.osbp.ecview.core.common.model.binding,
    org.eclipse.emf.ecore,
    org.eclipse.emf.common.util,
    org.eclipse.osbp.ecview.core.common.model.datatypes,
-   org.eclipse.osbp.ecview.core.common.model.core";version="0.9.0",
- org.eclipse.osbp.mobile.vaadin.ecview.model.impl;
+   org.eclipse.osbp.ecview.core.common.model.core",
+ org.eclipse.osbp.mobile.vaadin.ecview.model.impl;version="0.9.0";
   uses:="org.eclipse.osbp.ecview.core.common.model.binding,
    org.eclipse.emf.ecore,
    org.eclipse.emf.common.util,
@@ -22,14 +23,14 @@
    org.eclipse.osbp.ecview.core.common.model.core,
    org.eclipse.emf.common.notify,
    org.eclipse.emf.ecore.impl,
-   org.eclipse.osbp.ecview.core.common.model.core.impl";version="0.9.0",
- org.eclipse.osbp.mobile.vaadin.ecview.model.util;
+   org.eclipse.osbp.ecview.core.common.model.core.impl",
+ org.eclipse.osbp.mobile.vaadin.ecview.model.util;version="0.9.0";
   uses:="org.eclipse.emf.ecore.util,
    org.eclipse.emf.ecore,
    org.eclipse.emf.common.notify.impl,
    org.eclipse.osbp.mobile.vaadin.ecview.model,
    org.eclipse.osbp.ecview.core.common.model.core,
-   org.eclipse.emf.common.notify";version="0.9.0"
+   org.eclipse.emf.common.notify"
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.emf.ecore;visibility:=reexport,
  org.eclipse.osbp.ecview.core.common.model;bundle-version="[0.9.0,0.10.0)";visibility:=reexport,
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMNavigationBarButton.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMNavigationBarButton.java
index 3bf7402..754d9a0 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMNavigationBarButton.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMNavigationBarButton.java
@@ -25,11 +25,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationBarButton#getDatadescription <em>Datadescription</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationBarButton#getLastClickTime <em>Last Click Time</em>}</li>
  * </ul>
- * 
  *
  * @see org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobilePackage#getVMNavigationBarButton()
  * @model
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMNavigationButton.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMNavigationButton.java
index 82936a5..b2b3119 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMNavigationButton.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMNavigationButton.java
@@ -21,12 +21,12 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationButton#getPage <em>Page</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationButton#getDatadescription <em>Datadescription</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationButton#getLastClickTime <em>Last Click Time</em>}</li>
  * </ul>
- * 
  *
  * @see org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobilePackage#getVMNavigationButton()
  * @model
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMNavigationCommand.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMNavigationCommand.java
index 4dba7aa..8240611 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMNavigationCommand.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMNavigationCommand.java
@@ -21,12 +21,12 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationCommand#getNavigationHandler <em>Navigation Handler</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationCommand#getTargetPage <em>Target Page</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationCommand#getValue <em>Value</em>}</li>
  * </ul>
- * 
  *
  * @see org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobilePackage#getVMNavigationCommand()
  * @model
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMNavigationPage.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMNavigationPage.java
index 3ae0d6e..a83502c 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMNavigationPage.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMNavigationPage.java
@@ -24,6 +24,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationPage#getType <em>Type</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationPage#getEmfNsURI <em>Emf Ns URI</em>}</li>
@@ -35,7 +36,6 @@
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationPage#getDatadescription <em>Datadescription</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationPage#getCellStyles <em>Cell Styles</em>}</li>
  * </ul>
- * 
  *
  * @see org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobilePackage#getVMNavigationPage()
  * @model
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMNavigationPageCellStyle.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMNavigationPageCellStyle.java
index dbebfed..895bdff 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMNavigationPageCellStyle.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMNavigationPageCellStyle.java
@@ -22,11 +22,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationPageCellStyle#getTarget <em>Target</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMNavigationPageCellStyle#getAlignment <em>Alignment</em>}</li>
  * </ul>
- * 
  *
  * @see org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobilePackage#getVMNavigationPageCellStyle()
  * @model
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMSearchPanel.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMSearchPanel.java
index 96fe88c..efa32cd 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMSearchPanel.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMSearchPanel.java
@@ -21,6 +21,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMSearchPanel#getType <em>Type</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMSearchPanel#getEmfNsURI <em>Emf Ns URI</em>}</li>
@@ -28,7 +29,6 @@
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMSearchPanel#getApplyFilter <em>Apply Filter</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMSearchPanel#getFilter <em>Filter</em>}</li>
  * </ul>
- * 
  *
  * @see org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobilePackage#getVMSearchPanel()
  * @model
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMSwitch.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMSwitch.java
index 2fd9ee8..a4ae504 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMSwitch.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMSwitch.java
@@ -20,11 +20,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMSwitch#getDatadescription <em>Datadescription</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMSwitch#isValue <em>Value</em>}</li>
  * </ul>
- * 
  *
  * @see org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobilePackage#getVMSwitch()
  * @model
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMTab.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMTab.java
index d144c2e..ddeba7e 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMTab.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMTab.java
@@ -25,13 +25,13 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMTab#getParent <em>Parent</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMTab#getEmbeddable <em>Embeddable</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMTab#getDatadescription <em>Datadescription</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMTab#getOrphanDatadescriptions <em>Orphan Datadescriptions</em>}</li>
  * </ul>
- * 
  *
  * @see org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobilePackage#getVMTab()
  * @model
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMTabSheet.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMTabSheet.java
index 2641993..76de05f 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMTabSheet.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VMTabSheet.java
@@ -21,10 +21,10 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.VMTabSheet#getTabs <em>Tabs</em>}</li>
  * </ul>
- * 
  *
  * @see org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobilePackage#getVMTabSheet()
  * @model
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VaadinMobilePackage.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VaadinMobilePackage.java
index b0bdc35..e620adf 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VaadinMobilePackage.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/VaadinMobilePackage.java
@@ -76,6 +76,15 @@
 	int VM_HORIZONTAL_BUTTON_GROUP = 0;
 
 	/**
+	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_HORIZONTAL_BUTTON_GROUP__TAGS = CoreModelPackage.YLAYOUT__TAGS;
+
+	/**
 	 * The feature id for the '<em><b>Id</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -94,15 +103,6 @@
 	int VM_HORIZONTAL_BUTTON_GROUP__NAME = CoreModelPackage.YLAYOUT__NAME;
 
 	/**
-	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int VM_HORIZONTAL_BUTTON_GROUP__TAGS = CoreModelPackage.YLAYOUT__TAGS;
-
-	/**
 	 * The feature id for the '<em><b>Properties</b></em>' map.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -202,6 +202,33 @@
 	int VM_HORIZONTAL_BUTTON_GROUP__MEMENTO_ID = CoreModelPackage.YLAYOUT__MEMENTO_ID;
 
 	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_HORIZONTAL_BUTTON_GROUP__LABEL = CoreModelPackage.YLAYOUT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Label I1 8n Key</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_HORIZONTAL_BUTTON_GROUP__LABEL_I1_8N_KEY = CoreModelPackage.YLAYOUT__LABEL_I1_8N_KEY;
+
+	/**
+	 * The feature id for the '<em><b>Last Context Click</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_HORIZONTAL_BUTTON_GROUP__LAST_CONTEXT_CLICK = CoreModelPackage.YLAYOUT__LAST_CONTEXT_CLICK;
+
+	/**
 	 * The feature id for the '<em><b>Initial Editable</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -247,6 +274,24 @@
 	int VM_HORIZONTAL_BUTTON_GROUP__ELEMENTS = CoreModelPackage.YLAYOUT__ELEMENTS;
 
 	/**
+	 * The feature id for the '<em><b>Last Component Attach</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_HORIZONTAL_BUTTON_GROUP__LAST_COMPONENT_ATTACH = CoreModelPackage.YLAYOUT__LAST_COMPONENT_ATTACH;
+
+	/**
+	 * The feature id for the '<em><b>Last Component Detach</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_HORIZONTAL_BUTTON_GROUP__LAST_COMPONENT_DETACH = CoreModelPackage.YLAYOUT__LAST_COMPONENT_DETACH;
+
+	/**
 	 * The number of structural features of the '<em>VM Horizontal Button Group</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -267,6 +312,15 @@
 	int VM_SWITCH = 1;
 
 	/**
+	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_SWITCH__TAGS = CoreModelPackage.YFIELD__TAGS;
+
+	/**
 	 * The feature id for the '<em><b>Id</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -285,15 +339,6 @@
 	int VM_SWITCH__NAME = CoreModelPackage.YFIELD__NAME;
 
 	/**
-	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int VM_SWITCH__TAGS = CoreModelPackage.YFIELD__TAGS;
-
-	/**
 	 * The feature id for the '<em><b>Properties</b></em>' map.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -393,6 +438,33 @@
 	int VM_SWITCH__MEMENTO_ID = CoreModelPackage.YFIELD__MEMENTO_ID;
 
 	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_SWITCH__LABEL = CoreModelPackage.YFIELD__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Label I1 8n Key</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_SWITCH__LABEL_I1_8N_KEY = CoreModelPackage.YFIELD__LABEL_I1_8N_KEY;
+
+	/**
+	 * The feature id for the '<em><b>Last Context Click</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_SWITCH__LAST_CONTEXT_CLICK = CoreModelPackage.YFIELD__LAST_CONTEXT_CLICK;
+
+	/**
 	 * The feature id for the '<em><b>Initial Editable</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -503,6 +575,15 @@
 	int VM_VERTICAL_COMPONENT_GROUP = 2;
 
 	/**
+	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_VERTICAL_COMPONENT_GROUP__TAGS = CoreModelPackage.YLAYOUT__TAGS;
+
+	/**
 	 * The feature id for the '<em><b>Id</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -521,15 +602,6 @@
 	int VM_VERTICAL_COMPONENT_GROUP__NAME = CoreModelPackage.YLAYOUT__NAME;
 
 	/**
-	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int VM_VERTICAL_COMPONENT_GROUP__TAGS = CoreModelPackage.YLAYOUT__TAGS;
-
-	/**
 	 * The feature id for the '<em><b>Properties</b></em>' map.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -629,6 +701,33 @@
 	int VM_VERTICAL_COMPONENT_GROUP__MEMENTO_ID = CoreModelPackage.YLAYOUT__MEMENTO_ID;
 
 	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_VERTICAL_COMPONENT_GROUP__LABEL = CoreModelPackage.YLAYOUT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Label I1 8n Key</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_VERTICAL_COMPONENT_GROUP__LABEL_I1_8N_KEY = CoreModelPackage.YLAYOUT__LABEL_I1_8N_KEY;
+
+	/**
+	 * The feature id for the '<em><b>Last Context Click</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_VERTICAL_COMPONENT_GROUP__LAST_CONTEXT_CLICK = CoreModelPackage.YLAYOUT__LAST_CONTEXT_CLICK;
+
+	/**
 	 * The feature id for the '<em><b>Initial Editable</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -674,6 +773,24 @@
 	int VM_VERTICAL_COMPONENT_GROUP__ELEMENTS = CoreModelPackage.YLAYOUT__ELEMENTS;
 
 	/**
+	 * The feature id for the '<em><b>Last Component Attach</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_VERTICAL_COMPONENT_GROUP__LAST_COMPONENT_ATTACH = CoreModelPackage.YLAYOUT__LAST_COMPONENT_ATTACH;
+
+	/**
+	 * The feature id for the '<em><b>Last Component Detach</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_VERTICAL_COMPONENT_GROUP__LAST_COMPONENT_DETACH = CoreModelPackage.YLAYOUT__LAST_COMPONENT_DETACH;
+
+	/**
 	 * The number of structural features of the '<em>VM Vertical Component Group</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -693,6 +810,15 @@
 	int VM_TAB_SHEET = 3;
 
 	/**
+	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_TAB_SHEET__TAGS = CoreModelPackage.YEMBEDDABLE__TAGS;
+
+	/**
 	 * The feature id for the '<em><b>Id</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -711,15 +837,6 @@
 	int VM_TAB_SHEET__NAME = CoreModelPackage.YEMBEDDABLE__NAME;
 
 	/**
-	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int VM_TAB_SHEET__TAGS = CoreModelPackage.YEMBEDDABLE__TAGS;
-
-	/**
 	 * The feature id for the '<em><b>Properties</b></em>' map.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -819,6 +936,33 @@
 	int VM_TAB_SHEET__MEMENTO_ID = CoreModelPackage.YEMBEDDABLE__MEMENTO_ID;
 
 	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_TAB_SHEET__LABEL = CoreModelPackage.YEMBEDDABLE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Label I1 8n Key</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_TAB_SHEET__LABEL_I1_8N_KEY = CoreModelPackage.YEMBEDDABLE__LABEL_I1_8N_KEY;
+
+	/**
+	 * The feature id for the '<em><b>Last Context Click</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_TAB_SHEET__LAST_CONTEXT_CLICK = CoreModelPackage.YEMBEDDABLE__LAST_CONTEXT_CLICK;
+
+	/**
 	 * The feature id for the '<em><b>Tabs</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -847,6 +991,15 @@
 	int VM_TAB = 4;
 
 	/**
+	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_TAB__TAGS = CoreModelPackage.YELEMENT__TAGS;
+
+	/**
 	 * The feature id for the '<em><b>Id</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -865,15 +1018,6 @@
 	int VM_TAB__NAME = CoreModelPackage.YELEMENT__NAME;
 
 	/**
-	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int VM_TAB__TAGS = CoreModelPackage.YELEMENT__TAGS;
-
-	/**
 	 * The feature id for the '<em><b>Properties</b></em>' map.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -956,6 +1100,15 @@
 	int VM_NAVIGATION_PAGE = 5;
 
 	/**
+	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_PAGE__TAGS = CoreModelPackage.YLAYOUT__TAGS;
+
+	/**
 	 * The feature id for the '<em><b>Id</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -974,15 +1127,6 @@
 	int VM_NAVIGATION_PAGE__NAME = CoreModelPackage.YLAYOUT__NAME;
 
 	/**
-	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int VM_NAVIGATION_PAGE__TAGS = CoreModelPackage.YLAYOUT__TAGS;
-
-	/**
 	 * The feature id for the '<em><b>Properties</b></em>' map.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1082,6 +1226,33 @@
 	int VM_NAVIGATION_PAGE__MEMENTO_ID = CoreModelPackage.YLAYOUT__MEMENTO_ID;
 
 	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_PAGE__LABEL = CoreModelPackage.YLAYOUT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Label I1 8n Key</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_PAGE__LABEL_I1_8N_KEY = CoreModelPackage.YLAYOUT__LABEL_I1_8N_KEY;
+
+	/**
+	 * The feature id for the '<em><b>Last Context Click</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_PAGE__LAST_CONTEXT_CLICK = CoreModelPackage.YLAYOUT__LAST_CONTEXT_CLICK;
+
+	/**
 	 * The feature id for the '<em><b>Initial Editable</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1127,6 +1298,24 @@
 	int VM_NAVIGATION_PAGE__ELEMENTS = CoreModelPackage.YLAYOUT__ELEMENTS;
 
 	/**
+	 * The feature id for the '<em><b>Last Component Attach</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_PAGE__LAST_COMPONENT_ATTACH = CoreModelPackage.YLAYOUT__LAST_COMPONENT_ATTACH;
+
+	/**
+	 * The feature id for the '<em><b>Last Component Detach</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_PAGE__LAST_COMPONENT_DETACH = CoreModelPackage.YLAYOUT__LAST_COMPONENT_DETACH;
+
+	/**
 	 * The feature id for the '<em><b>Type</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1264,6 +1453,15 @@
 	int VM_NAVIGATION_BUTTON = 7;
 
 	/**
+	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_BUTTON__TAGS = CoreModelPackage.YACTION__TAGS;
+
+	/**
 	 * The feature id for the '<em><b>Id</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1282,15 +1480,6 @@
 	int VM_NAVIGATION_BUTTON__NAME = CoreModelPackage.YACTION__NAME;
 
 	/**
-	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int VM_NAVIGATION_BUTTON__TAGS = CoreModelPackage.YACTION__TAGS;
-
-	/**
 	 * The feature id for the '<em><b>Properties</b></em>' map.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1390,6 +1579,33 @@
 	int VM_NAVIGATION_BUTTON__MEMENTO_ID = CoreModelPackage.YACTION__MEMENTO_ID;
 
 	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_BUTTON__LABEL = CoreModelPackage.YACTION__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Label I1 8n Key</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_BUTTON__LABEL_I1_8N_KEY = CoreModelPackage.YACTION__LABEL_I1_8N_KEY;
+
+	/**
+	 * The feature id for the '<em><b>Last Context Click</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_BUTTON__LAST_CONTEXT_CLICK = CoreModelPackage.YACTION__LAST_CONTEXT_CLICK;
+
+	/**
 	 * The feature id for the '<em><b>Initial Enabled</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1454,6 +1670,15 @@
 	int VM_NAVIGATION_COMMAND = 8;
 
 	/**
+	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_COMMAND__TAGS = CoreModelPackage.YCOMMAND__TAGS;
+
+	/**
 	 * The feature id for the '<em><b>Id</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1472,15 +1697,6 @@
 	int VM_NAVIGATION_COMMAND__NAME = CoreModelPackage.YCOMMAND__NAME;
 
 	/**
-	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int VM_NAVIGATION_COMMAND__TAGS = CoreModelPackage.YCOMMAND__TAGS;
-
-	/**
 	 * The feature id for the '<em><b>Properties</b></em>' map.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1536,6 +1752,15 @@
 	int VM_NAVIGATION_HANDLER = 9;
 
 	/**
+	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_HANDLER__TAGS = CoreModelPackage.YELEMENT__TAGS;
+
+	/**
 	 * The feature id for the '<em><b>Id</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1554,15 +1779,6 @@
 	int VM_NAVIGATION_HANDLER__NAME = CoreModelPackage.YELEMENT__NAME;
 
 	/**
-	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int VM_NAVIGATION_HANDLER__TAGS = CoreModelPackage.YELEMENT__TAGS;
-
-	/**
 	 * The feature id for the '<em><b>Properties</b></em>' map.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1591,6 +1807,15 @@
 	int VM_SEARCH_PANEL = 10;
 
 	/**
+	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_SEARCH_PANEL__TAGS = CoreModelPackage.YLAYOUT__TAGS;
+
+	/**
 	 * The feature id for the '<em><b>Id</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1609,15 +1834,6 @@
 	int VM_SEARCH_PANEL__NAME = CoreModelPackage.YLAYOUT__NAME;
 
 	/**
-	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int VM_SEARCH_PANEL__TAGS = CoreModelPackage.YLAYOUT__TAGS;
-
-	/**
 	 * The feature id for the '<em><b>Properties</b></em>' map.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1717,6 +1933,33 @@
 	int VM_SEARCH_PANEL__MEMENTO_ID = CoreModelPackage.YLAYOUT__MEMENTO_ID;
 
 	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_SEARCH_PANEL__LABEL = CoreModelPackage.YLAYOUT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Label I1 8n Key</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_SEARCH_PANEL__LABEL_I1_8N_KEY = CoreModelPackage.YLAYOUT__LABEL_I1_8N_KEY;
+
+	/**
+	 * The feature id for the '<em><b>Last Context Click</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_SEARCH_PANEL__LAST_CONTEXT_CLICK = CoreModelPackage.YLAYOUT__LAST_CONTEXT_CLICK;
+
+	/**
 	 * The feature id for the '<em><b>Initial Editable</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1762,6 +2005,24 @@
 	int VM_SEARCH_PANEL__ELEMENTS = CoreModelPackage.YLAYOUT__ELEMENTS;
 
 	/**
+	 * The feature id for the '<em><b>Last Component Attach</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_SEARCH_PANEL__LAST_COMPONENT_ATTACH = CoreModelPackage.YLAYOUT__LAST_COMPONENT_ATTACH;
+
+	/**
+	 * The feature id for the '<em><b>Last Component Detach</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_SEARCH_PANEL__LAST_COMPONENT_DETACH = CoreModelPackage.YLAYOUT__LAST_COMPONENT_DETACH;
+
+	/**
 	 * The feature id for the '<em><b>Spacing</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1844,6 +2105,15 @@
 	int VM_NAVIGATION_ROOT = 11;
 
 	/**
+	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_ROOT__TAGS = CoreModelPackage.YLAYOUT__TAGS;
+
+	/**
 	 * The feature id for the '<em><b>Id</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1862,15 +2132,6 @@
 	int VM_NAVIGATION_ROOT__NAME = CoreModelPackage.YLAYOUT__NAME;
 
 	/**
-	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int VM_NAVIGATION_ROOT__TAGS = CoreModelPackage.YLAYOUT__TAGS;
-
-	/**
 	 * The feature id for the '<em><b>Properties</b></em>' map.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1970,6 +2231,33 @@
 	int VM_NAVIGATION_ROOT__MEMENTO_ID = CoreModelPackage.YLAYOUT__MEMENTO_ID;
 
 	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_ROOT__LABEL = CoreModelPackage.YLAYOUT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Label I1 8n Key</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_ROOT__LABEL_I1_8N_KEY = CoreModelPackage.YLAYOUT__LABEL_I1_8N_KEY;
+
+	/**
+	 * The feature id for the '<em><b>Last Context Click</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_ROOT__LAST_CONTEXT_CLICK = CoreModelPackage.YLAYOUT__LAST_CONTEXT_CLICK;
+
+	/**
 	 * The feature id for the '<em><b>Initial Editable</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -2015,6 +2303,24 @@
 	int VM_NAVIGATION_ROOT__ELEMENTS = CoreModelPackage.YLAYOUT__ELEMENTS;
 
 	/**
+	 * The feature id for the '<em><b>Last Component Attach</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_ROOT__LAST_COMPONENT_ATTACH = CoreModelPackage.YLAYOUT__LAST_COMPONENT_ATTACH;
+
+	/**
+	 * The feature id for the '<em><b>Last Component Detach</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_ROOT__LAST_COMPONENT_DETACH = CoreModelPackage.YLAYOUT__LAST_COMPONENT_DETACH;
+
+	/**
 	 * The number of structural features of the '<em>VM Navigation Root</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -2034,6 +2340,15 @@
 	int VM_NAVIGATION_BAR_BUTTON = 12;
 
 	/**
+	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_BAR_BUTTON__TAGS = CoreModelPackage.YACTION__TAGS;
+
+	/**
 	 * The feature id for the '<em><b>Id</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -2052,15 +2367,6 @@
 	int VM_NAVIGATION_BAR_BUTTON__NAME = CoreModelPackage.YACTION__NAME;
 
 	/**
-	 * The feature id for the '<em><b>Tags</b></em>' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int VM_NAVIGATION_BAR_BUTTON__TAGS = CoreModelPackage.YACTION__TAGS;
-
-	/**
 	 * The feature id for the '<em><b>Properties</b></em>' map.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -2160,6 +2466,33 @@
 	int VM_NAVIGATION_BAR_BUTTON__MEMENTO_ID = CoreModelPackage.YACTION__MEMENTO_ID;
 
 	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_BAR_BUTTON__LABEL = CoreModelPackage.YACTION__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Label I1 8n Key</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_BAR_BUTTON__LABEL_I1_8N_KEY = CoreModelPackage.YACTION__LABEL_I1_8N_KEY;
+
+	/**
+	 * The feature id for the '<em><b>Last Context Click</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VM_NAVIGATION_BAR_BUTTON__LAST_CONTEXT_CLICK = CoreModelPackage.YACTION__LAST_CONTEXT_CLICK;
+
+	/**
 	 * The feature id for the '<em><b>Initial Enabled</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMHorizontalButtonGroupImpl.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMHorizontalButtonGroupImpl.java
index 7cc5d2b..50979de 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMHorizontalButtonGroupImpl.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMHorizontalButtonGroupImpl.java
@@ -22,8 +22,6 @@
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>VM Horizontal Button Group</b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * 
  *
  * @generated
  */
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationBarButtonImpl.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationBarButtonImpl.java
index b7c56fc..fe3e101 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationBarButtonImpl.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationBarButtonImpl.java
@@ -28,13 +28,13 @@
  * <em><b>VM Navigation Bar Button</b></em>'. <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationBarButtonImpl#isInitialEditable <em>Initial Editable</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationBarButtonImpl#isEditable <em>Editable</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationBarButtonImpl#getDatadescription <em>Datadescription</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationBarButtonImpl#getLastClickTime <em>Last Click Time</em>}</li>
  * </ul>
- * 
  *
  * @generated
  */
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationButtonImpl.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationButtonImpl.java
index ec07377..8a58b21 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationButtonImpl.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationButtonImpl.java
@@ -29,12 +29,12 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationButtonImpl#getPage <em>Page</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationButtonImpl#getDatadescription <em>Datadescription</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationButtonImpl#getLastClickTime <em>Last Click Time</em>}</li>
  * </ul>
- * 
  *
  * @generated
  */
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationCommandImpl.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationCommandImpl.java
index d62e689..110f815 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationCommandImpl.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationCommandImpl.java
@@ -41,22 +41,32 @@
  * <em><b>VM Navigation Command</b></em>'. <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
+ *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationCommandImpl#getTags <em>Tags</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationCommandImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationCommandImpl#getName <em>Name</em>}</li>
- *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationCommandImpl#getTags <em>Tags</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationCommandImpl#getProperties <em>Properties</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationCommandImpl#getNavigationHandler <em>Navigation Handler</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationCommandImpl#getTargetPage <em>Target Page</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationCommandImpl#getValue <em>Value</em>}</li>
  * </ul>
- * 
  *
  * @generated
  */
 public class VMNavigationCommandImpl extends MinimalEObjectImpl.Container
 		implements VMNavigationCommand {
 	/**
+	 * The cached value of the '{@link #getTags() <em>Tags</em>}' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTags()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<String> tags;
+
+	/**
 	 * The default value of the '{@link #getId() <em>Id</em>}' attribute. <!--
 	 * begin-user-doc --> <!-- end-user-doc -->
 	 * 
@@ -95,16 +105,6 @@
 	protected String name = NAME_EDEFAULT;
 
 	/**
-	 * The cached value of the '{@link #getTags() <em>Tags</em>}' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getTags()
-	 * @generated
-	 * @ordered
-	 */
-	protected EList<String> tags;
-
-	/**
 	 * The cached value of the '{@link #getProperties() <em>Properties</em>}' map.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -479,12 +479,12 @@
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
+			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__TAGS:
+				return getTags();
 			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__ID:
 				return getId();
 			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__NAME:
 				return getName();
-			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__TAGS:
-				return getTags();
 			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__PROPERTIES:
 				if (coreType) return getProperties();
 				else return getProperties().map();
@@ -512,16 +512,16 @@
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
+			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__TAGS:
+				getTags().clear();
+				getTags().addAll((Collection<? extends String>)newValue);
+				return;
 			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__ID:
 				setId((String)newValue);
 				return;
 			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__NAME:
 				setName((String)newValue);
 				return;
-			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__TAGS:
-				getTags().clear();
-				getTags().addAll((Collection<? extends String>)newValue);
-				return;
 			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__PROPERTIES:
 				((EStructuralFeature.Setting)getProperties()).set(newValue);
 				return;
@@ -548,15 +548,15 @@
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
+			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__TAGS:
+				getTags().clear();
+				return;
 			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__ID:
 				setId(ID_EDEFAULT);
 				return;
 			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__NAME:
 				setName(NAME_EDEFAULT);
 				return;
-			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__TAGS:
-				getTags().clear();
-				return;
 			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__PROPERTIES:
 				getProperties().clear();
 				return;
@@ -584,12 +584,12 @@
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
+			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__TAGS:
+				return tags != null && !tags.isEmpty();
 			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__ID:
 				return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals(id);
 			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__NAME:
 				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
-			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__TAGS:
-				return tags != null && !tags.isEmpty();
 			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__PROPERTIES:
 				return properties != null && !properties.isEmpty();
 			case VaadinMobilePackage.VM_NAVIGATION_COMMAND__NAVIGATION_HANDLER:
@@ -613,12 +613,12 @@
 		if (eIsProxy()) return super.toString();
 
 		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (id: ");
+		result.append(" (tags: ");
+		result.append(tags);
+		result.append(", id: ");
 		result.append(id);
 		result.append(", name: ");
 		result.append(name);
-		result.append(", tags: ");
-		result.append(tags);
 		result.append(", value: ");
 		result.append(value);
 		result.append(')');
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationPageCellStyleImpl.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationPageCellStyleImpl.java
index 612c6ce..a259d9d 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationPageCellStyleImpl.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationPageCellStyleImpl.java
@@ -31,11 +31,11 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationPageCellStyleImpl#getTarget <em>Target</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationPageCellStyleImpl#getAlignment <em>Alignment</em>}</li>
  * </ul>
- * 
  *
  * @generated
  */
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationPageImpl.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationPageImpl.java
index 146b9b6..42dcb9c 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationPageImpl.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationPageImpl.java
@@ -36,6 +36,7 @@
  * <em><b>VM Navigation Page</b></em>'. <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationPageImpl#getType <em>Type</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationPageImpl#getEmfNsURI <em>Emf Ns URI</em>}</li>
@@ -47,7 +48,6 @@
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationPageImpl#getDatadescription <em>Datadescription</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMNavigationPageImpl#getCellStyles <em>Cell Styles</em>}</li>
  * </ul>
- * 
  *
  * @generated
  */
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationRootImpl.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationRootImpl.java
index e70c3ca..a7a2f03 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationRootImpl.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMNavigationRootImpl.java
@@ -22,8 +22,6 @@
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>VM Navigation Root</b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * 
  *
  * @generated
  */
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMSearchPanelImpl.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMSearchPanelImpl.java
index 86674db..a05a6b4 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMSearchPanelImpl.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMSearchPanelImpl.java
@@ -32,6 +32,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMSearchPanelImpl#isSpacing <em>Spacing</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMSearchPanelImpl#isMargin <em>Margin</em>}</li>
@@ -41,7 +42,6 @@
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMSearchPanelImpl#getApplyFilter <em>Apply Filter</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMSearchPanelImpl#getFilter <em>Filter</em>}</li>
  * </ul>
- * 
  *
  * @generated
  */
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMSwitchImpl.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMSwitchImpl.java
index 33c85b3..94e63a7 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMSwitchImpl.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMSwitchImpl.java
@@ -26,11 +26,11 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMSwitchImpl#getDatadescription <em>Datadescription</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMSwitchImpl#isValue <em>Value</em>}</li>
  * </ul>
- * 
  *
  * @generated
  */
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMTabImpl.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMTabImpl.java
index c68f4e2..93de83f 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMTabImpl.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMTabImpl.java
@@ -44,10 +44,11 @@
  * <em><b>VM Tab</b></em>'. <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
+ *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMTabImpl#getTags <em>Tags</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMTabImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMTabImpl#getName <em>Name</em>}</li>
- *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMTabImpl#getTags <em>Tags</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMTabImpl#getProperties <em>Properties</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMTabImpl#getCssClass <em>Css Class</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMTabImpl#getCssID <em>Css ID</em>}</li>
@@ -56,12 +57,20 @@
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMTabImpl#getDatadescription <em>Datadescription</em>}</li>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMTabImpl#getOrphanDatadescriptions <em>Orphan Datadescriptions</em>}</li>
  * </ul>
- * 
  *
  * @generated
  */
 public class VMTabImpl extends MinimalEObjectImpl.Container implements VMTab {
 	/**
+	 * The cached value of the '{@link #getTags() <em>Tags</em>}' attribute list.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTags()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<String> tags;
+
+	/**
 	 * The default value of the '{@link #getId() <em>Id</em>}' attribute. <!--
 	 * begin-user-doc --> <!-- end-user-doc -->
 	 * 
@@ -100,15 +109,6 @@
 	protected String name = NAME_EDEFAULT;
 
 	/**
-	 * The cached value of the '{@link #getTags() <em>Tags</em>}' attribute list.
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * @see #getTags()
-	 * @generated
-	 * @ordered
-	 */
-	protected EList<String> tags;
-
-	/**
 	 * The cached value of the '{@link #getProperties() <em>Properties</em>}' map.
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @see #getProperties()
@@ -594,12 +594,12 @@
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
+			case VaadinMobilePackage.VM_TAB__TAGS:
+				return getTags();
 			case VaadinMobilePackage.VM_TAB__ID:
 				return getId();
 			case VaadinMobilePackage.VM_TAB__NAME:
 				return getName();
-			case VaadinMobilePackage.VM_TAB__TAGS:
-				return getTags();
 			case VaadinMobilePackage.VM_TAB__PROPERTIES:
 				if (coreType) return getProperties();
 				else return getProperties().map();
@@ -633,16 +633,16 @@
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
+			case VaadinMobilePackage.VM_TAB__TAGS:
+				getTags().clear();
+				getTags().addAll((Collection<? extends String>)newValue);
+				return;
 			case VaadinMobilePackage.VM_TAB__ID:
 				setId((String)newValue);
 				return;
 			case VaadinMobilePackage.VM_TAB__NAME:
 				setName((String)newValue);
 				return;
-			case VaadinMobilePackage.VM_TAB__TAGS:
-				getTags().clear();
-				getTags().addAll((Collection<? extends String>)newValue);
-				return;
 			case VaadinMobilePackage.VM_TAB__PROPERTIES:
 				((EStructuralFeature.Setting)getProperties()).set(newValue);
 				return;
@@ -679,15 +679,15 @@
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
+			case VaadinMobilePackage.VM_TAB__TAGS:
+				getTags().clear();
+				return;
 			case VaadinMobilePackage.VM_TAB__ID:
 				setId(ID_EDEFAULT);
 				return;
 			case VaadinMobilePackage.VM_TAB__NAME:
 				setName(NAME_EDEFAULT);
 				return;
-			case VaadinMobilePackage.VM_TAB__TAGS:
-				getTags().clear();
-				return;
 			case VaadinMobilePackage.VM_TAB__PROPERTIES:
 				getProperties().clear();
 				return;
@@ -724,12 +724,12 @@
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
+			case VaadinMobilePackage.VM_TAB__TAGS:
+				return tags != null && !tags.isEmpty();
 			case VaadinMobilePackage.VM_TAB__ID:
 				return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals(id);
 			case VaadinMobilePackage.VM_TAB__NAME:
 				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
-			case VaadinMobilePackage.VM_TAB__TAGS:
-				return tags != null && !tags.isEmpty();
 			case VaadinMobilePackage.VM_TAB__PROPERTIES:
 				return properties != null && !properties.isEmpty();
 			case VaadinMobilePackage.VM_TAB__CSS_CLASS:
@@ -813,12 +813,12 @@
 		if (eIsProxy()) return super.toString();
 
 		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (id: ");
+		result.append(" (tags: ");
+		result.append(tags);
+		result.append(", id: ");
 		result.append(id);
 		result.append(", name: ");
 		result.append(name);
-		result.append(", tags: ");
-		result.append(tags);
 		result.append(", cssClass: ");
 		result.append(cssClass);
 		result.append(", cssID: ");
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMTabSheetImpl.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMTabSheetImpl.java
index f7af6ea..2f608d8 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMTabSheetImpl.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMTabSheetImpl.java
@@ -28,10 +28,10 @@
  * <em><b>VM Tab Sheet</b></em>'. <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.osbp.mobile.vaadin.ecview.model.impl.VMTabSheetImpl#getTabs <em>Tabs</em>}</li>
  * </ul>
- * 
  *
  * @generated
  */
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMVerticalComponentGroupImpl.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMVerticalComponentGroupImpl.java
index 437d69f..7d22ecc 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMVerticalComponentGroupImpl.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VMVerticalComponentGroupImpl.java
@@ -21,8 +21,6 @@
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>VM Vertical Component Group</b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * 
  *
  * @generated
  */
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VaadinMobileFactoryImpl.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VaadinMobileFactoryImpl.java
index 3d0272a..16f9bd8 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VaadinMobileFactoryImpl.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/impl/VaadinMobileFactoryImpl.java
@@ -30,10 +30,9 @@
 public class VaadinMobileFactoryImpl extends EFactoryImpl implements VaadinMobileFactory {
 	
 	/**
-	 * Creates the default factory implementation. <!-- begin-user-doc --> <!--
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc --> <!--
 	 * end-user-doc -->
-	 *
-	 * @return the vaadin mobile factory
 	 * @generated
 	 */
 	public static VaadinMobileFactory init() {
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/util/VaadinMobileAdapterFactory.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/util/VaadinMobileAdapterFactory.java
index 163cdb8..3f988f0 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/util/VaadinMobileAdapterFactory.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/util/VaadinMobileAdapterFactory.java
@@ -27,6 +27,7 @@
 import org.eclipse.osbp.ecview.core.common.model.core.YLayout;
 import org.eclipse.osbp.ecview.core.common.model.core.YMarginable;
 import org.eclipse.osbp.ecview.core.common.model.core.YSpacingable;
+import org.eclipse.osbp.ecview.core.common.model.core.YTaggable;
 import org.eclipse.osbp.ecview.core.common.model.core.YVisibleable;
 import org.eclipse.osbp.mobile.vaadin.ecview.model.*;
 
@@ -139,6 +140,10 @@
 				return createVMNavigationBarButtonAdapter();
 			}
 			@Override
+			public Adapter caseYTaggable(YTaggable object) {
+				return createYTaggableAdapter();
+			}
+			@Override
 			public Adapter caseYElement(YElement object) {
 				return createYElementAdapter();
 			}
@@ -397,6 +402,20 @@
 	}
 
 	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.osbp.ecview.core.common.model.core.YTaggable <em>YTaggable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.osbp.ecview.core.common.model.core.YTaggable
+	 * @generated
+	 */
+	public Adapter createYTaggableAdapter() {
+		return null;
+	}
+
+	/**
 	 * Creates a new adapter for an object of class '{@link org.eclipse.osbp.ecview.core.common.model.core.YElement <em>YElement</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
diff --git a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/util/VaadinMobileSwitch.java b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/util/VaadinMobileSwitch.java
index aba9101..47ccca9 100644
--- a/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/util/VaadinMobileSwitch.java
+++ b/org.eclipse.osbp.mobile.vaadin.ecview.model/src/org/eclipse/osbp/mobile/vaadin/ecview/model/util/VaadinMobileSwitch.java
@@ -26,6 +26,7 @@
 import org.eclipse.osbp.ecview.core.common.model.core.YLayout;
 import org.eclipse.osbp.ecview.core.common.model.core.YMarginable;
 import org.eclipse.osbp.ecview.core.common.model.core.YSpacingable;
+import org.eclipse.osbp.ecview.core.common.model.core.YTaggable;
 import org.eclipse.osbp.ecview.core.common.model.core.YVisibleable;
 import org.eclipse.osbp.mobile.vaadin.ecview.model.*;
 
@@ -97,6 +98,7 @@
 				if (result == null) result = caseYCssAble(vmHorizontalButtonGroup);
 				if (result == null) result = caseYVisibleable(vmHorizontalButtonGroup);
 				if (result == null) result = caseYAuthorizationable(vmHorizontalButtonGroup);
+				if (result == null) result = caseYTaggable(vmHorizontalButtonGroup);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -112,6 +114,7 @@
 				if (result == null) result = caseYCssAble(vmSwitch);
 				if (result == null) result = caseYVisibleable(vmSwitch);
 				if (result == null) result = caseYAuthorizationable(vmSwitch);
+				if (result == null) result = caseYTaggable(vmSwitch);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -126,6 +129,7 @@
 				if (result == null) result = caseYCssAble(vmVerticalComponentGroup);
 				if (result == null) result = caseYVisibleable(vmVerticalComponentGroup);
 				if (result == null) result = caseYAuthorizationable(vmVerticalComponentGroup);
+				if (result == null) result = caseYTaggable(vmVerticalComponentGroup);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -137,6 +141,7 @@
 				if (result == null) result = caseYCssAble(vmTabSheet);
 				if (result == null) result = caseYVisibleable(vmTabSheet);
 				if (result == null) result = caseYAuthorizationable(vmTabSheet);
+				if (result == null) result = caseYTaggable(vmTabSheet);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -146,6 +151,7 @@
 				if (result == null) result = caseYCssAble(vmTab);
 				if (result == null) result = caseVMNavigationHandler(vmTab);
 				if (result == null) result = caseYElement(vmTab);
+				if (result == null) result = caseYTaggable(vmTab);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -161,6 +167,7 @@
 				if (result == null) result = caseYCssAble(vmNavigationPage);
 				if (result == null) result = caseYVisibleable(vmNavigationPage);
 				if (result == null) result = caseYAuthorizationable(vmNavigationPage);
+				if (result == null) result = caseYTaggable(vmNavigationPage);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -180,6 +187,7 @@
 				if (result == null) result = caseYCssAble(vmNavigationButton);
 				if (result == null) result = caseYVisibleable(vmNavigationButton);
 				if (result == null) result = caseYAuthorizationable(vmNavigationButton);
+				if (result == null) result = caseYTaggable(vmNavigationButton);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -188,6 +196,7 @@
 				T result = caseVMNavigationCommand(vmNavigationCommand);
 				if (result == null) result = caseYCommand(vmNavigationCommand);
 				if (result == null) result = caseYElement(vmNavigationCommand);
+				if (result == null) result = caseYTaggable(vmNavigationCommand);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -195,6 +204,7 @@
 				VMNavigationHandler vmNavigationHandler = (VMNavigationHandler)theEObject;
 				T result = caseVMNavigationHandler(vmNavigationHandler);
 				if (result == null) result = caseYElement(vmNavigationHandler);
+				if (result == null) result = caseYTaggable(vmNavigationHandler);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -211,6 +221,7 @@
 				if (result == null) result = caseYCssAble(vmSearchPanel);
 				if (result == null) result = caseYVisibleable(vmSearchPanel);
 				if (result == null) result = caseYAuthorizationable(vmSearchPanel);
+				if (result == null) result = caseYTaggable(vmSearchPanel);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -226,6 +237,7 @@
 				if (result == null) result = caseYCssAble(vmNavigationRoot);
 				if (result == null) result = caseYVisibleable(vmNavigationRoot);
 				if (result == null) result = caseYAuthorizationable(vmNavigationRoot);
+				if (result == null) result = caseYTaggable(vmNavigationRoot);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -240,6 +252,7 @@
 				if (result == null) result = caseYCssAble(vmNavigationBarButton);
 				if (result == null) result = caseYVisibleable(vmNavigationBarButton);
 				if (result == null) result = caseYAuthorizationable(vmNavigationBarButton);
+				if (result == null) result = caseYTaggable(vmNavigationBarButton);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -443,6 +456,21 @@
 	}
 
 	/**
+	 * Returns the result of interpreting the object as an instance of '<em>YTaggable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>YTaggable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseYTaggable(YTaggable object) {
+		return null;
+	}
+
+	/**
 	 * Returns the result of interpreting the object as an instance of '<em>YElement</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
diff --git a/org.eclipse.osbp.mobile.vaadin.feature.ecview/.gitignore b/org.eclipse.osbp.mobile.vaadin.feature.ecview/.gitignore
new file mode 100644
index 0000000..1dd3331
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.feature.ecview/.gitignore
@@ -0,0 +1,2 @@
+/target/
+/target/
diff --git a/org.eclipse.osbp.mobile.vaadin.feature.ecview/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.mobile.vaadin.feature.ecview/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.feature.ecview/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.mobile.vaadin.feature.ecview/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.mobile.vaadin.feature.ecview/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.feature.ecview/.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.mobile.vaadin.feature.ecview/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.mobile.vaadin.feature.ecview/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.mobile.vaadin.feature.ecview/.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.mobile.vaadin.feature.ecview/feature.xml b/org.eclipse.osbp.mobile.vaadin.feature.ecview/feature.xml
index d38a826..55c050d 100644
--- a/org.eclipse.osbp.mobile.vaadin.feature.ecview/feature.xml
+++ b/org.eclipse.osbp.mobile.vaadin.feature.ecview/feature.xml
@@ -13,7 +13,8 @@
       id="org.eclipse.osbp.mobile.vaadin.feature.ecview"
       label="%featureName"
       version="0.9.0.qualifier"
-      provider-name="%providerName">
+      provider-name="%providerName"
+	  plugin="org.eclipse.osbp.mobile.vaadin.ecview.api">
 
    <description>
       %description
diff --git a/pom.xml b/pom.xml
index 79aff49..66a4110 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,6 +41,13 @@
 		</pluginRepository>
 	</pluginRepositories>
 	<repositories>
+	<!--
+		<repository>
+			<id>osbp-nexus-thirdparty</id>
+			<name>OSBP Nexus Thirdparty</name>
+			<url>http://download.osbee.org:8086/nexus/content/repositories/osbee-thirdparty/</url>
+		</repository>
+	-->
 		<repository>
 			<id>vaadin-addons</id>
 			<url>http://maven.vaadin.com/vaadin-addons</url>
