Flexmi: parse EGL templates just once
diff --git a/plugins/org.eclipse.epsilon.flexmi/src/org/eclipse/epsilon/flexmi/templates/EglTemplate.java b/plugins/org.eclipse.epsilon.flexmi/src/org/eclipse/epsilon/flexmi/templates/EglTemplate.java
index edbaf80..1b93e59 100644
--- a/plugins/org.eclipse.epsilon.flexmi/src/org/eclipse/epsilon/flexmi/templates/EglTemplate.java
+++ b/plugins/org.eclipse.epsilon.flexmi/src/org/eclipse/epsilon/flexmi/templates/EglTemplate.java
@@ -14,6 +14,7 @@
 
 import org.eclipse.epsilon.egl.EglTemplateFactory;
 import org.eclipse.epsilon.egl.EglTemplateFactoryModuleAdapter;
+import org.eclipse.epsilon.eol.execute.context.FrameType;
 import org.eclipse.epsilon.flexmi.FlexmiResource;
 import org.eclipse.epsilon.flexmi.xml.Xml;
 import org.w3c.dom.Document;
@@ -21,6 +22,8 @@
 
 public class EglTemplate extends DynamicTemplate {
 
+	protected EglTemplateFactoryModuleAdapter module;
+
 	public EglTemplate(Element element, FlexmiResource resource, URI uri) {
 		super(element, resource, uri);
 	}
@@ -28,15 +31,26 @@
 	@Override
 	public List<Element> getApplication(Element call) {
 		try {
-			EglTemplateFactoryModuleAdapter module = new EglTemplateFactoryModuleAdapter(new EglTemplateFactory());
-			module.parse(content.getTextContent().trim(), uri);
-			if (!module.getParseProblems().isEmpty()) throw new RuntimeException(module.getParseProblems().get(0).toString());
-			
+			if (module == null) {
+				module = new EglTemplateFactoryModuleAdapter(new EglTemplateFactory());
+				module.parse(content.getTextContent().trim(), uri);
+				if (!module.getParseProblems().isEmpty())
+					throw new RuntimeException(module.getParseProblems().get(0).toString());
+			}
+
+			module.getContext().getFrameStack().enterLocal(FrameType.UNPROTECTED, module);
+
 			prepareModule(module, call);
 			
 			String xml = "<?xml version=\"1.0\"?><root>" + (module.execute() + "").trim() + "</root>";
 			Document document = Xml.parse(xml);
 			replaceSlots(call, document.getDocumentElement());
+
+			module.getContext().getFrameStack().leaveLocal(module);
+
+			// reset for next template application
+			module.getCurrentTemplate().reset();
+
 			return Xml.getChildren(document.getDocumentElement());
 			
 		} catch (Exception e) {