diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassPage.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassPage.java
index b52356a..7242c82 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassPage.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassPage.java
@@ -185,6 +185,7 @@
 		}
 	}
 
+	@SuppressWarnings("unchecked")
 	@Override
 	public void createControl(Composite parent) {
 		final Image img = new Image(parent.getDisplay(), getClass().getClassLoader().getResourceAsStream(
@@ -220,10 +221,9 @@
 			t.setEditable(false);
 
 			final Binding bd = dbc.bindValue(
-					WidgetProperties.text().observe(t),
-					BeanProperties.value(FRAGMENT_ROOT).observe(clazz),
-					new UpdateValueStrategy().setBeforeSetValidator(new PFRootValidator()),
-					new UpdateValueStrategy().setConverter(new PackageFragmentRootToStringConverter())
+					WidgetProperties.text().observe(t), BeanProperties.value(FRAGMENT_ROOT).observe(clazz),
+					new UpdateValueStrategy<>().setBeforeSetValidator(new PFRootValidator()),
+					new UpdateValueStrategy<>().setConverter(new PackageFragmentRootToStringConverter())
 					);
 
 			final Button b = new Button(parent, SWT.PUSH);
@@ -251,9 +251,8 @@
 			final Binding bd = dbc.bindValue(
 					WidgetProperties.text(SWT.Modify).observe(tClassPackage),
 					BeanProperties.value(PACKAGE_FRAGMENT).observe(clazz),
-					new UpdateValueStrategy().setConverter(new StringToPackageFragmentConverter(clazz)),
-					new UpdateValueStrategy().setConverter(new PackageFragmentToStringConverter())
-					);
+					new UpdateValueStrategy<>().setConverter(new StringToPackageFragmentConverter(clazz)),
+					new UpdateValueStrategy<>().setConverter(new PackageFragmentToStringConverter()));
 
 			final Button b = new Button(parent, SWT.PUSH);
 			b.setText(Messages.AbstractNewClassPage_Browse);
@@ -280,7 +279,7 @@
 			tClassName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			dbc.bindValue(textProp.observe(tClassName),
 					BeanProperties.value(PROPERTY_NAME, String.class).observe(clazz),
-					new UpdateValueStrategy().setBeforeSetValidator(new ClassnameValidator()), null);
+					new UpdateValueStrategy<>().setBeforeSetValidator(new ClassnameValidator()), null);
 
 			new Label(parent, SWT.NONE);
 		}
@@ -292,7 +291,6 @@
 
 		final ISWTObservableValue obsPackage = WidgetProperties.text(SWT.Modify).observe(tClassPackage);
 		final ISWTObservableValue obsClass = WidgetProperties.text(SWT.Modify).observe(tClassName);
-		@SuppressWarnings("unchecked")
 		final ClassMultiValidator multiValidator = new ClassMultiValidator(clazz, obsPackage, obsClass);
 		dbc.addValidationStatusProvider(multiValidator);
 
@@ -483,7 +481,7 @@
 
 	}
 
-	static class ClassnameValidator implements IValidator {
+	static class ClassnameValidator implements IValidator<Object> {
 
 		@Override
 		public IStatus validate(Object value) {
@@ -500,7 +498,7 @@
 		}
 	}
 
-	static class PFRootValidator implements IValidator {
+	static class PFRootValidator implements IValidator<Object> {
 
 		@Override
 		public IStatus validate(Object value) {
@@ -514,7 +512,7 @@
 		}
 	}
 
-	static class PackageFragmentRootToStringConverter extends Converter {
+	static class PackageFragmentRootToStringConverter extends Converter<Object, Object> {
 
 		public PackageFragmentRootToStringConverter() {
 			super(IPackageFragmentRoot.class, String.class);
@@ -530,7 +528,7 @@
 		}
 	}
 
-	static class PackageFragmentToStringConverter extends Converter {
+	static class PackageFragmentToStringConverter extends Converter<Object, Object> {
 
 		public PackageFragmentToStringConverter() {
 			super(IPackageFragment.class, String.class);
@@ -546,7 +544,7 @@
 		}
 	}
 
-	static class StringToPackageFragmentConverter extends Converter {
+	static class StringToPackageFragmentConverter extends Converter<Object, Object> {
 
 		private final JavaClass clazz;
 
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewDynamicMenuContributionClassWizard.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewDynamicMenuContributionClassWizard.java
index 5e0fa42..44cc288 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewDynamicMenuContributionClassWizard.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewDynamicMenuContributionClassWizard.java
@@ -58,6 +58,7 @@
 				return new DynamicMenuContributionClass(root);
 			}
 
+			@SuppressWarnings("unchecked")
 			@Override
 			protected void createFields(Composite parent, DataBindingContext dbc) {
 				final IWidgetValueProperty textProp = WidgetProperties
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewHandlerClassWizard.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewHandlerClassWizard.java
index 9c675f9..26c97e8 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewHandlerClassWizard.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewHandlerClassWizard.java
@@ -62,6 +62,7 @@
 				return new HandlerClass(root);
 			}
 
+			@SuppressWarnings("unchecked")
 			@Override
 			protected void createFields(Composite parent, DataBindingContext dbc) {
 				final IWidgetValueProperty textProp = WidgetProperties
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewImperativeExpressionClassWizard.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewImperativeExpressionClassWizard.java
index cad413b..6b059c4 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewImperativeExpressionClassWizard.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewImperativeExpressionClassWizard.java
@@ -60,6 +60,7 @@
 				return new ImperativeExpressionClass(root);
 			}
 
+			@SuppressWarnings("unchecked")
 			@Override
 			protected void createFields(Composite parent, DataBindingContext dbc) {
 				final IWidgetValueProperty textProp = WidgetProperties
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewPartClassWizard.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewPartClassWizard.java
index 1e6d15f..1af24fd 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewPartClassWizard.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewPartClassWizard.java
@@ -57,6 +57,7 @@
 			Messages.NewPartClassWizard_CreateNewPart, root, ResourcesPlugin.getWorkspace()
 			.getRoot(), initialString) {
 
+			@SuppressWarnings("unchecked")
 			@Override
 			protected void createFields(Composite parent, DataBindingContext dbc) {
 				final IWidgetValueProperty textProp = WidgetProperties
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewToolControlClassWizard.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewToolControlClassWizard.java
index ccb1f02..944c7d1 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewToolControlClassWizard.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewToolControlClassWizard.java
@@ -58,6 +58,7 @@
 				return new ToolControlClass(root);
 			}
 
+			@SuppressWarnings("unchecked")
 			@Override
 			protected void createFields(Composite parent, DataBindingContext dbc) {
 				final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
