diff --git a/org.eclipse.osbp.ecview.dsl.edit/plugin.properties b/org.eclipse.osbp.ecview.dsl.edit/plugin.properties
index d22c9b8..7f1e63a 100644
--- a/org.eclipse.osbp.ecview.dsl.edit/plugin.properties
+++ b/org.eclipse.osbp.ecview.dsl.edit/plugin.properties
@@ -537,3 +537,4 @@
 _UI_UiTable_scrollToBottom_feature = Scroll To Bottom
 _UI_UiLayout_numberColumns_feature = Number Columns
 _UI_UiTable_pageLength_feature = Page Length
+_UI_UiLayout_saveAndNew_feature = Save And New
diff --git a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiFormLayoutItemProvider.java b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiFormLayoutItemProvider.java
index ead2113..8026d37 100644
--- a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiFormLayoutItemProvider.java
+++ b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiFormLayoutItemProvider.java
@@ -65,6 +65,7 @@
 			addStylesPropertyDescriptor(object);
 			addAutowirePropertyDescriptor(object);
 			addNumberColumnsPropertyDescriptor(object);
+			addSaveAndNewPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
 	}
@@ -224,6 +225,28 @@
 	}
 
 	/**
+	 * This adds a property descriptor for the Save And New feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSaveAndNewPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_UiLayout_saveAndNew_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_UiLayout_saveAndNew_feature", "_UI_UiLayout_type"),
+				 UiModelPackage.Literals.UI_LAYOUT__SAVE_AND_NEW,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_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}.
@@ -301,6 +324,7 @@
 			case UiModelPackage.UI_FORM_LAYOUT__STYLES:
 			case UiModelPackage.UI_FORM_LAYOUT__AUTOWIRE:
 			case UiModelPackage.UI_FORM_LAYOUT__NUMBER_COLUMNS:
+			case UiModelPackage.UI_FORM_LAYOUT__SAVE_AND_NEW:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 			case UiModelPackage.UI_FORM_LAYOUT__I18N_INFO:
diff --git a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiGridLayoutItemProvider.java b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiGridLayoutItemProvider.java
index dddc0d9..dc657d0 100644
--- a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiGridLayoutItemProvider.java
+++ b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiGridLayoutItemProvider.java
@@ -65,6 +65,7 @@
 			addStylesPropertyDescriptor(object);
 			addAutowirePropertyDescriptor(object);
 			addNumberColumnsPropertyDescriptor(object);
+			addSaveAndNewPropertyDescriptor(object);
 			addColumnsPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
@@ -225,6 +226,28 @@
 	}
 
 	/**
+	 * This adds a property descriptor for the Save And New feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSaveAndNewPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_UiLayout_saveAndNew_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_UiLayout_saveAndNew_feature", "_UI_UiLayout_type"),
+				 UiModelPackage.Literals.UI_LAYOUT__SAVE_AND_NEW,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
 	 * This adds a property descriptor for the Columns feature.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -324,6 +347,7 @@
 			case UiModelPackage.UI_GRID_LAYOUT__STYLES:
 			case UiModelPackage.UI_GRID_LAYOUT__AUTOWIRE:
 			case UiModelPackage.UI_GRID_LAYOUT__NUMBER_COLUMNS:
+			case UiModelPackage.UI_GRID_LAYOUT__SAVE_AND_NEW:
 			case UiModelPackage.UI_GRID_LAYOUT__COLUMNS:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
diff --git a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiHorizontalButtonGroupItemProvider.java b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiHorizontalButtonGroupItemProvider.java
index b950ade..f24ee16 100644
--- a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiHorizontalButtonGroupItemProvider.java
+++ b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiHorizontalButtonGroupItemProvider.java
@@ -65,6 +65,7 @@
 			addStylesPropertyDescriptor(object);
 			addAutowirePropertyDescriptor(object);
 			addNumberColumnsPropertyDescriptor(object);
+			addSaveAndNewPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
 	}
@@ -224,6 +225,28 @@
 	}
 
 	/**
+	 * This adds a property descriptor for the Save And New feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSaveAndNewPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_UiLayout_saveAndNew_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_UiLayout_saveAndNew_feature", "_UI_UiLayout_type"),
+				 UiModelPackage.Literals.UI_LAYOUT__SAVE_AND_NEW,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_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}.
@@ -301,6 +324,7 @@
 			case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__STYLES:
 			case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__AUTOWIRE:
 			case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__NUMBER_COLUMNS:
+			case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__SAVE_AND_NEW:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 			case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__I18N_INFO:
diff --git a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiHorizontalLayoutItemProvider.java b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiHorizontalLayoutItemProvider.java
index c938e50..cba1bc8 100644
--- a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiHorizontalLayoutItemProvider.java
+++ b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiHorizontalLayoutItemProvider.java
@@ -65,6 +65,7 @@
 			addStylesPropertyDescriptor(object);
 			addAutowirePropertyDescriptor(object);
 			addNumberColumnsPropertyDescriptor(object);
+			addSaveAndNewPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
 	}
@@ -224,6 +225,28 @@
 	}
 
 	/**
+	 * This adds a property descriptor for the Save And New feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSaveAndNewPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_UiLayout_saveAndNew_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_UiLayout_saveAndNew_feature", "_UI_UiLayout_type"),
+				 UiModelPackage.Literals.UI_LAYOUT__SAVE_AND_NEW,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_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}.
@@ -301,6 +324,7 @@
 			case UiModelPackage.UI_HORIZONTAL_LAYOUT__STYLES:
 			case UiModelPackage.UI_HORIZONTAL_LAYOUT__AUTOWIRE:
 			case UiModelPackage.UI_HORIZONTAL_LAYOUT__NUMBER_COLUMNS:
+			case UiModelPackage.UI_HORIZONTAL_LAYOUT__SAVE_AND_NEW:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 			case UiModelPackage.UI_HORIZONTAL_LAYOUT__I18N_INFO:
diff --git a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiMobileNavigationPageItemProvider.java b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiMobileNavigationPageItemProvider.java
index c6cdc07..36ecea2 100644
--- a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiMobileNavigationPageItemProvider.java
+++ b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiMobileNavigationPageItemProvider.java
@@ -69,6 +69,7 @@
 			addStylesPropertyDescriptor(object);
 			addAutowirePropertyDescriptor(object);
 			addNumberColumnsPropertyDescriptor(object);
+			addSaveAndNewPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
 	}
@@ -228,6 +229,28 @@
 	}
 
 	/**
+	 * This adds a property descriptor for the Save And New feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSaveAndNewPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_UiLayout_saveAndNew_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_UiLayout_saveAndNew_feature", "_UI_UiLayout_type"),
+				 UiModelPackage.Literals.UI_LAYOUT__SAVE_AND_NEW,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_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}.
@@ -307,6 +330,7 @@
 			case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__STYLES:
 			case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__AUTOWIRE:
 			case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__NUMBER_COLUMNS:
+			case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__SAVE_AND_NEW:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 			case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__I18N_INFO:
diff --git a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiMobileNavigationRootItemProvider.java b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiMobileNavigationRootItemProvider.java
index d673c2f..5ddd906 100644
--- a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiMobileNavigationRootItemProvider.java
+++ b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiMobileNavigationRootItemProvider.java
@@ -65,6 +65,7 @@
 			addStylesPropertyDescriptor(object);
 			addAutowirePropertyDescriptor(object);
 			addNumberColumnsPropertyDescriptor(object);
+			addSaveAndNewPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
 	}
@@ -224,6 +225,28 @@
 	}
 
 	/**
+	 * This adds a property descriptor for the Save And New feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSaveAndNewPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_UiLayout_saveAndNew_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_UiLayout_saveAndNew_feature", "_UI_UiLayout_type"),
+				 UiModelPackage.Literals.UI_LAYOUT__SAVE_AND_NEW,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_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}.
@@ -301,6 +324,7 @@
 			case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__STYLES:
 			case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__AUTOWIRE:
 			case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__NUMBER_COLUMNS:
+			case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__SAVE_AND_NEW:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 			case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__I18N_INFO:
diff --git a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiMobileSearchPanelItemProvider.java b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiMobileSearchPanelItemProvider.java
index f4fc90c..0d963b7 100644
--- a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiMobileSearchPanelItemProvider.java
+++ b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiMobileSearchPanelItemProvider.java
@@ -69,6 +69,7 @@
 			addStylesPropertyDescriptor(object);
 			addAutowirePropertyDescriptor(object);
 			addNumberColumnsPropertyDescriptor(object);
+			addSaveAndNewPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
 	}
@@ -228,6 +229,28 @@
 	}
 
 	/**
+	 * This adds a property descriptor for the Save And New feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSaveAndNewPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_UiLayout_saveAndNew_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_UiLayout_saveAndNew_feature", "_UI_UiLayout_type"),
+				 UiModelPackage.Literals.UI_LAYOUT__SAVE_AND_NEW,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_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}.
@@ -306,6 +329,7 @@
 			case UiModelPackage.UI_MOBILE_SEARCH_PANEL__STYLES:
 			case UiModelPackage.UI_MOBILE_SEARCH_PANEL__AUTOWIRE:
 			case UiModelPackage.UI_MOBILE_SEARCH_PANEL__NUMBER_COLUMNS:
+			case UiModelPackage.UI_MOBILE_SEARCH_PANEL__SAVE_AND_NEW:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 			case UiModelPackage.UI_MOBILE_SEARCH_PANEL__I18N_INFO:
diff --git a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiPanelItemProvider.java b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiPanelItemProvider.java
index 003291b..2a6c8c2 100644
--- a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiPanelItemProvider.java
+++ b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiPanelItemProvider.java
@@ -65,6 +65,7 @@
 			addStylesPropertyDescriptor(object);
 			addAutowirePropertyDescriptor(object);
 			addNumberColumnsPropertyDescriptor(object);
+			addSaveAndNewPropertyDescriptor(object);
 			addContentAlignmentPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
@@ -225,6 +226,28 @@
 	}
 
 	/**
+	 * This adds a property descriptor for the Save And New feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSaveAndNewPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_UiLayout_saveAndNew_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_UiLayout_saveAndNew_feature", "_UI_UiLayout_type"),
+				 UiModelPackage.Literals.UI_LAYOUT__SAVE_AND_NEW,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
 	 * This adds a property descriptor for the Content Alignment feature.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -324,6 +347,7 @@
 			case UiModelPackage.UI_PANEL__STYLES:
 			case UiModelPackage.UI_PANEL__AUTOWIRE:
 			case UiModelPackage.UI_PANEL__NUMBER_COLUMNS:
+			case UiModelPackage.UI_PANEL__SAVE_AND_NEW:
 			case UiModelPackage.UI_PANEL__CONTENT_ALIGNMENT:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
diff --git a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiSearchPanelItemProvider.java b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiSearchPanelItemProvider.java
index 398f82f..3b06811 100644
--- a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiSearchPanelItemProvider.java
+++ b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiSearchPanelItemProvider.java
@@ -70,6 +70,7 @@
 			addStylesPropertyDescriptor(object);
 			addAutowirePropertyDescriptor(object);
 			addNumberColumnsPropertyDescriptor(object);
+			addSaveAndNewPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
 	}
@@ -229,6 +230,28 @@
 	}
 
 	/**
+	 * This adds a property descriptor for the Save And New feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSaveAndNewPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_UiLayout_saveAndNew_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_UiLayout_saveAndNew_feature", "_UI_UiLayout_type"),
+				 UiModelPackage.Literals.UI_LAYOUT__SAVE_AND_NEW,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_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}.
@@ -307,6 +330,7 @@
 			case UiModelPackage.UI_SEARCH_PANEL__STYLES:
 			case UiModelPackage.UI_SEARCH_PANEL__AUTOWIRE:
 			case UiModelPackage.UI_SEARCH_PANEL__NUMBER_COLUMNS:
+			case UiModelPackage.UI_SEARCH_PANEL__SAVE_AND_NEW:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 			case UiModelPackage.UI_SEARCH_PANEL__I18N_INFO:
diff --git a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiSplitpanelItemProvider.java b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiSplitpanelItemProvider.java
index 2aaa026..acf3090 100644
--- a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiSplitpanelItemProvider.java
+++ b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiSplitpanelItemProvider.java
@@ -65,6 +65,7 @@
 			addStylesPropertyDescriptor(object);
 			addAutowirePropertyDescriptor(object);
 			addNumberColumnsPropertyDescriptor(object);
+			addSaveAndNewPropertyDescriptor(object);
 			addSplitPositionPropertyDescriptor(object);
 			addHorizontalPropertyDescriptor(object);
 		}
@@ -226,6 +227,28 @@
 	}
 
 	/**
+	 * This adds a property descriptor for the Save And New feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSaveAndNewPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_UiLayout_saveAndNew_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_UiLayout_saveAndNew_feature", "_UI_UiLayout_type"),
+				 UiModelPackage.Literals.UI_LAYOUT__SAVE_AND_NEW,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
 	 * This adds a property descriptor for the Split Position feature.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -348,6 +371,7 @@
 			case UiModelPackage.UI_SPLITPANEL__STYLES:
 			case UiModelPackage.UI_SPLITPANEL__AUTOWIRE:
 			case UiModelPackage.UI_SPLITPANEL__NUMBER_COLUMNS:
+			case UiModelPackage.UI_SPLITPANEL__SAVE_AND_NEW:
 			case UiModelPackage.UI_SPLITPANEL__SPLIT_POSITION:
 			case UiModelPackage.UI_SPLITPANEL__HORIZONTAL:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
diff --git a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiVerticalComponentGroupItemProvider.java b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiVerticalComponentGroupItemProvider.java
index 07ad7c6..73c793f 100644
--- a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiVerticalComponentGroupItemProvider.java
+++ b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiVerticalComponentGroupItemProvider.java
@@ -65,6 +65,7 @@
 			addStylesPropertyDescriptor(object);
 			addAutowirePropertyDescriptor(object);
 			addNumberColumnsPropertyDescriptor(object);
+			addSaveAndNewPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
 	}
@@ -224,6 +225,28 @@
 	}
 
 	/**
+	 * This adds a property descriptor for the Save And New feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSaveAndNewPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_UiLayout_saveAndNew_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_UiLayout_saveAndNew_feature", "_UI_UiLayout_type"),
+				 UiModelPackage.Literals.UI_LAYOUT__SAVE_AND_NEW,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_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}.
@@ -301,6 +324,7 @@
 			case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__STYLES:
 			case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__AUTOWIRE:
 			case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__NUMBER_COLUMNS:
+			case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__SAVE_AND_NEW:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 			case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__I18N_INFO:
diff --git a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiVerticalLayoutItemProvider.java b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiVerticalLayoutItemProvider.java
index 5d15cfc..75214c7 100644
--- a/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiVerticalLayoutItemProvider.java
+++ b/org.eclipse.osbp.ecview.dsl.edit/src/org/eclipse/osbp/ecview/semantic/uimodel/provider/UiVerticalLayoutItemProvider.java
@@ -65,6 +65,7 @@
 			addStylesPropertyDescriptor(object);
 			addAutowirePropertyDescriptor(object);
 			addNumberColumnsPropertyDescriptor(object);
+			addSaveAndNewPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
 	}
@@ -224,6 +225,28 @@
 	}
 
 	/**
+	 * This adds a property descriptor for the Save And New feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSaveAndNewPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_UiLayout_saveAndNew_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_UiLayout_saveAndNew_feature", "_UI_UiLayout_type"),
+				 UiModelPackage.Literals.UI_LAYOUT__SAVE_AND_NEW,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_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}.
@@ -301,6 +324,7 @@
 			case UiModelPackage.UI_VERTICAL_LAYOUT__STYLES:
 			case UiModelPackage.UI_VERTICAL_LAYOUT__AUTOWIRE:
 			case UiModelPackage.UI_VERTICAL_LAYOUT__NUMBER_COLUMNS:
+			case UiModelPackage.UI_VERTICAL_LAYOUT__SAVE_AND_NEW:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 			case UiModelPackage.UI_VERTICAL_LAYOUT__I18N_INFO:
diff --git a/org.eclipse.osbp.ecview.dsl/META-INF/MANIFEST.MF b/org.eclipse.osbp.ecview.dsl/META-INF/MANIFEST.MF
index fd53a55..f0fcec2 100644
--- a/org.eclipse.osbp.ecview.dsl/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.ecview.dsl/META-INF/MANIFEST.MF
@@ -4,7 +4,11 @@
 Bundle-Vendor: Eclipse OSBP
 Bundle-Localization: plugin
 Bundle-Version: 0.9.0.qualifier
-Bundle-ClassPath: .,model/,src/,src-gen/,xtend-gen/
+Bundle-ClassPath: .,
+ model/,
+ src/,
+ src-gen/,
+ xtend-gen/
 Bundle-SymbolicName: org.eclipse.osbp.ecview.dsl;singleton:=true
 Bundle-ActivationPolicy: lazy
 Require-Bundle: org.eclipse.xtext;bundle-version="[2.11.0,2.12.0)";visibility:=reexport,
diff --git a/org.eclipse.osbp.ecview.dsl/model/UIGrammarCore.ecore b/org.eclipse.osbp.ecview.dsl/model/UIGrammarCore.ecore
index c18bc07..f57a7a4 100644
--- a/org.eclipse.osbp.ecview.dsl/model/UIGrammarCore.ecore
+++ b/org.eclipse.osbp.ecview.dsl/model/UIGrammarCore.ecore
@@ -182,6 +182,7 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="autoWireSource" eType="#//UiBindingExpression"
         containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="numberColumns" eType="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="saveAndNew" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="UiLayoutAssignment" abstract="true"
       interface="true" eSuperTypes="#//UiNamedElement #//UiRawBindableProvider"/>
diff --git a/org.eclipse.osbp.ecview.dsl/model/UIGrammarCore.genmodel b/org.eclipse.osbp.ecview.dsl/model/UIGrammarCore.genmodel
index bdf6184..edac619 100644
--- a/org.eclipse.osbp.ecview.dsl/model/UIGrammarCore.genmodel
+++ b/org.eclipse.osbp.ecview.dsl/model/UIGrammarCore.genmodel
@@ -175,6 +175,7 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute UIGrammarCore.ecore#//UiLayout/autowire"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference UIGrammarCore.ecore#//UiLayout/autoWireSource"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute UIGrammarCore.ecore#//UiLayout/numberColumns"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute UIGrammarCore.ecore#//UiLayout/saveAndNew"/>
     </genClasses>
     <genClasses image="false" ecoreClass="UIGrammarCore.ecore#//UiLayoutAssignment"/>
     <genClasses ecoreClass="UIGrammarCore.ecore#//UiAction"/>
diff --git a/org.eclipse.osbp.ecview.dsl/src-gen/org/eclipse/osbp/ecview/dsl/parser/antlr/internal/InternalUIGrammarLexer.java b/org.eclipse.osbp.ecview.dsl/src-gen/org/eclipse/osbp/ecview/dsl/parser/antlr/internal/InternalUIGrammarLexer.java
index ada8683..fc1f036 100644
--- a/org.eclipse.osbp.ecview.dsl/src-gen/org/eclipse/osbp/ecview/dsl/parser/antlr/internal/InternalUIGrammarLexer.java
+++ b/org.eclipse.osbp.ecview.dsl/src-gen/org/eclipse/osbp/ecview/dsl/parser/antlr/internal/InternalUIGrammarLexer.java
@@ -1,3 +1,14 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf), Loetz GmbH&Co.KG (Heidelberg)
+ * 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.ecview.dsl.parser.antlr.internal;
 
 // Hack: Use our own Lexer superclass by means of import. 
@@ -9114,4 +9125,4 @@
     }
  
 
-}
\ No newline at end of file
+}
diff --git a/org.eclipse.osbp.ecview.dsl/src-gen/org/eclipse/osbp/ecview/dsl/serializer/UIGrammarSemanticSequencer.java b/org.eclipse.osbp.ecview.dsl/src-gen/org/eclipse/osbp/ecview/dsl/serializer/UIGrammarSemanticSequencer.java
index 678e3b3..a6d9863 100644
--- a/org.eclipse.osbp.ecview.dsl/src-gen/org/eclipse/osbp/ecview/dsl/serializer/UIGrammarSemanticSequencer.java
+++ b/org.eclipse.osbp.ecview.dsl/src-gen/org/eclipse/osbp/ecview/dsl/serializer/UIGrammarSemanticSequencer.java
@@ -1394,8 +1394,8 @@
 	 * Constraint:
 	 *     (
 	 *         name=ID 
-	 *         viewCategory=[UxViewCategory|QualifiedName]? 
-	 *         ((sharedStateGroup=STRING | jvmType=JvmTypeReference | exposedActions+=UiExposedAction)? viewCategory=[UxViewCategory|QualifiedName]?)* 
+	 *         jvmType=JvmTypeReference? 
+	 *         ((sharedStateGroup=STRING | viewCategory=[UxViewCategory|QualifiedName] | exposedActions+=UiExposedAction)? jvmType=JvmTypeReference?)* 
 	 *         (beanSlots+=UiBeanSlot | bindingEndpointAlias+=UiBindingEndpointAlias | bindings+=UiBinding)* 
 	 *         content=UiEmbeddable 
 	 *         contentAlignment=UiAlignment? 
@@ -1962,8 +1962,8 @@
 	 *
 	 * Constraint:
 	 *     (
-	 *         noGrouping?='noGrouping'? 
-	 *         ((styles=STRING | noMarkNegative?='noMarkNegative' | i18nInfo=UiI18nInfo | readonly?='readonly')? noGrouping?='noGrouping'?)* 
+	 *         noMarkNegative?='noMarkNegative'? 
+	 *         ((noGrouping?='noGrouping' | styles=STRING | i18nInfo=UiI18nInfo | readonly?='readonly')? noMarkNegative?='noMarkNegative'?)* 
 	 *         name=TRANSLATABLEID? 
 	 *         (validators+=UiValidator | bindings+=UiBinding)* 
 	 *         processorAssignments+=UiVisibilityProcessorAssignment*
diff --git a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/dsl/extensions/OperationExtensions.java b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/dsl/extensions/OperationExtensions.java
index e3ed68c..f645b08 100644
--- a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/dsl/extensions/OperationExtensions.java
+++ b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/dsl/extensions/OperationExtensions.java
@@ -27,6 +27,7 @@
 import org.eclipse.osbp.runtime.common.annotations.CreateAt;
 import org.eclipse.osbp.runtime.common.annotations.CreateBy;
 import org.eclipse.osbp.runtime.common.annotations.Dirty;
+import org.eclipse.osbp.runtime.common.annotations.ExtraStyle;
 import org.eclipse.osbp.runtime.common.annotations.Hidden;
 import org.eclipse.osbp.runtime.common.annotations.Id;
 import org.eclipse.osbp.runtime.common.annotations.ReadOnly;
@@ -389,15 +390,22 @@
 			return hasAnnotation(UIGroup.class);
 		}
 		
-		public String getGroupMemberName() {
+		/**
+		 * Gets the annotation value at the indexed position.
+		 *
+		 * @param clz the clz
+		 * @param index the index
+		 * @return the annotation value
+		 */
+		public String getAnnotationValue(Class<?> clz, int index) {
 			if (field == null) {
 				return null;
 			}
 			for (JvmAnnotationReference annotation : field.getAnnotations()) {
-				if (annotation.getAnnotation().getQualifiedName().equals(UIGroup.class.getName())) {
+				if (annotation.getAnnotation().getQualifiedName().equals(clz.getName())) {
 					for(JvmAnnotationValue value : annotation.getValues()) {
 						if(value instanceof JvmStringAnnotationValue) {
-							return ((JvmStringAnnotationValue)value).getValues().get(0);
+							return ((JvmStringAnnotationValue)value).getValues().get(index);
 						}
 					}
 				}
@@ -405,6 +413,10 @@
 			return null;
 		}
 		
+		public boolean hasExtraStyle() {
+			return hasAnnotation(ExtraStyle.class);
+		}
+		
 		public boolean asGrid() {
 			return hasAnnotation(AsGrid.class);
 		}
diff --git a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/UiLayout.java b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/UiLayout.java
index c7e5666..fdcc13a 100644
--- a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/UiLayout.java
+++ b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/UiLayout.java
@@ -26,6 +26,7 @@
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.UiLayout#isAutowire <em>Autowire</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.UiLayout#getAutoWireSource <em>Auto Wire Source</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.UiLayout#getNumberColumns <em>Number Columns</em>}</li>
+ *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.UiLayout#isSaveAndNew <em>Save And New</em>}</li>
  * </ul>
  *
  * @see org.eclipse.osbp.ecview.semantic.uimodel.UiModelPackage#getUiLayout()
@@ -111,4 +112,30 @@
 	 * @generated
 	 */
 	void setNumberColumns(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Save And New</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Save And New</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Save And New</em>' attribute.
+	 * @see #setSaveAndNew(boolean)
+	 * @see org.eclipse.osbp.ecview.semantic.uimodel.UiModelPackage#getUiLayout_SaveAndNew()
+	 * @model
+	 * @generated
+	 */
+	boolean isSaveAndNew();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.osbp.ecview.semantic.uimodel.UiLayout#isSaveAndNew <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Save And New</em>' attribute.
+	 * @see #isSaveAndNew()
+	 * @generated
+	 */
+	void setSaveAndNew(boolean value);
 } // UiLayout
diff --git a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/UiModelPackage.java b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/UiModelPackage.java
index 7b30127..a2c81e3 100644
--- a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/UiModelPackage.java
+++ b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/UiModelPackage.java
@@ -2847,13 +2847,22 @@
 	int UI_LAYOUT__NUMBER_COLUMNS = UI_EMBEDDABLE_FEATURE_COUNT + 2;
 
 	/**
+	 * The feature id for the '<em><b>Save And New</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UI_LAYOUT__SAVE_AND_NEW = UI_EMBEDDABLE_FEATURE_COUNT + 3;
+
+	/**
 	 * The number of structural features of the '<em>Ui Layout</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int UI_LAYOUT_FEATURE_COUNT = UI_EMBEDDABLE_FEATURE_COUNT + 3;
+	int UI_LAYOUT_FEATURE_COUNT = UI_EMBEDDABLE_FEATURE_COUNT + 4;
 
 	/**
 	 * The feature id for the '<em><b>Processor Assignments</b></em>' containment reference list.
@@ -3126,13 +3135,22 @@
 	int UI_MOBILE_LAYOUT__NUMBER_COLUMNS = UI_MOBILE_EMBEDDABLE_FEATURE_COUNT + 2;
 
 	/**
+	 * The feature id for the '<em><b>Save And New</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UI_MOBILE_LAYOUT__SAVE_AND_NEW = UI_MOBILE_EMBEDDABLE_FEATURE_COUNT + 3;
+
+	/**
 	 * The number of structural features of the '<em>Ui Mobile Layout</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int UI_MOBILE_LAYOUT_FEATURE_COUNT = UI_MOBILE_EMBEDDABLE_FEATURE_COUNT + 3;
+	int UI_MOBILE_LAYOUT_FEATURE_COUNT = UI_MOBILE_EMBEDDABLE_FEATURE_COUNT + 4;
 
 	/**
 	 * The feature id for the '<em><b>Processor Assignments</b></em>' containment reference list.
@@ -3378,6 +3396,15 @@
 	int UI_GRID_LAYOUT__NUMBER_COLUMNS = UI_LAYOUT__NUMBER_COLUMNS;
 
 	/**
+	 * The feature id for the '<em><b>Save And New</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UI_GRID_LAYOUT__SAVE_AND_NEW = UI_LAYOUT__SAVE_AND_NEW;
+
+	/**
 	 * The feature id for the '<em><b>Contents</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -3549,6 +3576,15 @@
 	int UI_HORIZONTAL_LAYOUT__NUMBER_COLUMNS = UI_LAYOUT__NUMBER_COLUMNS;
 
 	/**
+	 * The feature id for the '<em><b>Save And New</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UI_HORIZONTAL_LAYOUT__SAVE_AND_NEW = UI_LAYOUT__SAVE_AND_NEW;
+
+	/**
 	 * The feature id for the '<em><b>Contents</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -3711,6 +3747,15 @@
 	int UI_VERTICAL_LAYOUT__NUMBER_COLUMNS = UI_LAYOUT__NUMBER_COLUMNS;
 
 	/**
+	 * The feature id for the '<em><b>Save And New</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UI_VERTICAL_LAYOUT__SAVE_AND_NEW = UI_LAYOUT__SAVE_AND_NEW;
+
+	/**
 	 * The feature id for the '<em><b>Contents</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -3864,6 +3909,15 @@
 	int UI_FORM_LAYOUT__NUMBER_COLUMNS = UI_LAYOUT__NUMBER_COLUMNS;
 
 	/**
+	 * The feature id for the '<em><b>Save And New</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UI_FORM_LAYOUT__SAVE_AND_NEW = UI_LAYOUT__SAVE_AND_NEW;
+
+	/**
 	 * The feature id for the '<em><b>Contents</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -3991,6 +4045,15 @@
 	int UI_SEARCH_PANEL__NUMBER_COLUMNS = UI_LAYOUT__NUMBER_COLUMNS;
 
 	/**
+	 * The feature id for the '<em><b>Save And New</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UI_SEARCH_PANEL__SAVE_AND_NEW = UI_LAYOUT__SAVE_AND_NEW;
+
+	/**
 	 * The feature id for the '<em><b>Jvm Type</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -6628,6 +6691,15 @@
 	int UI_HORIZONTAL_BUTTON_GROUP__NUMBER_COLUMNS = UI_MOBILE_LAYOUT__NUMBER_COLUMNS;
 
 	/**
+	 * The feature id for the '<em><b>Save And New</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UI_HORIZONTAL_BUTTON_GROUP__SAVE_AND_NEW = UI_MOBILE_LAYOUT__SAVE_AND_NEW;
+
+	/**
 	 * The feature id for the '<em><b>Contents</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -6992,6 +7064,15 @@
 	int UI_VERTICAL_COMPONENT_GROUP__NUMBER_COLUMNS = UI_MOBILE_LAYOUT__NUMBER_COLUMNS;
 
 	/**
+	 * The feature id for the '<em><b>Save And New</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UI_VERTICAL_COMPONENT_GROUP__SAVE_AND_NEW = UI_MOBILE_LAYOUT__SAVE_AND_NEW;
+
+	/**
 	 * The feature id for the '<em><b>Contents</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -7493,6 +7574,15 @@
 	int UI_MOBILE_NAVIGATION_PAGE__NUMBER_COLUMNS = UI_MOBILE_LAYOUT__NUMBER_COLUMNS;
 
 	/**
+	 * The feature id for the '<em><b>Save And New</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UI_MOBILE_NAVIGATION_PAGE__SAVE_AND_NEW = UI_MOBILE_LAYOUT__SAVE_AND_NEW;
+
+	/**
 	 * The feature id for the '<em><b>Jvm Type</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -9178,6 +9268,15 @@
 	int UI_SPLITPANEL__NUMBER_COLUMNS = UI_LAYOUT__NUMBER_COLUMNS;
 
 	/**
+	 * The feature id for the '<em><b>Save And New</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UI_SPLITPANEL__SAVE_AND_NEW = UI_LAYOUT__SAVE_AND_NEW;
+
+	/**
 	 * The feature id for the '<em><b>First Content</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -9332,6 +9431,15 @@
 	int UI_PANEL__NUMBER_COLUMNS = UI_LAYOUT__NUMBER_COLUMNS;
 
 	/**
+	 * The feature id for the '<em><b>Save And New</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UI_PANEL__SAVE_AND_NEW = UI_LAYOUT__SAVE_AND_NEW;
+
+	/**
 	 * The feature id for the '<em><b>Content</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -9542,6 +9650,15 @@
 	int UI_MOBILE_SEARCH_PANEL__NUMBER_COLUMNS = UI_MOBILE_LAYOUT__NUMBER_COLUMNS;
 
 	/**
+	 * The feature id for the '<em><b>Save And New</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UI_MOBILE_SEARCH_PANEL__SAVE_AND_NEW = UI_MOBILE_LAYOUT__SAVE_AND_NEW;
+
+	/**
 	 * The feature id for the '<em><b>Jvm Type</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -9678,6 +9795,15 @@
 	int UI_MOBILE_NAVIGATION_ROOT__NUMBER_COLUMNS = UI_MOBILE_LAYOUT__NUMBER_COLUMNS;
 
 	/**
+	 * The feature id for the '<em><b>Save And New</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UI_MOBILE_NAVIGATION_ROOT__SAVE_AND_NEW = UI_MOBILE_LAYOUT__SAVE_AND_NEW;
+
+	/**
 	 * The feature id for the '<em><b>Contents</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -12019,6 +12145,17 @@
 	EAttribute getUiLayout_NumberColumns();
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.osbp.ecview.semantic.uimodel.UiLayout#isSaveAndNew <em>Save And New</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Save And New</em>'.
+	 * @see org.eclipse.osbp.ecview.semantic.uimodel.UiLayout#isSaveAndNew()
+	 * @see #getUiLayout()
+	 * @generated
+	 */
+	EAttribute getUiLayout_SaveAndNew();
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.osbp.ecview.semantic.uimodel.UiLayoutAssignment <em>Ui Layout Assignment</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -15571,6 +15708,14 @@
 		EAttribute UI_LAYOUT__NUMBER_COLUMNS = eINSTANCE.getUiLayout_NumberColumns();
 
 		/**
+		 * The meta object literal for the '<em><b>Save And New</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute UI_LAYOUT__SAVE_AND_NEW = eINSTANCE.getUiLayout_SaveAndNew();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.osbp.ecview.semantic.uimodel.UiLayoutAssignment <em>Ui Layout Assignment</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiFormLayoutImpl.java b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiFormLayoutImpl.java
index 19ebdc3..64dfb43 100644
--- a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiFormLayoutImpl.java
+++ b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiFormLayoutImpl.java
@@ -49,6 +49,7 @@
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiFormLayoutImpl#isAutowire <em>Autowire</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiFormLayoutImpl#getAutoWireSource <em>Auto Wire Source</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiFormLayoutImpl#getNumberColumns <em>Number Columns</em>}</li>
+ *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiFormLayoutImpl#isSaveAndNew <em>Save And New</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiFormLayoutImpl#getContents <em>Contents</em>}</li>
  * </ul>
  *
@@ -226,6 +227,26 @@
 	protected int numberColumns = NUMBER_COLUMNS_EDEFAULT;
 
 	/**
+	 * The default value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SAVE_AND_NEW_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean saveAndNew = SAVE_AND_NEW_EDEFAULT;
+
+	/**
 	 * The cached value of the '{@link #getContents() <em>Contents</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -484,6 +505,27 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public boolean isSaveAndNew() {
+		return saveAndNew;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSaveAndNew(boolean newSaveAndNew) {
+		boolean oldSaveAndNew = saveAndNew;
+		saveAndNew = newSaveAndNew;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, UiModelPackage.UI_FORM_LAYOUT__SAVE_AND_NEW, oldSaveAndNew, saveAndNew));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public UiI18nInfo getI18nInfo() {
 		if (i18nInfo != null && i18nInfo.eIsProxy()) {
 			InternalEObject oldI18nInfo = (InternalEObject)i18nInfo;
@@ -607,6 +649,8 @@
 				return basicGetAutoWireSource();
 			case UiModelPackage.UI_FORM_LAYOUT__NUMBER_COLUMNS:
 				return getNumberColumns();
+			case UiModelPackage.UI_FORM_LAYOUT__SAVE_AND_NEW:
+				return isSaveAndNew();
 			case UiModelPackage.UI_FORM_LAYOUT__CONTENTS:
 				return getContents();
 		}
@@ -653,6 +697,9 @@
 			case UiModelPackage.UI_FORM_LAYOUT__NUMBER_COLUMNS:
 				setNumberColumns((Integer)newValue);
 				return;
+			case UiModelPackage.UI_FORM_LAYOUT__SAVE_AND_NEW:
+				setSaveAndNew((Boolean)newValue);
+				return;
 			case UiModelPackage.UI_FORM_LAYOUT__CONTENTS:
 				getContents().clear();
 				getContents().addAll((Collection<? extends UiFormLayoutAssigment>)newValue);
@@ -699,6 +746,9 @@
 			case UiModelPackage.UI_FORM_LAYOUT__NUMBER_COLUMNS:
 				setNumberColumns(NUMBER_COLUMNS_EDEFAULT);
 				return;
+			case UiModelPackage.UI_FORM_LAYOUT__SAVE_AND_NEW:
+				setSaveAndNew(SAVE_AND_NEW_EDEFAULT);
+				return;
 			case UiModelPackage.UI_FORM_LAYOUT__CONTENTS:
 				getContents().clear();
 				return;
@@ -734,6 +784,8 @@
 				return autoWireSource != null;
 			case UiModelPackage.UI_FORM_LAYOUT__NUMBER_COLUMNS:
 				return numberColumns != NUMBER_COLUMNS_EDEFAULT;
+			case UiModelPackage.UI_FORM_LAYOUT__SAVE_AND_NEW:
+				return saveAndNew != SAVE_AND_NEW_EDEFAULT;
 			case UiModelPackage.UI_FORM_LAYOUT__CONTENTS:
 				return contents != null && !contents.isEmpty();
 		}
@@ -820,6 +872,8 @@
 		result.append(autowire);
 		result.append(", numberColumns: ");
 		result.append(numberColumns);
+		result.append(", saveAndNew: ");
+		result.append(saveAndNew);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiGridLayoutImpl.java b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiGridLayoutImpl.java
index b5a0d5c..aae6eee 100644
--- a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiGridLayoutImpl.java
+++ b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiGridLayoutImpl.java
@@ -49,6 +49,7 @@
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiGridLayoutImpl#isAutowire <em>Autowire</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiGridLayoutImpl#getAutoWireSource <em>Auto Wire Source</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiGridLayoutImpl#getNumberColumns <em>Number Columns</em>}</li>
+ *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiGridLayoutImpl#isSaveAndNew <em>Save And New</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiGridLayoutImpl#getContents <em>Contents</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiGridLayoutImpl#getColumns <em>Columns</em>}</li>
  * </ul>
@@ -210,6 +211,24 @@
 	 */
 	protected int numberColumns = NUMBER_COLUMNS_EDEFAULT;
 	/**
+	 * The default value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SAVE_AND_NEW_EDEFAULT = false;
+	/**
+	 * The cached value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean saveAndNew = SAVE_AND_NEW_EDEFAULT;
+	/**
 	 * The cached value of the '{@link #getContents() <em>Contents</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -486,6 +505,27 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public boolean isSaveAndNew() {
+		return saveAndNew;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSaveAndNew(boolean newSaveAndNew) {
+		boolean oldSaveAndNew = saveAndNew;
+		saveAndNew = newSaveAndNew;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, UiModelPackage.UI_GRID_LAYOUT__SAVE_AND_NEW, oldSaveAndNew, saveAndNew));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public UiI18nInfo getI18nInfo() {
 		if (i18nInfo != null && i18nInfo.eIsProxy()) {
 			InternalEObject oldI18nInfo = (InternalEObject)i18nInfo;
@@ -630,6 +670,8 @@
 				return basicGetAutoWireSource();
 			case UiModelPackage.UI_GRID_LAYOUT__NUMBER_COLUMNS:
 				return getNumberColumns();
+			case UiModelPackage.UI_GRID_LAYOUT__SAVE_AND_NEW:
+				return isSaveAndNew();
 			case UiModelPackage.UI_GRID_LAYOUT__CONTENTS:
 				return getContents();
 			case UiModelPackage.UI_GRID_LAYOUT__COLUMNS:
@@ -678,6 +720,9 @@
 			case UiModelPackage.UI_GRID_LAYOUT__NUMBER_COLUMNS:
 				setNumberColumns((Integer)newValue);
 				return;
+			case UiModelPackage.UI_GRID_LAYOUT__SAVE_AND_NEW:
+				setSaveAndNew((Boolean)newValue);
+				return;
 			case UiModelPackage.UI_GRID_LAYOUT__CONTENTS:
 				getContents().clear();
 				getContents().addAll((Collection<? extends UiGridLayoutAssigment>)newValue);
@@ -727,6 +772,9 @@
 			case UiModelPackage.UI_GRID_LAYOUT__NUMBER_COLUMNS:
 				setNumberColumns(NUMBER_COLUMNS_EDEFAULT);
 				return;
+			case UiModelPackage.UI_GRID_LAYOUT__SAVE_AND_NEW:
+				setSaveAndNew(SAVE_AND_NEW_EDEFAULT);
+				return;
 			case UiModelPackage.UI_GRID_LAYOUT__CONTENTS:
 				getContents().clear();
 				return;
@@ -765,6 +813,8 @@
 				return autoWireSource != null;
 			case UiModelPackage.UI_GRID_LAYOUT__NUMBER_COLUMNS:
 				return numberColumns != NUMBER_COLUMNS_EDEFAULT;
+			case UiModelPackage.UI_GRID_LAYOUT__SAVE_AND_NEW:
+				return saveAndNew != SAVE_AND_NEW_EDEFAULT;
 			case UiModelPackage.UI_GRID_LAYOUT__CONTENTS:
 				return contents != null && !contents.isEmpty();
 			case UiModelPackage.UI_GRID_LAYOUT__COLUMNS:
@@ -853,6 +903,8 @@
 		result.append(autowire);
 		result.append(", numberColumns: ");
 		result.append(numberColumns);
+		result.append(", saveAndNew: ");
+		result.append(saveAndNew);
 		result.append(", columns: ");
 		result.append(columns);
 		result.append(')');
diff --git a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiHorizontalButtonGroupImpl.java b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiHorizontalButtonGroupImpl.java
index 8b84814..3a5e099 100644
--- a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiHorizontalButtonGroupImpl.java
+++ b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiHorizontalButtonGroupImpl.java
@@ -50,6 +50,7 @@
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiHorizontalButtonGroupImpl#isAutowire <em>Autowire</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiHorizontalButtonGroupImpl#getAutoWireSource <em>Auto Wire Source</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiHorizontalButtonGroupImpl#getNumberColumns <em>Number Columns</em>}</li>
+ *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiHorizontalButtonGroupImpl#isSaveAndNew <em>Save And New</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiHorizontalButtonGroupImpl#getContents <em>Contents</em>}</li>
  * </ul>
  *
@@ -227,6 +228,26 @@
 	protected int numberColumns = NUMBER_COLUMNS_EDEFAULT;
 
 	/**
+	 * The default value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SAVE_AND_NEW_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean saveAndNew = SAVE_AND_NEW_EDEFAULT;
+
+	/**
 	 * The cached value of the '{@link #getContents() <em>Contents</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -485,6 +506,27 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public boolean isSaveAndNew() {
+		return saveAndNew;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSaveAndNew(boolean newSaveAndNew) {
+		boolean oldSaveAndNew = saveAndNew;
+		saveAndNew = newSaveAndNew;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__SAVE_AND_NEW, oldSaveAndNew, saveAndNew));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public UiI18nInfo getI18nInfo() {
 		if (i18nInfo != null && i18nInfo.eIsProxy()) {
 			InternalEObject oldI18nInfo = (InternalEObject)i18nInfo;
@@ -608,6 +650,8 @@
 				return basicGetAutoWireSource();
 			case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__NUMBER_COLUMNS:
 				return getNumberColumns();
+			case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__SAVE_AND_NEW:
+				return isSaveAndNew();
 			case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__CONTENTS:
 				return getContents();
 		}
@@ -654,6 +698,9 @@
 			case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__NUMBER_COLUMNS:
 				setNumberColumns((Integer)newValue);
 				return;
+			case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__SAVE_AND_NEW:
+				setSaveAndNew((Boolean)newValue);
+				return;
 			case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__CONTENTS:
 				getContents().clear();
 				getContents().addAll((Collection<? extends UiHorizontalButtonGroupAssigment>)newValue);
@@ -700,6 +747,9 @@
 			case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__NUMBER_COLUMNS:
 				setNumberColumns(NUMBER_COLUMNS_EDEFAULT);
 				return;
+			case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__SAVE_AND_NEW:
+				setSaveAndNew(SAVE_AND_NEW_EDEFAULT);
+				return;
 			case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__CONTENTS:
 				getContents().clear();
 				return;
@@ -735,6 +785,8 @@
 				return autoWireSource != null;
 			case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__NUMBER_COLUMNS:
 				return numberColumns != NUMBER_COLUMNS_EDEFAULT;
+			case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__SAVE_AND_NEW:
+				return saveAndNew != SAVE_AND_NEW_EDEFAULT;
 			case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__CONTENTS:
 				return contents != null && !contents.isEmpty();
 		}
@@ -771,6 +823,7 @@
 				case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__AUTOWIRE: return UiModelPackage.UI_LAYOUT__AUTOWIRE;
 				case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__AUTO_WIRE_SOURCE: return UiModelPackage.UI_LAYOUT__AUTO_WIRE_SOURCE;
 				case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__NUMBER_COLUMNS: return UiModelPackage.UI_LAYOUT__NUMBER_COLUMNS;
+				case UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__SAVE_AND_NEW: return UiModelPackage.UI_LAYOUT__SAVE_AND_NEW;
 				default: return -1;
 			}
 		}
@@ -807,6 +860,7 @@
 				case UiModelPackage.UI_LAYOUT__AUTOWIRE: return UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__AUTOWIRE;
 				case UiModelPackage.UI_LAYOUT__AUTO_WIRE_SOURCE: return UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__AUTO_WIRE_SOURCE;
 				case UiModelPackage.UI_LAYOUT__NUMBER_COLUMNS: return UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__NUMBER_COLUMNS;
+				case UiModelPackage.UI_LAYOUT__SAVE_AND_NEW: return UiModelPackage.UI_HORIZONTAL_BUTTON_GROUP__SAVE_AND_NEW;
 				default: return -1;
 			}
 		}
@@ -837,6 +891,8 @@
 		result.append(autowire);
 		result.append(", numberColumns: ");
 		result.append(numberColumns);
+		result.append(", saveAndNew: ");
+		result.append(saveAndNew);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiHorizontalLayoutImpl.java b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiHorizontalLayoutImpl.java
index 80f968a..fabab23 100644
--- a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiHorizontalLayoutImpl.java
+++ b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiHorizontalLayoutImpl.java
@@ -51,6 +51,7 @@
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiHorizontalLayoutImpl#isAutowire <em>Autowire</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiHorizontalLayoutImpl#getAutoWireSource <em>Auto Wire Source</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiHorizontalLayoutImpl#getNumberColumns <em>Number Columns</em>}</li>
+ *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiHorizontalLayoutImpl#isSaveAndNew <em>Save And New</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiHorizontalLayoutImpl#getContents <em>Contents</em>}</li>
  * </ul>
  *
@@ -228,6 +229,26 @@
 	protected int numberColumns = NUMBER_COLUMNS_EDEFAULT;
 
 	/**
+	 * The default value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SAVE_AND_NEW_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean saveAndNew = SAVE_AND_NEW_EDEFAULT;
+
+	/**
 	 * The cached value of the '{@link #getContents() <em>Contents</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -486,6 +507,27 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public boolean isSaveAndNew() {
+		return saveAndNew;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSaveAndNew(boolean newSaveAndNew) {
+		boolean oldSaveAndNew = saveAndNew;
+		saveAndNew = newSaveAndNew;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, UiModelPackage.UI_HORIZONTAL_LAYOUT__SAVE_AND_NEW, oldSaveAndNew, saveAndNew));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public UiI18nInfo getI18nInfo() {
 		if (i18nInfo != null && i18nInfo.eIsProxy()) {
 			InternalEObject oldI18nInfo = (InternalEObject)i18nInfo;
@@ -609,6 +651,8 @@
 				return basicGetAutoWireSource();
 			case UiModelPackage.UI_HORIZONTAL_LAYOUT__NUMBER_COLUMNS:
 				return getNumberColumns();
+			case UiModelPackage.UI_HORIZONTAL_LAYOUT__SAVE_AND_NEW:
+				return isSaveAndNew();
 			case UiModelPackage.UI_HORIZONTAL_LAYOUT__CONTENTS:
 				return getContents();
 		}
@@ -655,6 +699,9 @@
 			case UiModelPackage.UI_HORIZONTAL_LAYOUT__NUMBER_COLUMNS:
 				setNumberColumns((Integer)newValue);
 				return;
+			case UiModelPackage.UI_HORIZONTAL_LAYOUT__SAVE_AND_NEW:
+				setSaveAndNew((Boolean)newValue);
+				return;
 			case UiModelPackage.UI_HORIZONTAL_LAYOUT__CONTENTS:
 				getContents().clear();
 				getContents().addAll((Collection<? extends UiHorizontalLayoutAssigment>)newValue);
@@ -701,6 +748,9 @@
 			case UiModelPackage.UI_HORIZONTAL_LAYOUT__NUMBER_COLUMNS:
 				setNumberColumns(NUMBER_COLUMNS_EDEFAULT);
 				return;
+			case UiModelPackage.UI_HORIZONTAL_LAYOUT__SAVE_AND_NEW:
+				setSaveAndNew(SAVE_AND_NEW_EDEFAULT);
+				return;
 			case UiModelPackage.UI_HORIZONTAL_LAYOUT__CONTENTS:
 				getContents().clear();
 				return;
@@ -736,6 +786,8 @@
 				return autoWireSource != null;
 			case UiModelPackage.UI_HORIZONTAL_LAYOUT__NUMBER_COLUMNS:
 				return numberColumns != NUMBER_COLUMNS_EDEFAULT;
+			case UiModelPackage.UI_HORIZONTAL_LAYOUT__SAVE_AND_NEW:
+				return saveAndNew != SAVE_AND_NEW_EDEFAULT;
 			case UiModelPackage.UI_HORIZONTAL_LAYOUT__CONTENTS:
 				return contents != null && !contents.isEmpty();
 		}
@@ -842,6 +894,8 @@
 		result.append(autowire);
 		result.append(", numberColumns: ");
 		result.append(numberColumns);
+		result.append(", saveAndNew: ");
+		result.append(saveAndNew);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiMobileNavigationPageImpl.java b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiMobileNavigationPageImpl.java
index 4598391..5f520e1 100644
--- a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiMobileNavigationPageImpl.java
+++ b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiMobileNavigationPageImpl.java
@@ -54,6 +54,7 @@
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiMobileNavigationPageImpl#isAutowire <em>Autowire</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiMobileNavigationPageImpl#getAutoWireSource <em>Auto Wire Source</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiMobileNavigationPageImpl#getNumberColumns <em>Number Columns</em>}</li>
+ *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiMobileNavigationPageImpl#isSaveAndNew <em>Save And New</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiMobileNavigationPageImpl#getJvmType <em>Jvm Type</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiMobileNavigationPageImpl#getContents <em>Contents</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiMobileNavigationPageImpl#getBarActions <em>Bar Actions</em>}</li>
@@ -233,6 +234,26 @@
 	protected int numberColumns = NUMBER_COLUMNS_EDEFAULT;
 
 	/**
+	 * The default value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SAVE_AND_NEW_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean saveAndNew = SAVE_AND_NEW_EDEFAULT;
+
+	/**
 	 * The cached value of the '{@link #getJvmType() <em>Jvm Type</em>}' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -511,6 +532,27 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public boolean isSaveAndNew() {
+		return saveAndNew;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSaveAndNew(boolean newSaveAndNew) {
+		boolean oldSaveAndNew = saveAndNew;
+		saveAndNew = newSaveAndNew;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__SAVE_AND_NEW, oldSaveAndNew, saveAndNew));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public UiI18nInfo getI18nInfo() {
 		if (i18nInfo != null && i18nInfo.eIsProxy()) {
 			InternalEObject oldI18nInfo = (InternalEObject)i18nInfo;
@@ -716,6 +758,8 @@
 				return basicGetAutoWireSource();
 			case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__NUMBER_COLUMNS:
 				return getNumberColumns();
+			case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__SAVE_AND_NEW:
+				return isSaveAndNew();
 			case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__JVM_TYPE:
 				if (resolve) return getJvmType();
 				return basicGetJvmType();
@@ -767,6 +811,9 @@
 			case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__NUMBER_COLUMNS:
 				setNumberColumns((Integer)newValue);
 				return;
+			case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__SAVE_AND_NEW:
+				setSaveAndNew((Boolean)newValue);
+				return;
 			case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__JVM_TYPE:
 				setJvmType((JvmTypeReference)newValue);
 				return;
@@ -820,6 +867,9 @@
 			case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__NUMBER_COLUMNS:
 				setNumberColumns(NUMBER_COLUMNS_EDEFAULT);
 				return;
+			case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__SAVE_AND_NEW:
+				setSaveAndNew(SAVE_AND_NEW_EDEFAULT);
+				return;
 			case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__JVM_TYPE:
 				setJvmType((JvmTypeReference)null);
 				return;
@@ -861,6 +911,8 @@
 				return autoWireSource != null;
 			case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__NUMBER_COLUMNS:
 				return numberColumns != NUMBER_COLUMNS_EDEFAULT;
+			case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__SAVE_AND_NEW:
+				return saveAndNew != SAVE_AND_NEW_EDEFAULT;
 			case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__JVM_TYPE:
 				return jvmType != null;
 			case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__CONTENTS:
@@ -901,6 +953,7 @@
 				case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__AUTOWIRE: return UiModelPackage.UI_LAYOUT__AUTOWIRE;
 				case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__AUTO_WIRE_SOURCE: return UiModelPackage.UI_LAYOUT__AUTO_WIRE_SOURCE;
 				case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__NUMBER_COLUMNS: return UiModelPackage.UI_LAYOUT__NUMBER_COLUMNS;
+				case UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__SAVE_AND_NEW: return UiModelPackage.UI_LAYOUT__SAVE_AND_NEW;
 				default: return -1;
 			}
 		}
@@ -948,6 +1001,7 @@
 				case UiModelPackage.UI_LAYOUT__AUTOWIRE: return UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__AUTOWIRE;
 				case UiModelPackage.UI_LAYOUT__AUTO_WIRE_SOURCE: return UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__AUTO_WIRE_SOURCE;
 				case UiModelPackage.UI_LAYOUT__NUMBER_COLUMNS: return UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__NUMBER_COLUMNS;
+				case UiModelPackage.UI_LAYOUT__SAVE_AND_NEW: return UiModelPackage.UI_MOBILE_NAVIGATION_PAGE__SAVE_AND_NEW;
 				default: return -1;
 			}
 		}
@@ -989,6 +1043,8 @@
 		result.append(autowire);
 		result.append(", numberColumns: ");
 		result.append(numberColumns);
+		result.append(", saveAndNew: ");
+		result.append(saveAndNew);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiMobileNavigationRootImpl.java b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiMobileNavigationRootImpl.java
index 5fd9e34..b489c13 100644
--- a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiMobileNavigationRootImpl.java
+++ b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiMobileNavigationRootImpl.java
@@ -57,6 +57,7 @@
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiMobileNavigationRootImpl#isAutowire <em>Autowire</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiMobileNavigationRootImpl#getAutoWireSource <em>Auto Wire Source</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiMobileNavigationRootImpl#getNumberColumns <em>Number Columns</em>}</li>
+ *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiMobileNavigationRootImpl#isSaveAndNew <em>Save And New</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiMobileNavigationRootImpl#getContents <em>Contents</em>}</li>
  * </ul>
  *
@@ -234,6 +235,26 @@
 	protected int numberColumns = NUMBER_COLUMNS_EDEFAULT;
 
 	/**
+	 * The default value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SAVE_AND_NEW_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean saveAndNew = SAVE_AND_NEW_EDEFAULT;
+
+	/**
 	 * The cached value of the '{@link #getContents() <em>Contents</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -558,6 +579,27 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public boolean isSaveAndNew() {
+		return saveAndNew;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSaveAndNew(boolean newSaveAndNew) {
+		boolean oldSaveAndNew = saveAndNew;
+		saveAndNew = newSaveAndNew;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__SAVE_AND_NEW, oldSaveAndNew, saveAndNew));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public EList<UiMobileNavigationRootAssigment> getContents() {
 		if (contents == null) {
 			contents = new EObjectContainmentEList.Resolving<UiMobileNavigationRootAssigment>(UiMobileNavigationRootAssigment.class, this, UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__CONTENTS);
@@ -615,6 +657,8 @@
 				return basicGetAutoWireSource();
 			case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__NUMBER_COLUMNS:
 				return getNumberColumns();
+			case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__SAVE_AND_NEW:
+				return isSaveAndNew();
 			case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__CONTENTS:
 				return getContents();
 		}
@@ -661,6 +705,9 @@
 			case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__NUMBER_COLUMNS:
 				setNumberColumns((Integer)newValue);
 				return;
+			case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__SAVE_AND_NEW:
+				setSaveAndNew((Boolean)newValue);
+				return;
 			case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__CONTENTS:
 				getContents().clear();
 				getContents().addAll((Collection<? extends UiMobileNavigationRootAssigment>)newValue);
@@ -707,6 +754,9 @@
 			case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__NUMBER_COLUMNS:
 				setNumberColumns(NUMBER_COLUMNS_EDEFAULT);
 				return;
+			case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__SAVE_AND_NEW:
+				setSaveAndNew(SAVE_AND_NEW_EDEFAULT);
+				return;
 			case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__CONTENTS:
 				getContents().clear();
 				return;
@@ -742,6 +792,8 @@
 				return autoWireSource != null;
 			case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__NUMBER_COLUMNS:
 				return numberColumns != NUMBER_COLUMNS_EDEFAULT;
+			case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__SAVE_AND_NEW:
+				return saveAndNew != SAVE_AND_NEW_EDEFAULT;
 			case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__CONTENTS:
 				return contents != null && !contents.isEmpty();
 		}
@@ -778,6 +830,7 @@
 				case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__AUTOWIRE: return UiModelPackage.UI_LAYOUT__AUTOWIRE;
 				case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__AUTO_WIRE_SOURCE: return UiModelPackage.UI_LAYOUT__AUTO_WIRE_SOURCE;
 				case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__NUMBER_COLUMNS: return UiModelPackage.UI_LAYOUT__NUMBER_COLUMNS;
+				case UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__SAVE_AND_NEW: return UiModelPackage.UI_LAYOUT__SAVE_AND_NEW;
 				default: return -1;
 			}
 		}
@@ -819,6 +872,7 @@
 				case UiModelPackage.UI_LAYOUT__AUTOWIRE: return UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__AUTOWIRE;
 				case UiModelPackage.UI_LAYOUT__AUTO_WIRE_SOURCE: return UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__AUTO_WIRE_SOURCE;
 				case UiModelPackage.UI_LAYOUT__NUMBER_COLUMNS: return UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__NUMBER_COLUMNS;
+				case UiModelPackage.UI_LAYOUT__SAVE_AND_NEW: return UiModelPackage.UI_MOBILE_NAVIGATION_ROOT__SAVE_AND_NEW;
 				default: return -1;
 			}
 		}
@@ -854,6 +908,8 @@
 		result.append(autowire);
 		result.append(", numberColumns: ");
 		result.append(numberColumns);
+		result.append(", saveAndNew: ");
+		result.append(saveAndNew);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiMobileSearchPanelImpl.java b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiMobileSearchPanelImpl.java
index d90e349..d2ffbd6 100644
--- a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiMobileSearchPanelImpl.java
+++ b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiMobileSearchPanelImpl.java
@@ -59,6 +59,7 @@
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiMobileSearchPanelImpl#isAutowire <em>Autowire</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiMobileSearchPanelImpl#getAutoWireSource <em>Auto Wire Source</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiMobileSearchPanelImpl#getNumberColumns <em>Number Columns</em>}</li>
+ *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiMobileSearchPanelImpl#isSaveAndNew <em>Save And New</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiMobileSearchPanelImpl#getJvmType <em>Jvm Type</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiMobileSearchPanelImpl#getContents <em>Contents</em>}</li>
  * </ul>
@@ -237,6 +238,26 @@
 	protected int numberColumns = NUMBER_COLUMNS_EDEFAULT;
 
 	/**
+	 * The default value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SAVE_AND_NEW_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean saveAndNew = SAVE_AND_NEW_EDEFAULT;
+
+	/**
 	 * The cached value of the '{@link #getJvmType() <em>Jvm Type</em>}' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -571,6 +592,27 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public boolean isSaveAndNew() {
+		return saveAndNew;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSaveAndNew(boolean newSaveAndNew) {
+		boolean oldSaveAndNew = saveAndNew;
+		saveAndNew = newSaveAndNew;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, UiModelPackage.UI_MOBILE_SEARCH_PANEL__SAVE_AND_NEW, oldSaveAndNew, saveAndNew));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public JvmTypeReference getJvmType() {
 		if (jvmType != null && jvmType.eIsProxy()) {
 			InternalEObject oldJvmType = (InternalEObject)jvmType;
@@ -696,6 +738,8 @@
 				return basicGetAutoWireSource();
 			case UiModelPackage.UI_MOBILE_SEARCH_PANEL__NUMBER_COLUMNS:
 				return getNumberColumns();
+			case UiModelPackage.UI_MOBILE_SEARCH_PANEL__SAVE_AND_NEW:
+				return isSaveAndNew();
 			case UiModelPackage.UI_MOBILE_SEARCH_PANEL__JVM_TYPE:
 				if (resolve) return getJvmType();
 				return basicGetJvmType();
@@ -745,6 +789,9 @@
 			case UiModelPackage.UI_MOBILE_SEARCH_PANEL__NUMBER_COLUMNS:
 				setNumberColumns((Integer)newValue);
 				return;
+			case UiModelPackage.UI_MOBILE_SEARCH_PANEL__SAVE_AND_NEW:
+				setSaveAndNew((Boolean)newValue);
+				return;
 			case UiModelPackage.UI_MOBILE_SEARCH_PANEL__JVM_TYPE:
 				setJvmType((JvmTypeReference)newValue);
 				return;
@@ -794,6 +841,9 @@
 			case UiModelPackage.UI_MOBILE_SEARCH_PANEL__NUMBER_COLUMNS:
 				setNumberColumns(NUMBER_COLUMNS_EDEFAULT);
 				return;
+			case UiModelPackage.UI_MOBILE_SEARCH_PANEL__SAVE_AND_NEW:
+				setSaveAndNew(SAVE_AND_NEW_EDEFAULT);
+				return;
 			case UiModelPackage.UI_MOBILE_SEARCH_PANEL__JVM_TYPE:
 				setJvmType((JvmTypeReference)null);
 				return;
@@ -832,6 +882,8 @@
 				return autoWireSource != null;
 			case UiModelPackage.UI_MOBILE_SEARCH_PANEL__NUMBER_COLUMNS:
 				return numberColumns != NUMBER_COLUMNS_EDEFAULT;
+			case UiModelPackage.UI_MOBILE_SEARCH_PANEL__SAVE_AND_NEW:
+				return saveAndNew != SAVE_AND_NEW_EDEFAULT;
 			case UiModelPackage.UI_MOBILE_SEARCH_PANEL__JVM_TYPE:
 				return jvmType != null;
 			case UiModelPackage.UI_MOBILE_SEARCH_PANEL__CONTENTS:
@@ -870,6 +922,7 @@
 				case UiModelPackage.UI_MOBILE_SEARCH_PANEL__AUTOWIRE: return UiModelPackage.UI_LAYOUT__AUTOWIRE;
 				case UiModelPackage.UI_MOBILE_SEARCH_PANEL__AUTO_WIRE_SOURCE: return UiModelPackage.UI_LAYOUT__AUTO_WIRE_SOURCE;
 				case UiModelPackage.UI_MOBILE_SEARCH_PANEL__NUMBER_COLUMNS: return UiModelPackage.UI_LAYOUT__NUMBER_COLUMNS;
+				case UiModelPackage.UI_MOBILE_SEARCH_PANEL__SAVE_AND_NEW: return UiModelPackage.UI_LAYOUT__SAVE_AND_NEW;
 				default: return -1;
 			}
 		}
@@ -912,6 +965,7 @@
 				case UiModelPackage.UI_LAYOUT__AUTOWIRE: return UiModelPackage.UI_MOBILE_SEARCH_PANEL__AUTOWIRE;
 				case UiModelPackage.UI_LAYOUT__AUTO_WIRE_SOURCE: return UiModelPackage.UI_MOBILE_SEARCH_PANEL__AUTO_WIRE_SOURCE;
 				case UiModelPackage.UI_LAYOUT__NUMBER_COLUMNS: return UiModelPackage.UI_MOBILE_SEARCH_PANEL__NUMBER_COLUMNS;
+				case UiModelPackage.UI_LAYOUT__SAVE_AND_NEW: return UiModelPackage.UI_MOBILE_SEARCH_PANEL__SAVE_AND_NEW;
 				default: return -1;
 			}
 		}
@@ -948,6 +1002,8 @@
 		result.append(autowire);
 		result.append(", numberColumns: ");
 		result.append(numberColumns);
+		result.append(", saveAndNew: ");
+		result.append(saveAndNew);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiModelPackageImpl.java b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiModelPackageImpl.java
index 11f21b0..40dec03 100644
--- a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiModelPackageImpl.java
+++ b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiModelPackageImpl.java
@@ -2046,6 +2046,15 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public EAttribute getUiLayout_SaveAndNew() {
+		return (EAttribute)uiLayoutEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public EClass getUiLayoutAssignment() {
 		return uiLayoutAssignmentEClass;
 	}
@@ -4509,6 +4518,7 @@
 		createEAttribute(uiLayoutEClass, UI_LAYOUT__AUTOWIRE);
 		createEReference(uiLayoutEClass, UI_LAYOUT__AUTO_WIRE_SOURCE);
 		createEAttribute(uiLayoutEClass, UI_LAYOUT__NUMBER_COLUMNS);
+		createEAttribute(uiLayoutEClass, UI_LAYOUT__SAVE_AND_NEW);
 
 		uiLayoutAssignmentEClass = createEClass(UI_LAYOUT_ASSIGNMENT);
 
@@ -5206,6 +5216,7 @@
 		initEAttribute(getUiLayout_Autowire(), ecorePackage.getEBoolean(), "autowire", null, 0, 1, UiLayout.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getUiLayout_AutoWireSource(), this.getUiBindingExpression(), null, "autoWireSource", null, 0, 1, UiLayout.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getUiLayout_NumberColumns(), theEcorePackage.getEInt(), "numberColumns", null, 0, 1, UiLayout.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getUiLayout_SaveAndNew(), ecorePackage.getEBoolean(), "saveAndNew", null, 0, 1, UiLayout.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(uiLayoutAssignmentEClass, UiLayoutAssignment.class, "UiLayoutAssignment", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 
diff --git a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiPanelImpl.java b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiPanelImpl.java
index 26fe34e..bfec902 100644
--- a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiPanelImpl.java
+++ b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiPanelImpl.java
@@ -50,6 +50,7 @@
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiPanelImpl#isAutowire <em>Autowire</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiPanelImpl#getAutoWireSource <em>Auto Wire Source</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiPanelImpl#getNumberColumns <em>Number Columns</em>}</li>
+ *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiPanelImpl#isSaveAndNew <em>Save And New</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiPanelImpl#getContent <em>Content</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiPanelImpl#getContentAlignment <em>Content Alignment</em>}</li>
  * </ul>
@@ -228,6 +229,26 @@
 	protected int numberColumns = NUMBER_COLUMNS_EDEFAULT;
 
 	/**
+	 * The default value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SAVE_AND_NEW_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean saveAndNew = SAVE_AND_NEW_EDEFAULT;
+
+	/**
 	 * The cached value of the '{@link #getContent() <em>Content</em>}' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -572,6 +593,27 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public boolean isSaveAndNew() {
+		return saveAndNew;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSaveAndNew(boolean newSaveAndNew) {
+		boolean oldSaveAndNew = saveAndNew;
+		saveAndNew = newSaveAndNew;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, UiModelPackage.UI_PANEL__SAVE_AND_NEW, oldSaveAndNew, saveAndNew));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public UiEmbeddable getContent() {
 		if (content != null && content.eIsProxy()) {
 			InternalEObject oldContent = (InternalEObject)content;
@@ -704,6 +746,8 @@
 				return basicGetAutoWireSource();
 			case UiModelPackage.UI_PANEL__NUMBER_COLUMNS:
 				return getNumberColumns();
+			case UiModelPackage.UI_PANEL__SAVE_AND_NEW:
+				return isSaveAndNew();
 			case UiModelPackage.UI_PANEL__CONTENT:
 				if (resolve) return getContent();
 				return basicGetContent();
@@ -753,6 +797,9 @@
 			case UiModelPackage.UI_PANEL__NUMBER_COLUMNS:
 				setNumberColumns((Integer)newValue);
 				return;
+			case UiModelPackage.UI_PANEL__SAVE_AND_NEW:
+				setSaveAndNew((Boolean)newValue);
+				return;
 			case UiModelPackage.UI_PANEL__CONTENT:
 				setContent((UiEmbeddable)newValue);
 				return;
@@ -801,6 +848,9 @@
 			case UiModelPackage.UI_PANEL__NUMBER_COLUMNS:
 				setNumberColumns(NUMBER_COLUMNS_EDEFAULT);
 				return;
+			case UiModelPackage.UI_PANEL__SAVE_AND_NEW:
+				setSaveAndNew(SAVE_AND_NEW_EDEFAULT);
+				return;
 			case UiModelPackage.UI_PANEL__CONTENT:
 				setContent((UiEmbeddable)null);
 				return;
@@ -839,6 +889,8 @@
 				return autoWireSource != null;
 			case UiModelPackage.UI_PANEL__NUMBER_COLUMNS:
 				return numberColumns != NUMBER_COLUMNS_EDEFAULT;
+			case UiModelPackage.UI_PANEL__SAVE_AND_NEW:
+				return saveAndNew != SAVE_AND_NEW_EDEFAULT;
 			case UiModelPackage.UI_PANEL__CONTENT:
 				return content != null;
 			case UiModelPackage.UI_PANEL__CONTENT_ALIGNMENT:
@@ -927,6 +979,8 @@
 		result.append(autowire);
 		result.append(", numberColumns: ");
 		result.append(numberColumns);
+		result.append(", saveAndNew: ");
+		result.append(saveAndNew);
 		result.append(", contentAlignment: ");
 		result.append(contentAlignment);
 		result.append(')');
diff --git a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiSearchPanelImpl.java b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiSearchPanelImpl.java
index 23dd205..939e9e8 100644
--- a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiSearchPanelImpl.java
+++ b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiSearchPanelImpl.java
@@ -51,6 +51,7 @@
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiSearchPanelImpl#isAutowire <em>Autowire</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiSearchPanelImpl#getAutoWireSource <em>Auto Wire Source</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiSearchPanelImpl#getNumberColumns <em>Number Columns</em>}</li>
+ *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiSearchPanelImpl#isSaveAndNew <em>Save And New</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiSearchPanelImpl#getJvmType <em>Jvm Type</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiSearchPanelImpl#getContents <em>Contents</em>}</li>
  * </ul>
@@ -229,6 +230,26 @@
 	protected int numberColumns = NUMBER_COLUMNS_EDEFAULT;
 
 	/**
+	 * The default value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SAVE_AND_NEW_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean saveAndNew = SAVE_AND_NEW_EDEFAULT;
+
+	/**
 	 * The cached value of the '{@link #getJvmType() <em>Jvm Type</em>}' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -563,6 +584,27 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public boolean isSaveAndNew() {
+		return saveAndNew;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSaveAndNew(boolean newSaveAndNew) {
+		boolean oldSaveAndNew = saveAndNew;
+		saveAndNew = newSaveAndNew;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, UiModelPackage.UI_SEARCH_PANEL__SAVE_AND_NEW, oldSaveAndNew, saveAndNew));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public JvmTypeReference getJvmType() {
 		if (jvmType != null && jvmType.eIsProxy()) {
 			InternalEObject oldJvmType = (InternalEObject)jvmType;
@@ -688,6 +730,8 @@
 				return basicGetAutoWireSource();
 			case UiModelPackage.UI_SEARCH_PANEL__NUMBER_COLUMNS:
 				return getNumberColumns();
+			case UiModelPackage.UI_SEARCH_PANEL__SAVE_AND_NEW:
+				return isSaveAndNew();
 			case UiModelPackage.UI_SEARCH_PANEL__JVM_TYPE:
 				if (resolve) return getJvmType();
 				return basicGetJvmType();
@@ -737,6 +781,9 @@
 			case UiModelPackage.UI_SEARCH_PANEL__NUMBER_COLUMNS:
 				setNumberColumns((Integer)newValue);
 				return;
+			case UiModelPackage.UI_SEARCH_PANEL__SAVE_AND_NEW:
+				setSaveAndNew((Boolean)newValue);
+				return;
 			case UiModelPackage.UI_SEARCH_PANEL__JVM_TYPE:
 				setJvmType((JvmTypeReference)newValue);
 				return;
@@ -786,6 +833,9 @@
 			case UiModelPackage.UI_SEARCH_PANEL__NUMBER_COLUMNS:
 				setNumberColumns(NUMBER_COLUMNS_EDEFAULT);
 				return;
+			case UiModelPackage.UI_SEARCH_PANEL__SAVE_AND_NEW:
+				setSaveAndNew(SAVE_AND_NEW_EDEFAULT);
+				return;
 			case UiModelPackage.UI_SEARCH_PANEL__JVM_TYPE:
 				setJvmType((JvmTypeReference)null);
 				return;
@@ -824,6 +874,8 @@
 				return autoWireSource != null;
 			case UiModelPackage.UI_SEARCH_PANEL__NUMBER_COLUMNS:
 				return numberColumns != NUMBER_COLUMNS_EDEFAULT;
+			case UiModelPackage.UI_SEARCH_PANEL__SAVE_AND_NEW:
+				return saveAndNew != SAVE_AND_NEW_EDEFAULT;
 			case UiModelPackage.UI_SEARCH_PANEL__JVM_TYPE:
 				return jvmType != null;
 			case UiModelPackage.UI_SEARCH_PANEL__CONTENTS:
@@ -924,6 +976,8 @@
 		result.append(autowire);
 		result.append(", numberColumns: ");
 		result.append(numberColumns);
+		result.append(", saveAndNew: ");
+		result.append(saveAndNew);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiSplitpanelImpl.java b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiSplitpanelImpl.java
index 47e1827..7d8ebcf 100644
--- a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiSplitpanelImpl.java
+++ b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiSplitpanelImpl.java
@@ -49,6 +49,7 @@
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiSplitpanelImpl#isAutowire <em>Autowire</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiSplitpanelImpl#getAutoWireSource <em>Auto Wire Source</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiSplitpanelImpl#getNumberColumns <em>Number Columns</em>}</li>
+ *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiSplitpanelImpl#isSaveAndNew <em>Save And New</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiSplitpanelImpl#getFirstContent <em>First Content</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiSplitpanelImpl#getSecondContent <em>Second Content</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiSplitpanelImpl#getSplitPosition <em>Split Position</em>}</li>
@@ -229,6 +230,26 @@
 	protected int numberColumns = NUMBER_COLUMNS_EDEFAULT;
 
 	/**
+	 * The default value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SAVE_AND_NEW_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean saveAndNew = SAVE_AND_NEW_EDEFAULT;
+
+	/**
 	 * The cached value of the '{@link #getFirstContent() <em>First Content</em>}' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -603,6 +624,27 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public boolean isSaveAndNew() {
+		return saveAndNew;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSaveAndNew(boolean newSaveAndNew) {
+		boolean oldSaveAndNew = saveAndNew;
+		saveAndNew = newSaveAndNew;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, UiModelPackage.UI_SPLITPANEL__SAVE_AND_NEW, oldSaveAndNew, saveAndNew));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public UiSplitpanelAssigment getFirstContent() {
 		if (firstContent != null && firstContent.eIsProxy()) {
 			InternalEObject oldFirstContent = (InternalEObject)firstContent;
@@ -824,6 +866,8 @@
 				return basicGetAutoWireSource();
 			case UiModelPackage.UI_SPLITPANEL__NUMBER_COLUMNS:
 				return getNumberColumns();
+			case UiModelPackage.UI_SPLITPANEL__SAVE_AND_NEW:
+				return isSaveAndNew();
 			case UiModelPackage.UI_SPLITPANEL__FIRST_CONTENT:
 				if (resolve) return getFirstContent();
 				return basicGetFirstContent();
@@ -878,6 +922,9 @@
 			case UiModelPackage.UI_SPLITPANEL__NUMBER_COLUMNS:
 				setNumberColumns((Integer)newValue);
 				return;
+			case UiModelPackage.UI_SPLITPANEL__SAVE_AND_NEW:
+				setSaveAndNew((Boolean)newValue);
+				return;
 			case UiModelPackage.UI_SPLITPANEL__FIRST_CONTENT:
 				setFirstContent((UiSplitpanelAssigment)newValue);
 				return;
@@ -932,6 +979,9 @@
 			case UiModelPackage.UI_SPLITPANEL__NUMBER_COLUMNS:
 				setNumberColumns(NUMBER_COLUMNS_EDEFAULT);
 				return;
+			case UiModelPackage.UI_SPLITPANEL__SAVE_AND_NEW:
+				setSaveAndNew(SAVE_AND_NEW_EDEFAULT);
+				return;
 			case UiModelPackage.UI_SPLITPANEL__FIRST_CONTENT:
 				setFirstContent((UiSplitpanelAssigment)null);
 				return;
@@ -976,6 +1026,8 @@
 				return autoWireSource != null;
 			case UiModelPackage.UI_SPLITPANEL__NUMBER_COLUMNS:
 				return numberColumns != NUMBER_COLUMNS_EDEFAULT;
+			case UiModelPackage.UI_SPLITPANEL__SAVE_AND_NEW:
+				return saveAndNew != SAVE_AND_NEW_EDEFAULT;
 			case UiModelPackage.UI_SPLITPANEL__FIRST_CONTENT:
 				return firstContent != null;
 			case UiModelPackage.UI_SPLITPANEL__SECOND_CONTENT:
@@ -1068,6 +1120,8 @@
 		result.append(autowire);
 		result.append(", numberColumns: ");
 		result.append(numberColumns);
+		result.append(", saveAndNew: ");
+		result.append(saveAndNew);
 		result.append(", splitPosition: ");
 		result.append(splitPosition);
 		result.append(", horizontal: ");
diff --git a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiVerticalComponentGroupImpl.java b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiVerticalComponentGroupImpl.java
index d99dc72..5d3e48b 100644
--- a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiVerticalComponentGroupImpl.java
+++ b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiVerticalComponentGroupImpl.java
@@ -50,6 +50,7 @@
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiVerticalComponentGroupImpl#isAutowire <em>Autowire</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiVerticalComponentGroupImpl#getAutoWireSource <em>Auto Wire Source</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiVerticalComponentGroupImpl#getNumberColumns <em>Number Columns</em>}</li>
+ *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiVerticalComponentGroupImpl#isSaveAndNew <em>Save And New</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiVerticalComponentGroupImpl#getContents <em>Contents</em>}</li>
  * </ul>
  *
@@ -227,6 +228,26 @@
 	protected int numberColumns = NUMBER_COLUMNS_EDEFAULT;
 
 	/**
+	 * The default value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SAVE_AND_NEW_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean saveAndNew = SAVE_AND_NEW_EDEFAULT;
+
+	/**
 	 * The cached value of the '{@link #getContents() <em>Contents</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -485,6 +506,27 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public boolean isSaveAndNew() {
+		return saveAndNew;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSaveAndNew(boolean newSaveAndNew) {
+		boolean oldSaveAndNew = saveAndNew;
+		saveAndNew = newSaveAndNew;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__SAVE_AND_NEW, oldSaveAndNew, saveAndNew));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public UiI18nInfo getI18nInfo() {
 		if (i18nInfo != null && i18nInfo.eIsProxy()) {
 			InternalEObject oldI18nInfo = (InternalEObject)i18nInfo;
@@ -608,6 +650,8 @@
 				return basicGetAutoWireSource();
 			case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__NUMBER_COLUMNS:
 				return getNumberColumns();
+			case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__SAVE_AND_NEW:
+				return isSaveAndNew();
 			case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__CONTENTS:
 				return getContents();
 		}
@@ -654,6 +698,9 @@
 			case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__NUMBER_COLUMNS:
 				setNumberColumns((Integer)newValue);
 				return;
+			case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__SAVE_AND_NEW:
+				setSaveAndNew((Boolean)newValue);
+				return;
 			case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__CONTENTS:
 				getContents().clear();
 				getContents().addAll((Collection<? extends UiVerticalComponentGroupAssigment>)newValue);
@@ -700,6 +747,9 @@
 			case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__NUMBER_COLUMNS:
 				setNumberColumns(NUMBER_COLUMNS_EDEFAULT);
 				return;
+			case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__SAVE_AND_NEW:
+				setSaveAndNew(SAVE_AND_NEW_EDEFAULT);
+				return;
 			case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__CONTENTS:
 				getContents().clear();
 				return;
@@ -735,6 +785,8 @@
 				return autoWireSource != null;
 			case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__NUMBER_COLUMNS:
 				return numberColumns != NUMBER_COLUMNS_EDEFAULT;
+			case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__SAVE_AND_NEW:
+				return saveAndNew != SAVE_AND_NEW_EDEFAULT;
 			case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__CONTENTS:
 				return contents != null && !contents.isEmpty();
 		}
@@ -771,6 +823,7 @@
 				case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__AUTOWIRE: return UiModelPackage.UI_LAYOUT__AUTOWIRE;
 				case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__AUTO_WIRE_SOURCE: return UiModelPackage.UI_LAYOUT__AUTO_WIRE_SOURCE;
 				case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__NUMBER_COLUMNS: return UiModelPackage.UI_LAYOUT__NUMBER_COLUMNS;
+				case UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__SAVE_AND_NEW: return UiModelPackage.UI_LAYOUT__SAVE_AND_NEW;
 				default: return -1;
 			}
 		}
@@ -807,6 +860,7 @@
 				case UiModelPackage.UI_LAYOUT__AUTOWIRE: return UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__AUTOWIRE;
 				case UiModelPackage.UI_LAYOUT__AUTO_WIRE_SOURCE: return UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__AUTO_WIRE_SOURCE;
 				case UiModelPackage.UI_LAYOUT__NUMBER_COLUMNS: return UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__NUMBER_COLUMNS;
+				case UiModelPackage.UI_LAYOUT__SAVE_AND_NEW: return UiModelPackage.UI_VERTICAL_COMPONENT_GROUP__SAVE_AND_NEW;
 				default: return -1;
 			}
 		}
@@ -837,6 +891,8 @@
 		result.append(autowire);
 		result.append(", numberColumns: ");
 		result.append(numberColumns);
+		result.append(", saveAndNew: ");
+		result.append(saveAndNew);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiVerticalLayoutImpl.java b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiVerticalLayoutImpl.java
index 4592b31..a65ecc4 100644
--- a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiVerticalLayoutImpl.java
+++ b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/semantic/uimodel/impl/UiVerticalLayoutImpl.java
@@ -51,6 +51,7 @@
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiVerticalLayoutImpl#isAutowire <em>Autowire</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiVerticalLayoutImpl#getAutoWireSource <em>Auto Wire Source</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiVerticalLayoutImpl#getNumberColumns <em>Number Columns</em>}</li>
+ *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiVerticalLayoutImpl#isSaveAndNew <em>Save And New</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.semantic.uimodel.impl.UiVerticalLayoutImpl#getContents <em>Contents</em>}</li>
  * </ul>
  *
@@ -228,6 +229,26 @@
 	protected int numberColumns = NUMBER_COLUMNS_EDEFAULT;
 
 	/**
+	 * The default value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SAVE_AND_NEW_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isSaveAndNew() <em>Save And New</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSaveAndNew()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean saveAndNew = SAVE_AND_NEW_EDEFAULT;
+
+	/**
 	 * The cached value of the '{@link #getContents() <em>Contents</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -486,6 +507,27 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public boolean isSaveAndNew() {
+		return saveAndNew;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSaveAndNew(boolean newSaveAndNew) {
+		boolean oldSaveAndNew = saveAndNew;
+		saveAndNew = newSaveAndNew;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, UiModelPackage.UI_VERTICAL_LAYOUT__SAVE_AND_NEW, oldSaveAndNew, saveAndNew));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public UiI18nInfo getI18nInfo() {
 		if (i18nInfo != null && i18nInfo.eIsProxy()) {
 			InternalEObject oldI18nInfo = (InternalEObject)i18nInfo;
@@ -609,6 +651,8 @@
 				return basicGetAutoWireSource();
 			case UiModelPackage.UI_VERTICAL_LAYOUT__NUMBER_COLUMNS:
 				return getNumberColumns();
+			case UiModelPackage.UI_VERTICAL_LAYOUT__SAVE_AND_NEW:
+				return isSaveAndNew();
 			case UiModelPackage.UI_VERTICAL_LAYOUT__CONTENTS:
 				return getContents();
 		}
@@ -655,6 +699,9 @@
 			case UiModelPackage.UI_VERTICAL_LAYOUT__NUMBER_COLUMNS:
 				setNumberColumns((Integer)newValue);
 				return;
+			case UiModelPackage.UI_VERTICAL_LAYOUT__SAVE_AND_NEW:
+				setSaveAndNew((Boolean)newValue);
+				return;
 			case UiModelPackage.UI_VERTICAL_LAYOUT__CONTENTS:
 				getContents().clear();
 				getContents().addAll((Collection<? extends UiVerticalLayoutAssigment>)newValue);
@@ -701,6 +748,9 @@
 			case UiModelPackage.UI_VERTICAL_LAYOUT__NUMBER_COLUMNS:
 				setNumberColumns(NUMBER_COLUMNS_EDEFAULT);
 				return;
+			case UiModelPackage.UI_VERTICAL_LAYOUT__SAVE_AND_NEW:
+				setSaveAndNew(SAVE_AND_NEW_EDEFAULT);
+				return;
 			case UiModelPackage.UI_VERTICAL_LAYOUT__CONTENTS:
 				getContents().clear();
 				return;
@@ -736,6 +786,8 @@
 				return autoWireSource != null;
 			case UiModelPackage.UI_VERTICAL_LAYOUT__NUMBER_COLUMNS:
 				return numberColumns != NUMBER_COLUMNS_EDEFAULT;
+			case UiModelPackage.UI_VERTICAL_LAYOUT__SAVE_AND_NEW:
+				return saveAndNew != SAVE_AND_NEW_EDEFAULT;
 			case UiModelPackage.UI_VERTICAL_LAYOUT__CONTENTS:
 				return contents != null && !contents.isEmpty();
 		}
@@ -842,6 +894,8 @@
 		result.append(autowire);
 		result.append(", numberColumns: ");
 		result.append(numberColumns);
+		result.append(", saveAndNew: ");
+		result.append(saveAndNew);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/org.eclipse.osbp.ecview.feature.ide/feature.xml b/org.eclipse.osbp.ecview.feature.ide/feature.xml
index dbd496c..375ad21 100644
--- a/org.eclipse.osbp.ecview.feature.ide/feature.xml
+++ b/org.eclipse.osbp.ecview.feature.ide/feature.xml
@@ -18,7 +18,7 @@
 		label="%featureName" 
 		version="0.9.0.qualifier" 
 		provider-name="%providerName"
-		plugin="org.eclipse.osbp.ecview.dsl.ide">
+		plugin="org.eclipse.osbp.license">
         
     <description>
         %description
diff --git a/org.eclipse.osbp.ecview.feature.jetty/feature.xml b/org.eclipse.osbp.ecview.feature.jetty/feature.xml
index 2dd7286..dbf71da 100644
--- a/org.eclipse.osbp.ecview.feature.jetty/feature.xml
+++ b/org.eclipse.osbp.ecview.feature.jetty/feature.xml
@@ -18,7 +18,7 @@
 	label="%featureName" 
 	version="0.9.0.qualifier" 
 	provider-name="%providerName"
-	plugin="org.eclipse.osbp.ecview.jetty.manager">
+	plugin="org.eclipse.osbp.license">
         
     <description>
         %description
diff --git a/org.eclipse.osbp.ecview.feature.runtime/feature.xml b/org.eclipse.osbp.ecview.feature.runtime/feature.xml
index d5ec1cf..d74eff8 100644
--- a/org.eclipse.osbp.ecview.feature.runtime/feature.xml
+++ b/org.eclipse.osbp.ecview.feature.runtime/feature.xml
@@ -17,7 +17,7 @@
         label="%featureName"
         version="0.9.0.qualifier"
         provider-name="%providerName"
-		plugin="org.eclipse.osbp.ecview.dsl">
+		plugin="org.eclipse.osbp.license">
         
     <description>
         %description
diff --git a/org.eclipse.osbp.ecview.feature.runtimeonly/feature.xml b/org.eclipse.osbp.ecview.feature.runtimeonly/feature.xml
index e265972..eea47b3 100644
--- a/org.eclipse.osbp.ecview.feature.runtimeonly/feature.xml
+++ b/org.eclipse.osbp.ecview.feature.runtimeonly/feature.xml
@@ -4,7 +4,7 @@
 		label="%featureName" 
 		version="0.9.0.qualifier" 
 		provider-name="%providerName"
-		plugin="org.eclipse.osbp.ecview.xtext.builder.participant">
+		plugin="org.eclipse.osbp.license">
         
     <description>
         %description
diff --git a/org.eclipse.osbp.ecview.uisemantics/src-gen/org/eclipse/osbp/ecview/uisemantics/parser/antlr/internal/InternalUISemanticsGrammarLexer.java b/org.eclipse.osbp.ecview.uisemantics/src-gen/org/eclipse/osbp/ecview/uisemantics/parser/antlr/internal/InternalUISemanticsGrammarLexer.java
index 3a23232..7d74327 100644
--- a/org.eclipse.osbp.ecview.uisemantics/src-gen/org/eclipse/osbp/ecview/uisemantics/parser/antlr/internal/InternalUISemanticsGrammarLexer.java
+++ b/org.eclipse.osbp.ecview.uisemantics/src-gen/org/eclipse/osbp/ecview/uisemantics/parser/antlr/internal/InternalUISemanticsGrammarLexer.java
@@ -4030,4 +4030,4 @@
     }
  
 
-}
\ No newline at end of file
+}
