diff --git a/devtools/org.eclipse.emf.parsley.workspace/buckminster.cspex b/devtools/org.eclipse.emf.parsley.workspace/buckminster.cspex
deleted file mode 100644
index 4786a94..0000000
--- a/devtools/org.eclipse.emf.parsley.workspace/buckminster.cspex
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<cspecExtension
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xmlns:bc="http://www.eclipse.org/buckminster/Common-1.0"
-	xmlns="http://www.eclipse.org/buckminster/CSpec-1.0">
-	<dependencies>
-		<dependency name="org.eclipse.emf.parsley.targetplatform" 
-			componentType="buckminster" />
-		<dependency name="org.eclipse.emf.parsley.parent" 
-			componentType="buckminster" />
-		<dependency name="org.eclipse.emf.parsley.releng" 
-			componentType="buckminster" />
-	</dependencies>
-</cspecExtension>
diff --git a/doc/org.eclipse.emf.parsley.doc/xdoc/documentation/02-FirstExample.xdoc b/doc/org.eclipse.emf.parsley.doc/xdoc/documentation/02-FirstExample.xdoc
index 326ad01..5973852 100644
--- a/doc/org.eclipse.emf.parsley.doc/xdoc/documentation/02-FirstExample.xdoc
+++ b/doc/org.eclipse.emf.parsley.doc/xdoc/documentation/02-FirstExample.xdoc
@@ -86,9 +86,15 @@
 
 The e[viewpart] corresponds to the standard Eclipse view part extension point; the Parsley
 DSL will generate a e[plugin.xml_emfparsley_gen]
-into the root folder of your project. Just copy this file into e["plugin.xml"]. Parsley
-will never override your e[plugin.xml] file; each time you modify the module file, the
-e[plugin.xml_emfparsley_gen] will be generated: it is up to you to keep the generated file
+into the root folder of your project.
+The very first time, and only if it does not exist already, the DSL will also
+generate a e[plugin.xml] file.
+Further generations will NOT overwrite the e[plugin.xml]: they will overwrite
+e[plugin.xml_emfparsley_gen].
+If you make changes to the e[parts] section in the DSL file, you will have
+to manually merge the two files e[plugin.xml] and
+e[plugin.xml_emfparsley_gen].
+It is up to you to keep the generated file
 synchronized with your e["plugin.xml"].  The easiest way is to select to the files,
 and use the context menu "Compare With" => "Each Other".
 
diff --git a/doc/org.eclipse.emf.parsley.doc/xdoc/documentation/03bis-SampleImplementations.xdoc b/doc/org.eclipse.emf.parsley.doc/xdoc/documentation/03bis-SampleImplementations.xdoc
index 60e6b0f..45ac5bb 100644
--- a/doc/org.eclipse.emf.parsley.doc/xdoc/documentation/03bis-SampleImplementations.xdoc
+++ b/doc/org.eclipse.emf.parsley.doc/xdoc/documentation/03bis-SampleImplementations.xdoc
@@ -298,30 +298,6 @@
 %%		]]
 %%	]]
 %%]
-section3:OnSelectionListView[On Selection List View]
-
-codeRef[org.eclipse.emf.parsley.views.OnSelectionListView]
-
-%%ul[
-%%	item[ref:ViewerInitializer[ViewerInitializer]
-%%	ul[
-%%		item[ref:EditingDomainResourceLoader[EditingDomainResourceLoader]
-%%		ul[
-%%			item[ref:ResourceLoader[ResourceLoader]
-%%			ul[
-%%				item[ref:EmptyResourceInitializer[EmptyResourceInitializer]]
-%%			]]
-%%			item[ref:EmptyResourceInitializer[EmptyResourceInitializer]]
-%%			item[ref:FeaturesProvider[FeaturesProvider]]
-%%		]]
-%%		item[ref:JfaceProviderFactory[JfaceProviderFactory]
-%%		ul[
-%%			item[ref:ViewerLabelProvider[ViewerLabelProvider]]
-%%			item[ref:TableColumnLabelProvider[TableColumnLabelProvider]]
-%%		]]	
-%%		item[ref:ViewerContextMenuFactory[ViewerContextMenuFactory]]
-%%	]]
-%%]
 section3:OnSelectionTreeView[On Selection Tree View]
 
 codeRef[org.eclipse.emf.parsley.views.OnSelectionTreeView]
diff --git a/dsl/org.eclipse.emf.parsley.dsl.tests/src/org/eclipse/emf/parsley/dsl/tests/EmfParsleyDslAllTests.java b/dsl/org.eclipse.emf.parsley.dsl.tests/src/org/eclipse/emf/parsley/dsl/tests/EmfParsleyDslAllTests.java
index 0c54bf1..3228893 100644
--- a/dsl/org.eclipse.emf.parsley.dsl.tests/src/org/eclipse/emf/parsley/dsl/tests/EmfParsleyDslAllTests.java
+++ b/dsl/org.eclipse.emf.parsley.dsl.tests/src/org/eclipse/emf/parsley/dsl/tests/EmfParsleyDslAllTests.java
@@ -32,7 +32,8 @@
 	EmfParsleyDslNewProjectFilesTests.class,
 	EmfParsleyProjectFilesGeneratorUtilTests.class,
 	EmfParsleyTemplateWizardConfigurationTests.class,
