diff --git a/tests/org.eclipse.egf.core.test.pattern/fc/jet_tags.fcore b/tests/org.eclipse.egf.core.test.pattern/fc/jet_tags.fcore
index 9c4e4c3..7441b27 100644
--- a/tests/org.eclipse.egf.core.test.pattern/fc/jet_tags.fcore
+++ b/tests/org.eclipse.egf.core.test.pattern/fc/jet_tags.fcore
@@ -1,76 +1,73 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<fcore:FactoryComponent xmi:version="2.0"
-    xmlns:xmi="http://www.omg.org/XMI" xmlns:fcore="http://www.eclipse.org/egf/1.0.0/fcore"
-    xmlns:fprod="http://www.eclipse.org/egf/1.0.0/fprod" xmlns:ftask="http://www.eclipse.org/egf/1.0.0/ftask"
-    xmlns:javapattern="http://www.eclipse.org/egf/1.0.0/javapattern" xmlns:jetpattern="http://www.eclipse.org/egf/1.0.0/jetpattern"
-    xmlns:pattern="http://www.eclipse.org/egf/1.0.0/pattern" xmi:id="_eCqw4VaPEd-xDMudhFTQKg"
-    name="Jet Tags">
-  <viewpointContainer xmi:id="_g906cFaPEd-xDMudhFTQKg">
-    <viewpoints xmi:type="pattern:PatternViewpoint" xmi:id="_kHI0wFaPEd-xDMudhFTQKg">
-      <libraries xmi:id="_l3pJEFaPEd-xDMudhFTQKg" name="jet_tags">
-        <elements xmi:type="pattern:Pattern" xmi:id="_wF8wIFaPEd-xDMudhFTQKg" description=""
-            name="Caller" headerMethod="#_wF8wIVaPEd-xDMudhFTQKg" footerMethod="#_wF8wJFaPEd-xDMudhFTQKg"
-            initMethod="#_wF8wIlaPEd-xDMudhFTQKg">
-          <methods xmi:id="_wF8wIVaPEd-xDMudhFTQKg" name="header" patternFilePath="templates/pattern._wF8wIFaPEd-xDMudhFTQKg/method._wF8wIVaPEd-xDMudhFTQKg.pt"/>
-          <methods xmi:id="_wF8wIlaPEd-xDMudhFTQKg" name="init" patternFilePath="templates/pattern._wF8wIFaPEd-xDMudhFTQKg/method._wF8wIlaPEd-xDMudhFTQKg.pt"/>
-          <methods xmi:id="_wF8wI1aPEd-xDMudhFTQKg" name="body" patternFilePath="templates/pattern._wF8wIFaPEd-xDMudhFTQKg/method._wF8wI1aPEd-xDMudhFTQKg.pt"/>
-          <methods xmi:id="_wF8wJFaPEd-xDMudhFTQKg" name="footer" patternFilePath="templates/pattern._wF8wIFaPEd-xDMudhFTQKg/method._wF8wJFaPEd-xDMudhFTQKg.pt"/>
-          <orchestration xmi:type="pattern:MethodCall" xmi:id="_YiZ-wFa6Ed-_dcUlU_GyPA"
-              called="#_wF8wI1aPEd-xDMudhFTQKg"/>
-          <nature xmi:type="jetpattern:JetNature" xmi:id="_wF8wJlaPEd-xDMudhFTQKg"
-              name="JET"/>
-          <variables xmi:id="_7tSUwFaREd-oupYL3fDLQg" name="variable" type="java.lang.Object"/>
-          <variables xmi:id="_fWqh0FavEd-_dcUlU_GyPA" name="variable2" type="java.lang.Object"/>
-          <variables xmi:id="_YzCiIFbCEd-8M5d7emTXBQ" name="toInject" type="http://www.eclipse.org/emf/2002/Ecore#//EClass"/>
-        </elements>
-        <elements xmi:type="pattern:Pattern" xmi:id="_0FqG8FaPEd-xDMudhFTQKg" description=" "
-            name="Callee" headerMethod="#_0FqG8VaPEd-xDMudhFTQKg" footerMethod="#_0FqG9FaPEd-xDMudhFTQKg"
-            initMethod="#_0FqG8laPEd-xDMudhFTQKg">
-          <methods xmi:id="_0FqG8VaPEd-xDMudhFTQKg" name="header" patternFilePath="templates/pattern._0FqG8FaPEd-xDMudhFTQKg/method._0FqG8VaPEd-xDMudhFTQKg.pt"/>
-          <methods xmi:id="_0FqG8laPEd-xDMudhFTQKg" name="init" patternFilePath="templates/pattern._0FqG8FaPEd-xDMudhFTQKg/method._0FqG8laPEd-xDMudhFTQKg.pt"/>
-          <methods xmi:id="_0FqG81aPEd-xDMudhFTQKg" name="body" patternFilePath="templates/pattern._0FqG8FaPEd-xDMudhFTQKg/method._0FqG81aPEd-xDMudhFTQKg.pt"/>
-          <methods xmi:id="_0FqG9FaPEd-xDMudhFTQKg" name="footer" patternFilePath="templates/pattern._0FqG8FaPEd-xDMudhFTQKg/method._0FqG9FaPEd-xDMudhFTQKg.pt"/>
-          <orchestration xmi:type="pattern:MethodCall" xmi:id="_ewenMFaREd-oupYL3fDLQg"
-              called="#_0FqG81aPEd-xDMudhFTQKg"/>
-          <parameters xmi:id="_iCIlMFaREd-oupYL3fDLQg" name="parameter" type="java.lang.Object"/>
-          <parameters xmi:id="_qCB4UFavEd-_dcUlU_GyPA" name="parameter2" type="java.lang.Object"/>
-          <nature xmi:type="javapattern:JavaNature" xmi:id="_0FqG9laPEd-xDMudhFTQKg"
-              name="Java"/>
-        </elements>
-        <elements xmi:type="pattern:Pattern" xmi:id="_-d1XsFa7Ed-_dcUlU_GyPA" name="CalleeInjected"
-            headerMethod="#_-d1XsVa7Ed-_dcUlU_GyPA" footerMethod="#_-d1XtFa7Ed-_dcUlU_GyPA"
-            initMethod="#_-d1Xsla7Ed-_dcUlU_GyPA">
-          <methods xmi:id="_-d1XsVa7Ed-_dcUlU_GyPA" name="header" patternFilePath="templates/pattern._-d1XsFa7Ed-_dcUlU_GyPA/method._-d1XsVa7Ed-_dcUlU_GyPA.pt"/>
-          <methods xmi:id="_-d1Xsla7Ed-_dcUlU_GyPA" name="init" patternFilePath="templates/pattern._-d1XsFa7Ed-_dcUlU_GyPA/method._-d1Xsla7Ed-_dcUlU_GyPA.pt"/>
-          <methods xmi:id="_-d1Xs1a7Ed-_dcUlU_GyPA" name="body" patternFilePath="templates/pattern._-d1XsFa7Ed-_dcUlU_GyPA/method._-d1Xs1a7Ed-_dcUlU_GyPA.pt"/>
-          <methods xmi:id="_-d1XtFa7Ed-_dcUlU_GyPA" name="footer" patternFilePath="templates/pattern._-d1XsFa7Ed-_dcUlU_GyPA/method._-d1XtFa7Ed-_dcUlU_GyPA.pt"/>
-          <orchestration xmi:type="pattern:MethodCall" xmi:id="_DtQp8Fa8Ed-_dcUlU_GyPA"
-              called="#_-d1Xs1a7Ed-_dcUlU_GyPA"/>
-          <parameters xmi:id="_AEpkgFa8Ed-_dcUlU_GyPA" name="parameter" type="http://www.eclipse.org/emf/2002/Ecore#//EClass">
-            <query xmi:type="pattern:BasicQuery" xmi:id="_IDUR8FbBEd-8M5d7emTXBQ"
-                extensionId="org.eclipse.egf.pattern.query.EObjectInjectedContextQuery"/>
-          </parameters>
-          <nature xmi:type="javapattern:JavaNature" xmi:id="_-d1Xtla7Ed-_dcUlU_GyPA"
-              name="Java"/>
-        </elements>
-      </libraries>
-    </viewpoints>
-  </viewpointContainer>
-  <orchestration xmi:type="fprod:ProductionPlan" xmi:id="_3uQlUFaPEd-xDMudhFTQKg">
-    <invocations xmi:id="_9MvAMFaPEd-xDMudhFTQKg" invokedActivity="ftask:Task platform:/plugin/org.eclipse.egf.pattern.ftask/Pattern_task.fcore#_XVvo0Be4Ed-DaY2uHNBaQg">
-      <invocationContractContainer xmi:id="_9MvAMVaPEd-xDMudhFTQKg">
-        <invocationContracts xmi:id="_9MvAMlaPEd-xDMudhFTQKg" invokedContract="platform:/plugin/org.eclipse.egf.pattern.ftask/Pattern_task.fcore#_tsP7UBe5Ed-O0P2188kAmA">
-          <type xmi:type="pattern:TypePatternList" xmi:id="_-mS0IFaPEd-xDMudhFTQKg"
-              elements="#_wF8wIFaPEd-xDMudhFTQKg"/>
-        </invocationContracts>
-        <invocationContracts xmi:id="_9MvAM1aPEd-xDMudhFTQKg" invokedContract="platform:/plugin/org.eclipse.egf.pattern.ftask/Pattern_task.fcore#_4ngvABe5Ed-O0P2188kAmA"/>
-        <invocationContracts xmi:id="_9MvANFaPEd-xDMudhFTQKg" invokedContract="platform:/plugin/org.eclipse.egf.pattern.ftask/Pattern_task.fcore#_7-xlwBe5Ed-O0P2188kAmA">
-          <type xmi:type="pattern:TypePatternExecutionReporter" xmi:id="_mgXHMVaVEd-_dcUlU_GyPA"
-              value="org.eclipse.egf.core.test.pattern.JunitConsoleReporter"/>
-        </invocationContracts>
-        <invocationContracts xmi:id="_9MvANVaPEd-xDMudhFTQKg" invokedContract="platform:/plugin/org.eclipse.egf.pattern.ftask/Pattern_task.fcore#_-wgGgBe5Ed-O0P2188kAmA"/>
-        <invocationContracts xmi:id="_9MvANlaPEd-xDMudhFTQKg" invokedContract="platform:/plugin/org.eclipse.egf.pattern.ftask/Pattern_task.fcore#_Y2fXwUhpEd-A7KV9v5yLhw"/>
-      </invocationContractContainer>
-    </invocations>
-  </orchestration>
-</fcore:FactoryComponent>
+<?xml version="1.0" encoding="UTF-8"?>
+<fcore:FactoryComponent xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:fcore="http://www.eclipse.org/egf/1.0.0/fcore"
+    xmlns:fprod="http://www.eclipse.org/egf/1.0.0/fprod" xmlns:ftask="http://www.eclipse.org/egf/1.0.0/ftask"
+    xmlns:javapattern="http://www.eclipse.org/egf/1.0.0/javapattern" xmlns:jetpattern="http://www.eclipse.org/egf/1.0.0/jetpattern"
+    xmlns:pattern="http://www.eclipse.org/egf/1.0.0/pattern" xmi:id="_eCqw4VaPEd-xDMudhFTQKg"
+    name="Jet Tags">
+  <viewpointContainer xmi:id="_g906cFaPEd-xDMudhFTQKg">
+    <viewpoints xmi:type="pattern:PatternViewpoint" xmi:id="_kHI0wFaPEd-xDMudhFTQKg">
+      <libraries xmi:id="_l3pJEFaPEd-xDMudhFTQKg" name="jet_tags">
+        <elements xmi:type="pattern:Pattern" xmi:id="_wF8wIFaPEd-xDMudhFTQKg" description=""
+            name="Caller" headerMethod="#_wF8wIVaPEd-xDMudhFTQKg" footerMethod="#_wF8wJFaPEd-xDMudhFTQKg"
+            initMethod="#_wF8wIlaPEd-xDMudhFTQKg">
+          <methods xmi:id="_wF8wIVaPEd-xDMudhFTQKg" name="header" patternFilePath="templates/pattern._wF8wIFaPEd-xDMudhFTQKg/method._wF8wIVaPEd-xDMudhFTQKg.pt"/>
+          <methods xmi:id="_wF8wIlaPEd-xDMudhFTQKg" name="init" patternFilePath="templates/pattern._wF8wIFaPEd-xDMudhFTQKg/method._wF8wIlaPEd-xDMudhFTQKg.pt"/>
+          <methods xmi:id="_wF8wI1aPEd-xDMudhFTQKg" name="body" patternFilePath="templates/pattern._wF8wIFaPEd-xDMudhFTQKg/method._wF8wI1aPEd-xDMudhFTQKg.pt"/>
+          <methods xmi:id="_wF8wJFaPEd-xDMudhFTQKg" name="footer" patternFilePath="templates/pattern._wF8wIFaPEd-xDMudhFTQKg/method._wF8wJFaPEd-xDMudhFTQKg.pt"/>
+          <orchestration xmi:type="pattern:MethodCall" xmi:id="_YiZ-wFa6Ed-_dcUlU_GyPA"
+              called="#_wF8wI1aPEd-xDMudhFTQKg"/>
+          <nature xmi:type="jetpattern:JetNature" xmi:id="_wF8wJlaPEd-xDMudhFTQKg"
+              name="JET"/>
+          <variables xmi:id="_7tSUwFaREd-oupYL3fDLQg" name="variable" type="java.lang.Object"/>
+          <variables xmi:id="_fWqh0FavEd-_dcUlU_GyPA" name="variable2" type="java.lang.Object"/>
+          <variables xmi:id="_YzCiIFbCEd-8M5d7emTXBQ" name="toInject" type="http://www.eclipse.org/emf/2002/Ecore#//EClass"/>
+        </elements>
+        <elements xmi:type="pattern:Pattern" xmi:id="_0FqG8FaPEd-xDMudhFTQKg" description=" "
+            name="Callee" headerMethod="#_0FqG8VaPEd-xDMudhFTQKg" footerMethod="#_0FqG9FaPEd-xDMudhFTQKg"
+            initMethod="#_0FqG8laPEd-xDMudhFTQKg">
+          <methods xmi:id="_0FqG8VaPEd-xDMudhFTQKg" name="header" patternFilePath="templates/pattern._0FqG8FaPEd-xDMudhFTQKg/method._0FqG8VaPEd-xDMudhFTQKg.pt"/>
+          <methods xmi:id="_0FqG8laPEd-xDMudhFTQKg" name="init" patternFilePath="templates/pattern._0FqG8FaPEd-xDMudhFTQKg/method._0FqG8laPEd-xDMudhFTQKg.pt"/>
+          <methods xmi:id="_0FqG81aPEd-xDMudhFTQKg" name="body" patternFilePath="templates/pattern._0FqG8FaPEd-xDMudhFTQKg/method._0FqG81aPEd-xDMudhFTQKg.pt"/>
+          <methods xmi:id="_0FqG9FaPEd-xDMudhFTQKg" name="footer" patternFilePath="templates/pattern._0FqG8FaPEd-xDMudhFTQKg/method._0FqG9FaPEd-xDMudhFTQKg.pt"/>
+          <orchestration xmi:type="pattern:MethodCall" xmi:id="_ewenMFaREd-oupYL3fDLQg"
+              called="#_0FqG81aPEd-xDMudhFTQKg"/>
+          <parameters xmi:id="_iCIlMFaREd-oupYL3fDLQg" name="parameter" type="java.lang.Object"/>
+          <parameters xmi:id="_qCB4UFavEd-_dcUlU_GyPA" name="parameter2" type="java.lang.Object"/>
+          <nature xmi:type="javapattern:JavaNature" xmi:id="_0FqG9laPEd-xDMudhFTQKg"
+              name="Java"/>
+        </elements>
+        <elements xmi:type="pattern:Pattern" xmi:id="_-d1XsFa7Ed-_dcUlU_GyPA" name="CalleeInjected"
+            headerMethod="#_-d1XsVa7Ed-_dcUlU_GyPA" footerMethod="#_-d1XtFa7Ed-_dcUlU_GyPA"
+            initMethod="#_-d1Xsla7Ed-_dcUlU_GyPA">
+          <methods xmi:id="_-d1XsVa7Ed-_dcUlU_GyPA" name="header" patternFilePath="templates/pattern._-d1XsFa7Ed-_dcUlU_GyPA/method._-d1XsVa7Ed-_dcUlU_GyPA.pt"/>
+          <methods xmi:id="_-d1Xsla7Ed-_dcUlU_GyPA" name="init" patternFilePath="templates/pattern._-d1XsFa7Ed-_dcUlU_GyPA/method._-d1Xsla7Ed-_dcUlU_GyPA.pt"/>
+          <methods xmi:id="_-d1Xs1a7Ed-_dcUlU_GyPA" name="body" patternFilePath="templates/pattern._-d1XsFa7Ed-_dcUlU_GyPA/method._-d1Xs1a7Ed-_dcUlU_GyPA.pt"/>
+          <methods xmi:id="_-d1XtFa7Ed-_dcUlU_GyPA" name="footer" patternFilePath="templates/pattern._-d1XsFa7Ed-_dcUlU_GyPA/method._-d1XtFa7Ed-_dcUlU_GyPA.pt"/>
+          <orchestration xmi:type="pattern:MethodCall" xmi:id="_DtQp8Fa8Ed-_dcUlU_GyPA"
+              called="#_-d1Xs1a7Ed-_dcUlU_GyPA"/>
+          <parameters xmi:id="_AEpkgFa8Ed-_dcUlU_GyPA" name="parameter" type="http://www.eclipse.org/emf/2002/Ecore#//EClass">
+            <query xmi:type="pattern:BasicQuery" xmi:id="_IDUR8FbBEd-8M5d7emTXBQ"
+                extensionId="org.eclipse.egf.pattern.query.EObjectInjectedContextQuery"/>
+          </parameters>
+          <nature xmi:type="javapattern:JavaNature" xmi:id="_-d1Xtla7Ed-_dcUlU_GyPA"
+              name="Java"/>
+        </elements>
+      </libraries>
+    </viewpoints>
+  </viewpointContainer>
+  <orchestration xmi:type="fprod:ProductionPlan" xmi:id="_3uQlUFaPEd-xDMudhFTQKg">
+    <invocations xmi:id="_9MvAMFaPEd-xDMudhFTQKg" invokedActivity="ftask:Task platform:/plugin/org.eclipse.egf.pattern.ftask/Pattern_task.fcore#_XVvo0Be4Ed-DaY2uHNBaQg">
+      <invocationContractContainer xmi:id="_9MvAMVaPEd-xDMudhFTQKg">
+        <invocationContracts xmi:id="_9MvAMlaPEd-xDMudhFTQKg" invokedContract="platform:/plugin/org.eclipse.egf.pattern.ftask/Pattern_task.fcore#_tsP7UBe5Ed-O0P2188kAmA">
+          <type xmi:type="pattern:TypePatternList" xmi:id="_-mS0IFaPEd-xDMudhFTQKg"
+              elements="#_wF8wIFaPEd-xDMudhFTQKg"/>
+        </invocationContracts>
+        <invocationContracts xmi:id="_9MvANFaPEd-xDMudhFTQKg" invokedContract="platform:/plugin/org.eclipse.egf.pattern.ftask/Pattern_task.fcore#_7-xlwBe5Ed-O0P2188kAmA">
+          <type xmi:type="pattern:TypePatternExecutionReporter" xmi:id="_mgXHMVaVEd-_dcUlU_GyPA"
+              value="org.eclipse.egf.core.test.pattern.JunitConsoleReporter"/>
+        </invocationContracts>
+      </invocationContractContainer>
+    </invocations>
+  </orchestration>
+</fcore:FactoryComponent>
diff --git a/tests/org.eclipse.egf.core.test.pattern/generated/jet_tags/Callee.java b/tests/org.eclipse.egf.core.test.pattern/generated/jet_tags/Callee.java
index 7430551..26f92c2 100644
--- a/tests/org.eclipse.egf.core.test.pattern/generated/jet_tags/Callee.java
+++ b/tests/org.eclipse.egf.core.test.pattern/generated/jet_tags/Callee.java
@@ -16,51 +16,51 @@
 	}
 
 
