Bug 544303 - Add type arguments to e4 Tools databinding

Type parameters have been added to Eclipse databinding classes,
but the code in e4 tools has not been updated to take advantage
of this. This commit contains such updates.

Changes:
* Move most property creation code to E4Properties.
* Add master type parameter to AbstractComponentEditor.
* Add parent type parameter to VirtualEntry.
* Add default implementation of VirtualEntry#accept.


Change-Id: I360770aa00be5dc4eb8877e3f5eb44a3a3cdb02d
Signed-off-by: Jens Lidestrom <jens.lidestrom@rt-labs.com>
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/AbstractElementEditorContribution.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/AbstractElementEditorContribution.java
index 6a36e97..86690cf 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/AbstractElementEditorContribution.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/AbstractElementEditorContribution.java
@@ -56,6 +56,7 @@
 	 * @param editingDomain
 	 * @param project
 	 */
-	public abstract void createContributedEditorTab(Composite parent, EMFDataBindingContext context, WritableValue master, EditingDomain editingDomain, IProject project);
+	public abstract void createContributedEditorTab(Composite parent, EMFDataBindingContext context,
+			WritableValue<?> master, EditingDomain editingDomain, IProject project);
 
 }
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/CommandToStringConverter.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/CommandToStringConverter.java
index 7fd5bc5..760ef82 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/CommandToStringConverter.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/CommandToStringConverter.java
@@ -20,7 +20,7 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
 
-public class CommandToStringConverter extends Converter {
+public class CommandToStringConverter extends Converter<MCommand, String> {
 	private final Messages Messages;
 
 	public CommandToStringConverter(Messages Messages) {
@@ -29,8 +29,7 @@
 	}
 
 	@Override
-	public Object convert(Object fromObject) {
-		final MCommand cmd = (MCommand) fromObject;
+	public String convert(MCommand cmd) {
 		String elementId = null;
 		if (cmd != null && cmd.getElementId() != null && cmd.getElementId().trim().length() > 0) {
 			elementId = cmd.getElementId();
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/ContributionURIValidator.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/ContributionURIValidator.java
index f2d17c2..4b9e892 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/ContributionURIValidator.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/ContributionURIValidator.java
@@ -20,7 +20,7 @@
 import org.eclipse.e4.tools.emf.ui.internal.Messages;
 import org.eclipse.emf.common.util.URI;
 
-public class ContributionURIValidator implements IValidator {
+public class ContributionURIValidator implements IValidator<Object> {
 
 	@Override
 	public IStatus validate(Object value) {
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/IModelResource.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/IModelResource.java
index 2481298..8d4cc40 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/IModelResource.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/IModelResource.java
@@ -19,7 +19,7 @@
 import org.eclipse.emf.edit.domain.EditingDomain;
 
 public interface IModelResource {
-	public IObservableList getRoot();
+	public IObservableList<EObject> getRoot();
 
 	public boolean isSaveable();
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/ImageTooltip.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/ImageTooltip.java
index 5141d7a..836b0a5 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/ImageTooltip.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/ImageTooltip.java
@@ -30,9 +30,9 @@
 
 public class ImageTooltip extends ToolTip {
 	private final Messages Messages;
-	private final AbstractComponentEditor editor;
+	private final AbstractComponentEditor<?> editor;
 
-	public ImageTooltip(Control control, Messages Messages, AbstractComponentEditor editor) {
+	public ImageTooltip(Control control, Messages Messages, AbstractComponentEditor<?> editor) {
 		super(control);
 		this.Messages = Messages;
 		this.editor = editor;
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/Util.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/Util.java
index 166d8f2..5e42071 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/Util.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/Util.java
@@ -400,7 +400,7 @@
 	public static final void addDecoration(Control control, Binding binding) {
 		final ControlDecoration dec = new ControlDecoration(control, SWT.BOTTOM);
 		binding.getValidationStatus().addValueChangeListener(event -> {
-			final IStatus s = (IStatus) event.getObservableValue().getValue();
+			final IStatus s = event.getObservableValue().getValue();
 			if (s.isOK()) {
 				dec.setDescriptionText(null);
 				dec.setImage(null);
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/XMIModelResource.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/XMIModelResource.java
index 760c67b..dfa59f2 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/XMIModelResource.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/XMIModelResource.java
@@ -24,6 +24,7 @@
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.ui.internal.workbench.E4XMIResource;
 import org.eclipse.e4.ui.internal.workbench.E4XMIResourceFactory;
 import org.eclipse.emf.common.command.BasicCommandStack;
@@ -32,7 +33,6 @@
 import org.eclipse.emf.common.command.CompoundCommand;
 import org.eclipse.emf.common.util.TreeIterator;
 import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
@@ -50,7 +50,7 @@
 	private final Resource resource;
 	private final List<ModelListener> listeners = new ArrayList<>();
 
-	private IObservableList list;
+	private IObservableList<EObject> list;
 
 	public XMIModelResource(URI uri) {
 		final ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(
@@ -74,12 +74,12 @@
 	}
 
 	@Override
-	public IObservableList getRoot() {
+	public IObservableList<EObject> getRoot() {
 		if (list != null) {
 			return list;
 		}
 
-		list = EMFEditProperties.resource(getEditingDomain()).observe(resource);
+		list = E4Properties.resource(getEditingDomain()).observe(resource);
 
 		return list;
 	}
@@ -97,7 +97,7 @@
 			idMap.put(o, resource.getID(o));
 		}
 
-		resource = (E4XMIResource) ((EObject) list.get(0)).eResource();
+		resource = (E4XMIResource) list.get(0).eResource();
 
 		final Command cmdRemove = new RemoveCommand(getEditingDomain(), resource.getContents(), list.get(0));
 		final Command cmdAdd = new AddCommand(getEditingDomain(), resource.getContents(), eObject);
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/component/AbstractComponentEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/component/AbstractComponentEditor.java
index 330bf71..bc2d6ce 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/component/AbstractComponentEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/component/AbstractComponentEditor.java
@@ -26,6 +26,7 @@
 
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.value.WritableValue;
+import org.eclipse.core.databinding.property.value.IValueProperty;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.e4.core.di.annotations.Optional;
@@ -65,12 +66,15 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 
-public abstract class AbstractComponentEditor {
+/**
+ * @param <M> type of the master object
+ */
+public abstract class AbstractComponentEditor<M> {
 	private static final String GREY_SUFFIX = "Grey"; //$NON-NLS-1$
 
 	private static final String CSS_CLASS_KEY = "org.eclipse.e4.ui.css.CssClassName"; //$NON-NLS-1$
 
-	private final WritableValue master = new WritableValue();
+	private final WritableValue<M> master = new WritableValue<>();
 
 	public static final int SEARCH_IMAGE = 0;
 	public static final int TABLE_ADD_IMAGE = 1;
@@ -112,7 +116,7 @@
 		return editor;
 	}
 
-	public WritableValue getMaster() {
+	public WritableValue<M> getMaster() {
 		return master;
 	}
 
@@ -330,7 +334,7 @@
 
 	protected abstract Composite doGetEditor(Composite parent, Object object);
 
-	public abstract IObservableList getChildList(Object element);
+	public abstract IObservableList<?> getChildList(Object element);
 
 	public FeaturePath[] getLabelProperties() {
 		return new FeaturePath[] {};
@@ -433,8 +437,8 @@
 		return contentContainer;
 	}
 
-	protected void createContributedEditorTabs(CTabFolder folder, EMFDataBindingContext context, WritableValue master,
-			Class<?> clazz) {
+	protected void createContributedEditorTabs(CTabFolder folder, EMFDataBindingContext context,
+			WritableValue<M> master, Class<? super M> clazz) {
 		final List<AbstractElementEditorContribution> contributionList = editor.getTabContributionsForClass(clazz);
 
 		for (final AbstractElementEditorContribution eec : contributionList) {
@@ -465,8 +469,11 @@
 		}
 		if (getEditor().isAutoCreateElementId()) {
 			generator = new IdGenerator();
-			generator.bind(getMaster(), EMFEditProperties.value(getEditingDomain(), attSource),
-					EMFEditProperties.value(getEditingDomain(), attId), control);
+			@SuppressWarnings("unchecked")
+			IValueProperty<M, String> addSourceProp = EMFEditProperties.value(getEditingDomain(), attSource);
+			@SuppressWarnings("unchecked")
+			IValueProperty<M, String> attIdProp = EMFEditProperties.value(getEditingDomain(), attId);
+			generator.bind(getMaster(), addSourceProp, attIdProp, control);
 		}
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/component/IdGenerator.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/component/IdGenerator.java
index 7703747..99d45a0 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/component/IdGenerator.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/component/IdGenerator.java
@@ -20,8 +20,8 @@
 
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.observable.value.IValueChangeListener;
+import org.eclipse.core.databinding.property.value.IValueProperty;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.tabs.empty.E;
-import org.eclipse.emf.databinding.edit.IEMFEditValueProperty;
 import org.eclipse.swt.events.FocusAdapter;
 import org.eclipse.swt.widgets.Control;
 
@@ -33,11 +33,11 @@
  */
 public class IdGenerator {
 
-	private IValueChangeListener listener;
-	private IObservableValue observableValue;
+	private IValueChangeListener<String> listener;
+	private IObservableValue<String> observableValue;
 	protected boolean ignore;
-	private IValueChangeListener listener2;
-	private IObservableValue observableValue2;
+	private IValueChangeListener<String> listener2;
+	private IObservableValue<String> observableValue2;
 	static Pattern patternId = Pattern.compile("^(.*\\.)\\d+$"); //$NON-NLS-1$
 
 	/**
@@ -50,8 +50,8 @@
 	 * @param control
 	 *            Optional control.
 	 */
-	public void bind(final IObservableValue master, final IEMFEditValueProperty ebpLabel,
-			final IEMFEditValueProperty evpId, Control control) {
+	public <T> void bind(final IObservableValue<T> master, final IValueProperty<T, String> ebpLabel,
+			final IValueProperty<T, String> evpId, Control control) {
 
 		// RULES
 		// Only start generating if the label is initially empty and the id ends
@@ -60,12 +60,12 @@
 		// If the id is manually changed, stop generating
 		// If the control loses focus, stop generating
 
-		final String origLabel = (String) ebpLabel.getValue(master.getValue());
+		final String origLabel = ebpLabel.getValue(master.getValue());
 		if (E.notEmpty(origLabel)) {
 			stopGenerating();
 			return;
 		}
-		String origId = (String) evpId.getValue(master.getValue());
+		String origId = evpId.getValue(master.getValue());
 		if (origId == null) {
 			origId = "id.0"; //$NON-NLS-1$
 		}
@@ -96,7 +96,7 @@
 
 		observableValue = ebpLabel.observe(master.getValue());
 		observableValue.addValueChangeListener(listener = event -> {
-			String labelValue = (String) ebpLabel.getValue(master.getValue());
+			String labelValue = ebpLabel.getValue(master.getValue());
 			if (labelValue == null) {
 				labelValue = ""; //$NON-NLS-1$
 			}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/E4Properties.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/E4Properties.java
new file mode 100644
index 0000000..f412a60
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/E4Properties.java
@@ -0,0 +1,554 @@
+/*******************************************************************************
+ * Copyright (c) 2011-2019 EclipseSource Muenchen GmbH and others.
+ *
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jens Lidestrom - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.tools.emf.ui.internal;
+
+import org.eclipse.core.databinding.property.IProperty;
+import org.eclipse.core.databinding.property.list.IListProperty;
+import org.eclipse.core.databinding.property.value.IValueProperty;
+import org.eclipse.e4.ui.model.application.MAddon;
+import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.e4.ui.model.application.MApplicationElement;
+import org.eclipse.e4.ui.model.application.MContribution;
+import org.eclipse.e4.ui.model.application.commands.MBindingContext;
+import org.eclipse.e4.ui.model.application.commands.MBindingTable;
+import org.eclipse.e4.ui.model.application.commands.MBindingTableContainer;
+import org.eclipse.e4.ui.model.application.commands.MBindings;
+import org.eclipse.e4.ui.model.application.commands.MCategory;
+import org.eclipse.e4.ui.model.application.commands.MCommand;
+import org.eclipse.e4.ui.model.application.commands.MCommandParameter;
+import org.eclipse.e4.ui.model.application.commands.MHandler;
+import org.eclipse.e4.ui.model.application.commands.MHandlerContainer;
+import org.eclipse.e4.ui.model.application.commands.MKeyBinding;
+import org.eclipse.e4.ui.model.application.commands.MKeySequence;
+import org.eclipse.e4.ui.model.application.commands.MParameter;
+import org.eclipse.e4.ui.model.application.commands.impl.CommandsPackageImpl;
+import org.eclipse.e4.ui.model.application.descriptor.basic.MPartDescriptor;
+import org.eclipse.e4.ui.model.application.descriptor.basic.MPartDescriptorContainer;
+import org.eclipse.e4.ui.model.application.descriptor.basic.impl.BasicPackageImpl;
+import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
+import org.eclipse.e4.ui.model.application.ui.MCoreExpression;
+import org.eclipse.e4.ui.model.application.ui.MElementContainer;
+import org.eclipse.e4.ui.model.application.ui.MExpression;
+import org.eclipse.e4.ui.model.application.ui.MGenericTile;
+import org.eclipse.e4.ui.model.application.ui.MGenericTrimContainer;
+import org.eclipse.e4.ui.model.application.ui.MSnippetContainer;
+import org.eclipse.e4.ui.model.application.ui.MUIElement;
+import org.eclipse.e4.ui.model.application.ui.MUILabel;
+import org.eclipse.e4.ui.model.application.ui.SideValue;
+import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
+import org.eclipse.e4.ui.model.application.ui.advanced.MPlaceholder;
+import org.eclipse.e4.ui.model.application.ui.advanced.impl.AdvancedPackageImpl;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.model.application.ui.basic.MTrimBar;
+import org.eclipse.e4.ui.model.application.ui.basic.MTrimmedWindow;
+import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
+import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
+import org.eclipse.e4.ui.model.application.ui.menu.ItemType;
+import org.eclipse.e4.ui.model.application.ui.menu.MHandledItem;
+import org.eclipse.e4.ui.model.application.ui.menu.MItem;
+import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
+import org.eclipse.e4.ui.model.application.ui.menu.MMenuContribution;
+import org.eclipse.e4.ui.model.application.ui.menu.MMenuContributions;
+import org.eclipse.e4.ui.model.application.ui.menu.MMenuElement;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolBarContribution;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolBarContributions;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolItem;
+import org.eclipse.e4.ui.model.application.ui.menu.MTrimContribution;
+import org.eclipse.e4.ui.model.application.ui.menu.MTrimContributions;
+import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl;
+import org.eclipse.e4.ui.model.fragment.MModelFragment;
+import org.eclipse.e4.ui.model.fragment.MModelFragments;
+import org.eclipse.e4.ui.model.fragment.MStringModelFragment;
+import org.eclipse.e4.ui.model.fragment.impl.FragmentPackageImpl;
+import org.eclipse.emf.databinding.EMFProperties;
+import org.eclipse.emf.databinding.edit.EMFEditProperties;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.edit.domain.EditingDomain;
+
+/**
+ * This class contains factory method for {@link IProperty} objects for features
+ * of the e4 model classes.
+ */
+public class E4Properties {
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MApplicationElement, String> elementId(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static <E extends MUIElement> IListProperty<MElementContainer<E>, E> children(EditingDomain editingDomain) {
+		return EMFEditProperties.list(editingDomain, UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static <E extends MUIElement> IListProperty<MElementContainer<E>, E> children() {
+		return EMFProperties.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static <E extends MUIElement> IValueProperty<MElementContainer<E>, E> selectedElement(
+			EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, UiPackageImpl.Literals.ELEMENT_CONTAINER__SELECTED_ELEMENT);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MUILabel, String> label(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, UiPackageImpl.Literals.UI_LABEL__LABEL);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MUIElement, Boolean> toBeRendered(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MUIElement, Boolean> visible(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, UiPackageImpl.Literals.UI_ELEMENT__VISIBLE);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MUIElement, MExpression> visibleWhen() {
+		return EMFProperties.value(UiPackageImpl.Literals.UI_ELEMENT__VISIBLE_WHEN);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MUIElement, MExpression> visibleWhen(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, UiPackageImpl.Literals.UI_ELEMENT__VISIBLE_WHEN);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MCoreExpression, String> coreExpressionId(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, UiPackageImpl.Literals.CORE_EXPRESSION__CORE_EXPRESSION_ID);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MToolItem, MMenu> menu() {
+		return EMFProperties.value(MenuPackageImpl.Literals.TOOL_ITEM__MENU);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MItem, ItemType> type(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, MenuPackageImpl.Literals.ITEM__TYPE);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MItem, Boolean> enabled(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, MenuPackageImpl.Literals.ITEM__ENABLED);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MItem, Boolean> selected(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, MenuPackageImpl.Literals.ITEM__SELECTED);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MUIElement, String> accessibilityPhrase(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MUILabel, String> tooltip(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, UiPackageImpl.Literals.UI_LABEL__TOOLTIP);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MUILabel, String> iconUri(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, UiPackageImpl.Literals.UI_LABEL__ICON_URI);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MHandledItem, MParameter> itemParameters(EditingDomain editingDomain) {
+		return EMFEditProperties.list(editingDomain, MenuPackageImpl.Literals.HANDLED_ITEM__PARAMETERS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MHandledItem, MParameter> itemParameters() {
+		return EMFProperties.list(MenuPackageImpl.Literals.HANDLED_ITEM__PARAMETERS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MHandledItem, MCommand> itemCommand(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, MenuPackageImpl.Literals.HANDLED_ITEM__COMMAND);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MHandler, MCommand> command(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, CommandsPackageImpl.Literals.HANDLER__COMMAND);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MKeyBinding, MParameter> keyBindingParameters(EditingDomain editingDomain) {
+		return EMFEditProperties.list(editingDomain, CommandsPackageImpl.Literals.KEY_BINDING__PARAMETERS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MKeySequence, String> keySequence(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, CommandsPackageImpl.Literals.KEY_SEQUENCE__KEY_SEQUENCE);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MKeyBinding, MCommand> keyBindingCommand(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, CommandsPackageImpl.Literals.KEY_BINDING__COMMAND);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MMenuContribution, String> menuParentId(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, MenuPackageImpl.Literals.MENU_CONTRIBUTION__PARENT_ID);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MMenuContribution, String> menuPositionInParent(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, MenuPackageImpl.Literals.MENU_CONTRIBUTION__POSITION_IN_PARENT);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MMenuElement, String> mnemonics(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, MenuPackageImpl.Literals.MENU_ELEMENT__MNEMONICS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MModelFragments, MModelFragment> fragments() {
+		return EMFProperties.list(FragmentPackageImpl.Literals.MODEL_FRAGMENTS__FRAGMENTS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MModelFragments, MApplicationElement> imports() {
+		return EMFProperties.list(FragmentPackageImpl.Literals.MODEL_FRAGMENTS__IMPORTS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MParameter, String> parameterValue(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, CommandsPackageImpl.Literals.PARAMETER__VALUE);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MParameter, String> parameterName(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, CommandsPackageImpl.Literals.PARAMETER__NAME);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MPartDescriptor, MMenu> partDescriptorMenus() {
+		return EMFProperties.list(BasicPackageImpl.Literals.PART_DESCRIPTOR__MENUS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MHandlerContainer, MHandler> handlers() {
+		return EMFProperties.list(CommandsPackageImpl.Literals.HANDLER_CONTAINER__HANDLERS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MPartDescriptor, MToolBar> partDescriptorToolbar() {
+		return EMFProperties.value(BasicPackageImpl.Literals.PART_DESCRIPTOR__TOOLBAR);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MUIElement, String> containerData(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, UiPackageImpl.Literals.UI_ELEMENT__CONTAINER_DATA);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MPartDescriptor, Boolean> closable(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, BasicPackageImpl.Literals.PART_DESCRIPTOR__CLOSEABLE);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MPartDescriptor, Boolean> allowMultiple(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, BasicPackageImpl.Literals.PART_DESCRIPTOR__ALLOW_MULTIPLE);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MPartDescriptor, String> category(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, BasicPackageImpl.Literals.PART_DESCRIPTOR__CATEGORY);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MPart, Boolean> partClosable(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain,
+				org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl.Literals.PART__CLOSEABLE);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MPart, MMenu> partMenus() {
+		return EMFProperties
+				.list(org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl.Literals.PART__MENUS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MPart, MToolBar> partToolbar() {
+		return EMFProperties
+				.value(org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl.Literals.PART__TOOLBAR);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MGenericTile<?>, Boolean> horizontal(
+			EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, UiPackageImpl.Literals.GENERIC_TILE__HORIZONTAL);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MPerspective, MWindow> perspectiveWindows() {
+		return EMFProperties.list(AdvancedPackageImpl.Literals.PERSPECTIVE__WINDOWS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MPlaceholder, MUIElement> ref(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, AdvancedPackageImpl.Literals.PLACEHOLDER__REF);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MPlaceholder, Boolean> placeholderClosable(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, AdvancedPackageImpl.Literals.PLACEHOLDER__CLOSEABLE);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MBindingTable, MBindingContext> bindingContext() {
+		return EMFProperties.value(CommandsPackageImpl.Literals.BINDING_TABLE__BINDING_CONTEXT);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MBindingTableContainer, MBindingTable> bindingTables() {
+		return EMFProperties.list(CommandsPackageImpl.Literals.BINDING_TABLE_CONTAINER__BINDING_TABLES);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MApplication, MCommand> applicationCommands() {
+		return EMFProperties.list(ApplicationPackageImpl.Literals.APPLICATION__COMMANDS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MPartDescriptorContainer, MPartDescriptor> descriptors() {
+		return EMFProperties.list(BasicPackageImpl.Literals.PART_DESCRIPTOR_CONTAINER__DESCRIPTORS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MApplication, MAddon> addons() {
+		return EMFProperties.list(ApplicationPackageImpl.Literals.APPLICATION__ADDONS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MMenuContributions, MMenuContribution> menuContributions() {
+		return EMFProperties.list(MenuPackageImpl.Literals.MENU_CONTRIBUTIONS__MENU_CONTRIBUTIONS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MToolBarContributions, MToolBarContribution> toolBarContributions() {
+		return EMFProperties.list(MenuPackageImpl.Literals.TOOL_BAR_CONTRIBUTIONS__TOOL_BAR_CONTRIBUTIONS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MTrimContributions, MTrimContribution> trimContributions() {
+		return EMFProperties.list(MenuPackageImpl.Literals.TRIM_CONTRIBUTIONS__TRIM_CONTRIBUTIONS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MSnippetContainer, MUIElement> snippets() {
+		return EMFProperties.list(UiPackageImpl.Literals.SNIPPET_CONTAINER__SNIPPETS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MApplication, MCategory> categories() {
+		return EMFProperties.list(ApplicationPackageImpl.Literals.APPLICATION__CATEGORIES);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MBindingTableContainer, MBindingContext> rootContext() {
+		return EMFProperties.list(CommandsPackageImpl.Literals.BINDING_TABLE_CONTAINER__ROOT_CONTEXT);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MModelFragment, MApplicationElement> elements() {
+		return (EMFProperties.list(FragmentPackageImpl.Literals.MODEL_FRAGMENT__ELEMENTS));
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MStringModelFragment, String> parentElementId(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain,
+				FragmentPackageImpl.Literals.STRING_MODEL_FRAGMENT__PARENT_ELEMENT_ID);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MStringModelFragment, String> featureName(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, FragmentPackageImpl.Literals.STRING_MODEL_FRAGMENT__FEATURENAME);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MStringModelFragment, String> positionInList(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain,
+				FragmentPackageImpl.Literals.STRING_MODEL_FRAGMENT__POSITION_IN_LIST);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MToolBarContribution, String> toolBarParentId(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, MenuPackageImpl.Literals.TOOL_BAR_CONTRIBUTION__PARENT_ID);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MToolBarContribution, String> toolBarPositionInParent(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain,
+				MenuPackageImpl.Literals.TOOL_BAR_CONTRIBUTION__POSITION_IN_PARENT);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MContribution, String> contributionURI(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, ApplicationPackageImpl.Literals.CONTRIBUTION__CONTRIBUTION_URI);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static <E extends MUIElement> IValueProperty<MGenericTrimContainer<E>, SideValue> side(
+			EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, UiPackageImpl.Literals.GENERIC_TRIM_CONTAINER__SIDE);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MTrimContribution, String> trimParentId(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, MenuPackageImpl.Literals.TRIM_CONTRIBUTION__PARENT_ID);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MTrimContribution, String> trimPositionInParent(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, MenuPackageImpl.Literals.TRIM_CONTRIBUTION__POSITION_IN_PARENT);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MTrimmedWindow, MTrimBar> trimBars() {
+		return EMFProperties.list(
+				org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl.Literals.TRIMMED_WINDOW__TRIM_BARS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MWindow, MWindow> windowWindows() {
+		return EMFProperties
+				.list(org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl.Literals.WINDOW__WINDOWS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MWindow, MUIElement> sharedElements() {
+		return EMFProperties.list(
+				org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl.Literals.WINDOW__SHARED_ELEMENTS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MWindow, MUIElement> sharedElements(EditingDomain editingDomain) {
+		return EMFEditProperties.list(editingDomain,
+				org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl.Literals.WINDOW__SHARED_ELEMENTS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MWindow, MMenu> mainMenu() {
+		return EMFProperties
+				.value(org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl.Literals.WINDOW__MAIN_MENU);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MWindow, Integer> windowX(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain,
+				org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl.Literals.WINDOW__X);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MWindow, Integer> windowY(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain,
+				org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl.Literals.WINDOW__Y);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MWindow, Integer> width(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain,
+				org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl.Literals.WINDOW__WIDTH);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MWindow, Integer> height(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain,
+				org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl.Literals.WINDOW__HEIGHT);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MBindingContext, String> bindingContextName(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, CommandsPackageImpl.Literals.BINDING_CONTEXT__NAME);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MBindingContext, String> description(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, CommandsPackageImpl.Literals.BINDING_CONTEXT__DESCRIPTION);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MBindingContext, MBindingContext> bindingContextChildren() {
+		return EMFProperties.list(CommandsPackageImpl.Literals.BINDING_CONTEXT__CHILDREN);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MBindings, MBindingContext> contexts() {
+		return EMFProperties.list(CommandsPackageImpl.Literals.BINDINGS__BINDING_CONTEXTS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MBindingContext, MBindingContext> bindingContextChildren(EditingDomain editingDomain) {
+		return EMFEditProperties.list(editingDomain, CommandsPackageImpl.Literals.BINDING_CONTEXT__CHILDREN);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MBindingTable, MKeyBinding> bindings() {
+		return EMFProperties.list(CommandsPackageImpl.Literals.BINDING_TABLE__BINDINGS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MCategory, String> categoryName(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, CommandsPackageImpl.Literals.CATEGORY__NAME);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MCategory, String> categoryDescription(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, CommandsPackageImpl.Literals.CATEGORY__DESCRIPTION);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<MCommand, MCommandParameter> commandParameters(EditingDomain editingDomain) {
+		return EMFEditProperties.list(editingDomain, CommandsPackageImpl.Literals.COMMAND__PARAMETERS);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MCommand, String> commandName(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, CommandsPackageImpl.Literals.COMMAND__COMMAND_NAME);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MCommand, String> commandDescription(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, CommandsPackageImpl.Literals.COMMAND__DESCRIPTION);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MCommand, MCategory> category() {
+		return EMFProperties.value(CommandsPackageImpl.Literals.COMMAND__CATEGORY);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MCommandParameter, String> commandParameterName(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, CommandsPackageImpl.Literals.COMMAND_PARAMETER__NAME);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IValueProperty<MCommandParameter, Boolean> optional(EditingDomain editingDomain) {
+		return EMFEditProperties.value(editingDomain, CommandsPackageImpl.Literals.COMMAND_PARAMETER__OPTIONAL);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static IListProperty<Resource, EObject> resource(EditingDomain editingDomain) {
+		return EMFEditProperties.resource(editingDomain);
+	}
+}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/ObservableColumnLabelProvider.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/ObservableColumnLabelProvider.java
index 6821490..6283bbc 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/ObservableColumnLabelProvider.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/ObservableColumnLabelProvider.java
@@ -14,6 +14,7 @@
 package org.eclipse.e4.tools.emf.ui.internal;
 
 import java.util.Set;
+
 import org.eclipse.core.databinding.observable.map.IMapChangeListener;
 import org.eclipse.core.databinding.observable.map.IObservableMap;
 import org.eclipse.core.databinding.observable.map.MapChangeEvent;
@@ -25,12 +26,12 @@
 import org.eclipse.swt.graphics.Image;
 
 public class ObservableColumnLabelProvider<M> extends CellLabelProvider {
-	private IObservableMap[] attributeMaps;
+	private IObservableMap<M, ?>[] attributeMaps;
 
-	private IMapChangeListener mapChangeListener = new IMapChangeListener() {
+	private IMapChangeListener<M, Object> mapChangeListener = new IMapChangeListener<M, Object>() {
 		@Override
-		public void handleMapChange(MapChangeEvent event) {
-			Set<?> affectedElements = event.diff.getChangedKeys();
+		public void handleMapChange(MapChangeEvent<? extends M, ?> event) {
+			Set<? extends M> affectedElements = event.diff.getChangedKeys();
 			LabelProviderChangedEvent newEvent = new LabelProviderChangedEvent(ObservableColumnLabelProvider.this, affectedElements.toArray());
 			fireLabelProviderChanged(newEvent);
 		}
@@ -41,7 +42,8 @@
 	 *
 	 * @param attributeMap
 	 */
-	public ObservableColumnLabelProvider(IObservableMap attributeMap) {
+	@SuppressWarnings("unchecked")
+	public ObservableColumnLabelProvider(IObservableMap<?, ?> attributeMap) {
 		this(new IObservableMap[] { attributeMap });
 	}
 
@@ -52,7 +54,8 @@
 	 *
 	 * @param attributeMaps
 	 */
-	protected ObservableColumnLabelProvider(IObservableMap[] attributeMaps) {
+	@SuppressWarnings("unchecked")
+	protected ObservableColumnLabelProvider(IObservableMap<M, ?>[] attributeMaps) {
 		System.arraycopy(attributeMaps, 0, this.attributeMaps = new IObservableMap[attributeMaps.length], 0, attributeMaps.length);
 		for (int i = 0; i < attributeMaps.length; i++) {
 			attributeMaps[i].addMapChangeListener(mapChangeListener);
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/AbstractPickList.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/AbstractPickList.java
index 894e012..8c227c5 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/AbstractPickList.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/AbstractPickList.java
@@ -66,12 +66,12 @@
 
 	@Deprecated
 	public AbstractPickList(Composite parent, int style, List<PickListFeatures> listFeatures, Messages messages,
-			AbstractComponentEditor componentEditor) {
+			AbstractComponentEditor<?> componentEditor) {
 		this(parent, style, listFeatures, componentEditor);
 	}
 
 	public AbstractPickList(Composite parent, int style, List<PickListFeatures> listFeatures,
-			AbstractComponentEditor componentEditor) {
+			AbstractComponentEditor<?> componentEditor) {
 
 		super(parent, style);
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ComponentLabelProvider.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ComponentLabelProvider.java
index e11f74c..b374b80 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ComponentLabelProvider.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ComponentLabelProvider.java
@@ -90,7 +90,7 @@
 		if (element instanceof EObject) {
 
 			final EObject o = (EObject) element;
-			final AbstractComponentEditor elementEditor = editor.getEditor(o.eClass());
+			final AbstractComponentEditor<?> elementEditor = editor.getEditor(o.eClass());
 			if (elementEditor != null) {
 				String label = elementEditor.getLabel(o);
 				final String detailText = elementEditor.getDetailLabel(o);
@@ -126,7 +126,7 @@
 	public Image getImage(Object element) {
 		if (element instanceof EObject) {
 			final EObject o = (EObject) element;
-			final AbstractComponentEditor elementEditor = editor.getEditor(o.eClass());
+			final AbstractComponentEditor<?> elementEditor = editor.getEditor(o.eClass());
 			if (elementEditor != null) {
 				return elementEditor.getImage(element);
 			}
@@ -136,7 +136,7 @@
 
 	@Override
 	public Font getFont(Object element) {
-		if(element instanceof VirtualEntry<?>) {
+		if (element instanceof VirtualEntry) {
 			return resourceManager.createFont(italicFontDescriptor);
 		}
 		return null;
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/E4PickList.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/E4PickList.java
index c274e34..f9200e1 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/E4PickList.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/E4PickList.java
@@ -68,7 +68,7 @@
  */
 public class E4PickList extends AbstractPickList {
 
-	AbstractComponentEditor componentEditor;
+	AbstractComponentEditor<?> componentEditor;
 	EStructuralFeature feature;
 	TableViewerFocusCellManager focusCellMgr;
 
@@ -86,12 +86,12 @@
 
 	@Deprecated
 	public E4PickList(Composite parent, int style, List<PickListFeatures> listFeatures, Messages messages,
-			AbstractComponentEditor componentEditor, final EStructuralFeature feature) {
+			AbstractComponentEditor<?> componentEditor, final EStructuralFeature feature) {
 		this(parent, style, listFeatures, componentEditor, feature);
 	}
 
 	public E4PickList(Composite parent, int style, List<PickListFeatures> listFeatures,
-			final AbstractComponentEditor componentEditor, final EStructuralFeature feature) {
+			final AbstractComponentEditor<?> componentEditor, final EStructuralFeature feature) {
 		super(parent, style, listFeatures, componentEditor);
 
 		this.componentEditor = componentEditor;
@@ -110,7 +110,7 @@
 				.setStyle(SWT.ITALIC);
 		viewer.setLabelProvider(new DelegatingStyledCellLabelProvider(
 				new ComponentLabelProvider(componentEditor.getEditor(), new Messages(), italicFontDescriptor)));
-		final ObservableListContentProvider cp = new ObservableListContentProvider();
+		final ObservableListContentProvider<?> cp = new ObservableListContentProvider<>();
 		viewer.setContentProvider(cp);
 
 		// enable tabbing and keyboard activation
@@ -273,7 +273,7 @@
 		if (viewer.getContentProvider() == null || viewer.getInput() == null) {
 			return 0;
 		}
-		return ((ObservableListContentProvider) viewer.getContentProvider()).getElements(viewer.getInput()).length;
+		return ((ObservableListContentProvider<?>) viewer.getContentProvider()).getElements(viewer.getInput()).length;
 	}
 
 	private class TableViewerEditorActivationStrategy extends ColumnViewerEditorActivationStrategy {
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/E4StringPickList.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/E4StringPickList.java
index 55ceeb3..23536a7 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/E4StringPickList.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/E4StringPickList.java
@@ -54,15 +54,17 @@
 
 	private Text text;
 	private Button tiReplace;
-	private AbstractComponentEditor editor;
+	private AbstractComponentEditor<?> editor;
 	private EStructuralFeature feature;
 
 	@Deprecated
-	public E4StringPickList(Composite parent, int flags, List<PickListFeatures> list, Messages messages, AbstractComponentEditor editor, EStructuralFeature feature) {
+	public E4StringPickList(Composite parent, int flags, List<PickListFeatures> list, Messages messages,
+			AbstractComponentEditor<?> editor, EStructuralFeature feature) {
 		this(parent, flags, list, editor, feature);
 	}
 
-	public E4StringPickList(Composite parent, int flags, List<PickListFeatures> list, AbstractComponentEditor editor,
+	public E4StringPickList(Composite parent, int flags, List<PickListFeatures> list,
+			AbstractComponentEditor<?> editor,
 			EStructuralFeature feature) {
 		super(parent, flags, Arrays.asList(PickListFeatures.NO_PICKER), editor);
 
@@ -94,7 +96,7 @@
 			}
 		});
 
-		getList().setContentProvider(new ObservableListContentProvider());
+		getList().setContentProvider(new ObservableListContentProvider<>());
 
 		text.addModifyListener(e -> updateUiState());
 
@@ -193,7 +195,7 @@
 		if (viewer.getContentProvider() == null || viewer.getInput() == null) {
 			return 0;
 		}
-		return ((ObservableListContentProvider) viewer.getContentProvider()).getElements(viewer.getInput()).length;
+		return ((ObservableListContentProvider<?>) viewer.getContentProvider()).getElements(viewer.getInput()).length;
 	}
 
 	protected Button getReplaceWidget() {
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/EClassLabelProvider.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/EClassLabelProvider.java
index 38a776a..28eb671 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/EClassLabelProvider.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/EClassLabelProvider.java
@@ -34,7 +34,7 @@
 	@Override
 	public String getText(Object element) {
 		final EClass eclass = (EClass) element;
-		final AbstractComponentEditor elementEditor = editor.getEditor(eclass);
+		final AbstractComponentEditor<?> elementEditor = editor.getEditor(eclass);
 		if (elementEditor != null) {
 			return elementEditor.getLabel(element);
 		}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/FeatureClassLabelProvider.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/FeatureClassLabelProvider.java
index fb97dc1..74c39ea 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/FeatureClassLabelProvider.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/FeatureClassLabelProvider.java
@@ -36,7 +36,7 @@
 	public String getText(Object element) {
 		final FeatureClass eFeatureClass = (FeatureClass) element;
 		final EClass eclass = eFeatureClass.eClass;
-		final AbstractComponentEditor elementEditor = editor.getEditor(eclass);
+		final AbstractComponentEditor<?> elementEditor = editor.getEditor(eclass);
 		if (elementEditor != null) {
 			return elementEditor.getLabel(null);
 		}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java
index 7a3e428..8370451 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java
@@ -35,7 +35,6 @@
 import javax.inject.Named;
 
 import org.eclipse.core.databinding.ObservablesManager;
-import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.list.WritableList;
 import org.eclipse.core.databinding.observable.map.IObservableMap;
@@ -285,13 +284,13 @@
 	 * AbstractComponentEditor instance This map is filled on the fly when getting
 	 * editors
 	 */
-	private final Map<String, AbstractComponentEditor> editors = new HashMap<>();
+	private final Map<String, AbstractComponentEditor<?>> editors = new HashMap<>();
 
 	/**
 	 * A map with key = eClass name or virtual key, value is a class of
 	 * AbstractComponentEditor. This map is filled on init by registerEditor
 	 */
-	private final Map<String, Class<? extends AbstractComponentEditor>> editorsClasses = new HashMap<>();
+	private final Map<String, Class<? extends AbstractComponentEditor<?>>> editorsClasses = new HashMap<>();
 
 	private final Map<Class<?>, List<AbstractElementEditorContribution>> tabContributions = new HashMap<>();
 	private final List<FeaturePath> labelFeaturePaths = new ArrayList<>();
@@ -353,7 +352,7 @@
 
 	private EMFDocumentResourceMediator emfDocumentProvider;
 
-	private AbstractComponentEditor currentEditor;
+	private AbstractComponentEditor<?> currentEditor;
 
 	private Listener keyListener;
 
@@ -590,7 +589,7 @@
 				final IStructuredSelection s = (IStructuredSelection) event.getSelection();
 				if (s.getFirstElement() instanceof EObject) {
 					final EObject obj = (EObject) s.getFirstElement();
-					final AbstractComponentEditor editor1 = getEditor(obj.eClass());
+					final AbstractComponentEditor<?> editor1 = getEditor(obj.eClass());
 					if (editor1 != null) {
 						currentEditor = editor1;
 						headerContainer.setText(editor1.getLabel(obj));
@@ -601,8 +600,8 @@
 						});
 					}
 				} else {
-					final VirtualEntry<?> entry = (VirtualEntry<?>) s.getFirstElement();
-					final AbstractComponentEditor editor2 = getEditor(entry.getId());
+					final VirtualEntry<?, ?> entry = (VirtualEntry<?, ?>) s.getFirstElement();
+					final AbstractComponentEditor<?> editor2 = getEditor(entry.getId());
 					if (editor2 != null) {
 						currentEditor = editor2;
 						headerContainer.setText(editor2.getLabel(entry));
@@ -630,8 +629,8 @@
 			boolean addSeparator = false;
 			if (!s.isEmpty() && noSelected == 1) {
 				List<Action> actions;
-				if (s.getFirstElement() instanceof VirtualEntry<?>) {
-					actions = getEditor(((VirtualEntry<?>) s.getFirstElement()).getId())
+				if (s.getFirstElement() instanceof VirtualEntry) {
+					actions = getEditor(((VirtualEntry<?, ?>) s.getFirstElement()).getId())
 							.getActions(s.getFirstElement());
 					if (actions.size() > 0) {
 						final MenuManager addMenu1 = new MenuManager(messages.ModelEditor_AddChild);
@@ -642,7 +641,7 @@
 						manager.add(addMenu1);
 					}
 
-					actions = getEditor(((VirtualEntry<?>) s.getFirstElement()).getId())
+					actions = getEditor(((VirtualEntry<?, ?>) s.getFirstElement()).getId())
 							.getActionsImport(s.getFirstElement());
 					if (actions.size() > 0) {
 						final MenuManager menu1 = new MenuManager(messages.ModelEditor_Import3x);
@@ -660,7 +659,7 @@
 				} else {
 
 					final EObject o = (EObject) s.getFirstElement();
-					final AbstractComponentEditor editor = getEditor(o.eClass());
+					final AbstractComponentEditor<?> editor = getEditor(o.eClass());
 
 					// Build Add Child menu
 					if (editor != null) {
@@ -720,14 +719,15 @@
 							final ArrayList<MApplicationElement> maes = new ArrayList<>();
 							for (final Object objSelect : listOfSelections) {
 								EObject container = null;
-								if (objSelect instanceof VirtualEntry<?>) {
+								if (objSelect instanceof VirtualEntry) {
 
-									final VirtualEntry<?> ve = (VirtualEntry<?>) objSelect;
-									container = (EObject) ve.getOriginalParent();
-									final IObservableList list = ve.getList();
-									final Iterator<?> iterator = list.iterator();
+									@SuppressWarnings("unchecked")
+									final VirtualEntry<EObject, MApplicationElement> ve = (VirtualEntry<EObject, MApplicationElement>) objSelect;
+									container = ve.getOriginalParent();
+									final IObservableList<MApplicationElement> list = ve.getList();
+									final Iterator<MApplicationElement> iterator = list.iterator();
 									while (iterator.hasNext()) {
-										maes.add((MApplicationElement) iterator.next());
+										maes.add(iterator.next());
 									}
 
 								} else {
@@ -1047,17 +1047,17 @@
 				.setStyle(SWT.ITALIC);
 		viewer.setLabelProvider(new DelegatingStyledCellLabelProvider(
 				new ComponentLabelProvider(this, messages, italicFontDescriptor)));
-		final ObservableListTreeContentProvider contentProvider = new ObservableListTreeContentProvider(
-				new ObservableFactoryImpl(), new TreeStructureAdvisor() {
+		final ObservableListTreeContentProvider<Object> contentProvider = new ObservableListTreeContentProvider<>(
+				new ObservableFactoryImpl(), new TreeStructureAdvisor<Object>() {
 				});
 		viewer.setContentProvider(contentProvider);
 
-		final WritableSet clearedSet = new WritableSet();
+		final WritableSet<EObject> clearedSet = new WritableSet<>();
 
 		contentProvider.getKnownElements().addSetChangeListener(event -> {
 			for (final Object o1 : event.diff.getAdditions()) {
 				if (o1 instanceof EObject) {
-					clearedSet.add(o1);
+					clearedSet.add((EObject) o1);
 				}
 			}
 
@@ -1069,7 +1069,8 @@
 		});
 
 		for (final FeaturePath p : labelFeaturePaths) {
-			final IObservableMap map = EMFProperties.value(p).observeDetail(clearedSet);
+			@SuppressWarnings("unchecked")
+			final IObservableMap<EObject, Object> map = EMFProperties.value(p).observeDetail(clearedSet);
 			map.addMapChangeListener(event -> viewer.update(event.diff.getChangedKeys().toArray(), null));
 		}
 
@@ -1118,7 +1119,7 @@
 			}
 
 			final IContributionFactory fact = context.get(IContributionFactory.class);
-			final AbstractComponentEditor editor = (AbstractComponentEditor) fact
+			final AbstractComponentEditor<?> editor = (AbstractComponentEditor<?>) fact
 					.create("bundleclass://" + el.getContributor().getName() + "/" + el.getAttribute("class"), context); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			registerEditor(el.getAttribute("id"), editor); //$NON-NLS-1$
 		}
@@ -1168,7 +1169,7 @@
 				final IEditorDescriptor desc = (IEditorDescriptor) el.createExecutableExtension("descriptorClass"); //$NON-NLS-1$
 				final EClass eClass = desc.getEClass();
 				final IContributionFactory fact = context.get(IContributionFactory.class);
-				final AbstractComponentEditor editor = (AbstractComponentEditor) fact.create(
+				final AbstractComponentEditor<?> editor = (AbstractComponentEditor<?>) fact.create(
 						"bundleclass://" + el.getContributor().getName() + "/" + desc.getEditorClass().getName(), //$NON-NLS-1$ //$NON-NLS-2$
 						context);
 				registerEditor(eClass, editor);
@@ -1341,7 +1342,7 @@
 		}
 	}
 
-	private void registerEditor(EClass eClass, Class<? extends AbstractComponentEditor> clazz) {
+	private void registerEditor(EClass eClass, Class<? extends AbstractComponentEditor<?>> clazz) {
 		registerEditor(eClass.getInstanceClassName(), clazz);
 	}
 
@@ -1351,7 +1352,7 @@
 	 * @param ley
 	 * @param clazz
 	 */
-	private void registerEditor(String key, Class<? extends AbstractComponentEditor> clazz) {
+	private void registerEditor(String key, Class<? extends AbstractComponentEditor<?>> clazz) {
 		editorsClasses.put(key, clazz);
 	}
 
@@ -1361,7 +1362,7 @@
 	 * @param instanceClassName
 	 * @param clazz
 	 */
-	private void registerEditor(String key, AbstractComponentEditor editor) {
+	private void registerEditor(String key, AbstractComponentEditor<?> editor) {
 		editors.put(key, editor);
 	}
 
@@ -1372,8 +1373,8 @@
 	 * @param eClass the eClass to get editor for
 	 * @return the {@link AbstractComponentEditor} found (never null).
 	 */
-	public AbstractComponentEditor getEditor(EClass eClass) {
-		AbstractComponentEditor editor = getEditor(eClass.getInstanceClassName(), false);
+	public AbstractComponentEditor<?> getEditor(EClass eClass) {
+		AbstractComponentEditor<?> editor = getEditor(eClass.getInstanceClassName(), false);
 
 		if (editor == null) {
 			// May be can try to use the ancestor editor if not found or the default editor
@@ -1397,7 +1398,7 @@
 
 	}
 
-	public AbstractComponentEditor getEditor(String key) {
+	public AbstractComponentEditor<?> getEditor(String key) {
 		return getEditor(key, true);
 	}
 
@@ -1410,14 +1411,14 @@
 	 * @return the {@link AbstractComponentEditor} if exists. Never null if
 	 *         createDefaultIfNull is true
 	 */
-	private AbstractComponentEditor getEditor(String key, boolean createDefaultIfNull) {
-		AbstractComponentEditor editor = editors.get(key);
+	private AbstractComponentEditor<?> getEditor(String key, boolean createDefaultIfNull) {
+		AbstractComponentEditor<?> editor = editors.get(key);
 
 		if (editor == null) {
 
 			// Editor not yet created in the map... must create instance using registered
 			// class
-			Class<? extends AbstractComponentEditor> cz = editorsClasses.get(key);
+			Class<? extends AbstractComponentEditor<?>> cz = editorsClasses.get(key);
 			if (cz != null) {
 				editor = ContextInjectionFactory.make(cz, context);
 				editors.put(key, editor);
@@ -1431,7 +1432,7 @@
 		return editor;
 	}
 
-	private void manageFeatureMap(AbstractComponentEditor editor) {
+	private void manageFeatureMap(AbstractComponentEditor<?> editor) {
 		for (final FeaturePath p : editor.getLabelProperties()) {
 			boolean found = false;
 			for (final FeaturePath tmp : labelFeaturePaths) {
@@ -1448,7 +1449,7 @@
 
 	}
 
-	public void registerEditor(EClass eClass, AbstractComponentEditor editor) {
+	public void registerEditor(EClass eClass, AbstractComponentEditor<?> editor) {
 		editors.put(eClass.getInstanceClassName(), editor);
 		manageFeatureMap(editor);
 	}
@@ -1569,10 +1570,10 @@
 
 			EStructuralFeature feature = null;
 			EObject container = null;
-			if (parent instanceof VirtualEntry<?>) {
-				final VirtualEntry<?> v = (VirtualEntry<?>) parent;
+			if (parent instanceof VirtualEntry) {
+				final VirtualEntry<EObject, ?> v = (VirtualEntry<EObject, ?>) parent;
 				feature = ((IEMFProperty) v.getProperty()).getStructuralFeature();
-				container = (EObject) v.getOriginalParent();
+				container = v.getOriginalParent();
 			} else if (parent instanceof EObject) {
 				container = (EObject) parent;
 				if (container instanceof MElementContainer<?>) {
@@ -1760,18 +1761,20 @@
 		}
 	}
 
-	public class ObservableFactoryImpl implements IObservableFactory {
+	public class ObservableFactoryImpl implements IObservableFactory<Object, IObservableList<Object>> {
 
+		@SuppressWarnings("unchecked")
 		@Override
-		public IObservable createObservable(Object target) {
+		public IObservableList<Object> createObservable(Object target) {
 			if (target instanceof IObservableList) {
-				return new WritableList((List<?>) target, Object.class);
-			} else if (target instanceof VirtualEntry<?>) {
-				return ((VirtualEntry<?>) target).getList();
+				return new WritableList<>((List<Object>) target, Object.class);
+			} else if (target instanceof VirtualEntry) {
+				return ((VirtualEntry<?, Object>) target).getList();
 			} else {
-				final AbstractComponentEditor editor = getEditor(((EObject) target).eClass());
+				final AbstractComponentEditor<EObject> editor = (AbstractComponentEditor<EObject>) getEditor(
+						((EObject) target).eClass());
 				if (editor != null) {
-					return editor.getChildList(target);
+					return (IObservableList<Object>) editor.getChildList(target);
 				}
 			}
 
@@ -1831,12 +1834,13 @@
 				if (getCurrentTarget() instanceof MElementContainer<?>) {
 					feature = UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN;
 					parent = (EObject) getCurrentTarget();
-				} else if (getCurrentTarget() instanceof VirtualEntry<?>) {
-					final VirtualEntry<?> entry = (VirtualEntry<?>) getCurrentTarget();
-					final IListProperty prop = entry.getProperty();
+				} else if (getCurrentTarget() instanceof VirtualEntry) {
+
+					final VirtualEntry<EObject, ?> entry = (VirtualEntry<EObject, ?>) getCurrentTarget();
+					final IListProperty<?, ?> prop = entry.getProperty();
 					if (prop instanceof IEMFProperty) {
 						feature = ((IEMFProperty) prop).getStructuralFeature();
-						parent = (EObject) entry.getOriginalParent();
+						parent = entry.getOriginalParent();
 
 					}
 				} else if (getCurrentTarget() instanceof EObject) {
@@ -1870,9 +1874,9 @@
 				if (item != null) {
 					final TreeItem parentItem = item.getParentItem();
 					if (parentItem != null) {
-						if (parentItem.getData() instanceof VirtualEntry<?>) {
-							final VirtualEntry<?> vE = (VirtualEntry<?>) parentItem.getData();
-							parent = (EObject) vE.getOriginalParent();
+						if (parentItem.getData() instanceof VirtualEntry) {
+							final VirtualEntry<EObject, ?> vE = (VirtualEntry<EObject, ?>) parentItem.getData();
+							parent = vE.getOriginalParent();
 							feature = ((IEMFProperty) vE.getProperty()).getStructuralFeature();
 						} else if (parentItem.getData() instanceof MElementContainer<?>) {
 							parent = (EObject) parentItem.getData();
@@ -2018,13 +2022,13 @@
 						UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN.getEGenericType());
 				return classifier.isInstance(instance);
 			}
-		} else if (target instanceof VirtualEntry<?>) {
+		} else if (target instanceof VirtualEntry) {
 			@SuppressWarnings("unchecked")
-			final VirtualEntry<Object> vTarget = (VirtualEntry<Object>) target;
+			final VirtualEntry<EObject, ?> vTarget = (VirtualEntry<EObject, ?>) target;
 			if (isIndex || !vTarget.getList().contains(instance)) {
 				if (vTarget.getProperty() instanceof IEMFProperty) {
 					final EStructuralFeature feature = ((IEMFProperty) vTarget.getProperty()).getStructuralFeature();
-					final EObject parent = (EObject) vTarget.getOriginalParent();
+					final EObject parent = vTarget.getOriginalParent();
 					final EClassifier classifier = ModelUtils.getTypeArgument(parent.eClass(),
 							feature.getEGenericType());
 					return classifier.isInstance(instance);
@@ -2065,8 +2069,8 @@
 			switch (targetHint) {
 			case TAB_FORM:
 				// make sure tree node has been instantiated
-				final ObservableListTreeContentProvider provider = (ObservableListTreeContentProvider) viewer
-				.getContentProvider();
+				final ObservableListTreeContentProvider<?> provider = (ObservableListTreeContentProvider<?>) viewer
+						.getContentProvider();
 				getFirstMatchingItem(object, provider, provider.getChildren(viewer.getInput()));
 
 				viewer.reveal(object);
@@ -2099,7 +2103,7 @@
 
 	// This will ensure the provider has created the tree node (so we can reveal
 	// it).
-	private Object getFirstMatchingItem(EObject target, ObservableListTreeContentProvider provider, Object[] items) {
+	private Object getFirstMatchingItem(EObject target, ObservableListTreeContentProvider<?> provider, Object[] items) {
 		for (int i = 0; i < items.length; i++) {
 			if (items[i] == target) {
 				return items[i];
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/TreeViewerEx.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/TreeViewerEx.java
index efa99ae..5990e7b 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/TreeViewerEx.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/TreeViewerEx.java
@@ -16,6 +16,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import org.eclipse.e4.tools.emf.ui.common.IModelResource;
 import org.eclipse.e4.tools.emf.ui.internal.common.xml.EMFDocumentResourceMediator;
 import org.eclipse.e4.ui.internal.workbench.E4XMIResource;
@@ -48,9 +49,9 @@
 			public void documentChanged(DocumentEvent event) {
 				try {
 					// restore Nodes from XmiIds
-					E4XMIResource xmiResource = (E4XMIResource) ((EObject) modelProvider.getRoot().get(0)).eResource();
+					E4XMIResource xmiResource = (E4XMIResource) modelProvider.getRoot().get(0).eResource();
 					ArrayList<Object> newElements = new ArrayList<>();
-					ObservableListTreeContentProvider provider = (ObservableListTreeContentProvider) getContentProvider();
+					ObservableListTreeContentProvider<?> provider = (ObservableListTreeContentProvider<?>) getContentProvider();
 					Object[] children = new Object[] { modelProvider.getRoot().get(0) };
 					for (String id : elementsIds) {
 						EObject eObject = xmiResource.getEObject(id);
@@ -90,7 +91,7 @@
 					// Stash XmiIds
 					Object[] elements = getExpandedElements();
 					List<?> selected = ((IStructuredSelection) getSelection()).toList();
-					E4XMIResource xmiResource = (E4XMIResource) ((EObject) modelProvider.getRoot().get(0)).eResource();
+					E4XMIResource xmiResource = (E4XMIResource) modelProvider.getRoot().get(0).eResource();
 					elementsIds = new ArrayList<>();
 					selectedIds = new ArrayList<>();
 					for (Object obj : elements) {
@@ -112,7 +113,8 @@
 
 	// This will ensure the provider has created the tree node (so we can reveal
 	// it).
-	static public Object getFirstMatchingItem(EObject target, ObservableListTreeContentProvider provider, Object[] items) {
+	static public Object getFirstMatchingItem(EObject target, ObservableListTreeContentProvider<?> provider,
+			Object[] items) {
 		for (int i = 0; i < items.length; i++) {
 			if (items[i] == target) {
 				return items[i];
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/VirtualEntry.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/VirtualEntry.java
index d25932d..7c26874 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/VirtualEntry.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/VirtualEntry.java
@@ -23,26 +23,30 @@
 import org.eclipse.core.databinding.observable.list.WritableList;
 import org.eclipse.core.databinding.property.list.IListProperty;
 
-public abstract class VirtualEntry<M> {
+/**
+ * @param <P> type of the parent object
+ * @param <E> type of the child elements of the parent
+ */
+public class VirtualEntry<P, E> {
 	private String id;
-	private Object originalParent;
+	private P originalParent;
 	private String label;
-	private IObservableList list;
-	private IListProperty property;
+	private IObservableList<E> list;
+	private IListProperty<? super P, E> property;
 
-	public VirtualEntry(String id, IListProperty property, Object originalParent, String label) {
+	public VirtualEntry(String id, IListProperty<? super P, E> property, P originalParent, String label) {
 		this.id = id;
 		this.originalParent = originalParent;
 		this.label = label;
 		this.property = property;
-		this.list = new WritableList();
-		final IObservableList origList = property.observe(originalParent);
+		this.list = new WritableList<>();
+		final IObservableList<E> origList = property.observe(originalParent);
 		list.addAll(cleanedList(origList));
 
-		final IListChangeListener listener = event -> {
+		final IListChangeListener<E> listener = event -> {
 			if (!VirtualEntry.this.list.isDisposed()) {
-				List<Object> clean = cleanedList(event.getObservableList());
-				ListDiff diff = Diffs.computeListDiff(VirtualEntry.this.list, clean);
+				List<E> clean = cleanedList(event.getObservableList());
+				ListDiff<E> diff = Diffs.computeListDiff(VirtualEntry.this.list, clean);
 				diff.applyTo(VirtualEntry.this.list);
 			}
 		};
@@ -50,16 +54,15 @@
 		origList.addListChangeListener(listener);
 	}
 
-	public IListProperty getProperty() {
+	public IListProperty<? super P, E> getProperty() {
 		return property;
 	}
 
-	@SuppressWarnings("unchecked")
-	private List<Object> cleanedList(IObservableList list) {
-		List<Object> l = new ArrayList<>(list.size());
+	private List<E> cleanedList(IObservableList<? extends E> list) {
+		List<E> l = new ArrayList<>(list.size());
 
-		for (Object o : list) {
-			if (accepted((M) o)) {
+		for (E o : list) {
+			if (accepted(o)) {
 				l.add(o);
 			}
 		}
@@ -67,13 +70,18 @@
 		return l;
 	}
 
-	protected abstract boolean accepted(M o);
+	/**
+	 * Can be overridden to filter the child elements.
+	 */
+	protected boolean accepted(E o) {
+		return true;
+	}
 
-	public IObservableList getList() {
+	public IObservableList<E> getList() {
 		return list;
 	}
 
-	public Object getOriginalParent() {
+	public P getOriginalParent() {
 		return originalParent;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/AddonsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/AddonsEditor.java
index f261d2f..172c555 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/AddonsEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/AddonsEditor.java
@@ -25,6 +25,7 @@
 import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.objectdata.ObjectViewer;
 import org.eclipse.e4.ui.model.application.MAddon;
@@ -32,10 +33,9 @@
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
@@ -46,8 +46,9 @@
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Text;
 
-public class AddonsEditor extends AbstractComponentEditor {
+public class AddonsEditor extends AbstractComponentEditor<MAddon> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 
@@ -118,11 +119,12 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MAddon) object);
 		return composite;
 	}
 
-	protected Composite createForm(Composite parent, EMFDataBindingContext context, IObservableValue master,
+	protected Composite createForm(Composite parent, EMFDataBindingContext context,
+			IObservableValue<MAddon> master,
 			boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
@@ -132,7 +134,7 @@
 		parent = createScrollableContainer(folder);
 		item.setControl(parent.getParent());
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (getEditor().isShowXMIId() || getEditor().isLiveModel()) {
 			ControlFactory.createXMIId(parent, this);
@@ -145,9 +147,7 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
-
+				E4Properties.elementId(getEditingDomain()));
 
 		ControlFactory.createClassURIField(parent, Messages, this, Messages.AddonsEditor_ClassURI,
 				ApplicationPackageImpl.Literals.CONTRIBUTION__CONTRIBUTION_URI,
@@ -192,7 +192,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ApplicationEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ApplicationEditor.java
index b8b6431..1fefd72 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ApplicationEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ApplicationEditor.java
@@ -25,10 +25,10 @@
 
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.list.WritableList;
-import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.ComponentLabelProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.ModelEditor;
@@ -40,7 +40,6 @@
 import org.eclipse.e4.ui.model.application.commands.MKeyBinding;
 import org.eclipse.e4.ui.model.application.commands.impl.CommandsFactoryImpl;
 import org.eclipse.e4.ui.model.application.commands.impl.CommandsPackageImpl;
-import org.eclipse.e4.ui.model.application.descriptor.basic.impl.BasicPackageImpl;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.menu.ItemType;
@@ -49,15 +48,13 @@
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl;
 import org.eclipse.emf.common.command.CompoundCommand;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.edit.command.AddCommand;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.resource.FontDescriptor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.ArrayContentProvider;
@@ -83,39 +80,11 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class ApplicationEditor extends AbstractComponentEditor {
+public class ApplicationEditor extends AbstractComponentEditor<MApplication> {
 
 	private Composite composite;
 	private EMFDataBindingContext context;
 
-	private final IListProperty HANDLER_CONTAINER__HANDLERS = EMFProperties
-			.list(CommandsPackageImpl.Literals.HANDLER_CONTAINER__HANDLERS);
-	private final IListProperty BINDING_CONTAINER__BINDINGS = EMFProperties
-			.list(CommandsPackageImpl.Literals.BINDING_TABLE_CONTAINER__BINDING_TABLES);
-	private final IListProperty APPLICATION__COMMANDS = EMFProperties
-			.list(ApplicationPackageImpl.Literals.APPLICATION__COMMANDS);
-	// private IListProperty APPLICATION__DIALOGS =
-	// EMFProperties.list(ApplicationPackageImpl.Literals.APPLICATION__DIALOGS);
-	private final IListProperty PART_DESCRIPTOR_CONTAINER__DESCRIPTORS = EMFProperties
-			.list(BasicPackageImpl.Literals.PART_DESCRIPTOR_CONTAINER__DESCRIPTORS);
-	private final IListProperty ELEMENT_CONTAINER__CHILDREN = EMFProperties
-			.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
-	private final IListProperty APPLICATION__ADDONS = EMFProperties
-			.list(ApplicationPackageImpl.Literals.APPLICATION__ADDONS);
-	private final IListProperty MENU_CONTRIBUTIONS = EMFProperties
-			.list(MenuPackageImpl.Literals.MENU_CONTRIBUTIONS__MENU_CONTRIBUTIONS);
-	private final IListProperty TOOLBAR_CONTRIBUTIONS = EMFProperties
-			.list(MenuPackageImpl.Literals.TOOL_BAR_CONTRIBUTIONS__TOOL_BAR_CONTRIBUTIONS);
-	private final IListProperty TRIM_CONTRIBUTIONS = EMFProperties
-			.list(MenuPackageImpl.Literals.TRIM_CONTRIBUTIONS__TRIM_CONTRIBUTIONS);
-	private final IListProperty APPLICATION__SNIPPETS = EMFProperties
-			.list(UiPackageImpl.Literals.SNIPPET_CONTAINER__SNIPPETS);
-	private final IListProperty APPLICATION__CATEGORIES = EMFProperties
-			.list(ApplicationPackageImpl.Literals.APPLICATION__CATEGORIES);
-
-	private final IListProperty BINDING_TABLE_CONTAINER__ROOT_CONTEXT = EMFProperties
-			.list(CommandsPackageImpl.Literals.BINDING_TABLE_CONTAINER__ROOT_CONTEXT);
-
 	@Inject
 	@Optional
 	private IProject project;
@@ -143,8 +112,7 @@
 	}
 
 	void doCreateCommandWizard() {
-		final WizardDialog dialog = new WizardDialog(composite.getShell(), new CommandWizard((MApplication) getMaster()
-				.getValue()));
+		final WizardDialog dialog = new WizardDialog(composite.getShell(), new CommandWizard(getMaster().getValue()));
 		dialog.open();
 	}
 
@@ -169,7 +137,7 @@
 			context = new EMFDataBindingContext();
 			composite = createForm(parent, context);
 		}
-		getMaster().setValue(object);
+		getMaster().setValue((MApplication) object);
 
 		return composite;
 	}
@@ -183,25 +151,22 @@
 		parent = createScrollableContainer(folder);
 		item.setControl(parent.getParent());
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (getEditor().isShowXMIId() || getEditor().isLiveModel()) {
 			ControlFactory.createXMIId(parent, this);
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, getMaster(), context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 
 		ControlFactory.createBindingContextWiget(parent, Messages, this, Messages.ApplicationEditor_BindingContexts);
 		ControlFactory.createMapProperties(parent, Messages, this, Messages.ModelTooling_Context_Properties,
 				UiPackageImpl.Literals.CONTEXT__PROPERTIES, VERTICAL_LIST_WIDGET_INDENT);
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED));
+				WidgetProperties.buttonSelection(), E4Properties.toBeRendered(getEditingDomain()));
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE));
+				WidgetProperties.buttonSelection(), E4Properties.visible(getEditingDomain()));
 
 		item = new CTabItem(folder, SWT.NONE);
 		item.setText(Messages.ModelTooling_Common_TabSupplementary);
@@ -210,8 +175,7 @@
 		item.setControl(parent.getParent());
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(),
-				context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE));
+				context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
 		ControlFactory.createStringListWidget(parent, Messages, this, Messages.ModelTooling_Context_Variables,
 				UiPackageImpl.Literals.CONTEXT__VARIABLES, VERTICAL_LIST_WIDGET_INDENT);
 		ControlFactory.createStringListWidget(parent, Messages, this, Messages.AddonsEditor_Tags,
@@ -244,118 +208,34 @@
 	}
 
 	@Override
-	public IObservableList getChildList(final Object element) {
-		final WritableList list = new WritableList();
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_ADDONS, APPLICATION__ADDONS, element,
-				Messages.ApplicationEditor_Addons) {
+	public IObservableList<?> getChildList(final Object element) {
+		final WritableList<VirtualEntry<MApplication, ?>> list = new WritableList<>();
 
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-
-		});
-
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_ROOT_CONTEXTS, BINDING_TABLE_CONTAINER__ROOT_CONTEXT,
-				element, Messages.ApplicationEditor_RootContexts) {
-
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-
-		});
-
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_BINDING_TABLE, BINDING_CONTAINER__BINDINGS, element,
-				Messages.ApplicationEditor_BindingTables) {
-
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-
-		});
-
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_HANDLER, HANDLER_CONTAINER__HANDLERS, element,
-				Messages.ApplicationEditor_Handlers) {
-
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-
-		});
-
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_COMMAND, APPLICATION__COMMANDS, element,
-				Messages.ApplicationEditor_Commands) {
-
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-		});
-
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_CATEGORIES, APPLICATION__CATEGORIES, element,
-				Messages.ApplicationEditor_Categories) {
-
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-		});
-
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_APPLICATION_WINDOWS, ELEMENT_CONTAINER__CHILDREN,
-				element, Messages.ApplicationEditor_Windows) {
-
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-
-		});
-
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_PART_DESCRIPTORS, PART_DESCRIPTOR_CONTAINER__DESCRIPTORS,
-				element, Messages.ApplicationEditor_PartDescriptors) {
-
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-
-		});
-
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_MENU_CONTRIBUTIONS, MENU_CONTRIBUTIONS, element,
-				Messages.ApplicationEditor_MenuContributions) {
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-		});
-
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_TOOLBAR_CONTRIBUTIONS, TOOLBAR_CONTRIBUTIONS, element,
-				Messages.ApplicationEditor_ToolBarContributions) {
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-		});
-
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_TRIM_CONTRIBUTIONS, TRIM_CONTRIBUTIONS, element,
-				Messages.ApplicationEditor_TrimContributions) {
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-		});
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_SNIPPETS, APPLICATION__SNIPPETS, element,
-				Messages.ApplicationEditor_Snippets) {
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-		});
-		//
-		// MApplication application = (MApplication) element;
+		MApplication application = (MApplication) element;
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_ADDONS, E4Properties.addons(), application,
+				Messages.ApplicationEditor_Addons));
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_ROOT_CONTEXTS, E4Properties.rootContext(), application,
+				Messages.ApplicationEditor_RootContexts));
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_BINDING_TABLE, E4Properties.bindingTables(), application,
+				Messages.ApplicationEditor_BindingTables));
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_HANDLER, E4Properties.handlers(), application,
+				Messages.ApplicationEditor_Handlers));
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_COMMAND, E4Properties.applicationCommands(), application,
+				Messages.ApplicationEditor_Commands));
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_CATEGORIES, E4Properties.categories(), application,
+				Messages.ApplicationEditor_Categories));
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_APPLICATION_WINDOWS, E4Properties.children(), application,
+				Messages.ApplicationEditor_Windows));
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_PART_DESCRIPTORS, E4Properties.descriptors(), application,
+				Messages.ApplicationEditor_PartDescriptors));
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_MENU_CONTRIBUTIONS, E4Properties.menuContributions(),
+				application, Messages.ApplicationEditor_MenuContributions));
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_TOOLBAR_CONTRIBUTIONS, E4Properties.toolBarContributions(),
+				application, Messages.ApplicationEditor_ToolBarContributions));
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_TRIM_CONTRIBUTIONS, E4Properties.trimContributions(),
+				application, Messages.ApplicationEditor_TrimContributions));
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_SNIPPETS, E4Properties.snippets(), application,
+				Messages.ApplicationEditor_Snippets));
 		// if (application.getRootContext() != null) {
 		// list.add(0, application.getRootContext());
 		// }
@@ -766,7 +646,7 @@
 
 			String label = ""; //$NON-NLS-1$
 			Image img = null;
-			AbstractComponentEditor elementEditor = getEditor().getEditor(o.eClass());
+			AbstractComponentEditor<?> elementEditor = getEditor().getEditor(o.eClass());
 			if (elementEditor != null) {
 				label = elementEditor.getDetailLabel(o);
 				label = label == null ? elementEditor.getLabel(o) : label;
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/AreaEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/AreaEditor.java
index 9d818a7..72548b3 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/AreaEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/AreaEditor.java
@@ -24,42 +24,39 @@
 
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.tools.emf.ui.common.ImageTooltip;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList;
 import org.eclipse.e4.tools.emf.ui.internal.common.EClassLabelProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.ControlFactory.TextPasteHandler;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.AreaIconDialogEditor;
 import org.eclipse.e4.tools.emf.ui.internal.common.uistructure.UIViewer;
-import org.eclipse.e4.ui.model.application.MApplicationElement;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.MUILabel;
 import org.eclipse.e4.ui.model.application.ui.advanced.MArea;
 import org.eclipse.e4.ui.model.application.ui.advanced.impl.AdvancedPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.basic.MPartSashContainer;
+import org.eclipse.e4.ui.model.application.ui.basic.MPartSashContainerElement;
 import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.IEMFListProperty;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.edit.command.AddCommand;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.databinding.viewers.IViewerValueProperty;
-import org.eclipse.jface.databinding.viewers.ViewerProperties;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.ComboViewer;
 import org.eclipse.jface.viewers.LabelProvider;
@@ -81,13 +78,10 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class AreaEditor extends AbstractComponentEditor {
+public class AreaEditor extends AbstractComponentEditor<MArea> {
 
 	private Composite composite;
 	private EMFDataBindingContext context;
-
-	private final IListProperty ELEMENT_CONTAINER__CHILDREN = EMFProperties
-			.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
 	private StackLayout stackLayout;
 
 	private final List<Action> actions = new ArrayList<>();
@@ -190,11 +184,11 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MArea) object);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, final EMFDataBindingContext context, WritableValue master,
+	private Composite createForm(Composite parent, final EMFDataBindingContext context, WritableValue<MArea> master,
 			boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
@@ -208,7 +202,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -217,12 +211,11 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, getMaster(), context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.AreaEditor_LabelLabel, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__LABEL));
+				E4Properties.label(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.AreaEditor_Tooltip, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__TOOLTIP));
+				E4Properties.tooltip(getEditingDomain()));
 
 		// ------------------------------------------------------------
 		{
@@ -233,10 +226,8 @@
 			final Text t = new Text(parent, SWT.BORDER);
 			TextPasteHandler.createFor(t);
 			t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-			context.bindValue(
-					textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__ICON_URI).observeDetail(
-							master));
+			context.bindValue(textProp.observeDelayed(200, t),
+					E4Properties.iconUri(getEditingDomain()).observeDetail(master));
 
 			new ImageTooltip(t, Messages, this);
 
@@ -245,7 +236,7 @@
 				@Override
 				public void widgetSelected(SelectionEvent e) {
 					final AreaIconDialogEditor dialog = new AreaIconDialogEditor(b.getShell(), eclipseContext, project,
-							getEditingDomain(), (MApplicationElement) getMaster().getValue(), Messages);
+							getEditingDomain(), getMaster().getValue(), Messages);
 					dialog.open();
 				}
 			});
@@ -270,15 +261,16 @@
 				}
 			});
 			viewer.setInput(new Boolean[] { Boolean.TRUE, Boolean.FALSE });
-			final IViewerValueProperty vProp = ViewerProperties.singleSelection();
+			final IViewerValueProperty<ComboViewer, Boolean> vProp = ViewerProperties.singleSelection();
+
 			context.bindValue(vProp.observe(viewer),
-					EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.GENERIC_TILE__HORIZONTAL)
-					.observeDetail(getMaster()));
+					E4Properties.horizontal(getEditingDomain()).observeDetail(getMaster()));
 		}
 
 		ControlFactory.createSelectedElement(parent, this, context, Messages.AreaEditor_SelectedElement);
+
 		ControlFactory.createTextField(parent, Messages.AreaEditor_ContainerData, getMaster(), context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__CONTAINER_DATA));
+				E4Properties.containerData(getEditingDomain()));
 
 		{
 			final E4PickList pickList = new E4PickList(parent, SWT.NONE, null, this,
@@ -294,8 +286,7 @@
 
 			final TableViewer viewer = pickList.getList();
 
-			final IEMFListProperty prop = EMFProperties.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
-			viewer.setInput(prop.observeDetail(getMaster()));
+			viewer.setInput(E4Properties.<MPartSashContainerElement>children().observeDetail(getMaster()));
 
 			pickList.setLabelProvider(new EClassLabelProvider(getEditor()));
 			pickList.setInput(new EClass[] { BasicPackageImpl.Literals.PART_SASH_CONTAINER,
@@ -306,11 +297,9 @@
 		}
 
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED));
+				WidgetProperties.selection(), E4Properties.toBeRendered(getEditingDomain()));
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE));
+				WidgetProperties.selection(), E4Properties.visible(getEditingDomain()));
 
 		item = new CTabItem(folder, SWT.NONE);
 		item.setText(Messages.ModelTooling_Common_TabSupplementary);
@@ -319,8 +308,7 @@
 		item.setControl(parent.getParent());
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(),
-				context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE));
+				context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
 		ControlFactory.createStringListWidget(parent, Messages, this, Messages.ModelTooling_ApplicationElement_Tags,
 				ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__TAGS, VERTICAL_LIST_WIDGET_INDENT);
 		ControlFactory.createMapProperties(parent, Messages, this, Messages.ModelTooling_Contribution_PersistedState,
@@ -364,8 +352,8 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		return ELEMENT_CONTAINER__CHILDREN.observe(element);
+	public IObservableList<?> getChildList(Object element) {
+		return E4Properties.<MPartSashContainerElement>children().observe((MArea) element);
 	}
 
 	@Override
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/BindingContextEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/BindingContextEditor.java
index 3ed260f..cfb1ed7 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/BindingContextEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/BindingContextEditor.java
@@ -24,9 +24,9 @@
 
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.AbstractPickList.PickListFeatures;
 import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList;
@@ -36,15 +36,12 @@
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.IEMFListProperty;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.edit.command.AddCommand;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.swt.SWT;
@@ -55,14 +52,13 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Text;
 
-public class BindingContextEditor extends AbstractComponentEditor {
+public class BindingContextEditor extends AbstractComponentEditor<MBindingContext> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 
 	private StackLayout stackLayout;
-	private final IListProperty BINDING_CONTEXT__CHILDREN = EMFProperties
-			.list(CommandsPackageImpl.Literals.BINDING_CONTEXT__CHILDREN);
 
 	private final List<Action> actions = new ArrayList<>();
 
@@ -143,13 +139,14 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MBindingContext) object);
 		enableIdGenerator(CommandsPackageImpl.Literals.BINDING_CONTEXT__NAME,
 				ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID, null);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master, boolean isImport) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue<MBindingContext> master,
+			boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -158,7 +155,7 @@
 		parent = createScrollableContainer(folder);
 		item.setControl(parent.getParent());
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (getEditor().isShowXMIId() || getEditor().isLiveModel()) {
 			ControlFactory.createXMIId(parent, this);
@@ -171,13 +168,12 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.BindingContextEditor_Name, null, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(), CommandsPackageImpl.Literals.BINDING_CONTEXT__NAME),
-				Messages.BindingContextEditor_NameWarning, FieldDecorationRegistry.DEC_ERROR);
-		ControlFactory.createTextField(parent, Messages.BindingContextEditor_Description, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(), CommandsPackageImpl.Literals.BINDING_CONTEXT__DESCRIPTION));
+				E4Properties.bindingContextName(getEditingDomain()), Messages.BindingContextEditor_NameWarning,
+				FieldDecorationRegistry.DEC_ERROR);
+		ControlFactory.createTextField(parent, Messages.BindingContextEditor_Description,
+				master, context, textProp, E4Properties.description(getEditingDomain()));
 
 		final E4PickList pickList = new E4PickList(parent, SWT.NONE, Arrays.asList(PickListFeatures.NO_PICKER),
 				this, CommandsPackageImpl.Literals.BINDING_CONTEXT__CHILDREN) {
@@ -195,9 +191,8 @@
 		pickList.setText(Messages.BindingContextEditor_Subcontexts);
 
 		final TableViewer viewer = pickList.getList();
-		final IEMFListProperty prop = EMFEditProperties.list(getEditingDomain(),
-				CommandsPackageImpl.Literals.BINDING_CONTEXT__CHILDREN);
-		viewer.setInput(prop.observeDetail(master));
+
+		viewer.setInput(E4Properties.bindingContextChildren(getEditingDomain()).observeDetail(master));
 
 		item = new CTabItem(folder, SWT.NONE);
 		item.setText(Messages.ModelTooling_Common_TabSupplementary);
@@ -218,8 +213,8 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		return BINDING_CONTEXT__CHILDREN.observe(element);
+	public IObservableList<?> getChildList(Object element) {
+		return E4Properties.bindingContextChildren().observe((MBindingContext) element);
 	}
 
 	protected void handleAddContext() {
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/BindingTableEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/BindingTableEditor.java
index 328b44d..ce69275 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/BindingTableEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/BindingTableEditor.java
@@ -24,9 +24,9 @@
 
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.AbstractPickList.PickListFeatures;
 import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList;
@@ -38,16 +38,13 @@
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.IEMFListProperty;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.edit.command.AddCommand;
 import org.eclipse.emf.edit.command.SetCommand;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.window.Window;
 import org.eclipse.swt.SWT;
@@ -64,13 +61,10 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class BindingTableEditor extends AbstractComponentEditor {
+public class BindingTableEditor extends AbstractComponentEditor<MBindingTable> {
 
 	private Composite composite;
 	private EMFDataBindingContext context;
-
-	private final IListProperty BINDING_TABLE__BINDINGS = EMFProperties
-			.list(CommandsPackageImpl.Literals.BINDING_TABLE__BINDINGS);
 	private StackLayout stackLayout;
 	private final List<Action> actions = new ArrayList<>();
 
@@ -134,11 +128,12 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MBindingTable) object);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, IObservableValue master,
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			IObservableValue<MBindingTable> master,
 			boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
@@ -148,7 +143,7 @@
 		parent = createScrollableContainer(folder);
 		item.setControl(parent.getParent());
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (getEditor().isShowXMIId() || getEditor().isLiveModel()) {
 			ControlFactory.createXMIId(parent, this);
@@ -169,10 +164,8 @@
 			final GridData gd = new GridData(GridData.FILL_HORIZONTAL);
 			gd.horizontalSpan = 2;
 			t.setLayoutData(gd);
-			context.bindValue(
-					textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(),
-							ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID).observeDetail(getMaster()));
+			context.bindValue(textProp.observeDelayed(200, t),
+					E4Properties.elementId(getEditingDomain()).observeDetail(getMaster()));
 		}
 
 		{
@@ -183,12 +176,16 @@
 			final Text t = new Text(parent, SWT.BORDER);
 			t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			t.setEditable(false);
-			context.bindValue(
-					textProp.observeDelayed(200, t),
-					EMFEditProperties.value(
-							getEditingDomain(),
-							FeaturePath.fromList(CommandsPackageImpl.Literals.BINDING_TABLE__BINDING_CONTEXT,
-									ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID)).observeDetail(getMaster()));
+
+			//			@SuppressWarnings("unchecked")
+			//			IValueProperty<MBindingTable, String> elemId = EMFEditProperties.value(getEditingDomain(),
+			//					FeaturePath.fromList(CommandsPackageImpl.Literals.BINDING_TABLE__BINDING_CONTEXT,
+			//							ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+			//			context.bindValue(textProp.observeDelayed(200, t), elemId.observeDetail(getMaster()));
+
+			// TODO: Verify that this works
+			context.bindValue(textProp.observeDelayed(200, t), E4Properties.bindingContext()
+					.value(E4Properties.elementId(getEditingDomain())).observeDetail(getMaster()));
 
 			Button b = ControlFactory.createFindButton(parent, resourcePool);
 			b.addSelectionListener(new SelectionAdapter() {
@@ -225,8 +222,7 @@
 
 			final TableViewer viewer = pickList.getList();
 
-			final IEMFListProperty prop = EMFProperties.list(CommandsPackageImpl.Literals.BINDING_TABLE__BINDINGS);
-			viewer.setInput(prop.observeDetail(getMaster()));
+			viewer.setInput(E4Properties.bindings().observeDetail(getMaster()));
 		}
 
 		item = new CTabItem(folder, SWT.NONE);
@@ -248,8 +244,8 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		return BINDING_TABLE__BINDINGS.observe(element);
+	public IObservableList<?> getChildList(Object element) {
+		return E4Properties.bindings().observe((MBindingTable) element);
 	}
 
 	@Override
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CategoryEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CategoryEditor.java
index 6db8757..9df3375 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CategoryEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CategoryEditor.java
@@ -21,15 +21,15 @@
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.ui.model.application.commands.MCategory;
 import org.eclipse.e4.ui.model.application.commands.impl.CommandsPackageImpl;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
 import org.eclipse.swt.custom.CTabItem;
@@ -37,8 +37,9 @@
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Text;
 
-public class CategoryEditor extends AbstractComponentEditor {
+public class CategoryEditor extends AbstractComponentEditor<MCategory> {
 
 	private Composite composite;
 	private EMFDataBindingContext context;
@@ -98,13 +99,13 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MCategory) object);
 		enableIdGenerator(CommandsPackageImpl.Literals.CATEGORY__NAME,
 				ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID, null);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, IObservableValue master,
+	private Composite createForm(Composite parent, EMFDataBindingContext context, IObservableValue<MCategory> master,
 			boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
@@ -114,7 +115,7 @@
 		parent = createScrollableContainer(folder);
 		item.setControl(parent.getParent());
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (getEditor().isShowXMIId() || getEditor().isLiveModel()) {
 			ControlFactory.createXMIId(parent, this);
@@ -127,12 +128,11 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.CategoryEditor_Name, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(), CommandsPackageImpl.Literals.CATEGORY__NAME));
+				E4Properties.categoryName(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.CategoryEditor_Description, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(), CommandsPackageImpl.Literals.CATEGORY__DESCRIPTION));
+				E4Properties.categoryDescription(getEditingDomain()));
 
 		item = new CTabItem(folder, SWT.NONE);
 		item.setText(Messages.ModelTooling_Common_TabSupplementary);
@@ -153,7 +153,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CommandEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CommandEditor.java
index 6a35019..a453701 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CommandEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CommandEditor.java
@@ -27,6 +27,7 @@
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.AbstractPickList.PickListFeatures;
 import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList;
@@ -40,13 +41,11 @@
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
-import org.eclipse.emf.databinding.edit.IEMFEditListProperty;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.edit.command.AddCommand;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
@@ -62,7 +61,7 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class CommandEditor extends AbstractComponentEditor {
+public class CommandEditor extends AbstractComponentEditor<MCommand> {
 
 	private Composite composite;
 	private EMFDataBindingContext context;
@@ -70,9 +69,6 @@
 	private final List<Action> actions = new ArrayList<>();
 	private MessageFormat newCommandParameterName;
 
-	private final IEMFEditListProperty COMMAND__PARAMETERS = EMFEditProperties.list(getEditingDomain(),
-			CommandsPackageImpl.Literals.COMMAND__PARAMETERS);
-
 	@Inject
 	public CommandEditor() {
 		super();
@@ -135,13 +131,13 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MCommand) object);
 		enableIdGenerator(CommandsPackageImpl.Literals.COMMAND__COMMAND_NAME,
 				ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID, null);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, IObservableValue master,
+	private Composite createForm(Composite parent, EMFDataBindingContext context, IObservableValue<MCommand> master,
 			boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
@@ -151,7 +147,7 @@
 		parent = createScrollableContainer(folder);
 		item.setControl(parent.getParent());
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (getEditor().isShowXMIId() || getEditor().isLiveModel()) {
 			ControlFactory.createXMIId(parent, this);
@@ -164,13 +160,12 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id,
-				Messages.ModelTooling_CommandId_tooltip, master, context, textProp, EMFEditProperties.value(
-						getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID),
-				Messages.ModelTooling_Empty_Warning);
+				Messages.ModelTooling_CommandId_tooltip, master, context, textProp,
+				E4Properties.elementId(getEditingDomain()), Messages.ModelTooling_Empty_Warning);
 		ControlFactory.createTextField(parent, Messages.CommandEditor_Name, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(), CommandsPackageImpl.Literals.COMMAND__COMMAND_NAME));
+				E4Properties.commandName(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.CommandEditor_LabelDescription, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(), CommandsPackageImpl.Literals.COMMAND__DESCRIPTION));
+				E4Properties.commandDescription(getEditingDomain()));
 
 		// ------------------------------------------------------------
 		{
@@ -183,19 +178,16 @@
 			final GridData gd = new GridData(GridData.FILL_HORIZONTAL);
 			t.setLayoutData(gd);
 			t.setEditable(false);
-			context.bindValue(
-					textProp.observeDelayed(200, t),
-					EMFEditProperties.value(
-							getEditingDomain(),
-							FeaturePath.fromList(CommandsPackageImpl.Literals.COMMAND__CATEGORY,
-									ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID)).observeDetail(getMaster()));
+			// TODO: Verify that this works
+			context.bindValue(textProp.observeDelayed(200, t), E4Properties.category()
+					.value(E4Properties.elementId(getEditingDomain())).observeDetail(getMaster()));
 
 			Button b = ControlFactory.createFindButton(parent, resourcePool);
 			b.addSelectionListener(new SelectionAdapter() {
 				@Override
 				public void widgetSelected(SelectionEvent e) {
 					final CommandCategorySelectionDialog dialog = new CommandCategorySelectionDialog(b.getShell(),
-							getEditor().getModelProvider(), (MCommand) getMaster().getValue(), Messages);
+							getEditor().getModelProvider(), getMaster().getValue(), Messages);
 					dialog.open();
 				}
 			});
@@ -221,9 +213,7 @@
 
 			final TableViewer viewer = pickList.getList();
 
-			final IEMFEditListProperty mProp = EMFEditProperties.list(getEditingDomain(),
-					CommandsPackageImpl.Literals.COMMAND__PARAMETERS);
-			viewer.setInput(mProp.observeDetail(getMaster()));
+			viewer.setInput(E4Properties.commandParameters(getEditingDomain()).observeDetail(getMaster()));
 		}
 
 		item = new CTabItem(folder, SWT.NONE);
@@ -245,8 +235,8 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		return COMMAND__PARAMETERS.observe(element);
+	public IObservableList<?> getChildList(Object element) {
+		return E4Properties.commandParameters(getEditingDomain()).observe((MCommand) element);
 	}
 
 	@Override
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CommandParameterEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CommandParameterEditor.java
index 6222e05..6463825 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CommandParameterEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CommandParameterEditor.java
@@ -20,17 +20,16 @@
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.ui.model.application.commands.MCommandParameter;
 import org.eclipse.e4.ui.model.application.commands.impl.CommandsPackageImpl;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
-import org.eclipse.emf.databinding.edit.IEMFEditValueProperty;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
 import org.eclipse.swt.custom.CTabItem;
@@ -41,8 +40,9 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
 
-public class CommandParameterEditor extends AbstractComponentEditor {
+public class CommandParameterEditor extends AbstractComponentEditor<MCommandParameter> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 
@@ -114,11 +114,12 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MCommandParameter) object);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master, boolean isImport) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MCommandParameter> master, boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -127,7 +128,7 @@
 		parent = createScrollableContainer(folder);
 		item.setControl(parent.getParent());
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (getEditor().isShowXMIId() || getEditor().isLiveModel()) {
 			ControlFactory.createXMIId(parent, this);
@@ -140,12 +141,9 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID),
-				Messages.ModelTooling_Empty_Warning);
+				E4Properties.elementId(getEditingDomain()), Messages.ModelTooling_Empty_Warning);
 		ControlFactory.createTextField(parent, Messages.CommandParameterEditor_Name, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(), CommandsPackageImpl.Literals.COMMAND_PARAMETER__NAME),
-				Messages.ModelTooling_Empty_Warning);
+				E4Properties.commandParameterName(getEditingDomain()), Messages.ModelTooling_Empty_Warning);
 
 		{
 			final Label l = new Label(parent, SWT.NONE);
@@ -155,11 +153,10 @@
 			final Button checkbox = new Button(parent, SWT.CHECK);
 			checkbox.setLayoutData(new GridData(GridData.BEGINNING, GridData.BEGINNING, false, false, 2, 1));
 
-			final IEMFEditValueProperty mprop = EMFEditProperties.value(getEditingDomain(),
-					CommandsPackageImpl.Literals.COMMAND_PARAMETER__OPTIONAL);
-			final IWidgetValueProperty uiProp = WidgetProperties.selection();
+			final IWidgetValueProperty<Button, Boolean> uiProp = WidgetProperties.buttonSelection();
 
-			context.bindValue(uiProp.observe(checkbox), mprop.observeDetail(master));
+			context.bindValue(uiProp.observe(checkbox),
+					E4Properties.optional(getEditingDomain()).observeDetail(master));
 		}
 
 		item = new CTabItem(folder, SWT.NONE);
@@ -181,7 +178,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CompositePartEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CompositePartEditor.java
index e9a8b82..9b3a75d 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CompositePartEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CompositePartEditor.java
@@ -8,7 +8,6 @@
 
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.core.di.annotations.Optional;
@@ -16,6 +15,7 @@
 import org.eclipse.e4.tools.emf.ui.common.ImageTooltip;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.ComponentLabelProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.FeatureClassLabelProvider;
@@ -25,19 +25,16 @@
 import org.eclipse.e4.tools.emf.ui.internal.imp.ModelImportWizard;
 import org.eclipse.e4.tools.emf.ui.internal.imp.RegistryUtil;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
-import org.eclipse.e4.ui.model.application.ui.MElementContainer;
 import org.eclipse.e4.ui.model.application.ui.MUIElement;
 import org.eclipse.e4.ui.model.application.ui.advanced.impl.AdvancedPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.basic.MCompositePart;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.model.application.ui.basic.MPartSashContainerElement;
 import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.IEMFListProperty;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
@@ -45,10 +42,10 @@
 import org.eclipse.emf.edit.command.RemoveCommand;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.databinding.viewers.IViewerValueProperty;
 import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
-import org.eclipse.jface.databinding.viewers.ViewerProperties;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.resource.FontDescriptor;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.ComboViewer;
@@ -77,13 +74,9 @@
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 
-public class CompositePartEditor extends AbstractComponentEditor {
-
+public class CompositePartEditor extends AbstractComponentEditor<MCompositePart> {
 	private Composite composite;
 	private EMFDataBindingContext context;
-
-	private final IListProperty ELEMENT_CONTAINER__CHILDREN = EMFProperties
-			.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
 	private StackLayout stackLayout;
 	private final List<Action> actions = new ArrayList<>();
 	private final List<Action> actionsImport = new ArrayList<>();
@@ -214,12 +207,12 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MCompositePart) object);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, final EMFDataBindingContext context, WritableValue master,
-			boolean isImport) {
+	private Composite createForm(Composite parent, final EMFDataBindingContext context,
+			WritableValue<MCompositePart> master, boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -232,7 +225,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -241,15 +234,13 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(),
-				context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE));
+				context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.CompositePartEditor_LabelLabel, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__LABEL));
+				E4Properties.label(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.CompositePartEditor_Tooltip, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__TOOLTIP));
+				E4Properties.tooltip(getEditingDomain()));
 
 		// ------------------------------------------------------------
 		{
@@ -261,10 +252,8 @@
 			final Text t = new Text(parent, SWT.BORDER);
 			TextPasteHandler.createFor(t);
 			t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-			context.bindValue(
-					textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__ICON_URI).observeDetail(
-							master));
+			context.bindValue(textProp.observeDelayed(200, t),
+					E4Properties.iconUri(getEditingDomain()).observeDetail(master));
 
 			new ImageTooltip(t, Messages, this);
 
@@ -273,7 +262,7 @@
 				@Override
 				public void widgetSelected(SelectionEvent e) {
 					final PartIconDialogEditor dialog = new PartIconDialogEditor(b.getShell(), eclipseContext, project,
-							getEditingDomain(), (MPart) getMaster().getValue(), Messages);
+							getEditingDomain(), getMaster().getValue(), Messages);
 					dialog.open();
 				}
 			});
@@ -298,15 +287,14 @@
 				}
 			});
 			viewer.setInput(new Boolean[] { Boolean.TRUE, Boolean.FALSE });
-			final IViewerValueProperty vProp = ViewerProperties.singleSelection();
+			final IViewerValueProperty<ComboViewer, Boolean> vProp = ViewerProperties.singleSelection(Boolean.class);
 			context.bindValue(vProp.observe(viewer),
-					EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.GENERIC_TILE__HORIZONTAL)
-					.observeDetail(getMaster()));
+					E4Properties.horizontal(getEditingDomain()).observeDetail(getMaster()));
 		}
 
 		ControlFactory.createSelectedElement(parent, this, context, Messages.CompositePartEditor_SelectedElement);
 		ControlFactory.createTextField(parent, Messages.CompositePartEditor_ContainerData, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__CONTAINER_DATA));
+				E4Properties.containerData(getEditingDomain()));
 
 		{
 
@@ -359,16 +347,14 @@
 			final TableViewer viewer = new TableViewer(parent);
 			final GridData gd = new GridData(GridData.FILL, GridData.FILL, true, true, 2, 1);
 			viewer.getControl().setLayoutData(gd);
-			final ObservableListContentProvider cp = new ObservableListContentProvider();
-			viewer.setContentProvider(cp);
+			viewer.setContentProvider(new ObservableListContentProvider<>());
 
 			final FontDescriptor italicFontDescriptor = FontDescriptor.createFrom(viewer.getControl().getFont())
 					.setStyle(SWT.ITALIC);
 			viewer.setLabelProvider(new DelegatingStyledCellLabelProvider(
 					new ComponentLabelProvider(getEditor(), Messages, italicFontDescriptor)));
 
-			final IEMFListProperty prop = EMFProperties.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
-			viewer.setInput(prop.observeDetail(getMaster()));
+			viewer.setInput(E4Properties.<MPartSashContainerElement>children().observeDetail(getMaster()));
 
 			new Label(parent, SWT.NONE);
 
@@ -386,8 +372,7 @@
 						final IStructuredSelection s = (IStructuredSelection) viewer.getSelection();
 						if (s.size() == 1) {
 							final Object obj = s.getFirstElement();
-							final MElementContainer<?> container = (MElementContainer<?>) getMaster().getValue();
-							final int idx = container.getChildren().indexOf(obj) - 1;
+							final int idx = getMaster().getValue().getChildren().indexOf(obj) - 1;
 							if (idx >= 0) {
 								if (Util.moveElementByIndex(getEditingDomain(), (MUIElement) obj, getEditor()
 										.isLiveModel(), idx)) {
@@ -410,9 +395,8 @@
 						final IStructuredSelection s = (IStructuredSelection) viewer.getSelection();
 						if (s.size() == 1) {
 							final Object obj = s.getFirstElement();
-							final MElementContainer<?> container = (MElementContainer<?>) getMaster().getValue();
-							final int idx = container.getChildren().indexOf(obj) + 1;
-							if (idx < container.getChildren().size()) {
+							final int idx = getMaster().getValue().getChildren().indexOf(obj) + 1;
+							if (idx < getMaster().getValue().getChildren().size()) {
 								if (Util.moveElementByIndex(getEditingDomain(), (MUIElement) obj, getEditor()
 										.isLiveModel(), idx)) {
 									viewer.setSelection(new StructuredSelection(obj));
@@ -444,11 +428,9 @@
 		}
 
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED));
+				WidgetProperties.buttonSelection(), E4Properties.toBeRendered(getEditingDomain()));
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE));
+				WidgetProperties.buttonSelection(), E4Properties.visible(getEditingDomain()));
 
 		item = new CTabItem(folder, SWT.NONE);
 		item.setText(Messages.ModelTooling_Common_TabSupplementary);
@@ -486,8 +468,8 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		return ELEMENT_CONTAINER__CHILDREN.observe(element);
+	public IObservableList<?> getChildList(Object element) {
+		return E4Properties.<MPartSashContainerElement>children().observe((MCompositePart) element);
 	}
 
 	@Override
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ControlFactory.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ControlFactory.java
index f603b5a..9e53bef 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ControlFactory.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ControlFactory.java
@@ -26,6 +26,8 @@
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.map.IObservableMap;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.core.databinding.property.list.IListProperty;
+import org.eclipse.core.databinding.property.value.IValueProperty;
 import org.eclipse.core.databinding.validation.IValidator;
 import org.eclipse.core.databinding.validation.ValidationStatus;
 import org.eclipse.core.resources.IProject;
@@ -36,6 +38,7 @@
 import org.eclipse.e4.tools.emf.ui.common.IContributionClassCreator;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.Messages;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.AbstractPickList.PickListFeatures;
@@ -51,19 +54,19 @@
 import org.eclipse.e4.ui.internal.workbench.E4XMIResource;
 import org.eclipse.e4.ui.model.application.MApplicationElement;
 import org.eclipse.e4.ui.model.application.MContribution;
+import org.eclipse.e4.ui.model.application.commands.MBindings;
 import org.eclipse.e4.ui.model.application.commands.impl.CommandsPackageImpl;
 import org.eclipse.e4.ui.model.application.impl.ApplicationFactoryImpl;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
+import org.eclipse.e4.ui.model.application.ui.MElementContainer;
+import org.eclipse.e4.ui.model.application.ui.MUIElement;
 import org.eclipse.e4.ui.model.application.ui.MUILabel;
 import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.common.util.BasicEMap;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
 import org.eclipse.emf.databinding.EMFProperties;
-import org.eclipse.emf.databinding.IEMFListProperty;
 import org.eclipse.emf.databinding.edit.EMFEditProperties;
-import org.eclipse.emf.databinding.edit.IEMFEditListProperty;
-import org.eclipse.emf.databinding.edit.IEMFEditValueProperty;
 import org.eclipse.emf.ecore.EAttribute;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EStructuralFeature;
@@ -72,11 +75,11 @@
 import org.eclipse.emf.edit.command.RemoveCommand;
 import org.eclipse.emf.edit.command.SetCommand;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.databinding.viewers.IViewerValueProperty;
 import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
 import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider;
-import org.eclipse.jface.databinding.viewers.ViewerProperties;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.fieldassist.ControlDecoration;
@@ -160,7 +163,7 @@
 		}
 	}
 
-	public static void createXMIId(Composite parent, AbstractComponentEditor editor) {
+	public static <M> void createXMIId(Composite parent, AbstractComponentEditor<M> editor) {
 		final Label l = new Label(parent, SWT.NONE);
 		l.setText("XMI:ID"); //$NON-NLS-1$
 		l.setLayoutData(new GridData());
@@ -174,7 +177,7 @@
 		TextPasteHandler.createFor(t);
 
 		editor.getMaster().addValueChangeListener(event -> {
-			final Object val = event.diff.getNewValue();
+			final M val = event.diff.getNewValue();
 			if (val != null && val instanceof EObject && !t.isDisposed()) {
 				final Resource res = ((EObject) val).eResource();
 				if (res instanceof E4XMIResource) {
@@ -188,12 +191,12 @@
 	}
 
 	public static Composite createMapProperties(Composite parent, final Messages Messages,
-			final AbstractComponentEditor editor, String label, final EStructuralFeature feature, int vIndent) {
+			final AbstractComponentEditor<?> editor, String label, final EStructuralFeature feature, int vIndent) {
 		return createMapProperties(parent, Messages, editor, label, null, feature, vIndent);
 	}
 
 	public static Composite createMapProperties(Composite parent, final Messages messages,
-			final AbstractComponentEditor editor, String label, String tooltip, final EStructuralFeature feature,
+			final AbstractComponentEditor<?> editor, String label, String tooltip, final EStructuralFeature feature,
 			int vIndent) {
 
 		final E4PickList pickList = new E4PickList(parent, SWT.NONE, Arrays.asList(PickListFeatures.NO_PICKER),
@@ -260,8 +263,7 @@
 
 		final TableViewer tableviewer = pickList.getList();
 		tableviewer.getTable().setHeaderVisible(true);
-		final ObservableListContentProvider cp = new ObservableListContentProvider();
-		tableviewer.setContentProvider(cp);
+		tableviewer.setContentProvider(new ObservableListContentProvider<>());
 
 		final GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
 		gd.verticalIndent = vIndent;
@@ -357,26 +359,30 @@
 			}
 		});
 
-		final IEMFEditListProperty prop = EMFEditProperties.list(editor.getEditingDomain(), feature);
-		final IObservableList observableList = prop.observeDetail(editor.getMaster());
+		@SuppressWarnings("unchecked")
+		final IListProperty<Object, Object> prop = EMFEditProperties.list(editor.getEditingDomain(), feature);
+		final IObservableList<Object> observableList = prop.observeDetail(editor.getMaster());
 		tableviewer.setInput(observableList);
 		observableList.addListChangeListener(event -> tableviewer.getTable().getColumn(0).pack());
 
 		return pickList;
 	}
 
-	public static void createTextField(Composite parent, String label, IObservableValue master,
-			EMFDataBindingContext context, IWidgetValueProperty textProp, IEMFEditValueProperty modelProp) {
+	public static <M> void createTextField(Composite parent, String label, IObservableValue<M> master,
+			EMFDataBindingContext context, IWidgetValueProperty<Text, String> textProp,
+			IValueProperty<? super M, String> modelProp) {
 		createTextField(parent, label, null, master, context, textProp, modelProp, null);
 	}
 
-	public static void createTextField(Composite parent, String label, String tooltip, IObservableValue master,
-			EMFDataBindingContext context, IWidgetValueProperty textProp, IEMFEditValueProperty modelProp) {
+	public static <M> void createTextField(Composite parent, String label, String tooltip, IObservableValue<M> master,
+			EMFDataBindingContext context, IWidgetValueProperty<Text, String> textProp,
+			IValueProperty<? super M, String> modelProp) {
 		createTextField(parent, label, tooltip, master, context, textProp, modelProp, null);
 	}
 
-	public static void createTextField(Composite parent, String label, IObservableValue master,
-			EMFDataBindingContext context, IWidgetValueProperty textProp, IEMFEditValueProperty modelProp,
+	public static <M> void createTextField(Composite parent, String label, IObservableValue<M> master,
+			EMFDataBindingContext context, IWidgetValueProperty<Text, String> textProp,
+			IValueProperty<? super M, String> modelProp,
 			final String warningText) {
 		createTextField(parent, label, null, master, context, textProp, modelProp, warningText);
 	}
@@ -393,8 +399,9 @@
 	 *            Non null warningText means that a warning with this non-null text
 	 *            will be shown when the field is left empty
 	 */
-	public static void createTextField(Composite parent, String label, String tooltip, IObservableValue master,
-			EMFDataBindingContext context, IWidgetValueProperty textProp, IEMFEditValueProperty modelProp,
+	public static <M> void createTextField(Composite parent, String label, String tooltip, IObservableValue<M> master,
+			EMFDataBindingContext context, IWidgetValueProperty<Text, String> textProp,
+			IValueProperty<? super M, String> modelProp,
 			final String warningText) {
 		createTextField(parent, label, tooltip, master, context, textProp, modelProp, warningText,
 				FieldDecorationRegistry.DEC_WARNING);
@@ -418,8 +425,9 @@
 	 *            FieldDecorationRegistry.DEC_INFORMATION
 	 *
 	 */
-	public static void createTextField(Composite parent, String label, String tooltip, IObservableValue master,
-			EMFDataBindingContext context, IWidgetValueProperty textProp, IEMFEditValueProperty modelProp,
+	public static <M> void createTextField(Composite parent, String label, String tooltip, IObservableValue<M> master,
+			EMFDataBindingContext context, IWidgetValueProperty<Text, String> textProp,
+			IValueProperty<? super M, String> modelProp,
 			final String decorationText, final String decorationType) {
 		final Label l = new Label(parent, SWT.NONE);
 		l.setText(label);
@@ -439,7 +447,7 @@
 			final FieldDecoration fieldDecoration = FieldDecorationRegistry.getDefault().getFieldDecoration(
 					decorationType);
 			controlDecoration.setImage(fieldDecoration.getImage());
-			final IValidator iv = value -> {
+			final IValidator<Object> iv = value -> {
 				if (value == null) {
 					controlDecoration.show();
 					return ValidationStatus.warning(decorationText);
@@ -458,22 +466,24 @@
 				controlDecoration.hide();
 				return Status.OK_STATUS;
 			};
-			final UpdateValueStrategy acv = new UpdateValueStrategy().setAfterConvertValidator(iv);
+			final UpdateValueStrategy<String, String> acv = new UpdateValueStrategy<String, String>().setAfterConvertValidator(iv);
 			context.bindValue(textProp.observeDelayed(200, t), modelProp.observeDetail(master), acv, acv);
 		} else {
 			context.bindValue(textProp.observeDelayed(200, t), modelProp.observeDetail(master));
 		}
 	}
 
-	public static void createTranslatedTextField(Composite parent, String label, IObservableValue master,
-			EMFDataBindingContext context, IWidgetValueProperty textProp, IEMFEditValueProperty modelProp,
+	public static <M> void createTranslatedTextField(Composite parent, String label, IObservableValue<M> master,
+			EMFDataBindingContext context, IWidgetValueProperty<? super Text, String> textProp,
+			IValueProperty<? super M, String> modelProp,
 			IResourcePool resourcePool, IProject project) {
 		createTranslatedTextField(parent, label, null, master, context, textProp, modelProp, resourcePool, project);
 	}
 
-	public static void createTranslatedTextField(Composite parent, String label, String tooltip,
-			IObservableValue master, EMFDataBindingContext context, IWidgetValueProperty textProp,
-			IEMFEditValueProperty modelProp, IResourcePool resourcePool, IProject project) {
+	public static <M> void createTranslatedTextField(Composite parent, String label, String tooltip,
+			IObservableValue<M> master, EMFDataBindingContext context,
+			IWidgetValueProperty<? super Text, String> textProp,
+			IValueProperty<? super M, String> modelProp, IResourcePool resourcePool, IProject project) {
 		final Label l = new Label(parent, SWT.NONE);
 		l.setText(label);
 		if (tooltip != null) {
@@ -518,8 +528,8 @@
 
 
 	public static void createFindImport(Composite parent, final Messages Messages,
-			final AbstractComponentEditor editor, EMFDataBindingContext context) {
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+			final AbstractComponentEditor<? extends MApplicationElement> editor, EMFDataBindingContext context) {
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		final Label l = new Label(parent, SWT.NONE);
 		l.setText(Messages.ModelTooling_Common_RefId);
@@ -533,8 +543,7 @@
 
 		context.bindValue(
 				textProp.observeDelayed(200, t),
-				EMFEditProperties.value(editor.getEditingDomain(),
-						ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID).observeDetail(editor.getMaster()));
+				E4Properties.elementId(editor.getEditingDomain()).observeDetail(editor.getMaster()));
 
 		Button b = ControlFactory.createFindButton(parent, editor.resourcePool);
 		b.addSelectionListener(new SelectionAdapter() {
@@ -547,8 +556,9 @@
 		});
 	}
 
-	public static void createSelectedElement(Composite parent, final AbstractComponentEditor editor,
-			final EMFDataBindingContext context, String label) {
+	public static <E extends MUIElement, M extends MElementContainer<E>> void createSelectedElement(
+			Composite parent, final AbstractComponentEditor<M> editor, final EMFDataBindingContext context,
+			String label) {
 		final Label l = new Label(parent, SWT.NONE);
 		l.setText(label);
 		l.setLayoutData(new GridData());
@@ -557,31 +567,27 @@
 		final GridData gd = new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalSpan = 2;
 		viewer.getControl().setLayoutData(gd);
-		final IEMFEditListProperty listProp = EMFEditProperties.list(editor.getEditingDomain(),
-				UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
-		final IEMFEditValueProperty labelProp = EMFEditProperties.value(editor.getEditingDomain(),
-				UiPackageImpl.Literals.UI_LABEL__LABEL);
-		final IEMFEditValueProperty idProp = EMFEditProperties.value(editor.getEditingDomain(),
-				ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID);
-
-		final IViewerValueProperty vProp = ViewerProperties.singleSelection();
+		final IViewerValueProperty<ComboViewer, E> vProp = ViewerProperties.singleSelection();
 
 		final Binding[] binding = new Binding[1];
-		final IObservableValue uiObs = vProp.observe(viewer);
-		final IObservableValue mObs = EMFEditProperties.value(editor.getEditingDomain(),
-				UiPackageImpl.Literals.ELEMENT_CONTAINER__SELECTED_ELEMENT).observeDetail(editor.getMaster());
+		final IObservableValue<E> uiObs = vProp.observe(viewer);
+		final IObservableValue<E> mObs = E4Properties.<E>selectedElement(editor.getEditingDomain())
+				.observeDetail(editor.getMaster());
 		editor.getMaster().addValueChangeListener(event -> {
 			if (binding[0] != null) {
 				binding[0].dispose();
 			}
-
 		});
 
-		final IObservableList list = listProp.observeDetail(editor.getMaster());
-		final ObservableListContentProvider cp = new ObservableListContentProvider();
+		final IObservableList<E> list = E4Properties.<E>children(editor.getEditingDomain())
+				.observeDetail(editor.getMaster());
+		final ObservableListContentProvider<E> cp = new ObservableListContentProvider<>();
 		viewer.setContentProvider(cp);
-		final IObservableMap[] attributeMaps = { labelProp.observeDetail(cp.getKnownElements()),
-				idProp.observeDetail(cp.getKnownElements()) };
+		@SuppressWarnings({ "unchecked", "rawtypes" })
+		final IObservableMap<?, ?>[] attributeMaps = {
+				// Cast, because MUILabel is not part of E's type
+				((IValueProperty) E4Properties.label(editor.getEditingDomain())).observeDetail(cp.getKnownElements()),
+				E4Properties.elementId(editor.getEditingDomain()).observeDetail(cp.getKnownElements()) };
 		viewer.setLabelProvider(new ObservableMapLabelProvider(attributeMaps) {
 			@Override
 			public String getText(Object element) {
@@ -612,12 +618,12 @@
 	}
 
 	public static void createBindingContextWiget(Composite parent, final Messages Messages,
-			final AbstractComponentEditor editor, String label) {
+			final AbstractComponentEditor<? extends MBindings> editor, String label) {
 		createBindingContextWiget(parent, Messages, editor, label, null);
 	}
 
 	public static void createBindingContextWiget(Composite parent, final Messages Messages,
-			final AbstractComponentEditor editor, String label, String tooltip) {
+			final AbstractComponentEditor<? extends MBindings> editor, String label, String tooltip) {
 		{
 			final E4PickList pickList = new E4PickList(parent, SWT.NONE, Arrays.asList(PickListFeatures.NO_ORDER,
 					PickListFeatures.NO_PICKER), editor, CommandsPackageImpl.Literals.BINDINGS__BINDING_CONTEXTS) {
@@ -637,19 +643,19 @@
 			pickList.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
 
 			pickList.setText(label);
-			pickList.getList().setInput(
-					EMFProperties.list(CommandsPackageImpl.Literals.BINDINGS__BINDING_CONTEXTS).observeDetail(
-							editor.getMaster()));
+			pickList.getList().setInput(E4Properties.contexts().observeDetail(editor.getMaster()));
 		}
 	}
 
 	public static Composite createStringListWidget(Composite parent, Messages Messages,
-			final AbstractComponentEditor editor, String label, final EStructuralFeature feature, int vIndent) {
+			final AbstractComponentEditor<? extends MApplicationElement> editor, String label,
+			final EStructuralFeature feature, int vIndent) {
 		return createStringListWidget(parent, Messages, editor, label, null, feature, vIndent);
 	}
 
 	public static Composite createStringListWidget(Composite parent, Messages Messages,
-			final AbstractComponentEditor editor, String label, String tooltip, final EStructuralFeature feature,
+			final AbstractComponentEditor<? extends MApplicationElement> editor, String label, String tooltip,
+			final EStructuralFeature feature,
 			int vIndent) {
 
 		final E4StringPickList pickList = new E4StringPickList(parent, SWT.NONE, null, editor, feature) {
@@ -682,7 +688,8 @@
 		final GridData gd = (GridData) viewer.getTable().getLayoutData();
 		gd.heightHint = 150;
 
-		final IEMFListProperty prop = EMFProperties.list(feature);
+		@SuppressWarnings("unchecked")
+		final IListProperty<Object, Object> prop = EMFProperties.list(feature);
 		viewer.setInput(prop.observeDetail(editor.getMaster()));
 
 		viewer.addSelectionChangedListener(event -> {
@@ -694,14 +701,15 @@
 		return pickList;
 	}
 
-	private static void handleAddText(AbstractComponentEditor editor, EStructuralFeature feature, Text tagText) {
+	private static void handleAddText(AbstractComponentEditor<? extends MApplicationElement> editor,
+			EStructuralFeature feature, Text tagText) {
 		if (tagText.getText().trim().length() > 0) {
 			final String[] tags = tagText.getText().split(";"); //$NON-NLS-1$
 			for (int i = 0; i < tags.length; i++) {
 				tags[i] = tags[i].trim();
 			}
 
-			final MApplicationElement appEl = (MApplicationElement) editor.getMaster().getValue();
+			final MApplicationElement appEl = editor.getMaster().getValue();
 			final Command cmd = AddCommand.create(editor.getEditingDomain(), appEl, feature, Arrays.asList(tags));
 			if (cmd.canExecute()) {
 				editor.getEditingDomain().getCommandStack().execute(cmd);
@@ -712,8 +720,8 @@
 
 	// This method is left in for reference purposes
 	@SuppressWarnings("unused")
-	private static void handleReplaceText(AbstractComponentEditor editor, EStructuralFeature feature, Text tagText,
-			TableViewer viewer) {
+	private static void handleReplaceText(AbstractComponentEditor<? extends MApplicationElement> editor,
+			EStructuralFeature feature, Text tagText, TableViewer viewer) {
 		if (tagText.getText().trim().length() > 0) {
 			if (!viewer.getSelection().isEmpty()) {
 				final String[] tags = tagText.getText().split(";"); //$NON-NLS-1$
@@ -721,7 +729,7 @@
 					tags[i] = tags[i].trim();
 				}
 
-				final MApplicationElement appEl = (MApplicationElement) editor.getMaster().getValue();
+				final MApplicationElement appEl = editor.getMaster().getValue();
 				final EObject el = (EObject) editor.getMaster().getValue();
 				final List<?> ids = ((IStructuredSelection) viewer.getSelection()).toList();
 				final Object curVal = ((IStructuredSelection) viewer.getSelection()).getFirstElement();
@@ -742,13 +750,15 @@
 		}
 	}
 
-	public static void createCheckBox(Composite parent, String label, IObservableValue master,
-			EMFDataBindingContext context, IWidgetValueProperty selectionProp, IEMFEditValueProperty modelProp) {
+	public static <M> void createCheckBox(Composite parent, String label, IObservableValue<M> master,
+			EMFDataBindingContext context, IWidgetValueProperty<Button, Boolean> selectionProp,
+			IValueProperty<? super M, Boolean> modelProp) {
 		createCheckBox(parent, label, null, master, context, selectionProp, modelProp);
 	}
 
-	public static void createCheckBox(Composite parent, String label, String tooltip, IObservableValue master,
-			EMFDataBindingContext context, IWidgetValueProperty selectionProp, IEMFEditValueProperty modelProp) {
+	public static <M> void createCheckBox(Composite parent, String label, String tooltip, IObservableValue<M> master,
+			EMFDataBindingContext context, IWidgetValueProperty<Button, Boolean> selectionProp,
+			IValueProperty<? super M, Boolean> modelProp) {
 		final Label l = new Label(parent, SWT.NONE);
 		l.setText(label);
 		if (tooltip != null) {
@@ -844,11 +854,12 @@
 	 *            MPartDescriptorEditor)
 	 */
 	public static void createClassURIField(Composite parent, final Messages Messages,
-			final AbstractComponentEditor editor, String title, final EAttribute feature, IContributionClassCreator c,
+			final AbstractComponentEditor<?> editor, String title, final EAttribute feature,
+			IContributionClassCreator c,
 			IProject project,
 			EMFDataBindingContext context, IEclipseContext eclipseContext, SelectionAdapter adapter) {
 		final Link lnk;
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (project != null && c != null) {
 			lnk = new Link(parent, SWT.NONE);
@@ -870,12 +881,12 @@
 				lnk.setToolTipText(((Text) e.getSource()).getText());
 			}
 		});
+		@SuppressWarnings("unchecked")
 		final Binding binding = context.bindValue(textProp.observeDelayed(200, t),
-				EMFEditProperties
-				.value(editor.getEditingDomain(), feature)
+				((IValueProperty<Object, Object>) EMFEditProperties.value(editor.getEditingDomain(), feature))
 				.observeDetail(editor.getMaster()),
-				new UpdateValueStrategy().setAfterConvertValidator(new ContributionURIValidator()),
-				new UpdateValueStrategy());
+				new UpdateValueStrategy<>().setAfterConvertValidator(new ContributionURIValidator()),
+				new UpdateValueStrategy<>());
 		Util.addDecoration(t, binding);
 
 		Button b = ControlFactory.createFindButton(parent, editor.resourcePool);
@@ -891,8 +902,9 @@
 	}
 
 	public static void createClassURIField(Composite parent, final Messages Messages,
-			final AbstractComponentEditor editor, String title, final EAttribute feature, IContributionClassCreator c,
-			IProject project, EMFDataBindingContext context, IEclipseContext eclipseContext) {
+			final AbstractComponentEditor<?> editor, String title, final EAttribute feature,
+			IContributionClassCreator c, IProject project, EMFDataBindingContext context,
+			IEclipseContext eclipseContext) {
 		createClassURIField(parent, Messages, editor, title, feature, c, project, context, eclipseContext,
 				new SelectionAdapter() {
 			@Override
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CoreExpressionEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CoreExpressionEditor.java
index 42ddc83..f077a30 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CoreExpressionEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CoreExpressionEditor.java
@@ -18,16 +18,15 @@
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.ControlFactory.TextPasteHandler;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.ExpressionIdDialog;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.MCoreExpression;
-import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
 import org.eclipse.swt.custom.CTabItem;
@@ -41,7 +40,7 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class CoreExpressionEditor extends AbstractComponentEditor {
+public class CoreExpressionEditor extends AbstractComponentEditor<MCoreExpression> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 
@@ -82,11 +81,12 @@
 			composite.setLayout(new FillLayout());
 			createForm(composite, context, getMaster());
 		}
-		getMaster().setValue(object);
+		getMaster().setValue((MCoreExpression) object);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MCoreExpression> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -99,7 +99,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		{
 			final Label l = new Label(parent, SWT.NONE);
@@ -111,8 +111,7 @@
 			final GridData gd = new GridData(GridData.FILL_HORIZONTAL);
 			t.setLayoutData(gd);
 			context.bindValue(textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.CORE_EXPRESSION__CORE_EXPRESSION_ID)
-					.observeDetail(getMaster()));
+					E4Properties.coreExpressionId(getEditingDomain()).observeDetail(getMaster()));
 
 			if (getEditor().getExtensionLookup() == null) {
 				gd.horizontalSpan = 2;
@@ -122,7 +121,7 @@
 					@Override
 					public void widgetSelected(SelectionEvent e) {
 						final ExpressionIdDialog dialog = new ExpressionIdDialog(t.getShell(), getEditor()
-								.getExtensionLookup(), (MCoreExpression) getMaster().getValue(), getEditingDomain(),
+								.getExtensionLookup(), getMaster().getValue(), getEditingDomain(),
 								getEditor().isLiveModel(), Messages);
 						dialog.open();
 					}
@@ -149,7 +148,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/DefaultEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/DefaultEditor.java
index caf7860..2bc7445 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/DefaultEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/DefaultEditor.java
@@ -6,7 +6,7 @@
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Composite;
 
-public class DefaultEditor extends AbstractComponentEditor {
+public class DefaultEditor extends AbstractComponentEditor<Void> {
 
 	@Override
 	public Image getImage(Object element) {
@@ -35,7 +35,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		// TODO Auto-generated method stub
 		return null;
 	}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/DirectMenuItemEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/DirectMenuItemEditor.java
index ea29072..3f65bee 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/DirectMenuItemEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/DirectMenuItemEditor.java
@@ -21,15 +21,15 @@
 import org.eclipse.core.databinding.observable.list.WritableList;
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.e4.core.contexts.IEclipseContext;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.objectdata.ObjectViewer;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
-import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
+import org.eclipse.e4.ui.model.application.ui.MExpression;
+import org.eclipse.e4.ui.model.application.ui.MUIElement;
 import org.eclipse.e4.ui.model.application.ui.menu.MDirectMenuItem;
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
-import org.eclipse.emf.databinding.IEMFValueProperty;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
@@ -39,10 +39,7 @@
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 
-public class DirectMenuItemEditor extends MenuItemEditor {
-	private final IEMFValueProperty UI_ELEMENT__VISIBLE_WHEN = EMFProperties
-			.value(UiPackageImpl.Literals.UI_ELEMENT__VISIBLE_WHEN);
-
+public class DirectMenuItemEditor extends MenuItemEditor<MDirectMenuItem> {
 	@Inject
 	IEclipseContext eclipseContext;
 
@@ -57,7 +54,8 @@
 	}
 
 	@Override
-	protected CTabFolder createForm(Composite parent, EMFDataBindingContext context, WritableValue master,
+	protected CTabFolder createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MDirectMenuItem> master,
 			boolean isImport) {
 		if (!isImport) {
 			final CTabFolder folder = super.createForm(parent, context, master, isImport);
@@ -92,7 +90,8 @@
 	}
 
 	@Override
-	protected void createFormSubTypeForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	protected void createFormSubTypeForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MDirectMenuItem> master) {
 
 		ControlFactory.createClassURIField(parent, Messages, this, Messages.DirectMenuItemEditor_ClassURI,
 				ApplicationPackageImpl.Literals.CONTRIBUTION__CONTRIBUTION_URI,
@@ -102,14 +101,15 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		final WritableList list = new WritableList();
+	public IObservableList<?> getChildList(Object element) {
+		final WritableList<MExpression> list = new WritableList<>();
+		MUIElement uiElement = (MUIElement) element;
 
-		if (((MDirectMenuItem) element).getVisibleWhen() != null) {
-			list.add(0, ((MDirectMenuItem) element).getVisibleWhen());
+		if (uiElement.getVisibleWhen() != null) {
+			list.add(0, uiElement.getVisibleWhen());
 		}
 
-		UI_ELEMENT__VISIBLE_WHEN.observe(element).addValueChangeListener(event -> {
+		E4Properties.visibleWhen().observe(uiElement).addValueChangeListener(event -> {
 			if (event.diff.getOldValue() != null) {
 				list.remove(event.diff.getOldValue());
 			}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/DirectToolItemEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/DirectToolItemEditor.java
index b4cf948..d3e76a1 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/DirectToolItemEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/DirectToolItemEditor.java
@@ -20,15 +20,13 @@
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.e4.core.contexts.IEclipseContext;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.objectdata.ObjectViewer;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
-import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.menu.MDirectToolItem;
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
-import org.eclipse.emf.databinding.IEMFValueProperty;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
@@ -38,10 +36,7 @@
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 
-public class DirectToolItemEditor extends ToolItemEditor {
-	private final IEMFValueProperty UI_ELEMENT__VISIBLE_WHEN = EMFProperties
-			.value(UiPackageImpl.Literals.UI_ELEMENT__VISIBLE_WHEN);
-
+public class DirectToolItemEditor extends ToolItemEditor<MDirectToolItem> {
 	@Inject
 	IEclipseContext eclipseContext;
 
@@ -56,7 +51,8 @@
 	}
 
 	@Override
-	protected void createSubTypeFormElements(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	protected void createSubTypeFormElements(Composite parent, EMFDataBindingContext context,
+			WritableValue<MDirectToolItem> master) {
 
 		ControlFactory.createClassURIField(parent, Messages, this, Messages.DirectMenuItemEditor_ClassURI,
 				ApplicationPackageImpl.Literals.CONTRIBUTION__CONTRIBUTION_URI,
@@ -66,7 +62,8 @@
 	}
 
 	@Override
-	protected CTabFolder createForm(Composite parent, EMFDataBindingContext context, WritableValue master,
+	protected CTabFolder createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MDirectToolItem> master,
 			boolean isImport) {
 		if (!isImport) {
 			final CTabFolder folder = super.createForm(parent, context, master, isImport);
@@ -100,16 +97,16 @@
 		return Messages.DirectToolItemEditor_Description;
 	}
 
-	@SuppressWarnings("unchecked")
 	@Override
-	public IObservableList getChildList(Object element) {
-		final IObservableList list = super.getChildList(element);
+	public IObservableList<Object> getChildList(Object element) {
+		final IObservableList<Object> list = super.getChildList(element);
+		MDirectToolItem toolElement = (MDirectToolItem) element;
 
-		if (((MDirectToolItem) element).getVisibleWhen() != null) {
-			list.add(0, ((MDirectToolItem) element).getVisibleWhen());
+		if (toolElement.getVisibleWhen() != null) {
+			list.add(0, toolElement.getVisibleWhen());
 		}
 
-		UI_ELEMENT__VISIBLE_WHEN.observe(element).addValueChangeListener(event -> {
+		E4Properties.visibleWhen().observe(toolElement).addValueChangeListener(event -> {
 			if (event.diff.getOldValue() != null) {
 				list.remove(event.diff.getOldValue());
 			}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/DynamicMenuContributionEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/DynamicMenuContributionEditor.java
index 5a04a31..e6d7528 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/DynamicMenuContributionEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/DynamicMenuContributionEditor.java
@@ -25,17 +25,16 @@
 import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.MUILabel;
-import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.menu.MDynamicMenuContribution;
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
 import org.eclipse.swt.custom.CTabItem;
@@ -43,8 +42,9 @@
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Text;
 
-public class DynamicMenuContributionEditor extends AbstractComponentEditor {
+public class DynamicMenuContributionEditor extends AbstractComponentEditor<MDynamicMenuContribution> {
 
 	private Composite composite;
 	private EMFDataBindingContext context;
@@ -111,13 +111,13 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MDynamicMenuContribution) object);
 
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, final EMFDataBindingContext context, WritableValue master,
-			boolean isImport) {
+	private Composite createForm(Composite parent, final EMFDataBindingContext context,
+			WritableValue<MDynamicMenuContribution> master, boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -130,7 +130,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -139,11 +139,9 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 		ControlFactory.createTranslatedTextField(parent, Messages.DynamicMenuContributionEditor_LabelLabel,
-				getMaster(), context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__LABEL), resourcePool, project);
+				getMaster(), context, textProp, E4Properties.label(getEditingDomain()), resourcePool, project);
 
 		// ------------------------------------------------------------
 		ControlFactory.createClassURIField(parent, Messages, this, Messages.DynamicMenuContributionEditor_ClassURI,
@@ -160,7 +158,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/HandledMenuItemEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/HandledMenuItemEditor.java
index 95da03f..4568c0e 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/HandledMenuItemEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/HandledMenuItemEditor.java
@@ -21,23 +21,16 @@
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.e4.tools.emf.ui.common.CommandToStringConverter;
 import org.eclipse.e4.tools.emf.ui.common.IModelResource;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.ModelEditor;
 import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.ControlFactory.TextPasteHandler;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.HandledMenuItemCommandSelectionDialog;
-import org.eclipse.e4.ui.model.application.commands.MParameter;
-import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
-import org.eclipse.e4.ui.model.application.ui.menu.MHandledItem;
 import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
-import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
-import org.eclipse.emf.databinding.IEMFValueProperty;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
-import org.eclipse.emf.databinding.edit.IEMFEditListProperty;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -48,13 +41,7 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class HandledMenuItemEditor extends MenuItemEditor {
-
-	private final IEMFEditListProperty HANDLED_ITEM__PARAMETERS = EMFEditProperties.list(getEditingDomain(),
-			MenuPackageImpl.Literals.HANDLED_ITEM__PARAMETERS);
-	private final IEMFValueProperty UI_ELEMENT__VISIBLE_WHEN = EMFProperties
-			.value(UiPackageImpl.Literals.UI_ELEMENT__VISIBLE_WHEN);
-
+public class HandledMenuItemEditor extends MenuItemEditor<MHandledMenuItem> {
 	@Inject
 	private IModelResource resource;
 
@@ -79,8 +66,9 @@
 	}
 
 	@Override
-	protected void createFormSubTypeForm(Composite parent, EMFDataBindingContext context, final WritableValue master) {
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+	protected void createFormSubTypeForm(Composite parent, EMFDataBindingContext context,
+			final WritableValue<MHandledMenuItem> master) {
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		// ------------------------------------------------------------
 		{
@@ -93,16 +81,15 @@
 			t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			t.setEditable(false);
 			context.bindValue(textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(), MenuPackageImpl.Literals.HANDLED_ITEM__COMMAND)
-					.observeDetail(master), new UpdateValueStrategy(), new UpdateValueStrategy()
-					.setConverter(new CommandToStringConverter(Messages)));
+					E4Properties.itemCommand(getEditingDomain()).observeDetail(master),
+					new UpdateValueStrategy<>(), UpdateValueStrategy.create(new CommandToStringConverter(Messages)));
 
 			Button b = ControlFactory.createFindButton(parent, resourcePool);
 			b.addSelectionListener(new SelectionAdapter() {
 				@Override
 				public void widgetSelected(SelectionEvent e) {
 					final HandledMenuItemCommandSelectionDialog dialog = new HandledMenuItemCommandSelectionDialog(b
-							.getShell(), (MHandledItem) getMaster().getValue(), resource, Messages);
+							.getShell(), getMaster().getValue(), resource, Messages);
 					dialog.open();
 				}
 			});
@@ -110,14 +97,15 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		final WritableList list = new WritableList();
+	public IObservableList<?> getChildList(Object element) {
+		final WritableList<Object> list = new WritableList<>();
+		MHandledMenuItem item = (MHandledMenuItem) element;
 
-		if (((MHandledMenuItem) element).getVisibleWhen() != null) {
+		if (item.getVisibleWhen() != null) {
 			list.add(0, ((MHandledMenuItem) element).getVisibleWhen());
 		}
 
-		UI_ELEMENT__VISIBLE_WHEN.observe(element).addValueChangeListener(event -> {
+		E4Properties.visibleWhen().observe(item).addValueChangeListener(event -> {
 			if (event.diff.getOldValue() != null) {
 				list.remove(event.diff.getOldValue());
 			}
@@ -127,13 +115,8 @@
 			}
 		});
 
-		list.add(new VirtualEntry<MParameter>(ModelEditor.VIRTUAL_PARAMETERS, HANDLED_ITEM__PARAMETERS, element,
-				Messages.HandledMenuItemEditor_Parameters) {
-			@Override
-			protected boolean accepted(MParameter o) {
-				return true;
-			}
-		});
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_PARAMETERS, E4Properties.itemParameters(), item,
+				Messages.HandledMenuItemEditor_Parameters));
 
 		return list;
 	}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/HandledToolItemEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/HandledToolItemEditor.java
index 1364134..b7706a9 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/HandledToolItemEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/HandledToolItemEditor.java
@@ -20,23 +20,16 @@
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.e4.tools.emf.ui.common.CommandToStringConverter;
 import org.eclipse.e4.tools.emf.ui.common.IModelResource;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.ModelEditor;
 import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.ControlFactory.TextPasteHandler;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.HandledToolItemCommandSelectionDialog;
-import org.eclipse.e4.ui.model.application.commands.MParameter;
-import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
-import org.eclipse.e4.ui.model.application.ui.menu.MHandledItem;
 import org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem;
-import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
-import org.eclipse.emf.databinding.IEMFValueProperty;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
-import org.eclipse.emf.databinding.edit.IEMFEditListProperty;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -47,13 +40,7 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class HandledToolItemEditor extends ToolItemEditor {
-
-	private final IEMFEditListProperty HANDLED_ITEM__PARAMETERS = EMFEditProperties.list(getEditingDomain(),
-			MenuPackageImpl.Literals.HANDLED_ITEM__PARAMETERS);
-	private final IEMFValueProperty UI_ELEMENT__VISIBLE_WHEN = EMFProperties
-			.value(UiPackageImpl.Literals.UI_ELEMENT__VISIBLE_WHEN);
-
+public class HandledToolItemEditor extends ToolItemEditor<MHandledToolItem> {
 	@Inject
 	private IModelResource resource;
 
@@ -68,8 +55,9 @@
 	}
 
 	@Override
-	protected void createSubTypeFormElements(Composite parent, EMFDataBindingContext context, final WritableValue master) {
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+	protected void createSubTypeFormElements(Composite parent, EMFDataBindingContext context,
+			final WritableValue<MHandledToolItem> master) {
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		{
 			final Label l = new Label(parent, SWT.NONE);
@@ -81,16 +69,15 @@
 			t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			t.setEditable(false);
 			context.bindValue(textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(), MenuPackageImpl.Literals.HANDLED_ITEM__COMMAND)
-					.observeDetail(master), new UpdateValueStrategy(), new UpdateValueStrategy()
-					.setConverter(new CommandToStringConverter(Messages)));
+					E4Properties.itemCommand(getEditingDomain()).observeDetail(master),
+					new UpdateValueStrategy<>(), UpdateValueStrategy.create(new CommandToStringConverter(Messages)));
 
 			Button b = ControlFactory.createFindButton(parent, resourcePool);
 			b.addSelectionListener(new SelectionAdapter() {
 				@Override
 				public void widgetSelected(SelectionEvent e) {
 					final HandledToolItemCommandSelectionDialog dialog = new HandledToolItemCommandSelectionDialog(b
-							.getShell(), (MHandledItem) getMaster().getValue(), resource, Messages);
+							.getShell(), getMaster().getValue(), resource, Messages);
 					dialog.open();
 				}
 			});
@@ -107,16 +94,16 @@
 		return Messages.HandledToolItemEditor_Description;
 	}
 
-	@SuppressWarnings("unchecked")
 	@Override
-	public IObservableList getChildList(Object element) {
-		final IObservableList list = super.getChildList(element);
+	public IObservableList<Object> getChildList(Object element) {
+		final IObservableList<Object> list = super.getChildList(element);
+		MHandledToolItem item = (MHandledToolItem) element;
 
-		if (((MHandledToolItem) element).getVisibleWhen() != null) {
-			list.add(0, ((MHandledToolItem) element).getVisibleWhen());
+		if (item.getVisibleWhen() != null) {
+			list.add(0, item.getVisibleWhen());
 		}
 
-		UI_ELEMENT__VISIBLE_WHEN.observe(element).addValueChangeListener(event -> {
+		E4Properties.visibleWhen().observe(item).addValueChangeListener(event -> {
 			if (event.diff.getOldValue() != null) {
 				list.remove(event.diff.getOldValue());
 			}
@@ -126,13 +113,8 @@
 			}
 		});
 
-		list.add(new VirtualEntry<MParameter>(ModelEditor.VIRTUAL_PARAMETERS, HANDLED_ITEM__PARAMETERS, element,
-				Messages.HandledToolItemEditor_Parameters) {
-			@Override
-			protected boolean accepted(MParameter o) {
-				return true;
-			}
-		});
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_PARAMETERS, E4Properties.itemParameters(getEditingDomain()), item,
+				Messages.HandledToolItemEditor_Parameters));
 
 		return list;
 	}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/HandlerEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/HandlerEditor.java
index a31c86d..6e97cbe 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/HandlerEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/HandlerEditor.java
@@ -28,6 +28,7 @@
 import org.eclipse.e4.tools.emf.ui.common.IModelResource;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.ControlFactory.TextPasteHandler;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.HandlerCommandSelectionDialog;
@@ -37,10 +38,9 @@
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
@@ -57,7 +57,7 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class HandlerEditor extends AbstractComponentEditor {
+public class HandlerEditor extends AbstractComponentEditor<MHandler> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 	private StackLayout stackLayout;
@@ -121,11 +121,12 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MHandler) object);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, IObservableValue master, boolean isImport) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context, IObservableValue<MHandler> master,
+			boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -134,7 +135,7 @@
 		parent = createScrollableContainer(folder);
 		item.setControl(parent.getParent());
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (getEditor().isShowXMIId() || getEditor().isLiveModel()) {
 			ControlFactory.createXMIId(parent, this);
@@ -146,7 +147,8 @@
 			return folder;
 		}
 
-		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp, EMFEditProperties.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
+				E4Properties.elementId(getEditingDomain()));
 
 		// ------------------------------------------------------------
 		{
@@ -158,13 +160,16 @@
 			TextPasteHandler.createFor(t);
 			t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			t.setEditable(false);
-			context.bindValue(textProp.observeDelayed(200, t), EMFEditProperties.value(getEditingDomain(), CommandsPackageImpl.Literals.HANDLER__COMMAND).observeDetail(getMaster()), new UpdateValueStrategy(), new UpdateValueStrategy().setConverter(new CommandToStringConverter(Messages)));
+			context.bindValue(textProp.observeDelayed(200, t),
+					E4Properties.command(getEditingDomain()).observeDetail(getMaster()),
+					new UpdateValueStrategy<>(), UpdateValueStrategy.create(new CommandToStringConverter(Messages)));
 
 			Button b = ControlFactory.createFindButton(parent, resourcePool);
 			b.addSelectionListener(new SelectionAdapter() {
 				@Override
 				public void widgetSelected(SelectionEvent e) {
-					final HandlerCommandSelectionDialog dialog = new HandlerCommandSelectionDialog(b.getShell(), (MHandler) getMaster().getValue(), resource, Messages);
+					final HandlerCommandSelectionDialog dialog = new HandlerCommandSelectionDialog(b.getShell(),
+							getMaster().getValue(), resource, Messages);
 					dialog.open();
 				}
 			});
@@ -209,7 +214,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ImperativeExpressionEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ImperativeExpressionEditor.java
index 90fd0ab..4a43262 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ImperativeExpressionEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ImperativeExpressionEditor.java
@@ -32,7 +32,7 @@
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.widgets.Composite;
 
-public class ImperativeExpressionEditor extends AbstractComponentEditor {
+public class ImperativeExpressionEditor extends AbstractComponentEditor<MImperativeExpression> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 
@@ -80,12 +80,13 @@
 			composite.setLayout(new FillLayout());
 			createForm(composite, context, getMaster());
 		}
-		getMaster().setValue(object);
+		getMaster().setValue((MImperativeExpression) object);
 
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MImperativeExpression> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -122,7 +123,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/KeyBindingEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/KeyBindingEditor.java
index a3709e2..471a3df 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/KeyBindingEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/KeyBindingEditor.java
@@ -34,6 +34,7 @@
 import org.eclipse.e4.tools.emf.ui.common.Plugin;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.AbstractPickList.PickListFeatures;
 import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList;
@@ -49,14 +50,12 @@
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
-import org.eclipse.emf.databinding.edit.IEMFEditListProperty;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.edit.command.AddCommand;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.bindings.keys.KeySequence;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
@@ -72,15 +71,12 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class KeyBindingEditor extends AbstractComponentEditor {
-
+public class KeyBindingEditor extends AbstractComponentEditor<MKeyBinding> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 	private StackLayout stackLayout;
 	private final List<Action> actions = new ArrayList<>();
 
-	private final IEMFEditListProperty KEY_BINDING__PARAMETERS = EMFEditProperties.list(getEditingDomain(), CommandsPackageImpl.Literals.KEY_BINDING__PARAMETERS);
-
 	@Inject
 	private IModelResource resource;
 
@@ -143,11 +139,12 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MKeyBinding) object);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, IObservableValue master, boolean isImport) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context, IObservableValue<MKeyBinding> master,
+			boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -160,7 +157,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -168,7 +165,8 @@
 			return folder;
 		}
 
-		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp, EMFEditProperties.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
+				E4Properties.elementId(getEditingDomain()));
 
 		// ------------------------------------------------------------
 		{
@@ -181,7 +179,10 @@
 			final GridData gd = new GridData(GridData.FILL_HORIZONTAL);
 			gd.horizontalSpan = 2;
 			t.setLayoutData(gd);
-			final Binding binding = context.bindValue(textProp.observeDelayed(200, t), EMFEditProperties.value(getEditingDomain(), CommandsPackageImpl.Literals.KEY_SEQUENCE__KEY_SEQUENCE).observeDetail(getMaster()), new UpdateValueStrategy().setBeforeSetValidator(new BindingValidator()), new UpdateValueStrategy());
+			final Binding binding = context.bindValue(textProp.observeDelayed(200, t),
+					E4Properties.keySequence(getEditingDomain()).observeDetail(getMaster()),
+					new UpdateValueStrategy<String, String>().setBeforeSetValidator(new BindingValidator()),
+					new UpdateValueStrategy<>());
 			Util.addDecoration(t, binding);
 		}
 
@@ -195,13 +196,17 @@
 			TextPasteHandler.createFor(t);
 			t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			t.setEditable(false);
-			context.bindValue(textProp.observeDelayed(200, t), EMFEditProperties.value(getEditingDomain(), CommandsPackageImpl.Literals.KEY_BINDING__COMMAND).observeDetail(getMaster()), new UpdateValueStrategy(), new UpdateValueStrategy().setConverter(new CommandToStringConverter(Messages)));
+			context.bindValue(textProp.observeDelayed(200, t),
+					E4Properties.keyBindingCommand(getEditingDomain()).observeDetail(getMaster()),
+					new UpdateValueStrategy<>(),
+					UpdateValueStrategy.create(new CommandToStringConverter(Messages)));
 
 			Button b = ControlFactory.createFindButton(parent, resourcePool);
 			b.addSelectionListener(new SelectionAdapter() {
 				@Override
 				public void widgetSelected(SelectionEvent e) {
-					final KeyBindingCommandSelectionDialog dialog = new KeyBindingCommandSelectionDialog(b.getShell(), (MKeyBinding) getMaster().getValue(), resource, Messages);
+					final KeyBindingCommandSelectionDialog dialog = new KeyBindingCommandSelectionDialog(b.getShell(),
+							getMaster().getValue(), resource, Messages);
 					dialog.open();
 				}
 			});
@@ -225,7 +230,7 @@
 
 			final TableViewer viewer = pickList.getList();
 
-			viewer.setInput(KEY_BINDING__PARAMETERS.observeDetail(getMaster()));
+			viewer.setInput(E4Properties.keyBindingParameters(getEditingDomain()).observeDetail(getMaster()));
 		}
 		//
 
@@ -246,8 +251,8 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		return KEY_BINDING__PARAMETERS.observe(element);
+	public IObservableList<?> getChildList(Object element) {
+		return E4Properties.keyBindingParameters(getEditingDomain()).observe((MKeyBinding) element);
 	}
 
 	@Override
@@ -264,21 +269,21 @@
 		return new FeaturePath[] { FeaturePath.fromList(CommandsPackageImpl.Literals.KEY_SEQUENCE__KEY_SEQUENCE) };
 	}
 
-	class BindingValidator implements IValidator {
+	class BindingValidator implements IValidator<String> {
 
 		@Override
-		public IStatus validate(Object value) {
+		public IStatus validate(String value) {
 			final int statusCode = getEditor().isLiveModel() ? IStatus.ERROR : IStatus.WARNING;
-			if (value != null && value.toString().trim().length() > 0) {
+			if (value != null && value.trim().length() > 0) {
 				try {
-					final KeySequence keySequence = KeySequence.getInstance(value.toString());
+					final KeySequence keySequence = KeySequence.getInstance(value);
 					if (!keySequence.isComplete()) {
 						return new Status(statusCode, Plugin.ID, Messages.KeyBindingEditor_SequenceNotComplete);
 					}
 					if (keySequence.isEmpty()) {
 						return new Status(statusCode, Plugin.ID, Messages.KeyBindingEditor_SequenceEmpty);
 					}
-					if (!value.toString().toUpperCase().equals(value.toString())) {
+					if (!value.toUpperCase().equals(value)) {
 						return new Status(IStatus.ERROR, Plugin.ID, Messages.KeyBindingEditor_SequenceLowercase);
 					}
 
@@ -293,7 +298,7 @@
 	}
 
 	protected void handleAddParameter() {
-		final MKeyBinding item = (MKeyBinding) getMaster().getValue();
+		final MKeyBinding item = getMaster().getValue();
 		final MParameter param = MCommandsFactory.INSTANCE.createParameter();
 		setElementId(param);
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuContributionEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuContributionEditor.java
index e49ca52..638c2b1 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuContributionEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuContributionEditor.java
@@ -25,10 +25,10 @@
 
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.e4.tools.emf.ui.common.IModelResource;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList;
 import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList.Struct;
@@ -42,17 +42,14 @@
 import org.eclipse.e4.ui.workbench.modeling.EModelService;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.IEMFListProperty;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.edit.command.AddCommand;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.swt.SWT;
@@ -69,12 +66,9 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class MenuContributionEditor extends AbstractComponentEditor {
+public class MenuContributionEditor extends AbstractComponentEditor<MMenuContribution> {
 	private Composite composite;
 	private EMFDataBindingContext context;
-
-	private final IListProperty ELEMENT_CONTAINER__CHILDREN = EMFProperties
-			.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
 	private StackLayout stackLayout;
 	private final List<Action> actions = new ArrayList<>();
 
@@ -176,11 +170,12 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MMenuContribution) object);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master, boolean isImport) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MMenuContribution> master, boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -193,7 +188,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -202,11 +197,9 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(),
-				context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE));
+				context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
 
 		{
 			final Label l = new Label(parent, SWT.NONE);
@@ -219,26 +212,23 @@
 			final GridData gd = new GridData(GridData.FILL_HORIZONTAL);
 			t.setLayoutData(gd);
 			context.bindValue(textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(), MenuPackageImpl.Literals.MENU_CONTRIBUTION__PARENT_ID)
-					.observeDetail(getMaster()));
+					E4Properties.menuParentId(getEditingDomain()).observeDetail(getMaster()));
 
 			Button b = ControlFactory.createFindButton(parent, resourcePool);
 			b.addSelectionListener(new SelectionAdapter() {
 				@Override
 				public void widgetSelected(SelectionEvent e) {
 					final MenuIdDialog dialog = new MenuIdDialog(t.getShell(), resource,
-							(MMenuContribution) getMaster().getValue(), getEditingDomain(), modelService, Messages);
+							getMaster().getValue(), getEditingDomain(), modelService, Messages);
 					dialog.open();
 				}
 			});
 
 		}
 
-		ControlFactory
-		.createTextField(parent, Messages.MenuContributionEditor_Position,
+		ControlFactory.createTextField(parent, Messages.MenuContributionEditor_Position,
 				Messages.MenuContributionEditor_PositionTooltip, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(),
-						MenuPackageImpl.Literals.MENU_CONTRIBUTION__POSITION_IN_PARENT));
+				E4Properties.menuPositionInParent(getEditingDomain()));
 
 		// ------------------------------------------------------------
 		{
@@ -265,9 +255,7 @@
 			pickList.setText(Messages.MenuContributionEditor_MenuItems);
 
 			final TableViewer viewer = pickList.getList();
-			final IEMFListProperty prop = EMFEditProperties.list(getEditingDomain(),
-					UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
-			viewer.setInput(prop.observeDetail(master));
+			viewer.setInput(E4Properties.<MMenuElement>children(getEditingDomain()).observeDetail(master));
 
 			final Struct defaultStruct = new Struct(Messages.MenuContributionEditor_HandledMenuItem,
 					MenuPackageImpl.Literals.HANDLED_MENU_ITEM, false);
@@ -283,15 +271,10 @@
 
 		}
 
-		ControlFactory
-		.createCheckBox(
-				parent,
-				"To Be Rendered", getMaster(), context, WidgetProperties.selection(), EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED)); //$NON-NLS-1$
-		ControlFactory
-		.createCheckBox(
-				parent,
-				"Visible", getMaster(), context, WidgetProperties.selection(), EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE)); //$NON-NLS-1$
-
+		ControlFactory.createCheckBox(parent, "To Be Rendered", getMaster(), context, //$NON-NLS-1$
+				WidgetProperties.buttonSelection(), E4Properties.toBeRendered(getEditingDomain()));
+		ControlFactory.createCheckBox(parent, "Visible", getMaster(), context, //$NON-NLS-1$
+				WidgetProperties.buttonSelection(), E4Properties.visible(getEditingDomain()));
 		item = new CTabItem(folder, SWT.NONE);
 		item.setText(Messages.ModelTooling_Common_TabSupplementary);
 
@@ -311,8 +294,8 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		return ELEMENT_CONTAINER__CHILDREN.observe(element);
+	public IObservableList<?> getChildList(Object element) {
+		return E4Properties.<MMenuElement>children().observe((MMenuContribution) element);
 	}
 
 	@Override
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuEditor.java
index 1ce617e..2af0531 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuEditor.java
@@ -28,13 +28,13 @@
 import org.eclipse.core.databinding.observable.list.ListDiffVisitor;
 import org.eclipse.core.databinding.observable.list.WritableList;
 import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.tools.emf.ui.common.ImageTooltip;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList;
 import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList.Struct;
@@ -44,6 +44,7 @@
 import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.MenuIconDialogEditor;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VMenuEditor;
 import org.eclipse.e4.tools.emf.ui.internal.common.uistructure.UIViewer;
+import org.eclipse.e4.ui.model.application.MApplicationElement;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.MExpression;
 import org.eclipse.e4.ui.model.application.ui.MUIElement;
@@ -56,11 +57,7 @@
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.IEMFListProperty;
-import org.eclipse.emf.databinding.IEMFValueProperty;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
@@ -68,8 +65,8 @@
 import org.eclipse.emf.edit.command.SetCommand;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
-import org.eclipse.jface.databinding.viewers.ViewerProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.ComboViewer;
 import org.eclipse.jface.viewers.LabelProvider;
@@ -90,15 +87,9 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class MenuEditor extends AbstractComponentEditor {
-
+public class MenuEditor extends AbstractComponentEditor<MMenu> {
 	private Composite composite;
 	private EMFDataBindingContext context;
-
-	private final IListProperty ELEMENT_CONTAINER__CHILDREN = EMFProperties
-			.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
-	private final IEMFValueProperty UI_ELEMENT__VISIBLE_WHEN = EMFProperties
-			.value(UiPackageImpl.Literals.UI_ELEMENT__VISIBLE_WHEN);
 	private StackLayout stackLayout;
 	private final List<Action> actions = new ArrayList<>();
 
@@ -156,7 +147,7 @@
 				createImageDescriptor(ResourceProvider.IMG_CoreExpression)) {
 			@Override
 			public void run() {
-				final MUIElement e = (MUIElement) getMaster().getValue();
+				final MUIElement e = getMaster().getValue();
 				final Command cmd = SetCommand.create(getEditingDomain(), e,
 						UiPackageImpl.Literals.UI_ELEMENT__VISIBLE_WHEN, MUiFactory.INSTANCE.createCoreExpression());
 				if (cmd.canExecute()) {
@@ -205,13 +196,13 @@
 			composite.layout(true, true);
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MMenu) object);
 		enableIdGenerator(UiPackageImpl.Literals.UI_LABEL__LABEL,
 				ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID, null);
 		return composite;
 	}
 
-	protected Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master,
+	protected Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue<MMenu> master,
 			boolean rootMenu, boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
@@ -225,7 +216,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -234,18 +225,16 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 
 		// ------------------------------------------------------------
 		if (!rootMenu) {
 			ControlFactory.createTranslatedTextField(parent, Messages.MenuEditor_LabelLabel, master, context, textProp,
-					EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__LABEL), resourcePool,
-					project);
+					E4Properties.label(getEditingDomain()), resourcePool, project);
 		}
 
 		ControlFactory.createTextField(parent, Messages.MenuEditor_Mnemonics, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(), MenuPackageImpl.Literals.MENU_ELEMENT__MNEMONICS));
+				E4Properties.mnemonics(getEditingDomain()));
 
 		{
 			final E4PickList pickList = new E4PickList(parent, SWT.NONE, null, this,
@@ -264,17 +253,14 @@
 							MenuPackageImpl.Literals.DYNAMIC_MENU_CONTRIBUTION, false) });
 			pickList.setSelection(new StructuredSelection(defaultStruct));
 
-			final IEMFListProperty prop = EMFEditProperties.list(getEditingDomain(),
-					UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
-			pickList.getList().setInput(prop.observeDetail(master));
+			pickList.getList().setInput(E4Properties.<MMenuElement>children(getEditingDomain()).observeDetail(master));
 
 		}
 
 		// ------------------------------------------------------------
 		if (!rootMenu) {
 			ControlFactory.createTranslatedTextField(parent, Messages.MenuEditor_Tooltip, master, context, textProp,
-					EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__TOOLTIP), resourcePool,
-					project);
+					E4Properties.tooltip(getEditingDomain()), resourcePool, project);
 		}
 
 		// ------------------------------------------------------------
@@ -288,8 +274,7 @@
 			t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			context.bindValue(
 					textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__ICON_URI).observeDetail(
-							master));
+					E4Properties.iconUri(getEditingDomain()).observeDetail(master));
 
 			new ImageTooltip(t, Messages, this);
 
@@ -298,7 +283,7 @@
 				@Override
 				public void widgetSelected(SelectionEvent e) {
 					final MenuIconDialogEditor dialog = new MenuIconDialogEditor(b.getShell(), eclipseContext, project,
-							getEditingDomain(), (MMenu) getMaster().getValue(), Messages);
+							getEditingDomain(), getMaster().getValue(), Messages);
 					dialog.open();
 				}
 			});
@@ -331,17 +316,15 @@
 					UiPackageImpl.Literals.UI_ELEMENT__VISIBLE_WHEN));
 			combo.setInput(list);
 			context.bindValue(ViewerProperties.singleSelection().observe(combo),
-					EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE_WHEN)
-					.observeDetail(getMaster()), new UpdateValueStrategy().setConverter(new EClass2EObject(Messages)),
-					new UpdateValueStrategy().setConverter(new EObject2EClass(Messages)));
+					E4Properties.visibleWhen(getEditingDomain()).observeDetail(getMaster()),
+					UpdateValueStrategy.create(new EClass2EObject<>(Messages)),
+					UpdateValueStrategy.create(new EObject2EClass<>(Messages)));
 		}
 
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED));
+				WidgetProperties.selection(), E4Properties.toBeRendered(getEditingDomain()));
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE));
+				WidgetProperties.selection(), E4Properties.visible(getEditingDomain()));
 
 		item = new CTabItem(folder, SWT.NONE);
 		item.setText(Messages.ModelTooling_Common_TabSupplementary);
@@ -350,8 +333,7 @@
 		item.setControl(parent.getParent());
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(),
-				context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE));
+				context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
 		ControlFactory.createStringListWidget(parent, Messages, this, Messages.CategoryEditor_Tags,
 				ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__TAGS, VERTICAL_LIST_WIDGET_INDENT);
 		ControlFactory.createMapProperties(parent, Messages, this, Messages.ModelTooling_Contribution_PersistedState,
@@ -382,14 +364,15 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		final WritableList list = new WritableList();
+	public IObservableList<?> getChildList(Object element) {
+		final WritableList<MApplicationElement> list = new WritableList<>();
+		MMenu menu = (MMenu) element;
 
-		if (((MUIElement) element).getVisibleWhen() != null) {
-			list.add(0, ((MUIElement) element).getVisibleWhen());
+		if (menu.getVisibleWhen() != null) {
+			list.add(0, menu.getVisibleWhen());
 		}
 
-		UI_ELEMENT__VISIBLE_WHEN.observe(element).addValueChangeListener(event -> {
+		E4Properties.visibleWhen().observe(menu).addValueChangeListener(event -> {
 			if (event.diff.getOldValue() != null) {
 				list.remove(event.diff.getOldValue());
 			}
@@ -399,16 +382,16 @@
 			}
 		});
 
-		final IObservableList l = ELEMENT_CONTAINER__CHILDREN.observe(element);
-		l.addListChangeListener(event -> event.diff.accept(new ListDiffVisitor() {
+		final IObservableList<MMenuElement> l = E4Properties.<MMenuElement>children().observe(menu);
+		l.addListChangeListener(event -> event.diff.accept(new ListDiffVisitor<MMenuElement>() {
 
 			@Override
-			public void handleRemove(int index, Object element) {
+			public void handleRemove(int index, MMenuElement element) {
 				list.remove(element);
 			}
 
 			@Override
-			public void handleMove(int oldIndex, int newIndex, Object element) {
+			public void handleMove(int oldIndex, int newIndex, MMenuElement element) {
 				if (list.get(0) instanceof MExpression) {
 					oldIndex += 1;
 					newIndex += 1;
@@ -417,7 +400,7 @@
 			}
 
 			@Override
-			public void handleAdd(int index, Object element) {
+			public void handleAdd(int index, MMenuElement element) {
 				list.add(element);
 			}
 		}));
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuItemEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuItemEditor.java
index 59ffb9e..dc065d5 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuItemEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuItemEditor.java
@@ -25,7 +25,6 @@
 import org.eclipse.core.databinding.UpdateValueStrategy;
 import org.eclipse.core.databinding.conversion.Converter;
 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.core.resources.IProject;
 import org.eclipse.e4.core.contexts.IEclipseContext;
@@ -33,6 +32,7 @@
 import org.eclipse.e4.tools.emf.ui.common.ImageTooltip;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.Messages;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.ControlFactory.TextPasteHandler;
@@ -45,19 +45,17 @@
 import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.menu.ItemType;
 import org.eclipse.e4.ui.model.application.ui.menu.MMenuItem;
-import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.edit.command.SetCommand;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
-import org.eclipse.jface.databinding.viewers.ViewerProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.ComboViewer;
 import org.eclipse.jface.viewers.LabelProvider;
@@ -77,7 +75,7 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public abstract class MenuItemEditor extends AbstractComponentEditor {
+public abstract class MenuItemEditor<M extends MMenuItem> extends AbstractComponentEditor<M> {
 
 	private Composite composite;
 	private EMFDataBindingContext context;
@@ -103,7 +101,7 @@
 				createImageDescriptor(ResourceProvider.IMG_CoreExpression)) {
 			@Override
 			public void run() {
-				final MUIElement e = (MUIElement) getMaster().getValue();
+				final MUIElement e = getMaster().getValue();
 				final Command cmd = SetCommand.create(getEditingDomain(), e,
 						UiPackageImpl.Literals.UI_ELEMENT__VISIBLE_WHEN, MUiFactory.INSTANCE.createCoreExpression());
 				if (cmd.canExecute()) {
@@ -118,6 +116,7 @@
 		return getImage(element, ResourceProvider.IMG_MenuItem);
 	}
 
+	@SuppressWarnings("unchecked")
 	@Override
 	public Composite doGetEditor(Composite parent, Object object) {
 		if (composite == null) {
@@ -147,14 +146,14 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((M) object);
 		enableIdGenerator(UiPackageImpl.Literals.UI_LABEL__LABEL,
 				ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID, null);
 
 		return composite;
 	}
 
-	protected CTabFolder createForm(Composite parent, EMFDataBindingContext context, WritableValue master,
+	protected CTabFolder createForm(Composite parent, EMFDataBindingContext context, WritableValue<M> master,
 			boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
@@ -164,9 +163,9 @@
 		parent = createScrollableContainer(folder);
 		item.setControl(parent.getParent());
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
-		final IWidgetValueProperty checkProp = WidgetProperties.selection();
-		final IWidgetValueProperty enabled = WidgetProperties.enabled();
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Button, Boolean> checkProp = WidgetProperties.buttonSelection();
+		final IWidgetValueProperty<Button, Boolean> enabled = WidgetProperties.enabled();
 
 		if (getEditor().isShowXMIId() || getEditor().isLiveModel()) {
 			ControlFactory.createXMIId(parent, this);
@@ -179,8 +178,7 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 
 		if (this.getClass() != MenuItemEditor.class) {
 			// ------------------------------------------------------------
@@ -195,19 +193,17 @@
 				final GridData gd = new GridData();
 				gd.horizontalSpan = 2;
 				viewer.getControl().setLayoutData(gd);
-				final IObservableValue itemTypeObs = EMFEditProperties.value(getEditingDomain(),
-						MenuPackageImpl.Literals.ITEM__TYPE).observeDetail(master);
-				context.bindValue(ViewerProperties.singleSelection().observe(viewer), itemTypeObs);
+				context.bindValue(ViewerProperties.singleSelection().observe(viewer),
+						E4Properties.type(getEditingDomain()).observeDetail(master));
 			}
 		}
 
 		ControlFactory.createTranslatedTextField(parent, Messages.MenuItemEditor_Label, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__LABEL), resourcePool, project);
+				E4Properties.label(getEditingDomain()), resourcePool, project);
 		ControlFactory.createTextField(parent, Messages.MenuItemEditor_Mnemonics, getMaster(), context, textProp,
-				EMFEditProperties.value(getEditingDomain(), MenuPackageImpl.Literals.MENU_ELEMENT__MNEMONICS));
+				E4Properties.mnemonics(getEditingDomain()));
 		ControlFactory.createTranslatedTextField(parent, Messages.MenuItemEditor_Tooltip, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__TOOLTIP), resourcePool,
-				project);
+				E4Properties.tooltip(getEditingDomain()), resourcePool, project);
 
 		// ------------------------------------------------------------
 		{
@@ -220,8 +216,7 @@
 			t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			context.bindValue(
 					textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__ICON_URI).observeDetail(
-							master));
+					E4Properties.iconUri(getEditingDomain()).observeDetail(master));
 
 			new ImageTooltip(t, Messages, this);
 
@@ -230,7 +225,7 @@
 				@Override
 				public void widgetSelected(SelectionEvent e) {
 					final MenuItemIconDialogEditor dialog = new MenuItemIconDialogEditor(b.getShell(), eclipseContext,
-							project, getEditingDomain(), (MMenuItem) getMaster().getValue(), Messages);
+							project, getEditingDomain(), getMaster().getValue(), Messages);
 					dialog.open();
 				}
 			});
@@ -243,10 +238,8 @@
 
 			final Button b = new Button(parent, SWT.CHECK);
 			b.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false, 2, 1));
-			context.bindValue(
-					checkProp.observe(b),
-					EMFEditProperties.value(getEditingDomain(), MenuPackageImpl.Literals.ITEM__ENABLED).observeDetail(
-							getMaster()));
+			context.bindValue(checkProp.observe(b),
+					E4Properties.enabled(getEditingDomain()).observeDetail(getMaster()));
 		}
 
 		{
@@ -258,30 +251,28 @@
 			b.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false, 2, 1));
 			context.bindValue(
 					checkProp.observe(b),
-					EMFEditProperties.value(getEditingDomain(), MenuPackageImpl.Literals.ITEM__SELECTED).observeDetail(
-							getMaster()));
+					E4Properties.selected(getEditingDomain()).observeDetail(getMaster()));
 
-			final UpdateValueStrategy t2m = new UpdateValueStrategy();
-			t2m.setConverter(new Converter(boolean.class, ItemType.class) {
+			final UpdateValueStrategy<Boolean, ItemType> t2m = new UpdateValueStrategy<>();
+			t2m.setConverter(new Converter<Boolean, ItemType>(boolean.class, ItemType.class) {
 
 				@Override
-				public Object convert(Object fromObject) {
+				public ItemType convert(Boolean fromObject) {
 					return null;
 				}
 			});
-			final UpdateValueStrategy m2t = new UpdateValueStrategy();
-			m2t.setConverter(new Converter(ItemType.class, boolean.class) {
+			final UpdateValueStrategy<ItemType, Boolean> m2t = new UpdateValueStrategy<>();
+			m2t.setConverter(new Converter<ItemType, Boolean>(ItemType.class, boolean.class) {
 
 				@Override
-				public Object convert(Object fromObject) {
+				public Boolean convert(ItemType fromObject) {
 					return fromObject == ItemType.CHECK || fromObject == ItemType.RADIO;
 				}
 			});
 
 			context.bindValue(
 					enabled.observe(b),
-					EMFEditProperties.value(getEditingDomain(), MenuPackageImpl.Literals.ITEM__TYPE).observeDetail(
-							getMaster()), t2m, m2t);
+					E4Properties.type(getEditingDomain()).observeDetail(getMaster()), t2m, m2t);
 
 		}
 
@@ -312,19 +303,17 @@
 					UiPackageImpl.Literals.UI_ELEMENT__VISIBLE_WHEN));
 			combo.setInput(list);
 			context.bindValue(ViewerProperties.singleSelection().observe(combo),
-					EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE_WHEN)
-					.observeDetail(getMaster()), new UpdateValueStrategy().setConverter(new EClass2EObject(Messages)),
-					new UpdateValueStrategy().setConverter(new EObject2EClass(Messages)));
+					E4Properties.visibleWhen(getEditingDomain()).observeDetail(getMaster()),
+					UpdateValueStrategy.create(new EClass2EObject<>(Messages)),
+					UpdateValueStrategy.create(new EObject2EClass<>(Messages)));
 		}
 
 		createFormSubTypeForm(parent, context, master);
 
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED));
+				WidgetProperties.selection(), E4Properties.toBeRendered(getEditingDomain()));
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE));
+				WidgetProperties.selection(), E4Properties.visible(getEditingDomain()));
 
 		item = new CTabItem(folder, SWT.NONE);
 		item.setText(Messages.ModelTooling_Common_TabSupplementary);
@@ -333,9 +322,7 @@
 		item.setControl(parent.getParent());
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(),
-				context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE));
-
+				context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
 		ControlFactory.createStringListWidget(parent, Messages, this, Messages.CategoryEditor_Tags,
 				ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__TAGS, VERTICAL_LIST_WIDGET_INDENT);
 		ControlFactory.createMapProperties(parent, Messages, this, Messages.ModelTooling_Contribution_PersistedState,
@@ -352,7 +339,8 @@
 		return folder;
 	}
 
-	protected abstract void createFormSubTypeForm(Composite parent, EMFDataBindingContext context, WritableValue master);
+	protected abstract void createFormSubTypeForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<M> master);
 
 	private void createUITreeInspection(CTabFolder folder) {
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -368,7 +356,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
@@ -393,7 +381,7 @@
 		return l;
 	}
 
-	static class EObject2EClass extends Converter {
+	static class EObject2EClass<T> extends Converter<T, Object> {
 		Messages Messages;
 
 		public EObject2EClass(Messages Messages) {
@@ -402,7 +390,7 @@
 		}
 
 		@Override
-		public Object convert(Object fromObject) {
+		public Object convert(T fromObject) {
 			if (fromObject == null) {
 				return Messages.MenuItemEditor_NoExpression;
 			}
@@ -410,7 +398,7 @@
 		}
 	}
 
-	static class EClass2EObject extends Converter {
+	static class EClass2EObject<T> extends Converter<Object, T> {
 		Messages Messages;
 
 		public EClass2EObject(Messages Messages) {
@@ -418,12 +406,13 @@
 			this.Messages = Messages;
 		}
 
+		@SuppressWarnings("unchecked")
 		@Override
-		public Object convert(Object fromObject) {
+		public T convert(Object fromObject) {
 			if (fromObject == null || fromObject.toString().equals(Messages.MenuItemEditor_NoExpression)) {
 				return null;
 			}
-			return EcoreUtil.create((EClass) fromObject);
+			return (T) EcoreUtil.create((EClass) fromObject);
 		}
 	}
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuSeparatorEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuSeparatorEditor.java
index f4c94a6..f9220d6 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuSeparatorEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuSeparatorEditor.java
@@ -22,16 +22,16 @@
 import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.uistructure.UIViewer;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.menu.MMenuSeparator;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
@@ -42,8 +42,9 @@
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Text;
 
-public class MenuSeparatorEditor extends AbstractComponentEditor {
+public class MenuSeparatorEditor extends AbstractComponentEditor<MMenuSeparator> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 	private StackLayout stackLayout;
@@ -106,11 +107,12 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MMenuSeparator) object);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master, boolean isImport) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue<MMenuSeparator> master,
+			boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -123,7 +125,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -131,10 +133,14 @@
 			return folder;
 		}
 
-		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp, EMFEditProperties.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
-		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(), context, textProp, EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE));
-		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context, WidgetProperties.selection(), EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED));
-		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context, WidgetProperties.selection(), EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE));
+		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
+				E4Properties.elementId(getEditingDomain()));
+		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(),
+				context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
+		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
+				WidgetProperties.buttonSelection(), E4Properties.toBeRendered(getEditingDomain()));
+		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
+				WidgetProperties.buttonSelection(), E4Properties.visible(getEditingDomain()));
 
 		item = new CTabItem(folder, SWT.NONE);
 		item.setText(Messages.ModelTooling_Common_TabSupplementary);
@@ -169,7 +175,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ModelFragmentsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ModelFragmentsEditor.java
index 07b9f5d..e0696f9 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ModelFragmentsEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ModelFragmentsEditor.java
@@ -22,11 +22,11 @@
 
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.list.WritableList;
-import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.tools.emf.ui.common.IEditorFeature.FeatureClass;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.AbstractPickList;
 import org.eclipse.e4.tools.emf.ui.internal.common.AbstractPickList.PickListFeatures;
@@ -39,8 +39,6 @@
 import org.eclipse.e4.ui.model.fragment.MModelFragments;
 import org.eclipse.e4.ui.model.fragment.impl.FragmentPackageImpl;
 import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.databinding.EMFProperties;
-import org.eclipse.emf.databinding.IEMFListProperty;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EClassifier;
 import org.eclipse.emf.ecore.EObject;
@@ -59,13 +57,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public class ModelFragmentsEditor extends AbstractComponentEditor {
-
-	private final IListProperty MODEL_FRAGMENTS__FRAGMENTS = EMFProperties
-			.list(FragmentPackageImpl.Literals.MODEL_FRAGMENTS__FRAGMENTS);
-	private final IListProperty MODEL_FRAGMENTS__IMPORTS = EMFProperties
-			.list(FragmentPackageImpl.Literals.MODEL_FRAGMENTS__IMPORTS);
-
+public class ModelFragmentsEditor extends AbstractComponentEditor<MModelFragments> {
 	private Composite composite;
 
 	@Inject
@@ -96,7 +88,7 @@
 		if (composite == null) {
 			composite = createForm(parent);
 		}
-		getMaster().setValue(object);
+		getMaster().setValue((MModelFragments) object);
 		return composite;
 	}
 
@@ -144,9 +136,7 @@
 			};
 			pickList.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
 			final TableViewer viewer = pickList.getList();
-
-			final IEMFListProperty prop = EMFProperties.list(FragmentPackageImpl.Literals.MODEL_FRAGMENTS__FRAGMENTS);
-			viewer.setInput(prop.observeDetail(getMaster()));
+			viewer.setInput(E4Properties.fragments().observeDetail(getMaster()));
 		}
 
 	}
@@ -218,8 +208,7 @@
 			pickList.setSelection(new StructuredSelection(list.get(0)));
 		}
 
-		final IEMFListProperty prop = EMFProperties.list(FragmentPackageImpl.Literals.MODEL_FRAGMENTS__IMPORTS);
-		viewer.setInput(prop.observeDetail(getMaster()));
+		viewer.setInput(E4Properties.imports().observeDetail(getMaster()));
 	}
 
 	public void addClasses(EPackage ePackage, List<FeatureClass> list) {
@@ -240,22 +229,14 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		final WritableList list = new WritableList();
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_MODEL_IMPORTS, MODEL_FRAGMENTS__IMPORTS, element,
-				Messages.ModelFragmentsEditor_Imports) {
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-		});
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_MODEL_FRAGEMENTS, MODEL_FRAGMENTS__FRAGMENTS, element,
-				Messages.ModelFragmentsEditor_ModelFragments) {
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-		});
+	public IObservableList<?> getChildList(Object element) {
+		MModelFragments fragments = (MModelFragments) element;
+
+		final WritableList<VirtualEntry<MModelFragments, ?>> list = new WritableList<>();
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_MODEL_IMPORTS, E4Properties.imports(), fragments,
+				Messages.ModelFragmentsEditor_Imports));
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_MODEL_FRAGEMENTS, E4Properties.fragments(), fragments,
+				Messages.ModelFragmentsEditor_ModelFragments));
 
 		return list;
 	}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ParameterEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ParameterEditor.java
index 6b3baba..542f61e 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ParameterEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ParameterEditor.java
@@ -23,18 +23,16 @@
 import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.ControlFactory.TextPasteHandler;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.ParameterIdSelectionDialog;
 import org.eclipse.e4.ui.model.application.commands.MParameter;
-import org.eclipse.e4.ui.model.application.commands.impl.CommandsPackageImpl;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
-import org.eclipse.emf.databinding.edit.IEMFEditValueProperty;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
 import org.eclipse.swt.custom.CTabItem;
@@ -49,7 +47,7 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class ParameterEditor extends AbstractComponentEditor {
+public class ParameterEditor extends AbstractComponentEditor<MParameter> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 
@@ -118,11 +116,12 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MParameter) object);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master, boolean isImport) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue<MParameter> master,
+			boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -135,7 +134,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -143,9 +142,11 @@
 			return folder;
 		}
 
-		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp, EMFEditProperties.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
+				E4Properties.elementId(getEditingDomain()));
 		createParameterNameRow(parent, textProp);
-		ControlFactory.createTextField(parent, Messages.ParameterEditor_Value, master, context, textProp, EMFEditProperties.value(getEditingDomain(), CommandsPackageImpl.Literals.PARAMETER__VALUE));
+		ControlFactory.createTextField(parent, Messages.ParameterEditor_Value, master, context, textProp,
+				E4Properties.parameterValue(getEditingDomain()));
 
 		item = new CTabItem(folder, SWT.NONE);
 		item.setText(Messages.ModelTooling_Common_TabSupplementary);
@@ -164,11 +165,11 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
-	private void createParameterNameRow(Composite parent, IWidgetValueProperty textProp) {
+	private void createParameterNameRow(Composite parent, IWidgetValueProperty<Text, String> textProp) {
 		{
 			final Label commandParameterIdLabel = new Label(parent, SWT.NONE);
 			commandParameterIdLabel.setText(Messages.ParameterEditor_Command_Parameter_ID);
@@ -178,8 +179,8 @@
 			final GridData gd = new GridData(GridData.FILL_HORIZONTAL);
 			commandParameterIdValue.setLayoutData(gd);
 			TextPasteHandler.createFor(commandParameterIdValue);
-			final IEMFEditValueProperty modelProp = EMFEditProperties.value(getEditingDomain(), CommandsPackageImpl.Literals.PARAMETER__NAME);
-			context.bindValue(textProp.observeDelayed(200, commandParameterIdValue), modelProp.observeDetail(getMaster()));
+			context.bindValue(textProp.observeDelayed(200, commandParameterIdValue),
+					E4Properties.parameterName(getEditingDomain()).observeDetail(getMaster()));
 		}
 
 		Button b = ControlFactory.createFindButton(parent, resourcePool);
@@ -189,13 +190,13 @@
 	private final class ChooseParameterButtonSelectionListener extends SelectionAdapter {
 		@Override
 		public void widgetSelected(SelectionEvent e) {
-			final WritableValue master = getMaster();
-			if (master == null || !(master.getValue() instanceof MParameter)) {
+			final WritableValue<MParameter> master = getMaster();
+			if (master == null || master.getValue() == null) {
 				return;
 			}
 
 			final IEclipseContext staticContext = EclipseContextFactory.create("ParameterIdSelectionDialog static context"); //$NON-NLS-1$
-			staticContext.set(MParameter.class, (MParameter) master.getValue());
+			staticContext.set(MParameter.class, master.getValue());
 			final ParameterIdSelectionDialog dialog = ContextInjectionFactory.make(ParameterIdSelectionDialog.class, eclipseContext, staticContext);
 			dialog.open();
 		}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartDescriptorEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartDescriptorEditor.java
index 6ac5e76..f63f1b6 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartDescriptorEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartDescriptorEditor.java
@@ -20,7 +20,6 @@
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.list.WritableList;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.core.databinding.property.value.IValueProperty;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.e4.core.contexts.IEclipseContext;
@@ -29,12 +28,12 @@
 import org.eclipse.e4.tools.emf.ui.common.ImageTooltip;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.ModelEditor;
 import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.ControlFactory.TextPasteHandler;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.PartDescriptorIconDialogEditor;
-import org.eclipse.e4.ui.model.application.commands.impl.CommandsPackageImpl;
 import org.eclipse.e4.ui.model.application.descriptor.basic.MPartDescriptor;
 import org.eclipse.e4.ui.model.application.descriptor.basic.impl.BasicPackageImpl;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
@@ -46,14 +45,11 @@
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
-import org.eclipse.emf.databinding.edit.IEMFEditValueProperty;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.edit.command.SetCommand;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
 import org.eclipse.swt.custom.CTabItem;
@@ -68,7 +64,7 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class PartDescriptorEditor extends AbstractComponentEditor {
+public class PartDescriptorEditor extends AbstractComponentEditor<MPartDescriptor> {
 
 	private Composite composite;
 	private EMFDataBindingContext context;
@@ -80,11 +76,6 @@
 	@Inject
 	IEclipseContext eclipseContext;
 
-	private final IListProperty PART__MENUS = EMFProperties.list(BasicPackageImpl.Literals.PART_DESCRIPTOR__MENUS);
-	private final IListProperty HANDLER_CONTAINER__HANDLERS = EMFProperties
-			.list(CommandsPackageImpl.Literals.HANDLER_CONTAINER__HANDLERS);
-	private final IValueProperty PART__TOOLBAR = EMFProperties
-			.value(BasicPackageImpl.Literals.PART_DESCRIPTOR__TOOLBAR);
 	private Button createRemoveToolBar;
 	private StackLayout stackLayout;
 
@@ -141,14 +132,14 @@
 			createRemoveToolBar.setSelection(((MPartDescriptor) object).getToolbar() != null);
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MPartDescriptor) object);
 		enableIdGenerator(UiPackageImpl.Literals.UI_LABEL__LABEL,
 				ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID, null);
 		return composite;
 	}
 
-	protected Composite createForm(Composite parent, EMFDataBindingContext context, IObservableValue master,
-			boolean isImport) {
+	protected Composite createForm(Composite parent, EMFDataBindingContext context,
+			IObservableValue<MPartDescriptor> master, boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -161,7 +152,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -170,14 +161,12 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 		ControlFactory.createTranslatedTextField(parent, Messages.PartDescriptorEditor_LabelLabel, master, context,
-				textProp, EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__LABEL),
+				textProp, E4Properties.label(getEditingDomain()),
 				resourcePool, project);
 		ControlFactory.createTranslatedTextField(parent, Messages.PartDescriptorEditor_Tooltip, master, context,
-				textProp, EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__TOOLTIP),
-				resourcePool, project);
+				textProp, E4Properties.tooltip(getEditingDomain()), resourcePool, project);
 
 		// ------------------------------------------------------------
 		{
@@ -190,8 +179,7 @@
 			t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			context.bindValue(
 					textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__ICON_URI).observeDetail(
-							master));
+					E4Properties.iconUri(getEditingDomain()).observeDetail(master));
 
 			new ImageTooltip(t, Messages, this);
 
@@ -200,7 +188,7 @@
 				@Override
 				public void widgetSelected(SelectionEvent e) {
 					final PartDescriptorIconDialogEditor dialog = new PartDescriptorIconDialogEditor(b.getShell(),
-							eclipseContext, project, getEditingDomain(), (MPartDescriptor) getMaster().getValue(), Messages);
+							eclipseContext, project, getEditingDomain(), getMaster().getValue(), Messages);
 					dialog.open();
 				}
 			});
@@ -218,10 +206,10 @@
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				final MPart dummyPart = MBasicFactory.INSTANCE.createPart();
-				final String contributionURI = ((MPartDescriptor) getMaster().getValue()).getContributionURI();
+				final String contributionURI = getMaster().getValue().getContributionURI();
 				dummyPart.setContributionURI(contributionURI);
 				contributionCreator.createOpen(dummyPart, getEditingDomain(), project, folder.getShell());
-				((MPartDescriptor) master.getValue()).setContributionURI(dummyPart.getContributionURI());
+				master.getValue().setContributionURI(dummyPart.getContributionURI());
 			}
 		});
 
@@ -235,7 +223,7 @@
 			createRemoveToolBar.addSelectionListener(new SelectionAdapter() {
 				@Override
 				public void widgetSelected(SelectionEvent e) {
-					final MPartDescriptor window = (MPartDescriptor) getMaster().getValue();
+					final MPartDescriptor window = getMaster().getValue();
 					if (window.getToolbar() == null) {
 						addToolBar();
 					} else {
@@ -256,9 +244,12 @@
 			final GridData gd = new GridData(GridData.FILL_HORIZONTAL);
 			gd.horizontalSpan = 2;
 			t.setLayoutData(gd);
+			// TODO: Is it correct to use containerData on an MPartDescriptor?
+			@SuppressWarnings({ "unchecked", "rawtypes" })
+			IValueProperty<MPartDescriptor, String> containerData = (IValueProperty) E4Properties
+			.containerData(getEditingDomain());
 			context.bindValue(textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__CONTAINER_DATA)
-					.observeDetail(master));
+					containerData.observeDetail(master));
 		}
 
 
@@ -271,11 +262,8 @@
 			final Button checkbox = new Button(parent, SWT.CHECK);
 			checkbox.setLayoutData(new GridData(GridData.BEGINNING, GridData.BEGINNING, false, false, 2, 1));
 
-			final IEMFEditValueProperty mprop = EMFEditProperties.value(getEditingDomain(),
-					BasicPackageImpl.Literals.PART_DESCRIPTOR__CLOSEABLE);
-			final IWidgetValueProperty uiProp = WidgetProperties.selection();
-
-			context.bindValue(uiProp.observe(checkbox), mprop.observeDetail(master));
+			context.bindValue(WidgetProperties.buttonSelection().observe(checkbox),
+					E4Properties.closable(getEditingDomain()).observeDetail(master));
 		}
 
 		// ------------------------------------------------------------
@@ -287,11 +275,8 @@
 			final Button checkbox = new Button(parent, SWT.CHECK);
 			checkbox.setLayoutData(new GridData(GridData.BEGINNING, GridData.BEGINNING, false, false, 2, 1));
 
-			final IEMFEditValueProperty mprop = EMFEditProperties.value(getEditingDomain(),
-					BasicPackageImpl.Literals.PART_DESCRIPTOR__ALLOW_MULTIPLE);
-			final IWidgetValueProperty uiProp = WidgetProperties.selection();
-
-			context.bindValue(uiProp.observe(checkbox), mprop.observeDetail(master));
+			context.bindValue(WidgetProperties.buttonSelection().observe(checkbox),
+					E4Properties.allowMultiple(getEditingDomain()).observeDetail(master));
 		}
 
 		// ------------------------------------------------------------
@@ -303,8 +288,7 @@
 			final Text t = new Text(parent, SWT.BORDER);
 			t.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false, 2, 1));
 			context.bindValue(textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(), BasicPackageImpl.Literals.PART_DESCRIPTOR__CATEGORY)
-					.observeDetail(master));
+					E4Properties.category(getEditingDomain()).observeDetail(master));
 		}
 
 		ControlFactory.createBindingContextWiget(parent, Messages, this, Messages.PartEditor_BindingContexts);
@@ -355,39 +339,24 @@
 	}
 
 	@Override
-	public IObservableList getChildList(final Object element) {
-		final WritableList list = new WritableList();
+	public IObservableList<?> getChildList(final Object element) {
+		final WritableList<Object> list = new WritableList<>();
+		final MPartDescriptor window = (MPartDescriptor) element;
 
 		if (getEditor().isModelFragment() && Util.isImport((EObject) element)) {
 			return list;
 		}
 
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_PARTDESCRIPTOR_MENU, PART__MENUS, element,
-				Messages.PartDescriptorEditor_Menus) {
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_PARTDESCRIPTOR_MENU, E4Properties.partDescriptorMenus(), window,
+				Messages.PartDescriptorEditor_Menus));
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_HANDLER, E4Properties.handlers(), window,
+				Messages.PartDescriptorEditor_Handlers));
 
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-
-		});
-
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_HANDLER, HANDLER_CONTAINER__HANDLERS, element,
-				Messages.PartDescriptorEditor_Handlers) {
-
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-
-		});
-
-		final MPartDescriptor window = (MPartDescriptor) element;
 		if (window.getToolbar() != null) {
 			list.add(0, window.getToolbar());
 		}
 
-		PART__TOOLBAR.observe(element).addValueChangeListener(event -> {
+		E4Properties.partDescriptorToolbar().observe(window).addValueChangeListener(event -> {
 			if (event.diff.getOldValue() != null) {
 				list.remove(event.diff.getOldValue());
 				if (getMaster().getValue() == element && !createRemoveToolBar.isDisposed()) {
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartEditor.java
index 8179ac9..94c9b98 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartEditor.java
@@ -20,14 +20,13 @@
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.list.WritableList;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.core.databinding.property.list.IListProperty;
-import org.eclipse.core.databinding.property.value.IValueProperty;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.tools.emf.ui.common.ImageTooltip;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.ModelEditor;
 import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry;
@@ -35,7 +34,6 @@
 import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.PartIconDialogEditor;
 import org.eclipse.e4.tools.emf.ui.internal.common.objectdata.ObjectViewer;
 import org.eclipse.e4.tools.emf.ui.internal.common.uistructure.UIViewer;
-import org.eclipse.e4.ui.model.application.commands.impl.CommandsPackageImpl;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.MUILabel;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
@@ -45,13 +43,11 @@
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.edit.command.SetCommand;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
@@ -68,15 +64,10 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class PartEditor extends AbstractComponentEditor {
+public class PartEditor extends AbstractComponentEditor<MPart> {
 
 	private Composite composite;
 	private EMFDataBindingContext context;
-
-	private final IListProperty PART__MENUS = EMFProperties.list(BasicPackageImpl.Literals.PART__MENUS);
-	private final IListProperty HANDLER_CONTAINER__HANDLERS = EMFProperties
-			.list(CommandsPackageImpl.Literals.HANDLER_CONTAINER__HANDLERS);
-	private final IValueProperty PART__TOOLBAR = EMFProperties.value(BasicPackageImpl.Literals.PART__TOOLBAR);
 	private Button createRemoveToolBar;
 	private StackLayout stackLayout;
 
@@ -143,14 +134,14 @@
 			createRemoveToolBar.setSelection(((MPart) object).getToolbar() != null);
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MPart) object);
 		enableIdGenerator(UiPackageImpl.Literals.UI_LABEL__LABEL,
 				ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID, null);
 
 		return composite;
 	}
 
-	protected Composite createForm(Composite parent, EMFDataBindingContext context, IObservableValue master,
+	protected Composite createForm(Composite parent, EMFDataBindingContext context, IObservableValue<MPart> master,
 			boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
@@ -164,7 +155,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -173,15 +164,13 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.PartEditor_LabelLabel, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__LABEL));
+				E4Properties.label(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, master, context,
-				textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE));
+				textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.PartEditor_Tooltip, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__TOOLTIP));
+				E4Properties.tooltip(getEditingDomain()));
 
 		// ------------------------------------------------------------
 		{
@@ -195,8 +184,7 @@
 			t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			context.bindValue(
 					textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__ICON_URI).observeDetail(
-							master));
+					E4Properties.iconUri(getEditingDomain()).observeDetail(master));
 
 			new ImageTooltip(t, Messages, this);
 
@@ -205,7 +193,7 @@
 				@Override
 				public void widgetSelected(SelectionEvent e) {
 					final PartIconDialogEditor dialog = new PartIconDialogEditor(b.getShell(), eclipseContext, project,
-							getEditingDomain(), (MPart) getMaster().getValue(), Messages);
+							getEditingDomain(), getMaster().getValue(), Messages);
 					dialog.open();
 				}
 			});
@@ -218,7 +206,7 @@
 
 		// ------------------------------------------------------------
 		ControlFactory.createTextField(parent, Messages.PartEditor_ContainerData, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__CONTAINER_DATA));
+				E4Properties.containerData(getEditingDomain()));
 
 		createSubformElements(parent, context, master);
 
@@ -231,7 +219,7 @@
 			createRemoveToolBar.addSelectionListener(new SelectionAdapter() {
 				@Override
 				public void widgetSelected(SelectionEvent e) {
-					final MPart window = (MPart) getMaster().getValue();
+					final MPart window = getMaster().getValue();
 					if (window.getToolbar() == null) {
 						addToolBar();
 					} else {
@@ -243,16 +231,14 @@
 		}
 
 		ControlFactory.createCheckBox(parent, Messages.PartEditor_Closeable, Messages.PartEditor_Closeable_Tooltip,
-				getMaster(), context, WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), BasicPackageImpl.Literals.PART__CLOSEABLE));
+				getMaster(), context, WidgetProperties.buttonSelection(),
+				E4Properties.partClosable(getEditingDomain()));
 
 		// ------------------------------------------------------------
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED));
+				WidgetProperties.buttonSelection(), E4Properties.toBeRendered(getEditingDomain()));
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE));
+				WidgetProperties.buttonSelection(), E4Properties.visible(getEditingDomain()));
 
 		ControlFactory.createBindingContextWiget(parent, Messages, this, Messages.PartEditor_BindingContexts);
 		ControlFactory.createMapProperties(parent, Messages, this, Messages.ModelTooling_Contribution_PersistedState,
@@ -329,44 +315,30 @@
 		}
 	}
 
-	protected void createSubformElements(Composite parent, EMFDataBindingContext context, IObservableValue master) {
+	protected void createSubformElements(Composite parent, EMFDataBindingContext context,
+			IObservableValue<MPart> master) {
 
 	}
 
 	@Override
-	public IObservableList getChildList(final Object element) {
-		final WritableList list = new WritableList();
+	public IObservableList<?> getChildList(final Object element) {
+		final WritableList<Object> list = new WritableList<>();
+		final MPart window = (MPart) element;
 
 		if (getEditor().isModelFragment() && Util.isImport((EObject) element)) {
 			return list;
 		}
 
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_PART_MENU, PART__MENUS, element,
-				Messages.PartEditor_Menus) {
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_PART_MENU, E4Properties.partMenus(), window,
+				Messages.PartEditor_Menus));
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_HANDLER, E4Properties.handlers(), window,
+				Messages.PartEditor_Handlers));
 
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-
-		});
-
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_HANDLER, HANDLER_CONTAINER__HANDLERS, element,
-				Messages.PartEditor_Handlers) {
-
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-
-		});
-
-		final MPart window = (MPart) element;
 		if (window.getToolbar() != null) {
 			list.add(0, window.getToolbar());
 		}
 
-		PART__TOOLBAR.observe(element).addValueChangeListener(event -> {
+		E4Properties.partToolbar().observe(window).addValueChangeListener(event -> {
 			if (event.diff.getOldValue() != null) {
 				list.remove(event.diff.getOldValue());
 				if (getMaster().getValue() == element && !createRemoveToolBar.isDisposed()) {
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartSashContainerEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartSashContainerEditor.java
index aebc71d..093a083 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartSashContainerEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartSashContainerEditor.java
@@ -22,12 +22,12 @@
 
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.tools.emf.ui.common.IEditorFeature.FeatureClass;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList;
 import org.eclipse.e4.tools.emf.ui.internal.common.FeatureClassLabelProvider;
@@ -38,23 +38,21 @@
 import org.eclipse.e4.ui.model.application.ui.advanced.impl.AdvancedPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.model.application.ui.basic.MPartSashContainer;
+import org.eclipse.e4.ui.model.application.ui.basic.MPartSashContainerElement;
 import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.IEMFListProperty;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.edit.command.AddCommand;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.databinding.viewers.IViewerValueProperty;
-import org.eclipse.jface.databinding.viewers.ViewerProperties;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.ComboViewer;
 import org.eclipse.jface.viewers.LabelProvider;
@@ -74,14 +72,12 @@
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
 
-public class PartSashContainerEditor extends AbstractComponentEditor {
+public class PartSashContainerEditor extends AbstractComponentEditor<MPartSashContainer> {
 
 	private Composite composite;
 	private EMFDataBindingContext context;
-
-	private final IListProperty ELEMENT_CONTAINER__CHILDREN = EMFProperties
-			.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
 	private StackLayout stackLayout;
 	private final List<Action> actions = new ArrayList<>();
 	private final List<Action> actionsImport = new ArrayList<>();
@@ -210,11 +206,12 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MPartSashContainer) object);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, final EMFDataBindingContext context, WritableValue master,
+	private Composite createForm(Composite parent, final EMFDataBindingContext context,
+			WritableValue<MPartSashContainer> master,
 			boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
@@ -228,7 +225,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -237,11 +234,9 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(),
-				context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE));
+				context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
 
 		// ------------------------------------------------------------
 		{
@@ -262,15 +257,14 @@
 				}
 			});
 			viewer.setInput(new Boolean[] { Boolean.TRUE, Boolean.FALSE });
-			final IViewerValueProperty vProp = ViewerProperties.singleSelection();
+			final IViewerValueProperty<ComboViewer, Boolean> vProp = ViewerProperties.singleSelection(Boolean.class);
 			context.bindValue(vProp.observe(viewer),
-					EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.GENERIC_TILE__HORIZONTAL)
-					.observeDetail(getMaster()));
+					E4Properties.horizontal(getEditingDomain()).observeDetail(getMaster()));
 		}
 
 		ControlFactory.createSelectedElement(parent, this, context, Messages.PartSashContainerEditor_SelectedElement);
 		ControlFactory.createTextField(parent, Messages.PartSashContainerEditor_ContainerData, master, context,
-				textProp, EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__CONTAINER_DATA));
+				textProp, E4Properties.containerData(getEditingDomain()));
 
 		{
 			final E4PickList pickList = new E4PickList(parent, SWT.NONE, null, this,
@@ -298,16 +292,13 @@
 			pickList.setSelection(new StructuredSelection(eClassList.get(0)));
 
 			final TableViewer viewer = pickList.getList();
-			final IEMFListProperty prop = EMFProperties.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
-			viewer.setInput(prop.observeDetail(getMaster()));
+			viewer.setInput(E4Properties.<MPartSashContainerElement>children().observeDetail(getMaster()));
 		}
 
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED));
+				WidgetProperties.buttonSelection(), E4Properties.toBeRendered(getEditingDomain()));
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE));
+				WidgetProperties.buttonSelection(), E4Properties.visible(getEditingDomain()));
 
 		item = new CTabItem(folder, SWT.NONE);
 		item.setText(Messages.ModelTooling_Common_TabSupplementary);
@@ -345,8 +336,8 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		return ELEMENT_CONTAINER__CHILDREN.observe(element);
+	public IObservableList<?> getChildList(Object element) {
+		return E4Properties.<MPartSashContainerElement>children().observe((MPartSashContainer) element);
 	}
 
 	@Override
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartStackEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartStackEditor.java
index ba8b61b..73274e4 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartStackEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartStackEditor.java
@@ -22,12 +22,12 @@
 
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.tools.emf.ui.common.IEditorFeature.FeatureClass;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList;
 import org.eclipse.e4.tools.emf.ui.internal.common.FeatureClassLabelProvider;
@@ -37,21 +37,19 @@
 import org.eclipse.e4.ui.model.application.ui.advanced.impl.AdvancedPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.model.application.ui.basic.MPartStack;
+import org.eclipse.e4.ui.model.application.ui.basic.MStackElement;
 import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.IEMFListProperty;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.edit.command.AddCommand;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.TreeViewer;
@@ -66,15 +64,13 @@
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Text;
 
 @SuppressWarnings("deprecation")
-public class PartStackEditor extends AbstractComponentEditor {
+public class PartStackEditor extends AbstractComponentEditor<MPartStack> {
 
 	private Composite composite;
 	private EMFDataBindingContext context;
-
-	private final IListProperty ELEMENT_CONTAINER__CHILDREN = EMFProperties
-			.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
 	private StackLayout stackLayout;
 	private final List<Action> actions = new ArrayList<>();
 	private final List<Action> actionsImport = new ArrayList<>();
@@ -188,14 +184,13 @@
 				composite.layout(true, true);
 			}
 		}
-		final IEMFListProperty prop = EMFProperties.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
-		viewer.setInput(prop.observeDetail(getMaster()));
-		getMaster().setValue(object);
+		viewer.setInput(E4Properties.<MStackElement>children().observeDetail(getMaster()));
+		getMaster().setValue((MPartStack) object);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, final EMFDataBindingContext context, WritableValue master,
-			boolean isImport) {
+	private Composite createForm(Composite parent, final EMFDataBindingContext context,
+			WritableValue<MPartStack> master, boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -208,7 +203,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -217,14 +212,12 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(),
-				context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE));
+				context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
 		ControlFactory.createSelectedElement(parent, this, context, Messages.PartStackEditor_SelectedElement);
 		ControlFactory.createTextField(parent, Messages.PartStackEditor_ContainerData, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__CONTAINER_DATA));
+				E4Properties.containerData(getEditingDomain()));
 
 		// ------------------------------------------------------------
 		{
@@ -241,8 +234,7 @@
 			pickList.setText(Messages.PartStackEditor_Parts);
 
 			viewer = pickList.getList();
-			final IEMFListProperty prop = EMFProperties.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
-			viewer.setInput(prop.observeDetail(getMaster()));
+			viewer.setInput(E4Properties.<MStackElement>children().observeDetail(getMaster()));
 
 			pickList.setLabelProvider(new FeatureClassLabelProvider(getEditor()));
 
@@ -260,11 +252,9 @@
 		}
 
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED));
+				WidgetProperties.buttonSelection(), E4Properties.toBeRendered(getEditingDomain()));
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE));
+				WidgetProperties.buttonSelection(), E4Properties.visible(getEditingDomain()));
 
 		item = new CTabItem(folder, SWT.NONE);
 		item.setText(Messages.ModelTooling_Common_TabSupplementary);
@@ -302,8 +292,8 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		return ELEMENT_CONTAINER__CHILDREN.observe(element);
+	public IObservableList<?> getChildList(Object element) {
+		return E4Properties.<MStackElement>children().observe((MPartStack) element);
 	}
 
 	@Override
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PerspectiveEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PerspectiveEditor.java
index f343054..b86c2b6 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PerspectiveEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PerspectiveEditor.java
@@ -24,20 +24,19 @@
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.list.WritableList;
 import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.tools.emf.ui.common.ImageTooltip;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.ModelEditor;
 import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.ControlFactory.TextPasteHandler;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.PerspectiveIconDialogEditor;
 import org.eclipse.e4.tools.emf.ui.internal.common.uistructure.UIViewer;
-import org.eclipse.e4.ui.model.application.commands.impl.CommandsPackageImpl;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.MUILabel;
 import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
@@ -46,16 +45,14 @@
 import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.edit.command.AddCommand;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
@@ -72,16 +69,9 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class PerspectiveEditor extends AbstractComponentEditor {
+public class PerspectiveEditor extends AbstractComponentEditor<MPerspective> {
 	private Composite composite;
 	private EMFDataBindingContext context;
-
-	private final IListProperty ELEMENT_CONTAINER__CHILDREN = EMFProperties
-			.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
-	private final IListProperty PERSPECTIVE__WINDOWS = EMFProperties
-			.list(AdvancedPackageImpl.Literals.PERSPECTIVE__WINDOWS);
-	private final IListProperty HANDLER_CONTAINER__HANDLERS = EMFProperties
-			.list(CommandsPackageImpl.Literals.HANDLER_CONTAINER__HANDLERS);
 	private StackLayout stackLayout;
 	private final List<Action> actions = new ArrayList<>();
 
@@ -190,14 +180,14 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MPerspective) object);
 		enableIdGenerator(UiPackageImpl.Literals.UI_LABEL__LABEL,
 				ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID, null);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, final EMFDataBindingContext context, WritableValue master,
-			boolean isImport) {
+	private Composite createForm(Composite parent, final EMFDataBindingContext context,
+			WritableValue<MPerspective> master, boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -210,7 +200,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -219,18 +209,14 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(),
-				context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE));
+				context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
 		ControlFactory.createSelectedElement(parent, this, context, Messages.PerspectiveEditor_SelectedElement);
 		ControlFactory.createTranslatedTextField(parent, Messages.PerspectiveEditor_LabelLabel, getMaster(), context,
-				textProp, EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__LABEL),
-				resourcePool, project);
+				textProp, E4Properties.label(getEditingDomain()), resourcePool, project);
 		ControlFactory.createTranslatedTextField(parent, Messages.PerspectiveEditor_Tooltip, getMaster(), context,
-				textProp, EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__TOOLTIP),
-				resourcePool, project);
+				textProp, E4Properties.tooltip(getEditingDomain()), resourcePool, project);
 
 		// ------------------------------------------------------------
 		{
@@ -243,8 +229,7 @@
 			t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			context.bindValue(
 					textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__ICON_URI).observeDetail(
-							master));
+					E4Properties.iconUri(getEditingDomain()).observeDetail(master));
 
 			new ImageTooltip(t, Messages, this);
 
@@ -253,18 +238,16 @@
 				@Override
 				public void widgetSelected(SelectionEvent e) {
 					final PerspectiveIconDialogEditor dialog = new PerspectiveIconDialogEditor(b.getShell(),
-							eclipseContext, project, getEditingDomain(), (MPerspective) getMaster().getValue(), Messages);
+							eclipseContext, project, getEditingDomain(), getMaster().getValue(), Messages);
 					dialog.open();
 				}
 			});
 		}
 
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED));
+				WidgetProperties.buttonSelection(), E4Properties.toBeRendered(getEditingDomain()));
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE));
+				WidgetProperties.buttonSelection(), E4Properties.visible(getEditingDomain()));
 
 		final Composite comp0 = ControlFactory.createMapProperties(parent, Messages, this,
 				Messages.ModelTooling_Context_Properties, UiPackageImpl.Literals.CONTEXT__PROPERTIES,
@@ -312,35 +295,16 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		final WritableList list = new WritableList();
+	public IObservableList<?> getChildList(Object element) {
+		final WritableList<VirtualEntry<MPerspective, ?>> list = new WritableList<>();
+		MPerspective perspective = (MPerspective) element;
 
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_HANDLER, HANDLER_CONTAINER__HANDLERS,
-				element, Messages.WindowEditor_Handlers) {
-
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-		});
-
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_PERSPECTIVE_WINDOWS, PERSPECTIVE__WINDOWS, element,
-				Messages.WindowEditor_Windows) {
-
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-		});
-
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_PERSPECTIVE_CONTROLS, ELEMENT_CONTAINER__CHILDREN,
-				element, Messages.PerspectiveEditor_Controls) {
-
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-		});
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_HANDLER, E4Properties.handlers(), perspective,
+				Messages.WindowEditor_Handlers));
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_PERSPECTIVE_WINDOWS, E4Properties.perspectiveWindows(), perspective,
+				Messages.WindowEditor_Windows));
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_PERSPECTIVE_CONTROLS, E4Properties.children(), perspective,
+				Messages.PerspectiveEditor_Controls));
 
 		return list;
 	}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PerspectiveStackEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PerspectiveStackEditor.java
index 55d8a45..f13b3ec 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PerspectiveStackEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PerspectiveStackEditor.java
@@ -24,11 +24,11 @@
 
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.AbstractPickList.PickListFeatures;
 import org.eclipse.e4.tools.emf.ui.internal.common.ComponentLabelProvider;
@@ -42,15 +42,12 @@
 import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.IEMFListProperty;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.edit.command.AddCommand;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
 import org.eclipse.jface.resource.FontDescriptor;
 import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider;
@@ -68,13 +65,11 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
 
-public class PerspectiveStackEditor extends AbstractComponentEditor {
+public class PerspectiveStackEditor extends AbstractComponentEditor<MPerspectiveStack> {
 	private Composite composite;
 	private EMFDataBindingContext context;
-
-	private final IListProperty ELEMENT_CONTAINER__CHILDREN = EMFProperties
-			.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
 	private StackLayout stackLayout;
 	private final List<Action> actions = new ArrayList<>();
 	private final List<Action> actionsImport = new ArrayList<>();
@@ -160,12 +155,12 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MPerspectiveStack) object);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, final EMFDataBindingContext context, WritableValue master,
-			boolean isImport) {
+	private Composite createForm(Composite parent, final EMFDataBindingContext context,
+			WritableValue<MPerspectiveStack> master, boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -178,7 +173,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -187,11 +182,9 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(),
-				context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE));
+				context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
 		ControlFactory.createSelectedElement(parent, this, context, Messages.PerspectiveStackEditor_SelectedElement);
 
 		// ------------------------------------------------------------
@@ -208,21 +201,18 @@
 			pickList.setText(Messages.PerspectiveStackEditor_Perspectives);
 
 			final TableViewer viewer = pickList.getList();
-			viewer.setContentProvider(new ObservableListContentProvider());
+			viewer.setContentProvider(new ObservableListContentProvider<>());
 			final FontDescriptor italicFontDescriptor = FontDescriptor.createFrom(viewer.getControl().getFont())
 					.setStyle(SWT.ITALIC);
 			viewer.setLabelProvider(new DelegatingStyledCellLabelProvider(
 					new ComponentLabelProvider(getEditor(), Messages, italicFontDescriptor)));
-			final IEMFListProperty prop = EMFProperties.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
-			viewer.setInput(prop.observeDetail(getMaster()));
+			viewer.setInput(E4Properties.<MPerspective>children().observeDetail(getMaster()));
 		}
 
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED));
+				WidgetProperties.buttonSelection(), E4Properties.toBeRendered(getEditingDomain()));
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE));
+				WidgetProperties.buttonSelection(), E4Properties.visible(getEditingDomain()));
 
 		item = new CTabItem(folder, SWT.NONE);
 		item.setText(Messages.ModelTooling_Common_TabSupplementary);
@@ -260,8 +250,8 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		return ELEMENT_CONTAINER__CHILDREN.observe(element);
+	public IObservableList<?> getChildList(Object element) {
+		return E4Properties.<MPerspective>children().observe((MPerspectiveStack) element);
 	}
 
 	@Override
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PlaceholderEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PlaceholderEditor.java
index c7259cc..7ff2b25 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PlaceholderEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PlaceholderEditor.java
@@ -25,6 +25,7 @@
 import org.eclipse.e4.tools.emf.ui.common.IModelResource;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.ControlFactory.TextPasteHandler;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.SharedElementsDialog;
@@ -40,10 +41,9 @@
 import org.eclipse.e4.ui.workbench.UIEvents.EventTags;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
@@ -60,7 +60,7 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class PlaceholderEditor extends AbstractComponentEditor {
+public class PlaceholderEditor extends AbstractComponentEditor<MPlaceholder> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 	private StackLayout stackLayout;
@@ -153,11 +153,12 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MPlaceholder) object);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, final EMFDataBindingContext context, WritableValue master, boolean isImport) {
+	private Composite createForm(Composite parent, final EMFDataBindingContext context,
+			WritableValue<MPlaceholder> master, boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -170,7 +171,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -178,9 +179,12 @@
 			return folder;
 		}
 
-		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp, EMFEditProperties.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
-		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(), context, textProp, EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE));
-		ControlFactory.createTextField(parent, Messages.PlaceholderEditor_ContainerData, master, context, textProp, EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__CONTAINER_DATA));
+		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
+				E4Properties.elementId(getEditingDomain()));
+		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(),
+				context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
+		ControlFactory.createTextField(parent, Messages.PlaceholderEditor_ContainerData, master, context, textProp,
+				E4Properties.containerData(getEditingDomain()));
 		// ------------------------------------------------------------
 		{
 			final Label l = new Label(parent, SWT.NONE);
@@ -193,19 +197,18 @@
 			final GridData gd = new GridData(GridData.FILL_HORIZONTAL);
 			t.setLayoutData(gd);
 
-			final UpdateValueStrategy t2m = new UpdateValueStrategy();
-			t2m.setConverter(new Converter(String.class, MUIElement.class) {
-
+			final UpdateValueStrategy<String, MUIElement> t2m = new UpdateValueStrategy<>();
+			t2m.setConverter(new Converter<String, MUIElement>(String.class, MUIElement.class) {
 				@Override
-				public Object convert(Object fromObject) {
+				public MUIElement convert(String fromObject) {
 					return null;
 				}
 			});
-			final UpdateValueStrategy m2t = new UpdateValueStrategy();
-			m2t.setConverter(new Converter(MUIElement.class, String.class) {
+			final UpdateValueStrategy<MUIElement, String> m2t = new UpdateValueStrategy<>();
+			m2t.setConverter(new Converter<MUIElement, String>(MUIElement.class, String.class) {
 
 				@Override
-				public Object convert(Object fromObject) {
+				public String convert(MUIElement fromObject) {
 					if (fromObject != null) {
 						final EObject o = (EObject) fromObject;
 						if (o instanceof MUILabel) {
@@ -216,31 +219,32 @@
 							}
 						}
 
-						return o.eClass().getName() + " - " + ((MUIElement) fromObject).getElementId(); //$NON-NLS-1$
+						return o.eClass().getName() + " - " + fromObject.getElementId(); //$NON-NLS-1$
 					}
 					return null;
 				}
 			});
 
-			context.bindValue(textProp.observe(t),
-					EMFEditProperties.value(getEditingDomain(), AdvancedPackageImpl.Literals.PLACEHOLDER__REF)
-					.observeDetail(getMaster()),
+			context.bindValue(textProp.observe(t), E4Properties.ref(getEditingDomain()).observeDetail(getMaster()),
 					t2m, m2t);
 
 			Button b = ControlFactory.createFindButton(parent, resourcePool);
 			b.addSelectionListener(new SelectionAdapter() {
 				@Override
 				public void widgetSelected(SelectionEvent e) {
-					final SharedElementsDialog dialog = new SharedElementsDialog(b.getShell(), getEditor(), (MPlaceholder) getMaster().getValue(), resource, Messages);
+					final SharedElementsDialog dialog = new SharedElementsDialog(b.getShell(), getEditor(),
+							getMaster().getValue(), resource, Messages);
 					dialog.open();
 				}
 			});
 		}
 
-		ControlFactory.createCheckBox(parent, Messages.PlaceholderEditor_Closeable, getMaster(), context, WidgetProperties.selection(), EMFEditProperties.value(getEditingDomain(), AdvancedPackageImpl.Literals.PLACEHOLDER__CLOSEABLE));
-
-		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context, WidgetProperties.selection(), EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED));
-		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context, WidgetProperties.selection(), EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE));
+		ControlFactory.createCheckBox(parent, Messages.PlaceholderEditor_Closeable, getMaster(), context,
+				WidgetProperties.buttonSelection(), E4Properties.placeholderClosable(getEditingDomain()));
+		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
+				WidgetProperties.buttonSelection(), E4Properties.toBeRendered(getEditingDomain()));
+		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
+				WidgetProperties.buttonSelection(), E4Properties.visible(getEditingDomain()));
 
 		item = new CTabItem(folder, SWT.NONE);
 		item.setText(Messages.ModelTooling_Common_TabSupplementary);
@@ -275,7 +279,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PopupMenuEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PopupMenuEditor.java
index 4e868df..2b15b41 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PopupMenuEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PopupMenuEditor.java
@@ -14,8 +14,10 @@
 package org.eclipse.e4.tools.emf.ui.internal.common.component;
 
 import javax.inject.Inject;
+
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
+import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
 import org.eclipse.swt.widgets.Composite;
 
@@ -27,7 +29,8 @@
 	}
 
 	@Override
-	protected Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master, boolean rootMenu, boolean isImport) {
+	protected Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue<MMenu> master,
+			boolean rootMenu, boolean isImport) {
 		Composite comp = super.createForm(parent, context, master, rootMenu, isImport);
 		if (!isImport) {
 			ControlFactory.createMapProperties(parent, Messages, this, Messages.ModelTooling_Context_Properties, UiPackageImpl.Literals.CONTEXT__PROPERTIES, VERTICAL_LIST_WIDGET_INDENT);
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/StringModelFragment.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/StringModelFragment.java
index 2108370..8afc6f7 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/StringModelFragment.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/StringModelFragment.java
@@ -27,7 +27,6 @@
 import javax.inject.Inject;
 
 import org.eclipse.core.databinding.observable.list.IObservableList;
-import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.emf.xpath.EcoreXPathContextFactory;
 import org.eclipse.e4.emf.xpath.XPathContext;
@@ -36,6 +35,7 @@
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.Util.InternalPackage;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.AbstractPickList.PickListFeatures;
 import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList;
@@ -48,6 +48,7 @@
 import org.eclipse.e4.ui.model.application.MApplicationElement;
 import org.eclipse.e4.ui.model.application.impl.ApplicationElementImpl;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
+import org.eclipse.e4.ui.model.fragment.MModelFragment;
 import org.eclipse.e4.ui.model.fragment.MStringModelFragment;
 import org.eclipse.e4.ui.model.fragment.impl.FragmentPackageImpl;
 import org.eclipse.e4.ui.model.fragment.impl.StringModelFragmentImpl;
@@ -55,10 +56,7 @@
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.common.util.TreeIterator;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.IEMFListProperty;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EClassifier;
 import org.eclipse.emf.ecore.EObject;
@@ -71,7 +69,7 @@
 import org.eclipse.jface.bindings.keys.KeyStroke;
 import org.eclipse.jface.bindings.keys.ParseException;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.fieldassist.ContentProposal;
 import org.eclipse.jface.fieldassist.ContentProposalAdapter;
 import org.eclipse.jface.fieldassist.ControlDecoration;
@@ -96,7 +94,7 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class StringModelFragment extends AbstractComponentEditor {
+public class StringModelFragment extends AbstractComponentEditor<MStringModelFragment> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 
@@ -104,9 +102,6 @@
 	// It can be get from the FindParentReferenceDialog or computed from the ID.
 	private EClass selectedContainer;
 
-	private final IListProperty MODEL_FRAGMENT__ELEMENTS = EMFProperties
-			.list(FragmentPackageImpl.Literals.MODEL_FRAGMENT__ELEMENTS);
-
 	// This is the list of available 'add child' actions depending on selected
 	// values
 	private final List<Action> actions = new ArrayList<>();
@@ -177,7 +172,7 @@
 			composite = createForm(parent);
 		}
 		selectedContainer = null;
-		getMaster().setValue(object);
+		getMaster().setValue((MStringModelFragment) object);
 		updateChildrenChoice();
 		getEditor().setHeaderTitle(getLabel(null));
 		return composite;
@@ -285,7 +280,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 		{
 			final Label l = new Label(parent, SWT.NONE);
 			l.setText(Messages.StringModelFragment_ParentId);
@@ -308,10 +303,7 @@
 			gd = new GridData(GridData.FILL_HORIZONTAL);
 			t.setLayoutData(gd);
 			context.bindValue(textProp.observeDelayed(200, t),
-					EMFEditProperties
-					.value(getEditingDomain(),
-							FragmentPackageImpl.Literals.STRING_MODEL_FRAGMENT__PARENT_ELEMENT_ID)
-					.observeDetail(getMaster()));
+					E4Properties.parentElementId(getEditingDomain()).observeDetail(getMaster()));
 
 			// Add a modify listener to control the change of the ID -> Must
 			// force the computation of selectedContainer.
@@ -322,7 +314,7 @@
 				@Override
 				public void widgetSelected(SelectionEvent e) {
 					final FindParentReferenceElementDialog dialog = new FindParentReferenceElementDialog(b.getShell(),
-							StringModelFragment.this, (MStringModelFragment) getMaster().getValue(), Messages,
+							StringModelFragment.this, getMaster().getValue(), Messages,
 							getSelectedContainer());
 					dialog.open();
 					selectedContainer = dialog.getSelectedContainer();
@@ -352,9 +344,7 @@
 			gd = new GridData(GridData.FILL_HORIZONTAL);
 			featureText.setLayoutData(gd);
 			context.bindValue(textProp.observeDelayed(200, featureText),
-					EMFEditProperties
-					.value(getEditingDomain(), FragmentPackageImpl.Literals.STRING_MODEL_FRAGMENT__FEATURENAME)
-					.observeDetail(getMaster()));
+					E4Properties.featureName(getEditingDomain()).observeDetail(getMaster()));
 
 			// create the decoration for the text component
 			final ControlDecoration deco = new ControlDecoration(featureText, SWT.TOP | SWT.LEFT);
@@ -397,7 +387,7 @@
 				@Override
 				public void widgetSelected(SelectionEvent e) {
 					final FeatureSelectionDialog dialog = new FeatureSelectionDialog(b.getShell(),
-							getEditingDomain(), (MStringModelFragment) getMaster().getValue(), Messages,
+							getEditingDomain(), getMaster().getValue(), Messages,
 							getSelectedContainer());
 					dialog.open();
 				}
@@ -406,8 +396,7 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.StringModelFragment_PositionInList, getMaster(), context,
-				textProp, EMFEditProperties.value(getEditingDomain(),
-						FragmentPackageImpl.Literals.STRING_MODEL_FRAGMENT__POSITION_IN_LIST));
+				textProp, E4Properties.positionInList(getEditingDomain()));
 
 		// ------------------------------------------------------------
 		{
@@ -535,8 +524,7 @@
 
 		// pickList.getList().refresh();
 
-		final IEMFListProperty prop = EMFProperties.list(FragmentPackageImpl.Literals.MODEL_FRAGMENT__ELEMENTS);
-		pickList.getList().setInput(prop.observeDetail(getMaster()));
+		pickList.getList().setInput(E4Properties.elements().observeDetail(getMaster()));
 
 		// Update the possible actions
 		actions.clear();
@@ -551,8 +539,8 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		return MODEL_FRAGMENT__ELEMENTS.observe(element);
+	public IObservableList<?> getChildList(Object element) {
+		return E4Properties.elements().observe((MModelFragment) element);
 	}
 
 	protected void handleAdd(EClass eClass, boolean separator) {
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolBarContributionEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolBarContributionEditor.java
index 4377e37..4fa620d 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolBarContributionEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolBarContributionEditor.java
@@ -25,12 +25,12 @@
 
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.tools.emf.ui.common.IModelResource;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList;
 import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList.Struct;
@@ -45,17 +45,14 @@
 import org.eclipse.e4.ui.workbench.modeling.EModelService;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.IEMFListProperty;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.edit.command.AddCommand;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.TreeViewer;
@@ -74,12 +71,9 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class ToolBarContributionEditor extends AbstractComponentEditor {
+public class ToolBarContributionEditor extends AbstractComponentEditor<MToolBarContribution> {
 	private Composite composite;
 	private EMFDataBindingContext context;
-
-	private final IListProperty ELEMENT_CONTAINER__CHILDREN = EMFProperties
-			.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
 	private StackLayout stackLayout;
 	private final List<Action> actions = new ArrayList<>();
 
@@ -179,11 +173,12 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MToolBarContribution) object);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master, boolean isImport) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MToolBarContribution> master, boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -196,7 +191,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -205,11 +200,9 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(),
-				context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE));
+				context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
 
 		{
 			final Label l = new Label(parent, SWT.NONE);
@@ -222,15 +215,14 @@
 			final GridData gd = new GridData(GridData.FILL_HORIZONTAL);
 			t.setLayoutData(gd);
 			context.bindValue(textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(), MenuPackageImpl.Literals.TOOL_BAR_CONTRIBUTION__PARENT_ID)
-					.observeDetail(getMaster()));
+					E4Properties.toolBarParentId(getEditingDomain()).observeDetail(getMaster()));
 
 			Button b = ControlFactory.createFindButton(parent, resourcePool);
 			b.addSelectionListener(new SelectionAdapter() {
 				@Override
 				public void widgetSelected(SelectionEvent e) {
 					final ToolBarIdDialog dialog = new ToolBarIdDialog(t.getShell(), resource,
-							(MToolBarContribution) getMaster().getValue(), getEditingDomain(), modelService, Messages);
+							getMaster().getValue(), getEditingDomain(), modelService, Messages);
 					dialog.open();
 				}
 			});
@@ -238,8 +230,7 @@
 
 		ControlFactory.createTextField(parent, Messages.ToolBarContributionEditor_Position,
 				Messages.ToolBarContributionEditor_PositionTooltip, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(),
-						MenuPackageImpl.Literals.TOOL_BAR_CONTRIBUTION__POSITION_IN_PARENT));
+				E4Properties.toolBarPositionInParent(getEditingDomain()));
 
 		// ------------------------------------------------------------
 		{
@@ -267,9 +258,7 @@
 			pickList.setText(Messages.ToolBarEditor_ToolbarItems);
 			final TableViewer viewer = pickList.getList();
 
-			final IEMFListProperty prop = EMFEditProperties.list(getEditingDomain(),
-					UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
-			viewer.setInput(prop.observeDetail(master));
+			viewer.setInput(E4Properties.<MToolBarElement>children(getEditingDomain()).observeDetail(master));
 
 			final Struct defaultStruct = new Struct(Messages.ToolBarEditor_HandledToolItem,
 					MenuPackageImpl.Literals.HANDLED_TOOL_ITEM, false);
@@ -281,11 +270,9 @@
 		}
 
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED));
+				WidgetProperties.buttonSelection(), E4Properties.toBeRendered(getEditingDomain()));
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE));
+				WidgetProperties.buttonSelection(), E4Properties.visible(getEditingDomain()));
 
 		item = new CTabItem(folder, SWT.NONE);
 		item.setText(Messages.ModelTooling_Common_TabSupplementary);
@@ -323,8 +310,8 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		return ELEMENT_CONTAINER__CHILDREN.observe(element);
+	public IObservableList<?> getChildList(Object element) {
+		return E4Properties.<MToolBarElement>children().observe((MToolBarContribution) element);
 	}
 
 	@Override
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolBarEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolBarEditor.java
index 975787d..c665102 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolBarEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolBarEditor.java
@@ -23,9 +23,9 @@
 
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList;
 import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList.Struct;
@@ -36,17 +36,14 @@
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.IEMFListProperty;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.edit.command.AddCommand;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.swt.SWT;
@@ -57,14 +54,12 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Text;
 
-public class ToolBarEditor extends AbstractComponentEditor {
+public class ToolBarEditor extends AbstractComponentEditor<MToolBar> {
 
 	private Composite composite;
 	private EMFDataBindingContext context;
-
-	private final IListProperty ELEMENT_CONTAINER__CHILDREN = EMFProperties
-			.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
 	private StackLayout stackLayout;
 	private final List<Action> actions = new ArrayList<>();
 
@@ -149,11 +144,12 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MToolBar) object);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master, boolean isImport) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue<MToolBar> master,
+			boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -166,7 +162,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -175,11 +171,9 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(),
-				context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE));
+				context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
 
 		// ------------------------------------------------------------
 		{
@@ -196,9 +190,7 @@
 			pickList.setText(Messages.ToolBarEditor_ToolbarItems);
 
 			final TableViewer viewer = pickList.getList();
-			final IEMFListProperty prop = EMFEditProperties.list(getEditingDomain(),
-					UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
-			viewer.setInput(prop.observeDetail(master));
+			viewer.setInput(E4Properties.<MToolBarElement>children(getEditingDomain()).observeDetail(master));
 
 			final Struct defaultStruct = new Struct(Messages.ToolBarEditor_HandledToolItem,
 					MenuPackageImpl.Literals.HANDLED_TOOL_ITEM, false);
@@ -209,14 +201,10 @@
 			pickList.setSelection(new StructuredSelection(defaultStruct));
 		}
 
-		ControlFactory
-		.createCheckBox(
-				parent,
-				"To Be Rendered", getMaster(), context, WidgetProperties.selection(), EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED)); //$NON-NLS-1$
-		ControlFactory
-		.createCheckBox(
-				parent,
-				"Visible", getMaster(), context, WidgetProperties.selection(), EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE)); //$NON-NLS-1$
+		ControlFactory.createCheckBox(parent, "To Be Rendered", getMaster(), context,
+				WidgetProperties.buttonSelection(), E4Properties.toBeRendered(getEditingDomain()));
+		ControlFactory.createCheckBox(parent, "Visible", getMaster(), context, WidgetProperties.buttonSelection(),
+				E4Properties.visible(getEditingDomain()));
 
 		item = new CTabItem(folder, SWT.NONE);
 		item.setText(Messages.ModelTooling_Common_TabSupplementary);
@@ -237,8 +225,8 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		return ELEMENT_CONTAINER__CHILDREN.observe(element);
+	public IObservableList<?> getChildList(Object element) {
+		return E4Properties.<MToolBarElement>children().observe((MToolBar) element);
 	}
 
 	@Override
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolBarSeparatorEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolBarSeparatorEditor.java
index 9c60f24..529be7a 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolBarSeparatorEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolBarSeparatorEditor.java
@@ -22,6 +22,7 @@
 import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.uistructure.UIViewer;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
@@ -29,10 +30,9 @@
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBarSeparator;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
@@ -43,8 +43,9 @@
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Text;
 
-public class ToolBarSeparatorEditor extends AbstractComponentEditor {
+public class ToolBarSeparatorEditor extends AbstractComponentEditor<MToolBarSeparator> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 	private StackLayout stackLayout;
@@ -107,11 +108,12 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MToolBarSeparator) object);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master, boolean isImport) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MToolBarSeparator> master, boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -124,7 +126,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -133,17 +135,13 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(),
-				context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE));
+				context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED));
+				WidgetProperties.buttonSelection(), E4Properties.toBeRendered(getEditingDomain()));
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE));
+				WidgetProperties.buttonSelection(), E4Properties.visible(getEditingDomain()));
 
 		item = new CTabItem(folder, SWT.NONE);
 		item.setText(Messages.ModelTooling_Common_TabSupplementary);
@@ -181,7 +179,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolControlEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolControlEditor.java
index a68d868..06764f7 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolControlEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolControlEditor.java
@@ -26,22 +26,21 @@
 import org.eclipse.e4.tools.emf.ui.common.IContributionClassCreator;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.ControlFactory.TextPasteHandler;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.ContributionClassDialog;
 import org.eclipse.e4.tools.emf.ui.internal.common.objectdata.ObjectViewer;
 import org.eclipse.e4.tools.emf.ui.internal.common.uistructure.UIViewer;
-import org.eclipse.e4.ui.model.application.MContribution;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolControl;
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
@@ -59,7 +58,7 @@
 import org.eclipse.swt.widgets.Link;
 import org.eclipse.swt.widgets.Text;
 
-public class ToolControlEditor extends AbstractComponentEditor {
+public class ToolControlEditor extends AbstractComponentEditor<MToolControl> {
 	private EMFDataBindingContext context;
 	private Composite composite;
 	private StackLayout stackLayout;
@@ -126,11 +125,12 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MToolControl) object);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master, boolean isImport) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue<MToolControl> master,
+			boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -143,7 +143,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -152,11 +152,9 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(),
-				context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE));
+				context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
 
 		// ------------------------------------------------------------
 		{
@@ -169,8 +167,7 @@
 				lnk.addSelectionListener(new SelectionAdapter() {
 					@Override
 					public void widgetSelected(SelectionEvent e) {
-						c.createOpen((MContribution) getMaster().getValue(), getEditingDomain(), project,
-								lnk.getShell());
+						c.createOpen(getMaster().getValue(), getEditingDomain(), project, lnk.getShell());
 					}
 				});
 			} else {
@@ -184,15 +181,14 @@
 			t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			context.bindValue(
 					textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(),
-							ApplicationPackageImpl.Literals.CONTRIBUTION__CONTRIBUTION_URI).observeDetail(master));
+					E4Properties.contributionURI(getEditingDomain()).observeDetail(master));
 
 			Button b = ControlFactory.createFindButton(parent, resourcePool);
 			b.addSelectionListener(new SelectionAdapter() {
 				@Override
 				public void widgetSelected(SelectionEvent e) {
 					final ContributionClassDialog dialog = new ContributionClassDialog(b.getShell(), eclipseContext,
-							getEditingDomain(), (MContribution) getMaster().getValue(),
+							getEditingDomain(), getMaster().getValue(),
 							ApplicationPackageImpl.Literals.CONTRIBUTION__CONTRIBUTION_URI, Messages);
 					dialog.open();
 				}
@@ -200,12 +196,9 @@
 		}
 
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED));
+				WidgetProperties.buttonSelection(), E4Properties.toBeRendered(getEditingDomain()));
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE));
-
+				WidgetProperties.buttonSelection(), E4Properties.visible(getEditingDomain()));
 		ControlFactory.createMapProperties(parent, Messages, this, Messages.ModelTooling_Contribution_PersistedState,
 				ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__PERSISTED_STATE, VERTICAL_LIST_WIDGET_INDENT);
 
@@ -260,7 +253,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		// TODO Auto-generated method stub
 		return null;
 	}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolItemEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolItemEditor.java
index 9194c97..cd95465 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolItemEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolItemEditor.java
@@ -27,13 +27,13 @@
 import org.eclipse.core.databinding.observable.list.WritableList;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.core.databinding.property.value.IValueProperty;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.tools.emf.ui.common.ImageTooltip;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.Messages;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.ControlFactory.TextPasteHandler;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.ToolItemIconDialogEditor;
@@ -47,16 +47,14 @@
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.edit.command.SetCommand;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
-import org.eclipse.jface.databinding.viewers.ViewerProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.ComboViewer;
 import org.eclipse.jface.viewers.LabelProvider;
@@ -75,14 +73,12 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public abstract class ToolItemEditor extends AbstractComponentEditor {
+public abstract class ToolItemEditor<M extends MToolItem> extends AbstractComponentEditor<M> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 
 	private StackLayout stackLayout;
 
-	private final IValueProperty TOOL_ITEM__MENU = EMFProperties.value(MenuPackageImpl.Literals.TOOL_ITEM__MENU);
-
 	@Inject
 	@Optional
 	protected IProject project;
@@ -96,6 +92,7 @@
 		super();
 	}
 
+	@SuppressWarnings("unchecked")
 	@Override
 	public Composite doGetEditor(Composite parent, Object object) {
 		if (composite == null) {
@@ -129,13 +126,14 @@
 			createRemoveMenu.setSelection(((MToolItem) object).getMenu() != null);
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((M) object);
 		enableIdGenerator(UiPackageImpl.Literals.UI_LABEL__LABEL, ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID, null);
 
 		return composite;
 	}
 
-	protected CTabFolder createForm(Composite parent, EMFDataBindingContext context, WritableValue master, boolean isImport) {
+	protected CTabFolder createForm(Composite parent, EMFDataBindingContext context, WritableValue<M> master,
+			boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -148,7 +146,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -156,7 +154,8 @@
 			return folder;
 		}
 
-		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp, EMFEditProperties.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
+				E4Properties.elementId(getEditingDomain()));
 
 		createFormSubTypeForm(parent, folder, context, master);
 
@@ -183,10 +182,11 @@
 		viewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
 	}
 
-	protected void createFormSubTypeForm(Composite parent, CTabFolder folder, EMFDataBindingContext context, final WritableValue master) {
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
-		final IWidgetValueProperty checkProp = WidgetProperties.selection();
-		final IWidgetValueProperty enabled = WidgetProperties.enabled();
+	protected void createFormSubTypeForm(Composite parent, CTabFolder folder, EMFDataBindingContext context,
+			final WritableValue<M> master) {
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Button, Boolean> checkProp = WidgetProperties.selection();
+		final IWidgetValueProperty<Button, Boolean> enabled = WidgetProperties.enabled();
 
 		// ------------------------------------------------------------
 		{
@@ -200,13 +200,16 @@
 			final GridData gd = new GridData();
 			gd.horizontalSpan = 2;
 			viewer.getControl().setLayoutData(gd);
-			final IObservableValue itemTypeObs = EMFEditProperties.value(getEditingDomain(), MenuPackageImpl.Literals.ITEM__TYPE).observeDetail(master);
+			final IObservableValue<ItemType> itemTypeObs = E4Properties.type(getEditingDomain()).observeDetail(master);
 			context.bindValue(ViewerProperties.singleSelection().observe(viewer), itemTypeObs);
 		}
 
-		ControlFactory.createTextField(parent, Messages.ToolItemEditor_Label, master, context, textProp, EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__LABEL));
-		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(), context, textProp, EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE));
-		ControlFactory.createTextField(parent, Messages.ToolItemEditor_ToolTip, master, context, textProp, EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__TOOLTIP));
+		ControlFactory.createTextField(parent, Messages.ToolItemEditor_Label, master, context, textProp,
+				E4Properties.label(getEditingDomain()));
+		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(),
+				context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
+		ControlFactory.createTextField(parent, Messages.ToolItemEditor_ToolTip, master, context, textProp,
+				E4Properties.tooltip(getEditingDomain()));
 
 		// ------------------------------------------------------------
 		{
@@ -217,7 +220,7 @@
 			final Text t = new Text(parent, SWT.BORDER);
 			TextPasteHandler.createFor(t);
 			t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-			context.bindValue(textProp.observe(t), EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__ICON_URI).observeDetail(master));
+			context.bindValue(textProp.observe(t), E4Properties.iconUri(getEditingDomain()).observeDetail(master));
 
 			new ImageTooltip(t, Messages, this);
 
@@ -225,7 +228,8 @@
 			b.addSelectionListener(new SelectionAdapter() {
 				@Override
 				public void widgetSelected(SelectionEvent e) {
-					final ToolItemIconDialogEditor dialog = new ToolItemIconDialogEditor(b.getShell(), eclipseContext, project, getEditingDomain(), (MToolItem) getMaster().getValue(), Messages);
+					final ToolItemIconDialogEditor dialog = new ToolItemIconDialogEditor(b.getShell(), eclipseContext,
+							project, getEditingDomain(), getMaster().getValue(), Messages);
 					dialog.open();
 				}
 			});
@@ -240,8 +244,7 @@
 			createRemoveMenu.addSelectionListener(new SelectionAdapter() {
 				@Override
 				public void widgetSelected(SelectionEvent e) {
-					final MToolItem item = (MToolItem) getMaster().getValue();
-					if (item.getMenu() == null) {
+					if (getMaster().getValue().getMenu() == null) {
 						addMenu();
 					} else {
 						removeMenu();
@@ -258,7 +261,8 @@
 
 			final Button b = new Button(parent, SWT.CHECK);
 			b.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false, 2, 1));
-			context.bindValue(checkProp.observe(b), EMFEditProperties.value(getEditingDomain(), MenuPackageImpl.Literals.ITEM__ENABLED).observeDetail(getMaster()));
+			context.bindValue(checkProp.observe(b),
+					E4Properties.enabled(getEditingDomain()).observeDetail(getMaster()));
 		}
 
 		{
@@ -268,26 +272,27 @@
 
 			final Button b = new Button(parent, SWT.CHECK);
 			b.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false, 2, 1));
-			context.bindValue(checkProp.observe(b), EMFEditProperties.value(getEditingDomain(), MenuPackageImpl.Literals.ITEM__SELECTED).observeDetail(getMaster()));
+			context.bindValue(checkProp.observe(b),
+					E4Properties.selected(getEditingDomain()).observeDetail(getMaster()));
 
-			final UpdateValueStrategy t2m = new UpdateValueStrategy();
-			t2m.setConverter(new Converter(boolean.class, ItemType.class) {
-
+			final UpdateValueStrategy<Boolean, ItemType> t2m = new UpdateValueStrategy<>();
+			t2m.setConverter(new Converter<Boolean, ItemType>(boolean.class, ItemType.class) {
 				@Override
-				public Object convert(Object fromObject) {
+				public ItemType convert(Boolean fromObject) {
 					return null;
 				}
 			});
-			final UpdateValueStrategy m2t = new UpdateValueStrategy();
-			m2t.setConverter(new Converter(ItemType.class, boolean.class) {
+			final UpdateValueStrategy<ItemType, Boolean> m2t = new UpdateValueStrategy<>();
+			m2t.setConverter(new Converter<ItemType, Boolean>(ItemType.class, boolean.class) {
 
 				@Override
-				public Object convert(Object fromObject) {
+				public Boolean convert(ItemType fromObject) {
 					return fromObject == ItemType.CHECK || fromObject == ItemType.RADIO;
 				}
 			});
 
-			context.bindValue(enabled.observe(b), EMFEditProperties.value(getEditingDomain(), MenuPackageImpl.Literals.ITEM__TYPE).observeDetail(getMaster()), t2m, m2t);
+			context.bindValue(enabled.observe(b), E4Properties.type(getEditingDomain()).observeDetail(getMaster()),
+					t2m, m2t);
 
 		}
 
@@ -316,14 +321,19 @@
 			list.add(UiPackageImpl.Literals.IMPERATIVE_EXPRESSION);
 			list.addAll(getEditor().getFeatureClasses(UiPackageImpl.Literals.EXPRESSION, UiPackageImpl.Literals.UI_ELEMENT__VISIBLE_WHEN));
 			combo.setInput(list);
-			context.bindValue(ViewerProperties.singleSelection().observe(combo), EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE_WHEN).observeDetail(getMaster()), new UpdateValueStrategy().setConverter(new EClass2EObject(Messages)), new UpdateValueStrategy().setConverter(new EObject2EClass(Messages)));
+			context.bindValue(ViewerProperties.singleSelection().observe(combo),
+					E4Properties.visibleWhen(getEditingDomain()).observeDetail(getMaster()),
+					UpdateValueStrategy.create(new EClass2EObject<>(Messages)),
+					UpdateValueStrategy.create(new EObject2EClass<>(Messages)));
 		}
 		// ------------------------------------------------------------
 
 		createSubTypeFormElements(parent, context, master);
 
-		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context, WidgetProperties.selection(), EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED));
-		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context, WidgetProperties.selection(), EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE));
+		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
+				WidgetProperties.selection(), E4Properties.toBeRendered(getEditingDomain()));
+		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
+				WidgetProperties.selection(), E4Properties.visible(getEditingDomain()));
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
 		item.setText(Messages.ModelTooling_Common_TabSupplementary);
@@ -335,7 +345,7 @@
 		ControlFactory.createMapProperties(parent, Messages, this, Messages.ModelTooling_Contribution_PersistedState, ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__PERSISTED_STATE, VERTICAL_LIST_WIDGET_INDENT);
 	}
 
-	protected void createSubTypeFormElements(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	protected void createSubTypeFormElements(Composite parent, EMFDataBindingContext context, WritableValue<M> master) {
 
 	}
 
@@ -357,15 +367,15 @@
 	}
 
 	@Override
-	public IObservableList getChildList(final Object element) {
-		final WritableList list = new WritableList();
-
+	public IObservableList<Object> getChildList(final Object element) {
+		final WritableList<Object> list = new WritableList<>();
 		final MToolItem item = (MToolItem) element;
+
 		if (item.getMenu() != null) {
 			list.add(0, item.getMenu());
 		}
 
-		TOOL_ITEM__MENU.observe(element).addValueChangeListener(event -> {
+		E4Properties.menu().observe(item).addValueChangeListener(event -> {
 			if (event.diff.getOldValue() != null) {
 				list.remove(event.diff.getOldValue());
 				if (getMaster().getValue() == element && !createRemoveMenu.isDisposed()) {
@@ -404,7 +414,7 @@
 				FeaturePath.fromList(UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED) };
 	}
 
-	static class EObject2EClass extends Converter {
+	static class EObject2EClass<T> extends Converter<T, Object> {
 		private final Messages Messages;
 
 		public EObject2EClass(Messages Messages) {
@@ -413,7 +423,7 @@
 		}
 
 		@Override
-		public Object convert(Object fromObject) {
+		public Object convert(T fromObject) {
 			if (fromObject == null) {
 				return Messages.MenuItemEditor_NoExpression;
 			}
@@ -421,7 +431,7 @@
 		}
 	}
 
-	static class EClass2EObject extends Converter {
+	static class EClass2EObject<T> extends Converter<Object, T> {
 		private final Messages Messages;
 
 		public EClass2EObject(Messages Messages) {
@@ -429,12 +439,13 @@
 			this.Messages = Messages;
 		}
 
+		@SuppressWarnings("unchecked")
 		@Override
-		public Object convert(Object fromObject) {
+		public T convert(Object fromObject) {
 			if (fromObject == null || fromObject.toString().equals(Messages.MenuItemEditor_NoExpression)) {
 				return null;
 			}
-			return EcoreUtil.create((EClass) fromObject);
+			return (T) EcoreUtil.create((EClass) fromObject);
 		}
 	}
 }
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/TrimBarEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/TrimBarEditor.java
index f4e62d4..0ab5d0b 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/TrimBarEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/TrimBarEditor.java
@@ -23,14 +23,13 @@
 import javax.inject.Inject;
 
 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.core.databinding.property.list.IListProperty;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.core.services.nls.Translation;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.Messages;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.AbstractPickList.PickListFeatures;
@@ -42,22 +41,20 @@
 import org.eclipse.e4.ui.model.application.ui.MGenericTrimContainer;
 import org.eclipse.e4.ui.model.application.ui.SideValue;
 import org.eclipse.e4.ui.model.application.ui.basic.MTrimBar;
+import org.eclipse.e4.ui.model.application.ui.basic.MTrimElement;
 import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.IEMFListProperty;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.edit.command.AddCommand;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
-import org.eclipse.jface.databinding.viewers.ViewerProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.ComboViewer;
 import org.eclipse.jface.viewers.StructuredSelection;
@@ -73,14 +70,12 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
 
-public class TrimBarEditor extends AbstractComponentEditor {
+public class TrimBarEditor extends AbstractComponentEditor<MTrimBar> {
 
 	private Composite composite;
 	private EMFDataBindingContext context;
-
-	private final IListProperty ELEMENT_CONTAINER__CHILDREN = EMFProperties
-			.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
 	private StackLayout stackLayout;
 	private final List<Action> actions = new ArrayList<>();
 
@@ -161,11 +156,12 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MTrimBar) object);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master, boolean isImport) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue<MTrimBar> master,
+			boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -178,7 +174,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -187,11 +183,9 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(),
-				context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE));
+				context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
 
 		// ------------------------------------------------------------
 		{
@@ -205,9 +199,8 @@
 			final GridData gd = new GridData();
 			gd.horizontalSpan = 2;
 			viewer.getControl().setLayoutData(gd);
-			final IObservableValue sideValueObs = EMFEditProperties.value(getEditingDomain(),
-					UiPackageImpl.Literals.GENERIC_TRIM_CONTAINER__SIDE).observeDetail(master);
-			context.bindValue(ViewerProperties.singleSelection().observe(viewer), sideValueObs);
+			context.bindValue(ViewerProperties.singleSelection(SideValue.class).observe(viewer),
+					E4Properties.<MTrimElement>side(getEditingDomain()).observeDetail(master));
 		}
 
 		// ------------------------------------------------------------
@@ -230,16 +223,13 @@
 			.setInput(new Object[] { MenuPackageImpl.Literals.TOOL_BAR, MenuPackageImpl.Literals.TOOL_CONTROL });
 			pickList.setSelection(new StructuredSelection(MenuPackageImpl.Literals.TOOL_BAR));
 
-			final IEMFListProperty prop = EMFProperties.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
-			viewer.setInput(prop.observeDetail(getMaster()));
+			viewer.setInput(E4Properties.<MTrimElement>children().observeDetail(getMaster()));
 		}
 
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED));
+				WidgetProperties.buttonSelection(), E4Properties.toBeRendered(getEditingDomain()));
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE));
+				WidgetProperties.buttonSelection(), E4Properties.visible(getEditingDomain()));
 
 		item = new CTabItem(folder, SWT.NONE);
 		item.setText(Messages.ModelTooling_Common_TabSupplementary);
@@ -277,8 +267,8 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		return ELEMENT_CONTAINER__CHILDREN.observe(element);
+	public IObservableList<?> getChildList(Object element) {
+		return E4Properties.<MTrimElement>children().observe((MTrimBar) element);
 	}
 
 	@Override
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/TrimContributionEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/TrimContributionEditor.java
index 858e519..205741b 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/TrimContributionEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/TrimContributionEditor.java
@@ -27,12 +27,12 @@
 
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.tools.emf.ui.common.IModelResource;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.ComponentLabelProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList;
@@ -40,23 +40,21 @@
 import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.TrimIdDialog;
 import org.eclipse.e4.tools.emf.ui.internal.common.uistructure.UIViewer;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
+import org.eclipse.e4.ui.model.application.ui.basic.MTrimElement;
 import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.menu.MTrimContribution;
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl;
 import org.eclipse.e4.ui.workbench.modeling.EModelService;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.IEMFListProperty;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.edit.command.AddCommand;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
 import org.eclipse.jface.resource.FontDescriptor;
 import org.eclipse.jface.viewers.ArrayContentProvider;
@@ -80,12 +78,9 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class TrimContributionEditor extends AbstractComponentEditor {
+public class TrimContributionEditor extends AbstractComponentEditor<MTrimContribution> {
 	private Composite composite;
 	private EMFDataBindingContext context;
-
-	private final IListProperty ELEMENT_CONTAINER__CHILDREN = EMFProperties
-			.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
 	private StackLayout stackLayout;
 	private final List<Action> actions = new ArrayList<>();
 
@@ -170,11 +165,12 @@
 			}
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MTrimContribution) object);
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master, boolean isImport) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MTrimContribution> master, boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -187,7 +183,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -196,11 +192,9 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 		ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(),
-				context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE));
+				context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
 		{
 			final Label l = new Label(parent, SWT.NONE);
 			l.setText(Messages.MenuContributionEditor_ParentId);
@@ -211,25 +205,22 @@
 			final GridData gd = new GridData(GridData.FILL_HORIZONTAL);
 			t.setLayoutData(gd);
 			context.bindValue(textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(), MenuPackageImpl.Literals.TRIM_CONTRIBUTION__PARENT_ID)
-					.observeDetail(getMaster()));
+					E4Properties.trimParentId(getEditingDomain()).observeDetail(getMaster()));
 
 			Button b = ControlFactory.createFindButton(parent, resourcePool);
 			b.addSelectionListener(new SelectionAdapter() {
 				@Override
 				public void widgetSelected(SelectionEvent e) {
 					final TrimIdDialog dialog = new TrimIdDialog(t.getShell(), resource,
-							(MTrimContribution) getMaster().getValue(), getEditingDomain(), modelService, Messages);
+							getMaster().getValue(), getEditingDomain(), modelService, Messages);
 					dialog.open();
 				}
 			});
 
 		}
 
-		ControlFactory
-		.createTextField(parent, Messages.TrimContributionEditor_Position, master, context, textProp,
-				EMFEditProperties.value(getEditingDomain(),
-						MenuPackageImpl.Literals.TRIM_CONTRIBUTION__POSITION_IN_PARENT));
+		ControlFactory.createTextField(parent, Messages.TrimContributionEditor_Position, master, context, textProp,
+				E4Properties.trimPositionInParent(getEditingDomain()));
 
 		// ------------------------------------------------------------
 		{
@@ -249,9 +240,8 @@
 					.setStyle(SWT.ITALIC);
 			viewer.setLabelProvider(new DelegatingStyledCellLabelProvider(
 					new ComponentLabelProvider(getEditor(), Messages, italicFontDescriptor)));
-			viewer.setContentProvider(new ObservableListContentProvider());
-			final IEMFListProperty prop = EMFProperties.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
-			viewer.setInput(prop.observeDetail(getMaster()));
+			viewer.setContentProvider(new ObservableListContentProvider<>());
+			viewer.setInput(E4Properties.<MTrimElement>children().observeDetail(getMaster()));
 
 			pickList.setContentProvider(new ArrayContentProvider());
 			pickList.setLabelProvider(new LabelProvider() {
@@ -266,11 +256,9 @@
 		}
 
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED));
+				WidgetProperties.buttonSelection(), E4Properties.toBeRendered(getEditingDomain()));
 		ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
-				WidgetProperties.selection(),
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE));
+				WidgetProperties.buttonSelection(), E4Properties.visible(getEditingDomain()));
 
 		item = new CTabItem(folder, SWT.NONE);
 		item.setText(Messages.ModelTooling_Common_TabSupplementary);
@@ -308,8 +296,8 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		return ELEMENT_CONTAINER__CHILDREN.observe(element);
+	public IObservableList<?> getChildList(Object element) {
+		return E4Properties.<MTrimElement>children().observe((MTrimContribution) element);
 	}
 
 	@Override
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/TrimmedWindowEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/TrimmedWindowEditor.java
index 7a037c3..65b3bb9 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/TrimmedWindowEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/TrimmedWindowEditor.java
@@ -14,39 +14,31 @@
 package org.eclipse.e4.tools.emf.ui.internal.common.component;
 
 import javax.inject.Inject;
+
 import org.eclipse.core.databinding.observable.list.IObservableList;
-import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.e4.tools.emf.ui.common.Util;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.common.ModelEditor;
 import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry;
-import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl;
-import org.eclipse.emf.databinding.EMFProperties;
+import org.eclipse.e4.ui.model.application.ui.basic.MTrimmedWindow;
 import org.eclipse.emf.ecore.EObject;
 
 public class TrimmedWindowEditor extends WindowEditor {
-	private IListProperty TRIMMED_WINDOW__TRIM_BARS = EMFProperties.list(BasicPackageImpl.Literals.TRIMMED_WINDOW__TRIM_BARS);
-
 	@Inject
 	public TrimmedWindowEditor() {
 		super();
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		IObservableList list = super.getChildList(element);
+	public IObservableList<Object> getChildList(Object element) {
+		IObservableList<Object> list = super.getChildList(element);
 
 		if (getEditor().isModelFragment() && Util.isImport((EObject) element)) {
 			return list;
 		}
 
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_TRIMMED_WINDOW_TRIMS, TRIMMED_WINDOW__TRIM_BARS, element, Messages.TrimmedWindowEditor_TrimBars) {
-
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-
-		});
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_TRIMMED_WINDOW_TRIMS, E4Properties.trimBars(),
+				(MTrimmedWindow) element, Messages.TrimmedWindowEditor_TrimBars));
 		return list;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/UnsettableUpdateValueStrategy.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/UnsettableUpdateValueStrategy.java
index e112a79..366a512 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/UnsettableUpdateValueStrategy.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/UnsettableUpdateValueStrategy.java
@@ -7,6 +7,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.core.databinding.UpdateValueStrategy;
 import org.eclipse.core.databinding.conversion.Converter;
 import org.eclipse.core.databinding.conversion.IConverter;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
@@ -41,6 +42,7 @@
  * </ul>
  */
 public class UnsettableUpdateValueStrategy extends EMFUpdateValueStrategy {
+	@SuppressWarnings("rawtypes")
 	@Override
 	protected IConverter createConverter(Object fromType, Object toType) {
 		if (fromType == String.class) {
@@ -105,10 +107,15 @@
 	 * org.eclipse.core.databinding.UpdateValueStrategy#doSet(org.eclipse.core
 	 * .databinding.observable.value.IObservableValue, java.lang.Object)
 	 */
+	@SuppressWarnings({ "rawtypes", "unchecked" })
 	@Override
 	protected IStatus doSet(IObservableValue observableValue, Object value) {
 		// TODO Auto-generated method stub
 		return super.doSet(observableValue, value);
 	}
 
+	@SuppressWarnings("unchecked")
+	public static <S, D> UpdateValueStrategy<S, D> create() {
+		return new UnsettableUpdateValueStrategy();
+	}
 }
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/WindowEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/WindowEditor.java
index 906777b..da63fc7 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/WindowEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/WindowEditor.java
@@ -25,20 +25,18 @@
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.list.WritableList;
 import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.core.databinding.property.list.IListProperty;
-import org.eclipse.core.databinding.property.value.IValueProperty;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.tools.emf.ui.common.ImageTooltip;
 import org.eclipse.e4.tools.emf.ui.common.Util;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.ModelEditor;
 import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.WindowIconDialogEditor;
 import org.eclipse.e4.tools.emf.ui.internal.common.uistructure.UIViewer;
-import org.eclipse.e4.ui.model.application.commands.impl.CommandsPackageImpl;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.MUILabel;
 import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
@@ -48,14 +46,12 @@
 import org.eclipse.e4.ui.model.application.ui.menu.MMenuFactory;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
 import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.edit.command.SetCommand;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
@@ -72,20 +68,10 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class WindowEditor extends AbstractComponentEditor {
+public class WindowEditor extends AbstractComponentEditor<MWindow> {
 
 	private Composite composite;
 	private EMFDataBindingContext context;
-
-	private final IListProperty HANDLER_CONTAINER__HANDLERS = EMFProperties
-			.list(CommandsPackageImpl.Literals.HANDLER_CONTAINER__HANDLERS);
-	private final IListProperty WINDOW__WINDOWS = EMFProperties.list(BasicPackageImpl.Literals.WINDOW__WINDOWS);
-	private final IListProperty ELEMENT_CONTAINER__CHILDREN = EMFProperties
-			.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN);
-	private final IListProperty SHARED_ELEMENTS = EMFProperties.list(BasicPackageImpl.Literals.WINDOW__SHARED_ELEMENTS);
-	private final IListProperty SNIPPETS = EMFProperties.list(UiPackageImpl.Literals.SNIPPET_CONTAINER__SNIPPETS);
-	private final IValueProperty WINDOW__MAIN_MENU = EMFProperties.value(BasicPackageImpl.Literals.WINDOW__MAIN_MENU);
-
 	private Action addMainMenu;
 	private Button createRemoveMainMenu;
 	private StackLayout stackLayout;
@@ -160,14 +146,15 @@
 			createRemoveMainMenu.setSelection(((MWindow) object).getMainMenu() != null);
 		}
 
-		getMaster().setValue(object);
+		getMaster().setValue((MWindow) object);
 		enableIdGenerator(UiPackageImpl.Literals.UI_LABEL__LABEL,
 				ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID, null);
 
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master, boolean isImport) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue<MWindow> master,
+			boolean isImport) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -180,7 +167,7 @@
 			ControlFactory.createXMIId(parent, this);
 		}
 
-		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+		final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 		if (isImport) {
 			ControlFactory.createFindImport(parent, Messages, this, context);
@@ -189,8 +176,7 @@
 		}
 
 		ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, getMaster(), context, textProp,
-				EMFEditProperties
-				.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID));
+				E4Properties.elementId(getEditingDomain()));
 
 		// ------------------------------------------------------------
 		{
@@ -211,36 +197,35 @@
 			t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			context.bindValue(
 					textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(), BasicPackageImpl.Literals.WINDOW__X).observeDetail(
-							getMaster()), new UnsettableUpdateValueStrategy(), new UnsettableUpdateValueStrategy());
+					E4Properties.windowX(getEditingDomain()).observeDetail(getMaster()),
+					UnsettableUpdateValueStrategy.create(), UnsettableUpdateValueStrategy.create());
 
 			t = new Text(comp, SWT.BORDER | SWT.TRAIL);
 			t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			context.bindValue(
 					textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(), BasicPackageImpl.Literals.WINDOW__Y).observeDetail(
-							getMaster()), new UnsettableUpdateValueStrategy(), new UnsettableUpdateValueStrategy());
+					E4Properties.windowY(getEditingDomain()).observeDetail(getMaster()),
+					UnsettableUpdateValueStrategy.create(), UnsettableUpdateValueStrategy.create());
 
 			t = new Text(comp, SWT.BORDER | SWT.TRAIL);
 			t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			context.bindValue(
 					textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(), BasicPackageImpl.Literals.WINDOW__WIDTH).observeDetail(
-							getMaster()), new UnsettableUpdateValueStrategy(), new UnsettableUpdateValueStrategy());
+					E4Properties.width(getEditingDomain()).observeDetail(getMaster()),
+					UnsettableUpdateValueStrategy.create(), UnsettableUpdateValueStrategy.create());
 
 			t = new Text(comp, SWT.BORDER | SWT.TRAIL);
 			t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			context.bindValue(
 					textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(), BasicPackageImpl.Literals.WINDOW__HEIGHT).observeDetail(
-							getMaster()), new UnsettableUpdateValueStrategy(), new UnsettableUpdateValueStrategy());
+					E4Properties.height(getEditingDomain()).observeDetail(getMaster()),
+					UnsettableUpdateValueStrategy.create(), UnsettableUpdateValueStrategy.create());
 		}
 
 		ControlFactory.createTranslatedTextField(parent, Messages.WindowEditor_Label, getMaster(), context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__LABEL), resourcePool, project);
+				E4Properties.label(getEditingDomain()), resourcePool, project);
 		ControlFactory.createTranslatedTextField(parent, Messages.WindowEditor_Tooltip, getMaster(), context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__TOOLTIP), resourcePool,
-				project);
+				E4Properties.tooltip(getEditingDomain()), resourcePool, project);
 
 		// ------------------------------------------------------------
 		{
@@ -252,8 +237,7 @@
 			t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			context.bindValue(
 					textProp.observeDelayed(200, t),
-					EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__ICON_URI).observeDetail(
-							master));
+					E4Properties.iconUri(getEditingDomain()).observeDetail(master));
 
 			new ImageTooltip(t, Messages, this);
 
@@ -262,7 +246,7 @@
 				@Override
 				public void widgetSelected(SelectionEvent e) {
 					final WindowIconDialogEditor dialog = new WindowIconDialogEditor(b.getShell(), eclipseContext,
-							project, getEditingDomain(), (MWindow) getMaster().getValue(), Messages);
+							project, getEditingDomain(), getMaster().getValue(), Messages);
 					dialog.open();
 				}
 			});
@@ -277,7 +261,7 @@
 			createRemoveMainMenu.addSelectionListener(new SelectionAdapter() {
 				@Override
 				public void widgetSelected(SelectionEvent e) {
-					final MWindow window = (MWindow) getMaster().getValue();
+					final MWindow window = getMaster().getValue();
 					if (window.getMainMenu() == null) {
 						addMenu();
 					} else {
@@ -288,14 +272,10 @@
 			createRemoveMainMenu.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false, 2, 1));
 		}
 
-		ControlFactory
-		.createCheckBox(
-				parent,
-				"To Be Rendered", getMaster(), context, WidgetProperties.selection(), EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED)); //$NON-NLS-1$
-		ControlFactory
-		.createCheckBox(
-				parent,
-				"Visible", getMaster(), context, WidgetProperties.selection(), EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE)); //$NON-NLS-1$
+		ControlFactory.createCheckBox(parent, "To Be Rendered", getMaster(), context,
+				WidgetProperties.buttonSelection(), E4Properties.toBeRendered(getEditingDomain()));
+		ControlFactory.createCheckBox(parent, "Visible", getMaster(), context, WidgetProperties.buttonSelection(), //$NON-NLS-1$
+				E4Properties.visible(getEditingDomain()));
 
 		ControlFactory.createSelectedElement(parent, this, context, Messages.WindowEditor_SelectedElement);
 		ControlFactory.createBindingContextWiget(parent, Messages, this, Messages.WindowEditor_BindingContexts);
@@ -309,8 +289,7 @@
 		item.setControl(parent.getParent());
 
 		ControlFactory.createTranslatedTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase,
-				getMaster(), context, textProp,
-				EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__ACCESSIBILITY_PHRASE),
+				getMaster(), context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()),
 				resourcePool, project);
 		ControlFactory.createStringListWidget(parent, Messages, this, Messages.ModelTooling_Context_Variables,
 				UiPackageImpl.Literals.CONTEXT__VARIABLES, VERTICAL_LIST_WIDGET_INDENT);
@@ -363,64 +342,30 @@
 	}
 
 	@Override
-	public IObservableList getChildList(final Object element) {
-		final WritableList list = new WritableList();
+	public IObservableList<Object> getChildList(final Object element) {
+		final WritableList<Object> list = new WritableList<>();
 		if (getEditor().isModelFragment() && Util.isImport((EObject) element)) {
 			return list;
 		}
 
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_HANDLER, HANDLER_CONTAINER__HANDLERS, element,
-				Messages.WindowEditor_Handlers) {
-
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-
-		});
-
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_WINDOW_WINDOWS, WINDOW__WINDOWS, element,
-				Messages.WindowEditor_Windows) {
-
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-
-		});
-
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_WINDOW_CONTROLS, ELEMENT_CONTAINER__CHILDREN, element,
-				Messages.WindowEditor_Controls) {
-
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-
-		});
-
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_WINDOW_SHARED_ELEMENTS, SHARED_ELEMENTS, element,
-				Messages.WindowEditor_SharedElements) {
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-		});
-
-		list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_WINDOW_SNIPPETS, SNIPPETS, element,
-				Messages.WindowEditor_Snippets) {
-			@Override
-			protected boolean accepted(Object o) {
-				return true;
-			}
-		});
-
 		final MWindow window = (MWindow) element;
+
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_HANDLER, E4Properties.handlers(), window,
+				Messages.WindowEditor_Handlers));
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_WINDOW_WINDOWS, E4Properties.windowWindows(), window,
+				Messages.WindowEditor_Windows));
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_WINDOW_CONTROLS, E4Properties.children(), window,
+				Messages.WindowEditor_Controls));
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_WINDOW_SHARED_ELEMENTS, E4Properties.sharedElements(), window,
+				Messages.WindowEditor_SharedElements));
+		list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_WINDOW_SNIPPETS, E4Properties.snippets(), window,
+				Messages.WindowEditor_Snippets));
+
 		if (window.getMainMenu() != null) {
 			list.add(0, window.getMainMenu());
 		}
 
-		WINDOW__MAIN_MENU.observe(element).addValueChangeListener(event -> {
+		E4Properties.mainMenu().observe(window).addValueChangeListener(event -> {
 			if (event.diff.getOldValue() != null) {
 				list.remove(event.diff.getOldValue());
 				if (getMaster().getValue() == element && !createRemoveMainMenu.isDisposed()) {
@@ -466,4 +411,4 @@
 	protected Action getActionAddMainMenu() {
 		return addMainMenu;
 	}
-}
\ No newline at end of file
+}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/AbstractCommandSelectionDialog.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/AbstractCommandSelectionDialog.java
index 6a9e502..2efc12d 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/AbstractCommandSelectionDialog.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/AbstractCommandSelectionDialog.java
@@ -94,7 +94,7 @@
 		viewer.addDoubleClickListener(event -> okPressed());
 
 		final List<EObject> commands = new ArrayList<>();
-		final TreeIterator<EObject> it = EcoreUtil.getAllContents((EObject) resource.getRoot().get(0), true);
+		final TreeIterator<EObject> it = EcoreUtil.getAllContents(resource.getRoot().get(0), true);
 		while (it.hasNext()) {
 			final EObject o = it.next();
 			if (o.eClass() == CommandsPackageImpl.Literals.COMMAND) {
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/AbstractIconDialogWithHardcodedScope.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/AbstractIconDialogWithHardcodedScope.java
index 5097927..532d740 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/AbstractIconDialogWithHardcodedScope.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/AbstractIconDialogWithHardcodedScope.java
@@ -157,7 +157,7 @@
 		viewer = new TableViewer(container, SWT.FULL_SELECTION | SWT.BORDER);
 		GridData gd = new GridData(GridData.FILL_BOTH);
 		viewer.getControl().setLayoutData(gd);
-		viewer.setContentProvider(new ObservableListContentProvider());
+		viewer.setContentProvider(new ObservableListContentProvider<>());
 		viewer.setLabelProvider(new StyledCellLabelProvider() {
 			@Override
 			public void update(ViewerCell cell) {
@@ -186,7 +186,7 @@
 			}
 		});
 
-		final WritableList list = new WritableList();
+		final WritableList<IFile> list = new WritableList<>();
 		viewer.setInput(list);
 		viewer.addDoubleClickListener(event -> okPressed());
 
@@ -279,9 +279,9 @@
 
 	private class IconMatchCallback {
 		private volatile boolean cancel;
-		private IObservableList list;
+		private IObservableList<IFile> list;
 
-		private IconMatchCallback(IObservableList list) {
+		private IconMatchCallback(IObservableList<IFile> list) {
 			this.list = list;
 		}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/AbstractIconDialogWithScopeAndFilter.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/AbstractIconDialogWithScopeAndFilter.java
index be22627..e8e01e2 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/AbstractIconDialogWithScopeAndFilter.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/AbstractIconDialogWithScopeAndFilter.java
@@ -273,7 +273,9 @@
 
 		clearImages();
 
-		callback = new IconMatchCallback((IObservableList) getViewer().getInput());
+		@SuppressWarnings("unchecked")
+		IObservableList<Entry> fileList = (IObservableList<Entry>) getViewer().getInput();
+		callback = new IconMatchCallback(fileList);
 		final Filter filter = new Filter(project, getFilterTextBox().getText());
 		filter.setSearchScope(getSearchScopes());
 		filter.setBundles(getFilterBundles());
@@ -317,9 +319,9 @@
 
 	private class IconMatchCallback {
 		private volatile boolean cancel;
-		private final IObservableList list;
+		private final IObservableList<Entry> list;
 
-		private IconMatchCallback(IObservableList list) {
+		private IconMatchCallback(IObservableList<Entry> list) {
 			this.list = list;
 		}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/BindingContextSelectionDialog.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/BindingContextSelectionDialog.java
index c61920e..c5b4594 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/BindingContextSelectionDialog.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/BindingContextSelectionDialog.java
@@ -91,7 +91,7 @@
 		viewer.addDoubleClickListener(event -> okPressed());
 
 		final List<EObject> categories = new ArrayList<>();
-		final TreeIterator<EObject> it = EcoreUtil.getAllContents((EObject) resource.getRoot().get(0), true);
+		final TreeIterator<EObject> it = EcoreUtil.getAllContents(resource.getRoot().get(0), true);
 		while (it.hasNext()) {
 			final EObject o = it.next();
 			if (o.eClass() == CommandsPackageImpl.Literals.BINDING_CONTEXT) {
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/CommandCategorySelectionDialog.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/CommandCategorySelectionDialog.java
index fd6fbd8..2101df8 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/CommandCategorySelectionDialog.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/CommandCategorySelectionDialog.java
@@ -92,7 +92,7 @@
 		viewer.addDoubleClickListener(event -> okPressed());
 
 		final List<EObject> categories = new ArrayList<>();
-		final TreeIterator<EObject> it = EcoreUtil.getAllContents((EObject) resource.getRoot().get(0), true);
+		final TreeIterator<EObject> it = EcoreUtil.getAllContents(resource.getRoot().get(0), true);
 		while (it.hasNext()) {
 			final EObject o = it.next();
 			if (o.eClass() == CommandsPackageImpl.Literals.CATEGORY) {
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/FilteredContributionDialog.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/FilteredContributionDialog.java
index d88fa1e..b4337ac 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/FilteredContributionDialog.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/FilteredContributionDialog.java
@@ -123,7 +123,7 @@
 	protected boolean includeNonBundles;
 	private Label lblStatus;
 	private Button btnIncludeNoneBundle;
-	private WritableList viewerList;
+	private WritableList<ContributionData> viewerList;
 	protected BundleImageCache imageCache;
 	protected Job currentSearchThread;
 	private ContributionResultHandlerImpl currentResultHandler;
@@ -179,9 +179,9 @@
 
 	private class ContributionResultHandlerImpl implements ContributionResultHandler {
 		private boolean cancled = false;
-		private final IObservableList list;
+		private final IObservableList<ContributionData> list;
 
-		public ContributionResultHandlerImpl(IObservableList list) {
+		public ContributionResultHandlerImpl(IObservableList<ContributionData> list) {
 			this.list = list;
 		}
 
@@ -793,7 +793,7 @@
 
 	protected void rebuildViewer() {
 
-		viewerList = new WritableList();
+		viewerList = new WritableList<>();
 
 		final TableViewer oldViewer = viewer;
 		viewer = new TableViewer(compOptions, SWT.FULL_SELECTION | SWT.BORDER);
@@ -803,7 +803,7 @@
 		}
 		final GridData gd = new GridData(GridData.FILL_BOTH);
 		viewer.getControl().setLayoutData(gd);
-		viewer.setContentProvider(new ObservableListContentProvider());
+		viewer.setContentProvider(new ObservableListContentProvider<>());
 		viewer.setLabelProvider(new StyledCellLabelProvider() {
 			@Override
 			public void update(ViewerCell cell) {
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/FindImportElementDialog.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/FindImportElementDialog.java
index f794602..328e311 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/FindImportElementDialog.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/FindImportElementDialog.java
@@ -51,11 +51,12 @@
 
 public class FindImportElementDialog extends SaveDialogBoundsSettingsDialog {
 	private final EObject element;
-	private final AbstractComponentEditor editor;
+	private final AbstractComponentEditor<?> editor;
 	private TableViewer viewer;
 	private final Messages Messages;
 
-	public FindImportElementDialog(Shell parentShell, AbstractComponentEditor editor, EObject element, Messages Messages) {
+	public FindImportElementDialog(Shell parentShell, AbstractComponentEditor<?> editor, EObject element,
+			Messages Messages) {
 		super(parentShell);
 		this.element = element;
 		this.editor = editor;
@@ -112,10 +113,10 @@
 				cell.setText(styledString.getString());
 			}
 		});
-		viewer.setContentProvider(new ObservableListContentProvider());
+		viewer.setContentProvider(new ObservableListContentProvider<>());
 		viewer.addDoubleClickListener(event -> okPressed());
 
-		final WritableList list = new WritableList();
+		final WritableList<Object> list = new WritableList<>();
 		viewer.setInput(list);
 
 		final ClassContributionCollector collector = getCollector();
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/FindParentReferenceElementDialog.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/FindParentReferenceElementDialog.java
index a007171..72275d7 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/FindParentReferenceElementDialog.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/FindParentReferenceElementDialog.java
@@ -75,11 +75,11 @@
 	private static final String XPATH_URI = "xpath:/"; //$NON-NLS-1$
 
 	private final MStringModelFragment fragment;
-	private final AbstractComponentEditor editor;
+	private final AbstractComponentEditor<?> editor;
 	private TableViewer viewer;
 	private final Messages Messages;
 	private ModelResultHandlerImpl currentResultHandler;
-	private WritableList list;
+	private WritableList<Object> list;
 	private ComboViewer eClassViewer;
 	private Text searchText;
 	private EClass selectedContainer;
@@ -88,7 +88,7 @@
 	/** Remember of classes that can be used for a fragment definition. */
 	private static List<EClass> extendableClasses = null;
 
-	public FindParentReferenceElementDialog(Shell parentShell, AbstractComponentEditor editor,
+	public FindParentReferenceElementDialog(Shell parentShell, AbstractComponentEditor<?> editor,
 			MStringModelFragment fragment, Messages Messages, EClass previousSelection) {
 		super(parentShell);
 		this.fragment = fragment;
@@ -199,7 +199,7 @@
 			@Override
 			public void update(ViewerCell cell) {
 				final EObject o = (EObject) cell.getElement();
-				final AbstractComponentEditor editor = FindParentReferenceElementDialog.this.editor.getEditor()
+				final AbstractComponentEditor<?> editor = FindParentReferenceElementDialog.this.editor.getEditor()
 						.getEditor(o.eClass());
 				cell.setImage(editor.getImage(o));
 
@@ -221,10 +221,10 @@
 				cell.setText(styledString.getString());
 			}
 		});
-		viewer.setContentProvider(new ObservableListContentProvider());
+		viewer.setContentProvider(new ObservableListContentProvider<>());
 		viewer.addDoubleClickListener(event -> okPressed());
 
-		list = new WritableList();
+		list = new WritableList<>();
 		viewer.setInput(list);
 
 		searchText.addModifyListener(e -> updateSearch());
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/ModelResultHandlerImpl.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/ModelResultHandlerImpl.java
index d01facc..8bffef8 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/ModelResultHandlerImpl.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/ModelResultHandlerImpl.java
@@ -10,12 +10,12 @@
 
 public class ModelResultHandlerImpl implements ModelResultHandler {
 	private boolean canceled = false;
-	private final IObservableList list;
+	private final IObservableList<Object> list;
 	private final Filter filter;
-	private final AbstractComponentEditor editor;
+	private final AbstractComponentEditor<?> editor;
 	private final Resource resource;
 
-	public ModelResultHandlerImpl(IObservableList list, Filter filter, AbstractComponentEditor editor,
+	public ModelResultHandlerImpl(IObservableList<Object> list, Filter filter, AbstractComponentEditor<?> editor,
 			Resource resource) {
 		this.list = list;
 		this.filter = filter;
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/ParameterIdSelectionDialog.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/ParameterIdSelectionDialog.java
index b2de6d8..33a1876 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/ParameterIdSelectionDialog.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/ParameterIdSelectionDialog.java
@@ -127,7 +127,7 @@
 	 * @return all found MCommandParameters or an empty {@link List}, never a {@code null} value.
 	 */
 	protected List<MCommandParameter> getParametersOfParentNodesCommand() {
-		TreeIterator<EObject> it = EcoreUtil.getAllContents((EObject) resource.getRoot().get(0), true);
+		TreeIterator<EObject> it = EcoreUtil.getAllContents(resource.getRoot().get(0), true);
 		while (it.hasNext()) {
 			EObject containerObjectWithCommand = it.next();
 			if (containerObjectWithCommand != null && canSupplyParameters(containerObjectWithCommand)) {
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/SharedElementsDialog.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/SharedElementsDialog.java
index a0d9816..71b8e67 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/SharedElementsDialog.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/SharedElementsDialog.java
@@ -195,7 +195,7 @@
 		}
 
 		private String getTypename(EObject o) {
-			final AbstractComponentEditor editor = SharedElementsDialog.this.editor.getEditor(o.eClass());
+			final AbstractComponentEditor<?> editor = SharedElementsDialog.this.editor.getEditor(o.eClass());
 			if (editor != null) {
 				return editor.getLabel(o);
 			}
@@ -204,8 +204,8 @@
 
 		@Override
 		public Image getImage(Object element) {
-			final AbstractComponentEditor editor = SharedElementsDialog.this.editor.getEditor(((EObject) element)
-					.eClass());
+			final AbstractComponentEditor<?> editor = SharedElementsDialog.this.editor
+					.getEditor(((EObject) element).eClass());
 			if (editor != null) {
 				return editor.getImage(element);
 			}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VApplicationAddons.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VApplicationAddons.java
index bdb68c7..cddd46f 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VApplicationAddons.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VApplicationAddons.java
@@ -45,7 +45,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public class VApplicationAddons extends AbstractComponentEditor {
+public class VApplicationAddons extends AbstractComponentEditor<MApplication> {
 	private Composite composite;
 	private TableViewer viewer;
 	private EMFDataBindingContext context;
@@ -90,13 +90,14 @@
 			context = new EMFDataBindingContext();
 			composite = createForm(parent, context, getMaster());
 		}
-		final VirtualEntry<?> o = (VirtualEntry<?>) object;
+		@SuppressWarnings("unchecked")
+		final VirtualEntry<MApplication, ?> o = (VirtualEntry<MApplication, ?>) object;
 		viewer.setInput(o.getList());
 		getMaster().setValue(o.getOriginalParent());
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue<MApplication> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -142,7 +143,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VApplicationCategoriesEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VApplicationCategoriesEditor.java
index 7d5f8ac..17591c1 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VApplicationCategoriesEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VApplicationCategoriesEditor.java
@@ -47,7 +47,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public class VApplicationCategoriesEditor extends AbstractComponentEditor {
+public class VApplicationCategoriesEditor extends AbstractComponentEditor<MApplication> {
 	private Composite composite;
 	private TableViewer viewer;
 	private EMFDataBindingContext context;
@@ -109,13 +109,15 @@
 			context = new EMFDataBindingContext();
 			composite = createForm(parent, context, getMaster());
 		}
-		final VirtualEntry<?> o = (VirtualEntry<?>) object;
+		@SuppressWarnings("unchecked")
+		VirtualEntry<MApplication, ?> o = (VirtualEntry<MApplication, ?>) object;
 		viewer.setInput(o.getList());
 		getMaster().setValue(o.getOriginalParent());
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MApplication> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -148,7 +150,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VApplicationWindowEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VApplicationWindowEditor.java
index 325af80..379fea5 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VApplicationWindowEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VApplicationWindowEditor.java
@@ -1,9 +1,11 @@
 package org.eclipse.e4.tools.emf.ui.internal.common.component.virtual;
 
 import javax.inject.Inject;
+
+import org.eclipse.e4.ui.model.application.MApplication;
 import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
 
-public class VApplicationWindowEditor extends VWindowEditor {
+public class VApplicationWindowEditor extends VWindowEditor<MApplication> {
 
 	@Inject
 	public VApplicationWindowEditor() {
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VBindingTableEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VBindingTableEditor.java
index 7c24958..a8679ed 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VBindingTableEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VBindingTableEditor.java
@@ -31,6 +31,7 @@
 import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry;
 import org.eclipse.e4.ui.model.application.MApplication;
 import org.eclipse.e4.ui.model.application.commands.MBindingTable;
+import org.eclipse.e4.ui.model.application.commands.MBindingTableContainer;
 import org.eclipse.e4.ui.model.application.commands.MCommandsFactory;
 import org.eclipse.e4.ui.model.application.commands.impl.CommandsPackageImpl;
 import org.eclipse.emf.common.command.Command;
@@ -44,7 +45,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public class VBindingTableEditor extends AbstractComponentEditor {
+public class VBindingTableEditor extends AbstractComponentEditor<MBindingTableContainer> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 	private TableViewer viewer;
@@ -88,13 +89,14 @@
 			composite = createForm(parent, context, getMaster());
 
 		}
-		final VirtualEntry<?> o = (VirtualEntry<?>) object;
+		@SuppressWarnings("unchecked")
+		final VirtualEntry<MBindingTableContainer, ?> o = (VirtualEntry<MBindingTableContainer, ?>) object;
 		viewer.setInput(o.getList());
 		getMaster().setValue(o.getOriginalParent());
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue<MBindingTableContainer> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -139,7 +141,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VCommandEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VCommandEditor.java
index 37b0e64..c8cb636 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VCommandEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VCommandEditor.java
@@ -50,7 +50,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public class VCommandEditor extends AbstractComponentEditor {
+public class VCommandEditor extends AbstractComponentEditor<MApplication> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 	private TableViewer viewer;
@@ -109,13 +109,14 @@
 			context = new EMFDataBindingContext();
 			composite = createForm(parent, context, getMaster());
 		}
-		final VirtualEntry<?> o = (VirtualEntry<?>) object;
+		@SuppressWarnings("unchecked")
+		final VirtualEntry<MApplication, ?> o = (VirtualEntry<MApplication, ?>) object;
 		viewer.setInput(o.getList());
 		getMaster().setValue(o.getOriginalParent());
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue<MApplication> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -174,7 +175,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VHandlerEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VHandlerEditor.java
index 63d88f2..7ed0e46 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VHandlerEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VHandlerEditor.java
@@ -47,7 +47,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public class VHandlerEditor extends AbstractComponentEditor {
+public class VHandlerEditor extends AbstractComponentEditor<MHandlerContainer> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 	private TableViewer viewer;
@@ -100,13 +100,15 @@
 			context = new EMFDataBindingContext();
 			composite = createForm(parent, context, getMaster());
 		}
-		final VirtualEntry<?> o = (VirtualEntry<?>) object;
+		@SuppressWarnings("unchecked")
+		final VirtualEntry<MHandlerContainer, ?> o = (VirtualEntry<MHandlerContainer, ?>) object;
 		viewer.setInput(o.getList());
 		getMaster().setValue(o.getOriginalParent());
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MHandlerContainer> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -142,7 +144,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VItemParametersEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VItemParametersEditor.java
index dcf5cd8..d7a777c 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VItemParametersEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VItemParametersEditor.java
@@ -24,6 +24,7 @@
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.AbstractPickList;
 import org.eclipse.e4.tools.emf.ui.internal.common.AbstractPickList.PickListFeatures;
@@ -35,8 +36,6 @@
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.EMFProperties;
-import org.eclipse.emf.databinding.IEMFListProperty;
 import org.eclipse.emf.edit.command.AddCommand;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.viewers.TableViewer;
@@ -46,15 +45,12 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public class VItemParametersEditor extends AbstractComponentEditor {
+public class VItemParametersEditor extends AbstractComponentEditor<MHandledItem> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 	private TableViewer viewer;
 	private final List<Action> actions = new ArrayList<>();
 
-	private final IEMFListProperty HANDLED_ITEM__PARAMETERS = EMFProperties
-			.list(MenuPackageImpl.Literals.HANDLED_ITEM__PARAMETERS);
-
 	@Inject
 	public VItemParametersEditor() {
 		super();
@@ -93,13 +89,14 @@
 			context = new EMFDataBindingContext();
 			composite = createForm(parent, context, getMaster());
 		}
-		final VirtualEntry<?> o = (VirtualEntry<?>) object;
+		@SuppressWarnings("unchecked")
+		final VirtualEntry<MHandledItem, ?> o = (VirtualEntry<MHandledItem, ?>) object;
 		viewer.setInput(o.getList());
 		getMaster().setValue(o.getOriginalParent());
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue<MHandledItem> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -135,8 +132,8 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
-		return HANDLED_ITEM__PARAMETERS.observe(element);
+	public IObservableList<?> getChildList(Object element) {
+		return E4Properties.itemParameters().observe((MHandledItem) element);
 	}
 
 	protected void handleAdd() {
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VMenuContributionsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VMenuContributionsEditor.java
index 272e017..255acd9 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VMenuContributionsEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VMenuContributionsEditor.java
@@ -31,6 +31,7 @@
 import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry;
 import org.eclipse.e4.ui.model.application.MApplication;
 import org.eclipse.e4.ui.model.application.ui.menu.MMenuContribution;
+import org.eclipse.e4.ui.model.application.ui.menu.MMenuContributions;
 import org.eclipse.e4.ui.model.application.ui.menu.MMenuFactory;
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl;
 import org.eclipse.emf.common.command.Command;
@@ -44,7 +45,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public class VMenuContributionsEditor extends AbstractComponentEditor {
+public class VMenuContributionsEditor extends AbstractComponentEditor<MMenuContributions> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 	private TableViewer viewer;
@@ -88,13 +89,15 @@
 			context = new EMFDataBindingContext();
 			composite = createForm(parent, context, getMaster());
 		}
-		final VirtualEntry<?> o = (VirtualEntry<?>) object;
+		@SuppressWarnings("unchecked")
+		final VirtualEntry<MMenuContributions, ?> o = (VirtualEntry<MMenuContributions, ?>) object;
 		viewer.setInput(o.getList());
 		getMaster().setValue(o.getOriginalParent());
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MMenuContributions> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -128,7 +131,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VMenuEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VMenuEditor.java
index a11d587..fb34529 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VMenuEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VMenuEditor.java
@@ -53,7 +53,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public class VMenuEditor extends AbstractComponentEditor {
+public class VMenuEditor<M> extends AbstractComponentEditor<M> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 	private StructuredViewer viewer;
@@ -117,13 +117,14 @@
 			context = new EMFDataBindingContext();
 			composite = createForm(parent, context, getMaster());
 		}
-		final VirtualEntry<?> o = (VirtualEntry<?>) object;
+		@SuppressWarnings("unchecked")
+		final VirtualEntry<M, ?> o = (VirtualEntry<M, ?>) object;
 		viewer.setInput(o.getList());
 		getMaster().setValue(o.getOriginalParent());
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue<M> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -181,7 +182,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VModelFragmentsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VModelFragmentsEditor.java
index 0d520f2..d0b2cf3 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VModelFragmentsEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VModelFragmentsEditor.java
@@ -44,7 +44,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public class VModelFragmentsEditor extends AbstractComponentEditor {
+public class VModelFragmentsEditor extends AbstractComponentEditor<MModelFragments> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 	private TableViewer viewer;
@@ -87,13 +87,15 @@
 			context = new EMFDataBindingContext();
 			composite = createForm(parent, context, getMaster());
 		}
-		final VirtualEntry<?> o = (VirtualEntry<?>) object;
+		@SuppressWarnings("unchecked")
+		final VirtualEntry<MModelFragments, ?> o = (VirtualEntry<MModelFragments, ?>) object;
 		viewer.setInput(o.getList());
 		getMaster().setValue(o.getOriginalParent());
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MModelFragments> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -129,7 +131,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VModelImportsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VModelImportsEditor.java
index 1f8c01c..13bff5f 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VModelImportsEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VModelImportsEditor.java
@@ -30,6 +30,7 @@
 import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList;
 import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry;
 import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
+import org.eclipse.e4.ui.model.fragment.MModelFragments;
 import org.eclipse.e4.ui.model.fragment.impl.FragmentPackageImpl;
 import org.eclipse.e4.ui.model.fragment.impl.ModelFragmentsImpl;
 import org.eclipse.emf.common.command.Command;
@@ -49,7 +50,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public class VModelImportsEditor extends AbstractComponentEditor {
+public class VModelImportsEditor extends AbstractComponentEditor<MModelFragments> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 
@@ -83,13 +84,15 @@
 			context = new EMFDataBindingContext();
 			composite = createForm(parent, context, getMaster());
 		}
-		final VirtualEntry<?> o = (VirtualEntry<?>) object;
+		@SuppressWarnings("unchecked")
+		final VirtualEntry<MModelFragments, ?> o = (VirtualEntry<MModelFragments, ?>) object;
 		viewer.setInput(o.getList());
 		getMaster().setValue(o.getOriginalParent());
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MModelFragments> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 		composite = folder;
 
@@ -161,7 +164,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPartDescriptor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPartDescriptor.java
index 6ecc999..609b9f6 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPartDescriptor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPartDescriptor.java
@@ -49,7 +49,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public class VPartDescriptor extends AbstractComponentEditor {
+public class VPartDescriptor extends AbstractComponentEditor<MPartDescriptorContainer> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 	private TableViewer viewer;
@@ -113,13 +113,15 @@
 			context = new EMFDataBindingContext();
 			composite = createForm(parent, context, getMaster());
 		}
-		final VirtualEntry<?> o = (VirtualEntry<?>) object;
+		@SuppressWarnings("unchecked")
+		final VirtualEntry<MPartDescriptorContainer, ?> o = (VirtualEntry<MPartDescriptorContainer, ?>) object;
 		viewer.setInput(o.getList());
 		getMaster().setValue(o.getOriginalParent());
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MPartDescriptorContainer> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -153,7 +155,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPartDescriptorMenuEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPartDescriptorMenuEditor.java
index b14dc15..a66c1ea 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPartDescriptorMenuEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPartDescriptorMenuEditor.java
@@ -2,7 +2,9 @@
 
 import javax.inject.Inject;
 
-public class VPartDescriptorMenuEditor extends VMenuEditor {
+import org.eclipse.e4.ui.model.application.descriptor.basic.MPartDescriptor;
+
+public class VPartDescriptorMenuEditor extends VMenuEditor<MPartDescriptor> {
 	@Inject
 	public VPartDescriptorMenuEditor() {
 		super(org.eclipse.e4.ui.model.application.descriptor.basic.impl.BasicPackageImpl.Literals.PART_DESCRIPTOR__MENUS);
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPartMenuEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPartMenuEditor.java
index 3c5191f..1db8853 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPartMenuEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPartMenuEditor.java
@@ -1,9 +1,11 @@
 package org.eclipse.e4.tools.emf.ui.internal.common.component.virtual;
 
 import javax.inject.Inject;
+
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl;
 
-public class VPartMenuEditor extends VMenuEditor {
+public class VPartMenuEditor extends VMenuEditor<MPart> {
 	@Inject
 	public VPartMenuEditor() {
 		super(BasicPackageImpl.Literals.PART__MENUS);
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPerspectiveControlEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPerspectiveControlEditor.java
index 5e74385..b366bf9 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPerspectiveControlEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPerspectiveControlEditor.java
@@ -30,6 +30,8 @@
 import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList;
 import org.eclipse.e4.tools.emf.ui.internal.common.EClassLabelProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry;
+import org.eclipse.e4.ui.model.application.ui.MElementContainer;
+import org.eclipse.e4.ui.model.application.ui.MUIElement;
 import org.eclipse.e4.ui.model.application.ui.advanced.impl.AdvancedPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
@@ -49,7 +51,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public class VPerspectiveControlEditor extends AbstractComponentEditor {
+public class VPerspectiveControlEditor extends AbstractComponentEditor<MElementContainer<MUIElement>> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 	private TableViewer viewer;
@@ -119,13 +121,15 @@
 			context = new EMFDataBindingContext();
 			composite = createForm(parent, context, getMaster());
 		}
-		final VirtualEntry<?> o = (VirtualEntry<?>) object;
+		@SuppressWarnings("unchecked")
+		final VirtualEntry<MElementContainer<MUIElement>, ?> o = (VirtualEntry<MElementContainer<MUIElement>, ?>) object;
 		viewer.setInput(o.getList());
 		getMaster().setValue(o.getOriginalParent());
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MElementContainer<MUIElement>> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -160,7 +164,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPerspectiveWindowsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPerspectiveWindowsEditor.java
index 3d3865a..d9b8a1d 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPerspectiveWindowsEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPerspectiveWindowsEditor.java
@@ -1,9 +1,11 @@
 package org.eclipse.e4.tools.emf.ui.internal.common.component.virtual;
 
 import javax.inject.Inject;
+
+import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
 import org.eclipse.e4.ui.model.application.ui.advanced.impl.AdvancedPackageImpl;
 
-public class VPerspectiveWindowsEditor extends VWindowEditor {
+public class VPerspectiveWindowsEditor extends VWindowEditor<MPerspective> {
 
 	@Inject
 	public VPerspectiveWindowsEditor() {
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VRootBindingContexts.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VRootBindingContexts.java
index 5eb1962..6026d0f 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VRootBindingContexts.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VRootBindingContexts.java
@@ -31,6 +31,7 @@
 import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry;
 import org.eclipse.e4.ui.model.application.MApplication;
 import org.eclipse.e4.ui.model.application.commands.MBindingContext;
+import org.eclipse.e4.ui.model.application.commands.MBindingTableContainer;
 import org.eclipse.e4.ui.model.application.commands.MCommandsFactory;
 import org.eclipse.e4.ui.model.application.commands.impl.CommandsPackageImpl;
 import org.eclipse.emf.common.command.Command;
@@ -44,7 +45,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public class VRootBindingContexts extends AbstractComponentEditor {
+public class VRootBindingContexts extends AbstractComponentEditor<MBindingTableContainer> {
 	private Composite composite;
 	private TableViewer viewer;
 	private EMFDataBindingContext context;
@@ -87,13 +88,15 @@
 			context = new EMFDataBindingContext();
 			composite = createForm(parent, context, getMaster());
 		}
-		final VirtualEntry<?> o = (VirtualEntry<?>) object;
+		@SuppressWarnings("unchecked")
+		final VirtualEntry<MBindingTableContainer, ?> o = (VirtualEntry<MBindingTableContainer, ?>) object;
 		viewer.setInput(o.getList());
 		getMaster().setValue(o.getOriginalParent());
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MBindingTableContainer> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -138,7 +141,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VSnippetsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VSnippetsEditor.java
index fb4e958..32d68aa 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VSnippetsEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VSnippetsEditor.java
@@ -20,6 +20,7 @@
 import org.eclipse.e4.tools.emf.ui.internal.common.EClassLabelProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry;
 import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.e4.ui.model.application.ui.MSnippetContainer;
 import org.eclipse.e4.ui.model.application.ui.advanced.impl.AdvancedPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
@@ -40,7 +41,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public class VSnippetsEditor extends AbstractComponentEditor {
+public class VSnippetsEditor extends AbstractComponentEditor<MSnippetContainer> {
 
 	/** Define the classes available to create snippets */
 	public static final EClass[] SNIPPET_CHILDREN = new EClass[] { AdvancedPackageImpl.Literals.AREA, BasicPackageImpl.Literals.PART,
@@ -166,13 +167,15 @@
 			context = new EMFDataBindingContext();
 			composite = createForm(parent, context, getMaster());
 		}
-		final VirtualEntry<?> o = (VirtualEntry<?>) object;
+		@SuppressWarnings("unchecked")
+		final VirtualEntry<MSnippetContainer, ?> o = (VirtualEntry<MSnippetContainer, ?>) object;
 		viewer.setInput(o.getList());
 		getMaster().setValue(o.getOriginalParent());
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MSnippetContainer> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -207,7 +210,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VToolBarContributionsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VToolBarContributionsEditor.java
index e0b7d25..9d1f858 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VToolBarContributionsEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VToolBarContributionsEditor.java
@@ -32,6 +32,7 @@
 import org.eclipse.e4.ui.model.application.MApplication;
 import org.eclipse.e4.ui.model.application.ui.menu.MMenuFactory;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBarContribution;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolBarContributions;
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
@@ -44,7 +45,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public class VToolBarContributionsEditor extends AbstractComponentEditor {
+public class VToolBarContributionsEditor extends AbstractComponentEditor<MToolBarContributions> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 	private TableViewer viewer;
@@ -87,13 +88,15 @@
 			context = new EMFDataBindingContext();
 			composite = createForm(parent, context, getMaster());
 		}
-		final VirtualEntry<?> o = (VirtualEntry<?>) object;
+		@SuppressWarnings("unchecked")
+		final VirtualEntry<MToolBarContributions, ?> o = (VirtualEntry<MToolBarContributions, ?>) object;
 		viewer.setInput(o.getList());
 		getMaster().setValue(o.getOriginalParent());
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MToolBarContributions> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -126,7 +129,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VTrimContributionsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VTrimContributionsEditor.java
index 5491d2f..cc8ca32 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VTrimContributionsEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VTrimContributionsEditor.java
@@ -32,6 +32,7 @@
 import org.eclipse.e4.ui.model.application.MApplication;
 import org.eclipse.e4.ui.model.application.ui.menu.MMenuFactory;
 import org.eclipse.e4.ui.model.application.ui.menu.MTrimContribution;
+import org.eclipse.e4.ui.model.application.ui.menu.MTrimContributions;
 import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
@@ -44,7 +45,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public class VTrimContributionsEditor extends AbstractComponentEditor {
+public class VTrimContributionsEditor extends AbstractComponentEditor<MTrimContributions> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 	private TableViewer viewer;
@@ -87,13 +88,15 @@
 			context = new EMFDataBindingContext();
 			composite = createForm(parent, context, getMaster());
 		}
-		final VirtualEntry<?> o = (VirtualEntry<?>) object;
+		@SuppressWarnings("unchecked")
+		final VirtualEntry<MTrimContributions, ?> o = (VirtualEntry<MTrimContributions, ?>) object;
 		viewer.setInput(o.getList());
 		getMaster().setValue(o.getOriginalParent());
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MTrimContributions> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -126,7 +129,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowControlEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowControlEditor.java
index f8d6556..3291d1e 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowControlEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowControlEditor.java
@@ -31,6 +31,8 @@
 import org.eclipse.e4.tools.emf.ui.internal.common.AbstractPickList.PickListFeatures;
 import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList;
 import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry;
+import org.eclipse.e4.ui.model.application.ui.MElementContainer;
+import org.eclipse.e4.ui.model.application.ui.MUIElement;
 import org.eclipse.e4.ui.model.application.ui.advanced.impl.AdvancedPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl;
 import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
@@ -50,7 +52,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public class VWindowControlEditor extends AbstractComponentEditor {
+public class VWindowControlEditor extends AbstractComponentEditor<MElementContainer<MUIElement>> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 	private final List<Action> actions = new ArrayList<>();
@@ -130,13 +132,15 @@
 			context = new EMFDataBindingContext();
 			composite = createForm(parent, context, getMaster());
 		}
-		final VirtualEntry<?> o = (VirtualEntry<?>) object;
+		@SuppressWarnings("unchecked")
+		final VirtualEntry<MElementContainer<MUIElement>, ?> o = (VirtualEntry<MElementContainer<MUIElement>, ?>) object;
 		viewer.setInput(o.getList());
 		getMaster().setValue(o.getOriginalParent());
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MElementContainer<MUIElement>> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -179,7 +183,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowEditor.java
index d7d3fae..5bb6817 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowEditor.java
@@ -47,7 +47,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public abstract class VWindowEditor extends AbstractComponentEditor {
+public abstract class VWindowEditor<M> extends AbstractComponentEditor<M> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 	private TableViewer viewer;
@@ -96,13 +96,14 @@
 			context = new EMFDataBindingContext();
 			composite = createForm(parent, context, getMaster());
 		}
-		final VirtualEntry<?> o = (VirtualEntry<?>) object;
+		@SuppressWarnings("unchecked")
+		final VirtualEntry<M, ?> o = (VirtualEntry<M, ?>) object;
 		viewer.setInput(o.getList());
 		getMaster().setValue(o.getOriginalParent());
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue<M> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -137,7 +138,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowSharedElementsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowSharedElementsEditor.java
index 05ac6e5..1fa0071 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowSharedElementsEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowSharedElementsEditor.java
@@ -26,6 +26,7 @@
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
 import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.AbstractPickList;
 import org.eclipse.e4.tools.emf.ui.internal.common.AbstractPickList.PickListFeatures;
@@ -40,8 +41,6 @@
 import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
-import org.eclipse.emf.databinding.edit.EMFEditProperties;
-import org.eclipse.emf.databinding.edit.IEMFEditListProperty;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
@@ -57,7 +56,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public class VWindowSharedElementsEditor extends AbstractComponentEditor {
+public class VWindowSharedElementsEditor extends AbstractComponentEditor<MWindow> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 	private StructuredViewer viewer;
@@ -146,13 +145,14 @@
 			context = new EMFDataBindingContext();
 			composite = createForm(parent, context, getMaster());
 		}
-		final VirtualEntry<?> o = (VirtualEntry<?>) object;
+		@SuppressWarnings("unchecked")
+		final VirtualEntry<MWindow, ?> o = (VirtualEntry<MWindow, ?>) object;
 		viewer.setInput(o.getList());
 		getMaster().setValue(o.getOriginalParent());
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue<MWindow> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -178,9 +178,7 @@
 			};
 			pickList.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
 			viewer = pickList.getList();
-
-			final IEMFEditListProperty prop = EMFEditProperties.list(getEditingDomain(), BasicPackageImpl.Literals.WINDOW__SHARED_ELEMENTS);
-			viewer.setInput(prop.observeDetail(getMaster()));
+			viewer.setInput(E4Properties.sharedElements(getEditingDomain()).observeDetail(getMaster()));
 
 			pickList.setLabelProvider(new EClassLabelProvider(getEditor()));
 			pickList.setInput(
@@ -195,7 +193,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowTrimEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowTrimEditor.java
index 32426e9..2b1994b 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowTrimEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowTrimEditor.java
@@ -44,7 +44,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
-public class VWindowTrimEditor extends AbstractComponentEditor {
+public class VWindowTrimEditor extends AbstractComponentEditor<MTrimmedWindow> {
 	private Composite composite;
 	private EMFDataBindingContext context;
 	private TableViewer viewer;
@@ -87,13 +87,15 @@
 			context = new EMFDataBindingContext();
 			composite = createForm(parent, context, getMaster());
 		}
-		final VirtualEntry<?> o = (VirtualEntry<?>) object;
+		@SuppressWarnings("unchecked")
+		final VirtualEntry<MTrimmedWindow, ?> o = (VirtualEntry<MTrimmedWindow, ?>) object;
 		viewer.setInput(o.getList());
 		getMaster().setValue(o.getOriginalParent());
 		return composite;
 	}
 
-	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+	private Composite createForm(Composite parent, EMFDataBindingContext context,
+			WritableValue<MTrimmedWindow> master) {
 		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
 
 		final CTabItem item = new CTabItem(folder, SWT.NONE);
@@ -129,7 +131,7 @@
 	}
 
 	@Override
-	public IObservableList getChildList(Object element) {
+	public IObservableList<?> getChildList(Object element) {
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowWindowsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowWindowsEditor.java
index 7e1dd2d..945811f 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowWindowsEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowWindowsEditor.java
@@ -1,9 +1,11 @@
 package org.eclipse.e4.tools.emf.ui.internal.common.component.virtual;
 
 import javax.inject.Inject;
+
+import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
 import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl;
 
-public class VWindowWindowsEditor extends VWindowEditor {
+public class VWindowWindowsEditor extends VWindowEditor<MWindow> {
 
 	@Inject
 	public VWindowWindowsEditor() {
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/objectdata/ObjectViewer.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/objectdata/ObjectViewer.java
index ad08b95..b249838 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/objectdata/ObjectViewer.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/objectdata/ObjectViewer.java
@@ -4,6 +4,7 @@
 import java.util.Collections;
 
 import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.core.databinding.property.value.IValueProperty;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtensionPoint;
@@ -17,7 +18,6 @@
 import org.eclipse.e4.ui.model.application.MApplicationElement;
 import org.eclipse.e4.ui.model.internal.ModelUtils;
 import org.eclipse.emf.databinding.EMFProperties;
-import org.eclipse.emf.databinding.IEMFValueProperty;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.MenuManager;
@@ -40,14 +40,15 @@
 import org.eclipse.swt.widgets.Label;
 
 public class ObjectViewer {
-	public TreeViewer createViewer(Composite parent, EStructuralFeature feature, final IObservableValue master,
+	public TreeViewer createViewer(Composite parent, EStructuralFeature feature, final IObservableValue<?> master,
 			IResourcePool resourcePool, final Messages messages) {
 		final TreeViewer viewer = new TreeViewer(parent);
 		viewer.setContentProvider(new ContentProviderImpl());
 		viewer.setLabelProvider(new LabelProviderImpl(resourcePool));
 		viewer.setComparator(new ViewerComparatorImpl());
-		final IEMFValueProperty property = EMFProperties.value(feature);
-		final IObservableValue value = property.observeDetail(master);
+		@SuppressWarnings("unchecked")
+		final IValueProperty<Object, Object> property = EMFProperties.value(feature);
+		final IObservableValue<Object> value = property.observeDetail(master);
 		value.addValueChangeListener(event -> {
 			if (event.diff.getNewValue() != null) {
 				viewer.setInput(Collections.singleton(new JavaObject(event.diff.getNewValue())));
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/properties/ExportIdsHandler.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/properties/ExportIdsHandler.java
index 5a6c978..b136e79 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/properties/ExportIdsHandler.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/properties/ExportIdsHandler.java
@@ -81,13 +81,14 @@
 
 	static class ExportIdDialog extends TitleAreaDialog {
 		private Messages messages;
-		private IObservableList list;
+		private IObservableList<?> list;
 		private IResourcePool pool;
 		private JavaClass clazz;
 		private CheckboxTableViewer viewer;
 		private Text textClassName;
 
-		public ExportIdDialog(Shell parentShell, Messages messages, IObservableList list, IResourcePool pool, IProject project) {
+		public ExportIdDialog(Shell parentShell, Messages messages, IObservableList<?> list, IResourcePool pool,
+				IProject project) {
 			super(parentShell);
 			this.messages = messages;
 			this.list = list;
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/properties/ExternalizeStringHandler.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/properties/ExternalizeStringHandler.java
index d1c28b2..d28eccc 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/properties/ExternalizeStringHandler.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/properties/ExternalizeStringHandler.java
@@ -58,13 +58,14 @@
 
 	static class ExtractionDialog extends TitleAreaDialog {
 		private Messages messages;
-		private IObservableList list;
+		private IObservableList<? extends EObject> list;
 		private IResourcePool pool;
 		private IProject project;
 		private CheckboxTableViewer viewer;
 		private IModelResource resource;
 
-		public ExtractionDialog(Shell parentShell, Messages messages, IModelResource resource, IObservableList list, IResourcePool pool, IProject project) {
+		public ExtractionDialog(Shell parentShell, Messages messages, IModelResource resource,
+				IObservableList<? extends EObject> list, IResourcePool pool, IProject project) {
 			super(parentShell);
 			this.messages = messages;
 			this.list = list;
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/resourcelocator/dialogs/FindContributionDialog.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/resourcelocator/dialogs/FindContributionDialog.java
index 8881fc8..f47950b 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/resourcelocator/dialogs/FindContributionDialog.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/resourcelocator/dialogs/FindContributionDialog.java
@@ -136,7 +136,7 @@
 		viewer = new TableViewer(container, SWT.FULL_SELECTION | SWT.BORDER);
 		GridData gd = new GridData(GridData.FILL_BOTH);
 		viewer.getControl().setLayoutData(gd);
-		viewer.setContentProvider(new ObservableListContentProvider());
+		viewer.setContentProvider(new ObservableListContentProvider<>());
 		viewer.setLabelProvider(new StyledCellLabelProvider() {
 			@Override
 			public void update(ViewerCell cell) {
@@ -191,7 +191,7 @@
 		});
 		viewer.addDoubleClickListener(event -> okPressed());
 
-		final WritableList list = new WritableList();
+		final WritableList<ContributionData> list = new WritableList<>();
 		viewer.setInput(list);
 
 		final ClassContributionCollector collector = getCollector();
@@ -393,9 +393,9 @@
 
 	private static class ContributionResultHandlerImpl implements ContributionResultHandler {
 		private boolean cancled = false;
-		private IObservableList list;
+		private IObservableList<ContributionData> list;
 
-		public ContributionResultHandlerImpl(IObservableList list) {
+		public ContributionResultHandlerImpl(IObservableList<ContributionData> list) {
 			this.list = list;
 		}
 
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/uistructure/UIViewer.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/uistructure/UIViewer.java
index b5cddd8..a30decc 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/uistructure/UIViewer.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/uistructure/UIViewer.java
@@ -38,12 +38,14 @@
 import org.eclipse.swt.widgets.Control;
 
 public class UIViewer {
-	public TreeViewer createViewer(Composite parent, EStructuralFeature feature, final IObservableValue master, IResourcePool resourcePool, final Messages messages) {
+	public TreeViewer createViewer(Composite parent, EStructuralFeature feature, final IObservableValue<?> master,
+			IResourcePool resourcePool, final Messages messages) {
 		final TreeViewer viewer = new TreeViewer(parent);
 		viewer.setContentProvider(new WidgetContentProvider());
 		viewer.setLabelProvider(new WidgetLabelProvider(resourcePool));
 		IEMFValueProperty property = EMFProperties.value(feature);
-		IObservableValue value = property.observeDetail(master);
+		@SuppressWarnings("unchecked")
+		IObservableValue<?> value = property.observeDetail(master);
 		value.addValueChangeListener(event -> {
 			if (event.diff.getNewValue() != null) {
 				viewer.setInput(Collections.singleton(event.diff.getNewValue()));
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/uistructure/ViewerElement.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/uistructure/ViewerElement.java
index 11221cb..143bc42 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/uistructure/ViewerElement.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/uistructure/ViewerElement.java
@@ -42,7 +42,7 @@
 public class ViewerElement {
 
 	private StructuredViewer viewer;
-	private final AbstractComponentEditor editor;
+	private final AbstractComponentEditor<?> editor;
 	private ComboViewer dropDown;
 	private Button addButton;
 	private final Composite parent;
@@ -58,7 +58,7 @@
 	 * @param editor
 	 */
 	@Inject
-	public ViewerElement(Composite parent, AbstractComponentEditor editor) {
+	public ViewerElement(Composite parent, AbstractComponentEditor<?> editor) {
 		this.parent = parent;
 		this.editor = editor;
 		createControl();
@@ -182,7 +182,8 @@
 	 * @param editor
 	 * @return a new {@link ViewerElement}
 	 */
-	public static ViewerElement create(IEclipseContext parentContext, Composite parent, AbstractComponentEditor editor) {
+	public static ViewerElement create(IEclipseContext parentContext, Composite parent,
+			AbstractComponentEditor<?> editor) {
 		final IEclipseContext mycontext = parentContext.createChild();
 		mycontext.set(Composite.class, parent);
 		mycontext.set(AbstractComponentEditor.class, editor);
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/xml/EMFDocumentResourceMediator.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/xml/EMFDocumentResourceMediator.java
index 4751f43..68256a3 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/xml/EMFDocumentResourceMediator.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/xml/EMFDocumentResourceMediator.java
@@ -80,7 +80,7 @@
 	public void updateFromEMF() {
 		try {
 			updateFromEMF = true;
-			document.set(toXMI((EObject) modelResource.getRoot().get(0)));
+			document.set(toXMI(modelResource.getRoot().get(0)));
 		} finally {
 			updateFromEMF = false;
 		}
@@ -112,7 +112,7 @@
 		if (object == null) {
 			return null;
 		}
-		final E4XMIResource root = (E4XMIResource) ((EObject) modelResource.getRoot().get(0)).eResource();
+		final E4XMIResource root = (E4XMIResource) modelResource.getRoot().get(0).eResource();
 		final String xmiId = root.getID(object);
 
 		final FindReplaceDocumentAdapter find = new FindReplaceDocumentAdapter(document);
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/imp/ModelImportWizard.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/imp/ModelImportWizard.java
index ba28bab..203f6cf 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/imp/ModelImportWizard.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/imp/ModelImportWizard.java
@@ -33,17 +33,17 @@
 
 	private final MApplication application;
 
-	private final AbstractComponentEditor editor;
+	private final AbstractComponentEditor<?> editor;
 
 	private final String hint;
 
-	public ModelImportWizard(Class<? extends MApplicationElement> applicationElement, AbstractComponentEditor editor,
-		IResourcePool resourcePool) {
+	public ModelImportWizard(Class<? extends MApplicationElement> applicationElement, AbstractComponentEditor<?> editor,
+			IResourcePool resourcePool) {
 		this(applicationElement, editor, "", resourcePool); //$NON-NLS-1$
 	}
 
-	public ModelImportWizard(Class<? extends MApplicationElement> applicationElement, AbstractComponentEditor editor,
-		String hint, IResourcePool resourcePool) {
+	public ModelImportWizard(Class<? extends MApplicationElement> applicationElement, AbstractComponentEditor<?> editor,
+			String hint, IResourcePool resourcePool) {
 		this.applicationElement = applicationElement;
 		this.editor = editor;
 		this.hint = hint;
@@ -124,7 +124,7 @@
 		return RegistryUtil.getModelElements(type, getHint(), application, page1.getConfigurationElements());
 	}
 
-	public AbstractComponentEditor getEditor() {
+	public AbstractComponentEditor<?> getEditor() {
 		return editor;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassPage.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassPage.java
index 710afc7..d5e855c 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassPage.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassPage.java
@@ -21,7 +21,7 @@
 import org.eclipse.core.databinding.Binding;
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.UpdateValueStrategy;
-import org.eclipse.core.databinding.beans.BeanProperties;
+import org.eclipse.core.databinding.beans.typed.BeanProperties;
 import org.eclipse.core.databinding.conversion.Converter;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.validation.IValidator;
@@ -54,7 +54,7 @@
 import org.eclipse.jdt.ui.StandardJavaElementContentProvider;
 import org.eclipse.jface.databinding.swt.ISWTObservableValue;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.databinding.wizard.WizardPageSupport;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.resource.ImageDescriptor;
@@ -215,7 +215,6 @@
 		return settingsSection;
 	}
 
-	@SuppressWarnings("unchecked")
 	@Override
 	public void createControl(Composite parent) {
 		final Image img = new Image(parent.getDisplay(), getClass().getClassLoader().getResourceAsStream(
@@ -251,10 +250,11 @@
 			t.setEditable(false);
 
 			final Binding bd = dbc.bindValue(
-					WidgetProperties.text().observe(t), BeanProperties.value(FRAGMENT_ROOT).observe(clazz),
-					new UpdateValueStrategy<>().setBeforeSetValidator(new PFRootValidator()),
-					new UpdateValueStrategy<>().setConverter(new PackageFragmentRootToStringConverter())
-					);
+					WidgetProperties.text().observe(t),
+					BeanProperties.value(FRAGMENT_ROOT, IPackageFragmentRoot.class).observe(clazz),
+					new UpdateValueStrategy<String, IPackageFragmentRoot>()
+					.setBeforeSetValidator(new PFRootValidator()),
+					UpdateValueStrategy.create(new PackageFragmentRootToStringConverter()));
 
 			final Button b = new Button(parent, SWT.PUSH);
 			b.setText(Messages.AbstractNewClassPage_Browse);
@@ -280,9 +280,9 @@
 			tClassPackage.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			final Binding bd = dbc.bindValue(
 					WidgetProperties.text(SWT.Modify).observe(tClassPackage),
-					BeanProperties.value(PACKAGE_FRAGMENT).observe(clazz),
-					new UpdateValueStrategy<>().setConverter(new StringToPackageFragmentConverter(clazz)),
-					new UpdateValueStrategy<>().setConverter(new PackageFragmentToStringConverter()));
+					BeanProperties.value(PACKAGE_FRAGMENT, IPackageFragment.class).observe(clazz),
+					UpdateValueStrategy.create(new StringToPackageFragmentConverter(clazz)),
+					UpdateValueStrategy.create(new PackageFragmentToStringConverter()));
 
 			final Button b = new Button(parent, SWT.PUSH);
 			b.setText(Messages.AbstractNewClassPage_Browse);
@@ -300,7 +300,7 @@
 
 		final Text tClassName;
 		{
-			final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+			final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 			final Label l = new Label(parent, SWT.NONE);
 			l.setText(Messages.AbstractNewClassPage_Name);
@@ -309,7 +309,7 @@
 			tClassName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			dbc.bindValue(textProp.observe(tClassName),
 					BeanProperties.value(PROPERTY_NAME, String.class).observe(clazz),
-					new UpdateValueStrategy<>().setBeforeSetValidator(new ClassnameValidator()), null);
+					new UpdateValueStrategy<String, String>().setBeforeSetValidator(new ClassnameValidator()), null);
 
 			new Label(parent, SWT.NONE);
 		}
@@ -319,8 +319,8 @@
 			l.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false, 3, 1));
 		}
 
-		final ISWTObservableValue obsPackage = WidgetProperties.text(SWT.Modify).observe(tClassPackage);
-		final ISWTObservableValue obsClass = WidgetProperties.text(SWT.Modify).observe(tClassName);
+		final ISWTObservableValue<String> obsPackage = WidgetProperties.text(SWT.Modify).observe(tClassPackage);
+		final ISWTObservableValue<String> obsClass = WidgetProperties.text(SWT.Modify).observe(tClassName);
 		final ClassMultiValidator multiValidator = new ClassMultiValidator(clazz, obsPackage, obsClass);
 		dbc.addValidationStatusProvider(multiValidator);
 
@@ -506,11 +506,10 @@
 
 	}
 
-	static class ClassnameValidator implements IValidator<Object> {
+	static class ClassnameValidator implements IValidator<String> {
 
 		@Override
-		public IStatus validate(Object value) {
-			final String name = value.toString();
+		public IStatus validate(String name) {
 			if (name.length() == 0) {
 				return new Status(IStatus.ERROR, ToolsPlugin.PLUGIN_ID, Messages.AbstractNewClassPage_NameNotEmpty);
 			}
@@ -537,39 +536,37 @@
 		}
 	}
 
-	static class PackageFragmentRootToStringConverter extends Converter<Object, Object> {
+	static class PackageFragmentRootToStringConverter extends Converter<IPackageFragmentRoot, String> {
 
 		public PackageFragmentRootToStringConverter() {
 			super(IPackageFragmentRoot.class, String.class);
 		}
 
 		@Override
-		public Object convert(Object fromObject) {
-			final IPackageFragmentRoot f = (IPackageFragmentRoot) fromObject;
-			if (f == null) {
+		public String convert(IPackageFragmentRoot fromObject) {
+			if (fromObject == null) {
 				return ""; //$NON-NLS-1$
 			}
-			return f.getPath().makeRelative().toString();
+			return fromObject.getPath().makeRelative().toString();
 		}
 	}
 
-	static class PackageFragmentToStringConverter extends Converter<Object, Object> {
+	static class PackageFragmentToStringConverter extends Converter<IPackageFragment, String> {
 
 		public PackageFragmentToStringConverter() {
 			super(IPackageFragment.class, String.class);
 		}
 
 		@Override
-		public Object convert(Object fromObject) {
+		public String convert(IPackageFragment fromObject) {
 			if (fromObject == null) {
 				return ""; //$NON-NLS-1$
 			}
-			final IPackageFragment f = (IPackageFragment) fromObject;
-			return f.getElementName();
+			return fromObject.getElementName();
 		}
 	}
 
-	static class StringToPackageFragmentConverter extends Converter<Object, Object> {
+	static class StringToPackageFragmentConverter extends Converter<String, IPackageFragment> {
 
 		private final JavaClass clazz;
 
@@ -579,7 +576,7 @@
 		}
 
 		@Override
-		public Object convert(Object fromObject) {
+		public IPackageFragment convert(String fromObject) {
 			if (clazz.getFragmentRoot() == null) {
 				return null;
 			}
@@ -587,7 +584,7 @@
 				return clazz.getFragmentRoot().getPackageFragment(""); //$NON-NLS-1$
 			}
 
-			return clazz.getFragmentRoot().getPackageFragment((String) fromObject);
+			return clazz.getFragmentRoot().getPackageFragment(fromObject);
 
 		}
 	}
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewDynamicMenuContributionClassWizard.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewDynamicMenuContributionClassWizard.java
index cd7d76f..7829ffe 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewDynamicMenuContributionClassWizard.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewDynamicMenuContributionClassWizard.java
@@ -16,14 +16,14 @@
 import java.util.Set;
 
 import org.eclipse.core.databinding.DataBindingContext;
-import org.eclipse.core.databinding.beans.BeanProperties;
+import org.eclipse.core.databinding.beans.typed.BeanProperties;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.e4.internal.tools.Messages;
 import org.eclipse.e4.internal.tools.wizards.classes.AbstractNewClassPage.JavaClass;
 import org.eclipse.e4.internal.tools.wizards.classes.templates.DynamicMenuContributionTemplate;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Button;
@@ -61,11 +61,9 @@
 				return new DynamicMenuContributionClass(root);
 			}
 
-			@SuppressWarnings("unchecked")
 			@Override
 			protected void createFields(Composite parent, DataBindingContext dbc) {
-				final IWidgetValueProperty textProp = WidgetProperties
-					.text(SWT.Modify);
+				final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 				{
 					Label l = new Label(parent, SWT.NONE);
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewHandlerClassWizard.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewHandlerClassWizard.java
index 20537b2..31dfe31 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewHandlerClassWizard.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewHandlerClassWizard.java
@@ -17,14 +17,14 @@
 import java.util.Set;
 
 import org.eclipse.core.databinding.DataBindingContext;
-import org.eclipse.core.databinding.beans.BeanProperties;
+import org.eclipse.core.databinding.beans.typed.BeanProperties;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.e4.internal.tools.Messages;
 import org.eclipse.e4.internal.tools.wizards.classes.AbstractNewClassPage.JavaClass;
 import org.eclipse.e4.internal.tools.wizards.classes.templates.HandlerTemplate;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Button;
@@ -65,11 +65,9 @@
 				return new HandlerClass(root);
 			}
 
-			@SuppressWarnings("unchecked")
 			@Override
 			protected void createFields(Composite parent, DataBindingContext dbc) {
-				final IWidgetValueProperty textProp = WidgetProperties
-					.text(SWT.Modify);
+				final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 				{
 					Label l = new Label(parent, SWT.NONE);
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewImperativeExpressionClassWizard.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewImperativeExpressionClassWizard.java
index 597bc90..3232a02 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewImperativeExpressionClassWizard.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewImperativeExpressionClassWizard.java
@@ -16,14 +16,14 @@
 import java.util.Set;
 
 import org.eclipse.core.databinding.DataBindingContext;
-import org.eclipse.core.databinding.beans.BeanProperties;
+import org.eclipse.core.databinding.beans.typed.BeanProperties;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.e4.internal.tools.Messages;
 import org.eclipse.e4.internal.tools.wizards.classes.AbstractNewClassPage.JavaClass;
 import org.eclipse.e4.internal.tools.wizards.classes.templates.ImperativeExpressionTemplate;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
@@ -63,11 +63,9 @@
 				return new ImperativeExpressionClass(root);
 			}
 
-			@SuppressWarnings("unchecked")
 			@Override
 			protected void createFields(Composite parent, DataBindingContext dbc) {
-				final IWidgetValueProperty textProp = WidgetProperties
-						.text(SWT.Modify);
+				final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 
 				{
 					Label l = new Label(parent, SWT.NONE);
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewPartClassWizard.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewPartClassWizard.java
index 1b3200d..963f358 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewPartClassWizard.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewPartClassWizard.java
@@ -19,14 +19,14 @@
 import java.util.Set;
 
 import org.eclipse.core.databinding.DataBindingContext;
-import org.eclipse.core.databinding.beans.BeanProperties;
+import org.eclipse.core.databinding.beans.typed.BeanProperties;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.e4.internal.tools.Messages;
 import org.eclipse.e4.internal.tools.wizards.classes.AbstractNewClassPage.JavaClass;
 import org.eclipse.e4.internal.tools.wizards.classes.templates.PartTemplate;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Button;
@@ -60,12 +60,11 @@
 			Messages.NewPartClassWizard_CreateNewPart, root, ResourcesPlugin.getWorkspace()
 			.getRoot(), initialString) {
 
-			@SuppressWarnings("unchecked")
 			@Override
 			protected void createFields(Composite parent, DataBindingContext dbc) {
-				final IWidgetValueProperty textProp = WidgetProperties
+				final IWidgetValueProperty<Text, String> textProp = WidgetProperties
 					.text(SWT.Modify);
-				final IWidgetValueProperty enabledProp = WidgetProperties.enabled();
+				final IWidgetValueProperty<Text, Boolean> enabledProp = WidgetProperties.enabled();
 
 				{
 					final Label l = new Label(parent, SWT.NONE);
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewToolControlClassWizard.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewToolControlClassWizard.java
index e62fc66..8486b51 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewToolControlClassWizard.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewToolControlClassWizard.java
@@ -16,14 +16,14 @@
 import java.util.Set;
 
 import org.eclipse.core.databinding.DataBindingContext;
-import org.eclipse.core.databinding.beans.BeanProperties;
+import org.eclipse.core.databinding.beans.typed.BeanProperties;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.e4.internal.tools.Messages;
 import org.eclipse.e4.internal.tools.wizards.classes.AbstractNewClassPage.JavaClass;
 import org.eclipse.e4.internal.tools.wizards.classes.templates.ToolControlTemplate;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Button;
@@ -61,10 +61,9 @@
 				return new ToolControlClass(root);
 			}
 
-			@SuppressWarnings("unchecked")
 			@Override
 			protected void createFields(Composite parent, DataBindingContext dbc) {
-				final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+				final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
 				{
 					Label l = new Label(parent, SWT.NONE);
 					l.setText(Messages.NewToolControlClassWizard_CreateGUIMethod);