-	EmfParsleyTemplateWizardConfigurationFactoryTests.class
+	EmfParsleyTemplateWizardConfigurationFactoryTests.class,
+	EmfParsleyDslFormatterTests.class,
 })
 public class EmfParsleyDslAllTests {
 
diff --git a/dsl/org.eclipse.emf.parsley.dsl.tests/src/org/eclipse/emf/parsley/dsl/tests/EmfParsleyDslFormatterTests.xtend b/dsl/org.eclipse.emf.parsley.dsl.tests/src/org/eclipse/emf/parsley/dsl/tests/EmfParsleyDslFormatterTests.xtend
new file mode 100644
index 0000000..537a082
--- /dev/null
+++ b/dsl/org.eclipse.emf.parsley.dsl.tests/src/org/eclipse/emf/parsley/dsl/tests/EmfParsleyDslFormatterTests.xtend
@@ -0,0 +1,921 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Lorenzo Bettini - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.parsley.dsl.tests
+
+import com.google.inject.Inject
+import org.eclipse.emf.parsley.dsl.EmfParsleyDslInjectorProvider
+import org.eclipse.xtext.junit4.InjectWith
+import org.eclipse.xtext.junit4.XtextRunner
+import org.eclipse.xtext.junit4.formatter.FormatterTester
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(typeof(XtextRunner))
+@InjectWith(typeof(EmfParsleyDslInjectorProvider))
+class EmfParsleyDslFormatterTests extends EmfParsleyDslAbstractTests {
+
+	@Inject extension FormatterTester
+
+	@Test def void testFormatPartSpecification() {
+		assertFormatted[
+			expectation = '''
+				module Foo {
+					parts {
+						viewpart my.view.tree.part {
+							viewname "My Tree View"
+							viewclass AbstractSaveableTreeView
+							viewcategory My.Category
+						}
+						viewpart my.view.tree.part2 {
+							viewname "My Tree View"
+							viewclass AbstractSaveableTreeView
+						}
+					}
+				}
+			'''
+			toBeFormatted = '''
+				module Foo { parts { viewpart 
+					my.view.tree.part { viewname  "My Tree View" viewclass  AbstractSaveableTreeView 	viewcategory  My.Category}
+					viewpart my.view.tree.part2 { viewname  "My Tree View" viewclass  AbstractSaveableTreeView 	}
+					}
+				}
+			'''
+		]
+	}
+
+	@Test def void testFieldSpecifications() {
+		assertFormatted[
+			expectation = '''
+import org.eclipse.emf.ecore.resource.Resource
+import com.google.inject.Inject
+
+module my.empty {
+	tableViewerContentProvider {
+		val field = "a field";
+		@Inject
+		val field2 = "a field";
+		var f1 = 0;
+		var extension int f2 = 0;
+	}
+}
+			'''
+			toBeFormatted = '''
+import org.eclipse.emf.ecore.resource.Resource
+import com.google.inject.Inject
+
+module my.empty {
+	tableViewerContentProvider { 		val field  =  "a field"; @Inject
+		val field2 = "a field";  var  f1  =  0 ; var  extension  int  f2  =  0 ;
+	}
+}
+			'''
+		]
+	}
+
+	@Test def void testExtends() {
+		assertFormatted[
+			expectation = '''
+module my.empty {
+	tableViewerContentProvider extends Foo {
+	}
+}
+			'''
+			toBeFormatted = '''
+module my.empty {
+	tableViewerContentProvider  extends  Foo {
+	}
+}
+			'''
+		]
+	}
+
+	@Test def void testResourceManager() {
+		assertFormatted[
+			expectation = '''
+				import org.eclipse.emf.parsley.examples.library.EXTLibraryFactory
+
+				module my.empty {
+					resourceManager {
+						val EXTLibraryFactory libraryFactory = EXTLibraryFactory.eINSTANCE;
+
+						initializeResource {
+							getContents() += libraryFactory.createLibrary
+						}
+						saveResource {
+							it.save(null)
+							return true
+						}
+					}
+				}
+			'''
+			toBeFormatted = '''
+import org.eclipse.emf.parsley.examples.library.EXTLibraryFactory
+
+				module my.empty {
+					resourceManager {
+						val EXTLibraryFactory libraryFactory = EXTLibraryFactory.eINSTANCE;
+						
+						initializeResource { 				getContents() += libraryFactory.createLibrary
+						}
+						saveResource {
+							it.save(null)
+							return true
+						}
+					}
+				}
+			'''
+		]
+	}
+
+	@Test def void testResourceManagerWithoutSaveResource() {
+		assertFormatted[
+			expectation = '''
+				import org.eclipse.emf.parsley.examples.library.EXTLibraryFactory
+
+				module my.empty {
+					resourceManager {
+						val EXTLibraryFactory libraryFactory = EXTLibraryFactory.eINSTANCE;
+
+						initializeResource {
+							getContents() += libraryFactory.createLibrary
+						}
+					}
+				}
+			'''
+			toBeFormatted = '''
+import org.eclipse.emf.parsley.examples.library.EXTLibraryFactory
+
+				module my.empty {
+					resourceManager {
+						val EXTLibraryFactory libraryFactory = EXTLibraryFactory.eINSTANCE;
+						
+						initializeResource { 				getContents() += libraryFactory.createLibrary
+						}
+					}
+				}
+			'''
+		]
+	}
+
+	@Test def void testTableViewerContentProvider() {
+		assertFormatted[
+			expectation = '''
+import org.eclipse.emf.ecore.resource.Resource
+
+module my.empty {
+	tableViewerContentProvider {
+		val field = "a field";
+		elements {
+			Resource -> {
+				getContents()
+			}
+		}
+	}
+}
+			'''
+			toBeFormatted = '''
+import org.eclipse.emf.ecore.resource.Resource
+
+module my.empty {
+	tableViewerContentProvider { 		val field  =  "a field";
+	elements { 			Resource  ->  { 				getContents()
+			}
+		}
+	}
+}
+			'''
+		]
+	}
+
+	@Test def void testTableViewerContentProviderWithoutElements() {
+		assertFormatted[
+			expectation = '''
+import org.eclipse.emf.ecore.resource.Resource
+
+module my.empty {
+	tableViewerContentProvider {
+		val field = "a field";
+	}
+}
+			'''
+			toBeFormatted = '''
+import org.eclipse.emf.ecore.resource.Resource
+
+module my.empty {
+	tableViewerContentProvider { 		val field  =  "a field";
+	}
+}
+			'''
+		]
+	}
+
+	@Test def void testViewerContentProvider() {
+		assertFormatted[
+			expectation = '''
+import org.eclipse.emf.ecore.resource.Resource
+import org.eclipse.emf.ecore.EObject
+
+module my.empty {
+	viewerContentProvider {
+		val field = "a field";
+		elements {
+			Resource -> {
+				getContents()
+			}
+		}
+		children {
+			Resource -> {
+				getContents()
+			}
+			EObject -> {
+				emptyList
+			}
+		}
+	}
+}
+			'''
+			toBeFormatted = '''
+import org.eclipse.emf.ecore.resource.Resource
+import org.eclipse.emf.ecore.EObject
+
+module my.empty {
+	viewerContentProvider { 		val field  =  "a field";
+	elements { 			Resource  ->  { 				getContents()
+			}
+		}
+		children { 			Resource  ->  { 				getContents()
+			} EObject  ->  { 				emptyList
+			}
+		}
+	}
+}
+			'''
+		]
+	}
+
+	@Test def void testConfigurator() {
+		assertFormatted[
+			expectation = '''
+import org.eclipse.emf.parsley.examples.library.EXTLibraryPackage
+import org.eclipse.emf.parsley.examples.library.Library
+import org.eclipse.emf.parsley.examples.library.Writer
+import org.eclipse.emf.common.util.URI
+
+module my.empty {
+	configurator {
+		val EXTLibraryPackage libraryPackage = EXTLibraryPackage.eINSTANCE;
+
+		resourceURI {
+			Library lib -> URI.createFileURI("file:/foo")
+			Writer -> null
+		}
+		eClass {
+			Library lib -> libraryPackage.library
+			Writer -> libraryPackage.writer
+		}
+	}
+}
+			'''
+			toBeFormatted = '''
+import org.eclipse.emf.parsley.examples.library.EXTLibraryPackage
+import org.eclipse.emf.parsley.examples.library.Library
+import org.eclipse.emf.parsley.examples.library.Writer
+import org.eclipse.emf.common.util.URI
+
+module my.empty {
+	
+	configurator { 		val EXTLibraryPackage libraryPackage = EXTLibraryPackage.eINSTANCE;
+		
+		resourceURI { 			Library lib -> URI.createFileURI("file:/foo") 			Writer -> null
+		}
+	eClass { 			Library lib -> libraryPackage.library 			Writer -> libraryPackage.writer
+		}
+	}
+}
+			'''
+		]
+	}
+
+	@Test def void testMenuBuilder() {
+		assertFormatted[
+			expectation = '''
+import org.eclipse.emf.parsley.examples.library.EXTLibraryFactory
+import org.eclipse.emf.parsley.examples.library.Library
+import org.eclipse.emf.parsley.examples.library.Writer
+
+module my.empty {
+	menuBuilder {
+		val EXTLibraryFactory libraryFactory = EXTLibraryFactory.eINSTANCE;
+
+		menus {
+			Object -> #[
+				actionRedo,
+				actionUndo,
+				separator,
+				actionCopy,
+				actionPaste
+			]
+
+			Writer -> {
+				#[
+					actionUndo,
+					separator,
+					submenu("Submenu1", #[
+						actionCopy,
+						submenu("Submenu2", #[
+							actionCut
+						])
+					]),
+					actionPaste
+				]
+			}
+		}
+
+		emfMenus {
+			Library lib -> newArrayList(
+				actionAdd(
+					"New Writer",
+					lib.writers,
+					libraryFactory.createWriter => [
+						name = "This is a new writer"
+					]
+				)
+			)
+			Writer -> #[
+				actionAdd(
+					"New book",
+					books,
+					libraryFactory.createBook => [
+						title = "New book"
+					]
+				)
+			]
+		}
+	}
+}
+			'''
+			toBeFormatted = '''
+import org.eclipse.emf.parsley.examples.library.EXTLibraryFactory
+import org.eclipse.emf.parsley.examples.library.Library
+import org.eclipse.emf.parsley.examples.library.Writer
+
+module my.empty {
+	
+	menuBuilder {
+		val EXTLibraryFactory libraryFactory = EXTLibraryFactory.eINSTANCE;
+		
+		menus {
+			Object  ->  #[
+				actionRedo,
+				actionUndo,
+				separator,
+				actionCopy,
+				actionPaste
+			]
+			
+			Writer -> {
+				#[
+					actionUndo,
+					separator,
+					submenu("Submenu1", #[
+						actionCopy,
+						submenu("Submenu2", #[
+							actionCut
+						])
+					]),
+					actionPaste
+				]
+			}
+		}
+		
+		emfMenus {
+			Library lib  ->  newArrayList(
+				actionAdd("New Writer", lib.writers, 
+					libraryFactory.createWriter => [
+						name = "This is a new writer"
+					]
+				)
+			)
+			Writer -> #[
+				actionAdd("New book", books,
+					libraryFactory.createBook => [
+						title = "New book"
+					]
+				)
+			]
+		}
+	}
+}
+			'''
+		]
+	}
+
+	@Test def void testControlFactory() {
+		assertFormatted[
+			expectation = '''
+import org.eclipse.emf.parsley.examples.library.Borrower
+import org.eclipse.emf.parsley.examples.library.Library
+import org.eclipse.emf.parsley.examples.library.Writer
+
+module my.empty {
+	formControlFactory {
+		control {
+			Library : name -> {
+			}
+			Writer : books -> createLabel(books.map[title].join(", "))
+			Writer : name -> {
+				createLabel(parent, "")
+			} target {
+				observeText
+			}
+			Writer : firstName -> toolkit.createLabel(parent, "") target observeText(SWT::Modify)
+			Borrower : firstName -> {
+				createText(firstName, SWT::MULTI, SWT::BORDER, SWT::WRAP, SWT::V_SCROLL)
+			}
+		}
+	}
+}
+			'''
+			toBeFormatted = '''
+import org.eclipse.emf.parsley.examples.library.Borrower
+import org.eclipse.emf.parsley.examples.library.Library
+import org.eclipse.emf.parsley.examples.library.Writer
+
+module my.empty {
+	formControlFactory {
+		control {
+			Library : name -> { }
+			Writer  :  books -> 
+				createLabel(
+					books.map[title].join(", "))
+			Writer : name -> { createLabel(parent, "") }
+				target { observeText }
+			Writer : firstName -> 
+				toolkit.createLabel(parent, "")
+				target observeText(SWT::Modify)
+			Borrower : firstName -> {
+				createText(firstName, SWT::MULTI, SWT::BORDER,
+									SWT::WRAP, SWT::V_SCROLL)
+			}
+		}
+	}
+}
+			'''
+		]
+	}
+
+	@Test def void testFeaturesProvider() {
+		assertFormatted[
+			expectation = '''
+import org.eclipse.emf.parsley.examples.library.Library
+import org.eclipse.emf.parsley.examples.library.Writer
+
+module my.empty {
+	featuresProvider {
+		features {
+			Library -> name
+			Writer -> firstName, lastName, books
+		}
+	}
+}
+			'''
+			toBeFormatted = '''
+import org.eclipse.emf.parsley.examples.library.Library
+import org.eclipse.emf.parsley.examples.library.Writer
+
+module my.empty {
+	featuresProvider {
+		features {
+			Library  ->  name
+			Writer -> firstName ,  lastName, books
+		}
+	}
+}
+			'''
+		]
+	}
+
+	@Test def void testFeatureCaptionProvider() {
+		assertFormatted[
+			expectation = '''
+import org.eclipse.emf.parsley.examples.library.Library
+import org.eclipse.emf.parsley.examples.library.Writer
+
+module my.empty {
+	featureCaptionProvider {
+		text {
+			Library : name -> 'Name'
+			Library : books -> 'Books'
+			Writer : lastName -> name.toFirstUpper
+		}
+	}
+}
+			'''
+			toBeFormatted = '''
+import org.eclipse.emf.parsley.examples.library.Library
+import org.eclipse.emf.parsley.examples.library.Writer
+
+module my.empty {
+	featureCaptionProvider {
+		text {
+			Library:name -> 'Name'
+			Library:books  ->  'Books'
+			Writer:lastName -> name.toFirstUpper
+		}
+	}
+}
+			'''
+		]
+	}
+
+	@Test def void testCaptionProviderWithLabel() {
+		assertFormatted[
+			expectation = '''
+import org.eclipse.emf.parsley.examples.library.EXTLibraryPackage
+import org.eclipse.emf.parsley.examples.library.Library
+import org.eclipse.emf.parsley.examples.library.Writer
+import org.eclipse.swt.SWT
+import org.eclipse.swt.widgets.Label
+
+module my.empty {
+	formFeatureCaptionProvider {
+		text {
+			Library : name -> 'Name' // constant
+			Library : books -> 'Books' // constant
+			Writer : lastName -> name.toFirstUpper // the implicit param is an EStructuralFeature
+		}
+		label {
+			Library : name -> createLabel(parent, "Name")
+			Library : books -> createLabel(parent, EXTLibraryPackage.eINSTANCE.library,
+				EXTLibraryPackage.eINSTANCE.library_Books)
+			Writer : lastName -> {
+				new Label(parent, SWT.NONE) => [ l |
+					l.^text = name
+				]
+			// the implicit param is an EStructuralFeature
+			// 'name' comes from EStructuralFeature
+			}
+		}
+	}
+}
+			'''
+			toBeFormatted = '''
+import org.eclipse.emf.parsley.examples.library.EXTLibraryPackage
+import org.eclipse.emf.parsley.examples.library.Library
+import org.eclipse.emf.parsley.examples.library.Writer
+import org.eclipse.swt.SWT
+import org.eclipse.swt.widgets.Label
+
+module my.empty {
+	formFeatureCaptionProvider {
+		text {
+			Library:name -> 'Name' // constant
+			Library:books -> 'Books' // constant
+			Writer:lastName -> name.toFirstUpper // the implicit param is an EStructuralFeature
+		}
+		label {
+			Library:name -> createLabel(parent, "Name")
+			Library:books -> createLabel(parent, EXTLibraryPackage.eINSTANCE.library, EXTLibraryPackage.eINSTANCE.library_Books)
+			Writer:lastName -> {
+				new Label(parent, SWT.NONE) => [
+					l |
+					l.^text = name
+				] 
+				// the implicit param is an EStructuralFeature
+				// 'name' comes from EStructuralFeature
+			}
+		}
+	}
+}
+			'''
+		]
+	}
+
+	@Test def void testTableLabelProvider() {
+		assertFormatted[
+			expectation = '''
+import org.eclipse.emf.parsley.examples.library.Book
+import org.eclipse.emf.parsley.examples.library.Library
+import org.eclipse.emf.parsley.examples.library.Writer
+import org.eclipse.swt.graphics.ImageData
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+
+module my.empty {
+	tableLabelProvider {
+		text {
+			Library : name -> 'Name' // constant
+			Library : books -> 'Books' // constant
+			Writer : lastName -> name.toFirstUpper // the implicit param is an EStructuralFeature
+		}
+
+		image {
+			Book : author -> if (author.name.nullOrEmpty)
+				"noname.gif"
+			else
+				new ImageData("writer.jpeg")
+		}
+
+		font {
+			Library : name -> JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT)
+		}
+
+		foreground {
+			Library : books -> Display.getCurrent().getSystemColor(SWT.COLOR_BLUE)
+		}
+
+		background {
+			Library : address -> Display.getCurrent().getSystemColor(SWT.COLOR_GREEN)
+		}
+
+		rowFont {
+			Library -> JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT)
+		}
+
+		rowForeground {
+			Library -> Display.getCurrent().getSystemColor(SWT.COLOR_BLUE)
+		}
+
+		rowBackground {
+			Library -> Display.getCurrent().getSystemColor(SWT.COLOR_GREEN)
+		}
+	}
+}
+			'''
+			toBeFormatted = '''
+import org.eclipse.emf.parsley.examples.library.Book
+import org.eclipse.emf.parsley.examples.library.Library
+import org.eclipse.emf.parsley.examples.library.Writer
+import org.eclipse.swt.graphics.ImageData
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+
+module my.empty {
+	tableLabelProvider {
+		text {
+			Library:name -> 'Name' // constant
+			Library:books -> 'Books' // constant
+			Writer:lastName -> name.toFirstUpper // the implicit param is an EStructuralFeature
+		}
+		
+				image {
+			Book: author -> 
+				if (author.name.nullOrEmpty) 
+					"noname.gif"
+				else
+					new ImageData("writer.jpeg")
+		}
+		
+			font {
+			Library : name -> JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT)
+		}
+		
+	foreground {
+			Library : books -> Display.getCurrent().getSystemColor(SWT.COLOR_BLUE)
+		}
+		
+			background {
+			Library : address -> Display.getCurrent().getSystemColor(SWT.COLOR_GREEN)
+		}
+		
+	rowFont {
+			Library -> JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT)
+		}
+		
+			rowForeground {
+			Library -> Display.getCurrent().getSystemColor(SWT.COLOR_BLUE)
+		}
+		
+	rowBackground {
+			Library -> Display.getCurrent().getSystemColor(SWT.COLOR_GREEN)
+		}
+	}
+}
+			'''
+		]
+	}
+
+	@Test def void testLabelProvider() {
+		assertFormatted[
+			expectation = '''
+import org.eclipse.emf.parsley.examples.library.Book
+import org.eclipse.emf.parsley.examples.library.BookOnTape
+import org.eclipse.emf.parsley.examples.library.Borrower
+import org.eclipse.emf.parsley.examples.library.Lendable
+import org.eclipse.emf.parsley.examples.library.Library
+import org.eclipse.emf.parsley.examples.library.Writer
+import org.eclipse.swt.graphics.ImageData
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+
+module my.empty {
+	labelProvider {
+		text {
+			Library -> 'foo' // constant
+			Writer writer -> writer.getName() // explicit param
+			Book -> title // implit 'it' param
+			Lendable -> 'copies: ' + copies
+			Borrower -> { // complex block
+				val buffer = 'borrowed: ' + borrowed.map [ b |
+					b.copies
+				]
+				buffer.toUpperCase
+			}
+			BookOnTape -> getTitle
+		}
+
+		image {
+			Library -> 'library.jpeg' // constant
+			Writer writer -> if (writer.name.nullOrEmpty)
+				"noname.gif"
+			else
+				new ImageData("writer.jpeg")
+		}
+
+		font {
+			Library -> JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT)
+		}
+
+		foreground {
+			Library -> Display.getCurrent().getSystemColor(SWT.COLOR_BLUE)
+		}
+
+		background {
+			Library -> Display.getCurrent().getSystemColor(SWT.COLOR_GREEN)
+		}
+	}
+}
+			'''
+			toBeFormatted = '''
+import org.eclipse.emf.parsley.examples.library.Book
+import org.eclipse.emf.parsley.examples.library.BookOnTape
+import org.eclipse.emf.parsley.examples.library.Borrower
+import org.eclipse.emf.parsley.examples.library.Lendable
+import org.eclipse.emf.parsley.examples.library.Library
+import org.eclipse.emf.parsley.examples.library.Writer
+import org.eclipse.swt.graphics.ImageData
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+
+module my.empty {
+	labelProvider {
+			text {
+				Library -> 'foo' // constant
+		Writer writer -> writer.getName() // explicit param
+			Book -> title // implit 'it' param
+			Lendable -> 'copies: ' + copies
+			Borrower -> { // complex block
+				val buffer = 'borrowed: ' + borrowed.map [
+					b | b.copies
+				]
+				buffer.toUpperCase
+			}
+			BookOnTape -> getTitle
+		}
+		
+			image {
+			Library -> 'library.jpeg' // constant
+		Writer writer -> 
+				if (writer.name.nullOrEmpty) 
+					"noname.gif"
+				else
+					new ImageData("writer.jpeg")
+		}
+		
+	font {
+			Library -> JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT)
+		}
+		
+			foreground {
+			Library -> Display.getCurrent().getSystemColor(SWT.COLOR_BLUE)
+		}
+		
+background {
+			Library -> Display.getCurrent().getSystemColor(SWT.COLOR_GREEN)
+		}
+	}
+}
+			'''
+		]
+	}
+
+	@Test def void testBindings() {
+		assertFormatted[
+			expectation = '''
+import org.eclipse.jface.viewers.ILabelProvider
+import org.eclipse.jface.viewers.IBaseLabelProvider
+import org.eclipse.emf.parsley.ui.provider.ViewerLabelProvider
+
+module my.empty {
+	bindings {
+		type ILabelProvider -> ViewerLabelProvider
+		type IBaseLabelProvider -> ViewerLabelProvider
+		provide IBaseLabelProvider -> ViewerLabelProvider
+		value IBaseLabelProvider a -> ViewerLabelProvider
+	}
+}
+			'''
+			toBeFormatted = '''
+import org.eclipse.jface.viewers.ILabelProvider
+import org.eclipse.jface.viewers.IBaseLabelProvider
+import org.eclipse.emf.parsley.ui.provider.ViewerLabelProvider
+
+module my.empty {
+	bindings {
+		type  ILabelProvider  ->  ViewerLabelProvider
+		type  IBaseLabelProvider -> ViewerLabelProvider
+		provide  IBaseLabelProvider  ->  ViewerLabelProvider
+		value IBaseLabelProvider  a  ->  ViewerLabelProvider
+	}
+}
+			'''
+		]
+	}
+
+	@Test def void testProposals() {
+		assertFormatted[
+			expectation = '''
+import org.eclipse.emf.parsley.examples.library.Book
+import org.eclipse.emf.parsley.examples.library.Borrower
+import org.eclipse.emf.parsley.examples.library.EXTLibraryFactory
+import org.eclipse.emf.parsley.examples.library.Library
+import org.eclipse.emf.parsley.examples.library.Writer
+
+module my.empty {
+	proposals {
+		Library : name -> {
+			newArrayList('foo', 'bar')
+		}
+		Writer : books -> {
+			books
+		} // it.books
+		Book : author -> {
+			newArrayList(
+				EXTLibraryFactory::eINSTANCE.createWriter => [
+					name = "Foo"
+				],
+				EXTLibraryFactory::eINSTANCE.createWriter => [
+					name = "Bar"
+				]
+			)
+		}
+		Borrower : borrowed -> {
+			val p = defaultProposals(feature) => [
+				add(EXTLibraryFactory::eINSTANCE.createBook => [
+					title = "Fake Book"
+				])
+			]
+			return p
+		}
+	}
+}
+			'''
+			toBeFormatted = '''
+import org.eclipse.emf.parsley.examples.library.Book
+import org.eclipse.emf.parsley.examples.library.Borrower
+import org.eclipse.emf.parsley.examples.library.EXTLibraryFactory
+import org.eclipse.emf.parsley.examples.library.Library
+import org.eclipse.emf.parsley.examples.library.Writer
+
+module my.empty {
+	proposals {
+	Library : name -> { newArrayList('foo', 'bar') }
+			Writer : books -> 
+			{ books } // it.books
+		Book : author -> {
+				newArrayList(
+				EXTLibraryFactory::eINSTANCE.createWriter => [
+					name = "Foo"
+				],
+				EXTLibraryFactory::eINSTANCE.createWriter => [
+					name = "Bar"
+				]
+			)
+		}
+	Borrower : borrowed -> {
+			val p = defaultProposals(feature) => [
+				add(EXTLibraryFactory::eINSTANCE.createBook => [
+					title = "Fake Book"
+				])
+			]
+			return p
+		}
+	}
+}
+			'''
+		]
+	}
+
+}
\ No newline at end of file
diff --git a/dsl/org.eclipse.emf.parsley.dsl.tests/src/org/eclipse/emf/parsley/dsl/tests/EmfParsleyDslScopingTests.xtend b/dsl/org.eclipse.emf.parsley.dsl.tests/src/org/eclipse/emf/parsley/dsl/tests/EmfParsleyDslScopingTests.xtend
index 447eede..88b912f 100644
--- a/dsl/org.eclipse.emf.parsley.dsl.tests/src/org/eclipse/emf/parsley/dsl/tests/EmfParsleyDslScopingTests.xtend
+++ b/dsl/org.eclipse.emf.parsley.dsl.tests/src/org/eclipse/emf/parsley/dsl/tests/EmfParsleyDslScopingTests.xtend
@@ -32,7 +32,7 @@
 	@Test
 	def void testFeaturesForLabelSpecifications() {
 		inputs.tableLabelProvider.parseModel.
-			module.tableLabelProvider.labelSpecifications.head.
+			module.tableLabelProvider.featureTexts.specifications.head.
 				assertScope
 				(ModelPackage::eINSTANCE.featureAssociatedExpression_Feature,
 					"name, books, borrowers, writers, employees, stock, branches, parentBranch, people, address, class"
@@ -43,7 +43,7 @@
 	@Test
 	def void testFeaturesForPropertyDescriptionSpecifications() {
 		inputs.featureCaptionProvider.parseModel.
-			module.featureCaptionProvider.specifications.head.
+			module.featureCaptionProvider.featureTexts.specifications.head.
 				assertScope
 				(ModelPackage::eINSTANCE.featureAssociatedExpression_Feature,
 					"name, books, borrowers, writers, employees, stock, branches, parentBranch, people, address, class"
diff --git a/dsl/org.eclipse.emf.parsley.dsl.tests/src/org/eclipse/emf/parsley/dsl/tests/EmfParsleyDslValidatorTests.xtend b/dsl/org.eclipse.emf.parsley.dsl.tests/src/org/eclipse/emf/parsley/dsl/tests/EmfParsleyDslValidatorTests.xtend
index d65bddd..ff3ff30 100644
--- a/dsl/org.eclipse.emf.parsley.dsl.tests/src/org/eclipse/emf/parsley/dsl/tests/EmfParsleyDslValidatorTests.xtend
+++ b/dsl/org.eclipse.emf.parsley.dsl.tests/src/org/eclipse/emf/parsley/dsl/tests/EmfParsleyDslValidatorTests.xtend
@@ -556,11 +556,11 @@
 		input.parse => [
 			4.assertEquals(validate.size)
 			assertDuplicateElement(
-				ModelPackage.eINSTANCE.labelSpecification,
+				ModelPackage.eINSTANCE.polymorphicSpecification,
 				input.indexOf("EClass ->"), 'EClass -> ""'.length
 			)
 			assertDuplicateElement(
-				ModelPackage.eINSTANCE.labelSpecification,
+				ModelPackage.eINSTANCE.polymorphicSpecification,
 				input.indexOf("EClass c"), 'EClass c -> ""'.length
 			)
 			assertDuplicateElement(
diff --git a/dsl/org.eclipse.emf.parsley.dsl/META-INF/MANIFEST.MF b/dsl/org.eclipse.emf.parsley.dsl/META-INF/MANIFEST.MF
index 7a605d7..8184c58 100644
--- a/dsl/org.eclipse.emf.parsley.dsl/META-INF/MANIFEST.MF
+++ b/dsl/org.eclipse.emf.parsley.dsl/META-INF/MANIFEST.MF
@@ -25,7 +25,6 @@
  org.eclipse.xtext.xbase.lib
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Export-Package: org.eclipse.emf.parsley.dsl,
- org.eclipse.emf.parsley.dsl.formatting,
  org.eclipse.emf.parsley.dsl.generator,
  org.eclipse.emf.parsley.dsl.jvmmodel,
  org.eclipse.emf.parsley.dsl.model,
diff --git a/dsl/org.eclipse.emf.parsley.dsl/src/org/eclipse/emf/parsley/dsl/EmfParsleyDsl.xtext b/dsl/org.eclipse.emf.parsley.dsl/src/org/eclipse/emf/parsley/dsl/EmfParsleyDsl.xtext
index c18d7d5..a471d76 100644
--- a/dsl/org.eclipse.emf.parsley.dsl/src/org/eclipse/emf/parsley/dsl/EmfParsleyDsl.xtext
+++ b/dsl/org.eclipse.emf.parsley.dsl/src/org/eclipse/emf/parsley/dsl/EmfParsleyDsl.xtext
@@ -71,35 +71,15 @@
 		fields += FieldSpecification*
 	
 		(
-			(
-			'text' '{'
-				labelSpecifications+=LabelSpecification*
-			'}'
-			)?
+			(texts=Texts)?
 			&
-			(
-			'image' '{'
-				imageSpecifications+=LabelSpecification*
-			'}'
-			)?
+			(images=Images)?
 			&
-			(
-			'font' '{'
-				fontSpecifications+=LabelSpecification*
-			'}'
-			)?
+			(fonts=Fonts)?
 			&
-			(
-			'foreground' '{'
-				foregroundSpecifications+=LabelSpecification*
-			'}'
-			)?
+			(foregrounds=Foregrounds)?
 			&
-			(
-			'background' '{'
-				backgroundSpecifications+=LabelSpecification*
-			'}'
-			)?
+			(backgrounds=Backgrounds)?
 		)
 	'}'
 ;
@@ -115,66 +95,60 @@
 	name=ValidID ('=' right=XExpression)? ';'?
 ;
 
+Texts:
+	{Texts} 'text' '{'
+		specifications+=PolymorphicSpecification*
+	'}'
+;
+
+Images:
+	{Images} 'image' '{'
+		specifications+=PolymorphicSpecification*
+	'}'
+;
+
+Fonts:
+	{Fonts} 'font' '{'
+		specifications+=PolymorphicSpecification*
+	'}'
+;
+
+Foregrounds:
+	{Foregrounds} 'foreground' '{'
+		specifications+=PolymorphicSpecification*
+	'}'
+;
+
+Backgrounds:
+	{Backgrounds} 'background' '{'
+		specifications+=PolymorphicSpecification*
+	'}'
+;
+
 TableLabelProvider:
 	{TableLabelProvider} 'tableLabelProvider' (extendsClause=ExtendsClause)? '{'
 		fields += FieldSpecification*
-		// Note: the assignments text='text' are useless for the AST, but they help to avoid
-		// to get too many ambiguities in the grammar, and avoid a too big serializer
-		// (The code of method init(IGrammarAccess) is exceeding the 65535 bytes limit in EmfParsleyDslSyntacticSequencer.java)
-		// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=458705#c5
 		(
-			(
-			text='text' '{'
-				labelSpecifications+=FeatureAssociatedExpression*
-			'}'
-			)?
+			(featureTexts=FeatureTexts)?
 			&
-			(
-			image='image' '{'
-				imageSpecifications+=FeatureAssociatedExpression*
-			'}'
-			)?
+			(featureImages=FeatureImages)?
 			&
-			(
-			font='font' '{'
-				fontSpecifications+=FeatureAssociatedExpression*
-			'}'
-			)?
+			(featureFonts=FeatureFonts)?
 			&
-			(
-			foreground='foreground' '{'
-				foregroundSpecifications+=FeatureAssociatedExpression*
-			'}'
-			)?
+			(featureForegrounds=FeatureForegrounds)?
 			&
-			(
-			background='background' '{'
-				backgroundSpecifications+=FeatureAssociatedExpression*
-			'}'
-			)?
+			(featureBackgrounds=FeatureBackgrounds)?
 			&
-			(
-			rowFont='rowFont' '{'
-				rowFontSpecifications+=LabelSpecification*
-			'}'
-			)?
+			(rowFonts=RowFonts)?
 			&
-			(
-			rowForeground='rowForeground' '{'
-				rowForegroundSpecifications+=LabelSpecification*
-			'}'
-			)?
+			(rowForegrounds=RowForegrounds)?
 			&
-			(
-			rowBackground='rowBackground' '{'
-				rowBackgroundSpecifications+=LabelSpecification*
-			'}'
-			)?
+			(rowBackgrounds=RowBackgrounds)?
 		)
 	'}'
 ;
 
-LabelSpecification:
+PolymorphicSpecification:
 	parameterType=JvmTypeReference (name=ValidID)?
 	'->'
 	expression = XExpression
@@ -185,11 +159,7 @@
 	{FeatureCaptionProvider} 'featureCaptionProvider' (extendsClause=ExtendsClause)? '{'
 		fields += FieldSpecification*
 
-		((
-		'text' '{'
-			specifications+=FeatureAssociatedExpression*
-		'}'
-		)?)
+		(featureTexts=FeatureTexts)?
 	'}'
 ;
 
@@ -197,17 +167,11 @@
 	{FormFeatureCaptionProvider} 'formFeatureCaptionProvider' (extendsClause=ExtendsClause)? '{'
 		fields += FieldSpecification*
 
-		((
-		'text' '{'
-			specifications+=FeatureAssociatedExpression*
-		'}'
-		)?
-		&
 		(
-		'label' '{'
-			labelSpecifications+=FeatureAssociatedExpression*
-		'}'
-		)?)
+			(featureTexts=FeatureTexts)?
+			&
+			(featureLabels=FeatureLabels)?
+		)
 	'}'
 ;
 
@@ -215,20 +179,79 @@
 	{DialogFeatureCaptionProvider} 'dialogFeatureCaptionProvider' (extendsClause=ExtendsClause)? '{'
 		fields += FieldSpecification*
 		
-		((
-		'text' '{'
-			specifications+=FeatureAssociatedExpression*
-		'}'
-		)?
-		&
 		(
-		'label' '{'
-			labelSpecifications+=FeatureAssociatedExpression*
-		'}'
-		)?)
+			(featureTexts=FeatureTexts)?
+			&
+			(featureLabels=FeatureLabels)?
+		)
 	'}'
 ;
 
+FeatureTexts:
+	{FeatureTexts} 'text' '{'
+		specifications+=FeatureAssociatedExpression*
+	'}'
+;
+
+FeatureImages:
+	{FeatureImages} 'image' '{'
+		specifications+=FeatureAssociatedExpression*
+	'}'
+;
+
+FeatureFonts:
+	{FeatureFonts} 'font' '{'
+		specifications+=FeatureAssociatedExpression*
+	'}'
+;
+
+FeatureForegrounds:
+	{FeatureForegrounds} 'foreground' '{'
+		specifications+=FeatureAssociatedExpression*
+	'}'
+;
+
+FeatureBackgrounds:
+	{FeatureBackgrounds} 'background' '{'
+		specifications+=FeatureAssociatedExpression*
+	'}'
+;
+
+FeatureLabels:
+	{FeatureLabels} 'label' '{'
+		specifications+=FeatureAssociatedExpression*
+	'}'
+;
+
+WithFeatureAssociatedExpressions:
+	FeatureTexts | FeatureImages | FeatureFonts | FeatureForegrounds | FeatureBackgrounds | FeatureLabels
+;
+
+RowFonts:
+	{RowFonts} 'rowFont' '{'
+		specifications+=PolymorphicSpecification*
+	'}'
+;
+
+RowForegrounds:
+	{RowForegrounds} 'rowForeground' '{'
+		specifications+=PolymorphicSpecification*
+	'}'
+;
+
+RowBackgrounds:
+	{RowBackgrounds} 'rowBackground' '{'
+		specifications+=PolymorphicSpecification*
+	'}'
+;
+
+WithExpressions:
+	RowFonts | RowForegrounds | RowBackgrounds | Menus | EmfMenus |
+	ConfiguratorResourceURI | ConfiguratorEClass |
+	ContentProviderElements | ContentProviderChildren |
+	Texts | Images | Fonts | Foregrounds | Backgrounds
+;
+
 /**
  * Specify an XExpression associated to an EStructuralFeature
  * (actually we associated to the Java get method in the generated code, which
@@ -244,11 +267,7 @@
 	{FeaturesProvider} 'featuresProvider' (extendsClause=ExtendsClause)? '{'
 		fields += FieldSpecification*
 		
-		((
-		'features' '{'
-			featureSpecifications+=FeatureSpecification*
-		'}'
-		)?)
+		(features=FeatureSpecifications)?
 	'}'
 ;
 
@@ -257,11 +276,13 @@
 	{TableFeaturesProvider} 'tableFeaturesProvider' (extendsClause=ExtendsClause)? '{'
 		fields += FieldSpecification*
 		
-		((
-		'features' '{'
-			featureSpecifications+=FeatureSpecification*
-		'}'
-		)?)
+		(features=FeatureSpecifications)?
+	'}'
+;
+
+FeatureSpecifications:
+	{FeatureSpecifications} 'features' '{'
+		featureSpecifications+=FeatureSpecification*
 	'}'
 ;
 
@@ -275,11 +296,7 @@
 	{FormControlFactory} 'formControlFactory' (extendsClause=ExtendsClause)? '{'
 		fields += FieldSpecification*
 		
-		(
-		'control' '{'
-			controlSpecifications+=ControlFactorySpecification*
-		'}'
-		)?
+		(controls=ControlFactorySpecifications)?
 	'}'
 ;
 
@@ -287,11 +304,13 @@
 	{DialogControlFactory} 'dialogControlFactory' (extendsClause=ExtendsClause)? '{'
 		fields += FieldSpecification*
 		
-		(
-		'control' '{'
-			controlSpecifications+=ControlFactorySpecification*
-		'}'
-		)?
+		(controls=ControlFactorySpecifications)?
+	'}'
+;
+
+ControlFactorySpecifications:
+	{ControlFactorySpecifications} 'control' '{'
+		specifications+=ControlFactorySpecification*
 	'}'
 ;
 
@@ -314,17 +333,23 @@
 	{MenuBuilder} 'menuBuilder' (extendsClause=ExtendsClause)? '{'
 		fields += FieldSpecification*
 	
-		((
-		'menus' '{'
-			menuSpecifications+=LabelSpecification*
-		'}'
-		)?
-		&
 		(
-		'emfMenus' '{'
-			emfMenuSpecifications+=LabelSpecification*
-		'}'
-		)?)
+			(menus=Menus)?
+			&
+			(emfMenus=EmfMenus)?
+		)
+	'}'
+;
+
+Menus:
+	{Menus} 'menus' '{'
+		specifications+=PolymorphicSpecification*
+	'}'
+;
+
+EmfMenus:
+	{EmfMenus} 'emfMenus' '{'
+		specifications+=PolymorphicSpecification*
 	'}'
 ;
 
@@ -333,36 +358,34 @@
 		fields += FieldSpecification*
 	
 		(
-			(
-			'resourceURI' '{'
-				resourceURISpecifications+=LabelSpecification*
-			'}'
-			)?
-		&
-			(
-			'eClass' '{'
-				eClassSpecifications+=LabelSpecification*
-			'}'
-			)?
+			(resourceURI=ConfiguratorResourceURI)?
+			&
+			(eClassSpec=ConfiguratorEClass)?
 		)
 	'}'
 ;
 
+ConfiguratorResourceURI:
+	{ConfiguratorResourceURI} 'resourceURI' '{'
+		specifications+=PolymorphicSpecification*
+	'}'
+;
+
+ConfiguratorEClass:
+	{ConfiguratorEClass} 'eClass' '{'
+		specifications+=PolymorphicSpecification*
+	'}'
+;
+
 ViewerContentProvider:
 	{ViewerContentProvider} 'viewerContentProvider' (extendsClause=ExtendsClause)? '{'
 		fields += FieldSpecification*
 		
-		((
-		'elements' '{'
-			elementsSpecifications+=LabelSpecification*
-		'}'
-		)?
-		&
 		(
-		'children' '{'
-			childrenSpecifications+=LabelSpecification*
-		'}'
-		)?)
+			(elements=ContentProviderElements)?
+			&
+			(children=ContentProviderChildren)?
+		)
 	'}'
 ;
 
@@ -370,11 +393,19 @@
 	{TableViewerContentProvider} 'tableViewerContentProvider' (extendsClause=ExtendsClause)? '{'
 		fields += FieldSpecification*
 		
-		(
-		'elements' '{'
-			elementsSpecifications+=LabelSpecification*
-		'}'
-		)?
+		(elements=ContentProviderElements)?
+	'}'
+;
+
+ContentProviderChildren:
+	{ContentProviderChildren} 'children' '{'
+		specifications+=PolymorphicSpecification*
+	'}'
+;
+
+ContentProviderElements:
+	{ContentProviderElements} 'elements' '{'
+		specifications+=PolymorphicSpecification*
 	'}'
 ;
 
diff --git a/dsl/org.eclipse.emf.parsley.dsl/src/org/eclipse/emf/parsley/dsl/GenerateEmfParsleyDsl.mwe2 b/dsl/org.eclipse.emf.parsley.dsl/src/org/eclipse/emf/parsley/dsl/GenerateEmfParsleyDsl.mwe2
index f66a9c4..cfc5881 100644
--- a/dsl/org.eclipse.emf.parsley.dsl/src/org/eclipse/emf/parsley/dsl/GenerateEmfParsleyDsl.mwe2
+++ b/dsl/org.eclipse.emf.parsley.dsl/src/org/eclipse/emf/parsley/dsl/GenerateEmfParsleyDsl.mwe2
@@ -98,7 +98,7 @@
                 }
     
                 // formatter API
-                fragment = formatting.FormatterFragment auto-inject {}
+                fragment = formatting2.Formatter2Fragment auto-inject {}
     
                 // labeling API
                 fragment = labeling.LabelProviderFragment auto-inject {}
diff --git a/dsl/org.eclipse.emf.parsley.dsl/src/org/eclipse/emf/parsley/dsl/formatting/EmfParsleyDslFormatter.xtend b/dsl/org.eclipse.emf.parsley.dsl/src/org/eclipse/emf/parsley/dsl/formatting/EmfParsleyDslFormatter.xtend
deleted file mode 100644
index 43d9e63..0000000
--- a/dsl/org.eclipse.emf.parsley.dsl/src/org/eclipse/emf/parsley/dsl/formatting/EmfParsleyDslFormatter.xtend
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- * Lorenzo Bettini - initial API and implementation
- *******************************************************************************/
-package org.eclipse.emf.parsley.dsl.formatting
-
-import org.eclipse.xtext.formatting.impl.AbstractDeclarativeFormatter
-import org.eclipse.xtext.formatting.impl.FormattingConfig
-// import com.google.inject.Inject;
-// import org.eclipse.emf.parsley.dsl.services.EmfParsleyDslGrammarAccess
-
-/**
- * This class contains custom formatting description.
- * 
- * see : http://www.eclipse.org/Xtext/documentation.html#formatting
- * on how and when to use it 
- * 
- * Also see {@link org.eclipse.xtext.xtext.XtextFormattingTokenSerializer} as an example
- */
-class EmfParsleyDslFormatter extends AbstractDeclarativeFormatter {
-
-//	@Inject extension EmfParsleyDslGrammarAccess
-	
-	override protected void configureFormatting(FormattingConfig c) {
-// It's usually a good idea to activate the following three statements.
-// They will add and preserve newlines around comments
-//		c.setLinewrap(0, 1, 2).before(SL_COMMENTRule)
-//		c.setLinewrap(0, 1, 2).before(ML_COMMENTRule)
-//		c.setLinewrap(0, 1, 1).after(ML_COMMENTRule)
-	}
-}
diff --git a/dsl/org.eclipse.emf.parsley.dsl/src/org/eclipse/emf/parsley/dsl/formatting2/EmfParsleyDslFormatter.xtend b/dsl/org.eclipse.emf.parsley.dsl/src/org/eclipse/emf/parsley/dsl/formatting2/EmfParsleyDslFormatter.xtend
new file mode 100644
index 0000000..b02e6a8
--- /dev/null
+++ b/dsl/org.eclipse.emf.parsley.dsl/src/org/eclipse/emf/parsley/dsl/formatting2/EmfParsleyDslFormatter.xtend
@@ -0,0 +1,457 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Lorenzo Bettini - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.parsley.dsl.formatting2;
+
+import com.google.inject.Provider
+import java.util.List
+import org.eclipse.emf.ecore.EObject
+import org.eclipse.emf.parsley.dsl.model.AbstractControlFactory
+import org.eclipse.emf.parsley.dsl.model.AbstractFeatureCaptionProviderWithLabel
+import org.eclipse.emf.parsley.dsl.model.AbstractFeatureProvider
+import org.eclipse.emf.parsley.dsl.model.Binding
+import org.eclipse.emf.parsley.dsl.model.BindingsSpecification
+import org.eclipse.emf.parsley.dsl.model.Configurator
+import org.eclipse.emf.parsley.dsl.model.ControlFactorySpecification
+import org.eclipse.emf.parsley.dsl.model.ExtendsClause
+import org.eclipse.emf.parsley.dsl.model.FeatureAssociatedExpression
+import org.eclipse.emf.parsley.dsl.model.FeatureCaptionProvider
+import org.eclipse.emf.parsley.dsl.model.FeatureSpecification
+import org.eclipse.emf.parsley.dsl.model.FieldSpecification
+import org.eclipse.emf.parsley.dsl.model.LabelProvider
+import org.eclipse.emf.parsley.dsl.model.MenuBuilder
+import org.eclipse.emf.parsley.dsl.model.Model
+import org.eclipse.emf.parsley.dsl.model.Module
+import org.eclipse.emf.parsley.dsl.model.PartsSpecifications
+import org.eclipse.emf.parsley.dsl.model.PolymorphicSpecification
+import org.eclipse.emf.parsley.dsl.model.ProposalCreator
+import org.eclipse.emf.parsley.dsl.model.ProviderBinding
+import org.eclipse.emf.parsley.dsl.model.ResourceManager
+import org.eclipse.emf.parsley.dsl.model.SimpleMethodSpecification
+import org.eclipse.emf.parsley.dsl.model.TableLabelProvider
+import org.eclipse.emf.parsley.dsl.model.TableViewerContentProvider
+import org.eclipse.emf.parsley.dsl.model.TypeBinding
+import org.eclipse.emf.parsley.dsl.model.ValueBinding
+import org.eclipse.emf.parsley.dsl.model.ViewSpecification
+import org.eclipse.emf.parsley.dsl.model.ViewerContentProvider
+import org.eclipse.emf.parsley.dsl.model.WithExpressions
+import org.eclipse.emf.parsley.dsl.model.WithExtendsClause
+import org.eclipse.emf.parsley.dsl.model.WithFeatureAssociatedExpressions
+import org.eclipse.emf.parsley.dsl.model.WithFields
+import org.eclipse.xtext.formatting2.IFormattableDocument
+import org.eclipse.xtext.xbase.annotations.formatting2.XbaseWithAnnotationsFormatter
+import org.eclipse.xtext.xbase.annotations.xAnnotations.XAnnotation
+
+import static org.eclipse.emf.parsley.dsl.model.ModelPackage.Literals.*
+
+/**
+ * @author Lorenzo Bettini
+ *
+ */
+class EmfParsleyDslFormatter extends XbaseWithAnnotationsFormatter {
+
+	override void format(Object o, IFormattableDocument document) {
+		// we could use dispatch methods, but that will generate many other
+		// if cases for inherited dispatch methods that will never be executed during the
+		// tests and I prefer to have full control on code coverage.
+		if (o instanceof AbstractControlFactory) {
+			_format(o, document);
+			return;
+		} else if (o instanceof AbstractFeatureCaptionProviderWithLabel) {
+			_format(o, document);
+			return;
+		} else if (o instanceof AbstractFeatureProvider) {
+			_format(o, document);
+			return;
+		} else if (o instanceof Configurator) {
+			_format(o, document);
+			return;
+		} else if (o instanceof FeatureCaptionProvider) {
+			_format(o, document);
+			return;
+		} else if (o instanceof LabelProvider) {
+			_format(o, document);
+			return;
+		} else if (o instanceof MenuBuilder) {
+			_format(o, document);
+			return;
+		} else if (o instanceof ProposalCreator) {
+			_format(o, document);
+			return;
+		} else if (o instanceof ResourceManager) {
+			_format(o, document);
+			return;
+		} else if (o instanceof TableLabelProvider) {
+			_format(o, document);
+			return;
+		} else if (o instanceof TableViewerContentProvider) {
+			_format(o, document);
+			return;
+		} else if (o instanceof ViewerContentProvider) {
+			_format(o, document);
+			return;
+		} else if (o instanceof ControlFactorySpecification) {
+			_format(o, document);
+			return;
+		} else if (o instanceof FeatureAssociatedExpression) {
+			_format(o, document);
+			return;
+		} else if (o instanceof FeatureSpecification) {
+			_format(o, document);
+			return;
+		} else if (o instanceof Module) {
+			_format(o, document);
+			return;
+		} else if (o instanceof ProviderBinding) {
+			_format(o, document);
+			return;
+		} else if (o instanceof TypeBinding) {
+			_format(o, document);
+			return;
+		} else if (o instanceof ValueBinding) {
+			_format(o, document);
+			return;
+		} else if (o instanceof ViewSpecification) {
+			_format(o, document);
+			return;
+		} else if (o instanceof BindingsSpecification) {
+			_format(o, document);
+			return;
+		} else if (o instanceof ExtendsClause) {
+			_format(o, document);
+			return;
+		} else if (o instanceof FieldSpecification) {
+			_format(o, document);
+			return;
+		} else if (o instanceof PolymorphicSpecification) {
+			_format(o, document);
+			return;
+		} else if (o instanceof Model) {
+			_format(o, document);
+			return;
+		} else if (o instanceof PartsSpecifications) {
+			_format(o, document);
+			return;
+		} else if (o instanceof SimpleMethodSpecification) {
+			_format(o, document);
+			return;
+		} else {
+			super.format(o, document)
+		}
+	}
+
+	def void _format(Model model, extension IFormattableDocument document) {
+		format(model.getImportSection(), document);
+		format(model.getModule(), document);
+	}
+
+	def void _format(Module module, extension IFormattableDocument document) {
+		indentBlock(module, document) [
+			format(module.getExtendsClause(), document);
+			format(module.getBindingsSpecification(), document);
+			format(module.getLabelProvider(), document);
+			format(module.getTableLabelProvider(), document);
+			format(module.getFeatureCaptionProvider(), document);
+			format(module.getFormFeatureCaptionProvider(), document);
+			format(module.getDialogFeatureCaptionProvider(), document);
+			format(module.getFeaturesProvider(), document);
+			format(module.getTableFeaturesProvider(), document);
+			format(module.getFormControlFactory(), document);
+			format(module.getDialogControlFactory(), document);
+			format(module.getProposalCreator(), document);
+			format(module.getMenuBuilder(), document);
+			format(module.getConfigurator(), document);
+			format(module.getViewerContentProvider(), document);
+			format(module.getTableViewerContentProvider(), document);
+			format(module.getPartsSpecifications(), document);
+			format(module.getResourceManager(), document);
+		]
+	}
+
+	def void _format(ExtendsClause extendsclause, extension IFormattableDocument document) {
+		format(extendsclause.getSuperType(), document);
+		extendsclause.regionForKeyword("extends").surround[oneSpace]
+	}
+
+	def void _format(BindingsSpecification bindingsspecification, extension IFormattableDocument document) {
+		indentBlock(bindingsspecification, document) [
+			formatAndSeparateElementsWithNewlines(bindingsspecification.bindings, document)
+		]
+	}
+
+	def void _format(TypeBinding typebinding, extension IFormattableDocument document) {
+		oneSpaceAfterKeyword(typebinding, "type", document)
+		format(typebinding.getTypeToBind(), document);
+		formatBinding(typebinding, document)
+	}
+
+	def void _format(ProviderBinding providerbinding, extension IFormattableDocument document) {
+		oneSpaceAfterKeyword(providerbinding, "provide", document)
+		format(providerbinding.getType(), document);
+		formatBinding(providerbinding, document)
+	}
+
+	def void _format(ValueBinding valuebinding, extension IFormattableDocument document) {
+		oneSpaceAfterKeyword(valuebinding, "value", document)
+		format(valuebinding.getTypeDecl(), document);
+		valuebinding.regionForFeature(VALUE_BINDING__ID).surround[oneSpace]
+		formatBinding(valuebinding, document)
+	}
+
+	def private void formatBinding(Binding binding, extension IFormattableDocument document) {
+		binding.regionForKeyword("->").surround[oneSpace]
+		format(binding.getTo(), document);
+	}
+
+	def void _format(LabelProvider labelprovider, extension IFormattableDocument document) {
+		formatWithFields(labelprovider, document) [
+			formatSpecifications(labelprovider.texts, document)
+			formatSpecifications(labelprovider.images, document)
+			formatSpecifications(labelprovider.fonts, document)
+			formatSpecifications(labelprovider.foregrounds, document)
+			formatSpecifications(labelprovider.backgrounds, document)
+		]
+	}
+
+	def void _format(FieldSpecification expr, extension IFormattableDocument document) {
+		for (XAnnotation annotations : expr.getAnnotations()) {
+			format(annotations, document);
+		}
+		expr.regionForKeyword("val").append[oneSpace]
+		expr.regionForKeyword("var").append[oneSpace]
+		expr.regionForKeyword("extension").append[oneSpace]
+		expr.type.append[oneSpace]
+		expr.regionForKeyword("=").surround[oneSpace]
+		expr.type.format(document)
+		expr.right.format(document)
+		expr.regionForKeyword(";").prepend[noSpace]
+	}
+
+	def void _format(TableLabelProvider tablelabelprovider, extension IFormattableDocument document) {
+		formatWithFields(tablelabelprovider, document) [
+			formatFeatureSpecifications(tablelabelprovider.featureTexts, document)
+			formatFeatureSpecifications(tablelabelprovider.featureImages, document)
+			formatFeatureSpecifications(tablelabelprovider.featureFonts, document)
+			formatFeatureSpecifications(tablelabelprovider.featureForegrounds, document)
+			formatFeatureSpecifications(tablelabelprovider.featureBackgrounds, document)
+			formatSpecifications(tablelabelprovider.rowFonts, document)
+			formatSpecifications(tablelabelprovider.rowForegrounds, document)
+			formatSpecifications(tablelabelprovider.rowBackgrounds, document)
+		]
+	}
+
+	def void _format(PolymorphicSpecification specification, extension IFormattableDocument document) {
+		format(specification.getParameterType(), document);
+		specification.regionForKeyword("->").surround[oneSpace]
+		format(specification.getExpression(), document);
+	}
+
+	def void _format(FeatureCaptionProvider featurecaptionprovider, extension IFormattableDocument document) {
+		formatWithFields(featurecaptionprovider, document) [
+			indentBlockAndFormatAndSeparateElementsWithNewlines(featurecaptionprovider.featureTexts, document) [
+				featurecaptionprovider.featureTexts.specifications
+			]
+		]
+	}
+
+	def void _format(AbstractFeatureCaptionProviderWithLabel featurecaptionprovider,
+		extension IFormattableDocument document) {
+		formatWithFields(featurecaptionprovider, document) [
+			formatFeatureSpecifications(featurecaptionprovider.featureTexts, document)
+			formatFeatureSpecifications(featurecaptionprovider.featureLabels, document)
+		]
+	}
+
+	def void _format(FeatureAssociatedExpression featureassociatedexpression,
+		extension IFormattableDocument document) {
+		format(featureassociatedexpression.getParameterType(), document);
+		featureassociatedexpression.regionForKeyword(":").surround[oneSpace]
+		featureassociatedexpression.regionForKeyword("->").surround[oneSpace]
+		format(featureassociatedexpression.getExpression(), document);
+	}
+
+	def void _format(AbstractFeatureProvider featuresprovider, extension IFormattableDocument document) {
+		formatWithFields(featuresprovider, document) [
+			indentBlockAndFormatAndSeparateElementsWithNewlines(featuresprovider.features, document) [
+				featuresprovider.features.featureSpecifications
+			]
+		]
+	}
+
+	def void _format(FeatureSpecification featurespecification, extension IFormattableDocument document) {
+		format(featurespecification.getParameterType(), document);
+		featurespecification.regionForKeyword("->").surround[oneSpace]
+		for (comma : featurespecification.regionsForKeywords(",")) {
+			comma.prepend[noSpace].append[oneSpace]
+		}
+	}
+
+	def void _format(AbstractControlFactory controlfactory, extension IFormattableDocument document) {
+		formatWithFields(controlfactory, document) [
+			indentBlockAndFormatAndSeparateElementsWithNewlines(controlfactory.controls, document) [
+				controlfactory.controls.specifications
+			]
+		]
+	}
+
+	def void _format(ControlFactorySpecification controlfactoryspecification,
+		extension IFormattableDocument document) {
+		format(controlfactoryspecification.getParameterType(), document);
+		controlfactoryspecification.regionForKeyword(":").surround[oneSpace]
+		controlfactoryspecification.regionForKeyword("->").surround[oneSpace]
+		format(controlfactoryspecification.getExpression(), document);
+		controlfactoryspecification.regionForKeyword("target").surround[oneSpace]
+		format(controlfactoryspecification.getTarget(), document);
+	}
+
+	def void _format(ProposalCreator proposalcreator, extension IFormattableDocument document) {
+		formatWithFields(proposalcreator, document) [
+			formatAndSeparateElementsWithNewlines(proposalcreator.proposalsSpecifications, document)
+		]
+	}
+
+	def void _format(MenuBuilder menubuilder, extension IFormattableDocument document) {
+		formatWithFields(menubuilder, document) [
+			formatSpecifications(menubuilder.menus, document)
+			formatSpecifications(menubuilder.emfMenus, document)
+		]
+	}
+
+	def void _format(Configurator configurator, extension IFormattableDocument document) {
+		formatWithFields(configurator, document) [
+			formatSpecifications(configurator.resourceURI, document)
+			formatSpecifications(configurator.EClassSpec, document)
+		]
+	}
+
+	def void _format(ViewerContentProvider viewercontentprovider, extension IFormattableDocument document) {
+		formatWithFields(viewercontentprovider, document) [
+			formatSpecifications(viewercontentprovider.elements, document)
+			formatSpecifications(viewercontentprovider.children, document)
+		]
+	}
+
+	def void _format(TableViewerContentProvider tableviewercontentprovider,
+		extension IFormattableDocument document) {
+		formatWithFields(tableviewercontentprovider, document) [
+			formatSpecifications(tableviewercontentprovider.elements, document)
+		]
+	}
+
+	def void _format(ResourceManager resourcemanager, extension IFormattableDocument document) {
+		formatWithFields(resourcemanager, document) [
+			format(resourcemanager.getInitializeBody(), document);
+			format(resourcemanager.getSaveBody(), document);
+		]
+	}
+
+	def void _format(SimpleMethodSpecification simplemethodspecification, extension IFormattableDocument document) {
+		formatAndSeparateWithNewlines(simplemethodspecification.body, document)
+	}
+
+	def void _format(PartsSpecifications partsspecifications, extension IFormattableDocument document) {
+		indentBlock(partsspecifications, document) [
+			formatAndSeparateElementsWithNewlines(partsspecifications.parts, document)
+		]
+	}
+
+	def void _format(ViewSpecification viewspecification, extension IFormattableDocument document) {
+		indentBlock(viewspecification, document) [
+			viewspecification.regionForKeyword("viewpart").append[oneSpace]
+
+			viewspecification.regionForKeyword("viewname").append[oneSpace]
+			viewspecification.regionForFeature(VIEW_SPECIFICATION__VIEW_NAME).append[setNewLines(1, 1, 2)]
+
+			viewspecification.regionForKeyword("viewclass").append[oneSpace]
+			format(viewspecification.type, document);
+			viewspecification.type.append[setNewLines(1, 1, 2)]
+
+			if (viewspecification.category != null) {
+				viewspecification.regionForKeyword("viewcategory").append[oneSpace]
+				viewspecification.regionForFeature(VIEW_SPECIFICATION__CATEGORY).append[setNewLines(1, 1, 2)]
+			}
+		]
+	}
+
+	def private formatWithFields(WithFields e, extension IFormattableDocument document,
+		(WithFields)=>void elementsFormatter) {
+		formatWithExtendsClause(e, document) [
+			formatFields(e, document)
+			elementsFormatter.apply(e)
+		]
+	}
+
+	def private formatWithExtendsClause(WithExtendsClause e, extension IFormattableDocument document,
+		(WithExtendsClause)=>void elementsFormatter) {
+		format(e.getExtendsClause(), document);
+		indentBlock(e, document) [
+			elementsFormatter.apply(e)
+		]
+		e.separateElementsWithNewlines(document)
+	}
+
+	def private formatFields(WithFields withFields, extension IFormattableDocument document) {
+		formatAndSeparateElementsWithNewlines(withFields.fields, document)
+	}
+
+
+	def private <T extends EObject> formatSpecifications(WithExpressions e, extension IFormattableDocument document) {
+		indentBlockAndFormatAndSeparateElementsWithNewlines(e, document) [
+			e.specifications
+		]
+	}
+
+	def private <T extends EObject> formatFeatureSpecifications(WithFeatureAssociatedExpressions e, extension IFormattableDocument document) {
+		indentBlockAndFormatAndSeparateElementsWithNewlines(e, document) [
+			e.specifications
+		]
+	}
+
+	/**
+	 * The elementsProvider is invoked only if the passed parent is not null
+	 */
+	def private <T extends EObject> indentBlockAndFormatAndSeparateElementsWithNewlines(EObject parent,
+		extension IFormattableDocument document, Provider<List<? extends T>> elementsProvider) {
+		if (parent != null) {
+			val list = elementsProvider.get
+			indentBlock(parent, document) [
+				formatAndSeparateElementsWithNewlines(list, document)
+			]
+			separateElementsWithNewlines(parent, document)
+		}
+	}
+
+	def private <T extends EObject> formatAndSeparateElementsWithNewlines(List<? extends T> elements, extension IFormattableDocument document) {
+		for (e : elements) {
+			formatAndSeparateWithNewlines(e, document)
+		}
+	}
+	
+	private def <T extends EObject> formatAndSeparateWithNewlines(T e, IFormattableDocument document) {
+		format(e, document)
+		separateElementsWithNewlines(e, document)
+	}
+
+	def private <T extends EObject> oneSpaceAfterKeyword(T element, String k, extension IFormattableDocument document) {
+		element.regionForKeyword(k).append[oneSpace]
+	}
+
+	def private <T extends EObject> separateElementsWithNewlines(T element, extension IFormattableDocument document) {
+		element.append[setNewLines(1, 1, 2)]
+	}
+
+	def private <T extends EObject> indentBlock(T element, extension IFormattableDocument document,
+		(T)=>void elementsFormatter) {
+		element.regionForKeyword("{").append[newLine; increaseIndentation]
+		elementsFormatter.apply(element)
+		element.regionForKeyword("}").prepend[decreaseIndentation]
+	}
+}
+
diff --git a/dsl/org.eclipse.emf.parsley.dsl/src/org/eclipse/emf/parsley/dsl/jvmmodel/EmfParsleyDslJvmModelInferrer.xtend b/dsl/org.eclipse.emf.parsley.dsl/src/org/eclipse/emf/parsley/dsl/jvmmodel/EmfParsleyDslJvmModelInferrer.xtend
index ad6a267..2b0d87f 100644
--- a/dsl/org.eclipse.emf.parsley.dsl/src/org/eclipse/emf/parsley/dsl/jvmmodel/EmfParsleyDslJvmModelInferrer.xtend
+++ b/dsl/org.eclipse.emf.parsley.dsl/src/org/eclipse/emf/parsley/dsl/jvmmodel/EmfParsleyDslJvmModelInferrer.xtend
@@ -32,15 +32,21 @@
 import org.eclipse.emf.parsley.dsl.model.AbstractFeatureCaptionProviderWithLabel
 import org.eclipse.emf.parsley.dsl.model.AbstractFeatureProvider
 import org.eclipse.emf.parsley.dsl.model.BindingsSpecification
+import org.eclipse.emf.parsley.dsl.model.ContentProviderChildren
+import org.eclipse.emf.parsley.dsl.model.ContentProviderElements
 import org.eclipse.emf.parsley.dsl.model.ControlFactorySpecification
 import org.eclipse.emf.parsley.dsl.model.FeatureAssociatedExpression
-import org.eclipse.emf.parsley.dsl.model.LabelSpecification
+import org.eclipse.emf.parsley.dsl.model.FeatureLabels
+import org.eclipse.emf.parsley.dsl.model.FeatureTexts
 import org.eclipse.emf.parsley.dsl.model.Module
+import org.eclipse.emf.parsley.dsl.model.PolymorphicSpecification
 import org.eclipse.emf.parsley.dsl.model.ProviderBinding
 import org.eclipse.emf.parsley.dsl.model.SimpleMethodSpecification
 import org.eclipse.emf.parsley.dsl.model.TypeBinding
 import org.eclipse.emf.parsley.dsl.model.ValueBinding
+import org.eclipse.emf.parsley.dsl.model.WithExpressions
 import org.eclipse.emf.parsley.dsl.model.WithExtendsClause
+import org.eclipse.emf.parsley.dsl.model.WithFeatureAssociatedExpressions
 import org.eclipse.emf.parsley.dsl.model.WithFields
 import org.eclipse.emf.parsley.dsl.typing.EmfParsleyDslTypeSystem
 import org.eclipse.emf.parsley.edit.action.EditingMenuBuilder
@@ -58,6 +64,8 @@
 import org.eclipse.emf.parsley.ui.provider.ViewerLabelProvider
 import org.eclipse.jface.viewers.IContentProvider
 import org.eclipse.jface.viewers.ILabelProvider
+import org.eclipse.swt.graphics.Color
+import org.eclipse.swt.graphics.Font
 import org.eclipse.swt.widgets.Composite
 import org.eclipse.swt.widgets.Control
 import org.eclipse.swt.widgets.Label
@@ -77,8 +85,6 @@
 import org.eclipse.xtext.xbase.jvmmodel.AbstractModelInferrer
 import org.eclipse.xtext.xbase.jvmmodel.IJvmDeclaredTypeAcceptor
 import org.eclipse.xtext.xbase.jvmmodel.JvmTypesBuilder
-import org.eclipse.swt.graphics.Font
-import org.eclipse.swt.graphics.Color
 
 /**
  * <p>Infers a JVM model from the source model.</p> 
@@ -88,17 +94,17 @@
  */
 class EmfParsleyDslJvmModelInferrer extends AbstractModelInferrer {
 
-    /**
-     * convenience API to build and initialize JVM types and their members.
-     */
+	/**
+	 * convenience API to build and initialize JVM types and their members.
+	 */
 	@Inject extension JvmTypesBuilder
-	
+
 	@Inject extension IQualifiedNameProvider
-	
+
 	@Inject extension TypeReferences
-	
+
 	@Inject extension TypesFactory
-	
+
 	@Inject extension EmfParsleyDslGeneratorUtils
 
 	@Inject extension EmfParsleyDslTypeSystem
@@ -126,12 +132,12 @@
 	 *            rely on linking using the index if isPreIndexingPhase is
 	 *            <code>true</code>.
 	 */
-   	def dispatch void infer(Module element, IJvmDeclaredTypeAcceptor acceptor, boolean isPreIndexingPhase) {
-   		if (element.name.empty)
-   			return
-   		
+	def dispatch void infer(Module element, IJvmDeclaredTypeAcceptor acceptor, boolean isPreIndexingPhase) {
+		if (element.name.empty)
+			return
+
 		val moduleClass = element.toClass(element.moduleQN)
-		
+
 		val labelProviderClass = element.inferLabelProvider(acceptor)
 		val tableLabelProviderClass = element.inferTableLabelProvider(acceptor)
 		val featureCaptionProviderClass = element.inferFeatureCaptionProvider(acceptor)
@@ -204,8 +210,8 @@
 				members += element.resourceManager.genBindMethod(resourceManagerClass, typeof(ResourceManager))
 		]
 
-   	}
-				
+	}
+
 	def private setSuperClassType(JvmGenericType e, WithExtendsClause dslElement, Class<?> defaultSuperClass) {
 		if (dslElement.extendsClause != null)
 			e.superTypes += dslElement.extendsClause.superType.cloneWithProxies
@@ -235,7 +241,6 @@
 			
 			members += field
 			
-			
 			members += f.toGetter(name, type)
 			if (f.writeable) {
 				members += f.toSetter(name, type)
@@ -246,19 +251,19 @@
 	def private void translateAnnotations(JvmAnnotationTarget target, List<XAnnotation> annotations) {
 		target.addAnnotations(annotations.filterNull.filter[annotationType != null])
 	}
-   	
-   	def private moduleQN(Module element) {
-   		element.fullyQualifiedName + ".EmfParsleyGuiceModuleGen"
-   	}
+
+	def private moduleQN(Module element) {
+		element.fullyQualifiedName + ".EmfParsleyGuiceModuleGen"
+	}
 
 	def private labelProviderQN(Module element) {
 		element.fullyQualifiedName + ".ui.provider.LabelProviderGen"
 	}
-	
+
 	def private tableLabelProviderQN(Module element) {
 		element.fullyQualifiedName + ".ui.provider.TableLabelProviderGen"
 	}
-	
+
 	def private featureCaptionProviderQN(Module element) {
 		element.fullyQualifiedName + ".ui.provider.FeatureCaptionProviderGen"
 	}
@@ -322,32 +327,18 @@
 				
 				members += labelProvider.toConstructor() [
 					parameters += labelProvider.
-						toParameter("delegate", 
+						toParameter("delegate",
 							typeRef(AdapterFactoryLabelProvider)
 						)
 					body = [it.append("super(delegate);")]
 					annotations += annotationRef(Inject)
 				]
 				
-				for (labelSpecification : labelProvider.labelSpecifications) {
-					members += labelSpecification.specificationToMethod("text", typeRef(String))
-				}
-				
-				for (imageSpecification : labelProvider.imageSpecifications) {
-					members += imageSpecification.specificationToMethod("image", typeRef(Object))
-				}
-				
-				for (fontSpecification : labelProvider.fontSpecifications) {
-					members += fontSpecification.specificationToMethod("font", typeRef(Font))
-				}
-				
-				for (foregroundSpecification : labelProvider.foregroundSpecifications) {
-					members += foregroundSpecification.specificationToMethod("foreground", typeRef(Color))
-				}
-				
-				for (backgroundSpecification : labelProvider.backgroundSpecifications) {
-					members += backgroundSpecification.specificationToMethod("background", typeRef(Color))
-				}
+				specificationsToMethods(labelProvider.texts, "text", typeRef(String))
+				specificationsToMethods(labelProvider.images, "image", typeRef(Object))
+				specificationsToMethods(labelProvider.fonts, "font", typeRef(Font))
+				specificationsToMethods(labelProvider.foregrounds, "foreground", typeRef(Color))
+				specificationsToMethods(labelProvider.backgrounds, "background", typeRef(Color))
 			]
 			labelProviderClass
 		}
@@ -362,27 +353,15 @@
 			acceptor.accept(tableLabelProviderClass) [
 				setSuperClassTypeAndFields(tableLabelProvider, typeof(TableColumnLabelProvider))
 				
-				inferMethodsForFeatureAssociatedExpression(tableLabelProvider.labelSpecifications, "text_", typeRef(String), parameterCreatorForFeatureAssociatedExpression)
+				inferMethodsForFeatureAssociatedExpression(tableLabelProvider.featureTexts, "text_", typeRef(String), parameterCreatorForFeatureAssociatedExpression)
+				inferMethodsForFeatureAssociatedExpression(tableLabelProvider.featureImages, "image_", typeRef(Object), parameterCreatorForFeatureAssociatedExpression)
+				inferMethodsForFeatureAssociatedExpression(tableLabelProvider.featureFonts, "font_", typeRef(Font), parameterCreatorForFeatureAssociatedExpression)
+				inferMethodsForFeatureAssociatedExpression(tableLabelProvider.featureForegrounds, "foreground_", typeRef(Color), parameterCreatorForFeatureAssociatedExpression)
+				inferMethodsForFeatureAssociatedExpression(tableLabelProvider.featureBackgrounds, "background_", typeRef(Color), parameterCreatorForFeatureAssociatedExpression)
 				
-				inferMethodsForFeatureAssociatedExpression(tableLabelProvider.imageSpecifications, "image_", typeRef(Object), parameterCreatorForFeatureAssociatedExpression)
-				
-				inferMethodsForFeatureAssociatedExpression(tableLabelProvider.fontSpecifications, "font_", typeRef(Font), parameterCreatorForFeatureAssociatedExpression)
-				
-				inferMethodsForFeatureAssociatedExpression(tableLabelProvider.foregroundSpecifications, "foreground_", typeRef(Color), parameterCreatorForFeatureAssociatedExpression)
-				
-				inferMethodsForFeatureAssociatedExpression(tableLabelProvider.backgroundSpecifications, "background_", typeRef(Color), parameterCreatorForFeatureAssociatedExpression)
-				
-				for (fontSpecification : tableLabelProvider.rowFontSpecifications) {
-					members += fontSpecification.specificationToMethod("rowFont", typeRef(Font))
-				}
-				
-				for (foregroundSpecification : tableLabelProvider.rowForegroundSpecifications) {
-					members += foregroundSpecification.specificationToMethod("rowForeground", typeRef(Color))
-				}
-				
-				for (backgroundSpecification : tableLabelProvider.rowBackgroundSpecifications) {
-					members += backgroundSpecification.specificationToMethod("rowBackground", typeRef(Color))
-				}
+				specificationsToMethods(tableLabelProvider.rowFonts, "rowFont", typeRef(Font))
+				specificationsToMethods(tableLabelProvider.rowForegrounds, "rowForeground", typeRef(Color))
+				specificationsToMethods(tableLabelProvider.rowBackgrounds, "rowBackground", typeRef(Color))
 			]
 			tableLabelProviderClass
 		}
@@ -397,7 +376,7 @@
 			acceptor.accept(propertyDescriptionProviderClass) [
 				setSuperClassTypeAndFields(featureCaptionProvider, typeof(FeatureCaptionProvider))
 				
-				inferMethodsForTextCaptionSpecifications(element, it, featureCaptionProvider.specifications)
+				inferMethodsForTextCaptionSpecifications(featureCaptionProvider.featureTexts)
 			]
 			propertyDescriptionProviderClass
 		}
@@ -421,9 +400,9 @@
 			acceptor.accept(descriptionProviderClass) [
 				setSuperClassTypeAndFields(element, superClass)
 				
-				inferMethodsForTextCaptionSpecifications(element, it, element.specifications)
+				inferMethodsForTextCaptionSpecifications(element.featureTexts)
 				
-				inferMethodsForLabelCaptionSpecifications(element, it, element.labelSpecifications)			
+				inferMethodsForLabelCaptionSpecifications(element.featureLabels)
 			]
 			descriptionProviderClass
 		}
@@ -438,9 +417,9 @@
 		]
 	}
 
-	def private inferMethodsForTextCaptionSpecifications(EObject element, JvmGenericType it, Iterable<FeatureAssociatedExpression> specifications) {
+	def private inferMethodsForTextCaptionSpecifications(JvmGenericType it, FeatureTexts texts) {
 		inferMethodsForFeatureAssociatedExpression(
-			it, specifications, "text_", typeRef(String)
+			it, texts, "text_", typeRef(String)
 		) [
 			it, spec |
 			parameters += spec.toParameter(
@@ -449,9 +428,9 @@
 		]
 	}
 
-	def private inferMethodsForLabelCaptionSpecifications(EObject element, JvmGenericType it, Iterable<FeatureAssociatedExpression> specifications) {
+	def private inferMethodsForLabelCaptionSpecifications(JvmGenericType it, FeatureLabels labels) {
 		inferMethodsForFeatureAssociatedExpression(
-			it, specifications, "label_", typeRef(Label)
+			it, labels, "label_", typeRef(Label)
 		) [
 			it, spec |
 			parameters += spec.toParameter(
@@ -463,21 +442,23 @@
 		]
 	}
 
-	def private inferMethodsForFeatureAssociatedExpression(JvmGenericType it, Iterable<FeatureAssociatedExpression> specifications, 
+	def private inferMethodsForFeatureAssociatedExpression(JvmGenericType it, WithFeatureAssociatedExpressions withFeatureAssociatedExpressions, 
 		String prefix, JvmTypeReference returnType, (JvmOperation, FeatureAssociatedExpression) => void parameterCreator
 	) {
-		for (spec : specifications) {
-			featureAssociatedExpressionToMethod(spec, prefix, returnType, parameterCreator)
-		}
+		nullSafeAccess(withFeatureAssociatedExpressions) [
+			for (spec : withFeatureAssociatedExpressions.specifications) {
+				featureAssociatedExpressionToMethod(spec, prefix, returnType, parameterCreator)
+			}
+		]
 	}
 
-	def private featureAssociatedExpressionToMethod(JvmGenericType it, FeatureAssociatedExpression spec, 
+	def private featureAssociatedExpressionToMethod(JvmGenericType it, FeatureAssociatedExpression spec,
 			String prefix, JvmTypeReference returnType, (JvmOperation, FeatureAssociatedExpression) => void parameterCreator) {
 		if (spec.feature?.simpleName != null) {
 			members += spec.toMethod
 			(prefix + 
 					spec.parameterType.simpleName + "_" +
-					spec.feature.simpleName.propertyNameForGetterSetterMethod, 
+					spec.feature.simpleName.propertyNameForGetterSetterMethod,
 				returnType
 			) [
 				parameterCreator.apply(it, spec)
@@ -505,26 +486,29 @@
 				setSuperClassTypeAndFields(element, superClass)
 				
 				documentation = element.documentation
-				members += element.
-						toMethod("buildStringMap", Void::TYPE.getTypeForName(element)) [
-					addOverrideAnnotation
-					parameters += element.toParameter("stringMap",
+				members += element.toMethod("buildStringMap", Void::TYPE.getTypeForName(element)) [
+					m |
+					m.addOverrideAnnotation
+					m.parameters += element.toParameter("stringMap",
 							typeRef(EClassToEStructuralFeatureAsStringsMap)
 					)
-					body = [
-						append("super.buildStringMap(stringMap);").newLine
-						for (featureSpecification : element.featureSpecifications) {
-							newLine.
-								append('''stringMap.mapTo("«featureSpecification.parameterType.identifier»",''').
-									increaseIndentation.newLine
-							val fs = featureSpecification.features.map [
-								feature |
-								'"' + feature.simpleName.propertyNameForGetterSetterMethod
-								+ '"'
-							]
-							append(fs.join(", "))
-							append(");").decreaseIndentation
-						}
+					m.body = [
+						a |
+						a.append("super.buildStringMap(stringMap);").newLine
+						nullSafeAccess(element.features) [
+							for (featureSpecification : element.features.featureSpecifications) {
+								a.newLine.
+									append('''stringMap.mapTo("«featureSpecification.parameterType.identifier»",''').
+										increaseIndentation.newLine
+								val fs = featureSpecification.features.map [
+									feature |
+									'"' + feature.simpleName.propertyNameForGetterSetterMethod
+									+ '"'
+								]
+								a.append(fs.join(", "))
+								a.append(");").decreaseIndentation
+							}
+						]
 					]
 				]
 			]
@@ -550,7 +534,9 @@
 				
 				documentation = e.documentation
 				
-				inferMethodsForControlFactory(e, it, e.controlSpecifications)
+				nullSafeAccess(e.controls) [
+					inferMethodsForControlFactory(e, it, e.controls.specifications)
+				]
 			]
 			controlFactoryClass
 		}
@@ -623,13 +609,9 @@
 				
 				members += toConstructorWithInjectedAdapterFactory(viewerContentProvider)
 				
-				for (specification : viewerContentProvider.elementsSpecifications) {
-					members += specification.specificationToMethod("elements", typeRef(Object))
-				}
+				inferContentProviderElements(viewerContentProvider.elements)
 				
-				for (specification : viewerContentProvider.childrenSpecifications) {
-					members += specification.specificationToMethod("children", typeRef(Object))
-				}
+				inferContentProviderChildren(viewerContentProvider.children)
 			]
 			viewerContentProviderClass
 		}
@@ -646,18 +628,30 @@
 				
 				members += toConstructorWithInjectedAdapterFactory(viewerContentProvider)
 				
-				for (specification : viewerContentProvider.elementsSpecifications) {
-					members += specification.specificationToMethod("elements", typeRef(Object))
-				}
+				inferContentProviderElements(viewerContentProvider.elements)
 			]
 			viewerContentProviderClass
 		}
 	}
 
+	def private inferContentProviderElements(JvmGenericType it, ContentProviderElements elements) {
+		specificationsToMethods(elements, "elements", typeRef(Object))
+	}
+
+	def private inferContentProviderChildren(JvmGenericType it, ContentProviderChildren children) {
+		specificationsToMethods(children, "children", typeRef(Object))
+	}
+
+	def private <T> nullSafeAccess(JvmGenericType it, T parent, (JvmGenericType)=>void acceptor) {
+		if (parent != null) {
+			acceptor.apply(it)
+		}
+	}
+
 	private def toConstructorWithInjectedAdapterFactory(EObject e) {
 		e.toConstructor() [
 			parameters += e.
-				toParameter("adapterFactory", 
+				toParameter("adapterFactory",
 					typeRef(AdapterFactory)
 				)
 			body = [it.append("super(adapterFactory);")]
@@ -701,13 +695,8 @@
 				
 				val returnType = typeRef(List, typeRef(IMenuContributionSpecification))
 				
-				for (specification : menuBuilder.menuSpecifications) {
-					members += specification.specificationToMethod("menuContributions", returnType)
-				}
-				
-				for (specification : menuBuilder.emfMenuSpecifications) {
-					members += specification.specificationToMethod("emfMenuContributions", returnType)
-				}
+				specificationsToMethods(menuBuilder.menus, "menuContributions", returnType)
+				specificationsToMethods(menuBuilder.emfMenus, "emfMenuContributions", returnType)
 			]
 			menuBuilderClass
 		}
@@ -722,13 +711,8 @@
 			acceptor.accept(configuratorClass) [
 				setSuperClassTypeAndFields(configurator, Configurator)
 				
-				for (specification : configurator.resourceURISpecifications) {
-					members += specification.specificationToMethod("resourceURI", typeRef(URI))
-				}
-				
-				for (specification : configurator.EClassSpecifications) {
-					members += specification.specificationToMethod("eClass", typeRef(EClass))
-				}
+				specificationsToMethods(configurator.resourceURI, "resourceURI", typeRef(URI))
+				specificationsToMethods(configurator.EClassSpec, "eClass", typeRef(EClass))
 			]
 			configuratorClass
 		}
@@ -769,14 +753,22 @@
 		}
 	}
 
-	def private specificationToMethod(LabelSpecification specification, String methodName, JvmTypeReference returnType) {
+	def private specificationsToMethods(JvmGenericType it, WithExpressions e, String methodName, JvmTypeReference returnType) {
+		nullSafeAccess(e) [
+			for (specification : e.specifications) {
+				members += specificationToMethod(specification, methodName, returnType)
+			}
+		]
+	}
+
+	def private specificationToMethod(PolymorphicSpecification specification, String methodName, JvmTypeReference returnType) {
 		specification.toMethod(methodName, returnType) [
 			parameters += specification.specificationParameter
 			body = specification.expression
 		]
 	}
 
-	def private specificationParameter(LabelSpecification specification) {
+	def private specificationParameter(PolymorphicSpecification specification) {
 		specification.toParameter(
 			if (specification.name != null)
 				specification.name
@@ -790,7 +782,7 @@
 			ControlFactorySpecification spec, (JvmOperation)=>void init
 	) {
 		spec.toMethod
-			(spec.methodNameForFormFeatureSpecification("control_"), 
+			(spec.methodNameForFormFeatureSpecification("control_"),
 				typeRef(Control)
 			, init)
 	}
diff --git a/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/composite/AbstractMasterDetailComposite.java b/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/composite/AbstractMasterDetailComposite.java
index c954cd3..16253fc 100644
--- a/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/composite/AbstractMasterDetailComposite.java
+++ b/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/composite/AbstractMasterDetailComposite.java
@@ -52,8 +52,6 @@
 
 	private final StructuredViewer viewer;
 
-	private final Composite masterComposite;
-
 	private final Composite detailComposite;
 
 	private FormDetailComposite detailForm;
@@ -69,7 +67,7 @@
 		setLayout( new FillLayout());
 		sashForm = new SashForm(this, sashStyle);
 
-		masterComposite = new Composite(sashForm, SWT.NONE);
+		Composite masterComposite = new Composite(sashForm, SWT.NONE);
 		masterComposite.setLayout( new FillLayout());
 		
 		detailComposite = new Composite(sashForm, SWT.NONE);
diff --git a/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/edit/EditingDomainFinder.java b/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/edit/EditingDomainFinder.java
index 850ec84..3413745 100644
--- a/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/edit/EditingDomainFinder.java
+++ b/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/edit/EditingDomainFinder.java
@@ -11,20 +11,31 @@
 
 package org.eclipse.emf.parsley.edit;
 
-import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
 import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
 
 /**
- * Retrieves the EditingDomain for an EObject. The default implementation simply
- * uses {@link AdapterFactoryEditingDomain#getEditingDomainFor(EObject)}.
+ * Retrieves the EditingDomain for an Object. The default implementation simply
+ * uses {@link AdapterFactoryEditingDomain#getEditingDomainFor(Object)} and also
+ * considers the case for {@link Resource}.
  * 
  * @author Lorenzo Bettini
  * 
  */
 public class EditingDomainFinder {
 
-	public EditingDomain getEditingDomainFor(EObject object) {
-		return AdapterFactoryEditingDomain.getEditingDomainFor(object);
+	public EditingDomain getEditingDomainFor(Object object) {
+		final EditingDomain editingDomainFor = AdapterFactoryEditingDomain.getEditingDomainFor(object);
+		if (editingDomainFor == null && object instanceof Resource) {
+			final Resource resource = (Resource) object;
+			ResourceSet resourceSet = resource.getResourceSet();
+			if (resourceSet instanceof IEditingDomainProvider) {
+				return ((IEditingDomainProvider) resourceSet).getEditingDomain();
+			}
+		}
+		return editingDomainFor;
 	}
 }
diff --git a/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/listeners/NoOpMouseAdapter.java b/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/listeners/NoOpMouseAdapter.java
deleted file mode 100644
index f6fc29d..0000000
--- a/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/listeners/NoOpMouseAdapter.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- * Lorenzo Bettini - initial API and implementation
- *******************************************************************************/
-package org.eclipse.emf.parsley.listeners;
-
-import org.eclipse.swt.events.MouseEvent;
-
-/**
- * This implementation does nothing upon mouse events.
- * 
- * @author Lorenzo Bettini - Initial contribution and API
- * 
- */
-public class NoOpMouseAdapter implements IEditorMouseListener {
-	@Override
-	public void mouseDoubleClick(MouseEvent event) {
-		// the default implementation does nothing
-	}
-
-	@Override
-	public void mouseDown(MouseEvent e) {
-		// the default implementation does nothing
-	}
-
-	@Override
-	public void mouseUp(MouseEvent e) {
-		// the default implementation does nothing
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/util/EmfParsleyUtil.java b/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/util/EmfParsleyUtil.java
index 7df35c5..100b5d0 100644
--- a/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/util/EmfParsleyUtil.java
+++ b/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/util/EmfParsleyUtil.java
@@ -23,11 +23,11 @@
  * 
  */
 public class EmfParsleyUtil {
-	
+
 	protected EmfParsleyUtil() {
 
 	}
-	
+
 	/**
 	 * Given the passed object it ensures that it is a {@link Collection}; if it
 	 * is not, it returns a singleton {@link Collection}; if it is null it
@@ -36,11 +36,15 @@
 	 * @param contents
 	 * @return
 	 */
-	@SuppressWarnings("unchecked")
 	public static Collection<Object> ensureCollection(Object contents) {
 		if (contents == null) {
 			return Collections.emptyList();
 		}
+		return ensureCollectionInternal(contents);
+	}
+
+	@SuppressWarnings("unchecked")
+	private static Collection<Object> ensureCollectionInternal(Object contents) {
 		if (contents instanceof Collection<?>) {
 			return (Collection<Object>) contents;
 		} else if (contents instanceof Iterable<?>) {
@@ -49,13 +53,13 @@
 			return Lists.newArrayList((Iterator<?>) contents);
 		} else if (contents.getClass().isArray()) {
 			return Arrays.asList((Object[]) contents);
-		} else {
-			return Collections.singleton(contents);
 		}
+		return Collections.singleton(contents);
 	}
 
 	/**
 	 * Given a List of Integer it returns an array of int
+	 * 
 	 * @param intList
 	 * @return
 	 */
diff --git a/plugins/org.eclipse.emf.parsley.editors.common/src/org/eclipse/emf/parsley/editors/EmfAbstractEditor.java b/plugins/org.eclipse.emf.parsley.editors.common/src/org/eclipse/emf/parsley/editors/EmfAbstractEditor.java
index ef63b06..c0c87f7 100644
--- a/plugins/org.eclipse.emf.parsley.editors.common/src/org/eclipse/emf/parsley/editors/EmfAbstractEditor.java
+++ b/plugins/org.eclipse.emf.parsley.editors.common/src/org/eclipse/emf/parsley/editors/EmfAbstractEditor.java
@@ -35,7 +35,6 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.emf.common.CommonPlugin;
 import org.eclipse.emf.common.command.BasicCommandStack;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.common.notify.AdapterFactory;
@@ -54,7 +53,6 @@
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.util.EContentAdapter;
 import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.emf.ecore.xmi.impl.GenericXMLResourceFactoryImpl;
 import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
 import org.eclipse.emf.edit.domain.IEditingDomainProvider;
 import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
@@ -67,6 +65,8 @@
 import org.eclipse.emf.parsley.edit.ui.dnd.ViewerDragAndDropHelper;
 import org.eclipse.emf.parsley.editors.listeners.ResourceDeltaVisitor;
 import org.eclipse.emf.parsley.handlers.OutlineSelectionHandler;
+import org.eclipse.emf.parsley.internal.editors.listeners.PartListenerAdapter;
+import org.eclipse.emf.parsley.internal.editors.util.ProblemIndicationEContentAdapter;
 import org.eclipse.emf.parsley.listeners.AsyncCommandStackListenerClient;
 import org.eclipse.emf.parsley.listeners.AsyncCommandStackListenerHelper;
 import org.eclipse.emf.parsley.listeners.IEditorMouseListener;
@@ -119,26 +119,6 @@
 public abstract class EmfAbstractEditor extends MultiPageEditorPart implements
 		IEditingDomainProvider, ISelectionProvider, IMenuListener,
 		IViewerProvider, IGotoMarker, AsyncCommandStackListenerClient {
-	public abstract static class XML extends EmfAbstractEditor {
-		public XML() {
-			try {
-				editingDomain.getResourceSet().getResourceFactoryRegistry()
-						.getExtensionToFactoryMap()
-						.put("*", new GenericXMLResourceFactoryImpl());
-
-				Class<?> theItemProviderClass = CommonPlugin
-						.loadClass("org.eclipse.xsd.edit",
-								"org.eclipse.xsd.provider.XSDItemProviderAdapterFactory");
-				AdapterFactory xsdItemProviderAdapterFactory = (AdapterFactory) theItemProviderClass
-						.newInstance();
-				adapterFactory
-						.insertAdapterFactory(xsdItemProviderAdapterFactory);
-			} catch (Exception exception) {
-				EcoreEditorPlugin.INSTANCE.log(exception);
-			}
-		}
-
-	}
 
 	/**
 	 * This is the one adapter factory used for providing views of the model.
@@ -215,46 +195,24 @@
 	 * This listens for when the outline becomes active <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * 
-	 * @generated
+	 * @generated NOT
 	 */
-	protected IPartListener partListener = new IPartListener() {
+	protected IPartListener partListener = new PartListenerAdapter() {
 		@Override
 		public void partActivated(IWorkbenchPart p) {
 			if (p instanceof ContentOutline) {
 				if (((ContentOutline) p).getCurrentPage() == contentOutlinePage) {
-					getActionBarContributor().setActiveEditor(
-							EmfAbstractEditor.this);
+					getActionBarContributor().setActiveEditor(EmfAbstractEditor.this);
 				}
 			} else if (p instanceof PropertySheet) {
 				if (((PropertySheet) p).getCurrentPage() == propertySheetPage) {
-					getActionBarContributor().setActiveEditor(
-							EmfAbstractEditor.this);
+					getActionBarContributor().setActiveEditor(EmfAbstractEditor.this);
 					handleActivate();
 				}
 			} else if (p == EmfAbstractEditor.this) {
 				handleActivate();
 			}
 		}
-
-		@Override
-		public void partBroughtToTop(IWorkbenchPart p) {
-			// Ignore.
-		}
-
-		@Override
-		public void partClosed(IWorkbenchPart p) {
-			// Ignore.
-		}
-
-		@Override
-		public void partDeactivated(IWorkbenchPart p) {
-			// Ignore.
-		}
-
-		@Override
-		public void partOpened(IWorkbenchPart p) {
-			// Ignore.
-		}
 	};
 
 	/**
@@ -301,9 +259,9 @@
 	 * Adapter used to update the problem indication when resources are demanded
 	 * loaded. <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * 
-	 * @generated
+	 * @generated NOT
 	 */
-	protected EContentAdapter problemIndicationAdapter = new EContentAdapter() {
+	protected EContentAdapter problemIndicationAdapter = new ProblemIndicationEContentAdapter() {
 		@Override
 		public void notifyChanged(Notification notification) {
 			if (notification.getNotifier() instanceof Resource) {
@@ -312,39 +270,13 @@
 				case Resource.RESOURCE__ERRORS:
 				case Resource.RESOURCE__WARNINGS:
 					Resource resource = (Resource) notification.getNotifier();
-					Diagnostic diagnostic = analyzeResourceProblems(resource,
-							null);
-					if (diagnostic.getSeverity() != Diagnostic.OK) {
-						resourceToDiagnosticMap.put(resource, diagnostic);
-					} else {
-						resourceToDiagnosticMap.remove(resource);
-					}
-
-					if (updateProblemIndication) {
-						getSite().getShell().getDisplay()
-								.asyncExec(new Runnable() {
-									@Override
-									public void run() {
-										updateProblemIndication();
-									}
-								});
-					}
+					handleResourceDiagnostic(resource);
 					break;
 				}
 			} else {
 				super.notifyChanged(notification);
 			}
 		}
-
-		@Override
-		protected void setTarget(Resource target) {
-			basicSetTarget(target);
-		}
-
-		@Override
-		protected void unsetTarget(Resource target) {
-			basicUnsetTarget(target);
-		}
 	};
 
 	/**
@@ -356,41 +288,7 @@
 	protected IResourceChangeListener resourceChangeListener = new IResourceChangeListener() {
 		@Override
 		public void resourceChanged(IResourceChangeEvent event) {
-			IResourceDelta delta = event.getDelta();
-			try {
-				final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
-				visitor.init(editingDomain.getResourceSet(), savedResources);
-				delta.accept(visitor);
-
-				if (!visitor.getRemovedResources().isEmpty()) {
-					getSite().getShell().getDisplay().asyncExec(new Runnable() {
-						@Override
-						public void run() {
-							removedResources.addAll(visitor
-									.getRemovedResources());
-							if (!isDirty()) {
-								getSite().getPage().closeEditor(
-										EmfAbstractEditor.this, false);
-							}
-						}
-					});
-				}
-
-				if (!visitor.getChangedResources().isEmpty()) {
-					getSite().getShell().getDisplay().asyncExec(new Runnable() {
-						@Override
-						public void run() {
-							changedResources.addAll(visitor
-									.getChangedResources());
-							if (getSite().getPage().getActiveEditor() == EmfAbstractEditor.this) {
-								handleActivate();
-							}
-						}
-					});
-				}
-			} catch (CoreException exception) {
-				EcoreEditorPlugin.INSTANCE.log(exception);
-			}
+			handleIResourceChangeEvent(event);
 		}
 	};
 
@@ -482,21 +380,7 @@
 			editingDomain.getCommandStack().flush();
 
 			updateProblemIndication = false;
-			for (Resource resource : changedResources) {
-				if (resource.isLoaded()) {
-					resource.unload();
-					try {
-						resource.load(Collections.emptyMap());
-					} catch (IOException exception) {
-						if (!resourceToDiagnosticMap.containsKey(resource)) {
-							resourceToDiagnosticMap
-									.put(resource,
-											analyzeResourceProblems(resource,
-													exception));
-						}
-					}
-				}
-			}
+			reloadChangedResources();
 
 			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
 				setSelection(StructuredSelection.EMPTY);
@@ -507,6 +391,24 @@
 		}
 	}
 
+	protected void reloadChangedResources() {
+		for (Resource resource : changedResources) {
+			if (resource.isLoaded()) {
+				resource.unload();
+				try {
+					resource.load(Collections.emptyMap());
+				} catch (IOException exception) {
+					if (!resourceToDiagnosticMap.containsKey(resource)) {
+						resourceToDiagnosticMap
+								.put(resource,
+										analyzeResourceProblems(resource,
+												exception));
+					}
+				}
+			}
+		}
+	}
+
 	/**
 	 * Updates the problems indication with the information described in the
 	 * specified diagnostic. <!-- begin-user-doc --> <!-- end-user-doc -->
@@ -515,14 +417,7 @@
 	 */
 	protected void updateProblemIndication() {
 		if (updateProblemIndication) {
-			BasicDiagnostic diagnostic = new BasicDiagnostic(Diagnostic.OK,
-					"org.eclipse.emf.ecore.editor", 0, null,
-					new Object[] { editingDomain.getResourceSet() });
-			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
-				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
-					diagnostic.add(childDiagnostic);
-				}
-			}
+			BasicDiagnostic diagnostic = createDiagnostic();
 
 			int lastEditorPage = getPageCount() - 1;
 			if (lastEditorPage >= 0
@@ -547,14 +442,30 @@
 				}
 			}
 
-			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
-				markerHelper.deleteMarkers(editingDomain.getResourceSet());
-				if (diagnostic.getSeverity() != Diagnostic.OK) {
-					try {
-						markerHelper.createMarkers(diagnostic);
-					} catch (CoreException exception) {
-						EcoreEditorPlugin.INSTANCE.log(exception);
-					}
+			updateMarkers(diagnostic);
+		}
+	}
+
+	protected BasicDiagnostic createDiagnostic() {
+		BasicDiagnostic diagnostic = new BasicDiagnostic(Diagnostic.OK,
+				"org.eclipse.emf.ecore.editor", 0, null,
+				new Object[] { editingDomain.getResourceSet() });
+		for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+			if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+				diagnostic.add(childDiagnostic);
+			}
+		}
+		return diagnostic;
+	}
+
+	protected void updateMarkers(BasicDiagnostic diagnostic) {
+		if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+			markerHelper.deleteMarkers(editingDomain.getResourceSet());
+			if (diagnostic.getSeverity() != Diagnostic.OK) {
+				try {
+					markerHelper.createMarkers(diagnostic);
+				} catch (CoreException exception) {
+					EcoreEditorPlugin.INSTANCE.log(exception);
 				}
 			}
 		}
@@ -646,69 +557,6 @@
 		return editingDomain;
 	}
 
-	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
-	 * @generated
-	 */
-	public static class ReverseAdapterFactoryContentProvider extends
-			AdapterFactoryContentProvider {
-		/**
-		 * <!-- begin-user-doc --> <!-- end-user-doc -->
-		 * 
-		 * @generated
-		 */
-		public ReverseAdapterFactoryContentProvider(
-				AdapterFactory adapterFactory) {
-			super(adapterFactory);
-		}
-
-		/**
-		 * <!-- begin-user-doc --> <!-- end-user-doc -->
-		 * 
-		 * @generated
-		 */
-		@Override
-		public Object[] getElements(Object object) {
-			Object parent = super.getParent(object);
-			return (parent == null ? Collections.emptySet() : Collections
-					.singleton(parent)).toArray();
-		}
-
-		/**
-		 * <!-- begin-user-doc --> <!-- end-user-doc -->
-		 * 
-		 * @generated
-		 */
-		@Override
-		public Object[] getChildren(Object object) {
-			Object parent = super.getParent(object);
-			return (parent == null ? Collections.emptySet() : Collections
-					.singleton(parent)).toArray();
-		}
-
-		/**
-		 * <!-- begin-user-doc --> <!-- end-user-doc -->
-		 * 
-		 * @generated
-		 */
-		@Override
-		public boolean hasChildren(Object object) {
-			Object parent = super.getParent(object);
-			return parent != null;
-		}
-
-		/**
-		 * <!-- begin-user-doc --> <!-- end-user-doc -->
-		 * 
-		 * @generated
-		 */
-		@Override
-		public Object getParent(Object object) {
-			return null;
-		}
-	}
-
 	protected ISelectionChangedListener createSelectionChangedListener() {
 		return new ISelectionChangedListener() {
 			// This just notifies those things that are affected by the section.
@@ -912,59 +760,26 @@
 	@Override
 	public void doSave(IProgressMonitor progressMonitor) {
 		// Save only resources that have actually changed.
-		//
 		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
-		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED,
-				Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
-
-		// Do the work within an operation because this is a long running
-		// activity that modifies the workbench.
-		//
-		IRunnableWithProgress operation = new IRunnableWithProgress() {
-			// This is the method that gets invoked when the operation runs.
-			//
-			@Override
-			public void run(IProgressMonitor monitor) {
-				// Save the resources to the file system.
-				//
-				boolean first = true;
-				for (Resource resource : editingDomain.getResourceSet()
-						.getResources()) {
-					if ((first || !resource.getContents().isEmpty() || isPersisted(resource))
-							&& !editingDomain.isReadOnly(resource)) {
-						try {
-							long timeStamp = resource.getTimeStamp();
-							resource.save(saveOptions);
-							if (resource.getTimeStamp() != timeStamp) {
-								savedResources.add(resource);
-							}
-						} catch (Exception exception) {
-							resourceToDiagnosticMap
-									.put(resource,
-											analyzeResourceProblems(resource,
-													exception));
-						}
-						first = false;
-					}
-				}
-			}
-		};
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
 
 		updateProblemIndication = false;
 		saving = true;
 		try {
-			// This runs the options, and shows progress.
-			//
-			new ProgressMonitorDialog(getSite().getShell()).run(true, false,
-					operation);
+			// Do the work within an operation because this is a long running
+			// activity that modifies the workbench.
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, new IRunnableWithProgress() {
+				@Override
+				public void run(IProgressMonitor monitor) {
+					performSave(saveOptions);
+				}
+			});
 
 			// Refresh the necessary state.
-			//
 			((BasicCommandStack) editingDomain.getCommandStack()).saveIsDone();
 			firePropertyChange(IEditorPart.PROP_DIRTY);
 		} catch (Exception exception) {
 			// Something went wrong that shouldn't.
-			//
 			EcoreEditorPlugin.INSTANCE.log(exception);
 		}
 		saving = false;
@@ -1307,4 +1122,85 @@
 		return selectionViewer;
 	}
 
+	protected void handleResourceDiagnostic(Resource resource) {
+		Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource, diagnostic);
+		} else {
+			resourceToDiagnosticMap.remove(resource);
+		}
+
+		if (updateProblemIndication) {
+			getSite().getShell().getDisplay().asyncExec(new Runnable() {
+				@Override
+				public void run() {
+					updateProblemIndication();
+				}
+			});
+		}
+	}
+
+	protected void handleIResourceChangeEvent(IResourceChangeEvent event) {
+		IResourceDelta delta = event.getDelta();
+		try {
+			final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+			visitor.init(editingDomain.getResourceSet(), savedResources);
+			delta.accept(visitor);
+
+			if (!visitor.getRemovedResources().isEmpty()) {
+				getSite().getShell().getDisplay().asyncExec(new Runnable() {
+					@Override
+					public void run() {
+						removedResources.addAll(visitor
+								.getRemovedResources());
+						if (!isDirty()) {
+							getSite().getPage().closeEditor(
+									EmfAbstractEditor.this, false);
+						}
+					}
+				});
+			}
+
+			if (!visitor.getChangedResources().isEmpty()) {
+				getSite().getShell().getDisplay().asyncExec(new Runnable() {
+					@Override
+					public void run() {
+						changedResources.addAll(visitor
+								.getChangedResources());
+						if (getSite().getPage().getActiveEditor() == EmfAbstractEditor.this) {
+							handleActivate();
+						}
+					}
+				});
+			}
+		} catch (CoreException exception) {
+			EcoreEditorPlugin.INSTANCE.log(exception);
+		}
+	}
+
+	protected void performSave(final Map<Object, Object> saveOptions) {
+		// Save the resources to the file system.
+		//
+		boolean first = true;
+		for (Resource resource : editingDomain.getResourceSet()
+				.getResources()) {
+			if ((first || !resource.getContents().isEmpty() || isPersisted(resource))
+					&& !editingDomain.isReadOnly(resource)) {
+				try {
+					long timeStamp = resource.getTimeStamp();
+					resource.save(saveOptions);
+					if (resource.getTimeStamp() != timeStamp) {
+						savedResources.add(resource);
+					}
+				} catch (Exception exception) {
+					resourceToDiagnosticMap
+							.put(resource,
+									analyzeResourceProblems(resource,
+											exception));
+				}
+				first = false;
+			}
+		}
+	}
+
 }
diff --git a/plugins/org.eclipse.emf.parsley.editors.common/src/org/eclipse/emf/parsley/internal/editors/listeners/PartListenerAdapter.java b/plugins/org.eclipse.emf.parsley.editors.common/src/org/eclipse/emf/parsley/internal/editors/listeners/PartListenerAdapter.java
new file mode 100644
index 0000000..592b4ba
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.editors.common/src/org/eclipse/emf/parsley/internal/editors/listeners/PartListenerAdapter.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Lorenzo Bettini - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.parsley.internal.editors.listeners;
+
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+
+/**
+ * Base class implementing all the methods as empty but from the one we'll
+ * implement in the editor.
+ * 
+ * @author Lorenzo Bettini - initial API and implementation
+ *
+ */
+public abstract class PartListenerAdapter implements IPartListener {
+
+	@Override
+	public void partBroughtToTop(IWorkbenchPart p) {
+		// Ignore.
+	}
+
+	@Override
+	public void partClosed(IWorkbenchPart p) {
+		// Ignore.
+	}
+
+	@Override
+	public void partDeactivated(IWorkbenchPart p) {
+		// Ignore.
+	}
+
+	@Override
+	public void partOpened(IWorkbenchPart p) {
+		// Ignore.
+	}
+}
diff --git a/plugins/org.eclipse.emf.parsley.editors.common/src/org/eclipse/emf/parsley/internal/editors/util/ProblemIndicationEContentAdapter.java b/plugins/org.eclipse.emf.parsley.editors.common/src/org/eclipse/emf/parsley/internal/editors/util/ProblemIndicationEContentAdapter.java
new file mode 100644
index 0000000..b83a084
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.editors.common/src/org/eclipse/emf/parsley/internal/editors/util/ProblemIndicationEContentAdapter.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Lorenzo Bettini - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.parsley.internal.editors.util;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EContentAdapter;
+
+/**
+ * Redefines a few methods.
+ * 
+ * @author Lorenzo Bettini - initial API and implementation
+ *
+ */
+public class ProblemIndicationEContentAdapter extends EContentAdapter {
+
+	@Override
+	protected void setTarget(Resource target) {
+		basicSetTarget(target);
+	}
+
+	@Override
+	protected void unsetTarget(Resource target) {
+		basicUnsetTarget(target);
+	}
+}
diff --git a/plugins/org.eclipse.emf.parsley.generator.common/src/org/eclipse/emf/parsley/generator/common/EmfParsleyProjectFilesGenerator.xtend b/plugins/org.eclipse.emf.parsley.generator.common/src/org/eclipse/emf/parsley/generator/common/EmfParsleyProjectFilesGenerator.xtend
index d8ed13a..c39cf36 100644
--- a/plugins/org.eclipse.emf.parsley.generator.common/src/org/eclipse/emf/parsley/generator/common/EmfParsleyProjectFilesGenerator.xtend
+++ b/plugins/org.eclipse.emf.parsley.generator.common/src/org/eclipse/emf/parsley/generator/common/EmfParsleyProjectFilesGenerator.xtend
@@ -26,31 +26,6 @@
 	def extFactoryName(String projectName)
 	'''«projectName.buildClassNameFromProject»ExecutableExtensionFactory'''
 
-	def generateManifest(String projectName)
-'''
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: «projectName»
-Bundle-SymbolicName: «projectName»;singleton:=true
-Bundle-Version: 1.0.0.qualifier
-Bundle-Activator: «projectName».«projectName.activatorName»
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime,
- org.eclipse.emf.parsley,
- org.eclipse.emf.parsley.views
-Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-'''
-
-	def generateBuildProperties(boolean hasPluginXml)
-'''
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .«IF hasPluginXml»,\
-               plugin.xml«ENDIF»
-'''
-
 	def generateActivator(String projectName)
 '''
 package «projectName»;
diff --git a/plugins/org.eclipse.emf.parsley.generator.common/src/org/eclipse/emf/parsley/generator/common/EmfParsleyViewFilesGenerator.xtend b/plugins/org.eclipse.emf.parsley.generator.common/src/org/eclipse/emf/parsley/generator/common/EmfParsleyViewFilesGenerator.xtend
deleted file mode 100644
index 6d39169..0000000
--- a/plugins/org.eclipse.emf.parsley.generator.common/src/org/eclipse/emf/parsley/generator/common/EmfParsleyViewFilesGenerator.xtend
+++ /dev/null
@@ -1,147 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- * Lorenzo Bettini - initial API and implementation
- *******************************************************************************/
-package org.eclipse.emf.parsley.generator.common
-
-class EmfParsleyViewFilesGenerator {
-
-	def generateConcreteForResourceTreeView(String projectName, String className, String extendsClass)
-'''
-package «projectName»;
-
-import org.eclipse.emf.parsley.views.«extendsClass»;
-
-import org.eclipse.emf.common.util.URI;
-
-public class «className» extends «extendsClass» {
-
-	@Override
-	protected URI createResourceURI() {
-		// TODO Insert here the resource URI
-		return null;
-	}
-	
-}
-'''
-
-	def generateConcreteForOnSelectionTableView(String projectName, String simpleName)
-'''
-package «projectName»;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.parsley.views.AbstractOnSelectionTableView;
-
-public class «simpleName» extends AbstractOnSelectionTableView {
-
-	@Override
-	protected EClass getEClass() {
-		// TODO the type of objects to show
-		return null;
-	}
-
-}
-'''
-
-
-	def generateConcreteForOnSelectionTableFormView(String projectName, String simpleName)
-'''
-package «projectName»;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.parsley.views.AbstractOnSelectionTableFormView;
-
-public class «simpleName» extends AbstractOnSelectionTableFormView {
-
-	@Override
-	protected EClass getEClass() {
-		// TODO the type of objects to show
-		return null;
-	}
-
-}
-'''
-
-
-
-	def generateTreeFormView(String projectName, String simpleName)
-'''
-package «projectName»;
-
-import org.eclipse.emf.parsley.views.AbstractSaveableTreeFormView;
-
-import org.eclipse.emf.common.util.URI;
-
-public class «simpleName»TreeFormView extends AbstractSaveableTreeFormView {
-
-	@Override
-	protected URI createResourceURI() {
-		// TODO Auto-generated method stub
-		return null;
-	}
-	
-}
-'''
-
-	def generateTableView(String projectName, String simpleName)
-'''
-package «projectName»;
-
-import org.eclipse.emf.parsley.views.AbstractSaveableTableView;
-
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.resource.Resource;
-
-public class «simpleName»TableView extends AbstractSaveableTableView {
-
-	@Override
-	protected EClass getEClass() {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	@Override
-	protected URI createResourceURI() {
-		// TODO Auto-generated method stub
-		return null;
-	}
-}
-'''
-
-	def generatePluginXml(String factoryClass, String qualifiedNameView)
-'''
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<plugin>
-   <extension
-         point="org.eclipse.ui.views">
-           <view
-               class="«factoryClass»:«qualifiedNameView»"
-               id="«qualifiedNameView»"
-               name="Form View"
-               restorable="true"/>
-   </extension>
-   <extension
-         point="org.eclipse.ui.perspectiveExtensions">
-      <perspectiveExtension
-            targetID="*">
-         <view
-               id="«qualifiedNameView»"
-               minimized="false"
-               ratio="100"
-               relationship="stack"
-               relative="org.eclipse.ui.editorss"
-               visible="true">
-         </view>
-      </perspectiveExtension>
-   </extension>
-</plugin>
-'''
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/OnSelectionListView.java b/plugins/org.eclipse.emf.parsley.views.common/temporary/OnSelectionListView.java
similarity index 100%
rename from plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/OnSelectionListView.java
rename to plugins/org.eclipse.emf.parsley.views.common/temporary/OnSelectionListView.java
diff --git a/plugins/org.eclipse.emf.parsley.wizards/build.properties b/plugins/org.eclipse.emf.parsley.wizards/build.properties
index 73840a0..5ee508b 100644
--- a/plugins/org.eclipse.emf.parsley.wizards/build.properties
+++ b/plugins/org.eclipse.emf.parsley.wizards/build.properties
@@ -11,7 +11,6 @@
                .,\
                plugin.xml,\
                icons/,\
-               templates_3.4/,\
                about.html
 src.includes = icons/,\
                about.html
diff --git a/plugins/org.eclipse.emf.parsley.wizards/src/org/eclipse/emf/parsley/wizards/EmfParsleyChoiceTemplate.java b/plugins/org.eclipse.emf.parsley.wizards/old/EmfParsleyChoiceTemplate.java
similarity index 100%
rename from plugins/org.eclipse.emf.parsley.wizards/src/org/eclipse/emf/parsley/wizards/EmfParsleyChoiceTemplate.java
rename to plugins/org.eclipse.emf.parsley.wizards/old/EmfParsleyChoiceTemplate.java
diff --git a/plugins/org.eclipse.emf.parsley.wizards/old/NewEmfParsleyProjectSupport.java b/plugins/org.eclipse.emf.parsley.wizards/old/NewEmfParsleyProjectSupport.java
new file mode 100644
index 0000000..7581694
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.wizards/old/NewEmfParsleyProjectSupport.java
@@ -0,0 +1,334 @@
+/*******************************************************************************
+ * Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Lorenzo Bettini - Initial contribution and API
+ *******************************************************************************/
+package org.eclipse.emf.parsley.wizards;
+
+import java.io.ByteArrayInputStream;
+import java.net.URI;
+import java.nio.charset.Charset;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.emf.common.util.UniqueEList;
+import org.eclipse.emf.parsley.generator.common.EmfParsleyProjectFilesGenerator;
+import org.eclipse.emf.parsley.generator.common.EmfParsleyViewFilesGenerator;
+import org.eclipse.emf.parsley.wizards.EmfParsleyChoiceTemplate.Choice;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.pde.core.project.IBundleProjectDescription;
+
+/**
+ * @author Lorenzo Bettini
+ */
+public class NewEmfParsleyProjectSupport {
+
+	private static final String JAVA_EXTENSION = ".java";
+
+	static EmfParsleyProjectFilesGenerator filesGenerator = new EmfParsleyProjectFilesGenerator();
+
+	static EmfParsleyViewFilesGenerator viewGenerator = new EmfParsleyViewFilesGenerator();
+	
+	private static final Logger LOGGER = Logger.getLogger(NewEmfParsleyProjectSupport.class);
+	
+	protected NewEmfParsleyProjectSupport() {
+		// hide the implicit one
+	}
+
+	/**
+	 * We need to: - create the default Eclipse project - add the java and
+	 * plugin natures - create the folder structure
+	 * 
+	 * @param projectName
+	 * @param location
+	 * @param progressMonitor
+	 * @param natureId
+	 * @return
+	 */
+	public static IProject createProject(String projectName, URI location,
+			Choice viewType, IProgressMonitor progressMonitor) {
+		Assert.isNotNull(projectName);
+		Assert.isTrue(projectName.trim().length() > 0);
+
+		progressMonitor.beginTask("Creating project " + projectName, 10);
+
+		String srcFolder = "src";
+		String metaInfPath = "META-INF";
+		String projectPackagePath = srcFolder + "/"
+				+ projectName.replaceAll("\\.", "/");
+
+		IProject project = createBaseProject(projectName, location,
+				createSubProgressMonitor(progressMonitor));
+		try {
+			String[] paths = { srcFolder, projectPackagePath, metaInfPath };
+			addToProjectStructure(project, paths, progressMonitor);
+
+			createActivator(project, projectName, projectPackagePath,
+					progressMonitor);
+			createExecutableExtensionFactory(project, projectName,
+					projectPackagePath, progressMonitor);
+			createModule(project, projectName, projectPackagePath,
+					"EmfParsleyGuiceModule", progressMonitor);
+
+			createProjectFile(project, metaInfPath + "/MANIFEST.MF",
+					filesGenerator.generateManifest(projectName).toString(),
+					createSubProgressMonitor(progressMonitor));
+			createProjectFile(project, "/build.properties", filesGenerator
+					.generateBuildProperties(shouldGeneratePluginXml(viewType))
+					.toString(), createSubProgressMonitor(progressMonitor));
+
+			String simpleClassName = getSimpleNameProject(projectPackagePath);
+			String qualifiedNameView = null;
+			CharSequence contents = "";
+			switch (viewType) {
+			case TREEFORM:
+				qualifiedNameView = simpleClassName + "TreeFormView";
+				contents = viewGenerator.generateTreeFormView(projectName, simpleClassName);
+				break;
+			case TABLEFORM:
+				qualifiedNameView = simpleClassName + "TableView";
+				contents = viewGenerator.generateTableView(projectName, simpleClassName);
+				break;
+			default:
+				// OK, no additional views to create
+			}
+
+			if (qualifiedNameView != null) {
+				createProjectFile(project, projectPackagePath + "/"
+						+ qualifiedNameView.concat(JAVA_EXTENSION),
+						contents.toString(),
+						createSubProgressMonitor(progressMonitor));
+
+				createProjectFile(
+						project,
+						"/plugin.xml",
+						viewGenerator.generatePluginXml(
+								projectName
+										.concat(".").
+										concat(filesGenerator.extFactoryName(projectName).toString()),
+								projectName.concat(".").concat(
+										qualifiedNameView)).toString(),
+						createSubProgressMonitor(progressMonitor));
+			}
+
+			addNatures(project, createSubProgressMonitor(progressMonitor));
+		} catch (CoreException e) {
+			LOGGER.error("in createProject", e);
+			project = null;
+		}
+
+		progressMonitor.done();
+
+		return project;
+	}
+
+	public static void createActivator(IProject project, String projectName,
+			String projectPackagePath, IProgressMonitor progressMonitor)
+			throws CoreException {
+		createProjectFile(project, projectPackagePath + "/"
+				+ filesGenerator.activatorName(projectName) + JAVA_EXTENSION,
+				filesGenerator.generateActivator(projectName).toString(),
+				createSubProgressMonitor(progressMonitor));
+	}
+
+	public static void createExecutableExtensionFactory(IProject project,
+			String projectName, String projectPackagePath,
+			IProgressMonitor progressMonitor) throws CoreException {
+		createProjectFile(project, projectPackagePath
+				+ "/"
+				+ filesGenerator.extFactoryName(projectName)
+				+ JAVA_EXTENSION, filesGenerator
+				.generateExecutableExtensionFactory(projectName).toString(),
+				createSubProgressMonitor(progressMonitor));
+	}
+
+	public static void createModule(IProject project, String projectName,
+			String projectPackagePath, String superClass,
+			IProgressMonitor progressMonitor) throws CoreException {
+		createProjectFile(project, projectPackagePath
+				+ "/"
+				+ filesGenerator.moduleName(projectName)
+				+ JAVA_EXTENSION, filesGenerator
+				.generateModule(projectName, superClass).toString(),
+				createSubProgressMonitor(progressMonitor));
+	}
+
+	private static boolean shouldGeneratePluginXml(Choice viewType) {
+		return viewType != Choice.NONE;
+	}
+
+	private static String getSimpleNameProject(String projectName) {
+		String simpleNameProject = null;
+		if (projectName.contains(".")) {
+			simpleNameProject = projectName.substring(projectName
+					.lastIndexOf('.') + 1);
+		} else {
+			simpleNameProject = projectName.substring(projectName
+					.lastIndexOf('/') + 1);
+		}
+		simpleNameProject = simpleNameProject.substring(0, 1).toUpperCase()
+				.concat(simpleNameProject.substring(1));
+		return simpleNameProject;
+	}
+
+	/**
+	 * @param progressMonitor
+	 * @return
+	 */
+	public static IProgressMonitor createSubProgressMonitor(
+			IProgressMonitor progressMonitor) {
+		return new SubProgressMonitor(progressMonitor, 1);
+	}
+
+	/**
+	 * Just do the basics: create a basic project.
+	 * 
+	 * @param location
+	 * @param projectName
+	 * @param progressMonitor
+	 */
+	private static IProject createBaseProject(String projectName, URI location,
+			IProgressMonitor progressMonitor) {
+		progressMonitor.subTask("Creating project resource");
+
+		// it is acceptable to use the ResourcesPlugin class
+		IProject newProject = ResourcesPlugin.getWorkspace().getRoot()
+				.getProject(projectName);
+
+		if (!newProject.exists()) {
+			URI projectLocation = location;
+			IProjectDescription desc = newProject.getWorkspace()
+					.newProjectDescription(newProject.getName());
+			if (location != null
+					&& location.equals(ResourcesPlugin.getWorkspace().getRoot()
+							.getLocationURI())) {
+				projectLocation = null;
+			}
+
+			desc.setLocationURI(projectLocation);
+			try {
+				newProject.create(desc,
+						createSubProgressMonitor(progressMonitor));
+				if (!newProject.isOpen()) {
+					newProject.open(createSubProgressMonitor(progressMonitor));
+				}
+			} catch (CoreException e) {
+				LOGGER.error("in createBaseProject", e);
+			}
+		}
+
+		progressMonitor.done();
+
+		return newProject;
+	}
+
+	/**
+	 * Create a folder structure with a parent root, overlay, and a few child
+	 * folders.
+	 * 
+	 * @param newProject
+	 * @param paths
+	 * @param progressMonitor
+	 * @throws CoreException
+	 */
+	public static void addToProjectStructure(IProject newProject,
+			String[] paths, IProgressMonitor monitor) throws CoreException {
+		IProgressMonitor progressMonitor = createSubProgressMonitor(monitor);
+		progressMonitor.subTask("Creating project folders");
+		for (String path : paths) {
+			IFolder etcFolders = newProject.getFolder(path);
+			createFolder(etcFolders);
+		}
+		progressMonitor.done();
+	}
+
+	private static void createFolder(IFolder folder) throws CoreException {
+		IContainer parent = folder.getParent();
+		if (parent instanceof IFolder) {
+			createFolder((IFolder) parent);
+		}
+		if (!folder.exists()) {
+			folder.create(false, true, null);
+		}
+	}
+
+	/**
+	 * @param project
+	 * @param fileName
+	 * @param contents
+	 * @param progressMonitor
+	 * @throws CoreException
+	 */
+	public static void createProjectFile(IProject project, String fileName,
+			String contents, IProgressMonitor progressMonitor)
+			throws CoreException {
+		progressMonitor.subTask("Creating file " + fileName);
+		IFile iFile = project.getFile(fileName);
+		iFile.create(
+				new ByteArrayInputStream(contents.getBytes(Charset
+						.forName(iFile.getCharset()))), true, null);
+		progressMonitor.done();
+	}
+
+	private static void addNatures(IProject project,
+			IProgressMonitor progressMonitor) throws CoreException {
+		progressMonitor.subTask("Adding natures");
+		List<IClasspathEntry> classpathEntries = new UniqueEList<IClasspathEntry>();
+
+		IJavaProject javaProject = JavaCore.create(project);
+		IProjectDescription projectDescription = project.getDescription();
+
+		projectDescription.setNatureIds(new String[] { JavaCore.NATURE_ID,
+				IBundleProjectDescription.PLUGIN_NATURE });
+
+		IProgressMonitor monitor = null;
+		project.setDescription(projectDescription, monitor);
+
+		IPath projectPath = project.getFullPath();
+		IPath javaSource = projectPath.append("src");
+
+		IClasspathEntry sourceClasspathEntry = JavaCore
+				.newSourceEntry(javaSource);
+		for (Iterator<IClasspathEntry> i = classpathEntries.iterator(); i
+				.hasNext();) {
+			IClasspathEntry classpathEntry = i.next();
+			if (classpathEntry.getPath().isPrefixOf(javaSource)) {
+				i.remove();
+			}
+		}
+		classpathEntries.add(0, sourceClasspathEntry);
+
+		classpathEntries.add(JavaRuntime.getDefaultJREContainerEntry());
+
+		classpathEntries.add(JavaCore.newContainerEntry(new Path(
+				"org.eclipse.pde.core.requiredPlugins")));
+
+		javaProject.setRawClasspath(classpathEntries
+				.toArray(new IClasspathEntry[classpathEntries.size()]),
+				createSubProgressMonitor(progressMonitor));
+
+		progressMonitor.done();
+	}
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.wizards/src/org/eclipse/emf/parsley/wizards/NewEmfParsleyProjectWizard.java b/plugins/org.eclipse.emf.parsley.wizards/old/NewEmfParsleyProjectWizard.java
similarity index 100%
rename from plugins/org.eclipse.emf.parsley.wizards/src/org/eclipse/emf/parsley/wizards/NewEmfParsleyProjectWizard.java
rename to plugins/org.eclipse.emf.parsley.wizards/old/NewEmfParsleyProjectWizard.java
diff --git a/plugins/org.eclipse.emf.parsley.wizards/plugin.xml b/plugins/org.eclipse.emf.parsley.wizards/plugin.xml
index 57a6a48..5deec28 100644
--- a/plugins/org.eclipse.emf.parsley.wizards/plugin.xml
+++ b/plugins/org.eclipse.emf.parsley.wizards/plugin.xml
@@ -8,38 +8,4 @@
             name="Emf Parsley">
       </category>
    </extension>
-   <extension
-         point="org.eclipse.ui.newWizards">
-      <wizard
-            category="org.eclipse.emf.parsley.wizards"
-            class="org.eclipse.emf.parsley.wizards.NewEmfParsleyProjectWizard"
-            icon="icons/sample.gif"
-            id="org.eclipse.emf.parsley.wizards.NewEmfParsleyProject"
-            name="Emf Parsley Project"
-            project="true">
-      </wizard>
-   </extension>
-   <extension
-         point="org.eclipse.pde.ui.pluginContent">
-      <wizard
-            class="org.eclipse.emf.parsley.wizards.TablePluginContentWizard"
-            icon="icons/component.jpg"
-            id="org.eclipse.emf.parsley.masterdetail.tablewizard"
-            java="true"
-            name="Table Master Detail Wizard"
-            pureOSGi="false"
-            rcp="false"
-            requiresActivator="false"
-            ui-content="true">
-      </wizard>
-   </extension>
-   <extension
-         point="org.eclipse.pde.ui.templates">
-      <template
-            class="org.eclipse.emf.parsley.wizards.TableViewTemplateSection"
-            contributingId="org.eclipse.ui.views"
-            icon="icons/component.jpg"
-            id="org.eclipse.emf.parsley.masterdetail.tabletemplate"
-            name="Table Master Detail View"/>
-	</extension>
 </plugin>
diff --git a/plugins/org.eclipse.emf.parsley.wizards/src/org/eclipse/emf/parsley/wizards/NewEmfParsleyProjectSupport.java b/plugins/org.eclipse.emf.parsley.wizards/src/org/eclipse/emf/parsley/wizards/NewEmfParsleyProjectSupport.java
index 7581694..fc4d1b1 100644
--- a/plugins/org.eclipse.emf.parsley.wizards/src/org/eclipse/emf/parsley/wizards/NewEmfParsleyProjectSupport.java
+++ b/plugins/org.eclipse.emf.parsley.wizards/src/org/eclipse/emf/parsley/wizards/NewEmfParsleyProjectSupport.java
@@ -11,33 +11,16 @@
 package org.eclipse.emf.parsley.wizards;
 
 import java.io.ByteArrayInputStream;
-import java.net.URI;
 import java.nio.charset.Charset;
-import java.util.Iterator;
-import java.util.List;
 
-import org.apache.log4j.Logger;
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.SubProgressMonitor;
-import org.eclipse.emf.common.util.UniqueEList;
 import org.eclipse.emf.parsley.generator.common.EmfParsleyProjectFilesGenerator;
-import org.eclipse.emf.parsley.generator.common.EmfParsleyViewFilesGenerator;
-import org.eclipse.emf.parsley.wizards.EmfParsleyChoiceTemplate.Choice;
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.launching.JavaRuntime;
-import org.eclipse.pde.core.project.IBundleProjectDescription;
 
 /**
  * @author Lorenzo Bettini
@@ -48,101 +31,10 @@
 
 	static EmfParsleyProjectFilesGenerator filesGenerator = new EmfParsleyProjectFilesGenerator();
 
-	static EmfParsleyViewFilesGenerator viewGenerator = new EmfParsleyViewFilesGenerator();
-	
-	private static final Logger LOGGER = Logger.getLogger(NewEmfParsleyProjectSupport.class);
-	
 	protected NewEmfParsleyProjectSupport() {
 		// hide the implicit one
 	}
 
-	/**
-	 * We need to: - create the default Eclipse project - add the java and
-	 * plugin natures - create the folder structure
-	 * 
-	 * @param projectName
-	 * @param location
-	 * @param progressMonitor
-	 * @param natureId
-	 * @return
-	 */
-	public static IProject createProject(String projectName, URI location,
-			Choice viewType, IProgressMonitor progressMonitor) {
-		Assert.isNotNull(projectName);
-		Assert.isTrue(projectName.trim().length() > 0);
-
-		progressMonitor.beginTask("Creating project " + projectName, 10);
-
-		String srcFolder = "src";
-		String metaInfPath = "META-INF";
-		String projectPackagePath = srcFolder + "/"
-				+ projectName.replaceAll("\\.", "/");
-
-		IProject project = createBaseProject(projectName, location,
-				createSubProgressMonitor(progressMonitor));
-		try {
-			String[] paths = { srcFolder, projectPackagePath, metaInfPath };
-			addToProjectStructure(project, paths, progressMonitor);
-
-			createActivator(project, projectName, projectPackagePath,
-					progressMonitor);
-			createExecutableExtensionFactory(project, projectName,
-					projectPackagePath, progressMonitor);
-			createModule(project, projectName, projectPackagePath,
-					"EmfParsleyGuiceModule", progressMonitor);
-
-			createProjectFile(project, metaInfPath + "/MANIFEST.MF",
-					filesGenerator.generateManifest(projectName).toString(),
-					createSubProgressMonitor(progressMonitor));
-			createProjectFile(project, "/build.properties", filesGenerator
-					.generateBuildProperties(shouldGeneratePluginXml(viewType))
-					.toString(), createSubProgressMonitor(progressMonitor));
-
-			String simpleClassName = getSimpleNameProject(projectPackagePath);
-			String qualifiedNameView = null;
-			CharSequence contents = "";
-			switch (viewType) {
-			case TREEFORM:
-				qualifiedNameView = simpleClassName + "TreeFormView";
-				contents = viewGenerator.generateTreeFormView(projectName, simpleClassName);
-				break;
-			case TABLEFORM:
-				qualifiedNameView = simpleClassName + "TableView";
-				contents = viewGenerator.generateTableView(projectName, simpleClassName);
-				break;
-			default:
-				// OK, no additional views to create
-			}
-
-			if (qualifiedNameView != null) {
-				createProjectFile(project, projectPackagePath + "/"
-						+ qualifiedNameView.concat(JAVA_EXTENSION),
-						contents.toString(),
-						createSubProgressMonitor(progressMonitor));
-
-				createProjectFile(
-						project,
-						"/plugin.xml",
-						viewGenerator.generatePluginXml(
-								projectName
-										.concat(".").
-										concat(filesGenerator.extFactoryName(projectName).toString()),
-								projectName.concat(".").concat(
-										qualifiedNameView)).toString(),
-						createSubProgressMonitor(progressMonitor));
-			}
-
-			addNatures(project, createSubProgressMonitor(progressMonitor));
-		} catch (CoreException e) {
-			LOGGER.error("in createProject", e);
-			project = null;
-		}
-
-		progressMonitor.done();
-
-		return project;
-	}
-
 	public static void createActivator(IProject project, String projectName,
 			String projectPackagePath, IProgressMonitor progressMonitor)
 			throws CoreException {
@@ -174,24 +66,6 @@
 				createSubProgressMonitor(progressMonitor));
 	}
 
-	private static boolean shouldGeneratePluginXml(Choice viewType) {
-		return viewType != Choice.NONE;
-	}
-
-	private static String getSimpleNameProject(String projectName) {
-		String simpleNameProject = null;
-		if (projectName.contains(".")) {
-			simpleNameProject = projectName.substring(projectName
-					.lastIndexOf('.') + 1);
-		} else {
-			simpleNameProject = projectName.substring(projectName
-					.lastIndexOf('/') + 1);
-		}
-		simpleNameProject = simpleNameProject.substring(0, 1).toUpperCase()
-				.concat(simpleNameProject.substring(1));
-		return simpleNameProject;
-	}
-
 	/**
 	 * @param progressMonitor
 	 * @return
@@ -202,48 +76,6 @@
 	}
 
 	/**
-	 * Just do the basics: create a basic project.
-	 * 
-	 * @param location
-	 * @param projectName
-	 * @param progressMonitor
-	 */
-	private static IProject createBaseProject(String projectName, URI location,
-			IProgressMonitor progressMonitor) {
-		progressMonitor.subTask("Creating project resource");
-
-		// it is acceptable to use the ResourcesPlugin class
-		IProject newProject = ResourcesPlugin.getWorkspace().getRoot()
-				.getProject(projectName);
-
-		if (!newProject.exists()) {
-			URI projectLocation = location;
-			IProjectDescription desc = newProject.getWorkspace()
-					.newProjectDescription(newProject.getName());
-			if (location != null
-					&& location.equals(ResourcesPlugin.getWorkspace().getRoot()
-							.getLocationURI())) {
-				projectLocation = null;
-			}
-
-			desc.setLocationURI(projectLocation);
-			try {
-				newProject.create(desc,
-						createSubProgressMonitor(progressMonitor));
-				if (!newProject.isOpen()) {
-					newProject.open(createSubProgressMonitor(progressMonitor));
-				}
-			} catch (CoreException e) {
-				LOGGER.error("in createBaseProject", e);
-			}
-		}
-
-		progressMonitor.done();
-
-		return newProject;
-	}
-
-	/**
 	 * Create a folder structure with a parent root, overlay, and a few child
 	 * folders.
 	 * 
@@ -291,44 +123,4 @@
 		progressMonitor.done();
 	}
 
-	private static void addNatures(IProject project,
-			IProgressMonitor progressMonitor) throws CoreException {
-		progressMonitor.subTask("Adding natures");
-		List<IClasspathEntry> classpathEntries = new UniqueEList<IClasspathEntry>();
-
-		IJavaProject javaProject = JavaCore.create(project);
-		IProjectDescription projectDescription = project.getDescription();
-
-		projectDescription.setNatureIds(new String[] { JavaCore.NATURE_ID,
-				IBundleProjectDescription.PLUGIN_NATURE });
-
-		IProgressMonitor monitor = null;
-		project.setDescription(projectDescription, monitor);
-
-		IPath projectPath = project.getFullPath();
-		IPath javaSource = projectPath.append("src");
-
-		IClasspathEntry sourceClasspathEntry = JavaCore
-				.newSourceEntry(javaSource);
-		for (Iterator<IClasspathEntry> i = classpathEntries.iterator(); i
-				.hasNext();) {
-			IClasspathEntry classpathEntry = i.next();
-			if (classpathEntry.getPath().isPrefixOf(javaSource)) {
-				i.remove();
-			}
-		}
-		classpathEntries.add(0, sourceClasspathEntry);
-
-		classpathEntries.add(JavaRuntime.getDefaultJREContainerEntry());
-
-		classpathEntries.add(JavaCore.newContainerEntry(new Path(
-				"org.eclipse.pde.core.requiredPlugins")));
-
-		javaProject.setRawClasspath(classpathEntries
-				.toArray(new IClasspathEntry[classpathEntries.size()]),
-				createSubProgressMonitor(progressMonitor));
-
-		progressMonitor.done();
-	}
-
 }
diff --git a/plugins/org.eclipse.emf.parsley.wizards/src/org/eclipse/emf/parsley/wizards/TablePluginContentWizard.java b/plugins/org.eclipse.emf.parsley.wizards/src/org/eclipse/emf/parsley/wizards/TablePluginContentWizard.java
deleted file mode 100644
index 5b8182a..0000000
--- a/plugins/org.eclipse.emf.parsley.wizards/src/org/eclipse/emf/parsley/wizards/TablePluginContentWizard.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- * Lorenzo Bettini - Initial contribution and API
- *******************************************************************************/
-package org.eclipse.emf.parsley.wizards;
-
-
-import org.eclipse.pde.ui.IFieldData;
-import org.eclipse.pde.ui.templates.ITemplateSection;
-import org.eclipse.pde.ui.templates.NewPluginTemplateWizard;
-
-public class TablePluginContentWizard extends NewPluginTemplateWizard {
-
-	 protected IFieldData fData;
-	 
-	@Override
-	public void init(IFieldData data) {
-	   super.init(data);
-	   fData = data;
-	   // not available in Indigo: setWindowTitle
-	}
-
-	@Override
-	public ITemplateSection[] createTemplateSections() {
-	   return new ITemplateSection[] {new TableViewTemplateSection()};
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.emf.parsley.wizards/src/org/eclipse/emf/parsley/wizards/TableViewTemplateSection.java b/plugins/org.eclipse.emf.parsley.wizards/src/org/eclipse/emf/parsley/wizards/TableViewTemplateSection.java
deleted file mode 100644
index 5be7e25..0000000
--- a/plugins/org.eclipse.emf.parsley.wizards/src/org/eclipse/emf/parsley/wizards/TableViewTemplateSection.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- * Lorenzo Bettini - Initial contribution and API
- *******************************************************************************/
-package org.eclipse.emf.parsley.wizards;
-
-
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.ResourceBundle;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.pde.core.plugin.IPluginBase;
-import org.eclipse.pde.core.plugin.IPluginElement;
-import org.eclipse.pde.core.plugin.IPluginExtension;
-import org.eclipse.pde.core.plugin.IPluginModelFactory;
-import org.eclipse.pde.core.plugin.IPluginReference;
-import org.eclipse.pde.internal.ui.IHelpContextIds;
-import org.eclipse.pde.ui.templates.OptionTemplateSection;
-import org.eclipse.pde.ui.templates.PluginReference;
-
-@SuppressWarnings("restriction")
-public class TableViewTemplateSection extends OptionTemplateSection {
-	
-	private static final String KEY_PROJECT_NAME = "packageName";
-	private static final String KEY_PREFIX_CLASSESNAME = "prefixClassesname";
-	private static final String KEY_EDITABLE = "editableView";
-	
-	private static final String MASTERDETAIL_VIEWNAME = "org.eclipse.emf.parsley.view.masterdetail.TableMasterDetailView";
-
-	public TableViewTemplateSection() {
-		setPageCount(1);
-		createOptions();
-	}
-	
-	@Override
-	public String getUsedExtensionPoint() {
-		return null;
-	}
-	
-	@Override
-	public String[] getNewFiles() {
-		return new String[] { "icons/" };
-	}
-	
-	@Override
-	public String getSectionId() {
-		return "viewtemplate";
-	}
-	
-	@Override
-	protected URL getInstallURL() {
-		return EmfParsleyWizardsActivator.getDefault().getBundle().getEntry("/");
-	}
-	
-	@Override
-	protected ResourceBundle getPluginResourceBundle() {
-		return Platform.getResourceBundle(EmfParsleyWizardsActivator.getDefault().getBundle());
-	}
-	
-	@Override
-	public void addPages(Wizard wizard) {
-		WizardPage page = createPage(0, IHelpContextIds.TEMPLATE_INTRO);
-		page.setTitle("Table Master Detail Template");
-		page.setDescription("Creates a Table Master Detail view");
-		wizard.addPage(page);
-		markPagesAdded();
-	}
-	
-	private void createOptions() {
-		addOption(KEY_PREFIX_CLASSESNAME, "Prefix classes name", "", 0);
-		addOption(KEY_EDITABLE, "Is editable", true, 0);
-	}
-	
-	@Override
-	protected void updateModel(IProgressMonitor monitor) throws CoreException {
-		String projectId = project.getDescription().getName();
-		addOption(KEY_PROJECT_NAME, "Project Name", projectId, 0);
-		
-		IPluginModelFactory factory = model.getPluginFactory();
-		IPluginExtension extensionView = createExtensionView(factory);
-		IPluginExtension extensionMenu = createExtensionMenu(factory);
-		
-		IPluginBase plugin = model.getPluginBase();
-		plugin.add(extensionView);
-		plugin.add(extensionMenu);
-	}
-	
-	private IPluginExtension createExtensionMenu(IPluginModelFactory factory)
-			throws CoreException {
-		IPluginExtension extensionMenu = createExtension("org.eclipse.ui.menus", true);
-
-		IPluginElement elementMenu = factory.createElement(extensionMenu);
-		elementMenu.setName("menuContribution");
-		elementMenu.setAttribute("locationURI", "menu:org.eclipse.ui.main.menu");
-		elementMenu.setAttribute("allPopups", "false");
-		
-		IPluginElement elementSubMenu = factory.createElement(elementMenu);
-		elementSubMenu.setName("command");
-		elementSubMenu.setAttribute("commandId", "org.eclipse.ui.views.showView");
-		elementSubMenu.setAttribute("label", getStringOption(KEY_PREFIX_CLASSESNAME));
-		elementSubMenu.setAttribute("tooltip", "Open the Master Detail");
-		elementSubMenu.setAttribute("style", "push");
-		
-		IPluginElement elementSubMenuParameter = factory.createElement(elementSubMenu);
-		elementSubMenuParameter.setName("parameter");
-		elementSubMenuParameter.setAttribute("name", "org.eclipse.ui.views.showView.viewId");
-		elementSubMenuParameter.setAttribute("value", getViewId());
-		
-		extensionMenu.add(elementMenu);
-		elementMenu.add(elementSubMenu);
-		elementSubMenu.add(elementSubMenuParameter);
-
-		return extensionMenu;
-	}
-	
-	private IPluginExtension createExtensionView(IPluginModelFactory factory)
-			throws CoreException {
-		IPluginExtension extensionView = createExtension("org.eclipse.ui.views", true);
-
-		IPluginElement elementView = factory.createElement(extensionView);
-		elementView.setName("view");
-		elementView.setAttribute("id", getViewId());
-		elementView.setAttribute("name", getStringOption(KEY_PREFIX_CLASSESNAME));
-
-		String fullClassName = getAbstractDispatcherPath() + MASTERDETAIL_VIEWNAME;
-		elementView.setAttribute("class", fullClassName);
-		elementView.setAttribute("icon", "icons/table.jpg");
-		
-		extensionView.add(elementView);
-
-		return extensionView;
-	}
-	
-	private String getAbstractDispatcherPath() {
-		return getStringOption(KEY_PROJECT_NAME) + ".internal.guice." + getStringOption(KEY_PREFIX_CLASSESNAME) + "ExecutableExtensionFactory:";
-	}
-
-	private String getViewId() {
-		return getStringOption(KEY_PROJECT_NAME) + "." + getStringOption(KEY_PREFIX_CLASSESNAME);
-	}
-
-	@Override
-	public IPluginReference[] getDependencies(String schemaVersion) {
-		List<IPluginReference> result = new ArrayList<IPluginReference>();
-		result.addAll(Arrays.asList(super.getDependencies(schemaVersion)));
-		result.add(new PluginReference("org.eclipse.core.runtime", null, 0)); //$NON-NLS-1$
-		result.add(new PluginReference("org.eclipse.emf.cdo", null, 0)); //$NON-NLS-1$
-		result.add(new PluginReference("org.eclipse.emf.cdo.net4j", null, 0)); //$NON-NLS-1$
-		result.add(new PluginReference("org.eclipse.net4j.tcp", null, 0)); //$NON-NLS-1$
-		result.add(new PluginReference("org.eclipse.xtext", null, 0)); //$NON-NLS-1$
-		result.add(new PluginReference("org.eclipse.ui.forms", null, 0)); //$NON-NLS-1$
-		result.add(new PluginReference("org.eclipse.core.databinding.property", null, 0)); //$NON-NLS-1$
-		result.add(new PluginReference("org.eclipse.emf.parsley", null, 0)); //$NON-NLS-1$
-		result.add(new PluginReference("org.eclipse.emf.parsley.cdo", null, 0)); //$NON-NLS-1$
-		return result.toArray(new IPluginReference[result.size()]);
-	}
-	
-}
diff --git a/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/.gitignore b/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/.gitignore
deleted file mode 100644
index 08eb0a0..0000000
--- a/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-!bin/
\ No newline at end of file
diff --git a/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/bin/a.java b/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/bin/a.java
deleted file mode 100644
index 6f5745d..0000000
--- a/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/bin/a.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package it.rcpvision.cdo04.editor.labeling;
-
-import org.eclipse.emf.parsley.composite.ControlObservablePair;
-import org.eclipse.emf.parsley.composite.FormControlFactory;
-
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.jface.databinding.swt.SWTObservables;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.DateTime;
-
-public class DemoBindingFactory extends EmfSwtBindingFactory {
-
-	public ControlObservablePair control_Order_date(EStructuralFeature feature) {
-		DateTime dateTime= new DateTime(getParent(), SWT.DROP_DOWN);
-		getToolkit().adapt(dateTime);
-		return new ControlObservablePair(dateTime, SWTObservables.observeSelection(dateTime));
-	}
-}
diff --git a/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/java/$prefixClassesname$CDOSessionManager.java b/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/java/$prefixClassesname$CDOSessionManager.java
deleted file mode 100644
index f5b6b87..0000000
--- a/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/java/$prefixClassesname$CDOSessionManager.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package $packageName$;
-
-import org.eclipse.emf.parsley.cdo.CDOSessionManager;
-
-import org.eclipse.emf.cdo.eresource.CDOResource;
-import org.eclipse.emf.cdo.session.CDOSession;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-
-public class $prefixClassesname$CDOSessionManager extends CDOSessionManager {
-
-	@Override
-	public CDOSession getSession(EObject obj) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	@Override
-	public CDOResource getTransactionalResourceFor(EClass eReferenceType) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/java/$prefixClassesname$ViewConfigurator.java b/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/java/$prefixClassesname$ViewConfigurator.java
deleted file mode 100644
index d17dd0e..0000000
--- a/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/java/$prefixClassesname$ViewConfigurator.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package $packageName$;
-
-import org.eclipse.emf.parsley.view.masterdetail.ViewConfigurator;
-
-import org.eclipse.emf.cdo.session.CDOSession;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-
-public class $prefixClassesname$ViewConfigurator extends ViewConfigurator {
-	
-	@Override
-	public EObject getContainer() {
-		// TODO Auto-generated method stub
-		return null;
-	}
-	
-	@Override
-	public EReference getListFeature() {
-		// TODO Auto-generated method stub
-		return null;
-	}
-	
-	@Override
-	public Boolean isEditable(){
-%if editableView
-		 return true;
-%else
-		 return false;
-%endif
-	}
-	
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/java/internal/guice/$prefixClassesname$BindingFactory.java b/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/java/internal/guice/$prefixClassesname$BindingFactory.java
deleted file mode 100644
index a6b1fb3..0000000
--- a/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/java/internal/guice/$prefixClassesname$BindingFactory.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package $packageName$.internal.guice;
-
-import org.eclipse.emf.parsley.composite.ControlObservablePair;
-import org.eclipse.emf.parsley.composite.FormControlFactory;
-
-//import org.eclipse.emf.ecore.EStructuralFeature;
-//import org.eclipse.jface.databinding.swt.SWTObservables;
-//import org.eclipse.swt.SWT;
-//import org.eclipse.swt.widgets.DateTime;
-
-public class $prefixClassesname$BindingFactory extends EmfSwtBindingFactory {
-
-	/*
-	 * Example: manage "date" fields with a date picker. 
-	 * 
-	public ControlObservablePair control_$prefixClassesname$_date(EStructuralFeature feature) {
-		DateTime dateTime= new DateTime(getParent(), SWT.DROP_DOWN);
-		getToolkit().adapt(dateTime);
-		return new ControlObservablePair(dateTime, SWTObservables.observeSelection(dateTime));
-	}
-	*/
-}
diff --git a/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/java/internal/guice/$prefixClassesname$ExecutableExtensionFactory.java b/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/java/internal/guice/$prefixClassesname$ExecutableExtensionFactory.java
deleted file mode 100644
index d65b9ca..0000000
--- a/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/java/internal/guice/$prefixClassesname$ExecutableExtensionFactory.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package $packageName$.internal.guice;
-
-import $packageName$.Activator;
-import org.eclipse.emf.parsley.EmfParsleyExtensionFactory;
-import org.eclipse.emf.parsley.EmfParsleyGuiceModule;
-
-import org.osgi.framework.Bundle;
-
-public class $prefixClassesname$ExecutableExtensionFactory extends
-		EmfParsleyExtensionFactory {
-
-	@Override
-	protected Bundle getBundle() {
-		return Activator.getDefault().getBundle();
-	}
-
-	@Override
-	protected EmfParsleyGuiceModule getModule() {
-		return new $prefixClassesname$Module(Activator.getDefault());
-	}
-
-}
diff --git a/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/java/internal/guice/$prefixClassesname$FeatureLabelProvider.java b/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/java/internal/guice/$prefixClassesname$FeatureLabelProvider.java
deleted file mode 100644
index f3ac4d5..0000000
--- a/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/java/internal/guice/$prefixClassesname$FeatureLabelProvider.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package $packageName$.internal.guice;
-
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-
-import org.eclipse.emf.parsley.ui.provider.FormPropertyDescriptionProvider;
-
-public class $prefixClassesname$FeatureLabelProvider extends FeatureLabelProvider{
-	
-	/**
-	 * 
-	 * @param feature
-	 * @return
-	 */
-	public String text_$prefixClassesname$_code(EStructuralFeature feature) {
-		// TODO Auto-generated method stub
-		return "Code: ";
-	}
-	
-	/**
-	 * 
-	 * @param parent
-	 * @param feature
-	 * @return
-	 */
-	public Label label_$prefixClassesname$_description(Composite parent, EStructuralFeature feature) {
-		// TODO Auto-generated method stub
-		return new Label(parent, SWT.NONE);
-	}
-
-	
-}
diff --git a/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/java/internal/guice/$prefixClassesname$Module.java b/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/java/internal/guice/$prefixClassesname$Module.java
deleted file mode 100644
index a4f7a56..0000000
--- a/plugins/org.eclipse.emf.parsley.wizards/templates_3.4/viewtemplate/java/internal/guice/$prefixClassesname$Module.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package $packageName$.internal.guice;
-
-
-import $packageName$.$prefixClassesname$ViewConfigurator;
-import $packageName$.$prefixClassesname$CDOSessionManager;
-import org.eclipse.emf.parsley.cdo.CDOEmfParsleyModule;
-import org.eclipse.emf.parsley.cdo.CDOSessionManager;
-import org.eclipse.emf.parsley.view.masterdetail.ViewConfigurator;
-import org.eclipse.emf.parsley.composite.FormControlFactory;
-import org.eclipse.emf.parsley.ui.provider.FormPropertyDescriptionProvider;
-
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-
-public class $prefixClassesname$Module extends CDOEmfParsleyModule {
-
-	public $prefixClassesname$Module(AbstractUIPlugin plugin) {
-		super(plugin);
-	}
-
-	public Class<? extends ViewConfigurator> bindViewConfigurator(){
-		return $prefixClassesname$ViewConfigurator.class;
-	}
-	
-	public Class<? extends CDOSessionManager> bindCDOSessionManager(){
-		return $prefixClassesname$CDOSessionManager.class;
-	}
-	
-	@Override
-	public Class<? extends FeatureLabelProvider> bindFormFeatureLabelProvider() {
-		return $prefixClassesname$FeatureLabelProvider.class;
-	}
-	
-	@Override
-	public Class<? extends EmfSwtBindingFactory> bindEmfSwtBindingFactory() {
-		return $prefixClassesname$BindingFactory.class;
-	}
-	
-}
diff --git a/releng/org.eclipse.emf.parsley.parent/pom.xml b/releng/org.eclipse.emf.parsley.parent/pom.xml
index 85ea055..244a8a2 100644
--- a/releng/org.eclipse.emf.parsley.parent/pom.xml
+++ b/releng/org.eclipse.emf.parsley.parent/pom.xml
@@ -99,7 +99,7 @@
 		<!-- **/EmfParsleyViewFilesGenerator.java,**/EmfParsleyProjectFilesGenerator.java report massive code
 			duplication, but they're generated by Xtend and they are basically template generators;
 			runtime classes are currently not analyzed. -->
-		<sonar.exclusions>file:**/src-gen/**,file:**/runtime/**,file:**/test/**,file:**/tests/**,file:**/example/**,file:**/examples/**,**/*GuiceModule.java,**/*Dsl*Module.java,**/*ParsleyModule.java,**/*Parsley*Activator.java,**/EmfParsleyViewFilesGenerator.java,**/EmfParsleyProjectFilesGenerator.java</sonar.exclusions>
+		<sonar.exclusions>file:**/src-gen/**,file:**/runtime/**,file:**/test/**,file:**/tests/**,file:**/example/**,file:**/examples/**,**/*GuiceModule.java,**/*Dsl*Module.java,**/*ParsleyModule.java,**/*Parsley*Activator.java,**/EmfParsleyViewFilesGenerator.java,**/EmfParsleyProjectFilesGenerator.java,**/EmfParsleyDslNewProjectFiles.java,**/*StandaloneSetup*.java,**/*ExtensionFactory*.java</sonar.exclusions>
 
 		<!-- see http://sonarqube.15.x6.nabble.com/sonar-issue-ignore-multicriteria-td5021722.html 
 			and http://stackoverflow.com/questions/21825469/configure-sonar-sonar-issue-ignore-multicriteria-through-maven 
diff --git a/tests/org.eclipse.emf.parsley.tests.swtbot/launches/EmfParsleyWizardsTests.launch b/tests/org.eclipse.emf.parsley.tests.swtbot/launches/EmfParsleyWizardsTests.launch
deleted file mode 100644
index 70181e8..0000000
--- a/tests/org.eclipse.emf.parsley.tests.swtbot/launches/EmfParsleyWizardsTests.launch
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.swtbot.eclipse.ui.launcher.JunitLaunchConfig">
-<setAttribute key="additional_plugins">
-<setEntry value="org.eclipse.emf.parsley.tests.swtbot:0.1.0.qualifier:default:false"/>
-</setAttribute>
-<booleanAttribute key="append.args" value="true"/>
-<booleanAttribute key="askclear" value="false"/>
-<booleanAttribute key="automaticAdd" value="true"/>
-<booleanAttribute key="automaticValidate" value="false"/>
-<stringAttribute key="bootstrap" value=""/>
-<stringAttribute key="checked" value="[NONE]"/>
-<booleanAttribute key="clearConfig" value="true"/>
-<booleanAttribute key="clearws" value="true"/>
-<booleanAttribute key="clearwslog" value="false"/>
-<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
-<booleanAttribute key="default" value="true"/>
-<stringAttribute key="deselected_workspace_plugins" value="ProvaView,ProvaWizard,it.rcpvision.cdo04.editor,it.rcpvision.cdo04.model,org.eclipse.emf.parsley.cdo,org.eclipse.emf.parsley.cdo.tests,org.eclipse.emf.parsley.cdoexample.masterdetail.table,org.eclipse.emf.parsley.cdoexample.masterdetail.tree,org.eclipse.emf.parsley.cdoexample.model,org.eclipse.emf.parsley.cdoexample.model.business,org.eclipse.emf.parsley.cdoexample.rcp,org.eclipse.emf.parsley.cdoexample.rcp.tests,org.eclipse.emf.parsley.tests.cdo.app,org.eclipse.emf.parsley.tests.cdo.model,org.eclipse.emf.parsley.tests.cdo.product,it.rcpvision.rcptutorial03.model.cdo"/>
-<stringAttribute key="featureDefaultLocation" value="workspace"/>
-<stringAttribute key="featurePluginResolution" value="workspace"/>
-<booleanAttribute key="includeOptional" value="true"/>
-<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/EmfParsleyWizardsTests.java"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
-</listAttribute>
-<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
-<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
-<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
-<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
-<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.emf.parsley.tests.EmfParsleyWizardsTests"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.emf.parsley.tests.swtbot"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -Xmx384m -XX:MaxPermSize=256m -Dorg.eclipse.swt.internal.gtk.cairoGraphics=false  -Dorg.eclipse.swtbot.search.timeout=100000"/>
-<stringAttribute key="pde.version" value="3.3"/>
-<stringAttribute key="product" value="org.eclipse.platform.ide"/>
-<setAttribute key="selected_features">
-<setEntry value="org.eclipse.emf.parsley.tests.swtbot.feature:default"/>
-</setAttribute>
-<stringAttribute key="selected_target_plugins" value="ch.qos.logback.classic@default:default,ch.qos.logback.core@default:default,ch.qos.logback.slf4j@default:false,com.google.collect@default:default,com.google.guava@default:default,com.google.inject@default:default,com.ibm.icu@default:default,com.jcraft.jsch@default:default,com.sun.jna@default:default,com.sun.syndication@default:default,com.thoughtworks.xstream@default:default,de.itemis.xtext.antlr@default:default,java_cup.runtime@default:default,javax.activation@default:default,javax.inject@default:default,javax.mail@default:default,javax.persistence@default:default,javax.servlet.jsp@default:default,javax.servlet@default:default,javax.wsdl@default:default,javax.xml.bind@default:default,javax.xml.rpc@default:default,javax.xml.soap@default:default,javax.xml.stream@default:default,javax.xml@default:default,lpg.runtime.java@default:default,net.sourceforge.texlipse@default:default,org.antlr.generator@default:default,org.antlr.runtime@default:default,org.apache.ant@default:default,org.apache.axis@default:default,org.apache.batik.bridge@default:default,org.apache.batik.css@default:default,org.apache.batik.dom.svg@default:default,org.apache.batik.dom@default:default,org.apache.batik.ext.awt@default:default,org.apache.batik.parser@default:default,org.apache.batik.pdf@default:default,org.apache.batik.svggen@default:default,org.apache.batik.transcoder@default:default,org.apache.batik.util.gui@default:default,org.apache.batik.util@default:default,org.apache.batik.xml@default:default,org.apache.bcel@default:default,org.apache.commons.cli@default:default,org.apache.commons.codec@default:default,org.apache.commons.discovery@default:default,org.apache.commons.el@default:default,org.apache.commons.httpclient@default:default,org.apache.commons.io@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging*1.0.4.v201101211617@default:default,org.apache.commons.logging*1.1.1.v201005080502@default:default,org.apache.commons.logging*1.1.1.v201101211721@default:default,org.apache.derby@default:default,org.apache.jasper@default:default,org.apache.log4j@default:default,org.apache.lucene.analysis@default:default,org.apache.lucene.core@default:default,org.apache.lucene.highlighter@default:default,org.apache.lucene.memory@default:default,org.apache.lucene.misc@default:default,org.apache.lucene.queries@default:default,org.apache.lucene.snowball@default:default,org.apache.lucene.spellchecker@default:default,org.apache.lucene@default:default,org.apache.ws.commons.util@default:default,org.apache.xalan@default:default,org.apache.xerces@default:default,org.apache.xml.resolver@default:default,org.apache.xml.serializer@default:default,org.apache.xmlrpc@default:default,org.easymock@default:default,org.eclipse.acceleo.common@default:default,org.eclipse.acceleo.engine@default:default,org.eclipse.acceleo.model@default:default,org.eclipse.acceleo.profiler@default:default,org.eclipse.amalgam.discovery.core@default:default,org.eclipse.amalgam.discovery.modeling@default:default,org.eclipse.amalgam.discovery.ui@default:default,org.eclipse.ant.core@default:default,org.eclipse.ant.launching@default:default,org.eclipse.ant.ui@default:default,org.eclipse.cdt.core@default:default,org.eclipse.cdt.ui@default:default,org.eclipse.compare.core@default:default,org.eclipse.compare@default:default,org.eclipse.core.boot@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.externaltools@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.core.filesystem.linux.x86@default:false,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.net.linux.x86@default:false,org.eclipse.core.net@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime.compatibility@default:default,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.cvs@default:default,org.eclipse.debug.core@default:default,org.eclipse.debug.ui@default:default,org.eclipse.draw2d.doc.isv@default:default,org.eclipse.draw2d@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.ecf.provider.filetransfer.httpclient.ssl@default:false,org.eclipse.ecf.provider.filetransfer.httpclient@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.ecf@default:default,org.eclipse.egit.core@default:default,org.eclipse.egit.doc@default:default,org.eclipse.egit.ui@default:default,org.eclipse.egit@default:default,org.eclipse.emf.ant@default:default,org.eclipse.emf.cheatsheets@default:default,org.eclipse.emf.codegen.ecore.ui@default:default,org.eclipse.emf.codegen.ecore@default:default,org.eclipse.emf.codegen.ui@default:default,org.eclipse.emf.codegen@default:default,org.eclipse.emf.common.ui@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.compare.diff.edit@default:default,org.eclipse.emf.compare.diff@default:default,org.eclipse.emf.compare.doc@default:default,org.eclipse.emf.compare.epatch@default:default,org.eclipse.emf.compare.match@default:default,org.eclipse.emf.compare.ui.capabilities@default:default,org.eclipse.emf.compare.ui@default:default,org.eclipse.emf.compare@default:default,org.eclipse.emf.converter@default:default,org.eclipse.emf.databinding.edit@default:default,org.eclipse.emf.databinding@default:default,org.eclipse.emf.doc@default:default,org.eclipse.emf.ecore.change.edit@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.edit@default:default,org.eclipse.emf.ecore.editor@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.ecoretools.diagram.ui.outline@default:default,org.eclipse.emf.ecoretools.diagram@default:default,org.eclipse.emf.ecoretools.doc@default:default,org.eclipse.emf.ecoretools.filters@default:default,org.eclipse.emf.ecoretools.properties@default:default,org.eclipse.emf.ecoretools.tabbedproperties@default:default,org.eclipse.emf.ecoretools@default:default,org.eclipse.emf.edit.ui@default:default,org.eclipse.emf.edit@default:default,org.eclipse.emf.eef.codegen.ecore@default:default,org.eclipse.emf.eef.codegen@default:default,org.eclipse.emf.eef.components.edit@default:default,org.eclipse.emf.eef.components@default:default,org.eclipse.emf.eef.eefgen@default:default,org.eclipse.emf.eef.mapping.edit@default:default,org.eclipse.emf.eef.mapping@default:default,org.eclipse.emf.eef.runtime@default:default,org.eclipse.emf.eef.views.edit@default:default,org.eclipse.emf.eef.views@default:default,org.eclipse.emf.example.installer@default:default,org.eclipse.emf.exporter@default:default,org.eclipse.emf.generic.editor@default:default,org.eclipse.emf.importer.ecore@default:default,org.eclipse.emf.importer.java@default:default,org.eclipse.emf.importer.rose@default:default,org.eclipse.emf.importer@default:default,org.eclipse.emf.mapping.ecore.editor@default:default,org.eclipse.emf.mapping.ecore2ecore.editor@default:default,org.eclipse.emf.mapping.ecore2ecore@default:default,org.eclipse.emf.mapping.ecore2xml.ui@default:default,org.eclipse.emf.mapping.ecore2xml@default:default,org.eclipse.emf.mapping.ecore@default:default,org.eclipse.emf.mapping.ui@default:default,org.eclipse.emf.mapping.xsd2ecore.editor@default:default,org.eclipse.emf.mapping.xsd2ecore@default:default,org.eclipse.emf.mapping@default:default,org.eclipse.emf.mwe.activities@default:default,org.eclipse.emf.mwe.core@default:default,org.eclipse.emf.mwe.doc@default:default,org.eclipse.emf.mwe.ui.simpleEditor@default:default,org.eclipse.emf.mwe.ui@default:default,org.eclipse.emf.mwe.utils@default:default,org.eclipse.emf.mwe2.language.ui@default:default,org.eclipse.emf.mwe2.language@default:default,org.eclipse.emf.mwe2.launch@default:default,org.eclipse.emf.mwe2.lib@default:default,org.eclipse.emf.mwe2.runtime@default:default,org.eclipse.emf.query.doc@default:default,org.eclipse.emf.query.examples@default:default,org.eclipse.emf.query.ocl@default:default,org.eclipse.emf.query@default:default,org.eclipse.emf.transaction.doc@default:default,org.eclipse.emf.transaction.examples@default:default,org.eclipse.emf.transaction.ui@default:default,org.eclipse.emf.transaction@default:default,org.eclipse.emf.validation.doc@default:default,org.eclipse.emf.validation.examples@default:default,org.eclipse.emf.validation.ocl@default:default,org.eclipse.emf.validation.ui.ide@default:default,org.eclipse.emf.validation.ui@default:default,org.eclipse.emf.validation@default:default,org.eclipse.emf.workspace.doc@default:default,org.eclipse.emf.workspace.ui@default:default,org.eclipse.emf.workspace@default:default,org.eclipse.emf@default:default,org.eclipse.epp.mpc.core@default:default,org.eclipse.epp.mpc.help.ui@default:default,org.eclipse.epp.mpc.ui@default:default,org.eclipse.epp.package.modeling@default:default,org.eclipse.epp.usagedata.gathering@default:default,org.eclipse.epp.usagedata.recording@default:default,org.eclipse.epp.usagedata.ui@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.concurrent@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.event@default:default,org.eclipse.equinox.frameworkadmin.equinox@default:default,org.eclipse.equinox.frameworkadmin@default:default,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.jsp.jasper.registry@default:default,org.eclipse.equinox.jsp.jasper@default:default,org.eclipse.equinox.launcher.gtk.linux.x86@default:false,org.eclipse.equinox.launcher@default:default,org.eclipse.equinox.p2.artifact.repository@default:default,org.eclipse.equinox.p2.console@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.p2.director.app@default:default,org.eclipse.equinox.p2.director@default:default,org.eclipse.equinox.p2.directorywatcher@default:default,org.eclipse.equinox.p2.discovery.compatibility@default:default,org.eclipse.equinox.p2.discovery@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.equinox.p2.extensionlocation@default:default,org.eclipse.equinox.p2.garbagecollector@default:default,org.eclipse.equinox.p2.jarprocessor@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.p2.operations@default:default,org.eclipse.equinox.p2.publisher.eclipse@default:default,org.eclipse.equinox.p2.publisher@default:default,org.eclipse.equinox.p2.ql@default:default,org.eclipse.equinox.p2.reconciler.dropins@default:default,org.eclipse.equinox.p2.repository.tools@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.equinox.p2.touchpoint.eclipse@default:default,org.eclipse.equinox.p2.touchpoint.natives@default:default,org.eclipse.equinox.p2.transport.ecf@default:default,org.eclipse.equinox.p2.ui.discovery@default:default,org.eclipse.equinox.p2.ui.importexport@default:default,org.eclipse.equinox.p2.ui.sdk.scheduler@default:default,org.eclipse.equinox.p2.ui.sdk@default:default,org.eclipse.equinox.p2.ui@default:default,org.eclipse.equinox.p2.updatechecker@default:default,org.eclipse.equinox.p2.updatesite@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.security.ui@default:default,org.eclipse.equinox.security@default:default,org.eclipse.equinox.simpleconfigurator.manipulator@default:default,org.eclipse.equinox.simpleconfigurator@1:true,org.eclipse.equinox.util@default:default,org.eclipse.gef@default:default,org.eclipse.gmf.runtime.common.core@default:default,org.eclipse.gmf.runtime.common.ui.action.ide@default:default,org.eclipse.gmf.runtime.common.ui.action@default:default,org.eclipse.gmf.runtime.common.ui.printing.win32@default:false,org.eclipse.gmf.runtime.common.ui.printing@default:default,org.eclipse.gmf.runtime.common.ui.services.action@default:default,org.eclipse.gmf.runtime.common.ui.services.properties@default:default,org.eclipse.gmf.runtime.common.ui.services@default:default,org.eclipse.gmf.runtime.common.ui@default:default,org.eclipse.gmf.runtime.diagram.core@default:default,org.eclipse.gmf.runtime.diagram.ui.actions@default:default,org.eclipse.gmf.runtime.diagram.ui.printing.render@default:default,org.eclipse.gmf.runtime.diagram.ui.printing@default:default,org.eclipse.gmf.runtime.diagram.ui.properties@default:default,org.eclipse.gmf.runtime.diagram.ui.providers.ide@default:default,org.eclipse.gmf.runtime.diagram.ui.providers@default:default,org.eclipse.gmf.runtime.diagram.ui.render@default:default,org.eclipse.gmf.runtime.diagram.ui.resources.editor.ide@default:default,org.eclipse.gmf.runtime.diagram.ui.resources.editor@default:default,org.eclipse.gmf.runtime.diagram.ui@default:default,org.eclipse.gmf.runtime.draw2d.ui.render.awt@default:default,org.eclipse.gmf.runtime.draw2d.ui.render@default:default,org.eclipse.gmf.runtime.draw2d.ui@default:default,org.eclipse.gmf.runtime.emf.clipboard.core@default:default,org.eclipse.gmf.runtime.emf.commands.core@default:default,org.eclipse.gmf.runtime.emf.core@default:default,org.eclipse.gmf.runtime.emf.type.core@default:default,org.eclipse.gmf.runtime.emf.ui.properties@default:default,org.eclipse.gmf.runtime.emf.ui@default:default,org.eclipse.gmf.runtime.gef.ui@default:default,org.eclipse.gmf.runtime.notation@default:default,org.eclipse.help.appserver@default:default,org.eclipse.help.base@default:default,org.eclipse.help.ui@default:default,org.eclipse.help.webapp@default:default,org.eclipse.help@default:default,org.eclipse.jdt.apt.core@default:default,org.eclipse.jdt.apt.pluggable.core@default:default,org.eclipse.jdt.apt.ui@default:default,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.jdt.core.manipulation@default:default,org.eclipse.jdt.core@default:default,org.eclipse.jdt.debug.ui@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.jdt.doc.isv@default:default,org.eclipse.jdt.doc.user@default:default,org.eclipse.jdt.junit.core@default:default,org.eclipse.jdt.junit.runtime@default:default,org.eclipse.jdt.junit4.runtime@default:default,org.eclipse.jdt.junit@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.jdt.ui@default:default,org.eclipse.jdt@default:default,org.eclipse.jem.proxy@default:default,org.eclipse.jem.util@default:default,org.eclipse.jem.workbench@default:default,org.eclipse.jem@default:default,org.eclipse.jet.core@default:default,org.eclipse.jet.doc@default:default,org.eclipse.jet.source@default:default,org.eclipse.jet.ui@default:default,org.eclipse.jet.uml2@default:false,org.eclipse.jet@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface.text@default:default,org.eclipse.jface@default:default,org.eclipse.jgit@default:default,org.eclipse.jsch.core@default:default,org.eclipse.jsch.ui@default:default,org.eclipse.jst.common.annotations.controller@default:default,org.eclipse.jst.common.annotations.core@default:default,org.eclipse.jst.common.frameworks@default:default,org.eclipse.jst.common.project.facet.core@default:default,org.eclipse.jst.j2ee.core@default:default,org.eclipse.jst.j2ee.jca@default:default,org.eclipse.jst.j2ee.web@default:default,org.eclipse.jst.j2ee@default:default,org.eclipse.jst.jee@default:default,org.eclipse.jst.jsf.common.runtime@default:default,org.eclipse.jst.jsf.common.ui@default:default,org.eclipse.jst.jsf.common@default:default,org.eclipse.jst.jsf.core@default:default,org.eclipse.jst.jsf.facesconfig@default:default,org.eclipse.jst.jsp.core@default:default,org.eclipse.jst.jsp.ui@default:default,org.eclipse.jst.pagedesigner.jsf.ui@default:default,org.eclipse.jst.pagedesigner.jsp.core@default:default,org.eclipse.jst.pagedesigner@default:default,org.eclipse.jst.server.core@default:default,org.eclipse.linuxtools.changelog.core@default:default,org.eclipse.linuxtools.changelog.cparser@default:false,org.eclipse.linuxtools.changelog.doc@default:default,org.eclipse.linuxtools.changelog.parsers.java@default:false,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.eclipse.mylyn.commons.core@default:default,org.eclipse.mylyn.commons.identity@default:default,org.eclipse.mylyn.commons.net@default:default,org.eclipse.mylyn.commons.repositories@default:default,org.eclipse.mylyn.commons.screenshots@default:default,org.eclipse.mylyn.commons.ui@default:default,org.eclipse.mylyn.context.core@default:default,org.eclipse.mylyn.discovery.core@default:default,org.eclipse.mylyn.discovery.ui@default:default,org.eclipse.mylyn.monitor.core@default:default,org.eclipse.mylyn.monitor.ui@default:default,org.eclipse.mylyn.tasks.bugs@default:default,org.eclipse.mylyn.tasks.core@default:default,org.eclipse.mylyn.tasks.ui@default:default,org.eclipse.mylyn.wikitext.core@default:default,org.eclipse.mylyn.wikitext.mediawiki.core@default:default,org.eclipse.net4j.jms.api@default:default,org.eclipse.ocl.doc@default:default,org.eclipse.ocl.ecore.edit@default:default,org.eclipse.ocl.ecore@default:default,org.eclipse.ocl.edit@default:default,org.eclipse.ocl.uml.edit@default:default,org.eclipse.ocl.uml@default:default,org.eclipse.ocl@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi.util@default:default,org.eclipse.osgi@-1:true,org.eclipse.pde.api.tools.ui@default:default,org.eclipse.pde.api.tools@default:default,org.eclipse.pde.build@default:default,org.eclipse.pde.core@default:default,org.eclipse.pde.doc.user@default:default,org.eclipse.pde.ds.core@default:default,org.eclipse.pde.ds.ui@default:default,org.eclipse.pde.junit.runtime@default:default,org.eclipse.pde.launching@default:default,org.eclipse.pde.runtime@default:default,org.eclipse.pde.ua.core@default:default,org.eclipse.pde.ua.ui@default:default,org.eclipse.pde.ui.templates@default:default,org.eclipse.pde.ui@default:default,org.eclipse.pde@default:default,org.eclipse.platform.doc.isv@default:default,org.eclipse.platform.doc.user@default:default,org.eclipse.platform@default:default,org.eclipse.rcp@default:default,org.eclipse.sdk@default:default,org.eclipse.search@default:default,org.eclipse.swt.gtk.linux.x86@default:false,org.eclipse.swt@default:default,org.eclipse.swtbot.ant.optional.junit3@default:false,org.eclipse.swtbot.ant.optional.junit4@default:false,org.eclipse.swtbot.eclipse.core@default:default,org.eclipse.swtbot.eclipse.finder@default:default,org.eclipse.swtbot.eclipse.gef.finder@default:default,org.eclipse.swtbot.eclipse.junit3.headless@default:default,org.eclipse.swtbot.eclipse.junit4.headless@default:default,org.eclipse.swtbot.eclipse.spy@default:default,org.eclipse.swtbot.eclipse.ui@default:default,org.eclipse.swtbot.forms.finder@default:default,org.eclipse.swtbot.go@default:default,org.eclipse.swtbot.junit4_x@default:default,org.eclipse.swtbot.swt.finder@default:default,org.eclipse.team.core@default:default,org.eclipse.team.cvs.core@default:default,org.eclipse.team.cvs.ssh2@default:default,org.eclipse.team.cvs.ui@default:default,org.eclipse.team.ui@default:default,org.eclipse.text@default:default,org.eclipse.ui.browser@default:default,org.eclipse.ui.cheatsheets@default:default,org.eclipse.ui.console@default:default,org.eclipse.ui.editors@default:default,org.eclipse.ui.externaltools@default:default,org.eclipse.ui.forms@default:default,org.eclipse.ui.ide.application@default:default,org.eclipse.ui.ide@default:default,org.eclipse.ui.intro.universal@default:default,org.eclipse.ui.intro@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.ui.net@default:default,org.eclipse.ui.presentations.r21@default:default,org.eclipse.ui.views.log@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.ui.views@default:default,org.eclipse.ui.workbench.compatibility@default:false,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.eclipse.uml2.codegen.ecore.ui@default:default,org.eclipse.uml2.codegen.ecore@default:default,org.eclipse.uml2.common.edit@default:default,org.eclipse.uml2.common@default:default,org.eclipse.uml2.doc@default:default,org.eclipse.uml2.examples.uml.ui@default:default,org.eclipse.uml2.examples@default:default,org.eclipse.uml2.uml.ecore.exporter@default:default,org.eclipse.uml2.uml.ecore.importer@default:default,org.eclipse.uml2.uml.edit@default:default,org.eclipse.uml2.uml.editor@default:default,org.eclipse.uml2.uml.resources@default:default,org.eclipse.uml2.uml@default:default,org.eclipse.uml2@default:default,org.eclipse.update.configurator@3:true,org.eclipse.update.core.linux@default:false,org.eclipse.update.core@default:default,org.eclipse.update.scheduler@default:default,org.eclipse.update.ui@default:default,org.eclipse.wb.core.databinding.xml@default:default,org.eclipse.wb.core.databinding@default:default,org.eclipse.wb.core.lib@default:default,org.eclipse.wb.core.ui@default:default,org.eclipse.wb.core.xml@default:default,org.eclipse.wb.core@default:default,org.eclipse.wb.discovery.core@default:default,org.eclipse.wb.discovery.ui@default:default,org.eclipse.wb.doc.user@default:default,org.eclipse.wb.jdt.fragment@default:false,org.eclipse.wb.layout.group@default:default,org.eclipse.wb.os.linux@default:default,org.eclipse.wb.os@default:default,org.eclipse.wb.rcp.SWT_AWT@default:default,org.eclipse.wb.rcp.databinding.emf@default:default,org.eclipse.wb.rcp.databinding.xwt@default:default,org.eclipse.wb.rcp.databinding@default:default,org.eclipse.wb.rcp.nebula@default:default,org.eclipse.wb.rcp.swing2swt@default:default,org.eclipse.wb.rcp@default:default,org.eclipse.wb.runtime.lib@default:default,org.eclipse.wb.runtime@default:default,org.eclipse.wb.swing.FormLayout.lib@default:default,org.eclipse.wb.swing.FormLayout@default:default,org.eclipse.wb.swing.MigLayout.lib@default:default,org.eclipse.wb.swing.MigLayout@default:default,org.eclipse.wb.swing.databinding@default:default,org.eclipse.wb.swing.java6@default:default,org.eclipse.wb.swing.jsr296@default:default,org.eclipse.wb.swing@default:default,org.eclipse.wb.swt.widgets.baseline@default:default,org.eclipse.wb.swt@default:default,org.eclipse.wb.xwt@default:default,org.eclipse.wst.common.core@default:default,org.eclipse.wst.common.emf@default:default,org.eclipse.wst.common.emfworkbench.integration@default:default,org.eclipse.wst.common.environment@default:default,org.eclipse.wst.common.frameworks.ui@default:default,org.eclipse.wst.common.frameworks@default:default,org.eclipse.wst.common.infopop@default:default,org.eclipse.wst.common.modulecore.ui@default:default,org.eclipse.wst.common.modulecore@default:default,org.eclipse.wst.common.project.facet.core@default:default,org.eclipse.wst.common.snippets@default:default,org.eclipse.wst.common.ui@default:default,org.eclipse.wst.common.uriresolver@default:default,org.eclipse.wst.css.core@default:default,org.eclipse.wst.css.ui@default:default,org.eclipse.wst.dtd.core@default:default,org.eclipse.wst.dtd.ui.infopop@default:default,org.eclipse.wst.dtd.ui@default:default,org.eclipse.wst.dtdeditor.doc.user@default:default,org.eclipse.wst.html.core@default:default,org.eclipse.wst.html.ui@default:default,org.eclipse.wst.internet.cache@default:default,org.eclipse.wst.server.core@default:default,org.eclipse.wst.sse.core@default:default,org.eclipse.wst.sse.doc.user@default:default,org.eclipse.wst.sse.ui.infopop@default:default,org.eclipse.wst.sse.ui@default:default,org.eclipse.wst.standard.schemas@default:default,org.eclipse.wst.validation.infopop@default:default,org.eclipse.wst.validation.ui@default:default,org.eclipse.wst.validation@default:default,org.eclipse.wst.web@default:default,org.eclipse.wst.xml.core@default:default,org.eclipse.wst.xml.ui.infopop@default:default,org.eclipse.wst.xml.ui@default:default,org.eclipse.wst.xml.xpath.core@default:default,org.eclipse.wst.xml.xpath.ui@default:default,org.eclipse.wst.xml.xpath2.processor.doc.user@default:default,org.eclipse.wst.xml.xpath2.processor@default:default,org.eclipse.wst.xml.xpath2.wtptypes@default:default,org.eclipse.wst.xml.xpath2@default:default,org.eclipse.wst.xmleditor.doc.user@default:default,org.eclipse.wst.xsd.core@default:default,org.eclipse.wst.xsd.ui@default:default,org.eclipse.wst.xsdeditor.doc.user@default:default,org.eclipse.wst.xsl.core@default:default,org.eclipse.wst.xsl.debug.ui@default:default,org.eclipse.wst.xsl.doc@default:default,org.eclipse.wst.xsl.exslt.core@default:default,org.eclipse.wst.xsl.exslt.ui@default:default,org.eclipse.wst.xsl.jaxp.debug.ui@default:default,org.eclipse.wst.xsl.jaxp.debug@default:default,org.eclipse.wst.xsl.jaxp.launching@default:default,org.eclipse.wst.xsl.launching@default:default,org.eclipse.wst.xsl.saxon@default:default,org.eclipse.wst.xsl.ui@default:default,org.eclipse.wst.xsl.xalan@default:default,org.eclipse.wst.xsl@default:default,org.eclipse.xpand.activities@default:default,org.eclipse.xpand.doc@default:default,org.eclipse.xpand.examples@default:default,org.eclipse.xpand.incremental@default:default,org.eclipse.xpand.support.cdt@default:default,org.eclipse.xpand.ui@default:default,org.eclipse.xpand@default:default,org.eclipse.xsd.cheatsheets@default:default,org.eclipse.xsd.doc@default:default,org.eclipse.xsd.ecore.converter@default:default,org.eclipse.xsd.ecore.exporter@default:default,org.eclipse.xsd.ecore.importer@default:default,org.eclipse.xsd.edit@default:default,org.eclipse.xsd.editor@default:default,org.eclipse.xsd.example.installer@default:default,org.eclipse.xsd.mapping.editor@default:default,org.eclipse.xsd.mapping@default:default,org.eclipse.xsd@default:default,org.eclipse.xtend.backend.compiler@default:default,org.eclipse.xtend.backend.ui@default:default,org.eclipse.xtend.backend.uml2types@default:default,org.eclipse.xtend.backend.xsdtypes@default:default,org.eclipse.xtend.backend@default:default,org.eclipse.xtend.check.ui@default:default,org.eclipse.xtend.middleend.xpand@default:default,org.eclipse.xtend.middleend.xtend@default:default,org.eclipse.xtend.profiler@default:default,org.eclipse.xtend.shared.ui@default:default,org.eclipse.xtend.typesystem.emf.ui@default:default,org.eclipse.xtend.typesystem.emf@default:default,org.eclipse.xtend.typesystem.uml2.ui@default:default,org.eclipse.xtend.typesystem.uml2@default:default,org.eclipse.xtend.typesystem.xsd.ui@default:default,org.eclipse.xtend.typesystem.xsd@default:default,org.eclipse.xtend.ui@default:default,org.eclipse.xtend.util.stdlib@default:default,org.eclipse.xtend2.lib@default:default,org.eclipse.xtend@default:default,org.eclipse.xtext.activities@default:default,org.eclipse.xtext.builder@default:default,org.eclipse.xtext.common.types.shared@default:default,org.eclipse.xtext.common.types.ui@default:default,org.eclipse.xtext.common.types@default:default,org.eclipse.xtext.doc@default:default,org.eclipse.xtext.ecore@default:default,org.eclipse.xtext.generator@default:default,org.eclipse.xtext.junit4@default:default,org.eclipse.xtext.junit@default:default,org.eclipse.xtext.logging@default:false,org.eclipse.xtext.purexbase.ui@default:default,org.eclipse.xtext.purexbase@default:default,org.eclipse.xtext.ui.codetemplates.ui@default:default,org.eclipse.xtext.ui.codetemplates@default:default,org.eclipse.xtext.ui.ecore@default:default,org.eclipse.xtext.ui.junit@default:default,org.eclipse.xtext.ui.shared@default:default,org.eclipse.xtext.ui@default:default,org.eclipse.xtext.util@default:default,org.eclipse.xtext.xbase.junit@default:default,org.eclipse.xtext.xbase.lib@default:default,org.eclipse.xtext.xbase.ui@default:default,org.eclipse.xtext.xbase@default:default,org.eclipse.xtext.xtend2.lib@default:default,org.eclipse.xtext.xtend2.ui@default:default,org.eclipse.xtext.xtend2@default:default,org.eclipse.xtext.xtext.ui.examples@default:default,org.eclipse.xtext.xtext.ui.graph@default:default,org.eclipse.xtext.xtext.ui@default:default,org.eclipse.xtext@default:default,org.h2@default:default,org.hamcrest.core@default:default,org.hamcrest.integration@default:default,org.hamcrest.library@default:default,org.hamcrest.text@default:default,org.hamcrest@default:default,org.jdom@default:default,org.jdom_jaxen@default:default,org.joda.time@default:default,org.junit*3.8.2.v3_8_2_v20100427-1100@default:default,org.junit*4.8.2.v4_8_2_v20110321-1705@default:default,org.junit4@default:default,org.mortbay.jetty.server@default:default,org.mortbay.jetty.util@default:default,org.objectweb.asm@default:default,org.sat4j.core@default:default,org.sat4j.pb@default:default,org.slf4j.api@default:default,org.w3c.css.sac@default:default,org.w3c.dom.events@default:default,org.w3c.dom.smil@default:default,org.w3c.dom.svg@default:default"/>
-<stringAttribute key="selected_workspace_plugins" value="org.eclipse.emf.parsley.tests.swtbot@default:default,org.eclipse.emf.parsley.wizards@default:default,org.eclipse.emf.parsley@default:default,org.eclipse.emf.parsley.examples.library.edit@default:default,org.eclipse.emf.parsley.examples.library.editor@default:default,org.eclipse.emf.parsley.examples.library@default:default,org.eclipse.swtbot.examples@default:default,org.eclipse.swtbot.swt.finder@default:default,org.eclipse.xtext.example.fowlerdsl.ui@default:default,org.eclipse.xtext.example.fowlerdsl@default:default"/>
-<booleanAttribute key="show_selected_only" value="true"/>
-<stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>
-<booleanAttribute key="tracing" value="false"/>
-<booleanAttribute key="useCustomFeatures" value="false"/>
-<booleanAttribute key="useDefaultConfig" value="true"/>
-<booleanAttribute key="useDefaultConfigArea" value="false"/>
-<booleanAttribute key="useProduct" value="true"/>
-</launchConfiguration>
diff --git a/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/EmfParsleyWizardsTests.java b/tests/org.eclipse.emf.parsley.tests.swtbot/old/EmfParsleyWizardsTests.java
similarity index 100%
rename from tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/EmfParsleyWizardsTests.java
rename to tests/org.eclipse.emf.parsley.tests.swtbot/old/EmfParsleyWizardsTests.java
diff --git a/tests/org.eclipse.emf.parsley.tests.swtbot/plugin.xml b/tests/org.eclipse.emf.parsley.tests.swtbot/plugin.xml
index cf26fb4..412a053 100644
--- a/tests/org.eclipse.emf.parsley.tests.swtbot/plugin.xml
+++ b/tests/org.eclipse.emf.parsley.tests.swtbot/plugin.xml
@@ -1,20 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.4"?>
 <plugin>
-	<extension
-         point="org.eclipse.ui.editors">
-      <editor
-            class="org.eclipse.emf.parsley.tests.factories.NoMouseEventExecutableExtensionFactory:org.eclipse.emf.parsley.editors.EmfTreeEditor"
-            contributorClass="org.eclipse.emf.parsley.tests.factories.NoMouseEventExecutableExtensionFactory:org.eclipse.emf.parsley.editors.EmfParsleyEditorActionBarContributor"
-            default="false"
-            id="org.eclipse.emf.parsley.noMouseEvents"
-            name="EMF Tree Editor No Mouse Events">
-         <contentTypeBinding
-               contentTypeId="org.eclipse.emf.ecore.xmi">
-         </contentTypeBinding>
-      </editor>
-   </extension>
-   
    	<extension
          point="org.eclipse.ui.editors">
       <editor
diff --git a/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/EmfParsleyDslWizardsTests.xtend b/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/EmfParsleyDslWizardsTests.xtend
index 37728ed..ef87ea3 100644
--- a/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/EmfParsleyDslWizardsTests.xtend
+++ b/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/EmfParsleyDslWizardsTests.xtend
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.emf.parsley.tests
 
+import org.eclipse.emf.parsley.wizards.NewEmfParsleyProjectSupport
 import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -27,81 +28,88 @@
 	val ONSELECTION_TABLE_FORM_TEMPLATE = "On selection Table Form View"	
 	val ONSELECTION_FORM_TEMPLATE = "On selection Form View"
 
+	new() {
+		// just to avoid code coverage of protected constructor
+		new NewEmfParsleyProjectSupport() {
+			
+		};
+	}
+
 	@Test
 	def canCreateDslProjectWithWizard() {
 		createDslProjectWithWizard
 	}
-	
+
 	@Test
 	def canCreateDslProjectWithWizardAndTreeFormTemplate() {
-		createProjectWithTemplateInWorkspace(org.eclipse.emf.parsley.tests.EmfParsleySWTBotAbstractTests.EMF_PARSLEY_CATEGORY,
-				org.eclipse.emf.parsley.tests.EmfParsleySWTBotAbstractTests.NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME, TREE_FORM_TEMPLATE);
+		createProjectWithTemplateInWorkspace(EmfParsleySWTBotAbstractTests.EMF_PARSLEY_CATEGORY,
+				EmfParsleySWTBotAbstractTests.NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME, TREE_FORM_TEMPLATE);
 		//bot.sleep(300000);
 		assertNoErrorsInProjectAfterAutoBuild();
 	}
-	
+
 	@Test
 	def canCreateDslProjectWithWizardAndTreeTemplate() {
-		createProjectWithTemplateInWorkspace(org.eclipse.emf.parsley.tests.EmfParsleySWTBotAbstractTests.EMF_PARSLEY_CATEGORY,
-				org.eclipse.emf.parsley.tests.EmfParsleySWTBotAbstractTests.NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME, TREE_TEMPLATE);
+		createProjectWithTemplateInWorkspace(EmfParsleySWTBotAbstractTests.EMF_PARSLEY_CATEGORY,
+				EmfParsleySWTBotAbstractTests.NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME, TREE_TEMPLATE);
 		//bot.sleep(300000);
 		assertNoErrorsInProjectAfterAutoBuild();
 	}
-	
+
 	@Test
 	def canCreateDslProjectWithWizardAndTableFormTemplate() {
-		createProjectWithTemplateInWorkspace(org.eclipse.emf.parsley.tests.EmfParsleySWTBotAbstractTests.EMF_PARSLEY_CATEGORY,
-				org.eclipse.emf.parsley.tests.EmfParsleySWTBotAbstractTests.NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME, TABLE_FORM_TEMPLATE);
+		createProjectWithTemplateInWorkspace(EmfParsleySWTBotAbstractTests.EMF_PARSLEY_CATEGORY,
+				EmfParsleySWTBotAbstractTests.NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME, TABLE_FORM_TEMPLATE);
 		//bot.sleep(300000);
 		assertNoErrorsInProjectAfterAutoBuild();
 	}
-	
+
 	@Test
 	def canCreateDslProjectWithWizardAndTableTemplate() {
-		createProjectWithTemplateInWorkspace(org.eclipse.emf.parsley.tests.EmfParsleySWTBotAbstractTests.EMF_PARSLEY_CATEGORY,
-				org.eclipse.emf.parsley.tests.EmfParsleySWTBotAbstractTests.NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME, TABLE_TEMPLATE);
+		createProjectWithTemplateInWorkspace(EmfParsleySWTBotAbstractTests.EMF_PARSLEY_CATEGORY,
+				EmfParsleySWTBotAbstractTests.NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME, TABLE_TEMPLATE);
 		//bot.sleep(300000);
 		assertNoErrorsInProjectAfterAutoBuild();
 	}
-	
+
 	@Test
 	def canCreateDslProjectWithWizardAndOnselectionTreeTemplate() {
-		createProjectWithTemplateInWorkspace(org.eclipse.emf.parsley.tests.EmfParsleySWTBotAbstractTests.EMF_PARSLEY_CATEGORY,
-				org.eclipse.emf.parsley.tests.EmfParsleySWTBotAbstractTests.NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME, ONSELECTION_TREE_TEMPLATE);
+		createProjectWithTemplateInWorkspace(EmfParsleySWTBotAbstractTests.EMF_PARSLEY_CATEGORY,
+				EmfParsleySWTBotAbstractTests.NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME, ONSELECTION_TREE_TEMPLATE);
 		//bot.sleep(300000);
 		assertNoErrorsInProjectAfterAutoBuild();
 	}
 
 	@Test
 	def canCreateDslProjectWithWizardAndOnselectionTreeFormTemplate() {
-		createProjectWithTemplateInWorkspace(org.eclipse.emf.parsley.tests.EmfParsleySWTBotAbstractTests.EMF_PARSLEY_CATEGORY,
-				org.eclipse.emf.parsley.tests.EmfParsleySWTBotAbstractTests.NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME, ONSELECTION_TREE_FORM_TEMPLATE);
+		createProjectWithTemplateInWorkspace(EmfParsleySWTBotAbstractTests.EMF_PARSLEY_CATEGORY,
+				EmfParsleySWTBotAbstractTests.NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME, ONSELECTION_TREE_FORM_TEMPLATE);
 		//bot.sleep(300000);
 		assertNoErrorsInProjectAfterAutoBuild();
 	}
-	
+
 	@Test
 	def canCreateDslProjectWithWizardAndOnselectionTableTemplate() {
-		createProjectWithTemplateInWorkspace(org.eclipse.emf.parsley.tests.EmfParsleySWTBotAbstractTests.EMF_PARSLEY_CATEGORY,
-				org.eclipse.emf.parsley.tests.EmfParsleySWTBotAbstractTests.NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME, ONSELECTION_TABLE_TEMPLATE);
+		createProjectWithTemplateInWorkspace(EmfParsleySWTBotAbstractTests.EMF_PARSLEY_CATEGORY,
+				EmfParsleySWTBotAbstractTests.NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME, ONSELECTION_TABLE_TEMPLATE);
 		//bot.sleep(300000);
 		assertNoErrorsInProjectAfterAutoBuild();
 	}
-	
+
 	@Test
 	def canCreateDslProjectWithWizardAndOnselectionFormTemplate() {
-		createProjectWithTemplateInWorkspace(org.eclipse.emf.parsley.tests.EmfParsleySWTBotAbstractTests.EMF_PARSLEY_CATEGORY,
-				org.eclipse.emf.parsley.tests.EmfParsleySWTBotAbstractTests.NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME, ONSELECTION_FORM_TEMPLATE);
+		createProjectWithTemplateInWorkspace(EmfParsleySWTBotAbstractTests.EMF_PARSLEY_CATEGORY,
+				EmfParsleySWTBotAbstractTests.NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME, ONSELECTION_FORM_TEMPLATE);
 		//bot.sleep(300000);
 		assertNoErrorsInProjectAfterAutoBuild();
 	}
 
 	@Test
 	def canCreateDslProjectWithWizardAndOnselectionTableFormTemplate() {
-		createProjectWithTemplateInWorkspace(org.eclipse.emf.parsley.tests.EmfParsleySWTBotAbstractTests.EMF_PARSLEY_CATEGORY,
-				org.eclipse.emf.parsley.tests.EmfParsleySWTBotAbstractTests.NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME, ONSELECTION_TABLE_FORM_TEMPLATE);
+		createProjectWithTemplateInWorkspace(EmfParsleySWTBotAbstractTests.EMF_PARSLEY_CATEGORY,
+				EmfParsleySWTBotAbstractTests.NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME, ONSELECTION_TABLE_FORM_TEMPLATE);
 		//bot.sleep(300000);
 		assertNoErrorsInProjectAfterAutoBuild();
 	}
-	
+
 }
diff --git a/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/EmfParsleyTestsSuite.java b/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/EmfParsleyTestsSuite.java
index fd12b67..dd9c5da 100644
--- a/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/EmfParsleyTestsSuite.java
+++ b/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/EmfParsleyTestsSuite.java
@@ -28,7 +28,6 @@
 	EmfParsleyFormTests.class,
 	EmfParsleyDialogTests.class,
 	EmfParsleyEditingStrategyTests.class,
-	EmfParsleyWizardsTests.class,
 	EmfParsleyExamplesWizardsTests.class,
 	EmfParsleyDslWizardsTests.class,
 	EmfParsleyDslEditorTests.class
diff --git a/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/factories/NoMouseEventExecutableExtensionFactory.java b/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/factories/NoMouseEventExecutableExtensionFactory.java
deleted file mode 100644
index 7354fed..0000000
--- a/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/factories/NoMouseEventExecutableExtensionFactory.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- * Lorenzo Bettini - Initial contribution and API
- *******************************************************************************/
-package org.eclipse.emf.parsley.tests.factories;
-
-import org.eclipse.emf.parsley.EmfParsleyGuiceModule;
-import org.eclipse.emf.parsley.listeners.IEditorMouseListener;
-import org.eclipse.emf.parsley.listeners.NoOpMouseAdapter;
-import org.eclipse.emf.parsley.tests.EmfParsleySwtBotTestsActivator;
-
-/**
- * Uses a mouse adapter that does not react to mouse events.
- * 
- * @author Lorenzo Bettini
- * 
- */
-public class NoMouseEventExecutableExtensionFactory extends
-		EmfParsleyTestsExecutableExtensionFactory {
-
-	@Override
-	protected EmfParsleyGuiceModule getModule() {
-		return new EmfParsleyGuiceModule(EmfParsleySwtBotTestsActivator.getDefault()) {
-
-			@Override
-			public Class<? extends IEditorMouseListener> bindIEditorMouseListener() {
-				return NoOpMouseAdapter.class;
-			}
-
-		};
-	}
-
-}
diff --git a/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/EditingDomainFinderTest.xtend b/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/EditingDomainFinderTest.xtend
new file mode 100644
index 0000000..d07ccae
--- /dev/null
+++ b/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/EditingDomainFinderTest.xtend
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Lorenzo Bettini - Initial contribution and API
+ *******************************************************************************/
+package org.eclipse.emf.parsley.tests
+
+import com.google.inject.Inject
+import org.eclipse.emf.common.util.URI
+import org.eclipse.emf.ecore.resource.Resource
+import org.eclipse.emf.edit.domain.EditingDomain
+import org.eclipse.emf.parsley.edit.EditingDomainFinder
+import org.eclipse.emf.parsley.junit4.AbstractEmfParsleyTest
+import org.eclipse.emf.parsley.resource.ResourceLoader
+import org.eclipse.emf.parsley.tests.models.testmodels.ClassWithName
+import org.eclipse.emf.parsley.tests.util.EmfParsleyFixturesAndUtilitiesTestRule
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+
+import static extension org.junit.Assert.*
+import org.eclipse.emf.ecore.resource.impl.ResourceImpl
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl
+
+class EditingDomainFinderTest extends AbstractEmfParsleyTest {
+
+	@Rule public extension EmfParsleyFixturesAndUtilitiesTestRule fixtures = new EmfParsleyFixturesAndUtilitiesTestRule()
+
+	@Inject var EditingDomainFinder editingDomainFinder
+
+	@Inject var EditingDomain editingDomain
+
+	@Before
+	def void setupFinder() {
+		getOrCreateInjector.injectMembers(this)
+	}
+
+	@Test def void testNotEObject() {
+		editingDomainFinder.getEditingDomainFor("aString").assertNull
+	}
+
+	@Test def void testEObjectWithoutResource() {
+		editingDomainFinder.getEditingDomainFor(classForControlsInstance).assertNull
+	}
+
+	@Test def void testEObjectInResource() {
+		val resource = loadResourceWithContents()
+		editingDomain.assertSame(editingDomainFinder.getEditingDomainFor(classWithName(resource)))
+	}
+
+	@Test def void testResource() {
+		val resource = loadResourceWithContents()
+		editingDomain.assertSame(editingDomainFinder.getEditingDomainFor(resource))
+	}
+
+	@Test def void testResourceNotInResourceSet() {
+		val resource = new ResourceImpl
+		editingDomainFinder.getEditingDomainFor(resource).assertNull
+	}
+
+	@Test def void testResourceSetNotInEditingDomain() {
+		val resource = new ResourceImpl => [ res |
+			new ResourceSetImpl => [
+				resources += res
+			]
+		]
+		resource.resourceSet.assertNotNull
+		editingDomainFinder.getEditingDomainFor(resource).assertNull
+	}
+
+	def private loadResourceWithContents() {
+		val injector = getOrCreateInjector
+		val resourceSet = editingDomain.resourceSet
+
+		resourceSet.setupResouceFactory
+
+		val resource = injector.getInstance(ResourceLoader).getResource(editingDomain,
+			URI.createURI("http:///My.testmodels")).resource
+		resource.assertNotNull
+		resource.contents += createClassWithName("test")
+		resource
+	}
+
+	def private classWithName(Resource resource) {
+		resource.contents.head as ClassWithName
+	}
+
+}
\ No newline at end of file
diff --git a/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/EmfParsleyAllTests.java b/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/EmfParsleyAllTests.java
index 7f4c197..269b09c 100644
--- a/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/EmfParsleyAllTests.java
+++ b/tests/org.eclipse.emf.parsley.tests/src/org/eclipse/emf/parsley/tests/EmfParsleyAllTests.java
@@ -25,6 +25,7 @@
 	ResourceLoaderTest.class,
 	ResourceSaveStrategyTest.class,
 	EditingDomainTest.class,
+	EditingDomainFinderTest.class,
 	AdapterFactoryHelperTest.class,
 	ViewerContentProviderTest.class,
 	TableViewerContentProviderTest.class,
