diff --git a/bundles/org.eclipse.emf.ecp.diffmerge.renderer.swt/src/org/eclipse/emf/ecp/diffmerge/internal/renderer/swt/SWTDiffMergeAddition.java b/bundles/org.eclipse.emf.ecp.diffmerge.renderer.swt/src/org/eclipse/emf/ecp/diffmerge/internal/renderer/swt/SWTDiffMergeAddition.java
index 9977f18..4ebec11 100644
--- a/bundles/org.eclipse.emf.ecp.diffmerge.renderer.swt/src/org/eclipse/emf/ecp/diffmerge/internal/renderer/swt/SWTDiffMergeAddition.java
+++ b/bundles/org.eclipse.emf.ecp.diffmerge.renderer.swt/src/org/eclipse/emf/ecp/diffmerge/internal/renderer/swt/SWTDiffMergeAddition.java
@@ -58,6 +58,11 @@
 		super(vElement, viewContext, reportService);
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emfforms.spi.swt.core.AbstractSWTRenderer#getGridDescription(org.eclipse.emfforms.spi.swt.core.layout.SWTGridDescription)
+	 */
 	@Override
 	public SWTGridDescription getGridDescription(SWTGridDescription gridDescription) {
 		final SWTGridDescription addGridDescription = gridDescription.copy();
@@ -66,6 +71,12 @@
 		return addGridDescription;
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emfforms.spi.swt.core.AbstractSWTRenderer#renderControl(org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell,
+	 *      org.eclipse.swt.widgets.Composite)
+	 */
 	@Override
 	protected Control renderControl(SWTGridCell cell, Composite parent) throws NoRendererFoundException,
 		NoPropertyDescriptorFoundExeption {
@@ -87,6 +98,11 @@
 		// diffButton.setLayoutData(SWTRenderingHelper.INSTANCE.getLayoutHelper().getLeftColumnLayoutData());
 		diffButton.addSelectionListener(new SelectionAdapter() {
 
+			/**
+			 * {@inheritDoc}
+			 *
+			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+			 */
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				super.widgetSelected(e);
@@ -98,6 +114,11 @@
 			if (VDiffAttachment.class.isInstance(attachment)) {
 				final Adapter adapter = new AdapterImpl() {
 
+					/**
+					 * {@inheritDoc}
+					 *
+					 * @see org.eclipse.emf.common.notify.impl.AdapterImpl#notifyChanged(org.eclipse.emf.common.notify.Notification)
+					 */
 					@Override
 					public void notifyChanged(Notification msg) {
 						super.notifyChanged(msg);
@@ -134,7 +155,7 @@
 
 		String label;
 		try {
-			label = getViewModelContext().getService(EMFFormsLabelProvider.class)
+			label = (String) getViewModelContext().getService(EMFFormsLabelProvider.class)
 				.getDisplayName(vControl.getDomainModelReference(), diffModelContext.getDomainModel()).getValue();
 		} catch (final NoLabelFoundException ex) {
 			getViewModelContext().getService(ReportService.class).report(new AbstractReport(ex));
diff --git a/bundles/org.eclipse.emf.ecp.diffmerge.swt/src/org/eclipse/emf/ecp/diffmerge/swt/DiffDialogHelper.java b/bundles/org.eclipse.emf.ecp.diffmerge.swt/src/org/eclipse/emf/ecp/diffmerge/swt/DiffDialogHelper.java
index 8756ba3..07c696c 100644
--- a/bundles/org.eclipse.emf.ecp.diffmerge.swt/src/org/eclipse/emf/ecp/diffmerge/swt/DiffDialogHelper.java
+++ b/bundles/org.eclipse.emf.ecp.diffmerge.swt/src/org/eclipse/emf/ecp/diffmerge/swt/DiffDialogHelper.java
@@ -86,7 +86,7 @@
 
 	private static String getControlLabel(VControl control, DiffMergeModelContext diffModelContext) {
 		try {
-			return Activator.getInstance().getEMFFormsLabelProvider()
+			return (String) Activator.getInstance().getEMFFormsLabelProvider()
 				.getDisplayName(control.getDomainModelReference(), diffModelContext.getDomainModel()).getValue();
 		} catch (final NoLabelFoundException e) {
 			return e.getMessage();
diff --git a/bundles/org.eclipse.emf.ecp.edit.swt/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.ecp.edit.swt/META-INF/MANIFEST.MF
index 21ce3ec..83a242f 100644
--- a/bundles/org.eclipse.emf.ecp.edit.swt/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.ecp.edit.swt/META-INF/MANIFEST.MF
@@ -49,7 +49,6 @@
  org.eclipse.jface.action;version="0.0.0",
  org.eclipse.jface.databinding.fieldassist;version="0.0.0",
  org.eclipse.jface.databinding.swt;version="0.0.0",
- org.eclipse.jface.databinding.swt.typed;version="0.0.0",
  org.eclipse.jface.databinding.viewers;version="0.0.0",
  org.eclipse.jface.dialogs;version="0.0.0",
  org.eclipse.jface.fieldassist;version="0.0.0",
diff --git a/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/internal/swt/Activator.java b/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/internal/swt/Activator.java
index 558285d..5a89b45 100644
--- a/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/internal/swt/Activator.java
+++ b/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/internal/swt/Activator.java
@@ -153,7 +153,7 @@
 		if (!getDefault().imageRegistry.containsKey(url == null ? "NULL" : url.toExternalForm())) { //$NON-NLS-1$
 
 			final ImageDescriptor createFromURL = ImageDescriptor.createFromURL(url);
-			final ImageData imageData = createFromURL.getImageData(100);
+			final ImageData imageData = createFromURL.getImageData();
 			getDefault().imageRegistry.put(url == null ? "NULL" : url.toExternalForm(), new ImageDescriptorToImage( //$NON-NLS-1$
 				createFromURL));
 		}
@@ -183,7 +183,7 @@
 	 * @return the {@link ImageData}
 	 */
 	public static ImageData getImageData(URL url) {
-		return ImageDescriptor.createFromURL(url).getImageData(100);
+		return ImageDescriptor.createFromURL(url).getImageData();
 	}
 
 	private ServiceReference<ECPControlFactory> controlFactoryReference;
diff --git a/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/internal/swt/reference/ReferenceMultiControl.java b/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/internal/swt/reference/ReferenceMultiControl.java
index 628b4ef..b8d493f 100644
--- a/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/internal/swt/reference/ReferenceMultiControl.java
+++ b/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/internal/swt/reference/ReferenceMultiControl.java
@@ -15,6 +15,7 @@
 package org.eclipse.emf.ecp.edit.internal.swt.reference;
 
 import org.eclipse.emf.ecore.EStructuralFeature.Setting;
+import org.eclipse.emf.ecp.edit.internal.swt.Activator;
 import org.eclipse.emf.ecp.edit.internal.swt.controls.MultiControl;
 import org.eclipse.emf.ecp.edit.spi.ReferenceService;
 import org.eclipse.emf.ecp.edit.spi.swt.actions.ECPSWTAction;
diff --git a/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/internal/swt/table/NumberCellEditor.java b/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/internal/swt/table/NumberCellEditor.java
index f24adb7..4880d75 100644
--- a/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/internal/swt/table/NumberCellEditor.java
+++ b/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/internal/swt/table/NumberCellEditor.java
@@ -32,12 +32,11 @@
 import org.eclipse.emf.edit.command.SetCommand;
 import org.eclipse.emfforms.spi.common.locale.EMFFormsLocaleProvider;
 import org.eclipse.emfforms.spi.localization.LocalizationServiceHelper;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.databinding.viewers.CellEditorProperties;
 import org.eclipse.jface.dialogs.IDialogLabelKeys;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.viewers.CellEditor;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Composite;
@@ -188,11 +187,24 @@
 		super(parent, style | SWT.RIGHT);
 	}
 
+	/**
+	 *
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getValueProperty()
+	 */
 	@Override
-	public IValueProperty<CellEditor, String> getValueProperty() {
+	public IValueProperty getValueProperty() {
 		return CellEditorProperties.control().value(WidgetProperties.text(SWT.FocusOut));
 	}
 
+	/**
+	 *
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#instantiate(org.eclipse.emf.ecore.EStructuralFeature,
+	 *      org.eclipse.emf.ecp.view.spi.context.ViewModelContext)
+	 */
 	@Override
 	public void instantiate(EStructuralFeature eStructuralFeature, ViewModelContext viewModelContext) {
 		this.eStructuralFeature = eStructuralFeature;
@@ -201,6 +213,12 @@
 		localeProvider = viewModelContext.getService(EMFFormsLocaleProvider.class);
 	}
 
+	/**
+	 *
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getFormatedString(java.lang.Object)
+	 */
 	@Override
 	public String getFormatedString(Object value) {
 		if (value == null) {
@@ -229,16 +247,34 @@
 		return Locale.getDefault();
 	}
 
+	/**
+	 *
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getColumnWidthWeight()
+	 */
 	@Override
 	public int getColumnWidthWeight() {
 		return 50;
 	}
 
+	/**
+	 *
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getTargetToModelStrategy(org.eclipse.core.databinding.DataBindingContext)
+	 */
 	@Override
 	public UpdateValueStrategy getTargetToModelStrategy(final DataBindingContext databindingContext) {
 		return withPreSetValidation(eStructuralFeature, new TargetToModelStrategy(databindingContext));
 	}
 
+	/**
+	 *
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getModelToTargetStrategy(org.eclipse.core.databinding.DataBindingContext)
+	 */
 	@Override
 	public UpdateValueStrategy getModelToTargetStrategy(DataBindingContext databindingContext) {
 		return new EMFUpdateValueStrategy() {
@@ -262,6 +298,11 @@
 		return text;
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#setEditable(boolean)
+	 */
 	@Override
 	public void setEditable(boolean editable) {
 		if (getText() != null) {
@@ -269,11 +310,21 @@
 		}
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getImage(java.lang.Object)
+	 */
 	@Override
 	public Image getImage(Object value) {
 		return null;
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getMinWidth()
+	 */
 	@Override
 	public int getMinWidth() {
 		return 0;
diff --git a/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/internal/swt/util/OverlayImageDescriptor.java b/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/internal/swt/util/OverlayImageDescriptor.java
index aaaa069..c5e97fe 100644
--- a/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/internal/swt/util/OverlayImageDescriptor.java
+++ b/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/internal/swt/util/OverlayImageDescriptor.java
@@ -101,7 +101,7 @@
 		}
 
 		// draw the overlay image
-		final ImageData overlayData = overlayDesc.getImageData(100);
+		final ImageData overlayData = overlayDesc.getImageData();
 		if (overlayData != null) {
 			Point pos = null;
 			switch (overlayPos) {
diff --git a/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/spi/swt/table/MultiStringCellEditor.java b/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/spi/swt/table/MultiStringCellEditor.java
index 8da6894..92aced7 100644
--- a/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/spi/swt/table/MultiStringCellEditor.java
+++ b/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/spi/swt/table/MultiStringCellEditor.java
@@ -22,7 +22,7 @@
 import org.eclipse.emf.databinding.EMFUpdateValueStrategy;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.databinding.viewers.CellEditorProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Image;
@@ -101,17 +101,36 @@
 		super(parent, style);
 	}
 
-	@SuppressWarnings({ "rawtypes" })
+	/**
+	 *
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getValueProperty()
+	 */
+	@SuppressWarnings({ "rawtypes", "unchecked" })
 	@Override
 	public IValueProperty getValueProperty() {
 		return CellEditorProperties.control().value(WidgetProperties.text(SWT.FocusOut));
 	}
 
+	/**
+	 *
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#instantiate(org.eclipse.emf.ecore.EStructuralFeature,
+	 *      org.eclipse.emf.ecp.view.spi.context.ViewModelContext)
+	 */
 	@Override
 	public void instantiate(EStructuralFeature eStructuralFeature, ViewModelContext viewModelContext) {
 		this.eStructuralFeature = eStructuralFeature;
 	}
 
+	/**
+	 *
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getFormatedString(java.lang.Object)
+	 */
 	@Override
 	public String getFormatedString(Object value) {
 		if (value == null) {
@@ -135,16 +154,34 @@
 		return string;
 	}
 
+	/**
+	 *
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getColumnWidthWeight()
+	 */
 	@Override
 	public int getColumnWidthWeight() {
 		return 50;
 	}
 
+	/**
+	 *
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getTargetToModelStrategy(org.eclipse.core.databinding.DataBindingContext)
+	 */
 	@Override
 	public UpdateValueStrategy getTargetToModelStrategy(final DataBindingContext databindingContext) {
 		return withPreSetValidation(eStructuralFeature, new TargetToModelStrategy());
 	}
 
+	/**
+	 *
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getModelToTargetStrategy(org.eclipse.core.databinding.DataBindingContext)
+	 */
 	@Override
 	public UpdateValueStrategy getModelToTargetStrategy(DataBindingContext databindingContext) {
 		return new EMFUpdateValueStrategy() {
@@ -164,6 +201,11 @@
 		return text;
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#setEditable(boolean)
+	 */
 	@Override
 	public void setEditable(boolean editable) {
 		if (getText() != null) {
@@ -171,11 +213,21 @@
 		}
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getImage(java.lang.Object)
+	 */
 	@Override
 	public Image getImage(Object value) {
 		return null;
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getMinWidth()
+	 */
 	@Override
 	public int getMinWidth() {
 		return 0;
diff --git a/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/spi/swt/table/StringCellEditor.java b/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/spi/swt/table/StringCellEditor.java
index 555cb73..5372a11 100644
--- a/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/spi/swt/table/StringCellEditor.java
+++ b/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/spi/swt/table/StringCellEditor.java
@@ -19,9 +19,8 @@
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
 import org.eclipse.emf.edit.command.SetCommand;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.databinding.viewers.CellEditorProperties;
-import org.eclipse.jface.viewers.CellEditor;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Composite;
@@ -64,7 +63,7 @@
 	}
 
 	@Override
-	public IValueProperty<CellEditor, String> getValueProperty() {
+	public IValueProperty getValueProperty() {
 		return CellEditorProperties.control().value(WidgetProperties.text(SWT.FocusOut));
 	}
 
diff --git a/bundles/org.eclipse.emf.ecp.emf2web.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.ecp.emf2web.ui/META-INF/MANIFEST.MF
index 2fe3169..6c7cac8 100644
--- a/bundles/org.eclipse.emf.ecp.emf2web.ui/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.ecp.emf2web.ui/META-INF/MANIFEST.MF
@@ -22,7 +22,6 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Automatic-Module-Name: org.eclipse.emf.ecp.emf2web.ui
 Import-Package: org.eclipse.jface.databinding.swt;version="0.0.0",
- org.eclipse.jface.databinding.swt.typed;version="0.0.0",
  org.eclipse.jface.databinding.wizard;version="0.0.0",
  org.eclipse.swt;version="0.0.0",
  org.eclipse.swt.widgets;version="0.0.0"
diff --git a/bundles/org.eclipse.emf.ecp.emf2web.ui/src/org/eclipse/emf/ecp/emf2web/ui/wizard/SelectLocationPage.java b/bundles/org.eclipse.emf.ecp.emf2web.ui/src/org/eclipse/emf/ecp/emf2web/ui/wizard/SelectLocationPage.java
index dba517d..030ff1a 100644
--- a/bundles/org.eclipse.emf.ecp.emf2web.ui/src/org/eclipse/emf/ecp/emf2web/ui/wizard/SelectLocationPage.java
+++ b/bundles/org.eclipse.emf.ecp.emf2web.ui/src/org/eclipse/emf/ecp/emf2web/ui/wizard/SelectLocationPage.java
@@ -17,7 +17,7 @@
 
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.UpdateValueStrategy;
-import org.eclipse.core.databinding.beans.typed.PojoProperties;
+import org.eclipse.core.databinding.beans.PojoProperties;
 import org.eclipse.core.databinding.conversion.IConverter;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.validation.IValidator;
@@ -32,7 +32,7 @@
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecp.emf2web.controller.xtend.GenerationInfo;
 import org.eclipse.emf.ecp.emf2web.ui.messages.Messages;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.databinding.wizard.WizardPageSupport;
 import org.eclipse.jface.fieldassist.ControlDecoration;
 import org.eclipse.jface.fieldassist.FieldDecoration;
@@ -194,7 +194,7 @@
 	 * Indicates if this page was already shown to the user.
 	 *
 	 * @return
-	 *         {@code true} if this page was already shown to the user, {@code false} if this page was never shown to
+	 * 		{@code true} if this page was already shown to the user, {@code false} if this page was never shown to
 	 *         the user.
 	 */
 	public boolean wasAlreadyVisible() {
@@ -277,29 +277,32 @@
 	/**
 	 * Validates the given location.
 	 */
-	private class LocationValidator implements IValidator<URI> {
+	private class LocationValidator implements IValidator {
 		@Override
-		public IStatus validate(URI uri) {
-			if (uri == null) {
+		public IStatus validate(Object value) {
+			if (value == null) {
 				requiredLocationDecoration.show();
 				return ValidationStatus.error(Messages.getString("SelectLocationPage.LocationError")); //$NON-NLS-1$
 			}
-			if (uri.isPlatform()) {
-				final IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-				final IResource resource = root.findMember(uri.toPlatformString(true));
-				if (IContainer.class.isInstance(resource)) {
-					requiredLocationDecoration.show();
-					return ValidationStatus.error(Messages.getString("SelectLocationPage.LocationDirectoryError")); //$NON-NLS-1$
-				}
-			} else {
-				if (uri.toFileString() == null) {
-					requiredLocationDecoration.show();
-					return ValidationStatus.error(Messages.getString("SelectLocationPage.LocationValidError")); //$NON-NLS-1$
-				}
-				final File file = new File(uri.toFileString());
-				if (file.isDirectory()) {
-					requiredLocationDecoration.show();
-					return ValidationStatus.error(Messages.getString("SelectLocationPage.LocationDirectoryError")); //$NON-NLS-1$
+			if (URI.class.isInstance(value)) {
+				final URI uri = URI.class.cast(value);
+				if (uri.isPlatform()) {
+					final IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+					final IResource resource = root.findMember(uri.toPlatformString(true));
+					if (IContainer.class.isInstance(resource)) {
+						requiredLocationDecoration.show();
+						return ValidationStatus.error(Messages.getString("SelectLocationPage.LocationDirectoryError")); //$NON-NLS-1$
+					}
+				} else {
+					if (uri.toFileString() == null) {
+						requiredLocationDecoration.show();
+						return ValidationStatus.error(Messages.getString("SelectLocationPage.LocationValidError")); //$NON-NLS-1$
+					}
+					final File file = new File(uri.toFileString());
+					if (file.isDirectory()) {
+						requiredLocationDecoration.show();
+						return ValidationStatus.error(Messages.getString("SelectLocationPage.LocationDirectoryError")); //$NON-NLS-1$
+					}
 				}
 			}
 			requiredLocationDecoration.hide();
@@ -310,7 +313,7 @@
 	/**
 	 * Converts a manually entered string to an {@link URI}.
 	 */
-	private class StringToURIConverter implements IConverter<String, URI> {
+	private class StringToURIConverter implements IConverter {
 		@Override
 		public Object getToType() {
 			return URI.class;
@@ -322,10 +325,11 @@
 		}
 
 		@Override
-		public URI convert(String path) {
-			if (path == null || "".equals(path)) { //$NON-NLS-1$
+		public Object convert(Object fromObject) {
+			if (fromObject == null || "".equals(fromObject)) { //$NON-NLS-1$
 				return null;
 			}
+			final String path = (String) fromObject;
 			if (path.startsWith("platform:") || path.startsWith("file:")) { //$NON-NLS-1$ //$NON-NLS-2$
 				return URI.createURI(path, false);
 			}
@@ -336,7 +340,7 @@
 	/**
 	 * Converts an URI to a String.
 	 */
-	private class URItoStringConverter implements IConverter<URI, String> {
+	private class URItoStringConverter implements IConverter {
 		@Override
 		public Object getToType() {
 			return String.class;
@@ -348,10 +352,11 @@
 		}
 
 		@Override
-		public String convert(URI path) {
-			if (path == null) {
+		public Object convert(Object fromObject) {
+			if (fromObject == null) {
 				return ""; //$NON-NLS-1$
 			}
+			final URI path = (URI) fromObject;
 			if (path.isFile()) {
 				return path.toFileString();
 			}
@@ -367,28 +372,25 @@
 	protected DataBindingContext initDataBindings() {
 		final DataBindingContext bindingContext = new DataBindingContext();
 
-		final IObservableValue<String> observeTextLocationTextObserveWidget = WidgetProperties.text(SWT.Modify)
+		final IObservableValue observeTextLocationTextObserveWidget = WidgetProperties.text(SWT.Modify)
 			.observe(locationText);
-		final IObservableValue<URI> locationGenerationInfoObserveValue = PojoProperties.value("location", URI.class) //$NON-NLS-1$
+		final IObservableValue locationGenerationInfoObserveValue = PojoProperties.value("location") //$NON-NLS-1$
 			.observe(generationInfo);
 		bindingContext.bindValue(
-			observeTextLocationTextObserveWidget, locationGenerationInfoObserveValue,
-			new UpdateValueStrategy<String, URI>()
+			observeTextLocationTextObserveWidget, locationGenerationInfoObserveValue, new UpdateValueStrategy()
 				.setConverter(new StringToURIConverter()).setAfterConvertValidator(new LocationValidator()),
-			new UpdateValueStrategy<URI, String>().setConverter(new URItoStringConverter()));
+			new UpdateValueStrategy().setConverter(new URItoStringConverter()));
 
-		final IObservableValue<String> observeTextGeneratedTextObserveWidget = WidgetProperties.text(SWT.Modify)
+		final IObservableValue observeTextGeneratedTextObserveWidget = WidgetProperties.text(SWT.Modify)
 			.observe(generatedText);
-		final IObservableValue<String> generatedStringGenerationInfoObserveValue = PojoProperties
-			.value("generatedString", String.class) //$NON-NLS-1$
+		final IObservableValue generatedStringGenerationInfoObserveValue = PojoProperties.value("generatedString") //$NON-NLS-1$
 			.observe(generationInfo);
 		bindingContext.bindValue(observeTextGeneratedTextObserveWidget, generatedStringGenerationInfoObserveValue, null,
 			null);
 
 		if (generationInfo.getWrapper() != null) {
-			final IObservableValue<Boolean> observeSelectionBtnWrapObserveWidget = WidgetProperties.buttonSelection()
-				.observe(btnWrap);
-			final IObservableValue<Boolean> wrapGenerationInfoObserveValue = PojoProperties.value("wrap", boolean.class) //$NON-NLS-1$
+			final IObservableValue observeSelectionBtnWrapObserveWidget = WidgetProperties.selection().observe(btnWrap);
+			final IObservableValue wrapGenerationInfoObserveValue = PojoProperties.value("wrap") //$NON-NLS-1$
 				.observe(generationInfo);
 			bindingContext.bindValue(observeSelectionBtnWrapObserveWidget, wrapGenerationInfoObserveValue, null, null);
 		}
diff --git a/bundles/org.eclipse.emf.ecp.emf2web/src/org/eclipse/emf/ecp/emf2web/util/AbstractReferenceHelper.java b/bundles/org.eclipse.emf.ecp.emf2web/src/org/eclipse/emf/ecp/emf2web/util/AbstractReferenceHelper.java
index 92b378c..3487f00 100644
--- a/bundles/org.eclipse.emf.ecp.emf2web/src/org/eclipse/emf/ecp/emf2web/util/AbstractReferenceHelper.java
+++ b/bundles/org.eclipse.emf.ecp.emf2web/src/org/eclipse/emf/ecp/emf2web/util/AbstractReferenceHelper.java
@@ -63,7 +63,7 @@
 	 * @param reference
 	 *            The {@link VDomainModelReference} for which the {@link EStructuralFeature} is to be determined.
 	 * @return
-	 *         The determined {@link EStructuralFeature}.
+	 * 		The determined {@link EStructuralFeature}.
 	 */
 	protected EStructuralFeature getEStructuralFeature(VDomainModelReference reference) {
 		try {
@@ -118,9 +118,9 @@
 				final ServiceReference<EMFFormsLabelProvider> serviceReference = bundleContext
 					.getServiceReference(EMFFormsLabelProvider.class);
 				final EMFFormsLabelProvider labelProvider = bundleContext.getService(serviceReference);
-				final IObservableValue<String> observableValue = labelProvider.getDisplayName(reference,
+				final IObservableValue<?> observableValue = labelProvider.getDisplayName(reference,
 					getRootEClass(reference));
-				final String result = observableValue.getValue();
+				final String result = (String) observableValue.getValue();
 				observableValue.dispose();
 				bundleContext.ungetService(serviceReference);
 				return result;
diff --git a/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/META-INF/MANIFEST.MF
index b1bd145..551e2cd 100644
--- a/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/META-INF/MANIFEST.MF
@@ -52,7 +52,6 @@
  org.eclipse.emfforms.spi.common.report;version="[1.22.0,1.23.0)",
  org.eclipse.emfforms.spi.core.services.databinding.emf;version="[1.22.0,1.23.0)",
  org.eclipse.jface.databinding.swt;version="0.0.0",
- org.eclipse.jface.databinding.swt.typed;version="0.0.0",
  org.eclipse.jface.databinding.viewers;version="0.0.0",
  org.eclipse.jface.resource;version="0.0.0",
  org.eclipse.swt;version="0.0.0",
diff --git a/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/Activator.java b/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/Activator.java
index b67a2ac..bf99544 100644
--- a/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/Activator.java
+++ b/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/Activator.java
@@ -145,15 +145,23 @@
 	 * @return the {@link ImageData}
 	 */
 	public static ImageData getImageData(URL url) {
-		return ImageDescriptor.createFromURL(url).getImageData(100);
+		return ImageDescriptor.createFromURL(url).getImageData();
 	}
 
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
 	@Override
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
 		plugin = this;
 	}
 
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
 	@Override
 	public void stop(BundleContext context) throws Exception {
 		for (final ImageDescriptorToImage descriptorToImage : imageRegistry.values()) {
diff --git a/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/ControlRootEClassControl2SWTRenderer.java b/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/ControlRootEClassControl2SWTRenderer.java
index 95a824e..1f488b3 100644
--- a/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/ControlRootEClassControl2SWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/ControlRootEClassControl2SWTRenderer.java
@@ -36,11 +36,10 @@
 import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedReport;
 import org.eclipse.emfforms.spi.core.services.databinding.EMFFormsDatabinding;
 import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
@@ -86,7 +85,7 @@
 	protected Binding[] createBindings(Control control) throws DatabindingFailedException {
 
 		final Binding[] bindings = new Binding[3];
-		final IObservableValue<String> value = WidgetProperties.text().observe(label);
+		final IObservableValue value = WidgetProperties.text().observe(label);
 
 		bindings[0] = getDataBindingContext().bindValue(value, getModelValue(),
 			withPreSetValidation(new UpdateValueStrategy() {
@@ -107,7 +106,7 @@
 					return getText(value);
 				}
 			});
-		final IObservableValue<String> tooltipValue = WidgetProperties.tooltipText().observe(label);
+		final IObservableValue tooltipValue = WidgetProperties.tooltipText().observe(label);
 		bindings[1] = getDataBindingContext().bindValue(tooltipValue, getModelValue(),
 			withPreSetValidation(new UpdateValueStrategy() {
 
@@ -127,7 +126,7 @@
 				}
 			});
 
-		final IObservableValue<Image> imageValue = WidgetProperties.image().observe(imageLabel);
+		final IObservableValue imageValue = WidgetProperties.image().observe(imageLabel);
 		bindings[2] = getDataBindingContext().bindValue(imageValue, getModelValue(),
 			withPreSetValidation(new UpdateValueStrategy() {
 
diff --git a/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/DomainModelReferenceControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/DomainModelReferenceControlSWTRenderer.java
index 73a23f9..110f85d 100644
--- a/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/DomainModelReferenceControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/DomainModelReferenceControlSWTRenderer.java
@@ -74,7 +74,7 @@
 import org.eclipse.emfforms.spi.localization.LocalizationServiceHelper;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.databinding.swt.ISWTObservableValue;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
 import org.eclipse.jface.viewers.TreeViewer;
@@ -84,7 +84,6 @@
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
@@ -143,7 +142,7 @@
 	protected Binding[] createBindings(Control control) throws DatabindingFailedException {
 
 		final Binding[] bindings = new Binding[3];
-		final IObservableValue<String> value = WidgetProperties.text().observe(setLabel);
+		final IObservableValue value = WidgetProperties.text().observe(setLabel);
 
 		bindings[0] = getDataBindingContext().bindValue(value, getModelValue(),
 			withPreSetValidation(new UpdateValueStrategy() {
@@ -165,7 +164,7 @@
 				}
 			});
 
-		final IObservableValue<Image> imageValue = WidgetProperties.image().observe(imageLabel);
+		final IObservableValue imageValue = WidgetProperties.image().observe(imageLabel);
 		bindings[1] = getDataBindingContext().bindValue(imageValue, getModelValue(),
 			withPreSetValidation(new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER)),
 			new UpdateValueStrategy() {
@@ -175,7 +174,7 @@
 				}
 			});
 
-		final ISWTObservableValue<String> setLabelTooltip = WidgetProperties.tooltipText().observe(setLabel);
+		final ISWTObservableValue setLabelTooltip = WidgetProperties.tooltipText().observe(setLabel);
 		bindings[2] = getDataBindingContext().bindValue(
 			setLabelTooltip,
 			getModelValue(),
diff --git a/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/EReferenceLabelControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/EReferenceLabelControlSWTRenderer.java
index 0c6d91d..beabf38 100644
--- a/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/EReferenceLabelControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/EReferenceLabelControlSWTRenderer.java
@@ -33,11 +33,10 @@
 import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedReport;
 import org.eclipse.emfforms.spi.core.services.databinding.EMFFormsDatabinding;
 import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
@@ -90,11 +89,17 @@
 	private Label imageLabel;
 	private ECPModelElementChangeListener modelElementChangeListener;
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer#createBindings(org.eclipse.swt.widgets.Control,
+	 *      org.eclipse.emf.ecore.EStructuralFeature.Setting)
+	 */
 	@Override
 	protected Binding[] createBindings(Control control) throws DatabindingFailedException {
 
 		final Binding[] bindings = new Binding[3];
-		final IObservableValue<String> value = WidgetProperties.text().observe(label);
+		final IObservableValue value = WidgetProperties.text().observe(label);
 
 		bindings[0] = getDataBindingContext().bindValue(value, getModelValue(),
 			withPreSetValidation(new UpdateValueStrategy() {
@@ -115,7 +120,7 @@
 					return getText(value);
 				}
 			});
-		final IObservableValue<String> tooltipValue = WidgetProperties.tooltipText().observe(label);
+		final IObservableValue tooltipValue = WidgetProperties.tooltipText().observe(label);
 		bindings[1] = getDataBindingContext().bindValue(tooltipValue, getModelValue(),
 			withPreSetValidation(new UpdateValueStrategy() {
 
@@ -135,7 +140,7 @@
 				}
 			});
 
-		final IObservableValue<Image> imageValue = WidgetProperties.image().observe(imageLabel);
+		final IObservableValue imageValue = WidgetProperties.image().observe(imageLabel);
 		bindings[2] = getDataBindingContext().bindValue(imageValue, getModelValue(),
 			withPreSetValidation(new UpdateValueStrategy() {
 
@@ -164,7 +169,7 @@
 
 	/**
 	 * Computes the label text for the referenced object.
-	 *
+	 * 
 	 * @param value The referenced object
 	 * @return the label text to display
 	 */
@@ -204,6 +209,12 @@
 
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer#createSWTControl(org.eclipse.swt.widgets.Composite,
+	 *      org.eclipse.emf.ecore.EStructuralFeature.Setting)
+	 */
 	@Override
 	protected Control createSWTControl(Composite parent2) throws DatabindingFailedException {
 		final Composite composite2 = new Composite(parent2, SWT.NONE);
@@ -232,6 +243,11 @@
 		return composite2;
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTRenderer#getUnsetText()
+	 */
 	@Override
 	protected String getUnsetText() {
 		return "Not set"; //$NON-NLS-1$
diff --git a/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/EditableEReferenceLabelControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/EditableEReferenceLabelControlSWTRenderer.java
index b001846..a65ef96 100644
--- a/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/EditableEReferenceLabelControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/EditableEReferenceLabelControlSWTRenderer.java
@@ -27,7 +27,7 @@
 import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
 import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
 import org.eclipse.emfforms.spi.core.services.label.NoLabelFoundException;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.dialogs.IDialogLabelKeys;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.layout.GridLayoutFactory;
@@ -59,6 +59,11 @@
 		viewModelDBC = new EMFDataBindingContext();
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.internal.editor.controls.ControlRootEClassControl2SWTRenderer#createSWTControl(org.eclipse.swt.widgets.Composite)
+	 */
 	@Override
 	protected Control createSWTControl(final Composite parent2) throws DatabindingFailedException {
 		final Composite composite = (Composite) super.createSWTControl(parent2);
@@ -68,28 +73,37 @@
 		final EMFFormsLabelProvider labelProvider = getEMFFormsLabelProvider();
 		final Button selectClass = new Button(composite, SWT.PUSH);
 		try {
-			final IObservableValue<String> labelText = labelProvider.getDisplayName(
-				getVElement().getDomainModelReference(),
+			final IObservableValue labelText = labelProvider.getDisplayName(getVElement().getDomainModelReference(),
 				getViewModelContext().getDomainModel());
-			final IObservableValue<String> tooltip = labelProvider.getDescription(
-				getVElement().getDomainModelReference(),
+			final IObservableValue tooltip = labelProvider.getDescription(getVElement().getDomainModelReference(),
 				getViewModelContext().getDomainModel());
 
 			viewModelDBC.bindValue(WidgetProperties.text().observe(selectClass), labelText, null,
-				new UpdateValueStrategy<String, String>() {
+				new UpdateValueStrategy() {
+
+					/**
+					 * {@inheritDoc}
+					 *
+					 * @see org.eclipse.core.databinding.UpdateValueStrategy#convert(java.lang.Object)
+					 */
 					@Override
-					public String convert(String value) {
-						final String result = super.convert(value);
+					public Object convert(Object value) {
+						final String result = (String) super.convert(value);
 						return "Link " + result; //$NON-NLS-1$
 					}
 
 				});
 			viewModelDBC.bindValue(WidgetProperties.tooltipText().observe(selectClass), tooltip, null,
-				new UpdateValueStrategy<String, String>() {
+				new UpdateValueStrategy() {
 
+					/**
+					 * {@inheritDoc}
+					 *
+					 * @see org.eclipse.core.databinding.UpdateValueStrategy#convert(java.lang.Object)
+					 */
 					@Override
-					public String convert(String value) {
-						final String result = super.convert(value);
+					public Object convert(Object value) {
+						final String result = (String) super.convert(value);
 						return "Link " + result; //$NON-NLS-1$
 					}
 
@@ -102,6 +116,11 @@
 		}
 		selectClass.addSelectionListener(new SelectionAdapter() {
 
+			/**
+			 * {@inheritDoc}
+			 *
+			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+			 */
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				super.widgetSelected(e);
@@ -122,6 +141,11 @@
 
 		unset.addSelectionListener(new SelectionAdapter() {
 
+			/**
+			 * {@inheritDoc}
+			 *
+			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+			 */
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				super.widgetSelected(e);
@@ -162,6 +186,11 @@
 		}.execute();
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.internal.editor.controls.EReferenceLabelControlSWTRenderer#dispose()
+	 */
 	@Override
 	public void dispose() {
 		viewModelDBC.dispose();
diff --git a/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/ExpectedValueControlRenderer.java b/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/ExpectedValueControlRenderer.java
index e411da5..7a87b6e 100644
--- a/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/ExpectedValueControlRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/ExpectedValueControlRenderer.java
@@ -42,7 +42,6 @@
 import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedReport;
 import org.eclipse.emfforms.spi.core.services.databinding.EMFFormsDatabinding;
 import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.dialogs.InputDialog;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.layout.GridDataFactory;
@@ -127,13 +126,19 @@
 		return text;
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer#createBindings(org.eclipse.swt.widgets.Control,
+	 *      org.eclipse.emf.ecore.EStructuralFeature.Setting)
+	 */
 	@Override
 	protected Binding[] createBindings(Control control) throws DatabindingFailedException {
 		final Label text = (Label) control;
 		final TargetToModelUpdateStrategy targetToModelUpdateStrategy = new TargetToModelUpdateStrategy();
 		final ModelToTargetUpdateStrategy modelToTargetUpdateStrategy = new ModelToTargetUpdateStrategy();
 
-		final IObservableValue<String> value = WidgetProperties.text().observe(text);
+		final IObservableValue value = org.eclipse.jface.databinding.swt.WidgetProperties.text().observe(text);
 
 		final Binding binding = getDataBindingContext().bindValue(value, getModelValue(),
 			withPreSetValidation(targetToModelUpdateStrategy), modelToTargetUpdateStrategy);
@@ -152,7 +157,7 @@
 	 */
 	protected Binding createTooltipBinding(Control text, IObservableValue modelValue,
 		DataBindingContext dataBindingContext, UpdateValueStrategy targetToModel, UpdateValueStrategy modelToTarget) {
-		final IObservableValue<String> toolTip = WidgetProperties.tooltipText().observe(text);
+		final IObservableValue toolTip = org.eclipse.jface.databinding.swt.WidgetProperties.tooltipText().observe(text);
 		return dataBindingContext.bindValue(toolTip, modelValue, targetToModel, modelToTarget);
 	}
 
@@ -317,6 +322,11 @@
 		return result;
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTRenderer#getUnsetText()
+	 */
 	@Override
 	protected String getUnsetText() {
 		// TODO Auto-generated method stub
@@ -369,6 +379,9 @@
 		public TargetToModelUpdateStrategy() {
 		}
 
+		/**
+		 * {@inheritDoc}
+		 */
 		@Override
 		public Object convert(Object value) {
 			return value;
diff --git a/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/TableColumnsDMRTableControl.java b/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/TableColumnsDMRTableControl.java
index 0a39bb4..bf3363c 100644
--- a/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/TableColumnsDMRTableControl.java
+++ b/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/TableColumnsDMRTableControl.java
@@ -75,7 +75,7 @@
 import org.eclipse.emfforms.spi.localization.LocalizationServiceHelper;
 import org.eclipse.emfforms.spi.swt.core.layout.GridDescriptionFactory;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridDescription;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
@@ -134,6 +134,11 @@
 	private TableViewer viewer;
 	private SWTGridDescription rendererGridDescription;
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTRenderer#createControl(org.eclipse.swt.widgets.Composite)
+	 */
 	// BEGIN COMPLEX CODE
 	@Override
 	protected Control createControl(final Composite parent) throws DatabindingFailedException {
@@ -191,9 +196,9 @@
 		final TableColumn tableColumn = column.getColumn();
 		final EMFFormsLabelProvider emfFormsLabelProvider = getEMFFormsLabelProvider();// TODO
 		try {
-			final IObservableValue<String> labelText = emfFormsLabelProvider.getDisplayName(
+			final IObservableValue labelText = emfFormsLabelProvider.getDisplayName(
 				getVElement().getDomainModelReference(), getViewModelContext().getDomainModel());
-			final IObservableValue<String> tooltip = emfFormsLabelProvider.getDescription(
+			final IObservableValue tooltip = emfFormsLabelProvider.getDescription(
 				getVElement().getDomainModelReference(), getViewModelContext().getDomainModel());
 			viewModelDBC.bindValue(WidgetProperties.text().observe(tableColumn), labelText);
 			viewModelDBC.bindValue(WidgetProperties.tooltipText().observe(tableColumn), tooltip);
@@ -240,6 +245,11 @@
 		viewer.addDropSupport(dndOperations, transfers, editingDomainViewerDropAdapter);
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.AbstractControlSWTRenderer#postInit()
+	 */
 	@Override
 	protected void postInit() {
 		super.postInit();
@@ -249,6 +259,11 @@
 		labelProvider = new TableColumnsLabelProvider(composedAdapterFactory);
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTRenderer#dispose()
+	 */
 	@Override
 	protected void dispose() {
 		labelProvider.dispose();
@@ -258,11 +273,21 @@
 		super.dispose();
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTRenderer#getUnsetText()
+	 */
 	@Override
 	protected String getUnsetText() {
 		return "No columns set"; //$NON-NLS-1$
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.AbstractControlSWTRenderer#rootDomainModelChanged()
+	 */
 	@Override
 	protected void rootDomainModelChanged() throws DatabindingFailedException {
 		final IObservableList oldList = (IObservableList) viewer.getInput();
@@ -370,6 +395,11 @@
 			this.viewer = viewer;
 		}
 
+		/**
+		 * {@inheritDoc}
+		 *
+		 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+		 */
 		@Override
 		public void widgetSelected(SelectionEvent e) {
 			super.widgetSelected(e);
@@ -398,6 +428,11 @@
 			this.viewer = viewer;
 		}
 
+		/**
+		 * {@inheritDoc}
+		 *
+		 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+		 */
 		@Override
 		public void widgetSelected(SelectionEvent e) {
 			super.widgetSelected(e);
@@ -457,6 +492,11 @@
 	private final class SortSelectionAdapter extends SelectionAdapter {
 		private boolean down;
 
+		/**
+		 * {@inheritDoc}
+		 *
+		 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+		 */
 		@Override
 		public void widgetSelected(SelectionEvent e) {
 			super.widgetSelected(e);
diff --git a/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/TableDetailViewControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/TableDetailViewControlSWTRenderer.java
index 93dddc3..7f716ea 100644
--- a/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/TableDetailViewControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.ui.view.editor.controls/src/org/eclipse/emf/ecp/view/internal/editor/controls/TableDetailViewControlSWTRenderer.java
@@ -49,14 +49,13 @@
 import org.eclipse.emfforms.spi.core.services.editsupport.EMFFormsEditSupport;
 import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
 import org.eclipse.jface.action.Action;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
@@ -169,7 +168,7 @@
 	@Override
 	protected Binding[] createBindings(Control control) throws DatabindingFailedException {
 		final Binding[] bindings = new Binding[3];
-		final IObservableValue<String> value = WidgetProperties.text().observe(label);
+		final IObservableValue value = WidgetProperties.text().observe(label);
 
 		bindings[0] = getDataBindingContext().bindValue(value, getModelValue(),
 			withPreSetValidation(new UpdateValueStrategy() {
@@ -190,7 +189,7 @@
 				}
 			});
 
-		final IObservableValue<String> tooltipValue = WidgetProperties.tooltipText().observe(label);
+		final IObservableValue tooltipValue = WidgetProperties.tooltipText().observe(label);
 		bindings[1] = getDataBindingContext().bindValue(tooltipValue, getModelValue(),
 			withPreSetValidation(new UpdateValueStrategy() {
 
@@ -210,7 +209,7 @@
 				}
 			});
 
-		final IObservableValue<Image> imageValue = WidgetProperties.image().observe(imageLabel);
+		final IObservableValue imageValue = WidgetProperties.image().observe(imageLabel);
 		bindings[2] = getDataBindingContext().bindValue(imageValue, getModelValue(),
 			withPreSetValidation(new UpdateValueStrategy() {
 
@@ -245,6 +244,11 @@
 		return Activator.getImage((URL) adapterFactoryItemDelegator.getImage(value));
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer#createSWTControl(org.eclipse.swt.widgets.Composite)
+	 */
 	@Override
 	protected Control createSWTControl(Composite parent) throws DatabindingFailedException {
 		final IObservableValue observableValue = getEMFFormsDatabinding()
@@ -320,6 +324,11 @@
 		return selectButton;
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTRenderer#dispose()
+	 */
 	@Override
 	protected void dispose() {
 		composedAdapterFactory.dispose();
@@ -331,6 +340,11 @@
 		super.dispose();
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTRenderer#getUnsetText()
+	 */
 	@Override
 	protected String getUnsetText() {
 		return ""; //$NON-NLS-1$
diff --git a/bundles/org.eclipse.emf.ecp.view.categorization.swt/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.ecp.view.categorization.swt/META-INF/MANIFEST.MF
index f7cc370..ffd75f3 100644
--- a/bundles/org.eclipse.emf.ecp.view.categorization.swt/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.ecp.view.categorization.swt/META-INF/MANIFEST.MF
@@ -28,7 +28,6 @@
  org.eclipse.emfforms.spi.common.report;version="[1.22.0,1.23.0)",
  org.eclipse.emfforms.spi.core.services.databinding;version="[1.22.0,1.23.0)",
  org.eclipse.jface.databinding.swt;version="0.0.0",
- org.eclipse.jface.databinding.swt.typed;version="0.0.0",
  org.eclipse.jface.layout;version="0.0.0",
  org.eclipse.jface.resource;version="0.0.0",
  org.eclipse.jface.viewers;version="0.0.0",
diff --git a/bundles/org.eclipse.emf.ecp.view.categorization.swt/src/org/eclipse/emf/ecp/view/spi/categorization/swt/AbstractSWTTabRenderer.java b/bundles/org.eclipse.emf.ecp.view.categorization.swt/src/org/eclipse/emf/ecp/view/spi/categorization/swt/AbstractSWTTabRenderer.java
index a4dd9e8..cea82c1 100644
--- a/bundles/org.eclipse.emf.ecp.view.categorization.swt/src/org/eclipse/emf/ecp/view/spi/categorization/swt/AbstractSWTTabRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.categorization.swt/src/org/eclipse/emf/ecp/view/spi/categorization/swt/AbstractSWTTabRenderer.java
@@ -48,7 +48,7 @@
 import org.eclipse.emfforms.spi.swt.core.layout.GridDescriptionFactory;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridDescription;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
 import org.eclipse.swt.SWT;
@@ -147,18 +147,18 @@
 			itemToCompositeMap.put(item, composite);
 
 			final EditingDomain editingDomain = AdapterFactoryEditingDomain.getEditingDomainFor(categorization);
-			final IObservableValue<String> modelLabelValue = EMFEditObservables.observeValue(
+			final IObservableValue modelLabelValue = EMFEditObservables.observeValue(
 				editingDomain,
 				categorization,
 				VViewPackage.eINSTANCE.getElement_Label());
-			final IObservableValue<String> targetLabelValue = WidgetProperties.text().observe(item);
+			final IObservableValue targetLabelValue = WidgetProperties.text().observe(item);
 			dataBindingContext.bindValue(targetLabelValue, modelLabelValue);
 
-			final IObservableValue<String> modelTooltipValue = EMFEditObservables.observeValue(
+			final IObservableValue modelTooltipValue = EMFEditObservables.observeValue(
 				editingDomain,
 				categorization,
 				VViewPackage.eINSTANCE.getHasTooltip_Tooltip());
-			final IObservableValue<String> targetTooltipValue = WidgetProperties.tooltipText().observe(item);
+			final IObservableValue targetTooltipValue = WidgetProperties.tooltipText().observe(item);
 			dataBindingContext.bindValue(targetTooltipValue, modelTooltipValue);
 
 			if (!renderLazy()) {
diff --git a/bundles/org.eclipse.emf.ecp.view.categorization.swt/src/org/eclipse/emf/ecp/view/spi/categorization/swt/SWTCategorizationRenderer.java b/bundles/org.eclipse.emf.ecp.view.categorization.swt/src/org/eclipse/emf/ecp/view/spi/categorization/swt/SWTCategorizationRenderer.java
index 265a882..8f62918 100644
--- a/bundles/org.eclipse.emf.ecp.view.categorization.swt/src/org/eclipse/emf/ecp/view/spi/categorization/swt/SWTCategorizationRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.categorization.swt/src/org/eclipse/emf/ecp/view/spi/categorization/swt/SWTCategorizationRenderer.java
@@ -35,7 +35,7 @@
 import org.eclipse.emfforms.spi.swt.core.layout.GridDescriptionFactory;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridDescription;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
@@ -120,18 +120,18 @@
 		whatToDoLbl.setData(CUSTOM_VARIANT, "org_eclipse_emf_ecp_categorization_message"); //$NON-NLS-1$
 
 		final EditingDomain editingDomain = AdapterFactoryEditingDomain.getEditingDomainFor(getVElement());
-		final IObservableValue<String> modelLabelValue = EMFEditObservables.observeValue(
+		final IObservableValue modelLabelValue = EMFEditObservables.observeValue(
 			editingDomain,
 			getVElement(),
 			VViewPackage.eINSTANCE.getElement_Label());
-		final IObservableValue<String> targetLabelValue = WidgetProperties.text().observe(headingLbl);
+		final IObservableValue targetLabelValue = WidgetProperties.text().observe(headingLbl);
 		dataBindingContext.bindValue(targetLabelValue, modelLabelValue);
 
-		final IObservableValue<String> modelTooltipValue = EMFEditObservables.observeValue(
+		final IObservableValue modelTooltipValue = EMFEditObservables.observeValue(
 			editingDomain,
 			getVElement(),
 			VViewPackage.eINSTANCE.getHasTooltip_Tooltip());
-		final IObservableValue<String> targetTooltipValue = WidgetProperties.tooltipText().observe(headingLbl);
+		final IObservableValue targetTooltipValue = WidgetProperties.tooltipText().observe(headingLbl);
 
 		dataBindingContext.bindValue(targetTooltipValue, modelTooltipValue);
 
diff --git a/bundles/org.eclipse.emf.ecp.view.compoundcontrol.swt/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.ecp.view.compoundcontrol.swt/META-INF/MANIFEST.MF
index e1d2c3f..eb8e992 100644
--- a/bundles/org.eclipse.emf.ecp.view.compoundcontrol.swt/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.ecp.view.compoundcontrol.swt/META-INF/MANIFEST.MF
@@ -22,7 +22,6 @@
 Import-Package: javax.inject;version="1.0.0",
  org.eclipse.emfforms.spi.common.report;version="[1.22.0,1.23.0)",
  org.eclipse.jface.databinding.swt;version="0.0.0",
- org.eclipse.jface.databinding.swt.typed;version="0.0.0",
  org.eclipse.jface.layout;version="0.0.0",
  org.eclipse.swt;version="0.0.0",
  org.eclipse.swt.graphics;version="0.0.0",
diff --git a/bundles/org.eclipse.emf.ecp.view.compoundcontrol.swt/src/org/eclipse/emf/ecp/view/spi/compoundcontrol/swt/CompoundControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.compoundcontrol.swt/src/org/eclipse/emf/ecp/view/spi/compoundcontrol/swt/CompoundControlSWTRenderer.java
index 2293d08..5f0ebdc 100644
--- a/bundles/org.eclipse.emf.ecp.view.compoundcontrol.swt/src/org/eclipse/emf/ecp/view/spi/compoundcontrol/swt/CompoundControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.compoundcontrol.swt/src/org/eclipse/emf/ecp/view/spi/compoundcontrol/swt/CompoundControlSWTRenderer.java
@@ -60,7 +60,7 @@
 import org.eclipse.emfforms.spi.swt.core.layout.GridDescriptionFactory;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridDescription;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
@@ -246,20 +246,20 @@
 			.setElementIdDataWithSubId(label, getVElement(), "control_label", getViewModelContext()); //$NON-NLS-1$
 		label.setBackground(parent.getBackground());
 
-		final IObservableValue<String> textObservable = WidgetProperties.text().observe(label);
-		final Map<IObservableValue<String>, Map.Entry<VControl, EStructuralFeature>> displayNameObservables = getLabelDisplayNameObservables();
+		final IObservableValue textObservable = WidgetProperties.text().observe(label);
+		final Map<IObservableValue, Map.Entry<VControl, EStructuralFeature>> displayNameObservables = getLabelDisplayNameObservables();
 
-		for (final IObservableValue<String> displayNameObservable : displayNameObservables.keySet()) {
+		for (final IObservableValue displayNameObservable : displayNameObservables.keySet()) {
 			getDataBindingContext().bindValue(
 				textObservable,
 				displayNameObservable,
-				new UpdateValueStrategy<String, String>(UpdateValueStrategy.POLICY_NEVER),
+				new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER),
 				new CompoundControlDisplayNameUpdateValueStrategy(displayNameObservables));
 		}
 
-		final IObservableValue<String> tooltipObservable = WidgetProperties.tooltipText().observe(label);
-		final List<IObservableValue<String>> labelDescriptionObservables = getLabelDescriptionObservables();
-		for (final IObservableValue<String> descriptionObservable : labelDescriptionObservables) {
+		final IObservableValue tooltipObservable = WidgetProperties.tooltipText().observe(label);
+		final List<IObservableValue> labelDescriptionObservables = getLabelDescriptionObservables();
+		for (final IObservableValue descriptionObservable : labelDescriptionObservables) {
 			getDataBindingContext().bindValue(
 				tooltipObservable,
 				descriptionObservable,
@@ -283,12 +283,12 @@
 		return label;
 	}
 
-	private Map<IObservableValue<String>, Map.Entry<VControl, EStructuralFeature>> getLabelDisplayNameObservables() {
-		final LinkedHashMap<IObservableValue<String>, Entry<VControl, EStructuralFeature>> displayNames = new LinkedHashMap<IObservableValue<String>, Map.Entry<VControl, EStructuralFeature>>();
+	private Map<IObservableValue, Map.Entry<VControl, EStructuralFeature>> getLabelDisplayNameObservables() {
+		final LinkedHashMap<IObservableValue, Entry<VControl, EStructuralFeature>> displayNames = new LinkedHashMap<IObservableValue, Map.Entry<VControl, EStructuralFeature>>();
 
 		for (final VControl control : getVElement().getControls()) {
 			try {
-				final IObservableValue<String> displayName = labelProvider
+				final IObservableValue displayName = labelProvider
 					.getDisplayName(control.getDomainModelReference(), getViewModelContext().getDomainModel());
 
 				final EStructuralFeature feature = getDatabindingService()
@@ -307,8 +307,8 @@
 		return displayNames;
 	}
 
-	private List<IObservableValue<String>> getLabelDescriptionObservables() {
-		final List<IObservableValue<String>> labelDescriptionObservables = new ArrayList<IObservableValue<String>>();
+	private List<IObservableValue> getLabelDescriptionObservables() {
+		final List<IObservableValue> labelDescriptionObservables = new ArrayList<IObservableValue>();
 		for (final VControl control : getVElement().getControls()) {
 			try {
 				labelDescriptionObservables.add(labelProvider.getDescription(control.getDomainModelReference(),
@@ -551,13 +551,13 @@
 	 *
 	 */
 	private final class CompoundControlDisplayNameUpdateValueStrategy extends EMFUpdateValueStrategy {
-		private final Map<IObservableValue<String>, Entry<VControl, EStructuralFeature>> displayNameObservables;
+		private final Map<IObservableValue, Entry<VControl, EStructuralFeature>> displayNameObservables;
 
 		/**
 		 * @param displayNameObservables
 		 */
 		private CompoundControlDisplayNameUpdateValueStrategy(
-			Map<IObservableValue<String>, Entry<VControl, EStructuralFeature>> displayNameObservables) {
+			Map<IObservableValue, Entry<VControl, EStructuralFeature>> displayNameObservables) {
 			this.displayNameObservables = displayNameObservables;
 		}
 
@@ -565,7 +565,7 @@
 		public Object convert(Object value) {
 			final StringBuilder stringBuilder = new StringBuilder();
 
-			for (final Entry<IObservableValue<String>, Map.Entry<VControl, EStructuralFeature>> obs : displayNameObservables
+			for (final Entry<IObservableValue, Map.Entry<VControl, EStructuralFeature>> obs : displayNameObservables
 				.entrySet()) {
 				if (stringBuilder.length() > 0) {
 					stringBuilder.append(SEPARATOR);
diff --git a/bundles/org.eclipse.emf.ecp.view.control.multireference/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.ecp.view.control.multireference/META-INF/MANIFEST.MF
index d1261de..93eaa96 100644
--- a/bundles/org.eclipse.emf.ecp.view.control.multireference/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.ecp.view.control.multireference/META-INF/MANIFEST.MF
@@ -32,7 +32,6 @@
  org.eclipse.emfforms.spi.common.report;version="[1.22.0,1.23.0)",
  org.eclipse.emfforms.spi.swt.core;version="[1.22.0,1.23.0)",
  org.eclipse.jface.databinding.swt;version="0.0.0",
- org.eclipse.jface.databinding.swt.typed;version="0.0.0",
  org.eclipse.jface.databinding.viewers;version="0.0.0",
  org.eclipse.jface.layout;version="0.0.0",
  org.eclipse.jface.viewers;version="0.0.0",
diff --git a/bundles/org.eclipse.emf.ecp.view.control.multireference/src/org/eclipse/emf/ecp/view/internal/control/multireference/MultiReferenceSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.control.multireference/src/org/eclipse/emf/ecp/view/internal/control/multireference/MultiReferenceSWTRenderer.java
index b7bc6c3..ffcd9d3 100644
--- a/bundles/org.eclipse.emf.ecp.view.control.multireference/src/org/eclipse/emf/ecp/view/internal/control/multireference/MultiReferenceSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.control.multireference/src/org/eclipse/emf/ecp/view/internal/control/multireference/MultiReferenceSWTRenderer.java
@@ -78,7 +78,7 @@
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridDescription;
 import org.eclipse.emfforms.spi.swt.core.ui.ObjectViewerComparator;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
@@ -968,9 +968,8 @@
 			.setStyle(SWT.NONE)
 			.build(tableViewer);
 
-		final IObservableValue<String> textObservableValue = WidgetProperties.text().observe(column.getColumn());
-		final IObservableValue<String> tooltipObservableValue = WidgetProperties.tooltipText()
-			.observe(column.getColumn());
+		final IObservableValue textObservableValue = WidgetProperties.text().observe(column.getColumn());
+		final IObservableValue tooltipObservableValue = WidgetProperties.tooltipText().observe(column.getColumn());
 		try {
 			viewModelDBC.bindValue(textObservableValue,
 				labelService.getDisplayName(getVElement().getDomainModelReference(), getViewModelContext()
diff --git a/bundles/org.eclipse.emf.ecp.view.core.swt/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.ecp.view.core.swt/META-INF/MANIFEST.MF
index 5d11810..52e2a0e 100644
--- a/bundles/org.eclipse.emf.ecp.view.core.swt/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.ecp.view.core.swt/META-INF/MANIFEST.MF
@@ -32,9 +32,7 @@
  org.eclipse.emfforms.spi.common.locale;version="[1.22.0,1.23.0)",
  org.eclipse.emfforms.spi.common.report;version="[1.22.0,1.23.0)",
  org.eclipse.jface.databinding.swt;version="0.0.0",
- org.eclipse.jface.databinding.swt.typed;version="0.0.0",
  org.eclipse.jface.databinding.viewers;version="0.0.0",
- org.eclipse.jface.databinding.viewers.typed;version="0.0.0",
  org.eclipse.jface.dialogs;version="0.0.0",
  org.eclipse.jface.layout;version="0.0.0",
  org.eclipse.jface.resource;version="0.0.0",
diff --git a/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/BooleanControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/BooleanControlSWTRenderer.java
index 3ed84e0..584c94a 100644
--- a/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/BooleanControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/BooleanControlSWTRenderer.java
@@ -28,7 +28,7 @@
 import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
 import org.eclipse.emfforms.spi.localization.LocalizationServiceHelper;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
@@ -58,6 +58,11 @@
 		super(vElement, viewContext, reportService, emfFormsDatabinding, emfFormsLabelProvider, vtViewTemplateProvider);
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTRenderer#createControlCell(int)
+	 */
 	@Override
 	protected SWTGridCell createControlCell(int column) {
 		// checkbox button representing Boolean value can not grow
@@ -69,8 +74,7 @@
 
 	@Override
 	protected Binding[] createBindings(Control control) throws DatabindingFailedException {
-		final Binding binding = getDataBindingContext().bindValue(
-			WidgetProperties.buttonSelection().observe((Button) control),
+		final Binding binding = getDataBindingContext().bindValue(WidgetProperties.selection().observe(control),
 			getModelValue(), withPreSetValidation(new UpdateValueStrategy()), null);
 		return new Binding[] { binding };
 	}
diff --git a/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/DateTimeControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/DateTimeControlSWTRenderer.java
index c676152..3670630 100644
--- a/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/DateTimeControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/DateTimeControlSWTRenderer.java
@@ -52,7 +52,7 @@
 import org.eclipse.emfforms.spi.localization.EMFFormsLocalizationService;
 import org.eclipse.emfforms.spi.swt.core.SWTDataElementIdHelper;
 import org.eclipse.jface.databinding.swt.ISWTObservableValue;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.dialogs.IDialogLabelKeys;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
@@ -152,8 +152,8 @@
 
 	@Override
 	protected Binding[] createBindings(Control control) throws DatabindingFailedException {
-		final ISWTObservableValue<Date> dateObserver = WidgetProperties.dateTimeSelection().observe(dateWidget);
-		final ISWTObservableValue<Date> timeObserver = WidgetProperties.dateTimeSelection().observe(timeWidget);
+		final ISWTObservableValue dateObserver = WidgetProperties.selection().observe(dateWidget);
+		final ISWTObservableValue timeObserver = WidgetProperties.selection().observe(timeWidget);
 		final IObservableValue target = new DateAndTimeObservableValue(dateObserver, timeObserver);
 		final Binding binding = getDataBindingContext().bindValue(target, getModelValue(),
 			withPreSetValidation(new UpdateValueStrategy()),
@@ -181,6 +181,11 @@
 		return new Binding[] { binding };
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTRenderer#dispose()
+	 */
 	@Override
 	protected void dispose() {
 		if (dialog != null && !dialog.isDisposed()) {
@@ -357,12 +362,23 @@
 		}
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer#setValidationColor(org.eclipse.swt.widgets.Control,
+	 *      org.eclipse.swt.graphics.Color)
+	 */
 	@Override
 	protected void setValidationColor(Control control, Color validationColor) {
 		((Composite) control).getChildren()[0].setBackground(validationColor);
 		((Composite) control).getChildren()[1].setBackground(validationColor);
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTRenderer#getUnsetText()
+	 */
 	@Override
 	protected String getUnsetText() {
 		final String text = getDateTimeDisplayType() == DateTimeDisplayType.TIME_ONLY
@@ -415,7 +431,7 @@
 			dialog = new Shell(btn.getShell(), SWT.NONE);
 			dialog.setLayout(new GridLayout(1, false));
 			final DateTime calendar = new DateTime(dialog, SWT.CALENDAR | SWT.BORDER);
-			final IObservableValue<Date> calendarObserver = WidgetProperties.dateTimeSelection().observe(calendar);
+			final IObservableValue calendarObserver = WidgetProperties.selection().observe(calendar);
 			final UpdateValueStrategy modelToTarget = new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE);
 
 			final Binding binding = getDataBindingContext().bindValue(calendarObserver, modelValue, modelToTarget,
@@ -432,6 +448,11 @@
 			okButton.setText(JFaceResources.getString(IDialogLabelKeys.OK_LABEL_KEY));
 			GridDataFactory.fillDefaults().align(SWT.END, SWT.CENTER).grab(false, false).applyTo(okButton);
 			okButton.addSelectionListener(new SelectionAdapter() {
+				/**
+				 * {@inheritDoc}
+				 *
+				 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+				 */
 				@Override
 				public void widgetSelected(SelectionEvent e) {
 					binding.updateTargetToModel();
@@ -527,6 +548,11 @@
 		return DateTimeDisplayType.TIME_AND_DATE;
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer#rootDomainModelChanged()
+	 */
 	@Override
 	protected void rootDomainModelChanged() throws DatabindingFailedException {
 		super.rootDomainModelChanged();
diff --git a/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/EnumComboViewerSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/EnumComboViewerSWTRenderer.java
index 7ca4dda..ad6534b 100644
--- a/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/EnumComboViewerSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/EnumComboViewerSWTRenderer.java
@@ -54,8 +54,9 @@
 import org.eclipse.emfforms.spi.core.services.editsupport.EMFFormsEditSupport;
 import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
 import org.eclipse.emfforms.spi.localization.LocalizationServiceHelper;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
-import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.viewers.ViewerProperties;
+import org.eclipse.jface.databinding.viewers.ViewersObservables;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.ComboViewer;
 import org.eclipse.jface.viewers.LabelProvider;
@@ -99,15 +100,14 @@
 	protected Binding[] createBindings(Viewer viewer) throws DatabindingFailedException {
 		// This binding needs to fire before the value binding so that the value
 		// to be selected exists in the combo's items
-		final IObservableValue<Object> viewerInput = org.eclipse.jface.databinding.viewers.ViewerProperties.input()
-			.observe(viewer);
+		final IObservableValue<?> viewerInput = ViewerProperties.input().observe(viewer);
 		final Binding inputBinding = getDataBindingContext().bindValue(
 			viewerInput,
 			getAvailableChoicesValue());
 
 		final IObservableValue<?> modelValue = getModelValue();
 
-		final Binding binding = getDataBindingContext().bindValue(ViewerProperties.singleSelection().observe(viewer),
+		final Binding binding = getDataBindingContext().bindValue(ViewersObservables.observeSingleSelection(viewer),
 			modelValue);
 
 		pushValue = ISideEffect.create(viewerInput::getValue, input -> {
diff --git a/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/LinkControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/LinkControlSWTRenderer.java
index 22b12d4..b672e98 100644
--- a/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/LinkControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/LinkControlSWTRenderer.java
@@ -51,7 +51,7 @@
 import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
 import org.eclipse.emfforms.spi.core.services.label.NoLabelFoundException;
 import org.eclipse.emfforms.spi.localization.EMFFormsLocalizationService;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
@@ -147,44 +147,43 @@
 	@Override
 	protected Binding[] createBindings(Control control) throws DatabindingFailedException {
 
-		final IObservableValue<String> value = WidgetProperties.text().observe(hyperlink);
+		final IObservableValue value = WidgetProperties.text().observe(hyperlink);
 		final Binding binding = getDataBindingContext().bindValue(value, getModelValue(),
 			withPreSetValidation(createValueExtractingUpdateStrategy()),
-			new UpdateValueStrategy<Object, String>() {
+			new UpdateValueStrategy() {
 				@Override
-				public String convert(Object value) {
+				public Object convert(Object value) {
 					updateChangeListener((EObject) value);
 					return "<a>" + getText(value) + "</a>"; //$NON-NLS-1$ //$NON-NLS-2$
 				}
 			});
 
-		final IObservableValue<String> tooltipValue = WidgetProperties.tooltipText().observe(hyperlink);
+		final IObservableValue tooltipValue = WidgetProperties.tooltipText().observe(hyperlink);
 		final Binding tooltipBinding = getDataBindingContext().bindValue(tooltipValue, getModelValue(),
 			withPreSetValidation(createValueExtractingUpdateStrategy()),
-			new UpdateValueStrategy<Object, String>() {
+			new UpdateValueStrategy() {
 				@Override
-				public String convert(Object value) {
+				public Object convert(Object value) {
 					return getText(value);
 				}
 			});
 
-		final IObservableValue<Image> imageValue = WidgetProperties.image().observe(imageHyperlink);
+		final IObservableValue imageValue = WidgetProperties.image().observe(imageHyperlink);
 		final Binding imageBinding = getDataBindingContext().bindValue(imageValue, getModelValue(),
 			withPreSetValidation(new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER)),
-			new UpdateValueStrategy<Object, Image>() {
+			new UpdateValueStrategy() {
 				@Override
-				public Image convert(Object value) {
+				public Object convert(Object value) {
 					return getImage(value);
 				}
 			});
 
-		final IObservableValue<Boolean> deleteButtonEnablement = WidgetProperties.enabled()
-			.observe(deleteReferenceButton);
+		final IObservableValue deleteButtonEnablement = WidgetProperties.enabled().observe(deleteReferenceButton);
 		final Binding deleteBinding = getDataBindingContext().bindValue(deleteButtonEnablement, getModelValue(),
 			withPreSetValidation(createValueExtractingUpdateStrategy()),
-			new UpdateValueStrategy<Object, Boolean>() {
+			new UpdateValueStrategy() {
 				@Override
-				public Boolean convert(Object value) {
+				public Object convert(Object value) {
 					return value != null;
 				}
 			});
@@ -259,7 +258,7 @@
 	protected void createButtons(Composite parent) {
 		String elementDisplayName = null;
 		try {
-			elementDisplayName = emfFormsLabelProvider
+			elementDisplayName = (String) emfFormsLabelProvider
 				.getDisplayName(getVElement().getDomainModelReference(), getViewModelContext().getDomainModel())
 				.getValue();
 		} catch (final NoLabelFoundException ex) {
diff --git a/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/NumberControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/NumberControlSWTRenderer.java
index f4a22f8..2c918ef 100644
--- a/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/NumberControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/NumberControlSWTRenderer.java
@@ -97,6 +97,10 @@
 		return SWT.RIGHT;
 	}
 
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.emf.ecp.edit.internal.swt.controls.AbstractTextControl#getTextVariantID()
+	 */
 	@Override
 	protected String getTextVariantID() {
 		return "org_eclipse_emf_ecp_control_numerical"; //$NON-NLS-1$
diff --git a/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/XMLDateControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/XMLDateControlSWTRenderer.java
index 2e823ed..5bea36d 100644
--- a/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/XMLDateControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/internal/core/swt/renderer/XMLDateControlSWTRenderer.java
@@ -55,7 +55,7 @@
 import org.eclipse.emfforms.spi.localization.EMFFormsLocalizationService;
 import org.eclipse.emfforms.spi.localization.LocalizationServiceHelper;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.dialogs.IDialogLabelKeys;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.layout.GridDataFactory;
@@ -155,7 +155,7 @@
 			}
 			calendar.setDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));
 
-			final IObservableValue<Date> dateObserver = WidgetProperties.dateTimeSelection().observe(calendar);
+			final IObservableValue dateObserver = WidgetProperties.selection().observe(calendar);
 			final Binding binding = getDataBindingContext().bindValue(dateObserver, modelValue,
 				new DateTargetToModelUpdateStrategy(eStructuralFeature, text),
 				new DateModelToTargetUpdateStrategy(false, true));
@@ -165,6 +165,11 @@
 			okButton.setText(JFaceResources.getString(IDialogLabelKeys.OK_LABEL_KEY));
 			GridDataFactory.fillDefaults().align(SWT.END, SWT.CENTER).grab(false, false).applyTo(okButton);
 			okButton.addSelectionListener(new SelectionAdapter() {
+				/**
+				 * {@inheritDoc}
+				 *
+				 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+				 */
 				@Override
 				public void widgetSelected(SelectionEvent e) {
 					binding.updateTargetToModel();
@@ -386,7 +391,7 @@
 		final EStructuralFeature structuralFeature = (EStructuralFeature) getModelValue().getValueType();
 		final Text text = (Text) Composite.class.cast(Composite.class.cast(control).getChildren()[0]).getChildren()[0];
 
-		final IObservableValue<String> value = WidgetProperties.text(SWT.FocusOut).observe(text);
+		final IObservableValue value = WidgetProperties.text(SWT.FocusOut).observe(text);
 
 		final UpdateValueStrategy targetToModelUpdateStrategy = withPreSetValidation(
 			new DateTargetToModelUpdateStrategy(structuralFeature, text));
@@ -401,6 +406,11 @@
 
 		emfFormsLocaleChangeListener = new EMFFormsLocaleChangeListener() {
 
+			/**
+			 * {@inheritDoc}
+			 *
+			 * @see org.eclipse.emfforms.spi.common.locale.EMFFormsLocaleChangeListener#notifyLocaleChange()
+			 */
 			@Override
 			public void notifyLocaleChange() {
 				text.setMessage(getTextMessage());
@@ -423,6 +433,12 @@
 		return df;
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer#setValidationColor(org.eclipse.swt.widgets.Control,
+	 *      org.eclipse.swt.graphics.Color)
+	 */
 	@Override
 	protected void setValidationColor(Control control, Color validationColor) {
 		super.setValidationColor(getControlCompositeFromControl(control), validationColor);
@@ -449,12 +465,22 @@
 		}
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.renderer.TextControlSWTRenderer#getUnsetText()
+	 */
 	@Override
 	protected String getUnsetText() {
 		return localizationService
 			.getString(getClass(), MessageKeys.XmlDateControlText_NoDateSetClickToSetDate);
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTRenderer#dispose()
+	 */
 	@Override
 	protected void dispose() {
 		if (dialog != null && !dialog.isDisposed()) {
diff --git a/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/spi/core/swt/AbstractControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/spi/core/swt/AbstractControlSWTRenderer.java
index 3320a48..7c2a91c 100644
--- a/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/spi/core/swt/AbstractControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/spi/core/swt/AbstractControlSWTRenderer.java
@@ -52,7 +52,7 @@
 import org.eclipse.emfforms.spi.swt.core.EMFFormsControlProcessorService;
 import org.eclipse.emfforms.spi.swt.core.SWTDataElementIdHelper;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.Image;
@@ -255,7 +255,7 @@
 	 * </p>
 	 *
 	 * @return
-	 *         {@code true} if the Control SWT renderer can handle the {@link EMFFormsControlProcessorService} itself,
+	 * 		{@code true} if the Control SWT renderer can handle the {@link EMFFormsControlProcessorService} itself,
 	 *         {@code false} otherwise.
 	 * @since 1.8
 	 */
@@ -447,30 +447,31 @@
 
 			final EObject rootObject = getViewModelContext().getDomainModel();
 			try {
-				final IObservableValue<String> textObservable = WidgetProperties.text().observe(label);
-				final IObservableValue<String> displayNameObservable = labelProvider.getDisplayName(
-					domainModelReference,
+				final IObservableValue textObservable = WidgetProperties.text().observe(label);
+				final IObservableValue displayNameObservable = labelProvider.getDisplayName(domainModelReference,
 					rootObject);
-				viewModelDBC.bindValue(textObservable, displayNameObservable, null,
-					new UpdateValueStrategy<String, String>() {
+				viewModelDBC.bindValue(textObservable, displayNameObservable, null, new UpdateValueStrategy() {
 
-						@Override
-						public String convert(String value) {
-							String extra = ""; //$NON-NLS-1$
-							final VTMandatoryStyleProperty mandatoryStyle = getMandatoryStyle();
-							final EStructuralFeature structuralFeature = (EStructuralFeature) valueProperty
-								.getValueType();
-							if (mandatoryStyle.isHighliteMandatoryFields() && structuralFeature.getLowerBound() > 0) {
-								extra = mandatoryStyle.getMandatoryMarker();
-							}
-							final String result = super.convert(value);
-							return result + extra;
+					/**
+					 * {@inheritDoc}
+					 *
+					 * @see org.eclipse.core.databinding.UpdateValueStrategy#convert(java.lang.Object)
+					 */
+					@Override
+					public Object convert(Object value) {
+						String extra = ""; //$NON-NLS-1$
+						final VTMandatoryStyleProperty mandatoryStyle = getMandatoryStyle();
+						final EStructuralFeature structuralFeature = (EStructuralFeature) valueProperty.getValueType();
+						if (mandatoryStyle.isHighliteMandatoryFields() && structuralFeature.getLowerBound() > 0) {
+							extra = mandatoryStyle.getMandatoryMarker();
 						}
+						final String result = (String) super.convert(value);
+						return result + extra;
+					}
 
-					});
-				final IObservableValue<String> tooltipObservable = WidgetProperties.tooltipText().observe(label);
-				final IObservableValue<String> descriptionObservable = labelProvider.getDescription(
-					domainModelReference,
+				});
+				final IObservableValue tooltipObservable = WidgetProperties.tooltipText().observe(label);
+				final IObservableValue descriptionObservable = labelProvider.getDescription(domainModelReference,
 					rootObject);
 				viewModelDBC.bindValue(tooltipObservable, descriptionObservable);
 			} catch (final NoLabelFoundException e) {
diff --git a/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/spi/core/swt/renderer/TextControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/spi/core/swt/renderer/TextControlSWTRenderer.java
index 34d45c4..8bbb8d5 100644
--- a/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/spi/core/swt/renderer/TextControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.core.swt/src/org/eclipse/emf/ecp/view/spi/core/swt/renderer/TextControlSWTRenderer.java
@@ -61,7 +61,7 @@
 import org.eclipse.emfforms.spi.swt.core.SWTDataElementIdHelper;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
 import org.eclipse.emfforms.swt.core.EMFFormsSWTConstants;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
 import org.eclipse.swt.SWT;
@@ -199,7 +199,7 @@
 	 */
 	protected String getTextMessage() {
 		try {
-			return getEMFFormsLabelProvider()
+			return (String) getEMFFormsLabelProvider()
 				.getDisplayName(getVElement().getDomainModelReference(), getViewModelContext().getDomainModel())
 				.getValue();
 		} catch (final NoLabelFoundException ex) {
@@ -223,7 +223,7 @@
 		UpdateValueStrategy targetToModel, UpdateValueStrategy modelToTarget) {
 		final Control controlToObserve = Composite.class.cast(text).getChildren()[0];
 		final boolean useOnModifyDatabinding = useOnModifyDatabinding();
-		final IObservableValue<String> value;
+		final IObservableValue value;
 		if (useOnModifyDatabinding) {
 			value = WidgetProperties.text(SWT.Modify).observeDelayed(250, controlToObserve);
 		} else {
@@ -264,7 +264,7 @@
 	 */
 	protected Binding createTooltipBinding(Control text, IObservableValue modelValue,
 		DataBindingContext dataBindingContext, UpdateValueStrategy targetToModel, UpdateValueStrategy modelToTarget) {
-		final IObservableValue<String> toolTip = WidgetProperties.tooltipText().observe(text);
+		final IObservableValue toolTip = WidgetProperties.tooltipText().observe(text);
 		return dataBindingContext.bindValue(toolTip, modelValue, targetToModel, modelToTarget);
 	}
 
@@ -407,6 +407,10 @@
 	 */
 	class EMFUpdateConvertValueStrategy extends EMFUpdateValueStrategy {
 
+		/*
+		 * (non-Javadoc)
+		 * @see org.eclipse.core.databinding.UpdateValueStrategy#convert(java.lang.Object)
+		 */
 		@Override
 		public Object convert(Object value) {
 			return convertValue(value);
@@ -488,6 +492,9 @@
 
 		}
 
+		/**
+		 * {@inheritDoc}
+		 */
 		@Override
 		public Object convert(Object value) {
 			try {
@@ -506,6 +513,11 @@
 		}
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTRenderer#getUnsetText()
+	 */
 	@Override
 	protected String getUnsetText() {
 		return LocalizationServiceHelper
diff --git a/bundles/org.eclipse.emf.ecp.view.custom.ui.swt/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.ecp.view.custom.ui.swt/META-INF/MANIFEST.MF
index 4614709..3655958 100644
--- a/bundles/org.eclipse.emf.ecp.view.custom.ui.swt/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.ecp.view.custom.ui.swt/META-INF/MANIFEST.MF
@@ -23,7 +23,6 @@
 Import-Package: org.eclipse.emfforms.spi.common.report;version="[1.22.0,1.23.0)",
  org.eclipse.emfforms.spi.swt.core;version="[1.22.0,1.23.0)",
  org.eclipse.jface.databinding.swt;version="0.0.0",
- org.eclipse.jface.databinding.swt.typed;version="0.0.0",
  org.eclipse.jface.databinding.viewers;version="0.0.0",
  org.eclipse.jface.dialogs;version="0.0.0",
  org.eclipse.jface.layout;version="0.0.0",
diff --git a/bundles/org.eclipse.emf.ecp.view.custom.ui.swt/src/org/eclipse/emf/ecp/view/spi/custom/swt/ECPAbstractCustomControlSWT.java b/bundles/org.eclipse.emf.ecp.view.custom.ui.swt/src/org/eclipse/emf/ecp/view/spi/custom/swt/ECPAbstractCustomControlSWT.java
index 602cd42..07bf363 100644
--- a/bundles/org.eclipse.emf.ecp.view.custom.ui.swt/src/org/eclipse/emf/ecp/view/spi/custom/swt/ECPAbstractCustomControlSWT.java
+++ b/bundles/org.eclipse.emf.ecp.view.custom.ui.swt/src/org/eclipse/emf/ecp/view/spi/custom/swt/ECPAbstractCustomControlSWT.java
@@ -72,7 +72,7 @@
 import org.eclipse.emfforms.spi.swt.core.layout.GridDescriptionFactory;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridDescription;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.databinding.viewers.ViewerSupport;
 import org.eclipse.jface.viewers.StructuredViewer;
 import org.eclipse.swt.SWT;
@@ -364,11 +364,16 @@
 					getViewModelContext().getService(EMFFormsLabelProvider.class)
 						.getDisplayName(getCustomControl().getDomainModelReference(),
 							getViewModelContext().getDomainModel()),
-					null, new UpdateValueStrategy<String, String>() {
+					null, new UpdateValueStrategy() {
 
+						/**
+						 * {@inheritDoc}
+						 *
+						 * @see org.eclipse.core.databinding.UpdateValueStrategy#convert(java.lang.Object)
+						 */
 						@Override
-						public String convert(String value) {
-							final String labelText = super.convert(value);
+						public Object convert(Object value) {
+							final String labelText = (String) super.convert(value);
 							String extra = ""; //$NON-NLS-1$
 							if (structuralFeature.getLowerBound() > 0) {
 								extra = "*"; //$NON-NLS-1$
@@ -829,7 +834,7 @@
 	 * </p>
 	 *
 	 * @return
-	 *         {@code true} if the custom control can handle the
+	 * 		{@code true} if the custom control can handle the
 	 *         {@link org.eclipse.emfforms.spi.swt.core.EMFFormsControlProcessorService EMFFormsControlProcessorService}
 	 *         itself, {@code false} otherwise.
 	 * @since 1.8
diff --git a/bundles/org.eclipse.emf.ecp.view.group.swt.collapsable/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.ecp.view.group.swt.collapsable/META-INF/MANIFEST.MF
index cc4f8ec..d8b4367 100644
--- a/bundles/org.eclipse.emf.ecp.view.group.swt.collapsable/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.ecp.view.group.swt.collapsable/META-INF/MANIFEST.MF
@@ -22,7 +22,6 @@
  org.eclipse.emfforms.spi.common.report;version="[1.22.0,1.23.0)",
  org.eclipse.emfforms.spi.core.services.databinding;version="[1.22.0,1.23.0)",
  org.eclipse.jface.databinding.swt;version="0.0.0",
- org.eclipse.jface.databinding.swt.typed;version="0.0.0",
  org.eclipse.jface.layout;version="0.0.0",
  org.eclipse.swt;version="0.0.0",
  org.eclipse.swt.events;version="0.0.0",
diff --git a/bundles/org.eclipse.emf.ecp.view.group.swt.collapsable/src/org/eclipse/emf/ecp/view/group/swt/internal/collapsable/CollapsableGroupSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.group.swt.collapsable/src/org/eclipse/emf/ecp/view/group/swt/internal/collapsable/CollapsableGroupSWTRenderer.java
index 89f4a7a..d9e67b4 100644
--- a/bundles/org.eclipse.emf.ecp.view.group.swt.collapsable/src/org/eclipse/emf/ecp/view/group/swt/internal/collapsable/CollapsableGroupSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.group.swt.collapsable/src/org/eclipse/emf/ecp/view/group/swt/internal/collapsable/CollapsableGroupSWTRenderer.java
@@ -32,7 +32,7 @@
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridDescription;
 import org.eclipse.jface.databinding.swt.ISWTObservableValue;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
 import org.eclipse.jface.resource.FontDescriptor;
@@ -88,6 +88,12 @@
 		return rendererGridDescription;
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.ContainerSWTRenderer#renderControl(org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell,
+	 *      org.eclipse.swt.widgets.Composite)
+	 */
 	@Override
 	protected Control renderControl(SWTGridCell gridCell, final Composite parent) throws NoRendererFoundException,
 		NoPropertyDescriptorFoundExeption {
@@ -104,7 +110,7 @@
 		final Font boldFont = boldDescriptor.createFont(bar.getDisplay());
 		bar.setFont(boldFont);
 
-		final ISWTObservableValue<String> target = WidgetProperties.text().observe(item0);
+		final ISWTObservableValue target = WidgetProperties.text().observe(item0);
 		final IObservableValue modelValue = EMFEditObservables.observeValue(
 			AdapterFactoryEditingDomain.getEditingDomainFor(getVElement()), getVElement(),
 			VViewPackage.eINSTANCE.getElement_Label());
diff --git a/bundles/org.eclipse.emf.ecp.view.group.swt.embedded/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.ecp.view.group.swt.embedded/META-INF/MANIFEST.MF
index 58f677e..c017f37 100644
--- a/bundles/org.eclipse.emf.ecp.view.group.swt.embedded/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.ecp.view.group.swt.embedded/META-INF/MANIFEST.MF
@@ -19,7 +19,6 @@
  org.eclipse.core.runtime;version="3.4.0",
  org.eclipse.emfforms.spi.common.report;version="[1.22.0,1.23.0)",
  org.eclipse.jface.databinding.swt;version="0.0.0",
- org.eclipse.jface.databinding.swt.typed;version="0.0.0",
  org.eclipse.swt;version="0.0.0",
  org.eclipse.swt.widgets;version="0.0.0",
  org.osgi.framework;version="1.6.0"
diff --git a/bundles/org.eclipse.emf.ecp.view.group.swt.embedded/src/org/eclipse/emf/ecp/view/alignmentgroup/internal/swt/EmbeddedGroupSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.group.swt.embedded/src/org/eclipse/emf/ecp/view/alignmentgroup/internal/swt/EmbeddedGroupSWTRenderer.java
index 20434be..9f41d6c 100644
--- a/bundles/org.eclipse.emf.ecp.view.group.swt.embedded/src/org/eclipse/emf/ecp/view/alignmentgroup/internal/swt/EmbeddedGroupSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.group.swt.embedded/src/org/eclipse/emf/ecp/view/alignmentgroup/internal/swt/EmbeddedGroupSWTRenderer.java
@@ -44,7 +44,7 @@
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridDescription;
 import org.eclipse.jface.databinding.swt.ISWTObservableValue;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
@@ -148,6 +148,12 @@
 		return currentGridDescription;
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emfforms.spi.swt.core.AbstractSWTRenderer#renderControl(org.eclipse.emfforms.spi.swt.core.layout.GridCell,
+	 *      org.eclipse.swt.widgets.Composite)
+	 */
 	@Override
 	protected Control renderControl(SWTGridCell cell, Composite parent) throws NoRendererFoundException,
 		NoPropertyDescriptorFoundExeption {
@@ -189,7 +195,7 @@
 
 	/** Creates a binding that synchronizes the value of the target {@link Label} with the model value. */
 	private void bindValue(Control target) {
-		final ISWTObservableValue<String> targetValue = WidgetProperties.text().observe(target);
+		final ISWTObservableValue targetValue = WidgetProperties.text().observe(target);
 		final IObservableValue modelValue = EMFEditObservables.observeValue(
 			AdapterFactoryEditingDomain.getEditingDomainFor(getVElement()), getVElement(),
 			VViewPackage.eINSTANCE.getElement_Label());
diff --git a/bundles/org.eclipse.emf.ecp.view.group.ui.swt/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.ecp.view.group.ui.swt/META-INF/MANIFEST.MF
index 3c7b790..5b4f901 100644
--- a/bundles/org.eclipse.emf.ecp.view.group.ui.swt/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.ecp.view.group.ui.swt/META-INF/MANIFEST.MF
@@ -24,7 +24,6 @@
  org.eclipse.emfforms.spi.common.report;version="[1.22.0,1.23.0)",
  org.eclipse.emfforms.spi.core.services.databinding;version="[1.22.0,1.23.0)",
  org.eclipse.jface.databinding.swt;version="0.0.0",
- org.eclipse.jface.databinding.swt.typed;version="0.0.0",
  org.eclipse.jface.layout;version="0.0.0",
  org.eclipse.swt;version="0.0.0",
  org.eclipse.swt.graphics;version="0.0.0",
diff --git a/bundles/org.eclipse.emf.ecp.view.group.ui.swt/src/org/eclipse/emf/ecp/view/spi/group/swt/GroupSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.group.ui.swt/src/org/eclipse/emf/ecp/view/spi/group/swt/GroupSWTRenderer.java
index 5218dea..ff8b8a9 100644
--- a/bundles/org.eclipse.emf.ecp.view.group.ui.swt/src/org/eclipse/emf/ecp/view/spi/group/swt/GroupSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.group.ui.swt/src/org/eclipse/emf/ecp/view/spi/group/swt/GroupSWTRenderer.java
@@ -28,13 +28,14 @@
 import org.eclipse.emf.ecp.view.spi.swt.layout.LayoutProviderHelper;
 import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
 import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emfforms.internal.group.swt.GroupTextProperty;
 import org.eclipse.emfforms.spi.common.report.ReportService;
 import org.eclipse.emfforms.spi.swt.core.EMFFormsRendererFactory;
 import org.eclipse.emfforms.spi.swt.core.layout.GridDescriptionFactory;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridDescription;
 import org.eclipse.jface.databinding.swt.ISWTObservableValue;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.widgets.Composite;
@@ -69,32 +70,50 @@
 	private final EMFDataBindingContext dbc;
 	private SWTGridDescription rendererGridDescription;
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.ContainerSWTRenderer#getCustomVariant()
+	 */
 	@Override
 	protected String getCustomVariant() {
 		return CONTROL_GROUP;
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.ContainerSWTRenderer#getChildren()
+	 */
+
 	@Override
 	protected Collection<VContainedElement> getChildren() {
 		return getVElement().getChildren();
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.ContainerSWTRenderer#getComposite(org.eclipse.swt.widgets.Composite)
+	 */
 	@Override
 	protected Composite getComposite(Composite parent) {
 		final Group group = new Group(parent, SWT.TITLE);
 		final EditingDomain editingDomain = AdapterFactoryEditingDomain.getEditingDomainFor(getVElement());
-		final IObservableValue<String> modelLabelValue = EMFEditObservables.observeValue(
+		final IObservableValue modelLabelValue = EMFEditObservables.observeValue(
 			editingDomain,
 			getVElement(),
 			VViewPackage.eINSTANCE.getElement_Label());
-		final IObservableValue<String> targetLabelValue = WidgetProperties.text().observe(group);
+		final IObservableValue targetLabelValue = new GroupTextProperty().observe(group);
+		// FIXME fixed with JFace-Databinding 4.5
+		// final IObservableValue targetValue = SWTObservables.observeText(group);
 		dbc.bindValue(targetLabelValue, modelLabelValue);
 
-		final IObservableValue<String> modelTooltipValue = EMFEditObservables.observeValue(
+		final IObservableValue modelTooltipValue = EMFEditObservables.observeValue(
 			editingDomain,
 			getVElement(),
 			VViewPackage.eINSTANCE.getHasTooltip_Tooltip());
-		final ISWTObservableValue<String> targetTooltipValue = WidgetProperties.tooltipText().observe(group);
+		final ISWTObservableValue targetTooltipValue = WidgetProperties.tooltipText().observe(group);
 		dbc.bindValue(targetTooltipValue, modelTooltipValue);
 
 		return group;
@@ -116,6 +135,11 @@
 		return rendererGridDescription;
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.ContainerSWTRenderer#dispose()
+	 */
 	@Override
 	protected void dispose() {
 		dbc.dispose();
diff --git a/bundles/org.eclipse.emf.ecp.view.label.ui.swt/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.ecp.view.label.ui.swt/META-INF/MANIFEST.MF
index c4002f1..1d01403 100644
--- a/bundles/org.eclipse.emf.ecp.view.label.ui.swt/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.ecp.view.label.ui.swt/META-INF/MANIFEST.MF
@@ -23,7 +23,6 @@
  org.eclipse.emfforms.spi.common.report;version="[1.22.0,1.23.0)",
  org.eclipse.emfforms.spi.core.services.databinding;version="[1.22.0,1.23.0)",
  org.eclipse.jface.databinding.swt;version="0.0.0",
- org.eclipse.jface.databinding.swt.typed;version="0.0.0",
  org.eclipse.jface.layout;version="0.0.0",
  org.eclipse.swt;version="0.0.0",
  org.eclipse.swt.events;version="0.0.0",
diff --git a/bundles/org.eclipse.emf.ecp.view.label.ui.swt/src/org/eclipse/emf/ecp/view/spi/label/swt/LabelSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.label.ui.swt/src/org/eclipse/emf/ecp/view/spi/label/swt/LabelSWTRenderer.java
index d1eee19..c59645d 100644
--- a/bundles/org.eclipse.emf.ecp.view.label.ui.swt/src/org/eclipse/emf/ecp/view/spi/label/swt/LabelSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.label.ui.swt/src/org/eclipse/emf/ecp/view/spi/label/swt/LabelSWTRenderer.java
@@ -44,7 +44,7 @@
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridDescription;
 import org.eclipse.jface.databinding.swt.ISWTObservableValue;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.DisposeEvent;
 import org.eclipse.swt.events.DisposeListener;
@@ -94,6 +94,11 @@
 	private Composite parent;
 	private EMFDataBindingContext dataBindingContext;
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emfforms.spi.swt.core.AbstractSWTRenderer#dispose()
+	 */
 	@Override
 	protected void dispose() {
 		rendererGridDescription = null;
@@ -111,6 +116,11 @@
 		super.dispose();
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emfforms.spi.swt.core.AbstractSWTRenderer#getGridDescription(SWTGridDescription)
+	 */
 	@Override
 	public SWTGridDescription getGridDescription(SWTGridDescription gridDescription) {
 		if (rendererGridDescription == null) {
@@ -145,7 +155,7 @@
 				final IObservableValue observableValue = emfFormsDatabinding
 					.getObservableValue(getVElement().getDomainModelReference(),
 						getViewModelContext().getDomainModel());
-				final ISWTObservableValue<String> observeText = WidgetProperties.text().observe(label);
+				final ISWTObservableValue observeText = WidgetProperties.text().observe(label);
 				final Binding binding = getDataBindingContext().bindValue(observeText, observableValue);
 
 				label.addDisposeListener(new DisposeListener() {
@@ -162,7 +172,7 @@
 			final IObservableValue modelValue = EMFEditObservables.observeValue(
 				AdapterFactoryEditingDomain.getEditingDomainFor(getVElement()), getVElement(),
 				VViewPackage.eINSTANCE.getElement_Label());
-			final IObservableValue<String> targetValue = WidgetProperties.text().observe(label);
+			final IObservableValue targetValue = WidgetProperties.text().observe(label);
 
 			dbc.bindValue(targetValue, modelValue);
 		}
diff --git a/bundles/org.eclipse.emf.ecp.view.model.preview.e3/src/org/eclipse/emf/ecp/view/model/internal/preview/e3/views/PreviewView.java b/bundles/org.eclipse.emf.ecp.view.model.preview.e3/src/org/eclipse/emf/ecp/view/model/internal/preview/e3/views/PreviewView.java
index 37a77bd..0238e34 100644
--- a/bundles/org.eclipse.emf.ecp.view.model.preview.e3/src/org/eclipse/emf/ecp/view/model/internal/preview/e3/views/PreviewView.java
+++ b/bundles/org.eclipse.emf.ecp.view.model.preview.e3/src/org/eclipse/emf/ecp/view/model/internal/preview/e3/views/PreviewView.java
@@ -384,7 +384,7 @@
 		final ImageDescriptor imageDescriptor = ImageDescriptor.createFromURL(Activator.getDefault()
 			.getBundle()
 			.getResource("icons/preview.png")); //$NON-NLS-1$
-		titleImage.setImage(new Image(parent.getDisplay(), imageDescriptor.getImageData(100)));
+		titleImage.setImage(new Image(parent.getDisplay(), imageDescriptor.getImageData()));
 		final FormData titleImageData = new FormData();
 		final int imageOffset = -titleImage.computeSize(SWT.DEFAULT, SWT.DEFAULT).y / 2;
 		titleImageData.top = new FormAttachment(50, imageOffset);
diff --git a/bundles/org.eclipse.emf.ecp.view.section.ui.swt/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.ecp.view.section.ui.swt/META-INF/MANIFEST.MF
index c6489cf..13bda5d 100644
--- a/bundles/org.eclipse.emf.ecp.view.section.ui.swt/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.ecp.view.section.ui.swt/META-INF/MANIFEST.MF
@@ -24,7 +24,6 @@
 Import-Package: javax.inject;version="1.0.0",
  org.eclipse.emfforms.spi.common.report;version="[1.22.0,1.23.0)",
  org.eclipse.jface.databinding.swt;version="0.0.0",
- org.eclipse.jface.databinding.swt.typed;version="0.0.0",
  org.eclipse.jface.layout;version="0.0.0",
  org.eclipse.swt;version="0.0.0",
  org.eclipse.swt.graphics;version="0.0.0",
diff --git a/bundles/org.eclipse.emf.ecp.view.section.ui.swt/src/org/eclipse/emf/ecp/view/spi/section/swt/SectionLeafSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.section.ui.swt/src/org/eclipse/emf/ecp/view/spi/section/swt/SectionLeafSWTRenderer.java
index acbae1a..ab5f4bc 100644
--- a/bundles/org.eclipse.emf.ecp.view.section.ui.swt/src/org/eclipse/emf/ecp/view/spi/section/swt/SectionLeafSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.section.ui.swt/src/org/eclipse/emf/ecp/view/spi/section/swt/SectionLeafSWTRenderer.java
@@ -28,7 +28,7 @@
 import org.eclipse.emfforms.spi.common.report.ReportService;
 import org.eclipse.emfforms.spi.swt.core.layout.GridDescriptionFactory;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridDescription;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
 import org.eclipse.swt.SWT;
@@ -85,22 +85,22 @@
 		final EditingDomain editingDomain = AdapterFactoryEditingDomain.getEditingDomainFor(getVElement());
 		final Label label = new Label(composite, getLabelStyleBits());
 
-		final IObservableValue<String> modelLabelValue = EMFEditObservables.observeValue(
+		final IObservableValue modelLabelValue = EMFEditObservables.observeValue(
 			editingDomain,
 			getVElement(),
 			VViewPackage.eINSTANCE.getElement_Label());
 
-		final IObservableValue<String> textObservable = WidgetProperties.text().observe(label);
+		final IObservableValue textObservable = WidgetProperties.text().observe(label);
 
 		getDataBindingContext().bindValue(textObservable, modelLabelValue);
 
 		GridDataFactory.fillDefaults().grab(true, false).applyTo(label);
 
-		final IObservableValue<String> modelTooltipValue = EMFEditObservables.observeValue(
+		final IObservableValue modelTooltipValue = EMFEditObservables.observeValue(
 			editingDomain,
 			getVElement(),
 			VViewPackage.eINSTANCE.getHasTooltip_Tooltip());
-		final IObservableValue<String> targetTooltipValue = WidgetProperties.tooltipText().observe(label);
+		final IObservableValue targetTooltipValue = WidgetProperties.tooltipText().observe(label);
 		getDataBindingContext().bindValue(targetTooltipValue, modelTooltipValue);
 
 		return composite;
@@ -118,6 +118,12 @@
 			getViewModelContext());
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.section.swt.AbstractSectionSWTRenderer#initCollapseState()
+	 * @since 1.6
+	 */
 	@Override
 	protected void initCollapseState() {
 		// no children -> empty
diff --git a/bundles/org.eclipse.emf.ecp.view.section.ui.swt/src/org/eclipse/emf/ecp/view/spi/section/swt/SectionNodeSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.section.ui.swt/src/org/eclipse/emf/ecp/view/spi/section/swt/SectionNodeSWTRenderer.java
index b025861..c79d231 100644
--- a/bundles/org.eclipse.emf.ecp.view.section.ui.swt/src/org/eclipse/emf/ecp/view/spi/section/swt/SectionNodeSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.section.ui.swt/src/org/eclipse/emf/ecp/view/spi/section/swt/SectionNodeSWTRenderer.java
@@ -21,8 +21,9 @@
 
 import javax.inject.Inject;
 
-import org.eclipse.core.databinding.beans.typed.PojoProperties;
+import org.eclipse.core.databinding.beans.PojoProperties;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.emf.databinding.edit.EMFEditObservables;
 import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
 import org.eclipse.emf.ecp.view.spi.model.ModelChangeListener;
@@ -263,24 +264,24 @@
 		getExpandableComposite().setExpanded(!getVElement().isCollapsed());
 		final EditingDomain editingDomain = AdapterFactoryEditingDomain.getEditingDomainFor(getVElement());
 
-		final IObservableValue<String> modelLabelValue = EMFEditObservables.observeValue(
+		final IObservableValue modelLabelValue = EMFEditObservables.observeValue(
 			editingDomain,
 			getVElement(),
 			VViewPackage.eINSTANCE.getElement_Label());
 		final String text = "text"; //$NON-NLS-1$
-		final IObservableValue<String> textObservable = PojoProperties
-			.value(ExpandableComposite.class, text, String.class)
+		final WritableValue value = new WritableValue(text, String.class);
+		final IObservableValue textObservable = PojoProperties.value(ExpandableComposite.class, text, String.class)
 			.observe(expandableComposite);
 
 		getDataBindingContext().bindValue(textObservable, modelLabelValue);
 
 		initExpandableComposite(getExpandableComposite());
 
-		final IObservableValue<String> modelTooltipValue = EMFEditObservables.observeValue(
+		final IObservableValue modelTooltipValue = EMFEditObservables.observeValue(
 			editingDomain,
 			getVElement(),
 			VViewPackage.eINSTANCE.getHasTooltip_Tooltip());
-		final IObservableValue<String> targetTooltipValue = new ExpandableCompositeTooltipProperty()
+		final IObservableValue targetTooltipValue = new ExpandableCompositeTooltipProperty()
 			.observe(getExpandableComposite());
 		getDataBindingContext().bindValue(targetTooltipValue, modelTooltipValue);
 
diff --git a/bundles/org.eclipse.emf.ecp.view.stack.viewmodel/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.emf.ecp.view.stack.viewmodel/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/bundles/org.eclipse.emf.ecp.view.stack.viewmodel/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid.rap/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/rap/RAPGridControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid.rap/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/rap/RAPGridControlSWTRenderer.java
index 08ac275..4f09274 100644
--- a/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid.rap/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/rap/RAPGridControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid.rap/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/rap/RAPGridControlSWTRenderer.java
@@ -183,8 +183,7 @@
 	@Override
 	// CHECKSTYLE.OFF: ParameterNumber
 	protected TableViewerSWTBuilder createTableViewerSWTBuilder(Composite parent, IObservableList list,
-		IObservableValue<String> labelText, IObservableValue<String> labelTooltipText,
-		TableViewerCompositeBuilder compositeBuilder,
+		IObservableValue labelText, IObservableValue labelTooltipText, TableViewerCompositeBuilder compositeBuilder,
 		ObservableListContentProvider cp, ECPTableViewerComparator comparator,
 		TableActionBar<? extends AbstractTableViewer> actionBar) {
 		// CHECKSTYLE.ON: ParameterNumber
diff --git a/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridControlSWTRenderer.java
index 52f6e11..a2e22a8 100644
--- a/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridControlSWTRenderer.java
@@ -323,7 +323,7 @@
 			tableViewer.getGrid().setFooterVisible(false);
 
 			addKeyListener(tableViewer);
-			if (getViewModelContext().getContextValue("enableMultiEdit") == Boolean.TRUE) { //$NON-NLS-1$
+			if (getViewModelContext().getContextValue("enableMultiEdit") == Boolean.TRUE) {
 				final CopyDragListener mdl = new CopyDragListener();
 				tableViewer.addSelectionChangedListener(mdl);
 				tableViewer.getGrid().addMouseMoveListener(mdl);
@@ -400,8 +400,7 @@
 	@Override
 	// CHECKSTYLE.OFF: ParameterNumber
 	protected TableViewerSWTBuilder createTableViewerSWTBuilder(Composite parent, IObservableList list,
-		IObservableValue<String> labelText, IObservableValue<String> labelTooltipText,
-		TableViewerCompositeBuilder compositeBuilder,
+		IObservableValue labelText, IObservableValue labelTooltipText, TableViewerCompositeBuilder compositeBuilder,
 		ObservableListContentProvider cp, ViewerComparator comparator,
 		TableActionBar<? extends AbstractTableViewer> actionBar) {
 		// CHECKSTYLE.ON: ParameterNumber
diff --git a/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridTableViewerComposite.java b/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridTableViewerComposite.java
index 1ff9049..957f5f7 100644
--- a/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridTableViewerComposite.java
+++ b/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridTableViewerComposite.java
@@ -120,7 +120,7 @@
 	 */
 	public GridTableViewerComposite(Composite parent, int style, Object inputObject,
 		TableViewerSWTCustomization customization,
-		IObservableValue<String> title, IObservableValue<String> tooltip) {
+		IObservableValue title, IObservableValue tooltip) {
 
 		super(parent, style, inputObject, customization, title, tooltip);
 
diff --git a/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridTableViewerFactory.java b/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridTableViewerFactory.java
index e6d496e..4d91e54 100644
--- a/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridTableViewerFactory.java
+++ b/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridTableViewerFactory.java
@@ -58,7 +58,7 @@
 	 * @return the builder
 	 */
 	public static GridTableViewerSWTBuilder fillDefaults(Composite composite, int swtStyleBits, Object input,
-		IObservableValue<String> title, IObservableValue<String> tooltip) {
+		IObservableValue title, IObservableValue tooltip) {
 		return new GridTableViewerSWTBuilder(composite, swtStyleBits, input, title, tooltip);
 	}
 
diff --git a/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridTableViewerSWTBuilder.java b/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridTableViewerSWTBuilder.java
index 747b75e..a65db37 100644
--- a/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridTableViewerSWTBuilder.java
+++ b/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridTableViewerSWTBuilder.java
@@ -33,8 +33,8 @@
 	 * @param tooltip the tooltip
 	 */
 	public GridTableViewerSWTBuilder(Composite composite, int swtStyleBits, Object input,
-		IObservableValue<String> title,
-		IObservableValue<String> tooltip) {
+		IObservableValue title,
+		IObservableValue tooltip) {
 		super(composite, swtStyleBits, input, title, tooltip);
 	}
 
diff --git a/bundles/org.eclipse.emf.ecp.view.table.ui.swt/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.ecp.view.table.ui.swt/META-INF/MANIFEST.MF
index 1eb1232..2035c4f 100644
--- a/bundles/org.eclipse.emf.ecp.view.table.ui.swt/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.ecp.view.table.ui.swt/META-INF/MANIFEST.MF
@@ -38,9 +38,7 @@
  org.eclipse.emfforms.spi.core.services.databinding.emf;version="[1.22.0,1.23.0)",
  org.eclipse.jface.bindings.keys;version="0.0.0",
  org.eclipse.jface.databinding.swt;version="0.0.0",
- org.eclipse.jface.databinding.swt.typed;version="0.0.0",
  org.eclipse.jface.databinding.viewers;version="0.0.0",
- org.eclipse.jface.databinding.viewers.typed;version="0.0.0",
  org.eclipse.jface.dialogs;version="0.0.0",
  org.eclipse.jface.layout;version="0.0.0",
  org.eclipse.jface.resource;version="0.0.0",
diff --git a/bundles/org.eclipse.emf.ecp.view.table.ui.swt/src/org/eclipse/emf/ecp/view/spi/table/swt/ItemProviderEnumCellEditor.java b/bundles/org.eclipse.emf.ecp.view.table.ui.swt/src/org/eclipse/emf/ecp/view/spi/table/swt/ItemProviderEnumCellEditor.java
index 3fa39c1..594f556 100644
--- a/bundles/org.eclipse.emf.ecp.view.table.ui.swt/src/org/eclipse/emf/ecp/view/spi/table/swt/ItemProviderEnumCellEditor.java
+++ b/bundles/org.eclipse.emf.ecp.view.table.ui.swt/src/org/eclipse/emf/ecp/view/spi/table/swt/ItemProviderEnumCellEditor.java
@@ -55,7 +55,7 @@
 import org.eclipse.emfforms.spi.common.report.AbstractReport;
 import org.eclipse.emfforms.spi.common.report.ReportService;
 import org.eclipse.emfforms.spi.localization.EMFFormsLocalizationService;
-import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
+import org.eclipse.jface.databinding.viewers.ViewerProperties;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent;
@@ -431,8 +431,9 @@
 			ItemProviderEnumCellEditor.this.doSetValue(value);
 		}
 
+		@SuppressWarnings("rawtypes")
 		@Override
-		public IObservableValue<Object> observe(Object source) {
+		public IObservableValue observe(Object source) {
 			if (source != ItemProviderEnumCellEditor.this) {
 				return Observables.constantObservableValue(null);
 			}
diff --git a/bundles/org.eclipse.emf.ecp.view.table.ui.swt/src/org/eclipse/emf/ecp/view/spi/table/swt/TableControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.table.ui.swt/src/org/eclipse/emf/ecp/view/spi/table/swt/TableControlSWTRenderer.java
index 6f8bfea..c2979c7 100644
--- a/bundles/org.eclipse.emf.ecp.view.table.ui.swt/src/org/eclipse/emf/ecp/view/spi/table/swt/TableControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.table.ui.swt/src/org/eclipse/emf/ecp/view/spi/table/swt/TableControlSWTRenderer.java
@@ -168,7 +168,7 @@
 import org.eclipse.emfforms.spi.swt.table.action.ViewerActionContext;
 import org.eclipse.emfforms.view.spi.multisegment.model.MultiSegmentUtil;
 import org.eclipse.emfforms.view.spi.multisegment.model.VMultiDomainModelReferenceSegment;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
 import org.eclipse.jface.databinding.viewers.ObservableMapCellLabelProvider;
 import org.eclipse.jface.dialogs.IDialogConstants;
@@ -390,6 +390,7 @@
 		return renderTableControl(gridCell, parent);
 	}
 
+	@SuppressWarnings("unchecked")
 	@Override
 	protected Control createLabel(final Composite parent) {
 		final VDomainModelReference dmrToCheck = getDMRToMultiReference();
@@ -445,8 +446,8 @@
 				actionConfiguration);
 
 			/* get the label text/tooltip */
-			final IObservableValue<String> labelText = getLabelText(dmrToCheck);
-			final IObservableValue<String> labelTooltipText = getLabelTooltipText(dmrToCheck);
+			final IObservableValue<?> labelText = getLabelText(dmrToCheck);
+			final IObservableValue<?> labelTooltipText = getLabelTooltipText(dmrToCheck);
 
 			/* content provider */
 			final ObservableListContentProvider cp = new ObservableListContentProvider();
@@ -736,8 +737,8 @@
 	// CHECKSTYLE.OFF: ParameterNumber
 	protected TableViewerSWTBuilder createTableViewerSWTBuilder(Composite parent,
 		@SuppressWarnings("rawtypes") IObservableList list,
-		IObservableValue<String> labelText, IObservableValue<String> labelTooltipText,
-		TableViewerCompositeBuilder compositeBuilder,
+		@SuppressWarnings("rawtypes") IObservableValue labelText,
+		@SuppressWarnings("rawtypes") IObservableValue labelTooltipText, TableViewerCompositeBuilder compositeBuilder,
 		ObservableListContentProvider cp, ECPTableViewerComparator comparator,
 		TableActionBar<? extends AbstractTableViewer> actionBar) {
 		// CHECKSTYLE.ON: ParameterNumber
@@ -766,8 +767,8 @@
 	// CHECKSTYLE.OFF: ParameterNumber
 	protected TableViewerSWTBuilder createTableViewerSWTBuilder(Composite parent,
 		@SuppressWarnings("rawtypes") IObservableList list,
-		IObservableValue<String> labelText,
-		IObservableValue<String> labelTooltipText, TableViewerCompositeBuilder compositeBuilder,
+		@SuppressWarnings("rawtypes") IObservableValue labelText,
+		@SuppressWarnings("rawtypes") IObservableValue labelTooltipText, TableViewerCompositeBuilder compositeBuilder,
 		ObservableListContentProvider cp, ViewerComparator comparator,
 		TableActionBar<? extends AbstractTableViewer> actionBar) {
 		// CHECKSTYLE.ON: ParameterNumber
@@ -924,8 +925,8 @@
 		for (int i = 0; i < columns.size(); i++) {
 			try {
 				final VDomainModelReference dmr = columns.get(i);
-				final IObservableValue<String> text = getLabelTextForColumn(dmr, clazz);
-				final IObservableValue<String> tooltip = getLabelTooltipTextForColumn(dmr, clazz);
+				final IObservableValue<?> text = getLabelTextForColumn(dmr, clazz);
+				final IObservableValue<?> tooltip = getLabelTooltipTextForColumn(dmr, clazz);
 
 				// Use the same editing domain for the columns as for the view's domain object
 				final EditingDomain editingDomain = getEditingDomain(getViewModelContext().getDomainModel());
@@ -1014,7 +1015,7 @@
 		tableViewerComposite.setComparator(comparator, sortableColumns);
 	}
 
-	private IObservableValue<String> getLabelText(VDomainModelReference dmrToCheck) {
+	private IObservableValue<?> getLabelText(VDomainModelReference dmrToCheck) {
 		switch (getVElement().getLabelAlignment()) {
 		case NONE:
 			return Observables.constantObservableValue("", String.class); //$NON-NLS-1$
@@ -1029,8 +1030,7 @@
 		}
 	}
 
-	@SuppressWarnings("unchecked")
-	private IObservableValue<String> getLabelTextForColumn(VDomainModelReference dmrToCheck, EClass dmrRootEClass) {
+	private IObservableValue<?> getLabelTextForColumn(VDomainModelReference dmrToCheck, EClass dmrRootEClass) {
 		try {
 			// See whether the view model specifies a label for the column
 			final Optional<VEnablementConfiguration> config = TableConfigurationHelper
@@ -1038,6 +1038,7 @@
 			if (config.isPresent()) {
 				final String label = config.get().getLabel();
 				if (label != null && !label.isEmpty()) {
+					@SuppressWarnings("unchecked")
 					final IValueProperty<VElement, String> labelProperty = EMFProperties
 						.value(VViewPackage.Literals.ELEMENT__LABEL);
 					return labelProperty.observe(config.get());
@@ -1051,7 +1052,7 @@
 		}
 	}
 
-	private IObservableValue<String> getLabelTooltipText(VDomainModelReference dmrToCheck) {
+	private IObservableValue<?> getLabelTooltipText(VDomainModelReference dmrToCheck) {
 		switch (getVElement().getLabelAlignment()) {
 		case NONE:
 			return Observables.constantObservableValue("", String.class); //$NON-NLS-1$
@@ -1066,8 +1067,7 @@
 		}
 	}
 
-	private IObservableValue<String> getLabelTooltipTextForColumn(VDomainModelReference dmrToCheck,
-		EClass dmrRootEClass) {
+	private IObservableValue<?> getLabelTooltipTextForColumn(VDomainModelReference dmrToCheck, EClass dmrRootEClass) {
 		try {
 			return getEMFFormsLabelProvider().getDescription(dmrToCheck, dmrRootEClass);
 		} catch (final NoLabelFoundException e) {
diff --git a/bundles/org.eclipse.emf.ecp.view.template.tooling/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.ecp.view.template.tooling/META-INF/MANIFEST.MF
index 30f3bce..bbd6663 100644
--- a/bundles/org.eclipse.emf.ecp.view.template.tooling/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emf.ecp.view.template.tooling/META-INF/MANIFEST.MF
@@ -42,7 +42,6 @@
  org.eclipse.emfforms.spi.common.report;version="[1.22.0,1.23.0)",
  org.eclipse.emfforms.spi.core.services.databinding.emf;version="[1.22.0,1.23.0)",
  org.eclipse.jface.databinding.swt;version="0.0.0",
- org.eclipse.jface.databinding.swt.typed;version="0.0.0",
  org.osgi.service.component.annotations;version="1.2.0"
 Automatic-Module-Name: org.eclipse.emf.ecp.view.template.tooling
 Service-Component: OSGI-INF/DmrSelectorSegmentDmrControlSWTRendererService.xml
diff --git a/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/Activator.java b/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/Activator.java
index f37c1e6..73294e4 100644
--- a/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/Activator.java
+++ b/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/Activator.java
@@ -15,8 +15,10 @@
 
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.emfforms.spi.common.report.ReportService;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
 
 /**
  * The activator class controls the plug-in life cycle.
@@ -28,6 +30,8 @@
 
 	private static Activator plugin;
 
+	private ServiceReference<ReportService> reportServiceReference;
+
 	/**
 	 * The constructor.
 	 */
@@ -43,6 +47,9 @@
 		plugin = this;
 	}
 
+	/**
+	 * {@inheritDoc}
+	 */
 	@Override
 	public void stop(BundleContext context) throws Exception {
 		plugin = null;
diff --git a/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/AttributeSelectControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/AttributeSelectControlSWTRenderer.java
index 30f495d..786e880 100644
--- a/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/AttributeSelectControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/AttributeSelectControlSWTRenderer.java
@@ -41,6 +41,7 @@
  * @author Eugen Neufeld
  *
  */
+@SuppressWarnings("restriction")
 public class AttributeSelectControlSWTRenderer extends EditableEReferenceLabelControlSWTRenderer {
 
 	/**
diff --git a/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/AttributeValueControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/AttributeValueControlSWTRenderer.java
index d94e212..f98e691 100644
--- a/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/AttributeValueControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/AttributeValueControlSWTRenderer.java
@@ -34,7 +34,7 @@
 import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedReport;
 import org.eclipse.emfforms.spi.core.services.databinding.EMFFormsDatabinding;
 import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
 import org.eclipse.swt.SWT;
@@ -89,12 +89,23 @@
 			VT_VIEW_TEMPLATEPROVIDER);
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer#createBindings(org.eclipse.swt.widgets.Control,
+	 *      org.eclipse.emf.ecore.EStructuralFeature.Setting)
+	 */
 	@Override
 	protected Binding[] createBindings(Control control) throws DatabindingFailedException {
 		final Label label = (Label) Composite.class.cast(control).getChildren()[0];
 		final Binding binding = getDataBindingContext().bindValue(WidgetProperties.text().observe(label),
 			getModelValue(), withPreSetValidation(new UpdateValueStrategy()), new UpdateValueStrategy() {
 
+				/**
+				 * {@inheritDoc}
+				 *
+				 * @see org.eclipse.core.databinding.UpdateValueStrategy#convert(java.lang.Object)
+				 */
 				@Override
 				public Object convert(Object value) {
 					return super.convert(value).toString();
@@ -104,6 +115,12 @@
 		return new Binding[] { binding };
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer#createSWTControl(org.eclipse.swt.widgets.Composite,
+	 *      org.eclipse.emf.ecore.EStructuralFeature.Setting)
+	 */
 	@Override
 	protected Control createSWTControl(final Composite parent) {
 		final Composite composite = new Composite(parent, SWT.NONE);
@@ -117,6 +134,11 @@
 		GridDataFactory.fillDefaults().align(SWT.BEGINNING, SWT.BEGINNING).grab(false, false).applyTo(button);
 
 		button.addSelectionListener(new SelectionAdapter() {
+			/**
+			 * {@inheritDoc}
+			 *
+			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+			 */
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				super.widgetSelected(e);
@@ -144,6 +166,11 @@
 		return composite;
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTRenderer#getUnsetText()
+	 */
 	@Override
 	protected String getUnsetText() {
 		return Messages.AttributeValueControlSWTRenderer_UnsetAttributeMessage;
diff --git a/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/DMRSelectorControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/DMRSelectorControlSWTRenderer.java
index 75d9a4b..ca6822f 100644
--- a/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/DMRSelectorControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/DMRSelectorControlSWTRenderer.java
@@ -46,6 +46,7 @@
  * @author Eugen Neufeld
  *
  */
+@SuppressWarnings("restriction")
 public class DMRSelectorControlSWTRenderer extends EditableEReferenceLabelControlSWTRenderer {
 
 	/**
diff --git a/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/HexColorSelectionControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/HexColorSelectionControlSWTRenderer.java
index 4e5a5e5..9c74d01 100644
--- a/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/HexColorSelectionControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/HexColorSelectionControlSWTRenderer.java
@@ -32,7 +32,7 @@
 import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedReport;
 import org.eclipse.emfforms.spi.core.services.databinding.EMFFormsDatabinding;
 import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
 import org.eclipse.swt.SWT;
@@ -87,24 +87,30 @@
 			VT_VIEW_TEMPLATEPROVIDER);
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer#createBindings(org.eclipse.swt.widgets.Control,
+	 *      org.eclipse.emf.ecore.EStructuralFeature.Setting)
+	 */
 	@Override
 	protected Binding[] createBindings(Control control) throws DatabindingFailedException {
 		final Composite composite = Composite.class.cast(control);
 		final Control childControl = composite.getChildren()[0];
-		final IObservableValue<Color> value = WidgetProperties.background().observe(childControl);
+		final IObservableValue value = WidgetProperties.background().observe(childControl);
 		final Binding binding = getDataBindingContext().bindValue(value, getModelValue(),
-			withPreSetValidation(new UpdateValueStrategy<Color, String>() {
+			withPreSetValidation(new UpdateValueStrategy() {
 				@Override
-				public String convert(Color value) {
+				public Object convert(Object value) {
 					if (value == null) {
 						return null;
 					}
-					return getString(value.getRGB());
+					return getString(Color.class.cast(value).getRGB());
 				}
-			}), new UpdateValueStrategy<String, Color>() {
+			}), new UpdateValueStrategy() {
 				@Override
-				public Color convert(String value) {
-					final String hexString = value;
+				public Object convert(Object value) {
+					final String hexString = (String) value;
 					if (hexString == null) {
 						return null;
 					}
@@ -121,6 +127,11 @@
 		return new Binding[] { binding, textBinding };
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer#createSWTControl(org.eclipse.swt.widgets.Composite)
+	 */
 	@Override
 	protected Control createSWTControl(final Composite parent) {
 		final Composite composite = new Composite(parent, SWT.NONE);
@@ -133,6 +144,11 @@
 		selectColorBtn.setText(Messages.HexColorSelectionControlSWTRenderer_SelectColorBtn);
 		selectColorBtn.addSelectionListener(new SelectionAdapter() {
 
+			/**
+			 * {@inheritDoc}
+			 *
+			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+			 */
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				super.widgetSelected(e);
@@ -185,8 +201,14 @@
 		editingDomain.getCommandStack().execute(command);
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTRenderer#getUnsetText()
+	 */
 	@Override
 	protected String getUnsetText() {
+		// TODO Auto-generated method stub
 		return null;
 	}
 
diff --git a/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/URLSelectionControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/URLSelectionControlSWTRenderer.java
index 3241303..e8ff02b 100644
--- a/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/URLSelectionControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/URLSelectionControlSWTRenderer.java
@@ -38,7 +38,7 @@
 import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedReport;
 import org.eclipse.emfforms.spi.core.services.databinding.EMFFormsDatabinding;
 import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
 import org.eclipse.jface.viewers.ILabelProvider;
@@ -98,20 +98,31 @@
 			VT_VIEW_TEMPLATEPROVIDER);
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer#createBindings(org.eclipse.swt.widgets.Control,
+	 *      org.eclipse.emf.ecore.EStructuralFeature.Setting)
+	 */
 	@Override
 	protected Binding[] createBindings(Control control) throws DatabindingFailedException {
 		final Composite composite = Composite.class.cast(control);
 		final Control childControl = composite.getChildren()[0];
-		final IObservableValue<String> value = WidgetProperties.text().observe(childControl);
+		final IObservableValue value = WidgetProperties.text().observe(childControl);
 		final Binding binding = getDataBindingContext().bindValue(value, getModelValue(),
 			withPreSetValidation(new UpdateValueStrategy()), null);
 
-		final IObservableValue<String> toolTip = WidgetProperties.tooltipText().observe(childControl);
+		final IObservableValue toolTip = WidgetProperties.tooltipText().observe(childControl);
 		final Binding tooltipBinding = getDataBindingContext().bindValue(toolTip, getModelValue(),
 			withPreSetValidation(new UpdateValueStrategy()), null);
 		return new Binding[] { binding, tooltipBinding };
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer#createSWTControl(org.eclipse.swt.widgets.Composite)
+	 */
 	@Override
 	protected Control createSWTControl(Composite parent) {
 		final Composite composite = new Composite(parent, SWT.NONE);
@@ -125,6 +136,11 @@
 		selectExternFileButton.setText(Messages.URLSelectionControlSWTRenderer_SelectExternalFileBtn);
 		selectExternFileButton.addSelectionListener(new SelectionAdapter() {
 
+			/**
+			 * {@inheritDoc}
+			 *
+			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+			 */
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				super.widgetSelected(e);
@@ -151,6 +167,11 @@
 		selectWorkspaceFileButton.setText(Messages.URLSelectionControlSWTRenderer_SelectWorkspaceFileBtn);
 		selectWorkspaceFileButton.addSelectionListener(new SelectionAdapter() {
 
+			/**
+			 * {@inheritDoc}
+			 *
+			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+			 */
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				super.widgetSelected(e);
@@ -192,6 +213,11 @@
 		editingDomain.getCommandStack().execute(command);
 	}
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTRenderer#getUnsetText()
+	 */
 	@Override
 	protected String getUnsetText() {
 		return Messages.URLSelectionControlSWTRenderer_UnsetText;
diff --git a/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/ViewModelSelectControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/ViewModelSelectControlSWTRenderer.java
index 72b3c81..202cb52 100644
--- a/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/ViewModelSelectControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.template.tooling/src/org/eclipse/emf/ecp/view/template/internal/tooling/controls/ViewModelSelectControlSWTRenderer.java
@@ -48,6 +48,7 @@
  * @author Eugen Neufeld
  *
  */
+@SuppressWarnings("restriction")
 public class ViewModelSelectControlSWTRenderer extends EditableEReferenceLabelControlSWTRenderer {
 
 	/**
@@ -64,6 +65,11 @@
 
 	private static final String PLUGIN_ID = "org.eclipse.emf.ecp.view.template.tooling"; //$NON-NLS-1$
 
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.eclipse.emf.ecp.view.internal.editor.controls.EditableEReferenceLabelControlSWTRenderer#linkValue(org.eclipse.swt.widgets.Shell)
+	 */
 	@Override
 	protected void linkValue(Shell shell) {
 		final ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(new AdapterFactory[] {
diff --git a/bundles/org.eclipse.emfforms.core.services.emf/src/org/eclipse/emfforms/internal/core/services/label/EMFFormsLabelProviderDefaultImpl.java b/bundles/org.eclipse.emfforms.core.services.emf/src/org/eclipse/emfforms/internal/core/services/label/EMFFormsLabelProviderDefaultImpl.java
index 7edbd4d..e001ebe 100644
--- a/bundles/org.eclipse.emfforms.core.services.emf/src/org/eclipse/emfforms/internal/core/services/label/EMFFormsLabelProviderDefaultImpl.java
+++ b/bundles/org.eclipse.emfforms.core.services.emf/src/org/eclipse/emfforms/internal/core/services/label/EMFFormsLabelProviderDefaultImpl.java
@@ -78,7 +78,7 @@
 	 * @param structuralFeature The {@link EStructuralFeature}
 	 * @return The localized feature name
 	 */
-	public IObservableValue<String> getDisplayName(EStructuralFeature structuralFeature) {
+	public IObservableValue getDisplayName(EStructuralFeature structuralFeature) {
 		final EClass eContainingClass = structuralFeature.getEContainingClass();
 		if (eContainingClass.isAbstract() || eContainingClass.isInterface()
 			|| eContainingClass.getInstanceClass() == null) {
@@ -90,7 +90,7 @@
 
 	@Deprecated
 	@Override
-	public IObservableValue<String> getDisplayName(VDomainModelReference domainModelReference) {
+	public IObservableValue getDisplayName(VDomainModelReference domainModelReference) {
 		Assert.create(domainModelReference).notNull();
 
 		IValueProperty valueProperty;
@@ -125,7 +125,7 @@
 	}
 
 	@Override
-	public IObservableValue<String> getDisplayName(VDomainModelReference domainModelReference, EClass rootEClass) {
+	public IObservableValue getDisplayName(VDomainModelReference domainModelReference, EClass rootEClass) {
 		Assert.create(domainModelReference).notNull();
 		Assert.create(rootEClass).notNull();
 
@@ -142,7 +142,7 @@
 	}
 
 	@Override
-	public IObservableValue<String> getDisplayName(VDomainModelReference domainModelReference, EObject rootObject) {
+	public IObservableValue getDisplayName(VDomainModelReference domainModelReference, EObject rootObject) {
 		Assert.create(domainModelReference).notNull();
 		Assert.create(rootObject).notNull();
 
@@ -161,7 +161,7 @@
 		return getDisplayNameObservableValue(value, structuralFeature);
 	}
 
-	private IObservableValue<String> getDisplayNameObservableValue(EObject containingEObject,
+	private IObservableValue getDisplayNameObservableValue(EObject containingEObject,
 		EStructuralFeature structuralFeature) {
 		final IItemPropertyDescriptor itemPropertyDescriptor = emfSpecificService.getIItemPropertyDescriptor(
 			containingEObject, structuralFeature);
@@ -175,7 +175,7 @@
 
 	@Deprecated
 	@Override
-	public IObservableValue<String> getDescription(VDomainModelReference domainModelReference) {
+	public IObservableValue getDescription(VDomainModelReference domainModelReference) {
 		Assert.create(domainModelReference).notNull();
 
 		IValueProperty valueProperty;
@@ -196,7 +196,7 @@
 	}
 
 	@Override
-	public IObservableValue<String> getDescription(VDomainModelReference domainModelReference, EClass rootEClass) {
+	public IObservableValue getDescription(VDomainModelReference domainModelReference, EClass rootEClass) {
 		Assert.create(domainModelReference).notNull();
 		Assert.create(rootEClass).notNull();
 
@@ -218,7 +218,7 @@
 	}
 
 	@Override
-	public IObservableValue<String> getDescription(VDomainModelReference domainModelReference, EObject rootObject) {
+	public IObservableValue getDescription(VDomainModelReference domainModelReference, EObject rootObject) {
 		Assert.create(domainModelReference).notNull();
 		Assert.create(rootObject).notNull();
 
@@ -237,8 +237,7 @@
 		return getDescriptionObservable(value, structuralFeature);
 	}
 
-	private IObservableValue<String> getDescriptionObservable(EObject containingEObject,
-		EStructuralFeature structuralFeature) {
+	private IObservableValue getDescriptionObservable(EObject containingEObject, EStructuralFeature structuralFeature) {
 		final IItemPropertyDescriptor itemPropertyDescriptor = emfSpecificService.getIItemPropertyDescriptor(
 			containingEObject, structuralFeature);
 		if (itemPropertyDescriptor == null) {
@@ -249,7 +248,7 @@
 		return getConstantObservableValue(itemPropertyDescriptor.getDescription(containingEObject));
 	}
 
-	private IObservableValue<String> getConstantObservableValue(String value) {
+	private IObservableValue getConstantObservableValue(String value) {
 		return Observables.constantObservableValue(value, String.class);
 	}
 
diff --git a/bundles/org.eclipse.emfforms.core.services.emf/src/org/eclipse/emfforms/internal/core/services/label/EMFFormsLabelProviderImpl.java b/bundles/org.eclipse.emfforms.core.services.emf/src/org/eclipse/emfforms/internal/core/services/label/EMFFormsLabelProviderImpl.java
index e836887..0ac68d1 100644
--- a/bundles/org.eclipse.emfforms.core.services.emf/src/org/eclipse/emfforms/internal/core/services/label/EMFFormsLabelProviderImpl.java
+++ b/bundles/org.eclipse.emfforms.core.services.emf/src/org/eclipse/emfforms/internal/core/services/label/EMFFormsLabelProviderImpl.java
@@ -139,8 +139,8 @@
 	private ReportService reportService;
 	private BundleResolver bundleResolver = BundleResolverFactory.createBundleResolver();
 
-	private final Map<WritableValue<String>, BundleKeyWrapper> displayKeyObservableMap = new WeakHashMap<WritableValue<String>, BundleKeyWrapper>();
-	private final Map<WritableValue<String>, DescriptionKey> descriptionKeyObservableMap = new WeakHashMap<WritableValue<String>, DescriptionKey>();
+	private final Map<WritableValue, BundleKeyWrapper> displayKeyObservableMap = new WeakHashMap<WritableValue, BundleKeyWrapper>();
+	private final Map<WritableValue, DescriptionKey> descriptionKeyObservableMap = new WeakHashMap<WritableValue, DescriptionKey>();
 	private EMFFormsLocaleProvider localeProvider;
 	private EMFFormsLabelProviderDefaultImpl labelProviderDefault;
 
@@ -219,14 +219,13 @@
 		try {
 			return getDisplayBundleKeyResultWrapper(structuralFeature).getResult();
 		} catch (final NoBundleFoundException ex) {
-			return labelProviderDefault.getDisplayName(structuralFeature).getValue();
+			return (String) labelProviderDefault.getDisplayName(structuralFeature).getValue();
 		}
 	}
 
 	@Deprecated
 	@Override
-	public IObservableValue<String> getDisplayName(VDomainModelReference domainModelReference)
-		throws NoLabelFoundException {
+	public IObservableValue getDisplayName(VDomainModelReference domainModelReference) throws NoLabelFoundException {
 		Assert.create(domainModelReference).notNull();
 
 		IValueProperty valueProperty;
@@ -244,13 +243,13 @@
 			return labelProviderDefault.getDisplayName(domainModelReference);
 		}
 
-		final WritableValue<String> value = getObservableValue(bundleKeyResultWrapper.getResult());
+		final WritableValue value = getObservableValue(bundleKeyResultWrapper.getResult());
 		displayKeyObservableMap.put(value, bundleKeyResultWrapper.getBundleKeyWrapper());
 		return value;
 	}
 
 	@Override
-	public IObservableValue<String> getDisplayName(VDomainModelReference domainModelReference, EClass rootEClass)
+	public IObservableValue getDisplayName(VDomainModelReference domainModelReference, EClass rootEClass)
 		throws NoLabelFoundException {
 		Assert.create(domainModelReference).notNull();
 		Assert.create(rootEClass).notNull();
@@ -271,13 +270,13 @@
 			return labelProviderDefault.getDisplayName(domainModelReference, rootEClass);
 		}
 
-		final WritableValue<String> displayObserveValue = getObservableValue(displayBundleKeyResultWrapper.getResult());
+		final WritableValue displayObserveValue = getObservableValue(displayBundleKeyResultWrapper.getResult());
 		displayKeyObservableMap.put(displayObserveValue, displayBundleKeyResultWrapper.getBundleKeyWrapper());
 		return displayObserveValue;
 	}
 
 	@Override
-	public IObservableValue<String> getDisplayName(VDomainModelReference domainModelReference, EObject rootObject)
+	public IObservableValue getDisplayName(VDomainModelReference domainModelReference, EObject rootObject)
 		throws NoLabelFoundException {
 		Assert.create(domainModelReference).notNull();
 		Assert.create(rootObject).notNull();
@@ -287,8 +286,7 @@
 
 	@Deprecated
 	@Override
-	public IObservableValue<String> getDescription(VDomainModelReference domainModelReference)
-		throws NoLabelFoundException {
+	public IObservableValue getDescription(VDomainModelReference domainModelReference) throws NoLabelFoundException {
 		Assert.create(domainModelReference).notNull();
 
 		IValueProperty valueProperty;
@@ -306,7 +304,7 @@
 		} catch (final NoBundleFoundException ex) {
 			return labelProviderDefault.getDescription(domainModelReference);
 		}
-		final WritableValue<String> writableValue = getObservableValue(getDescription(eContainingClass
+		final WritableValue writableValue = getObservableValue(getDescription(eContainingClass
 			.getName(),
 			structuralFeature.getName(), bundle));
 		descriptionKeyObservableMap.put(writableValue, new DescriptionKey(eContainingClass.getName(),
@@ -315,7 +313,7 @@
 	}
 
 	@Override
-	public IObservableValue<String> getDescription(VDomainModelReference domainModelReference, EClass rootEClass)
+	public IObservableValue getDescription(VDomainModelReference domainModelReference, EClass rootEClass)
 		throws NoLabelFoundException {
 		Assert.create(domainModelReference).notNull();
 		Assert.create(rootEClass).notNull();
@@ -338,7 +336,7 @@
 	}
 
 	@Override
-	public IObservableValue<String> getDescription(VDomainModelReference domainModelReference, EObject rootObject)
+	public IObservableValue getDescription(VDomainModelReference domainModelReference, EObject rootObject)
 		throws NoLabelFoundException {
 		Assert.create(domainModelReference).notNull();
 		Assert.create(rootObject).notNull();
@@ -360,19 +358,18 @@
 		return createDescriptionObservableValue(structuralFeature, bundle);
 	}
 
-	private IObservableValue<String> createDescriptionObservableValue(final EStructuralFeature structuralFeature,
+	private IObservableValue createDescriptionObservableValue(final EStructuralFeature structuralFeature,
 		Bundle bundle) {
-		final WritableValue<String> writableValue = getObservableValue(
-			getDescription(structuralFeature.getEContainingClass()
-				.getName(), structuralFeature.getName(), bundle));
+		final WritableValue writableValue = getObservableValue(getDescription(structuralFeature.getEContainingClass()
+			.getName(), structuralFeature.getName(), bundle));
 		descriptionKeyObservableMap.put(writableValue,
 			new DescriptionKey(structuralFeature.getEContainingClass().getName(),
 				structuralFeature.getName(), bundle));
 		return writableValue;
 	}
 
-	private WritableValue<String> getObservableValue(String value) {
-		return new WritableValue<String>(value, String.class);
+	private WritableValue getObservableValue(String value) {
+		return new WritableValue(value, String.class);
 	}
 
 	private String getDisplayName(Bundle bundle, String key) {
@@ -401,16 +398,16 @@
 	 */
 	@Override
 	public void notifyLocaleChange() {
-		for (final Entry<WritableValue<String>, BundleKeyWrapper> entry : displayKeyObservableMap.entrySet()) {
-			final WritableValue<String> writableValue = entry.getKey();
+		for (final Entry<WritableValue, BundleKeyWrapper> entry : displayKeyObservableMap.entrySet()) {
+			final WritableValue writableValue = entry.getKey();
 			if (writableValue.isDisposed()) {
 				continue;
 			}
 			final BundleKeyWrapper displayNameKey = entry.getValue();
 			writableValue.setValue(getDisplayName(displayNameKey.getBundle(), displayNameKey.getKey()));
 		}
-		for (final Entry<WritableValue<String>, DescriptionKey> entry : descriptionKeyObservableMap.entrySet()) {
-			final WritableValue<String> writableValue = entry.getKey();
+		for (final Entry<WritableValue, DescriptionKey> entry : descriptionKeyObservableMap.entrySet()) {
+			final WritableValue writableValue = entry.getKey();
 			if (writableValue.isDisposed()) {
 				continue;
 			}
diff --git a/bundles/org.eclipse.emfforms.core.services/src/org/eclipse/emfforms/spi/core/services/label/EMFFormsLabelProvider.java b/bundles/org.eclipse.emfforms.core.services/src/org/eclipse/emfforms/spi/core/services/label/EMFFormsLabelProvider.java
index a6b5a6c..a471be5 100644
--- a/bundles/org.eclipse.emfforms.core.services/src/org/eclipse/emfforms/spi/core/services/label/EMFFormsLabelProvider.java
+++ b/bundles/org.eclipse.emfforms.core.services/src/org/eclipse/emfforms/spi/core/services/label/EMFFormsLabelProvider.java
@@ -46,7 +46,7 @@
 	 *             {@link org.eclipse.emf.ecp.view.spi.model.VDomainModelReferenceSegment segments}.
 	 */
 	@Deprecated
-	IObservableValue<String> getDisplayName(VDomainModelReference domainModelReference) throws NoLabelFoundException;
+	IObservableValue getDisplayName(VDomainModelReference domainModelReference) throws NoLabelFoundException;
 
 	/**
 	 * Returns the display name of the referenced domain object resolved for the given root {@link EClass}.
@@ -57,7 +57,7 @@
 	 * @throws NoLabelFoundException if the display name cannot be retrieved
 	 * @since 1.19
 	 */
-	IObservableValue<String> getDisplayName(VDomainModelReference domainModelReference, EClass rootEClass)
+	IObservableValue getDisplayName(VDomainModelReference domainModelReference, EClass rootEClass)
 		throws NoLabelFoundException;
 
 	/**
@@ -68,7 +68,7 @@
 	 * @return The display name as an {@link IObservableValue}
 	 * @throws NoLabelFoundException if the display name cannot be retrieved
 	 */
-	IObservableValue<String> getDisplayName(VDomainModelReference domainModelReference, EObject rootObject)
+	IObservableValue getDisplayName(VDomainModelReference domainModelReference, EObject rootObject)
 		throws NoLabelFoundException;
 
 	/**
@@ -78,7 +78,7 @@
 	 * <p>
 	 * <strong>Important:</strong> Does not work with DMRs which use segments
 	 * </p>
-	 *
+	 * 
 	 * @param domainModelReference The {@link VDomainModelReference} referencing the model object
 	 * @return The description as an {@link IObservableValue}
 	 * @throws NoLabelFoundException if the description cannot be retrieved
@@ -86,7 +86,7 @@
 	 *             {@link org.eclipse.emf.ecp.view.spi.model.VDomainModelReferenceSegment segments}.
 	 */
 	@Deprecated
-	IObservableValue<String> getDescription(VDomainModelReference domainModelReference) throws NoLabelFoundException;
+	IObservableValue getDescription(VDomainModelReference domainModelReference) throws NoLabelFoundException;
 
 	/**
 	 * Returns the description of the referenced domain object resolved for the given root {@link EClass}.
@@ -97,7 +97,7 @@
 	 * @throws NoLabelFoundException if the description cannot be retrieved
 	 * @since 1.19
 	 */
-	IObservableValue<String> getDescription(VDomainModelReference domainModelReference, EClass rootEClass)
+	IObservableValue getDescription(VDomainModelReference domainModelReference, EClass rootEClass)
 		throws NoLabelFoundException;
 
 	/**
@@ -108,6 +108,6 @@
 	 * @return The description as an {@link IObservableValue}
 	 * @throws NoLabelFoundException if the description cannot be retrieved
 	 */
-	IObservableValue<String> getDescription(VDomainModelReference domainModelReference, EObject rootObject)
+	IObservableValue getDescription(VDomainModelReference domainModelReference, EObject rootObject)
 		throws NoLabelFoundException;
 }
diff --git a/bundles/org.eclipse.emfforms.editor.ecore/src/org/eclipse/emfforms/internal/editor/ecore/controls/DataTypeControl.java b/bundles/org.eclipse.emfforms.editor.ecore/src/org/eclipse/emfforms/internal/editor/ecore/controls/DataTypeControl.java
index 237d7ba..cdce36f 100644
--- a/bundles/org.eclipse.emfforms.editor.ecore/src/org/eclipse/emfforms/internal/editor/ecore/controls/DataTypeControl.java
+++ b/bundles/org.eclipse.emfforms.editor.ecore/src/org/eclipse/emfforms/internal/editor/ecore/controls/DataTypeControl.java
@@ -36,7 +36,7 @@
 import org.eclipse.emfforms.spi.core.services.databinding.EMFFormsDatabinding;
 import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
 import org.eclipse.emfforms.spi.editor.helpers.ResourceSetHelpers;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.fieldassist.AutoCompleteField;
 import org.eclipse.jface.fieldassist.ComboContentAdapter;
 import org.eclipse.jface.viewers.ArrayContentProvider;
diff --git a/bundles/org.eclipse.emfforms.editor.ecore/src/org/eclipse/emfforms/internal/editor/ecore/controls/TypedElementBoundsRenderer.java b/bundles/org.eclipse.emfforms.editor.ecore/src/org/eclipse/emfforms/internal/editor/ecore/controls/TypedElementBoundsRenderer.java
index 2ba2b95..f3b2a53 100644
--- a/bundles/org.eclipse.emfforms.editor.ecore/src/org/eclipse/emfforms/internal/editor/ecore/controls/TypedElementBoundsRenderer.java
+++ b/bundles/org.eclipse.emfforms.editor.ecore/src/org/eclipse/emfforms/internal/editor/ecore/controls/TypedElementBoundsRenderer.java
@@ -45,7 +45,7 @@
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridDescription;
 import org.eclipse.jface.databinding.swt.ISWTObservableValue;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
 import org.eclipse.swt.SWT;
@@ -211,57 +211,57 @@
 		return LocalizationServiceHelper.getString(TypedElementBoundsRenderer.class, string);
 	}
 
-	@SuppressWarnings("unchecked")
 	private void createDataBindings(final Spinner lowerBound, final Spinner upperBound, Button unbounded) {
 		final EObject domainObject = getViewModelContext().getDomainModel();
 		final DataBindingContext dbc = getDataBindingContext();
 
-		final ISWTObservableValue<Integer> lowerBoundSelectionTargetValue = WidgetProperties.spinnerSelection()
-			.observe(lowerBound);
-		final IObservableValue<Integer> lowerBoundModelValue = EMFEditObservables.observeValue(
-			getEditingDomain(domainObject),
+		final ISWTObservableValue lowerBoundSelectionTargetValue = WidgetProperties.selection().observe(lowerBound);
+		final IObservableValue lowerBoundModelValue = EMFEditObservables.observeValue(getEditingDomain(domainObject),
 			domainObject, EcorePackage.eINSTANCE.getETypedElement_LowerBound());
 		dbc.bindValue(lowerBoundSelectionTargetValue, lowerBoundModelValue);
 
-		final IObservableValue<Integer> upperBoundModelValue = EMFEditObservables.observeValue(
-			getEditingDomain(domainObject),
+		final IObservableValue upperBoundModelValue = EMFEditObservables.observeValue(getEditingDomain(domainObject),
 			domainObject, EcorePackage.eINSTANCE.getETypedElement_UpperBound());
-		final ISWTObservableValue<Integer> upperBoundSelectionTargetValue = WidgetProperties.spinnerSelection()
-			.observe(upperBound);
+		final ISWTObservableValue upperBoundSelectionTargetValue = WidgetProperties.selection().observe(upperBound);
 		dbc.bindValue(upperBoundSelectionTargetValue, upperBoundModelValue);
 
 		bindUpperAndLowerBounds(dbc, lowerBoundModelValue, upperBoundModelValue);
 
 		/* Disable the upperBound spinner when it's value is set to -1 */
-		final ISWTObservableValue<Boolean> upperBoundEnabledTargetValue = WidgetProperties.enabled()
-			.observe(upperBound);
+		final ISWTObservableValue upperBoundEnabledTargetValue = WidgetProperties.enabled().observe(upperBound);
 		dbc.bindValue(upperBoundEnabledTargetValue, upperBoundModelValue, null,
-			new UpdateValueStrategy<Integer, Boolean>() {
+			new UpdateValueStrategy() {
 				@Override
-				public Boolean convert(Integer value) {
+				public Object convert(Object value) {
 					// model to target
-					return value != -1;
+					if (!Integer.class.isInstance(value)) {
+						return null;
+					}
+					return (Integer) value != -1;
 				}
 			});
 
 		/* The unbounded checkbox is selected, when the upperBound value is -1 (and vice versa) */
-		final ISWTObservableValue<Boolean> unboundedSelectionTargetValue = WidgetProperties.buttonSelection()
-			.observe(unbounded);
+		final ISWTObservableValue unboundedSelectionTargetValue = WidgetProperties.selection().observe(unbounded);
 		dbc.bindValue(unboundedSelectionTargetValue, upperBoundModelValue,
-			new UpdateValueStrategy<Boolean, Integer>() {
+			new UpdateValueStrategy() {
 				@Override
-				public Integer convert(Boolean unbounded) {
+				public Object convert(Object value) {
 					// target to model
+					final Boolean unbounded = (Boolean) value;
 					if (!unbounded) {
 						return Math.max(1, lowerBound.getSelection());
 					}
 					return -1;
 				}
-			}, new UpdateValueStrategy<Integer, Boolean>() {
+			}, new UpdateValueStrategy() {
 				@Override
-				public Boolean convert(Integer value) {
+				public Object convert(Object value) {
 					// model to target
-					return value == -1;
+					if (!Integer.class.isInstance(value)) {
+						return null;
+					}
+					return (Integer) value == -1;
 				}
 			});
 	}
@@ -270,16 +270,18 @@
 	 * Make sure that the upperBound cannot be lower than the lowerBound and that the lowerBound cannot be higher
 	 * than the upperBound.
 	 */
-	private void bindUpperAndLowerBounds(final DataBindingContext dbc,
-		final IObservableValue<Integer> lowerBoundModelValue,
-		final IObservableValue<Integer> upperBoundModelValue) {
+	private void bindUpperAndLowerBounds(final DataBindingContext dbc, final IObservableValue lowerBoundModelValue,
+		final IObservableValue upperBoundModelValue) {
 		dbc.bindValue(upperBoundModelValue, lowerBoundModelValue,
-			new UpdateValueStrategy<Integer, Integer>() {
+			new UpdateValueStrategy() {
 				@Override
-				public Integer convert(Integer value) {
+				public Object convert(Object value) {
 					// upper value to lower value
-					final Integer upperValue = value;
-					final Integer lowerValue = lowerBoundModelValue.getValue();
+					if (!Integer.class.isInstance(value)) {
+						return null;
+					}
+					final Integer upperValue = (Integer) value;
+					final Integer lowerValue = (Integer) lowerBoundModelValue.getValue();
 					if (upperValue < lowerValue && upperValue != -1) {
 						return upperValue;
 					}
@@ -287,18 +289,21 @@
 				}
 
 				@Override
-				protected IStatus doSet(IObservableValue<? super Integer> observableValue, Integer value) {
+				protected IStatus doSet(IObservableValue observableValue, Object value) {
 					if (observableValue.getValue().equals(value)) {
 						return Status.OK_STATUS;
 					}
 					return super.doSet(observableValue, value);
 				}
-			}, new UpdateValueStrategy<Integer, Integer>() {
+			}, new UpdateValueStrategy() {
 				@Override
-				public Integer convert(Integer value) {
+				public Object convert(Object value) {
 					// lower value to upper value
-					final Integer lowerValue = value;
-					final Integer upperValue = upperBoundModelValue.getValue();
+					if (!Integer.class.isInstance(value)) {
+						return null;
+					}
+					final Integer lowerValue = (Integer) value;
+					final Integer upperValue = (Integer) upperBoundModelValue.getValue();
 					if (upperValue >= 0 && upperValue < lowerValue) {
 						return lowerValue;
 					}
@@ -306,7 +311,7 @@
 				}
 
 				@Override
-				protected IStatus doSet(IObservableValue<? super Integer> observableValue, Integer value) {
+				protected IStatus doSet(IObservableValue observableValue, Object value) {
 					if (observableValue.getValue().equals(value)) {
 						return Status.OK_STATUS;
 					}
diff --git a/bundles/org.eclipse.emfforms.swt.control.multiattribute/META-INF/MANIFEST.MF b/bundles/org.eclipse.emfforms.swt.control.multiattribute/META-INF/MANIFEST.MF
index cfc74e2..dc030ff 100644
--- a/bundles/org.eclipse.emfforms.swt.control.multiattribute/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emfforms.swt.control.multiattribute/META-INF/MANIFEST.MF
@@ -29,7 +29,6 @@
  org.eclipse.core.runtime;version="0.0.0",
  org.eclipse.emf.edit.ui.provider;version="0.0.0",
  org.eclipse.jface.databinding.swt;version="0.0.0",
- org.eclipse.jface.databinding.swt.typed;version="0.0.0",
  org.eclipse.jface.databinding.viewers;version="0.0.0",
  org.eclipse.jface.layout;version="0.0.0",
  org.eclipse.jface.viewers;version="0.0.0",
diff --git a/bundles/org.eclipse.emfforms.swt.control.multiattribute/src/org/eclipse/emfforms/spi/view/control/multiattribute/MultiAttributeSWTRenderer.java b/bundles/org.eclipse.emfforms.swt.control.multiattribute/src/org/eclipse/emfforms/spi/view/control/multiattribute/MultiAttributeSWTRenderer.java
index 458b7b2e..28d2ee7 100644
--- a/bundles/org.eclipse.emfforms.swt.control.multiattribute/src/org/eclipse/emfforms/spi/view/control/multiattribute/MultiAttributeSWTRenderer.java
+++ b/bundles/org.eclipse.emfforms.swt.control.multiattribute/src/org/eclipse/emfforms/spi/view/control/multiattribute/MultiAttributeSWTRenderer.java
@@ -65,7 +65,6 @@
 import org.eclipse.emfforms.spi.swt.core.layout.GridDescriptionFactory;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
 import org.eclipse.emfforms.spi.swt.core.layout.SWTGridDescription;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
 import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
@@ -632,9 +631,12 @@
 
 		final CellEditor cellEditor = createCellEditor(tempInstance, attribute, tableViewer.getTable());
 
-		final IObservableValue<String> textObservableValue = WidgetProperties.text().observe(column.getColumn());
-		final IObservableValue<String> tooltipObservableValue = WidgetProperties.tooltipText()
-			.observe(column.getColumn());
+		@SuppressWarnings("deprecation")
+		final IObservableValue textObservableValue = org.eclipse.jface.databinding.swt.SWTObservables
+			.observeText(column.getColumn());
+		@SuppressWarnings("deprecation")
+		final IObservableValue tooltipObservableValue = org.eclipse.jface.databinding.swt.SWTObservables
+			.observeTooltipText(column.getColumn());
 		try {
 			viewModelDBC.bindValue(textObservableValue, labelService
 				.getDisplayName(getVElement().getDomainModelReference(), getViewModelContext().getDomainModel()));
diff --git a/bundles/org.eclipse.emfforms.swt.control.text.autocomplete/META-INF/MANIFEST.MF b/bundles/org.eclipse.emfforms.swt.control.text.autocomplete/META-INF/MANIFEST.MF
index 17344b4..60f7b79 100644
--- a/bundles/org.eclipse.emfforms.swt.control.text.autocomplete/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emfforms.swt.control.text.autocomplete/META-INF/MANIFEST.MF
@@ -23,7 +23,6 @@
 Import-Package: javax.inject;version="1.0.0",
  org.eclipse.emf.ecp.edit.spi.swt.util;version="[1.22.0,1.23.0)",
  org.eclipse.jface.databinding.swt;version="0.0.0",
- org.eclipse.jface.databinding.swt.typed;version="0.0.0",
  org.eclipse.jface.databinding.viewers;version="0.0.0",
  org.eclipse.jface.fieldassist;version="0.0.0",
  org.eclipse.jface.viewers;version="0.0.0",
diff --git a/bundles/org.eclipse.emfforms.swt.control.text.autocomplete/src/org/eclipse/emfforms/internal/swt/control/text/autocomplete/renderer/AutocompleteTextControlSWTRenderer.java b/bundles/org.eclipse.emfforms.swt.control.text.autocomplete/src/org/eclipse/emfforms/internal/swt/control/text/autocomplete/renderer/AutocompleteTextControlSWTRenderer.java
index 97d0365..d8fafac 100644
--- a/bundles/org.eclipse.emfforms.swt.control.text.autocomplete/src/org/eclipse/emfforms/internal/swt/control/text/autocomplete/renderer/AutocompleteTextControlSWTRenderer.java
+++ b/bundles/org.eclipse.emfforms.swt.control.text.autocomplete/src/org/eclipse/emfforms/internal/swt/control/text/autocomplete/renderer/AutocompleteTextControlSWTRenderer.java
@@ -35,7 +35,7 @@
 import org.eclipse.emfforms.spi.localization.LocalizationServiceHelper;
 import org.eclipse.emfforms.spi.swt.control.text.autocomplete.viewservice.AutocompleteViewModelService;
 import org.eclipse.jface.databinding.swt.ISWTObservableValue;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.fieldassist.AutoCompleteField;
 import org.eclipse.jface.fieldassist.ComboContentAdapter;
 import org.eclipse.jface.viewers.ArrayContentProvider;
@@ -81,7 +81,7 @@
 	 */
 	@Override
 	protected Binding[] createBindings(Viewer viewer) throws DatabindingFailedException {
-		final ISWTObservableValue<String> targetObservable = WidgetProperties.text()
+		final ISWTObservableValue targetObservable = WidgetProperties.text()
 			.observe(ComboViewer.class.cast(viewer).getCombo());
 		final IObservableValue modelObservable = getModelValue();
 		final Binding binding = getDataBindingContext().bindValue(targetObservable, modelObservable);
diff --git a/bundles/org.eclipse.emfforms.swt.control.text.richtext/src/org/eclipse/emfforms/spi/swt/control/text/richtext/renderer/RichTextControlSWTRenderer.java b/bundles/org.eclipse.emfforms.swt.control.text.richtext/src/org/eclipse/emfforms/spi/swt/control/text/richtext/renderer/RichTextControlSWTRenderer.java
index 2c7142e0..c079ef1 100644
--- a/bundles/org.eclipse.emfforms.swt.control.text.richtext/src/org/eclipse/emfforms/spi/swt/control/text/richtext/renderer/RichTextControlSWTRenderer.java
+++ b/bundles/org.eclipse.emfforms.swt.control.text.richtext/src/org/eclipse/emfforms/spi/swt/control/text/richtext/renderer/RichTextControlSWTRenderer.java
@@ -29,7 +29,7 @@
 import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
 import org.eclipse.emfforms.spi.swt.core.layout.EMFFormsSWTLayoutUtil;
 import org.eclipse.emfforms.spi.swt.core.util.PopupWindow;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
 import org.eclipse.swt.SWT;
@@ -233,7 +233,7 @@
 	@Override
 	protected Binding bindValue(Control text, IObservableValue modelValue, DataBindingContext dataBindingContext,
 		UpdateValueStrategy targetToModel, UpdateValueStrategy modelToTarget) {
-		final IObservableValue<String> value = WidgetProperties.text(SWT.NONE).observe(this.text);
+		final IObservableValue value = WidgetProperties.text(SWT.NONE).observe(this.text);
 		binding = dataBindingContext.bindValue(value, modelValue, targetToModel, modelToTarget);
 		return binding;
 	}
diff --git a/bundles/org.eclipse.emfforms.swt.table/META-INF/MANIFEST.MF b/bundles/org.eclipse.emfforms.swt.table/META-INF/MANIFEST.MF
index 005e95a..8c69ae4 100644
--- a/bundles/org.eclipse.emfforms.swt.table/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emfforms.swt.table/META-INF/MANIFEST.MF
@@ -22,7 +22,6 @@
 Import-Package: org.eclipse.emfforms.spi.localization;version="[1.22.0,1.23.0)",
  org.eclipse.jface.bindings.keys;version="0.0.0",
  org.eclipse.jface.databinding.swt;version="0.0.0",
- org.eclipse.jface.databinding.swt.typed;version="0.0.0",
  org.eclipse.jface.databinding.viewers;version="0.0.0",
  org.eclipse.jface.dialogs;version="0.0.0",
  org.eclipse.jface.layout;version="0.0.0",
diff --git a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/internal/swt/table/util/DMREditingSupport.java b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/internal/swt/table/util/DMREditingSupport.java
index 8fd5405..bc17308 100644
--- a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/internal/swt/table/util/DMREditingSupport.java
+++ b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/internal/swt/table/util/DMREditingSupport.java
@@ -21,7 +21,7 @@
 import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
 import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
 import org.eclipse.emfforms.spi.core.services.databinding.EMFFormsDatabinding;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.viewers.CellEditor;
 import org.eclipse.jface.viewers.ColumnViewer;
 import org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent;
@@ -104,7 +104,7 @@
 	@Override
 	protected void initializeCellEditorValue(CellEditor cellEditor, ViewerCell cell) {
 		final EMFDataBindingContext bindingContext = new EMFDataBindingContext();
-		final IObservableValue<String> target = doCreateCellEditorObservable(cellEditor);
+		final IObservableValue target = doCreateCellEditorObservable(cellEditor);
 		final IObservableValue model = valueProperty.observe(cell.getElement());
 		final Binding binding = bindingContext.bindValue(target, model);
 		editingState = new EditingState(bindingContext, binding, target, model);
@@ -116,7 +116,7 @@
 		return cellEditor;
 	}
 
-	private IObservableValue<String> doCreateCellEditorObservable(CellEditor cellEditor) {
+	private IObservableValue doCreateCellEditorObservable(CellEditor cellEditor) {
 		return WidgetProperties.text(SWT.FocusOut).observe(cellEditor.getControl());
 	}
 
@@ -179,13 +179,13 @@
 	private class EditingState {
 		private final EMFDataBindingContext bindingContext;
 
-		private final IObservableValue<String> target;
+		private final IObservableValue target;
 
 		private final IObservableValue model;
 
 		private final Binding binding;
 
-		EditingState(EMFDataBindingContext bindingContext, Binding binding, IObservableValue<String> target,
+		EditingState(EMFDataBindingContext bindingContext, Binding binding, IObservableValue target,
 			IObservableValue model) {
 			this.binding = binding;
 			this.target = target;
diff --git a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/AbstractTableViewerColumnBuilder.java b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/AbstractTableViewerColumnBuilder.java
index df3cee1..a221479 100644
--- a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/AbstractTableViewerColumnBuilder.java
+++ b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/AbstractTableViewerColumnBuilder.java
@@ -18,7 +18,7 @@
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
 import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.viewers.AbstractTableViewer;
 import org.eclipse.jface.viewers.ViewerColumn;
 import org.eclipse.swt.widgets.Item;
@@ -148,8 +148,7 @@
 	 * @param valueProperty the value property to bind to
 	 * @param observable the value to bind to
 	 */
-	protected void bindValue(Widget column, IWidgetValueProperty<Widget, String> valueProperty,
-		IObservableValue<String> observable) {
+	protected void bindValue(Widget column, IWidgetValueProperty valueProperty, IObservableValue observable) {
 		if (dataBindingContext == null) {
 			return;
 		}
diff --git a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/AbstractTableViewerComposite.java b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/AbstractTableViewerComposite.java
index 76fd1be..e75ad15 100644
--- a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/AbstractTableViewerComposite.java
+++ b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/AbstractTableViewerComposite.java
@@ -26,7 +26,7 @@
 import org.eclipse.emfforms.spi.swt.table.action.ActionBar;
 import org.eclipse.emfforms.spi.swt.table.action.ActionBarProvider;
 import org.eclipse.emfforms.spi.swt.table.action.ActionConfiguration;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.layout.AbstractColumnLayout;
 import org.eclipse.jface.viewers.AbstractTableViewer;
 import org.eclipse.jface.viewers.ColumnPixelData;
@@ -73,8 +73,8 @@
 		int style,
 		Object inputObject,
 		TableViewerSWTCustomization<V> customization,
-		IObservableValue<String> title,
-		IObservableValue<String> tooltip) {
+		IObservableValue title,
+		IObservableValue tooltip) {
 		super(parent, style);
 
 		emfDatabindingContext = new EMFDataBindingContext();
@@ -151,8 +151,8 @@
 	}
 
 	private void renderControl(Composite parent, TableViewerSWTCustomization<V> customization,
-		Object inputObject, EMFDataBindingContext emfDataBindingContext, IObservableValue<String> title,
-		IObservableValue<String> tooltip) {
+		Object inputObject, EMFDataBindingContext emfDataBindingContext, IObservableValue title,
+		IObservableValue tooltip) {
 		customization.createCompositeLayout(parent);
 
 		final Optional<Label> titleLabel = customization.getTitleLabel();
@@ -342,7 +342,7 @@
 		}
 	}
 
-	private static void initTitleLabel(Label label, IObservableValue<String> title, IObservableValue<String> tooltip,
+	private static void initTitleLabel(Label label, IObservableValue title, IObservableValue tooltip,
 		EMFDataBindingContext emfDatabindingContext) {
 		emfDatabindingContext.bindValue(
 			WidgetProperties.text().observe(label),
diff --git a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/ColumnConfiguration.java b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/ColumnConfiguration.java
index a1b85c3..ca9e4b7 100644
--- a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/ColumnConfiguration.java
+++ b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/ColumnConfiguration.java
@@ -149,14 +149,16 @@
 	 *
 	 * @return the column header text
 	 */
-	IObservableValue<String> getColumnText();
+	@SuppressWarnings("rawtypes")
+	IObservableValue getColumnText();
 
 	/**
 	 * The column header tooltip text.
 	 *
 	 * @return the column header tooltip
 	 */
-	IObservableValue<String> getColumnTooltip();
+	@SuppressWarnings("rawtypes")
+	IObservableValue getColumnTooltip();
 
 	/**
 	 * The cell label provider which will be set on the column.
diff --git a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/ColumnConfigurationBuilder.java b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/ColumnConfigurationBuilder.java
index 15ebf52..0c26f27 100644
--- a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/ColumnConfigurationBuilder.java
+++ b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/ColumnConfigurationBuilder.java
@@ -49,8 +49,10 @@
 	private int weight = ColumnConfiguration.NO_WEIGHT;
 	private int minWidth;
 
-	private IObservableValue<String> textObservable;
-	private IObservableValue<String> tooltipObservable;
+	@SuppressWarnings("rawtypes")
+	private IObservableValue textObservable;
+	@SuppressWarnings("rawtypes")
+	private IObservableValue tooltipObservable;
 
 	private CellLabelProviderFactory labelProviderFactory;
 	private EditingSupportCreator editingSupportCreator;
@@ -272,7 +274,8 @@
 	 * @param textObservable the column text observable
 	 * @return self
 	 */
-	public ColumnConfigurationBuilder text(IObservableValue<String> textObservable) {
+	@SuppressWarnings("rawtypes")
+	public ColumnConfigurationBuilder text(IObservableValue textObservable) {
 		this.textObservable = textObservable;
 		return this;
 	}
@@ -293,7 +296,8 @@
 	 * @param tooltipObservable the tooltip observable
 	 * @return self
 	 */
-	public ColumnConfigurationBuilder tooltip(IObservableValue<String> tooltipObservable) {
+	@SuppressWarnings("rawtypes")
+	public ColumnConfigurationBuilder tooltip(IObservableValue tooltipObservable) {
 		this.tooltipObservable = tooltipObservable;
 		return this;
 	}
diff --git a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/ColumnConfigurationImpl.java b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/ColumnConfigurationImpl.java
index 98b98c2..109378c 100644
--- a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/ColumnConfigurationImpl.java
+++ b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/ColumnConfigurationImpl.java
@@ -45,8 +45,8 @@
 	private final int styleBits;
 	private final int weight;
 	private final int minWidth;
-	private final IObservableValue<String> columnText;
-	private final IObservableValue<String> tooltipText;
+	private final IObservableValue columnText;
+	private final IObservableValue tooltipText;
 	private final CellLabelProviderFactory labelProviderFactory;
 	private final Optional<EditingSupportCreator> editingSupportCreator;
 	private final Optional<Image> image;
@@ -80,8 +80,8 @@
 		int styleBits,
 		int weight,
 		int minWidth,
-		IObservableValue<String> columnText,
-		IObservableValue<String> tooltipText,
+		IObservableValue columnText,
+		IObservableValue tooltipText,
 		CellLabelProviderFactory labelProviderFactory,
 		EditingSupportCreator editingSupport,
 		Image image,
@@ -142,12 +142,12 @@
 	}
 
 	@Override
-	public IObservableValue<String> getColumnText() {
+	public IObservableValue getColumnText() {
 		return columnText;
 	}
 
 	@Override
-	public IObservableValue<String> getColumnTooltip() {
+	public IObservableValue getColumnTooltip() {
 		return tooltipText;
 	}
 
diff --git a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/DefaultTableViewerColumnBuilder.java b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/DefaultTableViewerColumnBuilder.java
index 62452a4..19c5d35 100644
--- a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/DefaultTableViewerColumnBuilder.java
+++ b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/DefaultTableViewerColumnBuilder.java
@@ -14,7 +14,7 @@
 package org.eclipse.emfforms.spi.swt.table;
 
 import org.eclipse.emfforms.common.Optional;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.viewers.EditingSupport;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.TableViewerColumn;
diff --git a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/TableViewerComposite.java b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/TableViewerComposite.java
index 52db8a8..80d0613 100644
--- a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/TableViewerComposite.java
+++ b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/TableViewerComposite.java
@@ -53,7 +53,7 @@
 	 */
 	TableViewerComposite(Composite parent, int style, Object inputObject,
 		TableViewerSWTCustomization customization,
-		IObservableValue<String> title, IObservableValue<String> tooltip) {
+		IObservableValue title, IObservableValue tooltip) {
 		super(parent, style, inputObject, customization, title, tooltip);
 	}
 
diff --git a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/TableViewerFactory.java b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/TableViewerFactory.java
index 74d90b3..04a8637 100644
--- a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/TableViewerFactory.java
+++ b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/TableViewerFactory.java
@@ -57,7 +57,7 @@
 	 * @return the builder
 	 */
 	public static TableViewerSWTBuilder fillDefaults(Composite composite, int swtStyleBits, Object input,
-		IObservableValue<String> title, IObservableValue<String> tooltip) {
+		IObservableValue title, IObservableValue tooltip) {
 		return new TableViewerSWTBuilder(composite, swtStyleBits, input, title, tooltip);
 	}
 
diff --git a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/TableViewerSWTBuilder.java b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/TableViewerSWTBuilder.java
index 6f531c9..756e04b 100644
--- a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/TableViewerSWTBuilder.java
+++ b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/TableViewerSWTBuilder.java
@@ -52,9 +52,9 @@
 	/** The table control customization. */
 	private final DefaultTableControlSWTCustomization customization;
 	/** The title. */
-	private final IObservableValue<String> title;
+	private final IObservableValue title;
 	/** The tooltip. */
-	private final IObservableValue<String> tooltip;
+	private final IObservableValue tooltip;
 
 	private final Set<Feature> features = new LinkedHashSet<Feature>();
 
@@ -66,8 +66,8 @@
 	 * @param tooltip the tooltip
 	 */
 	@SuppressWarnings("rawtypes")
-	protected TableViewerSWTBuilder(Composite composite, int swtStyleBits, Object input, IObservableValue<String> title,
-		IObservableValue<String> tooltip) {
+	protected TableViewerSWTBuilder(Composite composite, int swtStyleBits, Object input, IObservableValue title,
+		IObservableValue tooltip) {
 
 		this.composite = composite;
 		this.swtStyleBits = swtStyleBits;
@@ -119,14 +119,14 @@
 	/**
 	 * @return the title
 	 */
-	protected IObservableValue<String> getTitle() {
+	protected IObservableValue getTitle() {
 		return title;
 	}
 
 	/**
 	 * @return the tooltip
 	 */
-	protected IObservableValue<String> getTooltip() {
+	protected IObservableValue getTooltip() {
 		return tooltip;
 	}
 
diff --git a/bundles/spreadsheet/org.eclipse.emfforms.spreadsheet.core.renderer/src/org/eclipse/emfforms/internal/spreadsheet/core/renderer/EMFFormsSpreadsheetControlRenderer.java b/bundles/spreadsheet/org.eclipse.emfforms.spreadsheet.core.renderer/src/org/eclipse/emfforms/internal/spreadsheet/core/renderer/EMFFormsSpreadsheetControlRenderer.java
index 5cf8bd1..6fcfca1 100644
--- a/bundles/spreadsheet/org.eclipse.emfforms.spreadsheet.core.renderer/src/org/eclipse/emfforms/internal/spreadsheet/core/renderer/EMFFormsSpreadsheetControlRenderer.java
+++ b/bundles/spreadsheet/org.eclipse.emfforms.spreadsheet.core.renderer/src/org/eclipse/emfforms/internal/spreadsheet/core/renderer/EMFFormsSpreadsheetControlRenderer.java
@@ -249,7 +249,7 @@
 	private void writeLabel(VControl vControl, ViewModelContext viewModelContext, final Cell labelCell,
 		final EMFFormsExportTableParent exportTableParent, VDomainModelReference dmrToResolve,
 		final EStructuralFeature structuralFeature) throws NoLabelFoundException {
-		IObservableValue<String> displayName;
+		IObservableValue displayName;
 		if (viewModelContext.getDomainModel() != null) {
 			displayName = emfformsLabelProvider.getDisplayName(dmrToResolve, viewModelContext.getDomainModel());
 		} else {
@@ -274,7 +274,7 @@
 
 	private void writeDescription(ViewModelContext viewModelContext, final Cell descriptionCell,
 		VDomainModelReference dmrToResolve) throws NoLabelFoundException {
-		IObservableValue<String> description;
+		IObservableValue description;
 		if (viewModelContext.getDomainModel() != null) {
 			description = emfformsLabelProvider.getDescription(dmrToResolve, viewModelContext.getDomainModel());
 		} else {
diff --git a/tests/org.eclipse.emf.ecp.view.table.ui.nebula.grid.test/src/org/eclipse/emf/ecp/view/internal/table/nebula/grid/GridControlRenderer_PTest.java b/tests/org.eclipse.emf.ecp.view.table.ui.nebula.grid.test/src/org/eclipse/emf/ecp/view/internal/table/nebula/grid/GridControlRenderer_PTest.java
index 85ce75e..0f8ee38 100644
--- a/tests/org.eclipse.emf.ecp.view.table.ui.nebula.grid.test/src/org/eclipse/emf/ecp/view/internal/table/nebula/grid/GridControlRenderer_PTest.java
+++ b/tests/org.eclipse.emf.ecp.view.table.ui.nebula.grid.test/src/org/eclipse/emf/ecp/view/internal/table/nebula/grid/GridControlRenderer_PTest.java
@@ -205,10 +205,8 @@
 		when(getContext().getDomainModel()).thenReturn(mock(EObject.class));
 		setShell(new Shell(Display.getDefault(), SWT.NONE));
 
-		final IObservableValue<String> testDescription = Observables.constantObservableValue("test-description",
-			String.class);
-		final IObservableValue<String> testDisplayName = Observables.constantObservableValue("test-displayname",
-			String.class);
+		final IObservableValue testDescription = Observables.constantObservableValue("test-description", String.class);
+		final IObservableValue testDisplayName = Observables.constantObservableValue("test-displayname", String.class);
 
 		try {
 
diff --git a/tests/org.eclipse.emf.ecp.view.table.ui.nebula.grid.test/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridViewerColumnBuilder_ITest.java b/tests/org.eclipse.emf.ecp.view.table.ui.nebula.grid.test/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridViewerColumnBuilder_ITest.java
index 6412ebc..d4ef291 100644
--- a/tests/org.eclipse.emf.ecp.view.table.ui.nebula.grid.test/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridViewerColumnBuilder_ITest.java
+++ b/tests/org.eclipse.emf.ecp.view.table.ui.nebula.grid.test/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridViewerColumnBuilder_ITest.java
@@ -69,16 +69,17 @@
 		shell.dispose();
 	}
 
+	@SuppressWarnings("rawtypes")
 	@Test
 	public void testConfigureDatabinding() {
 
-		final IObservableValue<String> tooltipObservable = mock(IObservableValue.class);
+		final IObservableValue tooltipObservable = mock(IObservableValue.class);
 		final String tooltip = "Foo";
 		when(tooltipObservable.getValue()).thenReturn(tooltip);
 		when(tooltipObservable.getRealm()).thenReturn(dataBindingContext.getValidationRealm());
 		when(config.getColumnTooltip()).thenReturn(tooltipObservable);
 
-		final IObservableValue<String> textObservable = mock(IObservableValue.class);
+		final IObservableValue textObservable = mock(IObservableValue.class);
 		when(textObservable.getValue()).thenReturn("Bar");
 		when(textObservable.getValueType()).thenReturn(String.class);
 		when(textObservable.getRealm()).thenReturn(dataBindingContext.getValidationRealm());
diff --git a/tests/org.eclipse.emf.ecp.view.table.ui.swt.test/src/org/eclipse/emf/ecp/view/spi/table/swt/SWTTableDatabindingLabel_PTest.java b/tests/org.eclipse.emf.ecp.view.table.ui.swt.test/src/org/eclipse/emf/ecp/view/spi/table/swt/SWTTableDatabindingLabel_PTest.java
index 1ff9288..da48432 100644
--- a/tests/org.eclipse.emf.ecp.view.table.ui.swt.test/src/org/eclipse/emf/ecp/view/spi/table/swt/SWTTableDatabindingLabel_PTest.java
+++ b/tests/org.eclipse.emf.ecp.view.table.ui.swt.test/src/org/eclipse/emf/ecp/view/spi/table/swt/SWTTableDatabindingLabel_PTest.java
@@ -90,11 +90,11 @@
 @SuppressWarnings("restriction")
 @RunWith(DatabindingClassRunner.class)
 public class SWTTableDatabindingLabel_PTest {
-	private static final IObservableValue<String> DISPLAYNAME = Observables.constantObservableValue("displayname");
-	private static final IObservableValue<String> DISPLAYNAME_COLUMNS = Observables
+	private static final IObservableValue DISPLAYNAME = Observables.constantObservableValue("displayname");
+	private static final IObservableValue DISPLAYNAME_COLUMNS = Observables
 		.constantObservableValue("displayname-columns");
-	private static final IObservableValue<String> DESCRIPTION = Observables.constantObservableValue("description");
-	private static final IObservableValue<String> DESCRIPTION_COLUMNS = Observables
+	private static final IObservableValue DESCRIPTION = Observables.constantObservableValue("description");
+	private static final IObservableValue DESCRIPTION_COLUMNS = Observables
 		.constantObservableValue("description-columns");
 	private EMFFormsDatabindingEMF databindingService;
 	private TableControlSWTRenderer renderer;
diff --git a/tests/org.eclipse.emfforms.core.services.emf.tests/src/org/eclipse/emfforms/internal/core/services/label/EMFFormsLabelProviderDefaultImpl_Test.java b/tests/org.eclipse.emfforms.core.services.emf.tests/src/org/eclipse/emfforms/internal/core/services/label/EMFFormsLabelProviderDefaultImpl_Test.java
index 9cd648e..2afb91a 100644
--- a/tests/org.eclipse.emfforms.core.services.emf.tests/src/org/eclipse/emfforms/internal/core/services/label/EMFFormsLabelProviderDefaultImpl_Test.java
+++ b/tests/org.eclipse.emfforms.core.services.emf.tests/src/org/eclipse/emfforms/internal/core/services/label/EMFFormsLabelProviderDefaultImpl_Test.java
@@ -105,7 +105,7 @@
 		final EClass eClass = EcoreFactory.eINSTANCE.createEClass();
 		when(structuralFeature.getEContainingClass()).thenReturn(eClass);
 		when(structuralFeature.getName()).thenReturn(expectedResult.toLowerCase());
-		final String result = labelProvider.getDisplayName(structuralFeature).getValue();
+		final String result = (String) labelProvider.getDisplayName(structuralFeature).getValue();
 
 		assertEquals(expectedResult, result);
 	}
@@ -127,7 +127,7 @@
 		when(itemPropertyDescriptor.getDisplayName(any(Object.class))).thenReturn(expectedResult);
 		when(valueProperty.getValueType()).thenReturn(structuralFeature);
 
-		final String result = labelProvider.getDisplayName(structuralFeature).getValue();
+		final String result = (String) labelProvider.getDisplayName(structuralFeature).getValue();
 
 		verify(itemPropertyDescriptor).getDisplayName(any(D.class));
 		assertEquals(expectedResult, result);
@@ -153,7 +153,7 @@
 		when(databindingService.getValueProperty(same(domainModelReference), isNull(EObject.class)))
 			.thenReturn(valueProperty);
 
-		final IObservableValue<String> result = labelProvider.getDisplayName(domainModelReference);
+		final IObservableValue result = labelProvider.getDisplayName(domainModelReference);
 
 		verify(databindingService).getValueProperty(same(domainModelReference), isNull(EObject.class));
 		verify(itemPropertyDescriptor).getDisplayName(any(D.class));
@@ -190,7 +190,7 @@
 		when(valueProperty.getValueType()).thenReturn(structuralFeature);
 		when(databindingService.getValueProperty(domainModelReference, eClass)).thenReturn(valueProperty);
 
-		final IObservableValue<String> result = labelProvider.getDisplayName(domainModelReference, eClass);
+		final IObservableValue result = labelProvider.getDisplayName(domainModelReference, eClass);
 
 		verify(databindingService).getValueProperty(domainModelReference, eClass);
 		verify(itemPropertyDescriptor).getDisplayName(any(D.class));
@@ -247,7 +247,7 @@
 		when(observableValue.getValueType()).thenReturn(structuralFeature);
 		when(observableValue.getObserved()).thenReturn(value);
 		when(databindingService.getObservableValue(domainModelReference, eObject)).thenReturn(observableValue);
-		final IObservableValue<String> result = labelProvider.getDisplayName(domainModelReference, eObject);
+		final IObservableValue result = labelProvider.getDisplayName(domainModelReference, eObject);
 
 		verify(databindingService).getObservableValue(domainModelReference, eObject);
 		verify(itemPropertyDescriptor).getDisplayName(value);
@@ -305,7 +305,7 @@
 		when(databindingService.getValueProperty(same(domainModelReference), isNull(EObject.class)))
 			.thenReturn(valueProperty);
 
-		final IObservableValue<String> result = labelProvider.getDescription(domainModelReference);
+		final IObservableValue result = labelProvider.getDescription(domainModelReference);
 
 		verify(databindingService).getValueProperty(same(domainModelReference), isNull(EObject.class));
 		assertEquals(expectedResult, result.getValue());
@@ -331,7 +331,7 @@
 		when(databindingService.getValueProperty(same(domainModelReference), isNull(EObject.class)))
 			.thenReturn(valueProperty);
 
-		final IObservableValue<String> result = labelProvider.getDescription(domainModelReference);
+		final IObservableValue result = labelProvider.getDescription(domainModelReference);
 
 		verify(databindingService).getValueProperty(same(domainModelReference), isNull(EObject.class));
 		verify(itemPropertyDescriptor).getDescription(any(D.class));
@@ -368,7 +368,7 @@
 		when(valueProperty.getValueType()).thenReturn(structuralFeature);
 		when(databindingService.getValueProperty(domainModelReference, eClass)).thenReturn(valueProperty);
 
-		final IObservableValue<String> result = labelProvider.getDescription(domainModelReference, eClass);
+		final IObservableValue result = labelProvider.getDescription(domainModelReference, eClass);
 
 		verify(databindingService).getValueProperty(domainModelReference, eClass);
 		verify(itemPropertyDescriptor).getDescription(any(D.class));
@@ -425,7 +425,7 @@
 		when(observableValue.getValueType()).thenReturn(structuralFeature);
 		when(observableValue.getObserved()).thenReturn(value);
 		when(databindingService.getObservableValue(domainModelReference, eObject)).thenReturn(observableValue);
-		final IObservableValue<String> result = labelProvider.getDescription(domainModelReference, eObject);
+		final IObservableValue result = labelProvider.getDescription(domainModelReference, eObject);
 
 		verify(databindingService).getObservableValue(domainModelReference, eObject);
 		verify(itemPropertyDescriptor).getDescription(value);
diff --git a/tests/org.eclipse.emfforms.core.services.emf.tests/src/org/eclipse/emfforms/internal/core/services/label/EMFFormsLabelProviderImpl_Test.java b/tests/org.eclipse.emfforms.core.services.emf.tests/src/org/eclipse/emfforms/internal/core/services/label/EMFFormsLabelProviderImpl_Test.java
index 91c9eff..1423512 100644
--- a/tests/org.eclipse.emfforms.core.services.emf.tests/src/org/eclipse/emfforms/internal/core/services/label/EMFFormsLabelProviderImpl_Test.java
+++ b/tests/org.eclipse.emfforms.core.services.emf.tests/src/org/eclipse/emfforms/internal/core/services/label/EMFFormsLabelProviderImpl_Test.java
@@ -24,6 +24,7 @@
 
 import java.text.MessageFormat;
 
+import org.eclipse.core.databinding.observable.IObserving;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.emf.databinding.IEMFValueProperty;
 import org.eclipse.emf.ecore.EClass;
@@ -50,6 +51,15 @@
 @SuppressWarnings("deprecation")
 public class EMFFormsLabelProviderImpl_Test {
 
+	/**
+	 * Helper Interface for mocking.
+	 *
+	 * @author Eugen Neufeld
+	 *
+	 */
+	public interface TestObservableValue extends IObservableValue, IObserving {
+	}
+
 	private EMFFormsLabelProviderImpl labelProvider;
 	private EMFFormsDatabindingEMF databinding;
 	private DefaultRealm realm;
@@ -130,7 +140,7 @@
 		final String value = "My Value"; //$NON-NLS-1$
 		when(localizationService.getString(mockedBundle, key)).thenReturn(value);
 
-		final IObservableValue<String> displayName = labelProvider.getDisplayName(domainModelReference);
+		final IObservableValue displayName = labelProvider.getDisplayName(domainModelReference);
 		assertEquals(value, displayName.getValue());
 	}
 
@@ -189,7 +199,7 @@
 		final String value = "My Value"; //$NON-NLS-1$
 		when(localizationService.getString(mockedBundle, key)).thenReturn(value);
 
-		final IObservableValue<String> displayName = labelProvider.getDisplayName(domainModelReference, eObject);
+		final IObservableValue displayName = labelProvider.getDisplayName(domainModelReference, eObject);
 		assertEquals(value, displayName.getValue());
 
 	}
@@ -247,7 +257,7 @@
 			localizationService.getString(mockedBundle,
 				String.format("_UI_%1$s_type", EcorePackage.eINSTANCE.getEObject().getName()))).thenReturn(eObjectText); //$NON-NLS-1$
 
-		final IObservableValue<String> description = labelProvider.getDescription(domainModelReference);
+		final IObservableValue description = labelProvider.getDescription(domainModelReference);
 		assertEquals(MessageFormat.format(descriptionPlaceHolder, featureText, eObjectText), description.getValue());
 	}
 
@@ -313,7 +323,7 @@
 			localizationService.getString(mockedBundle,
 				String.format("_UI_%1$s_type", EcorePackage.eINSTANCE.getEObject().getName()))).thenReturn(eObjectText); //$NON-NLS-1$
 
-		final IObservableValue<String> description = labelProvider.getDescription(domainModelReference, eObject);
+		final IObservableValue description = labelProvider.getDescription(domainModelReference, eObject);
 		assertEquals(MessageFormat.format(descriptionPlaceHolder, featureText, eObjectText), description.getValue());
 	}
 
@@ -364,10 +374,8 @@
 		when(localizationService.getString(mockedBundle, keyDisplayName)).thenReturn(valueDisplayName,
 			valueDisplayNameNew);
 
-		final IObservableValue<String> labelObservableValue = labelProvider.getDisplayName(domainModelReference,
-			eObject);
-		final IObservableValue<String> descriptionObservableValue = labelProvider.getDescription(domainModelReference,
-			eObject);
+		final IObservableValue labelObservableValue = labelProvider.getDisplayName(domainModelReference, eObject);
+		final IObservableValue descriptionObservableValue = labelProvider.getDescription(domainModelReference, eObject);
 		assertEquals(valueDisplayName, labelObservableValue.getValue());
 		assertEquals(valueDescription, descriptionObservableValue.getValue());
 
diff --git a/tests/org.eclipse.emfforms.swt.common.test/src/org/eclipse/emfforms/swt/common/test/AbstractControl_PTest.java b/tests/org.eclipse.emfforms.swt.common.test/src/org/eclipse/emfforms/swt/common/test/AbstractControl_PTest.java
index 2c2b1a4..b8df104 100644
--- a/tests/org.eclipse.emfforms.swt.common.test/src/org/eclipse/emfforms/swt/common/test/AbstractControl_PTest.java
+++ b/tests/org.eclipse.emfforms.swt.common.test/src/org/eclipse/emfforms/swt/common/test/AbstractControl_PTest.java
@@ -205,10 +205,8 @@
 	protected void labelServiceUsage() throws NoRendererFoundException, NoPropertyDescriptorFoundExeption,
 		NoLabelFoundException {
 		reset(getLabelProvider());
-		final IObservableValue<String> testDescription = Observables.constantObservableValue("test-description",
-			String.class);
-		final IObservableValue<String> testDisplayName = Observables.constantObservableValue("test-displayname",
-			String.class);
+		final IObservableValue testDescription = Observables.constantObservableValue("test-description", String.class);
+		final IObservableValue testDisplayName = Observables.constantObservableValue("test-displayname", String.class);
 		when(getLabelProvider().getDescription(any(VDomainModelReference.class), any(EObject.class))).thenReturn(
 			testDescription);
 		when(getLabelProvider().getDisplayName(any(VDomainModelReference.class), any(EObject.class))).thenReturn(
diff --git a/tests/org.eclipse.emfforms.swt.reference.table.test/META-INF/MANIFEST.MF b/tests/org.eclipse.emfforms.swt.reference.table.test/META-INF/MANIFEST.MF
index 59cae1d..cc483ae 100644
--- a/tests/org.eclipse.emfforms.swt.reference.table.test/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.emfforms.swt.reference.table.test/META-INF/MANIFEST.MF
@@ -19,7 +19,7 @@
  org.eclipse.emfforms.view.model.localization;bundle-version="[1.22.0,1.23.0)",
  org.mockito.mockito-core-hamcrest-modified;bundle-version="[1.9.5,2.0.0)",
  org.eclipse.swtbot.swt.finder;bundle-version="[2.7.0,3.0.0)",
- org.eclipse.swt;bundle-version="[3.110.0,4.0.0)"
+ org.eclipse.swt;bundle-version="[3.107.0,4.0.0)"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Automatic-Module-Name: org.eclipse.emfforms.swt.reference.table.test
 Import-Package: org.eclipse.emf.ecp.spi.common.ui;version="[1.22.0,1.23.0)",