-
-public void generate (Object argument) throws Exception {
-InternalPatternContext ctx = (InternalPatternContext)argument;
-IQuery.ParameterDescription paramDesc = null;
-Map<String, String> queryCtx = null;
-List<Object> parameterList = null;
-//this pattern can only be called by another (i.e. it's not an entry point in execution)
-List<Object> parameter2List = null;
-//this pattern can only be called by another (i.e. it's not an entry point in execution)
-
-
-for (Object parameterParameter : parameterList ) {
-for (Object parameter2Parameter : parameter2List ) {
-
-this.parameter = (java.lang.Object)parameterParameter;
-this.parameter2 = (java.lang.Object)parameter2Parameter;
-
-orchestration((PatternContext)argument);
-}
-}
-if (ctx.useReporter()){
-    ctx.getReporter().executionFinished(ctx.getExecutionBuffer().toString(), ctx);
-    ctx.clearBuffer();}
-}
-
-public String orchestration(PatternContext ctx) throws Exception {
-InternalPatternContext ictx = (InternalPatternContext)ctx;
-int executionIndex = ictx.getExecutionBuffer().length();
-method_body(ictx.getBuffer(), ictx);
-
-String loop = ictx.getBuffer().toString();
-if (ictx.useReporter()){
-    ictx.getExecutionBuffer().append(ictx.getBuffer().substring(ictx.getExecutionCurrentIndex()));
-    ictx.setExecutionCurrentIndex(0);
-Map<String, Object> parameterValues = new HashMap<String, Object>();
-parameterValues.put("parameter", this.parameter);
-parameterValues.put("parameter2", this.parameter2);
-    String outputWithCallBack = ictx.getExecutionBuffer().substring(executionIndex);
-    ictx.getReporter().loopFinished(loop, outputWithCallBack, ictx, parameterValues);
-    ictx.clearBuffer();}
-return loop;
-}
-
-protected void method_body(final StringBuffer out, final PatternContext ctx)throws Exception 
-{
+
+public void generate (Object argument) throws Exception {
+InternalPatternContext ctx = (InternalPatternContext)argument;
+IQuery.ParameterDescription paramDesc = null;
+Map<String, String> queryCtx = null;
+List<Object> parameterList = null;
+//this pattern can only be called by another (i.e. it's not an entry point in execution)
+List<Object> parameter2List = null;
+//this pattern can only be called by another (i.e. it's not an entry point in execution)
+
+
+for (Object parameterParameter : parameterList ) {
+for (Object parameter2Parameter : parameter2List ) {
+
+this.parameter = (java.lang.Object)parameterParameter;
+this.parameter2 = (java.lang.Object)parameter2Parameter;
+
+orchestration((PatternContext)argument);
+}
+}
+if (ctx.useReporter()){
+    ctx.getReporter().executionFinished(ctx.getExecutionBuffer().toString(), ctx);
+    ctx.clearBuffer();}
+}
+
+public String orchestration(PatternContext ctx) throws Exception {
+InternalPatternContext ictx = (InternalPatternContext)ctx;
+int executionIndex = ictx.getExecutionBuffer().length();
+method_body(ictx.getBuffer(), ictx);
+
+String loop = ictx.getBuffer().toString();
+if (ictx.useReporter()){
+    ictx.getExecutionBuffer().append(ictx.getBuffer().substring(ictx.getExecutionCurrentIndex()));
+    ictx.setExecutionCurrentIndex(0);
+Map<String, Object> parameterValues = new HashMap<String, Object>();
+parameterValues.put("parameter", this.parameter);
+parameterValues.put("parameter2", this.parameter2);
+    String outputWithCallBack = ictx.getExecutionBuffer().substring(executionIndex);
+    ictx.getReporter().loopFinished(loop, outputWithCallBack, ictx, parameterValues);
+    ictx.clearBuffer();}
+return loop;
+}
+
+protected void method_body(final StringBuffer out, final PatternContext ctx)throws Exception 
+{
 out.append("Callee : ");
 
 out.append("parameter=");
@@ -72,19 +72,19 @@
 	out.append(parameter2.toString());
 
 out.append("\n");
-
+
 }
 
 protected java.lang.Object parameter;
 
 public void set_parameter(java.lang.Object parameter) {
-	this.parameter = parameter;
+  this.parameter = parameter;
 }
 
 protected java.lang.Object parameter2;
 
 public void set_parameter2(java.lang.Object parameter2) {
-	this.parameter2 = parameter2;
-}
-
-}
+  this.parameter2 = parameter2;
+}
+
+}
diff --git a/tests/org.eclipse.egf.core.test.pattern/generated/jet_tags/CalleeInjected.java b/tests/org.eclipse.egf.core.test.pattern/generated/jet_tags/CalleeInjected.java
index 1fd00e7..af05b2c 100644
--- a/tests/org.eclipse.egf.core.test.pattern/generated/jet_tags/CalleeInjected.java
+++ b/tests/org.eclipse.egf.core.test.pattern/generated/jet_tags/CalleeInjected.java
@@ -16,46 +16,46 @@
 	}
 
 
