catch up with branch daily

Signed-off-by: Ralf Mollik <ramollik@compex-commerce.com>
diff --git a/org.eclipse.osbp.ecview.extension.editparts.emf/src/org/eclipse/osbp/ecview/extension/editparts/emf/visibility/AuthorizationVisibilityProcessor.java b/org.eclipse.osbp.ecview.extension.editparts.emf/src/org/eclipse/osbp/ecview/extension/editparts/emf/visibility/AuthorizationVisibilityProcessor.java
index 937ed9c..b35add9 100644
--- a/org.eclipse.osbp.ecview.extension.editparts.emf/src/org/eclipse/osbp/ecview/extension/editparts/emf/visibility/AuthorizationVisibilityProcessor.java
+++ b/org.eclipse.osbp.ecview.extension.editparts.emf/src/org/eclipse/osbp/ecview/extension/editparts/emf/visibility/AuthorizationVisibilityProcessor.java
@@ -41,8 +41,7 @@
 /**
  * The Class AuthorizationVisibilityProcessor.
  */
-public class AuthorizationVisibilityProcessor implements IVisibilityProcessor,
-		ILifecycleHandler {
+public class AuthorizationVisibilityProcessor implements IVisibilityProcessor, ILifecycleHandler {
 
 	/** The handlers. */
 	private Set<Handler> handlers = new HashSet<>();
@@ -80,8 +79,7 @@
 				handlers.add(new Handler(manager, target));
 			}
 		}
-		lifecycleService = context
-				.getService(ILifecycleService.class.getName());
+		lifecycleService = context.getService(ILifecycleService.class.getName());
 		lifecycleService.addHandler(this);
 
 		/*
@@ -101,8 +99,7 @@
 	 * @param yVP
 	 *            the y vp
 	 */
