diff --git a/plugins/org.eclipse.xpand/src/org/eclipse/xpand2/XpandExecutionContextImpl.java b/plugins/org.eclipse.xpand/src/org/eclipse/xpand2/XpandExecutionContextImpl.java
index f7017c1..695fa37 100644
--- a/plugins/org.eclipse.xpand/src/org/eclipse/xpand2/XpandExecutionContextImpl.java
+++ b/plugins/org.eclipse.xpand/src/org/eclipse/xpand2/XpandExecutionContextImpl.java
@@ -282,9 +282,7 @@
     }
 
     public XpandResource findTemplate(final String templateName, String[] importedNs) {
-        final List<?> possibleNames = typeSystem.getPossibleNames(templateName, importedNs);
-        for (final Iterator<?> iter = possibleNames.iterator(); iter.hasNext();) {
-            final String element = (String) iter.next();
+        for (String element: getPossibleNames(templateName, importedNs)) {
             final XpandResource tpl = (XpandResource) resourceManager.loadResource(element,
                     XpandUtil.TEMPLATE_EXTENSION);
             if (tpl != null)
@@ -292,6 +290,19 @@
         }
         return null;
     }
+    
+    private List<String> getPossibleNames (final String templateName, final String[] importedNs) {
+    	final List<String> result = new ArrayList<String>(importedNs.length+1);
+    	if (currentResource()!=null) {
+        	final int offsetNsDelim = currentResource().getFullyQualifiedName().lastIndexOf(SyntaxConstants.NS_DELIM);
+        	if (offsetNsDelim>0) {
+        		final String resourceRelative = new StringBuilder(currentResource().getFullyQualifiedName().substring(0, offsetNsDelim)).append(SyntaxConstants.NS_DELIM).append(templateName).toString();
+        		result.add(resourceRelative);
+        	}
+    	}
+    	result.addAll(typeSystem.getPossibleNames(templateName, importedNs));
+    	return result;
+    }
 
     /**
      * resolves the correct definition (using parametric polymorphism)