-
-public void generate (Object argument) throws Exception {
-InternalPatternContext ctx = (InternalPatternContext)argument;
-IQuery.ParameterDescription paramDesc = null;
-Map<String, String> queryCtx = null;
-paramDesc = new IQuery.ParameterDescription("parameter", "http://www.eclipse.org/emf/2002/Ecore#//EClass");
-queryCtx = new HashMap<String, String>();
-List<Object> parameterList = QueryHelper.load(ctx, "org.eclipse.egf.pattern.query.EObjectInjectedContextQuery").execute(paramDesc, queryCtx, ctx);
-
-
-for (Object parameterParameter : parameterList ) {
-
-this.parameter = (org.eclipse.emf.ecore.EClass)parameterParameter;
-
-orchestration((PatternContext)argument);
-}
-if (ctx.useReporter()){
-    ctx.getReporter().executionFinished(ctx.getExecutionBuffer().toString(), ctx);
-    ctx.clearBuffer();}
-}
-
-public String orchestration(PatternContext ctx) throws Exception {
-InternalPatternContext ictx = (InternalPatternContext)ctx;
-int executionIndex = ictx.getExecutionBuffer().length();
-method_body(ictx.getBuffer(), ictx);
-
-String loop = ictx.getBuffer().toString();
-if (ictx.useReporter()){
-    ictx.getExecutionBuffer().append(ictx.getBuffer().substring(ictx.getExecutionCurrentIndex()));
-    ictx.setExecutionCurrentIndex(0);
-Map<String, Object> parameterValues = new HashMap<String, Object>();
-parameterValues.put("parameter", this.parameter);
-    String outputWithCallBack = ictx.getExecutionBuffer().substring(executionIndex);
-    ictx.getReporter().loopFinished(loop, outputWithCallBack, ictx, parameterValues);
-    ictx.clearBuffer();}
-return loop;
-}
-
-protected void method_body(final StringBuffer out, final PatternContext ctx)throws Exception 
-{
+
+public void generate (Object argument) throws Exception {
+InternalPatternContext ctx = (InternalPatternContext)argument;
+IQuery.ParameterDescription paramDesc = null;
+Map<String, String> queryCtx = null;
+paramDesc = new IQuery.ParameterDescription("parameter", "http://www.eclipse.org/emf/2002/Ecore#//EClass");
+queryCtx = new HashMap<String, String>();
+List<Object> parameterList = QueryHelper.load(ctx, "org.eclipse.egf.pattern.query.EObjectInjectedContextQuery").execute(paramDesc, queryCtx, ctx);
+
+
+for (Object parameterParameter : parameterList ) {
+
+this.parameter = (org.eclipse.emf.ecore.EClass)parameterParameter;
+
+orchestration((PatternContext)argument);
+}
+if (ctx.useReporter()){
+    ctx.getReporter().executionFinished(ctx.getExecutionBuffer().toString(), ctx);
+    ctx.clearBuffer();}
+}
+
+public String orchestration(PatternContext ctx) throws Exception {
+InternalPatternContext ictx = (InternalPatternContext)ctx;
+int executionIndex = ictx.getExecutionBuffer().length();
+method_body(ictx.getBuffer(), ictx);
+
+String loop = ictx.getBuffer().toString();
+if (ictx.useReporter()){
+    ictx.getExecutionBuffer().append(ictx.getBuffer().substring(ictx.getExecutionCurrentIndex()));
+    ictx.setExecutionCurrentIndex(0);
+Map<String, Object> parameterValues = new HashMap<String, Object>();
+parameterValues.put("parameter", this.parameter);
+    String outputWithCallBack = ictx.getExecutionBuffer().substring(executionIndex);
+    ictx.getReporter().loopFinished(loop, outputWithCallBack, ictx, parameterValues);
+    ictx.clearBuffer();}
+return loop;
+}
+
+protected void method_body(final StringBuffer out, final PatternContext ctx)throws Exception 
+{
 out.append("CalleeInjected : ");
 
 out.append("className=");
@@ -63,13 +63,13 @@
 	out.append(parameter.getName());
 
 out.append("\n");
-
+
 }
 
 protected org.eclipse.emf.ecore.EClass parameter;
 
 public void set_parameter(org.eclipse.emf.ecore.EClass parameter) {
-	this.parameter = parameter;
-}
-
-}
+  this.parameter = parameter;
+}
+
+}
diff --git a/tests/org.eclipse.egf.core.test.pattern/generated/jet_tags/Caller.java b/tests/org.eclipse.egf.core.test.pattern/generated/jet_tags/Caller.java
index faacd70..9a8e5d7 100644
--- a/tests/org.eclipse.egf.core.test.pattern/generated/jet_tags/Caller.java
+++ b/tests/org.eclipse.egf.core.test.pattern/generated/jet_tags/Caller.java
@@ -1,108 +1,108 @@
-package jet_tags;
-
-import org.eclipse.egf.common.helper.*;
-import java.util.*;
-import org.eclipse.emf.ecore.*;
-import org.eclipse.egf.model.pattern.*;
-import org.eclipse.egf.pattern.execution.*;
-import org.eclipse.egf.pattern.query.*;
-
-public class Caller 
-{
-  protected static String nl;
-  public static synchronized Caller create(String lineSeparator)
-  {
-    nl = lineSeparator;
-    Caller result = new Caller();
-    nl = null;
-    return result;
-  }
-
-  public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
-  protected final String TEXT_1 = "";
-  protected final String TEXT_2 = NL;
-  protected final String TEXT_3 = NL;
-  protected final String TEXT_4 = NL;
-  protected final String TEXT_5 = NL;
-
-	public Caller()
-	{
+package jet_tags;
+
+import org.eclipse.egf.common.helper.*;
+import java.util.*;
+import org.eclipse.emf.ecore.*;
+import org.eclipse.egf.model.pattern.*;
+import org.eclipse.egf.pattern.execution.*;
+import org.eclipse.egf.pattern.query.*;
+
+public class Caller 
+{
+  protected static String nl;
+  public static synchronized Caller create(String lineSeparator)
+  {
+    nl = lineSeparator;
+    Caller result = new Caller();
+    nl = null;
+    return result;
+  }
+
+  public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+  protected final String TEXT_1 = "";
+  protected final String TEXT_2 = NL;
+  protected final String TEXT_3 = NL;
+  protected final String TEXT_4 = NL;
+  protected final String TEXT_5 = NL;
+
+	public Caller()
+	{
 	//Here is the constructor
 StringBuffer stringBuffer = new StringBuffer();
-
-    // add initialisation of the pattern variables (declaration has been already done).
-    
-	}
-  	
-  	public String generate(Object argument) throws Exception
-  {
-    final StringBuffer stringBuffer = new StringBuffer();
-    
-    InternalPatternContext ctx = (InternalPatternContext)argument;
-Map<String, String> queryCtx = null;
-IQuery.ParameterDescription paramDesc = null;
-
-    orchestration(ctx);
-    if (ctx.useReporter()){
-    ctx.getReporter().executionFinished(ctx.getExecutionBuffer().toString(), ctx);
-    ctx.clearBuffer();}
-    
-    stringBuffer.append(TEXT_4);
-    stringBuffer.append(TEXT_5);
-    return stringBuffer.toString();
-  }
-public String orchestration(PatternContext ctx) throws Exception  {
-InternalPatternContext ictx = (InternalPatternContext)ctx;
-int executionIndex = ictx.getExecutionBuffer().length();
-
-    
-method_body(ictx.getBuffer(), ictx);
-    
-String loop = ictx.getBuffer().toString();
-if (ictx.useReporter()){
-    ictx.getExecutionBuffer().append(ictx.getBuffer().substring(ictx.getExecutionCurrentIndex()));
-    ictx.setExecutionCurrentIndex(0);
-    ictx.clearBuffer();}
-return loop;
-} 
-
-protected java.lang.Object variable = null;
-public void set_variable(java.lang.Object object) {
-this.variable = object;
-}
-protected java.lang.Object variable2 = null;
-public void set_variable2(java.lang.Object object) {
-this.variable2 = object;
-}
-protected org.eclipse.emf.ecore.EClass toInject = null;
-public void set_toInject(org.eclipse.emf.ecore.EClass object) {
-this.toInject = object;
-}
-public Map<String, Object> getParameters() {
-final Map<String, Object> parameters = new HashMap<String, Object>();
-return parameters; }
-
-    protected void method_body(final StringBuffer stringBuffer, final PatternContext ctx)throws Exception {
-
-    
-variable="CallValue";
-variable2="CallValue2";
-
-    final Map<String, Object> parameters = new HashMap<String, Object>();
-parameters.put("parameter", variable);
-parameters.put("parameter2",  variable2);
-CallHelper.executeWithParameterInjection("_0FqG8FaPEd-xDMudhFTQKg", new ExecutionContext((InternalPatternContext) ctx), parameters);
-
-    stringBuffer.append(TEXT_1);
-    stringBuffer.append(TEXT_2);
-     
-toInject = EcoreFactory.eINSTANCE.createEClass();
-toInject.setName("MyClassName");
-
-    ExecutionContext ctx__2UPq8FjrEdkve86Js2iPQ = new ExecutionContext((InternalPatternContext) ctx);
-ctx__2UPq8FjrEdkve86Js2iPQ.setValue(PatternContext.INJECTED_CONTEXT, toInject);
-CallHelper.executeWithContextInjection("_-d1XsFa7Ed-_dcUlU_GyPA", ctx__2UPq8FjrEdkve86Js2iPQ);
-
-    stringBuffer.append(TEXT_3);
-    }
+
+    // add initialisation of the pattern variables (declaration has been already done).
+    
+	}
+  	
+  	public String generate(Object argument) throws Exception
+  {
+    final StringBuffer stringBuffer = new StringBuffer();
+    
+    InternalPatternContext ctx = (InternalPatternContext)argument;
+Map<String, String> queryCtx = null;
+IQuery.ParameterDescription paramDesc = null;
+
+    orchestration(ctx);
+    if (ctx.useReporter()){
+    ctx.getReporter().executionFinished(ctx.getExecutionBuffer().toString(), ctx);
+    ctx.clearBuffer();}
+    
+    stringBuffer.append(TEXT_4);
+    stringBuffer.append(TEXT_5);
+    return stringBuffer.toString();
+  }
+public String orchestration(PatternContext ctx) throws Exception  {
+InternalPatternContext ictx = (InternalPatternContext)ctx;
+int executionIndex = ictx.getExecutionBuffer().length();
+
+    
+method_body(ictx.getBuffer(), ictx);
+    
+String loop = ictx.getBuffer().toString();
+if (ictx.useReporter()){
+    ictx.getExecutionBuffer().append(ictx.getBuffer().substring(ictx.getExecutionCurrentIndex()));
+    ictx.setExecutionCurrentIndex(0);
+    ictx.clearBuffer();}
+return loop;
+} 
+
+protected java.lang.Object variable = null;
+public void set_variable(java.lang.Object object) {
+this.variable = object;
+}
+protected java.lang.Object variable2 = null;
+public void set_variable2(java.lang.Object object) {
+this.variable2 = object;
+}
+protected org.eclipse.emf.ecore.EClass toInject = null;
+public void set_toInject(org.eclipse.emf.ecore.EClass object) {
+this.toInject = object;
+}
+public Map<String, Object> getParameters() {
+final Map<String, Object> parameters = new HashMap<String, Object>();
+return parameters; }
+
+    protected void method_body(final StringBuffer stringBuffer, final PatternContext ctx)throws Exception {
+
+    
+variable="CallValue";
+variable2="CallValue2";
+
+    final Map<String, Object> parameters = new HashMap<String, Object>();
+parameters.put("parameter", variable);
+parameters.put("parameter2",  variable2);
+CallHelper.executeWithParameterInjection("_0FqG8FaPEd-xDMudhFTQKg", new ExecutionContext((InternalPatternContext) ctx), parameters);
+
+    stringBuffer.append(TEXT_1);
+    stringBuffer.append(TEXT_2);
+     
+toInject = EcoreFactory.eINSTANCE.createEClass();
+toInject.setName("MyClassName");
+
+    ExecutionContext ctx__irymUVnrEdg_9XHCA2edA = new ExecutionContext((InternalPatternContext) ctx);
+ctx__irymUVnrEdg_9XHCA2edA.setValue(PatternContext.INJECTED_CONTEXT, toInject);
+CallHelper.executeWithContextInjection("_-d1XsFa7Ed-_dcUlU_GyPA", ctx__irymUVnrEdg_9XHCA2edA);
+
+    stringBuffer.append(TEXT_3);
+    }
     }
\ No newline at end of file
diff --git a/tests/org.eclipse.egf.core.test.pattern/plugin.xml b/tests/org.eclipse.egf.core.test.pattern/plugin.xml
index 64dfd61..5ff391d 100644
--- a/tests/org.eclipse.egf.core.test.pattern/plugin.xml
+++ b/tests/org.eclipse.egf.core.test.pattern/plugin.xml
@@ -55,6 +55,9 @@
       <fcore
             id="fc/jet_tags.fcore">
       </fcore>
+      <fcore
+            id="model/mypackage.fcore">
+      </fcore>
       
    </extension>
    