-	public void setup(IViewContext context,
-			YAuthorizationVisibilityProcessor yVP) {
+	public void setup(IViewContext context, YAuthorizationVisibilityProcessor yVP) {
 
 		yView = (YView) context.getViewEditpart().getModel();
 
@@ -117,8 +114,7 @@
 	 */
 	private List<YEmbeddable> collectAllEmbeddables() {
 		List<YEmbeddable> yEmbeddables = new ArrayList<>();
-		TreeIterator<EObject> iter = EcoreUtil
-				.getAllProperContents(yView, true);
+		TreeIterator<EObject> iter = EcoreUtil.getAllProperContents(yView, true);
 		while (iter.hasNext()) {
 			EObject eObject = iter.next();
 			if (eObject instanceof YEmbeddable) {
@@ -211,9 +207,8 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see
-	 * org.eclipse.osbp.ecview.core.common.visibility.IVisibilityProcessor#setInput
-	 * (java.lang.Object)
+	 * @see org.eclipse.osbp.ecview.core.common.visibility.IVisibilityProcessor#
+	 * setInput (java.lang.Object)
 	 */
 	@Override
 	public void setInput(Object input) {
@@ -226,8 +221,7 @@
 	 * Do fire.
 	 */
 	public void doFire() {
-		IUserAccessService userAccessService = context
-				.getService(IUserAccessService.class.getName());
+		IUserAccessService userAccessService = context.getService(IUserAccessService.class.getName());
 		for (Handler handler : handlers) {
 			handler.handle(userAccessService);
 		}
@@ -283,26 +277,30 @@
 			}
 
 			target.setVisible(false);
-			target.setEditable(false);
+			target.setEditable(!model.isReadonly());
 			target.setEnabled(false);
 			if (userAccessService == null) {
 				target.setVisible(true);
 			} else {
-				if(userAccessService.isGranted(Group.DTO, Action.READABLE, dtoName)) {
-					target.setVisible(true);
-					target.setEditable(true);
-					target.setEnabled(true);
-					boolean nameVisible = !userAccessService.isVetoed(Group.DTO, Action.INVISIBLE, dtoName, dtoProperty);
-					if (nameVisible) {
-						boolean nameEnabled = !userAccessService.isVetoed(Group.DTO, Action.DISABLED, dtoName, dtoProperty);
-						if (nameEnabled) {
-							boolean nameEditable = !userAccessService.isVetoed(Group.DTO, Action.NONEDITABLE, dtoName, dtoProperty);
-							target.setEditable(nameEditable);
-						} else {
-							target.setEnabled(nameEnabled);
+				boolean dtoGrant = userAccessService.isGranted(Group.DTO, Action.READABLE, dtoName);
+				if (dtoGrant) {
+					target.setVisible(!userAccessService.isVetoed(Group.DTO, Action.INVISIBLE, dtoName, dtoProperty));
+					if (!model.isReadonly()) {
+						target.setEditable(
+								!userAccessService.isVetoed(Group.DTO, Action.NONEDITABLE, dtoName, dtoProperty));
+					}
+					target.setEnabled(!userAccessService.isVetoed(Group.DTO, Action.DISABLED, dtoName, dtoProperty));
+				} else {
+					boolean beanGrant = userAccessService.isGranted(Group.BEAN, Action.READABLE, dtoName);
+					if (beanGrant) {
+						target.setVisible(
+								!userAccessService.isVetoed(Group.BEAN, Action.INVISIBLE, dtoName, dtoProperty));
+						if (!model.isReadonly()) {
+							target.setEditable(
+									!userAccessService.isVetoed(Group.BEAN, Action.NONEDITABLE, dtoName, dtoProperty));
 						}
-					} else {
-						target.setVisible(nameVisible);
+						target.setEnabled(
+								!userAccessService.isVetoed(Group.BEAN, Action.DISABLED, dtoName, dtoProperty));
 					}
 				}
 			}
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/memento/presentation/CxGridMementoActionBarContributor.java b/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/memento/presentation/CxGridMementoActionBarContributor.java
index d13dacb..b743032 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/memento/presentation/CxGridMementoActionBarContributor.java
+++ b/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/memento/presentation/CxGridMementoActionBarContributor.java
@@ -64,13 +64,6 @@
 	extends EditingDomainActionBarContributor
 	implements ISelectionChangedListener {
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public static final String copyright = "All rights reserved by Loetz GmbH&Co.KG Heidelberg 2015.\n\nContributors:\n      Florian Pirchner - initial API and implementation";
-
-	/**
 	 * This keeps track of the active editor.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/memento/presentation/CxGridMementoEditor.java b/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/memento/presentation/CxGridMementoEditor.java
index 473a23a..ed5b23a 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/memento/presentation/CxGridMementoEditor.java
+++ b/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/memento/presentation/CxGridMementoEditor.java
@@ -204,13 +204,6 @@
 	extends MultiPageEditorPart
 	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public static final String copyright = "All rights reserved by Loetz GmbH&Co.KG Heidelberg 2015.\n\nContributors:\n      Florian Pirchner - initial API and implementation";
-
-	/**
 	 * This keeps track of the editing domain that is used to track all changes to the model.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1001,7 +994,7 @@
 	 * @generated
 	 */
 	public void createModel() {
-		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		URI resourceURI = EditUIUtil.getURI(getEditorInput(), editingDomain.getResourceSet().getURIConverter());
 		Exception exception = null;
 		Resource resource = null;
 		try {
@@ -1029,10 +1022,11 @@
 	 * @generated
 	 */
 	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
-		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+		boolean hasErrors = !resource.getErrors().isEmpty();
+		if (hasErrors || !resource.getWarnings().isEmpty()) {
 			BasicDiagnostic basicDiagnostic =
 				new BasicDiagnostic
-					(Diagnostic.ERROR,
+					(hasErrors ? Diagnostic.ERROR : Diagnostic.WARNING,
 					 "org.eclipse.osbp.ecview.extension.grid.model.editor",
 					 0,
 					 getString("_UI_CreateModelError_message", resource.getURI()),
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/memento/presentation/CxGridMementoModelWizard.java b/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/memento/presentation/CxGridMementoModelWizard.java
index 296c0a8..9f39cf7 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/memento/presentation/CxGridMementoModelWizard.java
+++ b/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/memento/presentation/CxGridMementoModelWizard.java
@@ -108,13 +108,6 @@
  */
 public class CxGridMementoModelWizard extends Wizard implements INewWizard {
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public static final String copyright = "All rights reserved by Loetz GmbH&Co.KG Heidelberg 2015.\n\nContributors:\n      Florian Pirchner - initial API and implementation";
-
-	/**
 	 * The supported extensions for created files.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -417,8 +410,7 @@
 		 * @generated
 		 */
 		public void createControl(Composite parent) {
-			Composite composite = new Composite(parent, SWT.NONE);
-			{
+			Composite composite = new Composite(parent, SWT.NONE); {
 				GridLayout layout = new GridLayout();
 				layout.numColumns = 1;
 				layout.verticalSpacing = 12;
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/presentation/CxGridActionBarContributor.java b/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/presentation/CxGridActionBarContributor.java
index f5e18ce..bac51ae 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/presentation/CxGridActionBarContributor.java
+++ b/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/presentation/CxGridActionBarContributor.java
@@ -62,13 +62,6 @@
 	extends EditingDomainActionBarContributor
 	implements ISelectionChangedListener {
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public static final String copyright = "All rights reserved by Loetz GmbH&Co.KG Heidelberg 2015.\n\nContributors:\n      Florian Pirchner - initial API and implementation";
-
-	/**
 	 * This keeps track of the active editor.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/presentation/CxGridEditor.java b/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/presentation/CxGridEditor.java
index d4a615b..57bfc35 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/presentation/CxGridEditor.java
+++ b/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/presentation/CxGridEditor.java
@@ -202,13 +202,6 @@
 	extends MultiPageEditorPart
 	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public static final String copyright = "All rights reserved by Loetz GmbH&Co.KG Heidelberg 2015.\n\nContributors:\n      Florian Pirchner - initial API and implementation";
-
-	/**
 	 * This keeps track of the editing domain that is used to track all changes to the model.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -999,7 +992,7 @@
 	 * @generated
 	 */
 	public void createModel() {
-		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		URI resourceURI = EditUIUtil.getURI(getEditorInput(), editingDomain.getResourceSet().getURIConverter());
 		Exception exception = null;
 		Resource resource = null;
 		try {
@@ -1027,10 +1020,11 @@
 	 * @generated
 	 */
 	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
-		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+		boolean hasErrors = !resource.getErrors().isEmpty();
+		if (hasErrors || !resource.getWarnings().isEmpty()) {
 			BasicDiagnostic basicDiagnostic =
 				new BasicDiagnostic
-					(Diagnostic.ERROR,
+					(hasErrors ? Diagnostic.ERROR : Diagnostic.WARNING,
 					 "org.eclipse.osbp.ecview.extension.grid.model.editor",
 					 0,
 					 getString("_UI_CreateModelError_message", resource.getURI()),
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/presentation/CxGridModelWizard.java b/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/presentation/CxGridModelWizard.java
index edf64e9..ee318e7 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/presentation/CxGridModelWizard.java
+++ b/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/presentation/CxGridModelWizard.java
@@ -106,13 +106,6 @@
  */
 public class CxGridModelWizard extends Wizard implements INewWizard {
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public static final String copyright = "All rights reserved by Loetz GmbH&Co.KG Heidelberg 2015.\n\nContributors:\n      Florian Pirchner - initial API and implementation";
-
-	/**
 	 * The supported extensions for created files.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -415,8 +408,7 @@
 		 * @generated
 		 */
 		public void createControl(Composite parent) {
-			Composite composite = new Composite(parent, SWT.NONE);
-			{
+			Composite composite = new Composite(parent, SWT.NONE); {
 				GridLayout layout = new GridLayout();
 				layout.numColumns = 1;
 				layout.verticalSpacing = 12;
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/presentation/cxecviewEditorPlugin.java b/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/presentation/cxecviewEditorPlugin.java
index 96a7667..bfe1b5a 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/presentation/cxecviewEditorPlugin.java
+++ b/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/presentation/cxecviewEditorPlugin.java
@@ -33,13 +33,6 @@
  */
 public final class cxecviewEditorPlugin extends EMFPlugin {
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public static final String copyright = "All rights reserved by Loetz GmbH&Co.KG Heidelberg 2015.\n\nContributors:\n      Florian Pirchner - initial API and implementation";
-	
-	/**
 	 * Keep track of the singleton.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/renderer/presentation/CxGridRendererActionBarContributor.java b/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/renderer/presentation/CxGridRendererActionBarContributor.java
index b53109b..59f30ef 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/renderer/presentation/CxGridRendererActionBarContributor.java
+++ b/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/renderer/presentation/CxGridRendererActionBarContributor.java
@@ -64,13 +64,6 @@
 	extends EditingDomainActionBarContributor
 	implements ISelectionChangedListener {
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public static final String copyright = "All rights reserved by Loetz GmbH&Co.KG Heidelberg 2015.\n\nContributors:\n      Florian Pirchner - initial API and implementation";
-
-	/**
 	 * This keeps track of the active editor.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/renderer/presentation/CxGridRendererEditor.java b/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/renderer/presentation/CxGridRendererEditor.java
index d88e2a6..4071cb0 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/renderer/presentation/CxGridRendererEditor.java
+++ b/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/renderer/presentation/CxGridRendererEditor.java
@@ -204,13 +204,6 @@
 	extends MultiPageEditorPart
 	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public static final String copyright = "All rights reserved by Loetz GmbH&Co.KG Heidelberg 2015.\n\nContributors:\n      Florian Pirchner - initial API and implementation";
-
-	/**
 	 * This keeps track of the editing domain that is used to track all changes to the model.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1001,7 +994,7 @@
 	 * @generated
 	 */
 	public void createModel() {
-		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		URI resourceURI = EditUIUtil.getURI(getEditorInput(), editingDomain.getResourceSet().getURIConverter());
 		Exception exception = null;
 		Resource resource = null;
 		try {
@@ -1029,10 +1022,11 @@
 	 * @generated
 	 */
 	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
-		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+		boolean hasErrors = !resource.getErrors().isEmpty();
+		if (hasErrors || !resource.getWarnings().isEmpty()) {
 			BasicDiagnostic basicDiagnostic =
 				new BasicDiagnostic
-					(Diagnostic.ERROR,
+					(hasErrors ? Diagnostic.ERROR : Diagnostic.WARNING,
 					 "org.eclipse.osbp.ecview.extension.grid.model.editor",
 					 0,
 					 getString("_UI_CreateModelError_message", resource.getURI()),
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/renderer/presentation/CxGridRendererModelWizard.java b/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/renderer/presentation/CxGridRendererModelWizard.java
index 6105797..a792ab9 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/renderer/presentation/CxGridRendererModelWizard.java
+++ b/org.eclipse.osbp.ecview.extension.grid.model.editor/src/org/eclipse/osbp/ecview/extension/grid/renderer/presentation/CxGridRendererModelWizard.java
@@ -108,13 +108,6 @@
  */
 public class CxGridRendererModelWizard extends Wizard implements INewWizard {
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public static final String copyright = "All rights reserved by Loetz GmbH&Co.KG Heidelberg 2015.\n\nContributors:\n      Florian Pirchner - initial API and implementation";
-
-	/**
 	 * The supported extensions for created files.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -417,8 +410,7 @@
 		 * @generated
 		 */
 		public void createControl(Composite parent) {
-			Composite composite = new Composite(parent, SWT.NONE);
-			{
+			Composite composite = new Composite(parent, SWT.NONE); {
 				GridLayout layout = new GridLayout();
 				layout.numColumns = 1;
 				layout.verticalSpacing = 12;
diff --git a/org.eclipse.osbp.ecview.extension.grid.presentation/META-INF/MANIFEST.MF b/org.eclipse.osbp.ecview.extension.grid.presentation/META-INF/MANIFEST.MF
index 7ac42ec..91f08be 100644
--- a/org.eclipse.osbp.ecview.extension.grid.presentation/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.ecview.extension.grid.presentation/META-INF/MANIFEST.MF
@@ -36,6 +36,10 @@
  org.eclipse.osbp.ui.api,
  grid-renderers-collection.osgi;bundle-version="1.2.4"
 Import-Package: org.apache.commons.lang,
+ org.eclipse.e4.core.contexts,
+ org.eclipse.e4.ui.model.application.ui.advanced,
+ org.eclipse.e4.ui.model.application.ui.advanced.impl,
+ org.eclipse.e4.ui.model.application.ui.basic,
  org.eclipse.osbp.ui.api.user;version="0.9.0",
  org.eclipse.osbp.vaaclipse.publicapi.authentication;version="0.9.0",
  org.osgi.framework;version="1.7.0",
diff --git a/org.eclipse.osbp.ecview.extension.grid.presentation/src/org/eclipse/osbp/ecview/extension/grid/presentation/GridPresentation.java b/org.eclipse.osbp.ecview.extension.grid.presentation/src/org/eclipse/osbp/ecview/extension/grid/presentation/GridPresentation.java
index 3ecdf08..d275533 100644
--- a/org.eclipse.osbp.ecview.extension.grid.presentation/src/org/eclipse/osbp/ecview/extension/grid/presentation/GridPresentation.java
+++ b/org.eclipse.osbp.ecview.extension.grid.presentation/src/org/eclipse/osbp/ecview/extension/grid/presentation/GridPresentation.java
@@ -33,15 +33,17 @@
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.observable.value.WritableValue;
+import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
+import org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveImpl;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.impl.AdapterImpl;
 import org.eclipse.emf.databinding.EMFObservables;
 import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.osbp.dsl.semantic.dto.util.NamingConventionsUtil;
 import org.eclipse.osbp.ecview.core.common.editpart.IElementEditpart;
 import org.eclipse.osbp.ecview.core.common.editpart.IEmbeddableEditpart;
 import org.eclipse.osbp.ecview.core.common.editpart.IFieldEditpart;
+import org.eclipse.osbp.ecview.core.common.model.binding.YBindingEndpoint;
 import org.eclipse.osbp.ecview.core.common.model.core.YConverter;
 import org.eclipse.osbp.ecview.core.common.model.core.YEmbeddableBindingEndpoint;
 import org.eclipse.osbp.ecview.core.common.model.core.YEmbeddableCollectionEndpoint;
@@ -96,6 +98,9 @@
 import org.eclipse.osbp.runtime.web.vaadin.databinding.values.IVaadinObservableValue;
 import org.eclipse.osbp.runtime.web.vaadin.databinding.values.SetToListAdapter;
 import org.eclipse.osbp.ui.api.user.IUser;
+import org.eclipse.osbp.ui.api.useraccess.IUserAccessService;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Action;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Group;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -115,8 +120,7 @@
 import com.vaadin.ui.Field;
 import com.vaadin.ui.Grid;
 import com.vaadin.ui.Grid.Column;
-import com.vaadin.ui.Grid.ColumnResizeEvent;
-import com.vaadin.ui.Grid.ColumnResizeListener;
+import com.vaadin.ui.Grid.ColumnReorderEvent;
 import com.vaadin.ui.Grid.ColumnVisibilityChangeEvent;
 import com.vaadin.ui.Grid.FooterRow;
 import com.vaadin.ui.Grid.HeaderRow;
@@ -147,16 +151,16 @@
 	private Set<ColumnWrapper> columns = new HashSet<>();
 
 	/** The grouping headers. */
-	private Map<CxGridHeaderRow, HeaderRow> groupingHeaders = new HashMap<CxGridHeaderRow, HeaderRow>();
+	private Map<CxGridHeaderRow, HeaderRow> groupingHeaders = new HashMap<>();
 
 	/** The grouping footers. */
-	private Map<CxGridFooterRow, FooterRow> groupingFooters = new HashMap<CxGridFooterRow, FooterRow>();
+	private Map<CxGridFooterRow, FooterRow> groupingFooters = new HashMap<>();
 
 	/** The filtering header. */
 	private HeaderRow filteringHeader;
 
 	/** The filtering header fields. */
-	private Map<CxGridColumn, ISearchFieldEditpart> filteringHeaderFields = new HashMap<CxGridColumn, ISearchFieldEditpart>();
+	private Map<CxGridColumn, ISearchFieldEditpart> filteringHeaderFields = new HashMap<>();
 
 	/** The selection binding. */
 	private Binding selectionBinding;
@@ -241,7 +245,7 @@
 
 		resetHeader();
 		resetFooter();
-
+		
 		// reset the column reference in the editparts
 		for (CxGridColumn cxColumn : modelAccess.yField.getColumns()) {
 			IGridColumnEditpart editpart = ModelUtil.getEditpart(getViewContext(), cxColumn);
@@ -283,8 +287,9 @@
 		}
 
 		if (visibleColumns.size() > 0) {
-			// create the columns based on the model
+			// create the columns based on the model or the persist at user
 			//
+			visibleColumns = getColumnOrder(visibleColumns);
 			grid.setColumns(visibleColumns.toArray(new Object[visibleColumns.size()]));
 			grid.setColumnOrder(visibleColumns.toArray(new Object[visibleColumns.size()]));
 
@@ -301,30 +306,38 @@
 					editpart.initializeColumn();
 				}
 			}
-		} else {
-			Class<?> rootType = modelAccess.yField.getType();
-			// order columns by field order in rootType
-			List<String> fieldNames = DtoUtils.getFieldNames(rootType);
-			for (Iterator<String> iterator = fieldNames.iterator(); iterator.hasNext();) {
-				String name = iterator.next();
-				if (grid.getColumn(name) == null) {
-					iterator.remove();
-				}
-			}
-			grid.setColumnOrder(fieldNames.toArray(new Object[fieldNames.size()]));
-			// remove not used fields
-			for (Grid.Column col : new ArrayList<>(grid.getColumns())) {
-				String propId = (String) col.getPropertyId();
-				if (!propId.contains(".")) {
-					// only check not nested fields
-					if (DtoUtils.isIdField(rootType, propId) || DtoUtils.isVersionField(rootType, propId)
-							|| DtoUtils.isDisposeField(rootType, propId) || DtoUtils.isDirtyField(rootType, propId)) {
-						grid.removeColumn(propId);
-					}
-				}
-			}
+// #479 TODO (JCD): Not needed anymore. Gridxmi provides now all the columns even when no attribute is defined in the grammar
+//		} else {
+//			// Previous saved column order
+//			List<String> columnOrderUser = getColumnOrderUser();
+//			// Column order exists at user properties
+//			if ((columnOrderUser != null) && !(columnOrderUser.isEmpty())){
+//				try {
+//					/* required before the setColumnOrder to equalize this column order with the state column order. 
+//					 * Otherwise the column order list will be increased by the state column order list 
+//					 * which produce a IllegalArgumentException and therefore a initial column order. */ 
+//					removeNotUsedColumns();
+//					grid.setColumnOrder(columnOrderUser.toArray());
+//				} catch (IllegalArgumentException e) {
+//					// In case of an incomplete setting of the column order by the user properties
+//					createInitialColumnOrder();
+//					/* required after the creation of a initial column order that creates the columns 
+//					 * based on all existing field names. */
+//					removeNotUsedColumns();
+//				}
+//			} else {
+//			// Otherwise new column order is created based on the filed names
+//				createInitialColumnOrder();
+//				/* required after the creation of a initial column order that creates the columns 
+//				 * based on all existing field names. */
+//				removeNotUsedColumns();
+//			}
+//
 		}
 
+		// #479 TODO (JCD): Not needed anymore. Unauthorized columns were managed at the creation of the grid.
+//		hideUnauthorizedColumns();
+
 		updateCellStyleGenerator();
 		createHeaderMetaCells();
 		createFilteringHeader();
@@ -332,6 +345,115 @@
 		createSortOrder();
 	}
 
+	private List<String> getColumnOrder(List<String> visibleColumns) {
+		List<String> columnOrderUser = getColumnOrderUser();
+		if ( null == columnOrderUser || visibleColumns.size() != columnOrderUser.size()) {
+			return visibleColumns;
+		}
+		boolean unchangedColumns = true;
+		for (String columnOrderUserItem : columnOrderUser){
+			boolean containsFlag = visibleColumns.contains(columnOrderUserItem);
+			unchangedColumns = unchangedColumns && containsFlag;
+		}
+		if (unchangedColumns) {
+			return columnOrderUser;
+		}
+		return visibleColumns;
+	}
+
+	@SuppressWarnings("unchecked")
+	private List<String> getColumnOrderUser() {
+		IUser user = getViewContext().getService(IUser.class.getName());
+		String gridName = modelAccess.yField.getProperties().get("GRIDSOURCE_ID");
+		return (List<String>) user.getProperty(gridName);
+	}
+	
+	private void removeNotUsedColumns() {
+		// remove not used fields
+		for (Grid.Column col : new ArrayList<>(grid.getColumns())) {
+			String propId = (String) col.getPropertyId();
+			if (!propId.contains(".")) {
+				// only check not nested fields
+				Class<?> rootType = modelAccess.yField.getType();
+				if (DtoUtils.isIdField(rootType, propId) || DtoUtils.isVersionField(rootType, propId)
+						|| DtoUtils.isDisposeField(rootType, propId) || DtoUtils.isDirtyField(rootType, propId)) {
+					grid.removeColumn(propId);
+				}
+			}
+		}
+	}
+
+	// TODO (JCD) delete if it is clear that the gridsource_xmi solution works.
+//	private void hideUnauthorizedColumns() {
+//		IUserAccessService userAccessService = getViewContext().getService(IUserAccessService.class.getName());
+//		Class<?> dtoObjectClass = modelAccess.yField.getType();
+//		for (Grid.Column column : new ArrayList<>(grid.getColumns())) {
+//			String dtoProperty = (String) column.getPropertyId();
+//			columnPermission(userAccessService, dtoObjectClass, column, dtoProperty);
+//		}
+//	}
+//	
+//	private void columnPermission(IUserAccessService userAccessService, Class<?> dtoObjectClass, Column column, String dtoProperty) {
+//		if (dtoProperty.split("\\.").length > 1) {
+//			String refName = dtoProperty.split("\\.")[0];
+//			String newDtoProperty = dtoProperty.substring(dtoProperty.indexOf(".") + 1);
+//			for (java.lang.reflect.Field ref : DtoUtils.getOwnerDomainReferences(dtoObjectClass)){
+//				if (refName.equals(ref.getName())){
+//					Class<?> newDtoObjectClass = ref.getType();
+//					columnPermission(userAccessService, newDtoObjectClass, column, newDtoProperty);
+//					break;
+//				}
+//			}
+//		} else {
+//			column.setHidden(false);
+//			column.setEditable(false);
+//			if (userAccessService == null) {
+//				column.setHidden(true);
+//			} else {
+//				String dtoName = dtoObjectClass.getCanonicalName();
+//				boolean dtoGrant = userAccessService.isGranted(Group.DTO, Action.READABLE, dtoName);
+//				boolean beanGrant = userAccessService.isGranted(Group.BEAN, Action.READABLE, dtoName);
+//				boolean columnHidden = true;
+//				boolean columnEditable = false;
+//				boolean columnEnabled = false;
+//				if (dtoGrant) {
+//					columnHidden = userAccessService.isVetoed(Group.DTO, Action.INVISIBLE ,dtoName, dtoProperty);
+//					columnEditable = !userAccessService.isVetoed(Group.DTO, Action.NONEDITABLE ,dtoName, dtoProperty);
+//					columnEnabled = !userAccessService.isVetoed(Group.DTO, Action.DISABLED ,dtoName, dtoProperty);
+//				} else if (beanGrant) {
+//					columnHidden = userAccessService.isVetoed(Group.BEAN, Action.INVISIBLE, dtoName, dtoProperty);
+//					columnEditable = !userAccessService.isVetoed(Group.BEAN, Action.NONEDITABLE ,dtoName, dtoProperty);
+//					columnEnabled = !userAccessService.isVetoed(Group.BEAN, Action.DISABLED ,dtoName, dtoProperty);
+//				}
+//				if (!columnHidden) {
+//					if(column.isEditable()) {
+//						// do not set editable true, if editable false
+//						column.setEditable(columnEditable && columnEnabled);
+//					}
+//				} else {
+//					if(!column.isHidden()){
+//						// do not unhide hidden columns
+//						column.setHidden(columnHidden);
+//					}
+//				}
+//
+//			}
+//		}
+//	}
+//
+	private void createInitialColumnOrder() {
+		Class<?> rootType = modelAccess.yField.getType();
+		// order columns by field order in rootType
+		List<String> fieldNames = DtoUtils.getFieldNames(rootType);
+		for (Iterator<String> iterator = fieldNames.iterator(); iterator.hasNext();) {
+			String name = iterator.next();
+			if (grid.getColumn(name) == null) {
+				iterator.remove();
+			}
+		}
+		grid.setColumnOrder(fieldNames.toArray(new Object[fieldNames.size()]));
+	}
+
 	/**
 	 * Creates the sort order.
 	 */
@@ -370,6 +492,14 @@
 			// create the grouping headers
 			//
 			for (CxGridGroupedCell groupingColumn : cxHeader.getGroupings()) {
+				Collection<CxGridGroupable> hiddenColumns = new ArrayList<>();
+				for (CxGridGroupable groupable : groupingColumn.getGroupables()){
+					if ((groupable instanceof CxGridColumn) && (((CxGridColumn)groupable).isHidden())){
+						hiddenColumns.add(groupable);
+					}
+				}
+//				groupingColumn.getGroupables().clear();
+				groupingColumn.getGroupables().removeAll(hiddenColumns);
 				if (groupingColumn.getGroupables().size() <= 1) {
 					continue;
 				}
@@ -425,8 +555,8 @@
 	 */
 	protected void resetHeader() {
 		// reset the old header
-		for (HeaderRow header : groupingHeaders.values()) {
-			grid.removeHeaderRow(header);
+		for (int i = 0; i < groupingHeaders.size(); i++) {
+			grid.removeHeaderRow(i);
 		}
 		groupingHeaders.clear();
 
@@ -492,33 +622,37 @@
 	protected void createAutoFilters() {
 		cellFilters = new GridCellFilter(grid);
 		for (CxGridColumn cxColumn : modelAccess.yField.getColumns()) {
-			Class<?> propertyType = cxColumn.getType();
-
-			String propertyPath = cxColumn.getPropertyPath();
-			String filterPropertyPath = cxColumn.getPropertyPath();
-			if (cxColumn.isEditsDto()) {
-				// if the column edits a dto, its property path points to
-				// the dto. Eg. person.country.
-				// So we need to use a special path for filtering which
-				// points
-				// to the domainkey. person.country.isoCode
-				filterPropertyPath = cxColumn.getFilterPropertyPathForEditsDto();
-			}
-			if (Number.class.isAssignableFrom(propertyType) || isPrimitiveNumber(propertyType)) {
-				cellFilters.setNumberFilter(propertyPath, filterPropertyPath);
-			} else if (propertyType == String.class) {
-				cellFilters.setTextFilter(propertyPath, filterPropertyPath, true, false, null);
-			} else if (propertyType == Date.class) {
-				cellFilters.setDateFilter(propertyPath, filterPropertyPath);
-				// otherwise the column is to wide
-				grid.getColumn(propertyPath).setMaximumWidth(175);
-			} else if (propertyType == Boolean.class || propertyType == Boolean.TYPE) {
-				cellFilters.setBooleanFilter(propertyPath, filterPropertyPath);
-			} else if (propertyType.isEnum()) {
-				cellFilters.setComboBoxFilter(propertyPath, filterPropertyPath,
-						Arrays.asList(propertyType.getEnumConstants()));
-			} else if (DtoUtils.getDomainKeyField(propertyType) != null) {
-				cellFilters.setDtoFilter(propertyPath, propertyType, "");
+			if (!cxColumn.isHidden()){
+				Class<?> propertyType = cxColumn.getType();
+	
+				String propertyPath = cxColumn.getPropertyPath();
+				String filterPropertyPath = cxColumn.getPropertyPath();
+				if (cxColumn.isEditsDto()) {
+					// if the column edits a dto, its property path points to
+					// the dto. Eg. person.country.
+					// So we need to use a special path for filtering which
+					// points
+					// to the domainkey. person.country.isoCode
+					filterPropertyPath = cxColumn.getFilterPropertyPathForEditsDto();
+				}
+				if (Number.class.isAssignableFrom(propertyType) || isPrimitiveNumber(propertyType)) {
+					cellFilters.setNumberFilter(propertyPath, filterPropertyPath);
+				} else if (propertyType == String.class) {
+					cellFilters.setTextFilter(propertyPath, filterPropertyPath, true, false, null);
+				} else if (propertyType == Date.class) {
+					cellFilters.setDateFilter(propertyPath, filterPropertyPath);
+					// otherwise the column is to wide
+					if (grid.getColumn(propertyPath)!=null){
+						grid.getColumn(propertyPath).setMaximumWidth(175);
+					}
+				} else if (propertyType == Boolean.class || propertyType == Boolean.TYPE) {
+					cellFilters.setBooleanFilter(propertyPath, filterPropertyPath);
+				} else if (propertyType.isEnum()) {
+					cellFilters.setComboBoxFilter(propertyPath, filterPropertyPath,
+							Arrays.asList(propertyType.getEnumConstants()));
+				} else if (DtoUtils.getDomainKeyField(propertyType) != null) {
+					cellFilters.setDtoFilter(propertyPath, propertyType, "");
+				}
 			}
 		}
 	}
@@ -568,7 +702,7 @@
 	 * @return the object
 	 */
 	private Object refreshFilter() {
-		Set<Container.Filter> filters = new HashSet<Container.Filter>();
+		Set<Container.Filter> filters = new HashSet<>();
 		for (ISearchFieldEditpart ep : filteringHeaderFields.values()) {
 			Container.Filter f = (Container.Filter) ep.getFilter();
 			if (f != null) {
@@ -676,7 +810,7 @@
 	 * @return the cells
 	 */
 	private List<Grid.HeaderCell> getCells(HeaderRow row, CxGridGroupedCell groupingColumn) {
-		List<Grid.HeaderCell> cells = new ArrayList<Grid.HeaderCell>();
+		List<Grid.HeaderCell> cells = new ArrayList<>();
 		for (CxGridGroupable column : groupingColumn.getGroupables()) {
 			if (column instanceof CxGridColumn) {
 				// if it is a column, then use the property id to get the cell
@@ -705,7 +839,7 @@
 	 * @return the cells
 	 */
 	private List<Grid.FooterCell> getCells(FooterRow row, CxGridGroupedCell groupingColumn) {
-		List<Grid.FooterCell> cells = new ArrayList<Grid.FooterCell>();
+		List<Grid.FooterCell> cells = new ArrayList<>();
 		for (CxGridGroupable column : groupingColumn.getGroupables()) {
 			if (column instanceof CxGridColumn) {
 				// if it is a column, then use the property id to get the cell
@@ -805,16 +939,17 @@
 							if (eventDispatcher == null) {
 								return;
 							}
-							String topic = NamingConventionsUtil.toEntityName(bean.getSimpleName()) + "."
-									+ DtoUtils.getIdField(bean).getName();
-							EventDispatcherEvent evnt = new EventDispatcherEvent(EventDispatcherCommand.SELECT, topic,
-									toString());
+							MPerspective perspective = getViewContext().getService(MPerspective.class.getName());
+							EventDispatcherEvent evnt = new EventDispatcherEvent(perspective,EventDispatcherCommand.SELECT, bean.getName(), toString());
 							if (msg.getNewValue() != null) {
 								evnt.addItem(EventDispatcherDataTag.ID, DtoUtils.getIdValue(msg.getNewValue()));
-							} else {
-								evnt.addItem(EventDispatcherDataTag.ID, null);
+								eventDispatcher.sendEvent(evnt);
+							/**
+							 * this doesn't work for updates on the dto as grid completely removes content and sends this event with null dto
+							 */
+//							} else {
+//								evnt.addItem(EventDispatcherDataTag.ID, null);
 							}
-							eventDispatcher.sendEvent(evnt);
 						}
 					}
 				}
@@ -898,27 +1033,54 @@
 		    		user.addToProperties(gridName + "." + columnId.toString(), String.valueOf(width));
 		    	}
 		    });
+			
+			// persists the changed column width into the user properties map
+			grid.addColumnReorderListener(new Grid.ColumnReorderListener() {
+				
+				@Override
+				public void columnReorder(ColumnReorderEvent event) {
+					CxGrid cxGrid = modelAccess.yField;
+					String gridName = cxGrid.getProperties().get("GRIDSOURCE_ID");
+					IUser user = getViewContext().getService(IUser.class.getName());
+					List<Column> gridColumns = grid.getColumns();
+					List<Object> columnPropertyIds = new ArrayList<>();
+					for(Column column : gridColumns){
+						Object propertyId = column.getPropertyId();
+						columnPropertyIds.add(propertyId);
+					}
+					user.addToProperties(gridName, columnPropertyIds);
+				}
+			});
 		    // Must be immediate to send the resize events immediately
 		    grid.setImmediate(true);
 			
 			applyCaptions();
 			
 			// DO NOT MOVE THE FOLLOWING CODE LINES! 
-			// The setting of the column widths from the persisted user properties only works after the call of "applyCaptions()" 
+			// The setting of the COLUMN WIDTHS and the COLUMN ORDER from the persisted user properties only works after the call of "applyCaptions()" 
 			// due to the possible new creation of the columns in it.
-			for (Column column : grid.getColumns()) {
-				IUser user = getViewContext().getService(IUser.class.getName());
-				String gridName = cxGrid.getProperties().get("GRIDSOURCE_ID");
+			IUser user = getViewContext().getService(IUser.class.getName());
+			String gridName = cxGrid.getProperties().get("GRIDSOURCE_ID");
+			// Temporarily deactivate to test memento ########### TODO #############
+			// COLUMN WIDTH
+			List<Column> gridColumns = grid.getColumns();
+			for (Column column : gridColumns) {
 				String columnWidthStr = user.getColumnUtil().getColumnWidth(gridName + "." + column.getPropertyId());
 				if (columnWidthStr != null){
 					column.setWidth(Double.parseDouble(columnWidthStr));
 				}
 			} 
-
+			// COLUMN ORDER
+			Object[] columnOrder = ((List<String>) user.getProperty(gridName)).toArray();
+			try {
+				grid.setColumnOrder(columnOrder);
+			} catch (IllegalArgumentException e) {
+				// In case of an incomplete setting of the column order by the user properties
+				createInitialColumnOrder();
+			}
+			removeNotUsedColumns();
 			setupUserCallbacks(cxGrid);
-
 		}
-
 		return grid;
 	}
 
@@ -959,6 +1121,7 @@
 	 * @param widget
 	 *            the widget
 	 */
+	@SuppressWarnings("rawtypes")
 	protected void createBindings(CxGrid yGrid, Grid widget) {
 		super.createBindings(yGrid, widget, null);
 
@@ -1187,6 +1350,7 @@
 	/**
 	 * Is used by the editpart to update the header.
 	 */
+	@Override
 	public void updateHeader() {
 		createHeaderMetaCells();
 		updateMemento();
@@ -1195,6 +1359,7 @@
 	/**
 	 * Is used by the editpart to update the footer.
 	 */
+	@Override
 	public void updateFooter() {
 		createFooterMetaCells();
 		updateMemento();
@@ -1203,6 +1368,7 @@
 	/**
 	 * Is used by the editpart to update the columns.
 	 */
+	@Override
 	public void updateColumns() {
 		createColumns();
 		updateMemento();
@@ -1491,6 +1657,7 @@
 		}
 
 		if (bindableValue instanceof YEmbeddableCollectionEndpoint) {
+			addAutoBindingEndpoint((YBindingEndpoint) bindableValue);
 			return internalGetCollectionEndpoint();
 		} else if (bindableValue instanceof YEmbeddableSelectionEndpoint) {
 			return internalGetSelectionEndpoint((YEmbeddableSelectionEndpoint) bindableValue);
diff --git a/org.eclipse.osbp.ecview.extension.grid.sample/.classpath b/org.eclipse.osbp.ecview.extension.grid.sample/.classpath
index 337730e..502f456 100644
--- a/org.eclipse.osbp.ecview.extension.grid.sample/.classpath
+++ b/org.eclipse.osbp.ecview.extension.grid.sample/.classpath
@@ -2,7 +2,7 @@
 <classpath>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry excluding="/" kind="src" path="src-gen"/>
+	<classpathentry kind="src" path="src/"/>
+	<classpathentry kind="src" path="src-gen/"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/org.eclipse.osbp.ecview.extension.presentation.vaadin.tests/i18n/I18N_de_AT.properties b/org.eclipse.osbp.ecview.extension.presentation.vaadin.tests/i18n/I18N_de_AT.properties
deleted file mode 100644
index 6c73e1d..0000000
--- a/org.eclipse.osbp.ecview.extension.presentation.vaadin.tests/i18n/I18N_de_AT.properties
+++ /dev/null
@@ -1 +0,0 @@
-#de_AT
diff --git a/org.eclipse.osbp.ecview.extension.presentation.vaadin.tests/i18n/I18N_en_US.properties b/org.eclipse.osbp.ecview.extension.presentation.vaadin.tests/i18n/I18N_en_US.properties
deleted file mode 100644
index d89e21c..0000000
--- a/org.eclipse.osbp.ecview.extension.presentation.vaadin.tests/i18n/I18N_en_US.properties
+++ /dev/null
@@ -1 +0,0 @@
-#en_US
diff --git a/org.eclipse.osbp.ecview.extension.presentation.vaadin/META-INF/MANIFEST.MF b/org.eclipse.osbp.ecview.extension.presentation.vaadin/META-INF/MANIFEST.MF
index e27de06..e73adae 100644
--- a/org.eclipse.osbp.ecview.extension.presentation.vaadin/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.ecview.extension.presentation.vaadin/META-INF/MANIFEST.MF
@@ -41,13 +41,12 @@
  org.eclipse.xtext.util;bundle-version="[2.11.0,2.12.0)",
  org.eclipse.core.databinding.property;bundle-version="[1.6.0,1.7.0)",
  org.eclipse.osbp.blob;bundle-version="0.9.0",
- org.eclipse.osbp.preferences;bundle-version="0.9.0"
+ org.eclipse.osbp.preferences;bundle-version="0.9.0",
+ org.eclipse.e4.core.contexts,
+ org.eclipse.osbp.ui.api;bundle-version="0.9.0"
 Import-Package: org.apache.commons.lang,
  org.eclipse.core.databinding.property.value,
  org.eclipse.e4.core.services.events,
- org.eclipse.osbp.ui.api.customfields;version="0.9.0",
- org.eclipse.osbp.ui.api.functionlibrary;version="0.9.0",
- org.eclipse.osbp.ui.api.themes;version="0.9.0",
  org.eclipse.osbp.utils.functionnormalizer.api;version="0.9.0",
  org.eclipse.osbp.utils.themes.ui;version="0.9.0",
  org.eclipse.osbp.utils.vaadin;version="0.9.0",
diff --git a/org.eclipse.osbp.ecview.extension.presentation.vaadin/src/org/eclipse/osbp/ecview/extension/presentation/vaadin/components/BlobUploadComponentPresentation.java b/org.eclipse.osbp.ecview.extension.presentation.vaadin/src/org/eclipse/osbp/ecview/extension/presentation/vaadin/components/BlobUploadComponentPresentation.java
index 25f8245..e4cb140 100644
--- a/org.eclipse.osbp.ecview.extension.presentation.vaadin/src/org/eclipse/osbp/ecview/extension/presentation/vaadin/components/BlobUploadComponentPresentation.java
+++ b/org.eclipse.osbp.ecview.extension.presentation.vaadin/src/org/eclipse/osbp/ecview/extension/presentation/vaadin/components/BlobUploadComponentPresentation.java
@@ -20,8 +20,10 @@
 import org.eclipse.core.databinding.Binding;
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.emf.databinding.EMFObservables;
 import org.eclipse.osbp.blob.component.BlobUploadComponent;
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
 import org.eclipse.osbp.ecview.core.common.editpart.IElementEditpart;
 import org.eclipse.osbp.ecview.core.common.editpart.IEmbeddableEditpart;
 import org.eclipse.osbp.ecview.core.common.model.core.YEmbeddableBindingEndpoint;
@@ -34,8 +36,10 @@
 import org.eclipse.osbp.runtime.web.vaadin.databinding.VaadinProperties;
 import org.eclipse.osbp.runtime.web.vaadin.databinding.values.IVaadinObservableValue;
 import org.eclipse.osbp.ui.api.customfields.IBlobService;
+import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
 import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
+import org.eclipse.osbp.ui.api.user.IUser;
 
 import com.vaadin.data.util.ObjectProperty;
 import com.vaadin.ui.Component;
@@ -71,14 +75,11 @@
 	@Override
 	public Component doCreateWidget(Object parent) {
 		if (blobUploadComp == null) {
-
-			IThemeResourceService themeResourceService = getViewContext().getService(IThemeResourceService.class.getName());
+			IDSLMetadataService dslMetadataService = getViewContext().getService(IDSLMetadataService.class.getName());
 			IBlobService blobService = getViewContext().getService(IBlobService.class.getName());
-			blobUploadComp = new BlobUploadComponent(blobService);
+			IUser user = getViewContext().getService(IUser.class.getName());
+			blobUploadComp = new BlobUploadComponent(blobService, dslMetadataService, user);
 			blobUploadComp.setDisplayResolutionId(modelAccess.yblobUploadComp.getDisplayResolutionId());
-			blobUploadComp.setBlobUploadCompLabel(new Label(modelAccess.yblobUploadComp.getLabel()));
-			blobUploadComp.setUploadIcon(themeResourceService.getThemeResource("upload", ThemeResourceType.ICON));
-			blobUploadComp.setDownloadIcon(themeResourceService.getThemeResource("download", ThemeResourceType.ICON));
 			blobUploadComp.addStyleName(CSS_CLASS_CONTROL);
 			blobUploadComp.setImmediate(true);
 			setupComponent(blobUploadComp, getCastedModel());
diff --git a/org.eclipse.osbp.ecview.extension.presentation.vaadin/src/org/eclipse/osbp/ecview/extension/presentation/vaadin/components/common/ECViewComponent.java b/org.eclipse.osbp.ecview.extension.presentation.vaadin/src/org/eclipse/osbp/ecview/extension/presentation/vaadin/components/common/ECViewComponent.java
index c89d61c..7428a80 100644
--- a/org.eclipse.osbp.ecview.extension.presentation.vaadin/src/org/eclipse/osbp/ecview/extension/presentation/vaadin/components/common/ECViewComponent.java
+++ b/org.eclipse.osbp.ecview.extension.presentation.vaadin/src/org/eclipse/osbp/ecview/extension/presentation/vaadin/components/common/ECViewComponent.java
@@ -47,12 +47,6 @@
 	private static final Logger LOGGER = LoggerFactory
 			.getLogger(ECViewComponent.class);
 
-	/**
-	 * Use this property to pass the beanSlot that should be used for the dto.
-	 * See properties map in {@link #render(Object, Map)}
-	 */
-	public static final String PROP_SLOT = "beanSlot";
-
 	/** The cache. */
 	private Map<String, IViewContext> cache = new HashMap<>();
 
@@ -152,7 +146,7 @@
 	 * @return the bean slot name
 	 */
 	protected String getBeanSlotName(Map<String, Object> properties) {
-		return (String) properties.get(PROP_SLOT);
+		return (String) properties.get(IViewContext.PROP_SLOT);
 	}
 
 	/**
diff --git a/org.eclipse.osbp.ecview.extension.presentation.vaadin/src/org/eclipse/osbp/ecview/extension/vaadin/components/CustomDecimalField.java b/org.eclipse.osbp.ecview.extension.presentation.vaadin/src/org/eclipse/osbp/ecview/extension/vaadin/components/CustomDecimalField.java
index f5e1686..12ac9e8 100644
--- a/org.eclipse.osbp.ecview.extension.presentation.vaadin/src/org/eclipse/osbp/ecview/extension/vaadin/components/CustomDecimalField.java
+++ b/org.eclipse.osbp.ecview.extension.presentation.vaadin/src/org/eclipse/osbp/ecview/extension/vaadin/components/CustomDecimalField.java
@@ -116,6 +116,7 @@
 	 * 
 	 * @see com.vaadin.ui.AbstractField#setConvertedValue(java.lang.Object)
 	 */
+	@Override
 	public void setConvertedValue(Object value) {
 		if (converter != null) {
 			converter.setConvertedDecimalFormat(null);
diff --git a/org.eclipse.osbp.ecview.extension.samples/i18n/I18N_de_AT.properties b/org.eclipse.osbp.ecview.extension.samples/i18n/I18N_de_AT.properties
deleted file mode 100644
index 6c73e1d..0000000
--- a/org.eclipse.osbp.ecview.extension.samples/i18n/I18N_de_AT.properties
+++ /dev/null
@@ -1 +0,0 @@
-#de_AT
diff --git a/org.eclipse.osbp.ecview.extension.samples/i18n/I18N_en_US.properties b/org.eclipse.osbp.ecview.extension.samples/i18n/I18N_en_US.properties
deleted file mode 100644
index d89e21c..0000000
--- a/org.eclipse.osbp.ecview.extension.samples/i18n/I18N_en_US.properties
+++ /dev/null
@@ -1 +0,0 @@
-#en_US
diff --git a/org.eclipse.osbp.ecview.extension.strategy/META-INF/MANIFEST.MF b/org.eclipse.osbp.ecview.extension.strategy/META-INF/MANIFEST.MF
index a6f467f..a8f407f 100644
--- a/org.eclipse.osbp.ecview.extension.strategy/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.ecview.extension.strategy/META-INF/MANIFEST.MF
@@ -33,5 +33,8 @@
  org.junit;bundle-version="4.11.0",
  org.eclipse.osbp.ui.api;bundle-version="[0.9.0,0.10.0)",
  org.eclipse.osbp.preferences;bundle-version="[0.9.0,0.10.0)",
- org.apache.pdfbox;bundle-version="2.0.6"
+ org.apache.pdfbox;bundle-version="2.0.6",
+ org.eclipse.e4.core.contexts,
+ org.eclipse.osbp.dsl.dto.lib;bundle-version="[0.9.0,0.10.0)",
+ javax.persistence;bundle-version="2.1.0"
 Service-Component: OSGI-INF/*.xml
diff --git a/org.eclipse.osbp.ecview.extension.strategy/src/org/eclipse/osbp/ecview/extension/strategy/AbstractLayoutingStrategy.java b/org.eclipse.osbp.ecview.extension.strategy/src/org/eclipse/osbp/ecview/extension/strategy/AbstractLayoutingStrategy.java
index 2230f3c..438b814 100644
--- a/org.eclipse.osbp.ecview.extension.strategy/src/org/eclipse/osbp/ecview/extension/strategy/AbstractLayoutingStrategy.java
+++ b/org.eclipse.osbp.ecview.extension.strategy/src/org/eclipse/osbp/ecview/extension/strategy/AbstractLayoutingStrategy.java
@@ -19,7 +19,9 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.TreeSet;
@@ -32,7 +34,11 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.osbp.dsl.dto.lib.impl.DtoServiceAccess;
+import org.eclipse.osbp.ecview.core.common.context.IDialogViewContextCallback;
+import org.eclipse.osbp.ecview.core.common.context.IDtoServiceCallback;
 import org.eclipse.osbp.ecview.core.common.context.IViewContext;
+import org.eclipse.osbp.ecview.core.common.extender.IECViewProviderService;
 import org.eclipse.osbp.ecview.core.common.model.binding.BindingFactory;
 import org.eclipse.osbp.ecview.core.common.model.binding.YBindingEndpoint;
 import org.eclipse.osbp.ecview.core.common.model.binding.YBindingUpdateStrategy;
@@ -74,6 +80,7 @@
 import org.eclipse.osbp.ecview.core.extension.model.extension.YComboBox;
 import org.eclipse.osbp.ecview.core.extension.model.extension.YDateTime;
 import org.eclipse.osbp.ecview.core.extension.model.extension.YDecimalField;
+import org.eclipse.osbp.ecview.core.extension.model.extension.YDialogComponent;
 import org.eclipse.osbp.ecview.core.extension.model.extension.YEnumComboBox;
 import org.eclipse.osbp.ecview.core.extension.model.extension.YEnumOptionsGroup;
 import org.eclipse.osbp.ecview.core.extension.model.extension.YFilteringComponent;
@@ -119,12 +126,13 @@
 import org.eclipse.osbp.ecview.extension.model.converter.YSimpleDecimalConverter;
 import org.eclipse.osbp.ecview.extension.model.visibility.YSubTypeVisibilityProcessor;
 import org.eclipse.osbp.ecview.extension.model.visibility.YVisibilityFactory;
-import org.eclipse.osbp.ecview.extension.strategy.util.NamingConventionsUtil;
 import org.eclipse.osbp.ecview.extension.strategy.util.PdfPrintService;
 import org.eclipse.osbp.preferences.ProductConfiguration;
+import org.eclipse.osbp.runtime.common.filter.IDTOService;
 import org.eclipse.osbp.runtime.common.layouting.IPropertyConstants;
 import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
 import org.eclipse.osbp.ui.api.themes.EnumCssClass;
+import org.eclipse.osbp.ui.api.user.IUser;
 import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Action;
 import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Group;
 import org.eclipse.osbp.ui.api.useraccess.AbstractSubOrganization;
@@ -136,14 +144,21 @@
 import org.eclipse.osbp.utils.themes.ui.VaaclipseUiTheme;
 import org.eclipse.osbp.utils.themes.ui.VaaclipseUiTheme.ThemeList;
 import org.eclipse.xtext.util.Pair;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.ServiceReference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * The Class AbstractLayoutingStrategy.
  */
+@SuppressWarnings("restriction")
 public abstract class AbstractLayoutingStrategy implements ILayoutingStrategy {
 
+	/** The Constant UNGROUPED for attributes not grouped under a groupName. */
+	private static final String UNGROUPED = "<ungrouped>";
+
 	/** The filtered category. */
 	private final String filteredCategory;
 
@@ -168,6 +183,13 @@
 	
 	private int currentIndex = 0;
 
+	private YFormLayout beanLayout;
+
+	private String beanTabName = null;
+
+	private IUser user;
+
+    private static Map<String, Boolean> isEditable = new HashMap<>();
 
 	/** The Constant LOGGER. */
 	private static final Logger LOGGER = LoggerFactory.getLogger(AbstractLayoutingStrategy.class);
@@ -215,12 +237,15 @@
 		viewContext = ModelUtil.getViewContext(yLayout);
 		userAccessService = viewContext.getService(IUserAccessService.class.getName());
 		dslMetadataService = viewContext.getService(IDSLMetadataService.class.getName());
+		user = viewContext.getService(IUser.class.getName());
+		
 		// Identify if a TabSheet is necessary due to existing table or grid
 		if (isTabSheetNeeded(yLayout.getSuspects())) {
 			YTabSheet tabSheet;
 			tabSheet = ExtensionModelFactory.eINSTANCE.createYTabSheet();
 			YTab tab = ExtensionModelFactory.eINSTANCE.createYTab();
-			tab.setLabelI18nKey(getEntityI18nKey(yLayout.getSuspects()));
+			String[] tokens = yLayout.getView().getViewName().split("\\.");
+			tab.setLabelI18nKey(tokens[tokens.length-1]);
 			tab.setEmbeddable(layout);
 			tabSheet.getTabs().add(tab);
 			content = tabSheet;
@@ -318,22 +343,53 @@
 		for (YSuspect ySuspect : yLayout.getSuspects()) {
 			if (ySuspect.getTags().contains(TAG__TABLE) || ySuspect.getTags().contains(TAG__GRID)) {
 				suspectCollectionList.add(ySuspect);
+			} else if (ySuspect instanceof YTypedCompoundSuspect && ySuspect.getTags().contains(TAG__BEANONTAB)) {
+				for (YSuspect childSuspect : ((YTypedCompoundSuspect)ySuspect).getChildren()) {
+					childSuspect.getTags().add(TAG__BEAN);
+					childSuspect.setGroupName(ySuspect.getLabelI18nKey());
+					suspectCollectionList.add(childSuspect);
+				}
 			} else {
 				suspectList.add(ySuspect);
 			}
 		}
 		Collections.sort(suspectCollectionList, new SuspectComparator());
-		suspectList.sort(new Comparator<YSuspect>() {
-			@Override
-			public int compare(YSuspect o1, YSuspect o2) {
-				if(o1.getGroupName() != null && o2.getGroupName() != null ) {
-					return o1.getGroupName().compareTo(o2.getGroupName());
-				} else {
-					return 0;
+		// sort by first appearance in entity
+		HashMap<String, List<YSuspect>> suspectMap = new HashMap<>();
+		List<String> suspectGroupList = new ArrayList<>();
+		for(YSuspect suspect:suspectList) {
+			if(suspect.getGroupName() == null) {
+				String groupName = UNGROUPED;
+				if(suspect instanceof YTypedCompoundSuspect && !suspect.getTags().contains(TAG__BEANONTAB)) {
+					groupName = suspect.getLabelI18nKey();
+				}
+				suspectMap.put(groupName, new ArrayList<YSuspect>());
+				if(!suspectGroupList.contains(groupName)) {
+					suspectGroupList.add(groupName);
+				}
+			} else {
+				suspectMap.put(suspect.getGroupName(), new ArrayList<YSuspect>());
+				if(!suspectGroupList.contains(suspect.getGroupName())) {
+					suspectGroupList.add(suspect.getGroupName());
 				}
 			}
-		});
-
+		}
+		for(YSuspect suspect:suspectList) {
+			if(suspect.getGroupName() == null) {
+				String groupName = UNGROUPED;
+				if(suspect instanceof YTypedCompoundSuspect && !suspect.getTags().contains(TAG__BEANONTAB)) {
+					groupName = suspect.getLabelI18nKey();
+				}
+				suspectMap.get(groupName).add(suspect);
+			} else {
+				suspectMap.get(suspect.getGroupName()).add(suspect);
+			}
+		}
+		suspectList.clear();
+		for(String suspectGroup:suspectGroupList) {
+			suspectList.addAll(suspectMap.get(suspectGroup));
+		}
+		// add the collections for the following tabs
 		suspectList.addAll(suspectCollectionList);
 		return suspectList;
 	}
@@ -349,6 +405,7 @@
 	 *            the suspect info
 	 */
 	private void addElement(YEmbeddable content, YEmbeddable element, YSuspectInfo suspectInfo, int numberColumns) {
+		
 		if (content instanceof YTabSheet) {
 			EList<YTab> tabs = ((YTabSheet) content).getTabs();
 			if (suspectInfo.getSuspect().getTags().contains(TAG__TABLE)
@@ -361,9 +418,19 @@
 				cellStyle.setAlignment(YAlignment.FILL_FILL);
 				tab.setEmbeddable(layout);
 				tabs.add(tab);
+			} else if (suspectInfo.getSuspect().getTags().contains(TAG__BEAN)) {
+				if(beanTabName == null || !suspectInfo.getSuspect().getGroupName().equals(beanTabName)) {
+					YTab tab = ExtensionModelFactory.eINSTANCE.createYTab();
+					tab.setLabelI18nKey(suspectInfo.getSuspect().getGroupName());
+					beanLayout = ExtensionModelFactory.eINSTANCE.createYFormLayout();
+					tab.setEmbeddable(beanLayout);
+					tabs.add(tab);
+					beanTabName = suspectInfo.getSuspect().getGroupName();
+				}
+				beanLayout.addElement(element);
 			} else {
 				if (suspectInfo.getSuspect().getTags().contains(TAG__GROUP)) {
-					createGrouping((YLayout) tabs.get(0).getEmbeddable(), element, suspectInfo, numberColumns);
+					createGrouping(tabs.get(0).getEmbeddable(), element, suspectInfo, numberColumns);
 				} else {
 					// Gets the YLayout of the first tab to add the element
 					if(numberColumns > 0) {
@@ -635,7 +702,7 @@
 			yEmbeddable = createIconComboBox(ySuspect);
 		} else if (ySuspect.getTags().contains(TAG__SUBTYPES_ROOT)) {
 			createSubTypeElements((YSubTypeBaseSuspect) ySuspect);
-		} else if (ySuspect.getTags().contains(TAG__DTO)) {
+		} else if (ySuspect.getTags().contains(TAG__DTO) && !ySuspect.getTags().contains(TAG__BEANONTAB)) {
 			createNestedBeanElements((YTypedCompoundSuspect) ySuspect);
 		} else {
 			yEmbeddable = ExtensionModelFactory.eINSTANCE.createYTextField();
@@ -645,6 +712,9 @@
 			yEmbeddable.setLabel(ySuspect.getLabel());
 			yEmbeddable.setId(ySuspect.getId());
 			yEmbeddable.setCssClass(EnumCssClass.BOX.styleName());
+			if (ySuspect.getTags().contains(TAG__READONLY)) {
+				yEmbeddable.setReadonly(true);
+			}
 
 			suspectInfo.setTarget(yEmbeddable);
 
@@ -676,11 +746,7 @@
 				}
 			}
 
-			// ------------------------------
-
-			// Only for Test purposes
-			// Test Converter
-			if (ySuspect.getTags().contains("FloatToUomo")) {
+			if (ySuspect.getTags().contains(TAG__NUMBER_TO_UOMO)) {
 				((YNumericField) yEmbeddable).setConverter(YConverterFactory.eINSTANCE.createYNumericToUomoConverter());
 			}
 
@@ -780,6 +846,8 @@
 	private YEmbeddable createNestedBeanElements(YTypedCompoundSuspect ySuspect) {
 
 		for (YSuspect childSuspect : ySuspect.getChildren()) {
+			childSuspect.setGroupName(ySuspect.getLabelI18nKey());
+			childSuspect.getTags().add(TAG__GROUP);
 			// Create a new suspect info.
 			YSuspectInfo suspectInfo = layoutingInfo.createSuspectInfo(childSuspect);
 			// add the suspectInfo as active suspect
@@ -943,7 +1011,6 @@
 				// create search dialog
 				Class<?> type = yTypedSuspect.getType();
 				YFilteringComponent yFilterComponent = ExtensionModelFactory.eINSTANCE.createYFilteringComponent();
-
 				String filterDepthString = suspectProperties.get(IPropertyConstants.PROPERTY__FILTER_DEPTH);
 				int depth = 0;
 				if (filterDepthString != null) {
@@ -955,6 +1022,14 @@
 				if (!yFilterComponent.getFilterDescriptors().isEmpty()) {
 					beanReferenceField.setFilteringComponent(yFilterComponent);
 				}
+				
+				if(ySuspect.getTags().contains(TAG__SIDEKICK)) {
+					YDialogComponent yDialogComponent = ExtensionModelFactory.eINSTANCE.createYDialogComponent();
+					yDialogComponent.setType(type);
+					yDialogComponent.setViewContextCallback(new DialogViewContextCallback());
+					yDialogComponent.setUpdateCallback(new DtoServiceCallback());
+					beanReferenceField.setDialogComponent(yDialogComponent);
+				}
 			}
 
 			// Alternative for non editable bean references is a non editable
@@ -978,6 +1053,65 @@
 		return yEmbeddable;
 	}
 
+	/**
+	 * Gets the bean slot name.
+	 *
+	 * @param properties
+	 *            the properties
+	 * @return the bean slot name
+	 */
+	protected String getBeanSlotName(Map<String, Object> properties) {
+		return (String) properties.get(IViewContext.PROP_SLOT);
+	}
+	
+	public IViewContext getAutobindedDialogModel(Class<?> dtoType) {
+		IViewContext viewContext = null;
+		BundleContext bc = FrameworkUtil.getBundle(getClass()).getBundleContext();
+		ServiceReference<IECViewProviderService> ref = bc.getServiceReference(IECViewProviderService.class);
+		if (ref != null) {
+			IECViewProviderService service = bc.getService(ref);
+			viewContext = service.getViewContext(dtoType, IViewContext.MAIN_BEAN_SLOT);
+			bc.ungetService(ref);
+		} else {
+			LOGGER.error("{}", "IECViewProviderService not found");
+		}
+		if(viewContext != null) {
+			return viewContext;
+		} else {
+			LOGGER.error("No view found for dto {}", dtoType.getCanonicalName());
+		}
+		return null;
+	}
+
+	class DialogViewContextCallback implements IDialogViewContextCallback {
+		@Override
+		public IViewContext getDialogViewContext(Class<?> type) {
+			IViewContext dialogViewContext = getAutobindedDialogModel(type);
+			if(dialogViewContext != null) {
+				dialogViewContext.setLocale(user.getLocale());
+				dialogViewContext.setRenderingParams(viewContext.getRenderingParams());
+				try {
+					Object newDto = type.newInstance();
+					dialogViewContext.setBean(getBeanSlotName(dialogViewContext.getRenderingParams()), newDto);
+				} catch (InstantiationException | IllegalAccessException e) {
+					LOGGER.error("{}", e);
+				}
+			}
+			return dialogViewContext;
+		}
+	}
+	
+	class DtoServiceCallback implements IDtoServiceCallback {
+		@Override
+		public void persist(IViewContext dialogViewContext) {
+			Object dto = dialogViewContext.getBean(getBeanSlotName(dialogViewContext.getRenderingParams()));
+			IDTOService<?> dtoService = DtoServiceAccess.getService(dto.getClass());
+			if(dtoService != null) {
+				dtoService.persist(dto);
+			}
+		}
+	}
+
 	private String getCaptionPropertyPath(EMap<String, String> suspectProperties) {
 		String captionPropertyPath = suspectProperties.get(IPropertyConstants.PROPERTY__ITEM_CAPTION);
 		if (captionPropertyPath == null || captionPropertyPath.isEmpty()) {
@@ -1206,12 +1340,8 @@
 		YEmbeddable yEmbeddable;
 		yEmbeddable = YECviewFactory.eINSTANCE.createYI18nComboBox();
 		YI18nComboBox yCombo = (YI18nComboBox) yEmbeddable;
-		// yCombo.setUseBeanService(false);
 		yCombo.setType(String.class);
 		yCombo.setTypeQualifiedName(String.class.getCanonicalName());
-		// yCombo.setModelSelectionType(String.class);
-		// yCombo.setModelSelectionTypeQualifiedName(String.class.getCanonicalName());
-
 		return yEmbeddable;
 	}
 
@@ -1269,12 +1399,15 @@
 			if (suspect.getTags().contains(TAG__TABLE) || suspect.getTags().contains(TAG__GRID)) {
 				return true;
 			}
+			if(suspect instanceof YTypedCompoundSuspect && suspect.getTags().contains(TAG__BEANONTAB)) {
+				return true;
+			}
 		}
 		return false;
 	}
 
 	/**
-	 * Checks for existing supect property
+	 * Checks for existing suspect property
 	 */
 	private boolean existInProperties(YElement ySuspect, String propConstant) {
 		if (!ySuspect.getProperties().isEmpty()) {
@@ -1313,32 +1446,26 @@
 		String dtoName = ySuspect.getAuthorizationGroup();
 		String dtoProperty = ySuspect.getAuthorizationId();
 
-		if (userAccessService.isGranted(Group.DTO, Action.READABLE, dtoName)) {
-			boolean invisible = userAccessService.isVetoed(Group.DTO, Action.INVISIBLE, dtoName, dtoProperty);
-			if (!invisible) {
-				boolean enabled = !userAccessService.isVetoed(Group.DTO, Action.DISABLED, dtoName, dtoProperty);
-				boolean editable = !userAccessService.isVetoed(Group.DTO, Action.NONEDITABLE, dtoName, dtoProperty);
-				if (enabled && editable) {
-					return true;
-				}
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Gets the entity i18n key.
-	 *
-	 * @param suspects
-	 *            the suspects
-	 * @return the entity i18n key
-	 */
-	private String getEntityI18nKey(EList<YSuspect> suspects) {
-		for (YSuspect suspect : suspects) {
-			String dto = suspect.getAuthorizationGroup();
-			return NamingConventionsUtil.toSimpleEntityName(dto);
-		}
-		return "";
+		Boolean result=false;
+    	String grantKey = dtoName + "." + dtoProperty + "###EDITABLE";
+    	if( isEditable.containsKey(grantKey)) {
+    		result=isEditable.get(grantKey);
+    	} else {
+    		if (userAccessService.isGranted(Group.DTO, Action.READABLE, dtoName)) {
+    			boolean invisible = userAccessService.isVetoed(Group.DTO, Action.INVISIBLE, dtoName, dtoProperty);
+    			boolean enabled = false;
+    			boolean editable = false;
+    			if (!invisible) {
+    				enabled = !userAccessService.isVetoed(Group.DTO, Action.DISABLED, dtoName, dtoProperty);
+    				if (enabled) {
+    					editable = !userAccessService.isVetoed(Group.DTO, Action.NONEDITABLE, dtoName, dtoProperty);
+    				}
+    			}
+				result = !invisible && enabled && editable; 
+    		}
+    		isEditable.put(grantKey,result);
+    	}
+		return result;
 	}
 
 	/**
diff --git a/org.eclipse.osbp.ecview.extension.strategy/src/org/eclipse/osbp/ecview/extension/strategy/GridFactory.java b/org.eclipse.osbp.ecview.extension.strategy/src/org/eclipse/osbp/ecview/extension/strategy/GridFactory.java
index ed85fa0..4333433 100644
--- a/org.eclipse.osbp.ecview.extension.strategy/src/org/eclipse/osbp/ecview/extension/strategy/GridFactory.java
+++ b/org.eclipse.osbp.ecview.extension.strategy/src/org/eclipse/osbp/ecview/extension/strategy/GridFactory.java
@@ -101,6 +101,7 @@
 				col.setTypeQualifiedName(info.getTypeQualifiedName());
 			}
 
+			col.setSourceType(info.getSourceType());
 			col.setHideable(true);
 
 			Pair pair = createRendererPair(info);