diff --git a/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/CachedLabelProviderTest.xtend b/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/CachedLabelProviderTest.xtend
index d43df9a..cec7fa5 100644
--- a/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/CachedLabelProviderTest.xtend
+++ b/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/CachedLabelProviderTest.xtend
@@ -26,7 +26,7 @@
 
 	var CachedLabelProvider labelProvider
 	var ILabelProvider delegate
-	val final TEST_VAL = "TEST"
+	val TEST_VAL = "TEST"
 
 	@Before
 	def void setupLabelProvider() {
diff --git a/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/DefaultControlFactoryTest.xtend b/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/DefaultControlFactoryTest.xtend
index f9e35b1..1e59221 100644
--- a/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/DefaultControlFactoryTest.xtend
+++ b/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/DefaultControlFactoryTest.xtend
@@ -23,7 +23,7 @@
  */
 class DefaultControlFactoryTest extends DialogControlFactoryTest {
 
-	def override protected createAndInitializeFactory() {
+	override protected createAndInitializeFactory() {
 		new DialogControlFactory() {
 			override create(EStructuralFeature feature) {
 				super.createDefaultControl(feature)
diff --git a/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/EditingDomainStrategyTest.xtend b/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/EditingDomainStrategyTest.xtend
index f46c90a..433b70e 100644
--- a/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/EditingDomainStrategyTest.xtend
+++ b/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/EditingDomainStrategyTest.xtend
@@ -11,7 +11,6 @@
 package org.eclipse.emf.parsley.tests
 
 import com.google.inject.Injector
-import org.eclipse.emf.ecore.resource.Resource
 import org.eclipse.emf.edit.domain.EditingDomain
 import org.eclipse.emf.parsley.edit.domain.EditingDomainFinderStrategy
 import org.eclipse.emf.parsley.edit.domain.EditingDomainPresetStrategy
@@ -29,8 +28,6 @@
 
 	var Injector injector
 
-	var Resource resource
-
 	var EditingDomain resourceEditingDomain
 
 	@Before
@@ -59,7 +56,7 @@
 
 	def private createResourceForTest() {
 		resourceEditingDomain = injector.createEditingDomain
-		resource = createTestLibrayResourceAndInitialize(
+		createTestLibrayResourceAndInitialize(
 			resourceEditingDomain.resourceSet.setupResouceFactory
 		)
 	}
diff --git a/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/EmfParsleyUtilTest.xtend b/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/EmfParsleyUtilTest.xtend
index 4ff5b95..1c55887 100644
--- a/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/EmfParsleyUtilTest.xtend
+++ b/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/EmfParsleyUtilTest.xtend
@@ -22,7 +22,7 @@
  * @author Lorenzo Bettini
  * 
  */
-public class EmfParsleyUtilTest {
+class EmfParsleyUtilTest {
 	
 	new() {
 		// the following is useless... but it's just to have coverage
diff --git a/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/FeatureHelperTest.xtend b/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/FeatureHelperTest.xtend
index 4e98a7d..830fd51 100644
--- a/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/FeatureHelperTest.xtend
+++ b/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/FeatureHelperTest.xtend
@@ -31,7 +31,7 @@
 	 */
 	var protected ClassForControls classForControlsInstance
 
-	var private FeatureHelper featureHelper
+	var FeatureHelper featureHelper
 
 	@Before
 	def void setupEObject() {
diff --git a/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/FormControlFactoryTest.xtend b/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/FormControlFactoryTest.xtend
index 031e1e9..0e5b7c9 100644
--- a/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/FormControlFactoryTest.xtend
+++ b/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/FormControlFactoryTest.xtend
@@ -17,7 +17,7 @@
 
 class FormControlFactoryTest extends DialogControlFactoryTest {
 	
-	def override protected createAndInitializeFactory() {
+	override protected createAndInitializeFactory() {
 		new FormControlFactory() => [
 			initialize(classForControlsInstance)
 		]
diff --git a/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/NotificationBufferTest.xtend b/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/NotificationBufferTest.xtend
index 7f16f9c..742bf49 100644
--- a/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/NotificationBufferTest.xtend
+++ b/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/NotificationBufferTest.xtend
@@ -39,7 +39,7 @@
 	}
 	
 	@Test
-	def public void checkAdaptersAreRemovedAndRestored() {
+	def void checkAdaptersAreRemovedAndRestored() {
 		2.assertAdaptersSize
 		buffer.startBuffering
 		1.assertAdaptersSize // NotificationBuffer is set as adapter
@@ -48,7 +48,7 @@
 	}
 
 	@Test
-	def public void checkNotificationsAreBuffered() {
+	def void checkNotificationsAreBuffered() {
 		clearTestAdaptersNotifications
 		buffer.startBuffering
 		addTestBook("1") // the test adapters will receive no notification
@@ -56,7 +56,7 @@
 	}
 
 	@Test
-	def public void checkNotificationsStartAndStopBuffering() {
+	def void checkNotificationsStartAndStopBuffering() {
 		clearTestAdaptersNotifications
 		addTestBook("1")
 		"[eventType: 3, Notifier: TEST, eventType: 3, Notifier: TEST]".assertNotificationsInTestAdapters
@@ -71,7 +71,7 @@
 	}
 
 	@Test
-	def public void checkPropagateBufferedNotifications() {
+	def void checkPropagateBufferedNotifications() {
 		clearTestAdaptersNotifications
 		"[]".assertNotificationsInTestAdapters
 		buffer.startBuffering
diff --git a/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/TableFeaturesProviderTest.xtend b/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/TableFeaturesProviderTest.xtend
index 1f8ccd0..5323b13 100644
--- a/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/TableFeaturesProviderTest.xtend
+++ b/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/TableFeaturesProviderTest.xtend
@@ -23,8 +23,6 @@
 
 class TableFeaturesProviderTest extends FeaturesProviderTest {
 	
-	var TableFeaturesProvider tableFeaturesProvider
-	
 	/**
 	 * This will be used to test that TableFeaturesProvider delegates also to
 	 * a possibly customized injected FeaturesProvider
@@ -51,7 +49,6 @@
 	override void setUpFeaturesProvider() {
 		featuresProvider = new TableFeaturesProvider
 		injectMembers(featuresProvider)
-		tableFeaturesProvider = featuresProvider as TableFeaturesProvider
 	}
 	
 	@Test def void testTableFeaturesProviderCustomBuildMap() {
