diff --git a/.artifactVersions b/.artifactVersions
deleted file mode 100644
index 9a17bde..0000000
--- a/.artifactVersions
+++ /dev/null
@@ -1,4 +0,0 @@
-version=0.9.1-SNAPSHOT
-relengVersion=0.12.5-SNAPSHOT
-relengP2Version=0.12.5-SNAPSHOT
-relengGroupId=org.lunifera.releng.maven
\ No newline at end of file
diff --git a/.depVersions b/.depVersions
deleted file mode 100644
index 549470f..0000000
--- a/.depVersions
+++ /dev/null
@@ -1,9 +0,0 @@
-org.eclipse.xtend;min=2.7.3;max=2.8.0
-org.eclipse.xtext;min=2.7.3;max=2.8.0
-org.semanticsoft;min=2.7.3;max=3.0.0
-org.lunifera.dsl;min=0.9.0;max=0.10.0
-org.lunifera;min=0.9.0;max=0.10.0
-com.google.guava;min=10.0.0;max=19.0.0
-com.vaadin.external.atmosphere.runtime;min=2.1.2;max=2.1.3
-com.vaadin.external.org.slf4j;min=1.6.1;max=1.6.2
-com.vaadin;min=7.3.8;max=7.3.9
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5867086
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,35 @@
+**git.properties
+
+**/target/
+**/.metadata/
+
+**/emf-gen/**/.gitignore
+**/src-gen/**/.gitignore
+**/git.properties
+**/*.java._trace
+**/*.log
+**/*.log.properties
+
+**/bin/
+**/build/
+*.class
+*.ctrl
+**/Debug/
+.DS_Store
+*.ear
+*.war
+
+**/*.actionbin
+**/*.blipbin
+**/*.chartbin
+**/*.cubebin
+**/*.datatypebin
+**/*.dtobin
+**/*.entitybin
+**/*.servicebin
+**/*.tablebin
+**/*.uibin
+**/*.uisemanticbin
+**/*.xtendbin
+**/*.xtextbin
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/README.md b/README.md
deleted file mode 100644
index e69de29..0000000
--- a/README.md
+++ /dev/null
diff --git a/jenkins.build.config.xml b/jenkins.build.config.xml
index 32d535d..53c6be5 100644
--- a/jenkins.build.config.xml
+++ b/jenkins.build.config.xml
@@ -17,5 +17,6 @@
         <jenkins.build.dependencies>
                 <jenkins.build.dependency>org.eclipse.osbp.dsl</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.ecview.core</jenkins.build.dependency>
+                <jenkins.build.dependency>org.eclipse.osbp.xtext.oxtype</jenkins.build.dependency>
         </jenkins.build.dependencies>
 </jenkins>
diff --git a/org.eclipse.osbp.ide.core.api/.classpath b/org.eclipse.osbp.ide.core.api/.classpath
new file mode 100644
index 0000000..b9a5b1e
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.api/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.ide.core.api/.gitignore b/org.eclipse.osbp.ide.core.api/.gitignore
new file mode 100644
index 0000000..e89d4af
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.api/.gitignore
@@ -0,0 +1,2 @@
+/target/
+.DS_Store
diff --git a/org.eclipse.osbp.ide.core.api/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.ide.core.api/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.api/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.ide.core.api/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.ide.core.api/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.api/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.osbp.ide.core.api/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.ide.core.api/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.api/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.ide.core.api/.settings/org.eclipse.pde.core.prefs b/org.eclipse.osbp.ide.core.api/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..f29e940
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.api/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/org.eclipse.osbp.ide.core.api/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.ide.core.api/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..b9718ae
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.api/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,9 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.ide.core.api/src/license/THIRD-PARTY.properties b/org.eclipse.osbp.ide.core.api/src/license/THIRD-PARTY.properties
new file mode 100644
index 0000000..c79559a
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.api/src/license/THIRD-PARTY.properties
@@ -0,0 +1,42 @@
+# Generated by org.codehaus.mojo.license.AddThirdPartyMojo
+#-------------------------------------------------------------------------------
+# Already used licenses in project :
+# - Apache License
+# - Apache License 2.0
+# - Apache License Version 2.0
+# - Apache License, Version 2.0
+# - Apache Software License - Version 2.0
+# - BSD License
+# - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+#										(CDDL)
+#										Version
+#										1.0
+# - Commercial Vaadin Add-On License version 3.0
+# - Common Development and Distribution license - v1.0.1
+# - Eclipse Public License - Version 1.0
+# - Eclipse Public License v1.0
+# - GNU LGPL 3
+# - GNU Lesser General Public License
+# - ICU License
+# - Indiana University Extreme! Lab Software
+#										License,
+#										vesion 1.1.1
+# - Lesser General Public License (LGPL)
+# - Lesser General Public License (LPGL)
+# - Lesser General Public License (LPGL) v 2.1
+# - MIT License
+# - The Apache Software License, Version 2.0
+# - The MIT License
+# - The SAX License
+# - The W3C License
+# - The W3C Software License
+# - W3C Software Copyright Notice and License
+#-------------------------------------------------------------------------------
+# Please fill the missing licenses for dependencies :
+#
+#
+#Thu Aug 28 19:18:26 CEST 2014
+ant--ant-launcher--1.6.5=Apache License Version 2.0
+commons-collections--commons-collections--3.1=Apache License Version 2.0
+javax.servlet--servlet-api--2.5=Common Development and Distribution license - v1.0.1
+org.jdesktop--swing-worker--1.1=Lesser General Public License (LGPL)
diff --git a/org.eclipse.osbp.ide.core.ui.shared/.classpath b/org.eclipse.osbp.ide.core.ui.shared/.classpath
new file mode 100644
index 0000000..b9a5b1e
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.ui.shared/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.ide.core.ui.shared/.gitignore b/org.eclipse.osbp.ide.core.ui.shared/.gitignore
new file mode 100644
index 0000000..e89d4af
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.ui.shared/.gitignore
@@ -0,0 +1,2 @@
+/target/
+.DS_Store
diff --git a/org.eclipse.osbp.ide.core.ui.shared/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.ide.core.ui.shared/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.ui.shared/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.ide.core.ui.shared/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.ide.core.ui.shared/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.ui.shared/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.osbp.ide.core.ui.shared/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.ide.core.ui.shared/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.ui.shared/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.ide.core.ui.shared/.settings/org.eclipse.pde.core.prefs b/org.eclipse.osbp.ide.core.ui.shared/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..f29e940
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.ui.shared/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/org.eclipse.osbp.ide.core.ui.shared/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.ide.core.ui.shared/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..f6a7c78
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.ui.shared/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.ide.core.ui.shared/META-INF/MANIFEST.MF b/org.eclipse.osbp.ide.core.ui.shared/META-INF/MANIFEST.MF
index 70375b5..3120cae 100644
--- a/org.eclipse.osbp.ide.core.ui.shared/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.ide.core.ui.shared/META-INF/MANIFEST.MF
@@ -12,12 +12,12 @@
 Bundle-ActivationPolicy: lazy
 Require-Bundle: org.eclipse.core.resources;bundle-version="3.9.0",
  org.eclipse.core.runtime;bundle-version="3.10.0",
- org.eclipse.xtext.builder;bundle-version="[2.7.3,2.8.0)",
+ org.eclipse.xtext.builder;bundle-version="[2.11.0,2.12.0)",
  org.eclipse.ui.workbench,
  org.eclipse.ui;bundle-version="3.106.0",
  org.eclipse.osbp.ide.core;bundle-version="[0.9.0,0.10.0)",
- org.eclipse.xtext.ui;bundle-version="[2.7.3,2.8.0)",
- org.eclipse.xtext.ui.shared;bundle-version="[2.7.3,2.8.0)",
+ org.eclipse.xtext.ui;bundle-version="[2.11.0,2.12.0)",
+ org.eclipse.xtext.ui.shared;bundle-version="[2.11.0,2.12.0)",
  org.eclipse.osbp.ide.core.api;bundle-version="[0.9.0,0.10.0)",
  org.eclipse.osbp.ide.core.ui;bundle-version="[0.9.0,0.10.0)"
 Export-Package: org.eclipse.osbp.ide.core.ui.shared;version="0.9.0",
diff --git a/org.eclipse.osbp.ide.core.ui.shared/src/license/THIRD-PARTY.properties b/org.eclipse.osbp.ide.core.ui.shared/src/license/THIRD-PARTY.properties
new file mode 100644
index 0000000..0f7af5d
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.ui.shared/src/license/THIRD-PARTY.properties
@@ -0,0 +1,42 @@
+# Generated by org.codehaus.mojo.license.AddThirdPartyMojo
+#-------------------------------------------------------------------------------
+# Already used licenses in project :
+# - Apache License
+# - Apache License 2.0
+# - Apache License Version 2.0
+# - Apache License, Version 2.0
+# - Apache Software License - Version 2.0
+# - BSD License
+# - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+#										(CDDL)
+#										Version
+#										1.0
+# - Commercial Vaadin Add-On License version 3.0
+# - Common Development and Distribution license - v1.0.1
+# - Eclipse Public License - Version 1.0
+# - Eclipse Public License v1.0
+# - GNU LGPL 3
+# - GNU Lesser General Public License
+# - ICU License
+# - Indiana University Extreme! Lab Software
+#										License,
+#										vesion 1.1.1
+# - Lesser General Public License (LGPL)
+# - Lesser General Public License (LPGL)
+# - Lesser General Public License (LPGL) v 2.1
+# - MIT License
+# - The Apache Software License, Version 2.0
+# - The MIT License
+# - The SAX License
+# - The W3C License
+# - The W3C Software License
+# - W3C Software Copyright Notice and License
+#-------------------------------------------------------------------------------
+# Please fill the missing licenses for dependencies :
+#
+#
+#Thu Aug 28 14:08:37 CEST 2014
+ant--ant-launcher--1.6.5=Apache License Version 2.0
+commons-collections--commons-collections--3.1=Apache License Version 2.0
+javax.servlet--servlet-api--2.5=Common Development and Distribution license - v1.0.1
+org.jdesktop--swing-worker--1.1=Lesser General Public License (LGPL)
diff --git a/org.eclipse.osbp.ide.core.ui/.classpath b/org.eclipse.osbp.ide.core.ui/.classpath
new file mode 100644
index 0000000..43b9862
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.ide.core.ui/.gitignore b/org.eclipse.osbp.ide.core.ui/.gitignore
new file mode 100644
index 0000000..c3d705e
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.ui/.gitignore
@@ -0,0 +1,3 @@
+/target/
+.DS_Store
+/xtend-gen/
diff --git a/org.eclipse.osbp.ide.core.ui/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.ide.core.ui/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.ui/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.ide.core.ui/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.ide.core.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.osbp.ide.core.ui/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.ide.core.ui/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.ui/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.ide.core.ui/.settings/org.eclipse.pde.core.prefs b/org.eclipse.osbp.ide.core.ui/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..f29e940
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.ui/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/org.eclipse.osbp.ide.core.ui/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.ide.core.ui/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..f6a7c78
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.ui/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.ide.core.ui/META-INF/MANIFEST.MF b/org.eclipse.osbp.ide.core.ui/META-INF/MANIFEST.MF
index acb945c..a85d6b0 100644
--- a/org.eclipse.osbp.ide.core.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.ide.core.ui/META-INF/MANIFEST.MF
@@ -12,14 +12,14 @@
 Bundle-ActivationPolicy: lazy
 Require-Bundle: org.eclipse.core.resources;bundle-version="3.9.0",
  org.eclipse.core.runtime;bundle-version="3.10.0",
- org.eclipse.xtext.builder;bundle-version="[2.7.3,2.8.0)",
+ org.eclipse.xtext.builder;bundle-version="[2.11.0,2.12.0)",
  org.eclipse.ui.workbench,
  org.eclipse.ui;bundle-version="3.106.0",
  org.eclipse.osbp.ide.core;bundle-version="[0.9.0,0.10.0)",
- org.eclipse.xtext.ui;bundle-version="[2.7.3,2.8.0)",
- org.eclipse.xtext.ui.shared;bundle-version="[2.7.3,2.8.0)",
+ org.eclipse.xtext.ui;bundle-version="[2.11.0,2.12.0)",
+ org.eclipse.xtext.ui.shared;bundle-version="[2.11.0,2.12.0)",
  org.eclipse.osbp.ide.core.api;bundle-version="[0.9.0,0.10.0)",
- org.eclipse.xtext.common.types.ui;bundle-version="[2.7.3,2.8.0)",
+ org.eclipse.xtext.common.types.ui;bundle-version="[2.11.0,2.12.0)",
  org.eclipse.jdt.core,
  org.eclipse.osbp.xtext.builder.ui.access;bundle-version="[0.9.0,0.10.0)",
  org.eclipse.ui.ide;bundle-version="3.10.0",
@@ -27,14 +27,14 @@
  org.eclipse.search,
  org.eclipse.ui.console,
  org.eclipse.jdt.launching,
- org.eclipse.osbp.dsl.xtext.lazyresolver.api;bundle-version="[0.9.0,0.10.0)",
  org.eclipse.osbp.ecview.core.common.model;bundle-version="[0.9.0,0.10.0)",
  org.eclipse.osbp.ecview.core.extension.model;bundle-version="[0.9.0,0.10.0)",
  org.eclipse.pde.ui,
  org.eclipse.equinox.p2.metadata,
  org.eclipse.osbp.dsl.entity.xtext;bundle-version="[0.9.0,0.10.0)",
  org.eclipse.osbp.dsl.dto.xtext;bundle-version="[0.9.0,0.10.0)",
- org.eclipse.osbp.dsl.services.xtext;bundle-version="[0.9.0,0.10.0)"
+ org.eclipse.osbp.dsl.services.xtext;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.xtext.oxtype;bundle-version="[0.9.0,0.10.0)"
 Export-Package: org.eclipse.osbp.ide.core.ui;x-internal:=true;version="0.9.0",
  org.eclipse.osbp.ide.core.ui.builder;x-internal:=true;version="0.9.0",
  org.eclipse.osbp.ide.core.ui.i18n;x-internal:=true;version="0.9.0",
diff --git a/org.eclipse.osbp.ide.core.ui/pom.xml b/org.eclipse.osbp.ide.core.ui/pom.xml
index 88095f5..89455d1 100644
--- a/org.eclipse.osbp.ide.core.ui/pom.xml
+++ b/org.eclipse.osbp.ide.core.ui/pom.xml
@@ -33,7 +33,6 @@
             <plugin>
                 <groupId>org.eclipse.tycho</groupId>
                 <artifactId>tycho-compiler-plugin</artifactId>
-                <version>0.21.0</version>
                 <configuration>
                     <compilerVersion>1.8</compilerVersion>
                     <encoding>UTF-8</encoding>
diff --git a/org.eclipse.osbp.ide.core.ui/src/license/THIRD-PARTY.properties b/org.eclipse.osbp.ide.core.ui/src/license/THIRD-PARTY.properties
new file mode 100644
index 0000000..0f7af5d
--- /dev/null
+++ b/org.eclipse.osbp.ide.core.ui/src/license/THIRD-PARTY.properties
@@ -0,0 +1,42 @@
+# Generated by org.codehaus.mojo.license.AddThirdPartyMojo
+#-------------------------------------------------------------------------------
+# Already used licenses in project :
+# - Apache License
+# - Apache License 2.0
+# - Apache License Version 2.0
+# - Apache License, Version 2.0
+# - Apache Software License - Version 2.0
+# - BSD License
+# - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+#										(CDDL)
+#										Version
+#										1.0
+# - Commercial Vaadin Add-On License version 3.0
+# - Common Development and Distribution license - v1.0.1
+# - Eclipse Public License - Version 1.0
+# - Eclipse Public License v1.0
+# - GNU LGPL 3
+# - GNU Lesser General Public License
+# - ICU License
+# - Indiana University Extreme! Lab Software
+#										License,
+#										vesion 1.1.1
+# - Lesser General Public License (LGPL)
+# - Lesser General Public License (LPGL)
+# - Lesser General Public License (LPGL) v 2.1
+# - MIT License
+# - The Apache Software License, Version 2.0
+# - The MIT License
+# - The SAX License
+# - The W3C License
+# - The W3C Software License
+# - W3C Software Copyright Notice and License
+#-------------------------------------------------------------------------------
+# Please fill the missing licenses for dependencies :
+#
+#
+#Thu Aug 28 14:08:37 CEST 2014
+ant--ant-launcher--1.6.5=Apache License Version 2.0
+commons-collections--commons-collections--3.1=Apache License Version 2.0
+javax.servlet--servlet-api--2.5=Common Development and Distribution license - v1.0.1
+org.jdesktop--swing-worker--1.1=Lesser General Public License (LGPL)
diff --git a/org.eclipse.osbp.ide.core.ui/src/org/eclipse/osbp/ide/core/ui/builder/OSBPModelEnhancingBuilder.java b/org.eclipse.osbp.ide.core.ui/src/org/eclipse/osbp/ide/core/ui/builder/OSBPModelEnhancingBuilder.java
index f5ba1ac..981d4ec 100644
--- a/org.eclipse.osbp.ide.core.ui/src/org/eclipse/osbp/ide/core/ui/builder/OSBPModelEnhancingBuilder.java
+++ b/org.eclipse.osbp.ide.core.ui/src/org/eclipse/osbp/ide/core/ui/builder/OSBPModelEnhancingBuilder.java
@@ -50,8 +50,8 @@
 import org.eclipse.osbp.dsl.semantic.common.types.LAttribute;
 import org.eclipse.osbp.dsl.semantic.common.types.LEnum;
 import org.eclipse.osbp.dsl.semantic.common.types.LEnumLiteral;
-import org.eclipse.osbp.dsl.semantic.common.types.LImport;
 import org.eclipse.osbp.dsl.semantic.common.types.LReference;
+import org.eclipse.osbp.dsl.semantic.common.types.LScalarType;
 import org.eclipse.osbp.dsl.semantic.common.types.LType;
 import org.eclipse.osbp.dsl.semantic.common.types.LTypedPackage;
 import org.eclipse.osbp.dsl.semantic.common.types.OSBPTypesFactory;
@@ -78,19 +78,23 @@
 import org.eclipse.osbp.dsl.semantic.service.LServiceModel;
 import org.eclipse.osbp.dsl.semantic.service.OSBPServiceFactory;
 import org.eclipse.osbp.dsl.semantic.service.OSBPServicePackage;
-import org.eclipse.osbp.dsl.xtext.lazyresolver.api.ISemanticLoadingResource;
-import org.eclipse.osbp.dsl.xtext.lazyresolver.api.logger.TimeLogger;
 import org.eclipse.osbp.ide.core.api.i18n.CoreUtil;
 import org.eclipse.osbp.ide.core.ui.CoreUiActivator;
 import org.eclipse.osbp.ide.core.ui.nature.OSBPNature;
 import org.eclipse.osbp.xtext.builder.ui.access.IXtextUtilService;
+import org.eclipse.osbp.xtext.oxtype.logger.TimeLogger;
+import org.eclipse.osbp.xtext.oxtype.oxtype.OXImportDeclaration;
+import org.eclipse.osbp.xtext.oxtype.oxtype.OXtypeFactory;
+import org.eclipse.osbp.xtext.oxtype.resource.ISemanticLoadingResource;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.xtext.builder.builderState.IBuilderState;
 import org.eclipse.xtext.common.types.TypesPackage;
+import org.eclipse.xtext.naming.IQualifiedNameProvider;
 import org.eclipse.xtext.resource.IEObjectDescription;
 import org.eclipse.xtext.resource.IReferenceDescription;
 import org.eclipse.xtext.resource.IResourceDescription;
 import org.eclipse.xtext.resource.IResourceDescription.Delta;
+import org.eclipse.xtext.resource.IResourceServiceProvider;
 import org.eclipse.xtext.resource.SaveOptions;
 import org.eclipse.xtext.resource.XtextResourceSet;
 import org.eclipse.xtext.ui.editor.findrefs.IReferenceFinder;
@@ -99,6 +103,9 @@
 import org.eclipse.xtext.util.IAcceptor;
 import org.eclipse.xtext.util.Pair;
 import org.eclipse.xtext.util.concurrent.IUnitOfWork;
+import org.eclipse.xtext.xtype.XImportDeclaration;
+import org.eclipse.xtext.xtype.XImportSection;
+import org.eclipse.xtext.xtype.XtypeFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -123,8 +130,7 @@
 	public final static String SOURCE_BASE_SRC_DIRECTORY = "src";
 
 	/** The Constant LOGGER. */
