diff --git a/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/.classpath b/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/.classpath
index 213e409..22f3064 100644
--- a/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/.classpath
+++ b/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/.classpath
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="xtend-gen"/>
 	<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="output" path="bin"/>
diff --git a/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/META-INF/MANIFEST.MF
index cc5b33d..530bbff 100644
--- a/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/META-INF/MANIFEST.MF
@@ -1,8 +1,8 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: org.eclipse.qvtd.doc.minioclcs.xtext.tests
-Bundle-Vendor: My Company
-Bundle-Version: 1.0.0.qualifier
+Bundle-Vendor: MiniOCL Example - Xtext Tests
+Bundle-Version: 0.14.0.qualifier
 Bundle-SymbolicName: org.eclipse.qvtd.doc.minioclcs.xtext.tests; singleton:=true
 Bundle-ActivationPolicy: lazy
 Require-Bundle: org.eclipse.qvtd.doc.minioclcs.xtext,
diff --git a/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/MiniOCLCSParsingTest.launch b/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/MiniOCLCSParsingTest.launch
index b7ce043..ee80f97 100644
--- a/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/MiniOCLCSParsingTest.launch
+++ b/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/MiniOCLCSParsingTest.launch
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/org.eclipse.qvtd.doc.minioclcs.xtext.tests"/>
+<listEntry value="/org.eclipse.qvtd.doc.minioclcs.xtext.tests/src/org/eclipse/qvtd/doc/minioclcs/xtext/tests/MiniOCLCSParsingTest.java"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="4"/>
+<listEntry value="1"/>
 </listAttribute>
 <stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
 <booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
diff --git a/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/build.properties b/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/build.properties
index 914b09c..6ea40d9 100644
--- a/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/build.properties
+++ b/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/build.properties
@@ -1,5 +1,3 @@
-source.. = src/,\
-           src-gen/,\
-           xtend-gen/
+source.. = src/
 bin.includes = .,\
                META-INF/
diff --git a/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/src/org/eclipse/qvtd/doc/minioclcs/xtext/tests/MiniOCLCSParsingTest.java b/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/src/org/eclipse/qvtd/doc/minioclcs/xtext/tests/MiniOCLCSParsingTest.java
new file mode 100644
index 0000000..58ad03f
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/src/org/eclipse/qvtd/doc/minioclcs/xtext/tests/MiniOCLCSParsingTest.java
@@ -0,0 +1,45 @@
+/*
+ * generated by Xtext 2.10.0-SNAPSHOT
+ */
+package org.eclipse.qvtd.doc.minioclcs.xtext.tests;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.qvtd.doc.MiniOCLCSStandaloneSetup;
+import org.eclipse.qvtd.doc.minioclcs.RootCS;
+import org.eclipse.qvtd.xtext.qvtbase.tests.LoadTestCase;
+import org.junit.Before;
+import org.junit.Test;
+
+public class MiniOCLCSParsingTest extends LoadTestCase {
+	
+	@Before
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		MiniOCLCSStandaloneSetup.doSetup();
+	}
+	
+	
+	protected RootCS parse(String fileName) {
+		URI fileURI = getProjectFileURI(fileName);
+		ResourceSet rSet = new ResourceSetImpl();
+		Resource resoure = rSet.getResource(fileURI, true);
+		return (RootCS) resoure.getContents().get(0); 
+	}
+	
+	@Test 
+	public void testSimpleMiniOCL_PackagesDef() {
+		RootCS result = parse("models/simple_packages.mocl");
+		assertNotNull(result);
+	}
+
+	@Test 
+	public void testSimpleMiniOCL_Invariant() {
+		RootCS result = parse("models/simple_invariants.mocl");
+		assertNotNull(result);
+	}
+
+}
diff --git a/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/src/org/eclipse/qvtd/doc/minioclcs/xtext/tests/MiniOCLCSParsingTest.xtend b/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/src/org/eclipse/qvtd/doc/minioclcs/xtext/tests/MiniOCLCSParsingTest.xtend
deleted file mode 100644
index 8998933..0000000
--- a/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/src/org/eclipse/qvtd/doc/minioclcs/xtext/tests/MiniOCLCSParsingTest.xtend
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * generated by Xtext 2.10.0-SNAPSHOT
- */
-package org.eclipse.qvtd.doc.minioclcs.xtext.tests
-
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl
-import org.eclipse.qvtd.doc.MiniOCLCSStandaloneSetup
-import org.eclipse.qvtd.doc.minioclcs.RootCS
-import org.eclipse.qvtd.xtext.qvtbase.tests.LoadTestCase
-import org.junit.Assert
-import org.junit.Test
-import org.junit.Before
-
-class MiniOCLCSParsingTest extends LoadTestCase {
-
-	
-	@Before
-	override protected setUp() throws Exception {
-		super.setUp();
-		MiniOCLCSStandaloneSetup.doSetup();
-	}
-	
-	
-	def protected parse(String fileName) {
-		val fileURI = getProjectFileURI(fileName);
-		val rSet = new ResourceSetImpl();
-		val resoure = rSet.getResource(fileURI, true);
-		return resoure.contents.get(0) as RootCS; 
-	}
-	
-	@Test 
-	def void testSimpleMiniOCL_PackagesDef() {
-		val result = parse('models/simple_packages.mocl');
-		Assert.assertNotNull(result)
-	}
-
-	@Test 
-	def void testSimpleMiniOCL_Invariant() {
-		val result = parse('models/simple_invariants.mocl');
-		Assert.assertNotNull(result)
-	}
-
-}
diff --git a/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/xtend-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tests/.gitignore b/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/xtend-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tests/.gitignore
deleted file mode 100644
index 1b24eec..0000000
--- a/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/xtend-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tests/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/.MiniOCLCSParsingTest.java._trace
-/.MiniOCLCSParsingTest.xtendbin
diff --git a/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/xtend-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tests/MiniOCLCSParsingTest.java b/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/xtend-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tests/MiniOCLCSParsingTest.java
deleted file mode 100644
index c5bd994..0000000
--- a/tests/org.eclipse.qvtd.doc.minioclcs.xtext.tests/xtend-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tests/MiniOCLCSParsingTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * generated by Xtext 2.10.0-SNAPSHOT
- */
-package org.eclipse.qvtd.doc.minioclcs.xtext.tests;
-
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.qvtd.doc.MiniOCLCSStandaloneSetup;
-import org.eclipse.qvtd.doc.minioclcs.RootCS;
-import org.eclipse.qvtd.xtext.qvtbase.tests.LoadTestCase;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-@SuppressWarnings("all")
-public class MiniOCLCSParsingTest extends LoadTestCase {
-  @Before
-  @Override
-  protected void setUp() throws Exception {
-    super.setUp();
-    MiniOCLCSStandaloneSetup.doSetup();
-  }
-  
-  protected RootCS parse(final String fileName) {
-    final URI fileURI = this.getProjectFileURI(fileName);
-    final ResourceSetImpl rSet = new ResourceSetImpl();
-    final Resource resoure = rSet.getResource(fileURI, true);
-    EList<EObject> _contents = resoure.getContents();
-    EObject _get = _contents.get(0);
-    return ((RootCS) _get);
-  }
-  
-  @Test
-  public void testSimpleMiniOCL_PackagesDef() {
-    final RootCS result = this.parse("models/simple_packages.mocl");
-    Assert.assertNotNull(result);
-  }
-  
-  @Test
-  public void testSimpleMiniOCL_Invariant() {
-    final RootCS result = this.parse("models/simple_invariants.mocl");
-    Assert.assertNotNull(result);
-  }
-}