-	private static final Logger LOGGER = LoggerFactory
-			.getLogger(OSBPModelEnhancingBuilder.class);
+	private static final Logger LOGGER = LoggerFactory.getLogger(OSBPModelEnhancingBuilder.class);
 
 	/** The state. */
 	@Inject
@@ -147,6 +153,9 @@
 	private List<Pending> pending = new ArrayList<Pending>();
 	private boolean firstBuild = true;
 
+	private IQualifiedNameProvider entityNameProvider;
+	private IQualifiedNameProvider dtoNameProvider;
+
 	/**
 	 * Instantiates a new OSBP model enhancing builder.
 	 */
@@ -162,8 +171,7 @@
 	 *            the event
 	 */
 	@Override
-	public void descriptionsChanged(
-			org.eclipse.xtext.resource.IResourceDescription.Event event) {
+	public void descriptionsChanged(org.eclipse.xtext.resource.IResourceDescription.Event event) {
 		for (Delta delta : event.getDeltas()) {
 			// do not check for changes in the eobject description. Causes
 			// confusion for the user
@@ -217,15 +225,13 @@
 		if (platformResourcePath == null) {
 			return false;
 		}
-		IFile file = ResourcesPlugin.getWorkspace().getRoot()
-				.getFile(new Path(platformResourcePath));
+		IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(platformResourcePath));
 		if (file == null || !file.exists()) {
 			// if resource is not in workspace continue
 			return false;
 		}
 
-		Iterable<Pair<IStorage, IProject>> pairs = uriStorageMapper
-				.getStorages(uri);
+		Iterable<Pair<IStorage, IProject>> pairs = uriStorageMapper.getStorages(uri);
 		if (pairs.iterator().hasNext()) {
 			Pair<IStorage, IProject> pair = pairs.iterator().next();
 			IProject dtoProject = pair.getSecond();
@@ -243,8 +249,7 @@
 	 * java.util.Map, org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	@Override
-	protected IProject[] build(int kind, Map<String, String> args,
-			IProgressMonitor monitor) throws CoreException {
+	protected IProject[] build(int kind, Map<String, String> args, IProgressMonitor monitor) throws CoreException {
 		ensureParticipants();
 
 		if (kind == FULL_BUILD || firstBuild) {
@@ -267,8 +272,7 @@
 			});
 
 			boolean processed = false;
-			for (Iterator<Pending> iterator = pending.iterator(); iterator
-					.hasNext() && !processed;) {
+			for (Iterator<Pending> iterator = pending.iterator(); iterator.hasNext() && !processed;) {
 				Pending pending = iterator.next();
 				try {
 
@@ -282,8 +286,7 @@
 					String fileExtension = pending.uri.fileExtension();
 					switch (fileExtension) {
 					case "entity":
-						LEntityModel lentity = dtoBuilder
-								.loadSemanticModel(pending.uri);
+						LEntityModel lentity = dtoBuilder.loadSemanticModel(pending.uri);
 						if (lentity != null) {
 							dtoBuilder.buildDtos(lentity);
 							processed = true;
@@ -291,8 +294,7 @@
 						}
 						break;
 					case "dto":
-						LDtoModel lDtoModel = serviceBuilder
-								.loadSemanticModel(pending.uri);
+						LDtoModel lDtoModel = serviceBuilder.loadSemanticModel(pending.uri);
 						if (lDtoModel != null) {
 							// touch the ui and dialog models
 							try {
@@ -342,8 +344,7 @@
 					IFile file = (IFile) resource;
 
 					org.eclipse.emf.common.util.URI uri = org.eclipse.emf.common.util.URI
-							.createPlatformResourceURI(file.getFullPath()
-									.toString(), false);
+							.createPlatformResourceURI(file.getFullPath().toString(), false);
 					if (shouldUse(uri)) {
 						String fileExtension = uri.fileExtension();
 						switch (fileExtension) {
@@ -392,6 +393,18 @@
 			serviceBuilder = new ServiceEnhancer();
 			injector.injectMembers(serviceBuilder);
 		}
+
+		if (entityNameProvider == null) {
+			entityNameProvider = IResourceServiceProvider.Registry.INSTANCE
+					.getResourceServiceProvider(URI.createURI("osbp_builder:/my.entity"))
+					.get(IQualifiedNameProvider.class);
+		}
+
+		if (dtoNameProvider == null) {
+			dtoNameProvider = IResourceServiceProvider.Registry.INSTANCE
+					.getResourceServiceProvider(URI.createURI("osbp_builder:/my.dto"))
+					.get(IQualifiedNameProvider.class);
+		}
 	}
 
 	/**
@@ -430,8 +443,7 @@
 		 *            the temp l entity model
 		 */
 		public void buildDtos(LEntityModel tempLEntityModel) {
-			IXtextUtilService service = CoreUiActivator.getDefault()
-					.getUtilService();
+			IXtextUtilService service = CoreUiActivator.getDefault().getUtilService();
 			if (service == null) {
 				LOGGER.error("Skipping dto build since IXtextUtilService is not available!");
 				return;
@@ -444,21 +456,18 @@
 			//
 			// find referencing dto model
 			Set<URI> entityURIs = findEntityURIs(tempLEntityModel);
-			final List<IReferenceDescription> targetDtoReferences = findTargetDtoReferences(
-					entityURIs, tempLEntityModel.eResource().getResourceSet());
+			final List<IReferenceDescription> targetDtoReferences = findTargetDtoReferences(entityURIs,
+					tempLEntityModel.eResource().getResourceSet());
 
 			// ------- create the build context -------
-			DtoEnhancerContext context = createDtoBuildContext(
-					tempLEntityModel, targetDtoReferences);
+			DtoEnhancerContext context = createDtoBuildContext(tempLEntityModel, targetDtoReferences);
 
 			ISemanticLoadingResource entityResource = (ISemanticLoadingResource) context.writeableResourceSet
 					.getResource(tempLEntityModel.eResource().getURI(), true);
 
-			List<LType> sourceArtifacts = collectEntities((LEntityModel) entityResource
-					.getSemanticElement());
+			List<LType> sourceArtifacts = collectEntities((LEntityModel) entityResource.getSemanticElement());
 
-			List<LType> tempDtos = collectDtos((LDtoModel) context.dtoResource
-					.getSemanticElement());
+			List<LType> tempDtos = collectDtos((LDtoModel) context.dtoResource.getSemanticElement());
 
 			List<SourceTypeStore> sourceTypeStores = new ArrayList<SourceTypeStore>();
 			List<LType> dtosToPersist = new ArrayList<LType>();
@@ -472,8 +481,7 @@
 					LDto lDto = (LDto) findDtoType(lEntity, tempDtos);
 					if (lDto == null) {
 						lDto = OSBPDtoFactory.eINSTANCE.createLAutoInheritDto();
-						lDto.setAnnotationInfo(OSBPDtoFactory.eINSTANCE
-								.createLDto());
+						lDto.setAnnotationInfo(OSBPDtoFactory.eINSTANCE.createLDto());
 						tempDtos.add(lDto);
 					} else {
 						// remove from package for a while
@@ -496,8 +504,7 @@
 					LDto lDto = (LDto) findDtoType(lBean, tempDtos);
 					if (lDto == null) {
 						lDto = OSBPDtoFactory.eINSTANCE.createLAutoInheritDto();
-						lDto.setAnnotationInfo(OSBPDtoFactory.eINSTANCE
-								.createLDto());
+						lDto.setAnnotationInfo(OSBPDtoFactory.eINSTANCE.createLDto());
 						tempDtos.add(lDto);
 					} else {
 						// remove from package for a while
@@ -525,22 +532,19 @@
 						tempDtos.add(lDtoType);
 					} else {
 						// remove from package for a while
-						LTypedPackage lPkg = (LTypedPackage) lDtoType
-								.eContainer();
+						LTypedPackage lPkg = (LTypedPackage) lDtoType.eContainer();
 						lPkg.getTypes().remove(lDtoType);
 
 						// collect all touched packages -> They need cleanup
 						// later
 						touchedPackages.add(lPkg);
 					}
-					lDtoType.setName(NamingConventionsUtil
-							.toDtoName(lSourceType));
+					lDtoType.setName(NamingConventionsUtil.toDtoName(lSourceType));
 
 					dtosToPersist.add(lDtoType);
 
 					// store the source type of the new enum
-					sourceTypeStores.add(new SourceTypeStore(lSourceType,
-							lDtoType));
+					sourceTypeStores.add(new SourceTypeStore(lSourceType, lDtoType));
 
 				}
 			}
@@ -549,13 +553,12 @@
 			// an
 			// entity anymore
 			for (LTypedPackage lPkg : touchedPackages) {
-				for (Iterator<LType> iterator = lPkg.getTypes().iterator(); iterator
-						.hasNext();) {
+				for (Iterator<LType> iterator = lPkg.getTypes().iterator(); iterator.hasNext();) {
 					LType lType = (LType) iterator.next();
 					if (lType instanceof LAutoInheritDto) {
 						LDto lDto = (LDto) lType;
-						if (lDto.getWrappedType() == null
-								|| lDto.getWrappedType().eIsProxy()) {
+						if (lDto.getWrappedType() == null || lDto.getWrappedType().eIsProxy()) {
+							lDto.setSuperType(null);
 							iterator.remove();
 						}
 					}
@@ -567,8 +570,7 @@
 			for (LType lType : new ArrayList<>(tempDtos)) {
 				if (lType instanceof LAutoInheritDto) {
 					LDto lDto = (LDto) lType;
-					if (lDto.getWrappedType() == null
-							|| lDto.getWrappedType().eIsProxy()) {
+					if (lDto.getWrappedType() == null || lDto.getWrappedType().eIsProxy()) {
 						tempDtos.remove(lDto);
 					}
 				}
@@ -588,22 +590,18 @@
 			for (LType lType : sourceArtifacts) {
 				if (lType instanceof LEntity) {
 					LEntity lEntity = (LEntity) lType;
-					if (lEntity.getSuperType() != null
-							&& !lEntity.getSuperType().eIsProxy()) {
+					if (lEntity.getSuperType() != null && !lEntity.getSuperType().eIsProxy()) {
 						LEntity lEntitySuperType = lEntity.getSuperType();
 						LDto lDto = (LDto) findDtoType(lEntity, tempDtos);
-						LDto lDtoSuperType = (LDto) findDtoType(
-								lEntitySuperType, tempDtos);
+						LDto lDtoSuperType = (LDto) findDtoType(lEntitySuperType, tempDtos);
 						lDto.setSuperType(lDtoSuperType);
 					}
 				} else if (lType instanceof LBean) {
 					LBean lBean = (LBean) lType;
-					if (lBean.getSuperType() != null
-							&& !lBean.getSuperType().eIsProxy()) {
+					if (lBean.getSuperType() != null && !lBean.getSuperType().eIsProxy()) {
 						LBean lBeanSuperType = lBean.getSuperType();
 						LDto lDto = (LDto) findDtoType(lBean, tempDtos);
-						LDto lDtoSuperType = (LDto) findDtoType(lBeanSuperType,
-								tempDtos);
+						LDto lDtoSuperType = (LDto) findDtoType(lBeanSuperType, tempDtos);
 						lDto.setSuperType(lDtoSuperType);
 					}
 				}
@@ -639,14 +637,10 @@
 						}
 						dtoNames.add(lDto.getName());
 
-						LTypedPackage lSourceTypePkg = (LTypedPackage) lDto
-								.getWrappedType().eContainer();
-						addDtoToPackage(
-								NamingConventionsUtil
-										.toDtoPackage(lSourceTypePkg),
-								lDto, (LDtoModel) context.dtoResource
-										.getSemanticElement(), lSourceTypePkg
-										.getName());
+						LType wrappedType = lDto.getWrappedType();
+						LTypedPackage lSourceTypePkg = (LTypedPackage) wrappedType.eContainer();
+						addDtoToPackage(NamingConventionsUtil.toDtoPackage(lSourceTypePkg), lDto,
+								(LDtoModel) context.dtoResource.getSemanticElement(), wrappedType);
 					} else if (lType instanceof LEnum) {
 						LEnum lEnum = (LEnum) lType;
 						// filter dtos
@@ -656,16 +650,10 @@
 						}
 						dtoNames.add(lEnum.getName());
 
-						LEnum sourceType = (LEnum) SourceTypeStore
-								.findSourceType(lEnum);
-						LTypedPackage lSourceTypePkg = (LTypedPackage) sourceType
-								.eContainer();
-						addDtoToPackage(
-								NamingConventionsUtil
-										.toDtoPackage(lSourceTypePkg),
-								lEnum, (LDtoModel) context.dtoResource
-										.getSemanticElement(), lSourceTypePkg
-										.getName());
+						LEnum sourceType = (LEnum) SourceTypeStore.findSourceType(lEnum);
+						LTypedPackage lSourceTypePkg = (LTypedPackage) sourceType.eContainer();
+						addDtoToPackage(NamingConventionsUtil.toDtoPackage(lSourceTypePkg), lEnum,
+								(LDtoModel) context.dtoResource.getSemanticElement(), sourceType);
 					}
 				}
 
@@ -678,12 +666,10 @@
 				// save the dtos
 				//
 				try {
-					Diagnostic diagnostic = Diagnostician.INSTANCE
-							.validate(context.dtoResource.getSemanticElement());
+					Diagnostic diagnostic = Diagnostician.INSTANCE.validate(context.dtoResource.getSemanticElement());
 					int sev = diagnostic.getSeverity();
 					if (sev <= Diagnostic.WARNING) {
-						context.dtoResource.save(SaveOptions.newBuilder()
-								.format().getOptions().toOptionsMap());
+						context.dtoResource.save(SaveOptions.newBuilder().format().getOptions().toOptionsMap());
 					} else {
 						if (!context.dtoResource.getErrors().isEmpty()) {
 							String message = context.dtoResource.getErrors()
@@ -735,8 +721,7 @@
 		 *            the target dto references
 		 * @return the dto enhancer context
 		 */
-		private DtoEnhancerContext createDtoBuildContext(
-				LEntityModel tempLEntityModel,
+		private DtoEnhancerContext createDtoBuildContext(LEntityModel tempLEntityModel,
 				final List<IReferenceDescription> targetDtoReferences) {
 			DtoEnhancerContext context = new DtoEnhancerContext();
 			if (!targetDtoReferences.isEmpty()) {
@@ -747,24 +732,19 @@
 				//
 
 				// access entity resource
-				ISemanticLoadingResource tempEntityResource = (ISemanticLoadingResource) tempLEntityModel
-						.eResource();
-				ResourceSet readonlyResourceSet = tempEntityResource
-						.getResourceSet();
+				ISemanticLoadingResource tempEntityResource = (ISemanticLoadingResource) tempLEntityModel.eResource();
+				ResourceSet readonlyResourceSet = tempEntityResource.getResourceSet();
 
 				// access dto resource based on entityResourceSet
 				IReferenceDescription firstDesc = targetDtoReferences.get(0);
-				LDto tempDto = (LDto) readonlyResourceSet.getEObject(
-						firstDesc.getSourceEObjectUri(), true);
+				LDto tempDto = (LDto) readonlyResourceSet.getEObject(firstDesc.getSourceEObjectUri(), true);
 
 				// create the proper dto resourceSet to save the dto
-				context.writeableResourceSet = getProjectResourceSet(EcoreUtil
-						.getURI(tempDto));
+				context.writeableResourceSet = getProjectResourceSet(EcoreUtil.getURI(tempDto));
 
 				// load the dtoResource based on the dto resourceSet
 				context.dtoResource = (ISemanticLoadingResource) context.writeableResourceSet
-						.getResource(EcoreUtil.getURI(tempDto).trimFragment(),
-								true);
+						.getResource(EcoreUtil.getURI(tempDto).trimFragment(), true);
 			} else {
 
 				URI entityURI = EcoreUtil.getURI(tempLEntityModel);
@@ -788,27 +768,22 @@
 					// "org/my/foo/entity/MyEntity.entity"
 					// to
 					// "org/my/foo/entity/MyEntity.dtos"
-					dtoResourcePath = NamingConventionsUtil
-							.toDtoPackage(entityURI.path().replace("/resource",
-									""));
+					dtoResourcePath = NamingConventionsUtil.toDtoPackage(entityURI.path().replace("/resource", ""));
 				}
 
 				// now create a dtoResource
 
-				URI dtoModelURI = URI.createPlatformResourceURI(
-						dtoResourcePath, true);
+				URI dtoModelURI = URI.createPlatformResourceURI(dtoResourcePath, true);
 				context.dtoResource = (ISemanticLoadingResource) context.writeableResourceSet
 						.createResource(dtoModelURI);
-				context.dtoResource.getContents().add(
-						OSBPDtoFactory.eINSTANCE.createLDtoModel());
+				context.dtoResource.getContents().add(OSBPDtoFactory.eINSTANCE.createLDtoModel());
 			}
 			return context;
 		}
 
 		private IResource findDtoFile(URI entityURI) {
-			String dtoFileName = entityURI.path()
-					.substring(entityURI.path().lastIndexOf("/") + 1)
-					.replace(".entity", ".dto");
+			String dtoFileName = entityURI.path().substring(entityURI.path().lastIndexOf("/") + 1).replace(".entity",
+					".dto");
 
 			IResource[] temp = new IResource[1];
 			try {
@@ -820,8 +795,7 @@
 							}
 							return true;
 						} else if (res instanceof IFolder) {
-							if (res.getName().equals("bin")
-									|| res.getName().equals("target")) {
+							if (res.getName().equals("bin") || res.getName().equals("target")) {
 								return false;
 							}
 							return true;
@@ -877,8 +851,13 @@
 		 * @param entityPackage
 		 *            the entity package
 		 */
-		private void addDtoToPackage(String packageName, LType newDto,
-				LDtoModel lDtoModel, String entityPackage) {
+		private void addDtoToPackage(String packageName, LType newDto, LDtoModel lDtoModel, LType wrappedType) {
+
+			XImportSection section = lDtoModel.getImportSection();
+			if (section == null) {
+				section = XtypeFactory.eINSTANCE.createXImportSection();
+				lDtoModel.setImportSection(section);
+			}
 
 			Optional<LTypedPackage> optPkg = lDtoModel.getPackages().stream()
 					.filter(p -> p.getName().equals(packageName)).findFirst();
@@ -892,11 +871,14 @@
 				lDtoModel.getPackages().add(pkg);
 			}
 
-			// check if entityPackage is imported
-			if (!containsImport(pkg, entityPackage + ".*")) {
-				LImport lImport = OSBPTypesFactory.eINSTANCE.createLImport();
-				lImport.setImportedNamespace(entityPackage + ".*");
-				pkg.getImports().add(lImport);
+			String typeName = entityNameProvider.getFullyQualifiedName(wrappedType).toString();
+
+			// check if typeName is imported
+			if (!containsImport(lDtoModel, typeName)) {
+				OXImportDeclaration lImport = OXtypeFactory.eINSTANCE.createOXImportDeclaration();
+				lImport.setFqnImport(true);
+				lImport.setImportedFullyQualifiedName(typeName);
+				section.getImportDeclarations().add(lImport);
 			}
 
 			pkg.getTypes().add(newDto);
@@ -905,17 +887,23 @@
 		/**
 		 * Contains import.
 		 *
-		 * @param pkg
+		 * @param model
 		 *            the pkg
 		 * @param entityPackageImport
 		 *            the entity package import
 		 * @return true, if successful
 		 */
-		private boolean containsImport(LTypedPackage pkg,
-				String entityPackageImport) {
-			for (LImport lImport : pkg.getImports()) {
-				if (lImport.getImportedNamespace().equals(entityPackageImport)) {
-					return true;
+		private boolean containsImport(LDtoModel model, String typeFqn) {
+			if (model.getImportSection() == null) {
+				return false;
+			}
+
+			for (XImportDeclaration lImport : model.getImportSection().getImportDeclarations()) {
+				OXImportDeclaration decl = (OXImportDeclaration) lImport;
+				if (decl.isFqnImport()) {
+					if (decl.getImportedFullyQualifiedName().equals(typeFqn.toString())) {
+						return true;
+					}
 				}
 			}
 			return false;
@@ -965,32 +953,38 @@
 
 				// also add features from supertype, if dto does not
 				// extend any dto.
-				List<LEntityFeature> features = lDto.getSuperType() == null ? currentEntity
-						.getAllFeatures() : currentEntity.getFeatures();
+				List<LEntityFeature> features = lDto.getSuperType() == null ? currentEntity.getAllFeatures()
+						: currentEntity.getFeatures();
 				for (LEntityFeature lEntityFeature : features) {
 					if (lEntityFeature instanceof LEntityAttribute) {
-						LDtoInheritedAttribute lNewAtt = OSBPDtoFactory.eINSTANCE
-								.createLDtoInheritedAttribute();
+						LDtoInheritedAttribute lNewAtt = OSBPDtoFactory.eINSTANCE.createLDtoInheritedAttribute();
 						lNewAtt.setInheritedFeature((LAttribute) lEntityFeature);
-						LDtoFeature lAnnTarget = OSBPDtoFactory.eINSTANCE
-								.createLDtoFeature();
+						LDtoFeature lAnnTarget = OSBPDtoFactory.eINSTANCE.createLDtoFeature();
 						lNewAtt.setAnnotationInfo(lAnnTarget);
+
+						LAttribute att = (LAttribute) lEntityFeature;
+						if (att.getType() instanceof LBean) {
+							// Mapped dto
+							LDto mapToDto = getMapToDto((LEntityAttribute) lEntityFeature, dtos);
+							if (mapToDto == null) {
+								LOGGER.error("No Mapping-DTO could be found for " + lEntityFeature.getEntity());
+								continue;
+							}
+							lNewAtt.setType(mapToDto);
+						}
+
 						lDto.getFeatures().add(lNewAtt);
 					} else if (lEntityFeature instanceof LEntityReference) {
 						// Mapped dto
-						LDto mapToDto = getMapToDto(
-								(LEntityReference) lEntityFeature, dtos);
+						LDto mapToDto = getMapToDto((LEntityReference) lEntityFeature, dtos);
 						if (mapToDto == null) {
-							LOGGER.error("No Mapping-DTO could be found for "
-									+ lEntityFeature.getEntity());
+							LOGGER.error("No Mapping-DTO could be found for " + lEntityFeature.getEntity());
 							continue;
 						}
 
-						LDtoInheritedReference lNewRef = OSBPDtoFactory.eINSTANCE
-								.createLDtoInheritedReference();
+						LDtoInheritedReference lNewRef = OSBPDtoFactory.eINSTANCE.createLDtoInheritedReference();
 						lNewRef.setInheritedFeature((LReference) lEntityFeature);
-						LDtoFeature lAnnTarget = OSBPDtoFactory.eINSTANCE
-								.createLDtoFeature();
+						LDtoFeature lAnnTarget = OSBPDtoFactory.eINSTANCE.createLDtoFeature();
 						lNewRef.setAnnotationInfo(lAnnTarget);
 						lDto.getFeatures().add(lNewRef);
 						lNewRef.setType(mapToDto);
@@ -1003,48 +997,50 @@
 
 				// also add features from supertype, if dto does not
 				// extend any dto.
-				List<LBeanFeature> features = lDto.getSuperType() == null ? currentBean
-						.getAllFeatures() : currentBean.getFeatures();
+				List<LBeanFeature> features = lDto.getSuperType() == null ? currentBean.getAllFeatures()
+						: currentBean.getFeatures();
 				for (LBeanFeature lBeanFeature : features) {
 					if (lBeanFeature instanceof LBeanAttribute) {
-						LDtoInheritedAttribute lNewAtt = OSBPDtoFactory.eINSTANCE
-								.createLDtoInheritedAttribute();
+						LDtoInheritedAttribute lNewAtt = OSBPDtoFactory.eINSTANCE.createLDtoInheritedAttribute();
 						lNewAtt.setInheritedFeature((LAttribute) lBeanFeature);
-						LDtoFeature lAnnTarget = OSBPDtoFactory.eINSTANCE
-								.createLDtoFeature();
+						LDtoFeature lAnnTarget = OSBPDtoFactory.eINSTANCE.createLDtoFeature();
 						lNewAtt.setAnnotationInfo(lAnnTarget);
+
+						LAttribute att = (LAttribute) lBeanFeature;
+						if (att.getType() instanceof LBean) {
+							// Mapped dto
+							LDto mapToDto = getMapToDto((LAttribute) lBeanFeature, dtos);
+							if (mapToDto == null) {
+								LOGGER.error("No Mapping-DTO could be found for " + att.getType());
+								continue;
+							}
+							lNewAtt.setType(mapToDto);
+						}
+
 						lDto.getFeatures().add(lNewAtt);
 					} else if (lBeanFeature instanceof LEntityReference) {
-						LDto mapToDto = getMapToDto(
-								(LEntityReference) lBeanFeature, dtos);
+						LDto mapToDto = getMapToDto((LEntityReference) lBeanFeature, dtos);
 						if (mapToDto == null) {
-							LOGGER.error("No Mapping-DTO could be found for "
-									+ lBeanFeature.getBean());
+							LOGGER.error("No Mapping-DTO could be found for " + lBeanFeature.getBean());
 							continue;
 						}
 
-						LDtoInheritedReference lNewRef = OSBPDtoFactory.eINSTANCE
-								.createLDtoInheritedReference();
+						LDtoInheritedReference lNewRef = OSBPDtoFactory.eINSTANCE.createLDtoInheritedReference();
 						lNewRef.setInheritedFeature((LReference) lBeanFeature);
-						LDtoFeature lAnnTarget = OSBPDtoFactory.eINSTANCE
-								.createLDtoFeature();
+						LDtoFeature lAnnTarget = OSBPDtoFactory.eINSTANCE.createLDtoFeature();
 						lNewRef.setAnnotationInfo(lAnnTarget);
 						lDto.getFeatures().add(lNewRef);
 						lNewRef.setType(mapToDto);
 					} else if (lBeanFeature instanceof LBeanReference) {
-						LDto mapToDto = getMapToDto(
-								(LBeanReference) lBeanFeature, dtos);
+						LDto mapToDto = getMapToDto((LBeanReference) lBeanFeature, dtos);
 						if (mapToDto == null) {
-							LOGGER.error("No Mapping-DTO could be found for "
-									+ lBeanFeature.getBean());
+							LOGGER.error("No Mapping-DTO could be found for " + lBeanFeature.getBean());
 							continue;
 						}
 
-						LDtoInheritedReference lNewRef = OSBPDtoFactory.eINSTANCE
-								.createLDtoInheritedReference();
+						LDtoInheritedReference lNewRef = OSBPDtoFactory.eINSTANCE.createLDtoInheritedReference();
 						lNewRef.setInheritedFeature((LReference) lBeanFeature);
-						LDtoFeature lAnnTarget = OSBPDtoFactory.eINSTANCE
-								.createLDtoFeature();
+						LDtoFeature lAnnTarget = OSBPDtoFactory.eINSTANCE.createLDtoFeature();
 						lNewRef.setAnnotationInfo(lAnnTarget);
 						lDto.getFeatures().add(lNewRef);
 						lNewRef.setType(mapToDto);
@@ -1060,11 +1056,9 @@
 		 *            the l dto
 		 */
 		private void removeAllInheritedFeatures(LDto lDto) {
-			for (Iterator<LDtoFeature> iterator = lDto.getFeatures().iterator(); iterator
-					.hasNext();) {
+			for (Iterator<LDtoFeature> iterator = lDto.getFeatures().iterator(); iterator.hasNext();) {
 				LDtoFeature lFeature = iterator.next();
-				if ((lFeature instanceof LDtoInheritedAttribute)
-						|| (lFeature instanceof LDtoInheritedReference)) {
+				if ((lFeature instanceof LDtoInheritedAttribute) || (lFeature instanceof LDtoInheritedReference)) {
 					iterator.remove();
 				}
 			}
@@ -1079,8 +1073,7 @@
 		 */
 		private XtextResourceSet getProjectResourceSet(URI uri) {
 			IProject dtoProject = null;
-			Iterable<Pair<IStorage, IProject>> pairs = uriStorageMapper
-					.getStorages(uri);
+			Iterable<Pair<IStorage, IProject>> pairs = uriStorageMapper.getStorages(uri);
 			if (pairs.iterator().hasNext()) {
 				dtoProject = pairs.iterator().next().getSecond();
 			}
@@ -1090,8 +1083,7 @@
 				return null;
 			}
 
-			XtextResourceSet resourceSet = (XtextResourceSet) rsProvider
-					.get(dtoProject);
+			XtextResourceSet resourceSet = (XtextResourceSet) rsProvider.get(dtoProject);
 			return resourceSet;
 		}
 
@@ -1125,8 +1117,7 @@
 			List<LType> entities = new ArrayList<LType>();
 			for (LTypedPackage lPkg : lEntityModel.getPackages()) {
 				for (LType lType : lPkg.getTypes()) {
-					if (lType instanceof LEntity || lType instanceof LBean
-							|| lType instanceof LEnum) {
+					if (lType instanceof LEntity || lType instanceof LBean || lType instanceof LEnum) {
 						entities.add(lType);
 					}
 				}
@@ -1167,11 +1158,9 @@
 		 *            the resource set
 		 * @return the list
 		 */
-		private List<IReferenceDescription> findTargetDtoReferences(
-				Set<URI> entityURIs, ResourceSet resourceSet) {
+		private List<IReferenceDescription> findTargetDtoReferences(Set<URI> entityURIs, ResourceSet resourceSet) {
 			final List<IReferenceDescription> targetDtoReferences = new ArrayList<IReferenceDescription>();
-			referenceFinder.findAllReferences(entityURIs,
-					new LocalResourceAccess(resourceSet),
+			referenceFinder.findAllReferences(entityURIs, new LocalResourceAccess(resourceSet),
 					new IAcceptor<IReferenceDescription>() {
 						@Override
 						public void accept(IReferenceDescription t) {
@@ -1211,12 +1200,16 @@
 		 *            the dtos
 		 * @return the map to dto
 		 */
-		private LDto getMapToDto(LEntityReference lEntityFeature,
-				List<LType> dtos) {
+		private LDto getMapToDto(LEntityReference lEntityFeature, List<LType> dtos) {
 			LEntity entity = lEntityFeature.getType();
 			return (LDto) findDtoType(entity, dtos);
 		}
 
+		private LDto getMapToDto(LAttribute lEntityFeature, List<LType> dtos) {
+			LScalarType entity = lEntityFeature.getType();
+			return (LDto) findDtoType(entity, dtos);
+		}
+
 		/**
 		 * Returns the mapped DTO or <code>null</code>.
 		 *
@@ -1252,8 +1245,7 @@
 			// org.eclipse.emf.common.util.URI
 			// .createPlatformResourceURI(file.getFullPath().toString(),
 			// false);
-			XtextResourceSet rs = (XtextResourceSet) rsProvider
-					.get(getProject());
+			XtextResourceSet rs = (XtextResourceSet) rsProvider.get(getProject());
 			Resource resource = rs.getResource(modelURI, true);
 			try {
 				resource.load(null);
@@ -1263,8 +1255,7 @@
 			}
 			A semanticModel = null;
 			if (resource instanceof ISemanticLoadingResource) {
-				semanticModel = (A) ((ISemanticLoadingResource) resource)
-						.getSemanticElement();
+				semanticModel = (A) ((ISemanticLoadingResource) resource).getSemanticElement();
 			} else {
 				semanticModel = (A) resource.getContents().get(0);
 			}
@@ -1334,26 +1325,20 @@
 				// create the proper dto resourceSet to save the dto
 				ResourceSet writeableResourceSet = resourceSets.get(uiModelURI);
 				if (writeableResourceSet == null) {
-					LOGGER.error(
-							"Can not save {} since resource set not available",
-							uiModelURI);
+					LOGGER.error("Can not save {} since resource set not available", uiModelURI);
 					continue;
 				}
 
-				Resource uiModelResource = (Resource) writeableResourceSet
-						.getResource(uiModelURI, true);
+				Resource uiModelResource = (Resource) writeableResourceSet.getResource(uiModelURI, true);
 				// ensures that the inferrer is invoked
 				uiModelResource.getContents();
 				try {
-					Diagnostic diagnostic = Diagnostician.INSTANCE
-							.validate(uiModelResource.getContents().get(0));
+					Diagnostic diagnostic = Diagnostician.INSTANCE.validate(uiModelResource.getContents().get(0));
 					int sev = diagnostic.getSeverity();
 					if (sev <= Diagnostic.WARNING) {
-						uiModelResource.save(SaveOptions.newBuilder().format()
-								.getOptions().toOptionsMap());
+						uiModelResource.save(SaveOptions.newBuilder().format().getOptions().toOptionsMap());
 					} else {
-						LOGGER.error(uiModelResource.getErrors().get(0)
-								.toString());
+						LOGGER.error(uiModelResource.getErrors().get(0).toString());
 					}
 					uiModelResource.unload();
 				} catch (IOException e) {
@@ -1361,8 +1346,7 @@
 				}
 			}
 
-			timeLogger.stop(LOGGER,
-					"Finished OSBPServiceBuilder#buildUiModels in ");
+			timeLogger.stop(LOGGER, "Finished OSBPServiceBuilder#buildUiModels in ");
 		}
 
 		/**
@@ -1378,8 +1362,7 @@
 		private Set<URI> findTargetUiAndDialogModelReferences(
 				Set<URI> dtoJvmTypeURIs, ResourceSet resourceSet) {
 			final Set<URI> targetUiModelReferences = new HashSet<>();
-			referenceFinder.findAllReferences(dtoJvmTypeURIs,
-					new LocalResourceAccess(resourceSet),
+			referenceFinder.findAllReferences(dtoJvmTypeURIs, new LocalResourceAccess(resourceSet),
 					new IAcceptor<IReferenceDescription>() {
 						@Override
 						public void accept(IReferenceDescription t) {
@@ -1403,8 +1386,7 @@
 		 *            the temp l dto model
 		 */
 		public void buildServices(LDtoModel tempLDtoModel) {
-			IXtextUtilService service = CoreUiActivator.getDefault()
-					.getUtilService();
+			IXtextUtilService service = CoreUiActivator.getDefault().getUtilService();
 			if (service == null) {
 				LOGGER.error("Skipping dto build since IXtextUtilService is not available!");
 				return;
@@ -1417,21 +1399,18 @@
 			//
 			// find referencing service model
 			Set<URI> dtoURIs = findDtoURIs(tempLDtoModel);
-			final List<IReferenceDescription> targetServiceReferences = findTargetServiceReferences(
-					dtoURIs, tempLDtoModel.eResource().getResourceSet());
+			final List<IReferenceDescription> targetServiceReferences = findTargetServiceReferences(dtoURIs,
+					tempLDtoModel.eResource().getResourceSet());
 
 			// ------- create the build context -------
-			ServiceEnhancerContext context = createServiceBuildContext(
-					tempLDtoModel, targetServiceReferences);
+			ServiceEnhancerContext context = createServiceBuildContext(tempLDtoModel, targetServiceReferences);
 
 			ISemanticLoadingResource dtoResource = (ISemanticLoadingResource) context.writeableResourceSet
 					.getResource(tempLDtoModel.eResource().getURI(), true);
 
-			List<LType> sourceArtifacts = collectDtos((LDtoModel) dtoResource
-					.getSemanticElement());
+			List<LType> sourceArtifacts = collectDtos((LDtoModel) dtoResource.getSemanticElement());
 
-			List<LType> tempServices = collectServices((LServiceModel) context.serviceResource
-					.getSemanticElement());
+			List<LType> tempServices = collectServices((LServiceModel) context.serviceResource.getSemanticElement());
 
 			List<LType> servicesToPersist = new ArrayList<LType>();
 
@@ -1452,17 +1431,13 @@
 
 					LDTOService lService = findService(lDto, tempServices);
 					if (lService == null) {
-						lService = OSBPServiceFactory.eINSTANCE
-								.createLDTOService();
-						lService.setAnnotationInfo(OSBPServiceFactory.eINSTANCE
-								.createLDTOService());
-						lService.setInjectedServices(OSBPServiceFactory.eINSTANCE
-								.createLInjectedServices());
+						lService = OSBPServiceFactory.eINSTANCE.createLDTOService();
+						lService.setAnnotationInfo(OSBPServiceFactory.eINSTANCE.createLDTOService());
+						lService.setInjectedServices(OSBPServiceFactory.eINSTANCE.createLInjectedServices());
 						tempServices.add(lService);
 					} else {
 						// remove from package for a while
-						LTypedPackage lPkg = (LTypedPackage) lService
-								.eContainer();
+						LTypedPackage lPkg = (LTypedPackage) lService.eContainer();
 						lPkg.getTypes().remove(lService);
 						// collect all touched packages -> They need cleanup
 						// later
@@ -1479,13 +1454,11 @@
 			// on
 			// an dto anymore
 			for (LTypedPackage lPkg : touchedPackages) {
-				for (Iterator<LType> iterator = lPkg.getTypes().iterator(); iterator
-						.hasNext();) {
+				for (Iterator<LType> iterator = lPkg.getTypes().iterator(); iterator.hasNext();) {
 					LType lType = (LType) iterator.next();
 					if (lType instanceof LDTOService) {
 						LDTOService lService = (LDTOService) lType;
-						if (lService.getDto() == null
-								|| lService.getDto().eIsProxy()
+						if (lService.getDto() == null || lService.getDto().eIsProxy()
 								|| !(lService.getDto().getWrappedType() instanceof LEntity)) {
 							iterator.remove();
 						}
@@ -1535,26 +1508,19 @@
 					}
 					serviceNames.add(lService.getName());
 
-					LTypedPackage lSourceTypePkg = (LTypedPackage) lService
-							.getDto().eContainer();
-					addServicesToPackage(getServicePackageName(lSourceTypePkg),
-							lService,
-							(LServiceModel) context.serviceResource
-									.getSemanticElement(),
-							lSourceTypePkg.getName());
+					LTypedPackage lSourceTypePkg = (LTypedPackage) lService.getDto().eContainer();
+					addServicesToPackage(getServicePackageName(lSourceTypePkg), lService,
+							(LServiceModel) context.serviceResource.getSemanticElement(), lService.getDto());
 				}
 
 				try {
 					Diagnostic diagnostic = Diagnostician.INSTANCE
-							.validate(context.serviceResource
-									.getSemanticElement());
+							.validate(context.serviceResource.getSemanticElement());
 					int sev = diagnostic.getSeverity();
 					if (sev <= Diagnostic.WARNING) {
-						context.serviceResource.save(SaveOptions.newBuilder()
-								.format().getOptions().toOptionsMap());
+						context.serviceResource.save(SaveOptions.newBuilder().format().getOptions().toOptionsMap());
 					} else {
-						LOGGER.error(context.serviceResource.getErrors().get(0)
-								.toString());
+						LOGGER.error(context.serviceResource.getErrors().get(0).toString());
 					}
 					context.serviceResource.unload();
 
@@ -1565,8 +1531,7 @@
 					LOGGER.error("{}", e);
 				}
 
-				timeLogger.stop(LOGGER,
-						"Finished OSBPServiceBuilder#buildServices in ");
+				timeLogger.stop(LOGGER, "Finished OSBPServiceBuilder#buildServices in ");
 			}
 		}
 
@@ -1579,8 +1544,7 @@
 		 *            the target service references
 		 * @return the service enhancer context
 		 */
-		private ServiceEnhancerContext createServiceBuildContext(
-				LDtoModel tempLDtoModel,
+		private ServiceEnhancerContext createServiceBuildContext(LDtoModel tempLDtoModel,
 				final List<IReferenceDescription> targetServiceReferences) {
 			ServiceEnhancerContext context = new ServiceEnhancerContext();
 			if (!targetServiceReferences.isEmpty()) {
@@ -1591,25 +1555,19 @@
 				//
 
 				// access entity resource
-				ISemanticLoadingResource tempDtoResource = (ISemanticLoadingResource) tempLDtoModel
-						.eResource();
-				ResourceSet readonlyResourceSet = tempDtoResource
-						.getResourceSet();
+				ISemanticLoadingResource tempDtoResource = (ISemanticLoadingResource) tempLDtoModel.eResource();
+				ResourceSet readonlyResourceSet = tempDtoResource.getResourceSet();
 
 				// access dto resource based on entityResourceSet
-				IReferenceDescription firstDesc = targetServiceReferences
-						.get(0);
-				LService tempService = (LService) readonlyResourceSet
-						.getEObject(firstDesc.getSourceEObjectUri(), true);
+				IReferenceDescription firstDesc = targetServiceReferences.get(0);
+				LService tempService = (LService) readonlyResourceSet.getEObject(firstDesc.getSourceEObjectUri(), true);
 
 				// create the proper dto resourceSet to save the dto
-				context.writeableResourceSet = getProjectResourceSet(EcoreUtil
-						.getURI(tempService));
+				context.writeableResourceSet = getProjectResourceSet(EcoreUtil.getURI(tempService));
 
 				// load the dtoResource based on the dto resourceSet
 				context.serviceResource = (ISemanticLoadingResource) context.writeableResourceSet
-						.getResource(EcoreUtil.getURI(tempService)
-								.trimFragment(), true);
+						.getResource(EcoreUtil.getURI(tempService).trimFragment(), true);
 			} else {
 				URI dtoURI = EcoreUtil.getURI(tempLDtoModel);
 				// create the proper dto resourceSet to save the dto
@@ -1630,24 +1588,20 @@
 					// now create a dtoResource
 
 					serviceResourcePath = org.eclipse.osbp.dsl.semantic.service.util.NamingConventionsUtil
-							.toServicePackage(dtoURI.path().replace(
-									"/resource", ""));
+							.toServicePackage(dtoURI.path().replace("/resource", ""));
 				}
 
-				URI serviceModelURI = URI.createPlatformResourceURI(
-						serviceResourcePath, true);
+				URI serviceModelURI = URI.createPlatformResourceURI(serviceResourcePath, true);
 				context.serviceResource = (ISemanticLoadingResource) context.writeableResourceSet
 						.createResource(serviceModelURI);
-				context.serviceResource.getContents().add(
-						OSBPServiceFactory.eINSTANCE.createLServiceModel());
+				context.serviceResource.getContents().add(OSBPServiceFactory.eINSTANCE.createLServiceModel());
 			}
 			return context;
 		}
 
 		private IResource findServiceFile(URI entityURI) {
-			String dtoFileName = entityURI.path()
-					.substring(entityURI.path().lastIndexOf("/") + 1)
-					.replace(".dto", ".service");
+			String dtoFileName = entityURI.path().substring(entityURI.path().lastIndexOf("/") + 1).replace(".dto",
+					".service");
 
 			IResource[] temp = new IResource[1];
 			try {
@@ -1659,8 +1613,7 @@
 							}
 							return true;
 						} else if (res instanceof IFolder) {
-							if (res.getName().equals("bin")
-									|| res.getName().equals("target")) {
+							if (res.getName().equals("bin") || res.getName().equals("target")) {
 								return false;
 							}
 							return true;
@@ -1722,11 +1675,17 @@
 		 * @param dtoPackage
 		 *            the dto package
 		 */
-		private void addServicesToPackage(String packageName,
-				LService newService, LServiceModel lModel, String dtoPackage) {
+		private void addServicesToPackage(String packageName, LService newService, LServiceModel lModel,
+				LType dtoType) {
 
-			Optional<LTypedPackage> optPkg = lModel.getPackages().stream()
-					.filter(p -> p.getName().equals(packageName)).findFirst();
+			XImportSection section = lModel.getImportSection();
+			if (section == null) {
+				section = XtypeFactory.eINSTANCE.createXImportSection();
+				lModel.setImportSection(section);
+			}
+
+			Optional<LTypedPackage> optPkg = lModel.getPackages().stream().filter(p -> p.getName().equals(packageName))
+					.findFirst();
 			LTypedPackage pkg = null;
 			if (optPkg.isPresent()) {
 				pkg = optPkg.get();
@@ -1737,11 +1696,14 @@
 				lModel.getPackages().add(pkg);
 			}
 
+			String typeName = dtoNameProvider.getFullyQualifiedName(dtoType).toString();
+
 			// check if entityPackage is imported
-			if (!containsImport(pkg, dtoPackage + ".*")) {
-				LImport lImport = OSBPTypesFactory.eINSTANCE.createLImport();
-				lImport.setImportedNamespace(dtoPackage + ".*");
-				pkg.getImports().add(lImport);
+			if (!containsImport(lModel, typeName)) {
+				OXImportDeclaration lImport = OXtypeFactory.eINSTANCE.createOXImportDeclaration();
+				lImport.setFqnImport(true);
+				lImport.setImportedFullyQualifiedName(typeName);
+				section.getImportDeclarations().add(lImport);
 			}
 
 			pkg.getTypes().add(newService);
@@ -1750,17 +1712,23 @@
 		/**
 		 * Contains import.
 		 *
-		 * @param pkg
+		 * @param model
 		 *            the pkg
 		 * @param entityPackageImport
 		 *            the entity package import
 		 * @return true, if successful
 		 */
-		private boolean containsImport(LTypedPackage pkg,
-				String entityPackageImport) {
-			for (LImport lImport : pkg.getImports()) {
-				if (lImport.getImportedNamespace().equals(entityPackageImport)) {
-					return true;
+		private boolean containsImport(LServiceModel model, String typeFqn) {
+			if (model.getImportSection() == null) {
+				return false;
+			}
+
+			for (XImportDeclaration lImport : model.getImportSection().getImportDeclarations()) {
+				OXImportDeclaration decl = (OXImportDeclaration) lImport;
+				if (decl.isFqnImport()) {
+					if (decl.getImportedFullyQualifiedName().equals(typeFqn.toString())) {
+						return true;
+					}
 				}
 			}
 			return false;
@@ -1774,8 +1742,7 @@
 		 * @return the service name
 		 */
 		private String getServiceName(LDto lType) {
-			return org.eclipse.osbp.dsl.semantic.service.util.NamingConventionsUtil
-					.toServiceName(lType);
+			return org.eclipse.osbp.dsl.semantic.service.util.NamingConventionsUtil.toServiceName(lType);
 		}
 
 		/**
@@ -1787,8 +1754,7 @@
 		 */
 		private XtextResourceSet getProjectResourceSet(URI uri) {
 			IProject dtoProject = null;
-			Iterable<Pair<IStorage, IProject>> pairs = uriStorageMapper
-					.getStorages(uri);
+			Iterable<Pair<IStorage, IProject>> pairs = uriStorageMapper.getStorages(uri);
 			if (pairs.iterator().hasNext()) {
 				dtoProject = pairs.iterator().next().getSecond();
 			}
@@ -1798,8 +1764,7 @@
 				return null;
 			}
 
-			XtextResourceSet resourceSet = (XtextResourceSet) rsProvider
-					.get(dtoProject);
+			XtextResourceSet resourceSet = (XtextResourceSet) rsProvider.get(dtoProject);
 			return resourceSet;
 		}
 
@@ -1811,14 +1776,12 @@
 		 *            the uris
 		 * @return the project resource set map
 		 */
-		private Map<URI, XtextResourceSet> getProjectResourceSetMap(
-				Set<URI> uris) {
+		private Map<URI, XtextResourceSet> getProjectResourceSetMap(Set<URI> uris) {
 			IProject project = null;
 			Map<IProject, XtextResourceSet> byProject = new HashMap<>();
 			Map<URI, XtextResourceSet> result = new HashMap<>();
 			for (URI uri : uris) {
-				Iterable<Pair<IStorage, IProject>> pairs = uriStorageMapper
-						.getStorages(uri);
+				Iterable<Pair<IStorage, IProject>> pairs = uriStorageMapper.getStorages(uri);
 				if (pairs.iterator().hasNext()) {
 					project = pairs.iterator().next().getSecond();
 				}
@@ -1832,8 +1795,7 @@
 					// same projects use shared resource set
 					result.put(uri, byProject.get(project));
 				} else {
-					XtextResourceSet resourceSet = (XtextResourceSet) rsProvider
-							.get(project);
+					XtextResourceSet resourceSet = (XtextResourceSet) rsProvider.get(project);
 					byProject.put(project, resourceSet);
 					result.put(uri, resourceSet);
 				}
@@ -1871,15 +1833,12 @@
 		private Set<URI> findDtoJvmTypeURIs(LDtoModel lDtoModel) {
 			Set<URI> dtoURIs = new HashSet<URI>();
 
-			IXtextUtilService service = CoreUiActivator.getDefault()
-					.getUtilService();
+			IXtextUtilService service = CoreUiActivator.getDefault().getUtilService();
 			for (LTypedPackage lPkg : lDtoModel.getPackages()) {
 				for (LType lType : lPkg.getTypes()) {
 					if (lType instanceof LDto) {
-						for (IEObjectDescription desc : service
-								.getEObjectDescriptions(
-										TypesPackage.Literals.JVM_TYPE,
-										toFqn(lType))) {
+						for (IEObjectDescription desc : service.getEObjectDescriptions(TypesPackage.Literals.JVM_TYPE,
+								toFqn(lType))) {
 							dtoURIs.add(desc.getEObjectURI());
 						}
 					}
@@ -1950,18 +1909,17 @@
 		 *            the resource set
 		 * @return the list
 		 */
-		private List<IReferenceDescription> findTargetServiceReferences(
-				Set<URI> dtoURIs, ResourceSet resourceSet) {
+		private List<IReferenceDescription> findTargetServiceReferences(Set<URI> dtoURIs, ResourceSet resourceSet) {
 			final List<IReferenceDescription> targetServiceReferences = new ArrayList<IReferenceDescription>();
-			referenceFinder.findAllReferences(dtoURIs, new LocalResourceAccess(
-					resourceSet), new IAcceptor<IReferenceDescription>() {
-				@Override
-				public void accept(IReferenceDescription t) {
-					if (t.getEReference() == OSBPServicePackage.Literals.LDTO_SERVICE__DTO) {
-						targetServiceReferences.add(t);
-					}
-				}
-			}, null);
+			referenceFinder.findAllReferences(dtoURIs, new LocalResourceAccess(resourceSet),
+					new IAcceptor<IReferenceDescription>() {
+						@Override
+						public void accept(IReferenceDescription t) {
+							if (t.getEReference() == OSBPServicePackage.Literals.LDTO_SERVICE__DTO) {
+								targetServiceReferences.add(t);
+							}
+						}
+					}, null);
 			return targetServiceReferences;
 		}
 
@@ -1976,8 +1934,7 @@
 		 */
 		@SuppressWarnings("unchecked")
 		private <A extends EObject> A loadSemanticModel(URI modelURI) {
-			XtextResourceSet rs = (XtextResourceSet) rsProvider
-					.get(getProject());
+			XtextResourceSet rs = (XtextResourceSet) rsProvider.get(getProject());
 			Resource resource = rs.getResource(modelURI, true);
 			try {
 				resource.load(null);
@@ -1987,8 +1944,7 @@
 			}
 			A semanticModel = null;
 			if (resource instanceof ISemanticLoadingResource) {
-				semanticModel = (A) ((ISemanticLoadingResource) resource)
-						.getSemanticElement();
+				semanticModel = (A) ((ISemanticLoadingResource) resource).getSemanticElement();
 			} else {
 				semanticModel = (A) resource.getContents().get(0);
 			}
@@ -2065,8 +2021,7 @@
 	/**
 	 * The Class LocalResourceAccess.
 	 */
-	public static class LocalResourceAccess implements
-			IReferenceFinder.ILocalResourceAccess {
+	public static class LocalResourceAccess implements IReferenceFinder.ILocalResourceAccess {
 
 		/** The resource set. */
 		private ResourceSet resourceSet;
diff --git a/org.eclipse.osbp.ide.core/.classpath b/org.eclipse.osbp.ide.core/.classpath
new file mode 100644
index 0000000..b9a5b1e
--- /dev/null
+++ b/org.eclipse.osbp.ide.core/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.ide.core/.gitignore b/org.eclipse.osbp.ide.core/.gitignore
new file mode 100644
index 0000000..7c9106d
--- /dev/null
+++ b/org.eclipse.osbp.ide.core/.gitignore
@@ -0,0 +1,3 @@
+/target/
+/bin/
+.DS_Store
diff --git a/org.eclipse.osbp.ide.core/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.ide.core/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.ide.core/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.ide.core/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.ide.core/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/org.eclipse.osbp.ide.core/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.osbp.ide.core/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.ide.core/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.ide.core/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.ide.core/.settings/org.eclipse.pde.core.prefs b/org.eclipse.osbp.ide.core/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..f29e940
--- /dev/null
+++ b/org.eclipse.osbp.ide.core/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/org.eclipse.osbp.ide.core/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.ide.core/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..f6a7c78
--- /dev/null
+++ b/org.eclipse.osbp.ide.core/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.ide.core/src/license/THIRD-PARTY.properties b/org.eclipse.osbp.ide.core/src/license/THIRD-PARTY.properties
new file mode 100644
index 0000000..0f7af5d
--- /dev/null
+++ b/org.eclipse.osbp.ide.core/src/license/THIRD-PARTY.properties
@@ -0,0 +1,42 @@
+# Generated by org.codehaus.mojo.license.AddThirdPartyMojo
+#-------------------------------------------------------------------------------
+# Already used licenses in project :
+# - Apache License
+# - Apache License 2.0
+# - Apache License Version 2.0
+# - Apache License, Version 2.0
+# - Apache Software License - Version 2.0
+# - BSD License
+# - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+#										(CDDL)
+#										Version
+#										1.0
+# - Commercial Vaadin Add-On License version 3.0
+# - Common Development and Distribution license - v1.0.1
+# - Eclipse Public License - Version 1.0
+# - Eclipse Public License v1.0
+# - GNU LGPL 3
+# - GNU Lesser General Public License
+# - ICU License
+# - Indiana University Extreme! Lab Software
+#										License,
+#										vesion 1.1.1
+# - Lesser General Public License (LGPL)
+# - Lesser General Public License (LPGL)
+# - Lesser General Public License (LPGL) v 2.1
+# - MIT License
+# - The Apache Software License, Version 2.0
+# - The MIT License
+# - The SAX License
+# - The W3C License
+# - The W3C Software License
+# - W3C Software Copyright Notice and License
+#-------------------------------------------------------------------------------
+# Please fill the missing licenses for dependencies :
+#
+#
+#Thu Aug 28 14:08:37 CEST 2014
+ant--ant-launcher--1.6.5=Apache License Version 2.0
+commons-collections--commons-collections--3.1=Apache License Version 2.0
+javax.servlet--servlet-api--2.5=Common Development and Distribution license - v1.0.1
+org.jdesktop--swing-worker--1.1=Lesser General Public License (LGPL)
diff --git a/org.eclipse.osbp.ide.feature.headless/.gitignore b/org.eclipse.osbp.ide.feature.headless/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.ide.feature.headless/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.ide.feature.headless/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.ide.feature.headless/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.ide.feature.headless/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.ide.feature.headless/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.ide.feature.headless/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.ide.feature.headless/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.ide.feature.headless/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.ide.feature.headless/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..f6a7c78
--- /dev/null
+++ b/org.eclipse.osbp.ide.feature.headless/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.ide.feature.headless/feature.xml b/org.eclipse.osbp.ide.feature.headless/feature.xml
index 3972901..457a6cc 100644
--- a/org.eclipse.osbp.ide.feature.headless/feature.xml
+++ b/org.eclipse.osbp.ide.feature.headless/feature.xml
@@ -14,7 +14,8 @@
         id="org.eclipse.osbp.ide.feature.headless"
         label="%featureName"
         version="0.9.0.qualifier"
-        provider-name="%providerName">
+        provider-name="%providerName"
+		plugin="org.eclipse.osbp.ide.core">
         
     <description>
         %description
diff --git a/org.eclipse.osbp.ide.feature.tools/.gitignore b/org.eclipse.osbp.ide.feature.tools/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.ide.feature.tools/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.ide.feature.tools/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.ide.feature.tools/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.ide.feature.tools/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.ide.feature.tools/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.ide.feature.tools/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.ide.feature.tools/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.ide.feature.tools/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.ide.feature.tools/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..f6a7c78
--- /dev/null
+++ b/org.eclipse.osbp.ide.feature.tools/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.ide.feature.tools/feature.xml b/org.eclipse.osbp.ide.feature.tools/feature.xml
index 8bc43a3..5d5355f 100644
--- a/org.eclipse.osbp.ide.feature.tools/feature.xml
+++ b/org.eclipse.osbp.ide.feature.tools/feature.xml
@@ -14,7 +14,8 @@
         id="org.eclipse.osbp.ide.feature.tools"
         label="%featureName"
         version="0.9.0.qualifier"
-        provider-name="%providerName">
+        provider-name="%providerName"
+		plugin="org.eclipse.osbp.ide.tools.developer">
         
     <description>
         %description
diff --git a/org.eclipse.osbp.ide.feature.ui/.gitignore b/org.eclipse.osbp.ide.feature.ui/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.ide.feature.ui/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.ide.feature.ui/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.ide.feature.ui/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.ide.feature.ui/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.ide.feature.ui/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.ide.feature.ui/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.ide.feature.ui/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.ide.feature.ui/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.ide.feature.ui/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..f6a7c78
--- /dev/null
+++ b/org.eclipse.osbp.ide.feature.ui/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.ide.feature.ui/feature.xml b/org.eclipse.osbp.ide.feature.ui/feature.xml
index b743200..ab41e71 100644
--- a/org.eclipse.osbp.ide.feature.ui/feature.xml
+++ b/org.eclipse.osbp.ide.feature.ui/feature.xml
@@ -14,7 +14,8 @@
         id="org.eclipse.osbp.ide.feature.ui"
         label="%featureName"
         version="0.9.0.qualifier"
-        provider-name="%providerName">
+        provider-name="%providerName"
+		plugin="org.eclipse.osbp.ide.core.ui">
         
     <description>
         %description
@@ -46,4 +47,4 @@
         version="0.0.0"
         unpack="false"/>
         
-</feature>
+</feature>
\ No newline at end of file
diff --git a/org.eclipse.osbp.ide.tools.developer/.classpath b/org.eclipse.osbp.ide.tools.developer/.classpath
new file mode 100644
index 0000000..b9a5b1e
--- /dev/null
+++ b/org.eclipse.osbp.ide.tools.developer/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.ide.tools.developer/.gitignore b/org.eclipse.osbp.ide.tools.developer/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.ide.tools.developer/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.ide.tools.developer/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.ide.tools.developer/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.ide.tools.developer/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.ide.tools.developer/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.ide.tools.developer/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/org.eclipse.osbp.ide.tools.developer/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.osbp.ide.tools.developer/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.ide.tools.developer/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.ide.tools.developer/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.ide.tools.developer/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.ide.tools.developer/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..f6a7c78
--- /dev/null
+++ b/org.eclipse.osbp.ide.tools.developer/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.ide.tools.developer/src/license/THIRD-PARTY.properties b/org.eclipse.osbp.ide.tools.developer/src/license/THIRD-PARTY.properties
new file mode 100644
index 0000000..84841b5
--- /dev/null
+++ b/org.eclipse.osbp.ide.tools.developer/src/license/THIRD-PARTY.properties
@@ -0,0 +1,41 @@
+# Generated by org.codehaus.mojo.license.AddThirdPartyMojo
+#-------------------------------------------------------------------------------
+# Already used licenses in project :
+# - Apache License
+# - Apache License 2.0
+# - Apache License Version 2.0
+# - Apache License, Version 2.0
+# - Apache Software License - Version 2.0
+# - BSD License
+# - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+#										(CDDL)
+#										Version
+#										1.0
+# - Commercial Vaadin Add-On License version 3.0
+# - Eclipse Public License - Version 1.0
+# - Eclipse Public License v1.0
+# - GNU LGPL 3
+# - GNU Lesser General Public License
+# - ICU License
+# - Indiana University Extreme! Lab Software
+#										License,
+#										vesion 1.1.1
+# - JSON License
+# - Lesser General Public License (LPGL)
+# - Lesser General Public License (LPGL) v 2.1
+# - MIT License
+# - The Apache Software License, Version 2.0
+# - The MIT License
+# - The SAX License
+# - The W3C License
+# - The W3C Software License
+# - W3C Software Copyright Notice and License
+#-------------------------------------------------------------------------------
+# Please fill the missing licenses for dependencies :
+#
+#
+#Wed Feb 25 15:17:21 CET 2015
+ant--ant-launcher--1.6.5=
+commons-collections--commons-collections--3.1=
+javax.servlet--servlet-api--2.5=
+org.jdesktop--swing-worker--1.1=
diff --git a/org.eclipse.osbp.ide.tools.p2.mirror.product/.classpath b/org.eclipse.osbp.ide.tools.p2.mirror.product/.classpath
new file mode 100644
index 0000000..b9a5b1e
--- /dev/null
+++ b/org.eclipse.osbp.ide.tools.p2.mirror.product/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.ide.tools.p2.mirror.product/.gitignore b/org.eclipse.osbp.ide.tools.p2.mirror.product/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.ide.tools.p2.mirror.product/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.ide.tools.p2.mirror.product/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.ide.tools.p2.mirror.product/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.ide.tools.p2.mirror.product/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.ide.tools.p2.mirror.product/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.ide.tools.p2.mirror.product/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/org.eclipse.osbp.ide.tools.p2.mirror.product/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.osbp.ide.tools.p2.mirror.product/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.ide.tools.p2.mirror.product/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.ide.tools.p2.mirror.product/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.ide.tools.p2.mirror.product/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.ide.tools.p2.mirror.product/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..f6a7c78
--- /dev/null
+++ b/org.eclipse.osbp.ide.tools.p2.mirror.product/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.ide.tools.p2.mirror/.classpath b/org.eclipse.osbp.ide.tools.p2.mirror/.classpath
new file mode 100644
index 0000000..b9a5b1e
--- /dev/null
+++ b/org.eclipse.osbp.ide.tools.p2.mirror/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.ide.tools.p2.mirror/.gitignore b/org.eclipse.osbp.ide.tools.p2.mirror/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.ide.tools.p2.mirror/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.ide.tools.p2.mirror/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.ide.tools.p2.mirror/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.ide.tools.p2.mirror/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.ide.tools.p2.mirror/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.ide.tools.p2.mirror/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/org.eclipse.osbp.ide.tools.p2.mirror/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.osbp.ide.tools.p2.mirror/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.ide.tools.p2.mirror/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.ide.tools.p2.mirror/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.ide.tools.p2.mirror/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.ide.tools.p2.mirror/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..f6a7c78
--- /dev/null
+++ b/org.eclipse.osbp.ide.tools.p2.mirror/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/pom.xml b/pom.xml
index e2e3c5d..02fae28 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,7 +40,6 @@
 
     <properties>
         <osbp.gitrepo.name>${project.groupId}</osbp.gitrepo.name>
-        <xtext.version>2.7.3</xtext.version>
     </properties>
 
     <modules>
