http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-core/src/main/java/org/apache/freemarker/core/model/impl/StaticModels.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/model/impl/StaticModels.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/model/impl/StaticModels.java
index 15b45bc..a7b0b84 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/model/impl/StaticModels.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/model/impl/StaticModels.java
@@ -19,8 +19,8 @@
 
 package org.apache.freemarker.core.model.impl;
 
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 
 /**
  * Utility class for instantiating {@link StaticModel} instances from
@@ -37,7 +37,7 @@ class StaticModels extends ClassBasedModelFactory {
 
     @Override
     protected TemplateModel createModel(Class clazz) 
-    throws TemplateModelException {
+    throws TemplateException {
         return new StaticModel(clazz, getWrapper());
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-core/src/main/java/org/apache/freemarker/core/model/impl/_MethodUtils.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/model/impl/_MethodUtils.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/model/impl/_MethodUtils.java
index cec556f..1deaa95 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/model/impl/_MethodUtils.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/model/impl/_MethodUtils.java
@@ -26,10 +26,9 @@ import java.lang.reflect.Modifier;
 import java.util.HashSet;
 import java.util.Set;
 
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core._DelayedConversionToString;
 import org.apache.freemarker.core._DelayedJQuote;
-import org.apache.freemarker.core._TemplateModelException;
-import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.util.BugException;
 import org.apache.freemarker.core.util._ClassUtils;
 
@@ -247,8 +246,8 @@ public final class _MethodUtils {
         return new Object[] { "Java ", isConstructor ? "constructor " : 
"method ", new _DelayedJQuote(member) };
     }
 
-    static TemplateModelException newInvocationTemplateModelException(Object 
object, Member member, Throwable e) {
-        return newInvocationTemplateModelException(
+    static TemplateException newInvocationTemplateException(Object object, 
Member member, Throwable e) {
+        return newInvocationTemplateException(
                 object,
                 member,
                 (member.getModifiers() & Modifier.STATIC) != 0,
@@ -256,8 +255,8 @@ public final class _MethodUtils {
                 e);
     }
 
-    static TemplateModelException newInvocationTemplateModelException(Object 
object, CallableMemberDescriptor callableMemberDescriptor, Throwable e) {
-        return newInvocationTemplateModelException(
+    static TemplateException newInvocationTemplateException(Object object, 
CallableMemberDescriptor callableMemberDescriptor, Throwable e) {
+        return newInvocationTemplateException(
                 object,
                 new _DelayedConversionToString(callableMemberDescriptor) {
                     @Override
@@ -270,7 +269,7 @@ public final class _MethodUtils {
                 e);
     }
     
-    private static TemplateModelException newInvocationTemplateModelException(
+    private static TemplateException newInvocationTemplateException(
             Object parentObject, Object member, boolean isStatic, boolean 
isConstructor, Throwable e) {
         while (e instanceof InvocationTargetException) {
             Throwable cause = ((InvocationTargetException) 
e).getTargetException();
@@ -281,7 +280,7 @@ public final class _MethodUtils {
             }
         }
 
-        return new _TemplateModelException(e,
+        return new TemplateException(e,
                 invocationErrorMessageStart(member, isConstructor),
                 " threw an exception",
                 isStatic || isConstructor ? "" : new Object[] {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-core/src/main/java/org/apache/freemarker/core/model/impl/_ModelAPI.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/model/impl/_ModelAPI.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/model/impl/_ModelAPI.java
index 1cb23d1..6c21ee8 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/model/impl/_ModelAPI.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/model/impl/_ModelAPI.java
@@ -25,7 +25,7 @@ import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.freemarker.core.model.TemplateModelException;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.util._CollectionUtils;
 
 /**
@@ -39,7 +39,7 @@ public class _ModelAPI {
     
     public static Object newInstance(Class<?> pClass, Object[] args, 
DefaultObjectWrapper ow)
             throws NoSuchMethodException, IllegalArgumentException, 
InstantiationException,
-            IllegalAccessException, InvocationTargetException, 
TemplateModelException {
+            IllegalAccessException, InvocationTargetException, 
TemplateException {
         return newInstance(getConstructorDescriptor(pClass, args), args, ow);
     }
     
@@ -90,7 +90,7 @@ public class _ModelAPI {
     
     private static Object newInstance(CallableMemberDescriptor constrDesc, 
Object[] args, DefaultObjectWrapper ow)
             throws InstantiationException, IllegalAccessException, 
InvocationTargetException, IllegalArgumentException,
-            TemplateModelException {
+            TemplateException {
         if (args == null) args = _CollectionUtils.EMPTY_OBJECT_ARRAY;
         
         final Object[] packedArgs;

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/CommonMarkupOutputFormat.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/CommonMarkupOutputFormat.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/CommonMarkupOutputFormat.java
index d4341ef..337d37b 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/CommonMarkupOutputFormat.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/CommonMarkupOutputFormat.java
@@ -21,7 +21,7 @@ package org.apache.freemarker.core.outputformat;
 import java.io.IOException;
 import java.io.Writer;
 
-import org.apache.freemarker.core.model.TemplateModelException;
+import org.apache.freemarker.core.TemplateException;
 
 /**
  * Common superclass for implementing {@link MarkupOutputFormat}-s that use a 
{@link CommonTemplateMarkupOutputModel}
@@ -35,17 +35,17 @@ public abstract class CommonMarkupOutputFormat<MO extends 
CommonTemplateMarkupOu
     }
     
     @Override
-    public final MO fromPlainTextByEscaping(String textToEsc) throws 
TemplateModelException {
+    public final MO fromPlainTextByEscaping(String textToEsc) throws 
TemplateException {
         return newTemplateMarkupOutputModel(textToEsc, null);
     }
 
     @Override
-    public final MO fromMarkup(String markupText) throws 
TemplateModelException {
+    public final MO fromMarkup(String markupText) throws TemplateException {
         return newTemplateMarkupOutputModel(null, markupText);
     }
 
     @Override
-    public final void output(MO mo, Writer out) throws IOException, 
TemplateModelException {
+    public final void output(MO mo, Writer out) throws IOException, 
TemplateException {
         String mc = mo.getMarkupContent();
         if (mc != null) {
             out.write(mc);
@@ -55,15 +55,15 @@ public abstract class CommonMarkupOutputFormat<MO extends 
CommonTemplateMarkupOu
     }
 
     @Override
-    public abstract void output(String textToEsc, Writer out) throws 
IOException, TemplateModelException;
+    public abstract void output(String textToEsc, Writer out) throws 
IOException, TemplateException;
     
     @Override
-    public final String getSourcePlainText(MO mo) throws 
TemplateModelException {
+    public final String getSourcePlainText(MO mo) throws TemplateException {
         return mo.getPlainTextContent();
     }
 
     @Override
-    public final String getMarkupString(MO mo) throws TemplateModelException {
+    public final String getMarkupString(MO mo) throws TemplateException {
         String mc = mo.getMarkupContent();
         if (mc != null) {
             return mc;
@@ -75,7 +75,7 @@ public abstract class CommonMarkupOutputFormat<MO extends 
CommonTemplateMarkupOu
     }
     
     @Override
-    public final MO concat(MO mo1, MO mo2) throws TemplateModelException {
+    public final MO concat(MO mo1, MO mo2) throws TemplateException {
         String pc1 = mo1.getPlainTextContent();
         String mc1 = mo1.getMarkupContent();
         String pc2 = mo2.getPlainTextContent();
@@ -95,7 +95,7 @@ public abstract class CommonMarkupOutputFormat<MO extends 
CommonTemplateMarkupOu
     }
     
     @Override
-    public boolean isEmpty(MO mo) throws TemplateModelException {
+    public boolean isEmpty(MO mo) throws TemplateException {
         String s = mo.getPlainTextContent();
         if (s != null) {
             return s.length() == 0;
@@ -117,6 +117,6 @@ public abstract class CommonMarkupOutputFormat<MO extends 
CommonTemplateMarkupOu
      * Creates a new {@link CommonTemplateMarkupOutputModel} that's bound to 
this {@link OutputFormat} instance.
      */
     protected abstract MO newTemplateMarkupOutputModel(String 
plainTextContent, String markupContent)
-            throws TemplateModelException;
+            throws TemplateException;
     
 }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/MarkupOutputFormat.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/MarkupOutputFormat.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/MarkupOutputFormat.java
index 8707a3c..77ba50c 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/MarkupOutputFormat.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/MarkupOutputFormat.java
@@ -22,8 +22,8 @@ import java.io.IOException;
 import java.io.Writer;
 
 import org.apache.freemarker.core.Configuration;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.TemplateMarkupOutputModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.outputformat.impl.HTMLOutputFormat;
 import org.apache.freemarker.core.outputformat.impl.TemplateHTMLOutputModel;
 
@@ -59,28 +59,28 @@ public abstract class MarkupOutputFormat<MO extends 
TemplateMarkupOutputModel> e
      * @see #escapePlainText(String)
      * @see #getSourcePlainText(TemplateMarkupOutputModel)
      */
-    public abstract MO fromPlainTextByEscaping(String textToEsc) throws 
TemplateModelException;
+    public abstract MO fromPlainTextByEscaping(String textToEsc) throws 
TemplateException;
 
     /**
      * Wraps a {@link String} that's already markup to {@link 
TemplateMarkupOutputModel} interface, to indicate its
-     * format. This corresponds to {@code ?noEsc}. (This methods is allowed to 
throw {@link TemplateModelException} if
+     * format. This corresponds to {@code ?noEsc}. (This methods is allowed to 
throw {@link TemplateException} if
      * the parameter markup text is malformed, but it's unlikely that an 
implementation chooses to parse the parameter
      * until, and if ever, that becomes necessary.)
      * 
      * @see #getMarkupString(TemplateMarkupOutputModel)
      */
-    public abstract MO fromMarkup(String markupText) throws 
TemplateModelException;
+    public abstract MO fromMarkup(String markupText) throws TemplateException;
 
     /**
      * Prints the parameter model to the output.
      */
-    public abstract void output(MO mo, Writer out) throws IOException, 
TemplateModelException;
+    public abstract void output(MO mo, Writer out) throws IOException, 
TemplateException;
 
     /**
      * Equivalent to calling {@link #fromPlainTextByEscaping(String)} and then
      * {@link #output(TemplateMarkupOutputModel, Writer)}, but the 
implementation may uses a more efficient solution.
      */
-    public abstract void output(String textToEsc, Writer out) throws 
IOException, TemplateModelException;
+    public abstract void output(String textToEsc, Writer out) throws 
IOException, TemplateException;
     
     /**
      * If this {@link TemplateMarkupOutputModel} was created with {@link 
#fromPlainTextByEscaping(String)}, it returns
@@ -88,7 +88,7 @@ public abstract class MarkupOutputFormat<MO extends 
TemplateMarkupOutputModel> e
      * of markups, as if the source format can be converted to plain text 
without loss, then that just has to be
      * re-escaped with the target format to do the conversion.
      */
-    public abstract String getSourcePlainText(MO mo) throws 
TemplateModelException;
+    public abstract String getSourcePlainText(MO mo) throws TemplateException;
 
     /**
      * Returns the content as markup text; never {@code null}. If this {@link 
TemplateMarkupOutputModel} was created
@@ -96,31 +96,31 @@ public abstract class MarkupOutputFormat<MO extends 
TemplateMarkupOutputModel> e
      * as far as the returned markup means the same. If this {@link 
TemplateMarkupOutputModel} wasn't created
      * with {@link #fromMarkup(String)} and it doesn't yet have the markup, it 
has to generate the markup now.
      */
-    public abstract String getMarkupString(MO mo) throws 
TemplateModelException;
+    public abstract String getMarkupString(MO mo) throws TemplateException;
     
     /**
      * Returns a {@link TemplateMarkupOutputModel} that contains the content 
of both {@link TemplateMarkupOutputModel}
      * objects concatenated.
      */
-    public abstract MO concat(MO mo1, MO mo2) throws TemplateModelException;
+    public abstract MO concat(MO mo1, MO mo2) throws TemplateException;
     
     /**
      * Should give the same result as {@link #fromPlainTextByEscaping(String)} 
and then
      * {@link #getMarkupString(TemplateMarkupOutputModel)}, but the 
implementation may uses a more efficient solution.
      */
-    public abstract String escapePlainText(String plainTextContent) throws 
TemplateModelException;
+    public abstract String escapePlainText(String plainTextContent) throws 
TemplateException;
 
     /**
      * Returns if the markup is empty (0 length). This is used by at least 
{@code ?hasContent}.
      */
-    public abstract boolean isEmpty(MO mo) throws TemplateModelException;
+    public abstract boolean isEmpty(MO mo) throws TemplateException;
     
     /**
      * Tells if a string built-in that can't handle a {@link 
TemplateMarkupOutputModel} left hand operand can bypass
      * this object as is. A typical such case would be when a {@link 
TemplateHTMLOutputModel} of "HTML" format bypasses
      * {@code ?html}.
      */
-    public abstract boolean isLegacyBuiltInBypassed(String builtInName) throws 
TemplateModelException;
+    public abstract boolean isLegacyBuiltInBypassed(String builtInName) throws 
TemplateException;
     
     /**
      * Tells if by default auto-escaping should be on for this format. It 
should be {@code true} if you need to escape

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/CombinedMarkupOutputFormat.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/CombinedMarkupOutputFormat.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/CombinedMarkupOutputFormat.java
index e3e1c51..4d0f060 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/CombinedMarkupOutputFormat.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/CombinedMarkupOutputFormat.java
@@ -21,7 +21,7 @@ package org.apache.freemarker.core.outputformat.impl;
 import java.io.IOException;
 import java.io.Writer;
 
-import org.apache.freemarker.core.model.TemplateModelException;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.outputformat.CommonMarkupOutputFormat;
 import org.apache.freemarker.core.outputformat.MarkupOutputFormat;
 
@@ -65,17 +65,17 @@ public final class CombinedMarkupOutputFormat extends 
CommonMarkupOutputFormat<T
     }
 
     @Override
-    public void output(String textToEsc, Writer out) throws IOException, 
TemplateModelException {
+    public void output(String textToEsc, Writer out) throws IOException, 
TemplateException {
         outer.output(inner.escapePlainText(textToEsc), out);
     }
 
     @Override
-    public String escapePlainText(String plainTextContent) throws 
TemplateModelException {
+    public String escapePlainText(String plainTextContent) throws 
TemplateException {
         return outer.escapePlainText(inner.escapePlainText(plainTextContent));
     }
 
     @Override
-    public boolean isLegacyBuiltInBypassed(String builtInName) throws 
TemplateModelException {
+    public boolean isLegacyBuiltInBypassed(String builtInName) throws 
TemplateException {
         return outer.isLegacyBuiltInBypassed(builtInName);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/HTMLOutputFormat.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/HTMLOutputFormat.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/HTMLOutputFormat.java
index aafcc4e..1b9f367 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/HTMLOutputFormat.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/HTMLOutputFormat.java
@@ -21,7 +21,7 @@ package org.apache.freemarker.core.outputformat.impl;
 import java.io.IOException;
 import java.io.Writer;
 
-import org.apache.freemarker.core.model.TemplateModelException;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.outputformat.CommonMarkupOutputFormat;
 import org.apache.freemarker.core.outputformat.OutputFormat;
 import org.apache.freemarker.core.util._StringUtils;
@@ -53,7 +53,7 @@ public final class HTMLOutputFormat extends 
CommonMarkupOutputFormat<TemplateHTM
     }
 
     @Override
-    public void output(String textToEsc, Writer out) throws IOException, 
TemplateModelException {
+    public void output(String textToEsc, Writer out) throws IOException, 
TemplateException {
         _StringUtils.XHTMLEnc(textToEsc, out);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/RTFOutputFormat.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/RTFOutputFormat.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/RTFOutputFormat.java
index 1397af5..fad1293 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/RTFOutputFormat.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/RTFOutputFormat.java
@@ -21,7 +21,7 @@ package org.apache.freemarker.core.outputformat.impl;
 import java.io.IOException;
 import java.io.Writer;
 
-import org.apache.freemarker.core.model.TemplateModelException;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.outputformat.CommonMarkupOutputFormat;
 import org.apache.freemarker.core.outputformat.OutputFormat;
 import org.apache.freemarker.core.util._StringUtils;
@@ -53,7 +53,7 @@ public final class RTFOutputFormat extends 
CommonMarkupOutputFormat<TemplateRTFO
     }
 
     @Override
-    public void output(String textToEsc, Writer out) throws IOException, 
TemplateModelException {
+    public void output(String textToEsc, Writer out) throws IOException, 
TemplateException {
         _StringUtils.RTFEnc(textToEsc, out);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/XHTMLOutputFormat.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/XHTMLOutputFormat.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/XHTMLOutputFormat.java
index 55a2748..fa61fa8 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/XHTMLOutputFormat.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/XHTMLOutputFormat.java
@@ -21,7 +21,7 @@ package org.apache.freemarker.core.outputformat.impl;
 import java.io.IOException;
 import java.io.Writer;
 
-import org.apache.freemarker.core.model.TemplateModelException;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.outputformat.CommonMarkupOutputFormat;
 import org.apache.freemarker.core.outputformat.OutputFormat;
 import org.apache.freemarker.core.util._StringUtils;
@@ -53,7 +53,7 @@ public final class XHTMLOutputFormat extends 
CommonMarkupOutputFormat<TemplateXH
     }
 
     @Override
-    public void output(String textToEsc, Writer out) throws IOException, 
TemplateModelException {
+    public void output(String textToEsc, Writer out) throws IOException, 
TemplateException {
         _StringUtils.XHTMLEnc(textToEsc, out);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/XMLOutputFormat.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/XMLOutputFormat.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/XMLOutputFormat.java
index c129135..bb116d9 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/XMLOutputFormat.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/outputformat/impl/XMLOutputFormat.java
@@ -21,7 +21,7 @@ package org.apache.freemarker.core.outputformat.impl;
 import java.io.IOException;
 import java.io.Writer;
 
-import org.apache.freemarker.core.model.TemplateModelException;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.outputformat.CommonMarkupOutputFormat;
 import org.apache.freemarker.core.outputformat.OutputFormat;
 import org.apache.freemarker.core.util._StringUtils;
@@ -53,7 +53,7 @@ public final class XMLOutputFormat extends 
CommonMarkupOutputFormat<TemplateXMLO
     }
 
     @Override
-    public void output(String textToEsc, Writer out) throws IOException, 
TemplateModelException {
+    public void output(String textToEsc, Writer out) throws IOException, 
TemplateException {
         _StringUtils.XMLEnc(textToEsc, out);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
index a208612..4f6dc5d 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
@@ -66,13 +66,31 @@ public final class CallableUtils {
         return newGenericExecuteException(callable, false, errorDescription);
     }
 
+    public static TemplateException newGenericExecuteException(
+            TemplateCallableModel callable, boolean calledAsFunction, String 
errorDescription) {
+        return newGenericExecuteException(callable, calledAsFunction, 
errorDescription, null);
+    }
+
+    /** Convenience method for calling {@link 
#newGenericExecuteException(TemplateCallableModel, boolean, String)}. */
+    public static TemplateException newGenericExecuteException(
+            TemplateFunctionModel callable, String errorDescription, Throwable 
cause) {
+        return newGenericExecuteException(callable, true, errorDescription, 
cause);
+    }
+
+    /** Convenience method for calling {@link 
#newGenericExecuteException(TemplateCallableModel, boolean, String)}. */
+    public static TemplateException newGenericExecuteException(
+            TemplateDirectiveModel callable, String errorDescription, 
Throwable cause) {
+        return newGenericExecuteException(callable, false, errorDescription, 
cause);
+    }
+
     /**
      * @param errorDescription Complete sentence describing the problem. This 
will be after
      *      {@code "When calling xxx: "}.
      */
     public static TemplateException newGenericExecuteException(
-            TemplateCallableModel callable, boolean calledAsFunction, String 
errorDescription) {
-        return new TemplateException(
+            TemplateCallableModel callable, boolean calledAsFunction, String 
errorDescription,
+            Throwable cause) {
+        return new TemplateException(cause,
                 
_CallableUtils.getMessagePartWhenCallingSomethingColon(callable, 
calledAsFunction),
                 errorDescription);
     }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-core/src/main/java/org/apache/freemarker/core/util/DeepUnwrap.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/util/DeepUnwrap.java 
b/freemarker-core/src/main/java/org/apache/freemarker/core/util/DeepUnwrap.java
index b62be6f..599cdea 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/util/DeepUnwrap.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/util/DeepUnwrap.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 
 import org.apache.freemarker.core.Environment;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.AdapterTemplateModel;
 import org.apache.freemarker.core.model.ObjectWrapper;
 import org.apache.freemarker.core.model.TemplateBooleanModel;
@@ -30,7 +31,6 @@ import 
org.apache.freemarker.core.model.TemplateCollectionModel;
 import org.apache.freemarker.core.model.TemplateDateModel;
 import org.apache.freemarker.core.model.TemplateHashModelEx;
 import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.TemplateModelIterator;
 import org.apache.freemarker.core.model.TemplateNumberModel;
 import org.apache.freemarker.core.model.TemplateScalarModel;
@@ -67,11 +67,11 @@ public class DeepUnwrap {
      *   <li>If the object implements {@link TemplateHashModelEx}, then a
      *       <code>java.util.HashMap</code> is constructed from the 
subvariables, and each
      *       subvariable is unwrapped with the rules described here (recursive 
unwrapping).
-     *   <li>Throw a <code>TemplateModelException</code>, because it doesn't 
know how to
+     *   <li>Throw a {@link TemplateException}, because it doesn't know how to
      *       unwrap the object.
      * </ol>
      */
-    public static Object unwrap(TemplateModel model) throws 
TemplateModelException {
+    public static Object unwrap(TemplateModel model) throws TemplateException {
         return unwrap(model, false);
     }
 
@@ -79,11 +79,11 @@ public class DeepUnwrap {
      * Same as {@link #unwrap(TemplateModel)}, but it doesn't throw exception 
      * if it doesn't know how to unwrap the model, but rather returns it as-is.
      */
-    public static Object permissiveUnwrap(TemplateModel model) throws 
TemplateModelException {
+    public static Object permissiveUnwrap(TemplateModel model) throws 
TemplateException {
         return unwrap(model, true);
     }
     
-    private static Object unwrap(TemplateModel model, boolean permissive) 
throws TemplateModelException {
+    private static Object unwrap(TemplateModel model, boolean permissive) 
throws TemplateException {
         Environment env = Environment.getCurrentEnvironment();
         TemplateModel nullModel = null;
         if (env != null) {
@@ -95,7 +95,7 @@ public class DeepUnwrap {
         return unwrap(model, nullModel, permissive);
     }
 
-    private static Object unwrap(TemplateModel model, TemplateModel nullModel, 
boolean permissive) throws TemplateModelException {
+    private static Object unwrap(TemplateModel model, TemplateModel nullModel, 
boolean permissive) throws TemplateException {
         if (model instanceof AdapterTemplateModel) {
             return ((AdapterTemplateModel) 
model).getAdaptedObject(OBJECT_CLASS);
         }
@@ -147,6 +147,6 @@ public class DeepUnwrap {
         if (permissive) {
             return model;
         }
-        throw new TemplateModelException("Cannot deep-unwrap model of type " + 
model.getClass().getName());
+        throw new TemplateException("Cannot deep-unwrap model of type " + 
model.getClass().getName());
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/TemplateDateFormat.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/TemplateDateFormat.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/TemplateDateFormat.java
index 8e890f9..584c25c 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/TemplateDateFormat.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/TemplateDateFormat.java
@@ -23,9 +23,9 @@ import java.text.DateFormat;
 import java.util.Date;
 
 import org.apache.freemarker.core.Environment;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.TemplateDateModel;
 import org.apache.freemarker.core.model.TemplateMarkupOutputModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 
 /**
  * Represents a date/time/dateTime format; used in templates for formatting 
and parsing with that format. This is
@@ -50,11 +50,11 @@ public abstract class TemplateDateFormat extends 
TemplateValueFormat {
      * @throws TemplateValueFormatException
      *             When a problem occurs during the formatting of the value. 
Notable subclass:
      *             {@link UnknownDateTypeFormattingUnsupportedException}
-     * @throws TemplateModelException
+     * @throws TemplateException
      *             Exception thrown by the {@code dateModel} object when 
calling its methods.
      */
     public abstract String formatToPlainText(TemplateDateModel dateModel)
-            throws TemplateValueFormatException, TemplateModelException;
+            throws TemplateValueFormatException, TemplateException;
 
     /**
      * Formats the model to markup instead of to plain text if the result 
markup will be more than just plain text
@@ -66,7 +66,7 @@ public abstract class TemplateDateFormat extends 
TemplateValueFormat {
      * 
      * @return A {@link String} or a {@link TemplateMarkupOutputModel}; not 
{@code null}.
      */
-    public Object format(TemplateDateModel dateModel) throws 
TemplateValueFormatException, TemplateModelException {
+    public Object format(TemplateDateModel dateModel) throws 
TemplateValueFormatException, TemplateException {
         return formatToPlainText(dateModel);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/TemplateFormatUtil.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/TemplateFormatUtil.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/TemplateFormatUtil.java
index a047e70..e75cc7f 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/TemplateFormatUtil.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/TemplateFormatUtil.java
@@ -20,10 +20,10 @@ package org.apache.freemarker.core.valueformat;
 
 import java.util.Date;
 
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core._EvalUtils;
 import org.apache.freemarker.core.model.ObjectWrapper;
 import org.apache.freemarker.core.model.TemplateDateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.TemplateNumberModel;
 
 /**
@@ -45,12 +45,12 @@ public final class TemplateFormatUtil {
 
     /**
      * Utility method to extract the {@link Number} from an {@link 
TemplateNumberModel}, and throws
-     * {@link TemplateModelException} with a standard error message if that's 
{@code null}. {@link TemplateNumberModel}
+     * {@link TemplateException} with a standard error message if that's 
{@code null}. {@link TemplateNumberModel}
      * that store {@code null} are in principle not allowed, and so are 
considered to be bugs in the
      * {@link ObjectWrapper} or {@link TemplateNumberModel} implementation.
      */
     public static Number getNonNullNumber(TemplateNumberModel numberModel)
-            throws TemplateModelException, UnformattableValueException {
+            throws TemplateException, UnformattableValueException {
         Number number = numberModel.getAsNumber();
         if (number == null) {
             throw _EvalUtils.newModelHasStoredNullException(Number.class, 
numberModel, null);
@@ -60,11 +60,11 @@ public final class TemplateFormatUtil {
 
     /**
      * Utility method to extract the {@link Date} from an {@link 
TemplateDateModel}, and throw
-     * {@link TemplateModelException} with a standard error message if that's 
{@code null}. {@link TemplateDateModel}
+     * {@link TemplateException} with a standard error message if that's 
{@code null}. {@link TemplateDateModel}
      * that store {@code null} are in principle not allowed, and so are 
considered to be bugs in the
      * {@link ObjectWrapper} or {@link TemplateNumberModel} implementation.
      */
-    public static Date getNonNullDate(TemplateDateModel dateModel) throws 
TemplateModelException {
+    public static Date getNonNullDate(TemplateDateModel dateModel) throws 
TemplateException {
         Date date = dateModel.getAsDate();
         if (date == null) {
             throw _EvalUtils.newModelHasStoredNullException(Date.class, 
dateModel, null);

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/TemplateNumberFormat.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/TemplateNumberFormat.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/TemplateNumberFormat.java
index af4f9d7..25e7ad4 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/TemplateNumberFormat.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/TemplateNumberFormat.java
@@ -21,10 +21,10 @@ package org.apache.freemarker.core.valueformat;
 import java.text.NumberFormat;
 
 import org.apache.freemarker.core.Environment;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.arithmetic.ArithmeticEngine;
 import org.apache.freemarker.core.model.TemplateDateModel;
 import org.apache.freemarker.core.model.TemplateMarkupOutputModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.TemplateNumberModel;
 
 /**
@@ -50,11 +50,11 @@ public abstract class TemplateNumberFormat extends 
TemplateValueFormat {
      * @throws TemplateValueFormatException
      *             If any problem occurs while parsing/getting the format. 
Notable subclass:
      *             {@link UnformattableValueException}.
-     * @throws TemplateModelException
+     * @throws TemplateException
      *             Exception thrown by the {@code dateModel} object when 
calling its methods.
      */
     public abstract String formatToPlainText(TemplateNumberModel numberModel)
-            throws TemplateValueFormatException, TemplateModelException;
+            throws TemplateValueFormatException, TemplateException;
 
     /**
      * Formats the model to markup instead of to plain text if the result 
markup will be more than just plain text
@@ -68,7 +68,7 @@ public abstract class TemplateNumberFormat extends 
TemplateValueFormat {
      * @return A {@link String} or a {@link TemplateMarkupOutputModel}; not 
{@code null}.
      */
     public Object format(TemplateNumberModel numberModel)
-            throws TemplateValueFormatException, TemplateModelException {
+            throws TemplateValueFormatException, TemplateException {
         return formatToPlainText(numberModel);
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/impl/ISOLikeTemplateDateFormat.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/impl/ISOLikeTemplateDateFormat.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/impl/ISOLikeTemplateDateFormat.java
index 1598518..fe189f3 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/impl/ISOLikeTemplateDateFormat.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/impl/ISOLikeTemplateDateFormat.java
@@ -23,8 +23,8 @@ import java.util.Date;
 import java.util.TimeZone;
 
 import org.apache.freemarker.core.Environment;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.TemplateDateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.util.BugException;
 import org.apache.freemarker.core.util._DateUtils;
 import 
org.apache.freemarker.core.util._DateUtils.CalendarFieldsToDateConverter;
@@ -185,7 +185,7 @@ abstract class ISOLikeTemplateDateFormat  extends 
TemplateDateFormat {
     }
     
     @Override
-    public final String formatToPlainText(TemplateDateModel dateModel) throws 
TemplateModelException {
+    public final String formatToPlainText(TemplateDateModel dateModel) throws 
TemplateException {
         final Date date = TemplateFormatUtil.getNonNullDate(dateModel);
         return format(
                 date,

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/impl/JavaTemplateDateFormat.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/impl/JavaTemplateDateFormat.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/impl/JavaTemplateDateFormat.java
index e30c2e4..98af84b 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/impl/JavaTemplateDateFormat.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/impl/JavaTemplateDateFormat.java
@@ -24,8 +24,8 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.TemplateDateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.valueformat.TemplateDateFormat;
 import org.apache.freemarker.core.valueformat.TemplateFormatUtil;
 import org.apache.freemarker.core.valueformat.UnparsableValueException;
@@ -42,7 +42,7 @@ class JavaTemplateDateFormat extends TemplateDateFormat {
     }
     
     @Override
-    public String formatToPlainText(TemplateDateModel dateModel) throws 
TemplateModelException {
+    public String formatToPlainText(TemplateDateModel dateModel) throws 
TemplateException {
         return 
javaDateFormat.format(TemplateFormatUtil.getNonNullDate(dateModel));
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/impl/JavaTemplateNumberFormat.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/impl/JavaTemplateNumberFormat.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/impl/JavaTemplateNumberFormat.java
index e3cdea0..a425d32 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/impl/JavaTemplateNumberFormat.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/valueformat/impl/JavaTemplateNumberFormat.java
@@ -20,7 +20,7 @@ package org.apache.freemarker.core.valueformat.impl;
 
 import java.text.NumberFormat;
 
-import org.apache.freemarker.core.model.TemplateModelException;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.TemplateNumberModel;
 import org.apache.freemarker.core.valueformat.TemplateFormatUtil;
 import org.apache.freemarker.core.valueformat.TemplateNumberFormat;
@@ -37,7 +37,8 @@ final class JavaTemplateNumberFormat extends 
TemplateNumberFormat {
     }
 
     @Override
-    public String formatToPlainText(TemplateNumberModel numberModel) throws 
UnformattableValueException, TemplateModelException {
+    public String formatToPlainText(TemplateNumberModel numberModel) throws 
UnformattableValueException,
+            TemplateException {
         Number number = TemplateFormatUtil.getNonNullNumber(numberModel);
         try {
             return javaNumberFormat.format(number);

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-core/src/main/javacc/FTL.jj
----------------------------------------------------------------------
diff --git a/freemarker-core/src/main/javacc/FTL.jj 
b/freemarker-core/src/main/javacc/FTL.jj
index 4a3295f..6d05ddd 100644
--- a/freemarker-core/src/main/javacc/FTL.jj
+++ b/freemarker-core/src/main/javacc/FTL.jj
@@ -361,7 +361,7 @@ public class FMParser {
         if (tm instanceof TemplateBooleanModel) {
             try {
                 return ((TemplateBooleanModel) tm).getAsBoolean();
-            } catch (TemplateModelException tme) {
+            } catch (TemplateException tme) {
             }
         }
         if (legacyCompat && tm instanceof TemplateScalarModel) {
@@ -3625,7 +3625,7 @@ ASTDirOutputFormat OutputFormat() :
         if (paramTM instanceof TemplateScalarModel) {
             try {
                 paramStr = ((TemplateScalarModel) paramTM).getAsString();
-            } catch (TemplateModelException e) {
+            } catch (TemplateException e) {
                    throw new ParseException(
                            "Could not evaluate expression (on parse-time): " + 
paramExp.getCanonicalForm()
                            + "\nUnderlying cause: " +  e,
@@ -4115,7 +4115,7 @@ void HeaderElement() :
                     if (value instanceof TemplateScalarModel) {
                         try {
                             vs = ((TemplateScalarModel) exp).getAsString();
-                        } catch (TemplateModelException tme) {}
+                        } catch (TemplateException tme) {}
                     }
                     if (template != null) {
                         if (ks.equalsIgnoreCase("encoding")) {
@@ -4190,7 +4190,7 @@ void HeaderElement() :
                                         throw new 
ParseException(iae.getMessage(), exp);
                                     }
                                 }
-                            } catch (TemplateModelException tme) {
+                            } catch (TemplateException tme) {
                             }
                         } else if (ks.equals("customSettings")) {
                             if (!(value instanceof TemplateHashModelEx)) {
@@ -4210,7 +4210,7 @@ void HeaderElement() :
                                         }
                                         
template.setHeaderCustomSetting(attName, (Serializable) attValue);
                                 }
-                            } catch (TemplateModelException tme) {
+                            } catch (TemplateException tme) {
                             }
                         } else {
                             StringBuilder sb = new StringBuilder();

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-dom/src/main/java/org/apache/freemarker/dom/DocumentModel.java
----------------------------------------------------------------------
diff --git 
a/freemarker-dom/src/main/java/org/apache/freemarker/dom/DocumentModel.java 
b/freemarker-dom/src/main/java/org/apache/freemarker/dom/DocumentModel.java
index 5a6f581..3d6a379 100644
--- a/freemarker-dom/src/main/java/org/apache/freemarker/dom/DocumentModel.java
+++ b/freemarker-dom/src/main/java/org/apache/freemarker/dom/DocumentModel.java
@@ -18,11 +18,11 @@
  */
  
 package org.apache.freemarker.dom;
- 
+
 import org.apache.freemarker.core.Environment;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.TemplateHashModel;
 import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 import org.w3c.dom.Document;
 import org.w3c.dom.NodeList;
 
@@ -45,7 +45,7 @@ class DocumentModel extends NodeModel implements 
TemplateHashModel {
     }
     
     @Override
-    public TemplateModel get(String key) throws TemplateModelException {
+    public TemplateModel get(String key) throws TemplateException {
         if (key.equals("*")) {
             return getRootElement();
         } else if (key.equals("**")) {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-dom/src/main/java/org/apache/freemarker/dom/DocumentTypeModel.java
----------------------------------------------------------------------
diff --git 
a/freemarker-dom/src/main/java/org/apache/freemarker/dom/DocumentTypeModel.java 
b/freemarker-dom/src/main/java/org/apache/freemarker/dom/DocumentTypeModel.java
index 3448f77..eb978fe 100644
--- 
a/freemarker-dom/src/main/java/org/apache/freemarker/dom/DocumentTypeModel.java
+++ 
b/freemarker-dom/src/main/java/org/apache/freemarker/dom/DocumentTypeModel.java
@@ -19,8 +19,8 @@
  
 package org.apache.freemarker.dom;
 
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.TemplateSequenceModel;
 import org.w3c.dom.DocumentType;
 import org.w3c.dom.ProcessingInstruction;
@@ -35,13 +35,13 @@ class DocumentTypeModel extends NodeModel {
         return ((ProcessingInstruction) node).getData();
     }
     
-    public TemplateSequenceModel getChildren() throws TemplateModelException {
-        throw new TemplateModelException("entering the child nodes of a DTD 
node is not currently supported");
+    public TemplateSequenceModel getChildren() throws TemplateException {
+        throw new TemplateException("Entering the child nodes of a DTD node is 
not currently supported");
     }
     
     @Override
-    public TemplateModel get(String key) throws TemplateModelException {
-        throw new TemplateModelException("accessing properties of a DTD is not 
currently supported");
+    public TemplateModel get(String key) throws TemplateException {
+        throw new TemplateException("Accessing properties of a DTD is not 
currently supported");
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-dom/src/main/java/org/apache/freemarker/dom/ElementModel.java
----------------------------------------------------------------------
diff --git 
a/freemarker-dom/src/main/java/org/apache/freemarker/dom/ElementModel.java 
b/freemarker-dom/src/main/java/org/apache/freemarker/dom/ElementModel.java
index 5e9de70..cfd0430 100644
--- a/freemarker-dom/src/main/java/org/apache/freemarker/dom/ElementModel.java
+++ b/freemarker-dom/src/main/java/org/apache/freemarker/dom/ElementModel.java
@@ -23,8 +23,8 @@ import java.util.Collections;
 
 import org.apache.freemarker.core.Environment;
 import org.apache.freemarker.core.Template;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.TemplateScalarModel;
 import org.apache.freemarker.core.model.TemplateSequenceModel;
 import org.apache.freemarker.core.model.impl.SimpleScalar;
@@ -57,7 +57,7 @@ class ElementModel extends NodeModel implements 
TemplateScalarModel {
      * The special key "/" returns the root document node associated with this 
element.
      */
     @Override
-    public TemplateModel get(String key) throws TemplateModelException {
+    public TemplateModel get(String key) throws TemplateException {
         if (key.equals("*")) {
             NodeListModel ns = new NodeListModel(this);
             TemplateSequenceModel children = getChildNodes();
@@ -128,7 +128,7 @@ class ElementModel extends NodeModel implements 
TemplateScalarModel {
     }
 
     @Override
-    public String getAsString() throws TemplateModelException {
+    public String getAsString() throws TemplateException {
         NodeList nl = node.getChildNodes();
         String result = "";
         for (int i = 0; i < nl.getLength(); i++) {
@@ -139,7 +139,7 @@ class ElementModel extends NodeModel implements 
TemplateScalarModel {
                              + "\nThis element with name \""
                              + node.getNodeName()
                              + "\" has a child element named: " + 
child.getNodeName();
-                throw new TemplateModelException(msg);
+                throw new TemplateException(msg);
             } else if (nodeType == Node.TEXT_NODE || nodeType == 
Node.CDATA_SECTION_NODE) {
                 result += child.getNodeValue();
             }
@@ -203,7 +203,7 @@ class ElementModel extends NodeModel implements 
TemplateScalarModel {
         return result;
     }
     
-    private boolean isSignificantNode(Node node) throws TemplateModelException 
{
+    private boolean isSignificantNode(Node node) throws TemplateException {
         return (node.getNodeType() == Node.TEXT_NODE || node.getNodeType() == 
Node.CDATA_SECTION_NODE)
                 ? !isBlankXMLText(node.getTextContent())
                 : node.getNodeType() != Node.PROCESSING_INSTRUCTION_NODE && 
node.getNodeType() != Node.COMMENT_NODE;

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-dom/src/main/java/org/apache/freemarker/dom/JaxenXPathSupport.java
----------------------------------------------------------------------
diff --git 
a/freemarker-dom/src/main/java/org/apache/freemarker/dom/JaxenXPathSupport.java 
b/freemarker-dom/src/main/java/org/apache/freemarker/dom/JaxenXPathSupport.java
index 3e52836..4b3fb2f 100644
--- 
a/freemarker-dom/src/main/java/org/apache/freemarker/dom/JaxenXPathSupport.java
+++ 
b/freemarker-dom/src/main/java/org/apache/freemarker/dom/JaxenXPathSupport.java
@@ -38,7 +38,6 @@ import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.TemplateBooleanModel;
 import org.apache.freemarker.core.model.TemplateDateModel;
 import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.TemplateNumberModel;
 import org.apache.freemarker.core.model.TemplateScalarModel;
 import org.apache.freemarker.core.util.UndeclaredThrowableException;
@@ -76,7 +75,7 @@ class JaxenXPathSupport implements XPathSupport {
     private final static ArrayList EMPTY_ARRAYLIST = new ArrayList();
 
     @Override
-    public TemplateModel executeQuery(Object context, String xpathQuery) 
throws TemplateModelException {
+    public TemplateModel executeQuery(Object context, String xpathQuery) 
throws TemplateException {
         try {
             BaseXPath xpath;
             Map<String, BaseXPath> xpathCache = 
Environment.getCurrentEnvironmentNotNull().getCurrentTemplateNotNull()
@@ -100,12 +99,12 @@ class JaxenXPathSupport implements XPathSupport {
             return nlm;
         } catch (UndeclaredThrowableException e) {
             Throwable t  = e.getUndeclaredThrowable();
-            if (t instanceof TemplateModelException) {
-                throw (TemplateModelException) t;
+            if (t instanceof TemplateException) {
+                throw (TemplateException) t;
             }
             throw e;
-        } catch (JaxenException je) {
-            throw new TemplateModelException(je);
+        } catch (JaxenException e) {
+            throw new TemplateException(e);
         }
     }
 
@@ -141,7 +140,7 @@ class JaxenXPathSupport implements XPathSupport {
                 if (model instanceof TemplateBooleanModel) {
                     return Boolean.valueOf(((TemplateBooleanModel) 
model).getAsBoolean());
                 }
-            } catch (TemplateModelException e) {
+            } catch (TemplateException e) {
                 throw new UndeclaredThrowableException(e);
             }
             throw new UnresolvableException(

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeListModel.java
----------------------------------------------------------------------
diff --git 
a/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeListModel.java 
b/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeListModel.java
index ab7d701..3f60482 100644
--- a/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeListModel.java
+++ b/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeListModel.java
@@ -24,12 +24,12 @@ import java.util.List;
 
 import org.apache.freemarker.core.Configuration;
 import org.apache.freemarker.core.Environment;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core._UnexpectedTypeErrorExplainerTemplateModel;
 import org.apache.freemarker.core.model.TemplateBooleanModel;
 import org.apache.freemarker.core.model.TemplateDateModel;
 import org.apache.freemarker.core.model.TemplateHashModel;
 import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.TemplateNodeModel;
 import org.apache.freemarker.core.model.TemplateNumberModel;
 import org.apache.freemarker.core.model.TemplateScalarModel;
@@ -84,7 +84,7 @@ class NodeListModel extends SimpleSequence implements 
TemplateHashModel, _Unexpe
         this.contextNode = contextNode;
     }
     
-    NodeListModel filterByName(String name) throws TemplateModelException {
+    NodeListModel filterByName(String name) throws TemplateException {
         NodeListModel result = new NodeListModel(contextNode);
         int size = size();
         if (size == 0) {
@@ -108,7 +108,7 @@ class NodeListModel extends SimpleSequence implements 
TemplateHashModel, _Unexpe
     }
     
     @Override
-    public TemplateModel get(String key) throws TemplateModelException {
+    public TemplateModel get(String key) throws TemplateException {
         if (size() == 1) {
             NodeModel nm = (NodeModel) get(0);
             return nm.get(key);
@@ -127,13 +127,13 @@ class NodeListModel extends SimpleSequence implements 
TemplateHashModel, _Unexpe
             } else if (key.length() != 2 /* to allow "@@" to fall through */) {
                 // As @@... would cause exception in the XPath engine, we 
throw a nicer exception now. 
                 if (AtAtKey.containsKey(key)) {
-                    throw new TemplateModelException(
+                    throw new TemplateException(
                             "\"" + key + "\" is only applicable to a single 
XML node, but it was applied on "
                             + (size() != 0
                                     ? size() + " XML nodes (multiple matches)."
                                     : "an empty list of XML nodes (no 
matches)."));
                 } else {
-                    throw new TemplateModelException("Unsupported @@ key: " + 
key);
+                    throw new TemplateException("Unsupported @@ key: " + key);
                 }
             }
         }
@@ -164,13 +164,13 @@ class NodeListModel extends SimpleSequence implements 
TemplateHashModel, _Unexpe
             Object context = (size() == 0) ? null : rawNodeList(); 
             return xps.executeQuery(context, key);
         } else {
-            throw new TemplateModelException(
+            throw new TemplateException(
                     "Can't try to resolve the XML query key, because no XPath 
support is available. "
                     + "This is either malformed or an XPath expression: " + 
key);
         }
     }
     
-    private List rawNodeList() throws TemplateModelException {
+    private List rawNodeList() throws TemplateException {
         int size = size();
         ArrayList al = new ArrayList(size);
         for (int i = 0; i < size; i++) {
@@ -179,7 +179,7 @@ class NodeListModel extends SimpleSequence implements 
TemplateHashModel, _Unexpe
         return al;
     }
     
-    XPathSupport getXPathSupport() throws TemplateModelException {
+    XPathSupport getXPathSupport() throws TemplateException {
         if (xpathSupport == null) {
             if (contextNode != null) {
                 xpathSupport = contextNode.getXPathSupport();

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeModel.java
----------------------------------------------------------------------
diff --git 
a/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeModel.java 
b/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeModel.java
index 2a2dd04..f6c4d38 100644
--- a/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeModel.java
+++ b/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeModel.java
@@ -27,13 +27,13 @@ import java.util.Map;
 import java.util.WeakHashMap;
 
 import org.apache.freemarker.core.Configuration;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core._UnexpectedTypeErrorExplainerTemplateModel;
 import org.apache.freemarker.core.model.AdapterTemplateModel;
 import org.apache.freemarker.core.model.TemplateBooleanModel;
 import org.apache.freemarker.core.model.TemplateDateModel;
 import org.apache.freemarker.core.model.TemplateHashModel;
 import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.TemplateNodeModel;
 import org.apache.freemarker.core.model.TemplateNodeModelEx;
 import org.apache.freemarker.core.model.TemplateNumberModel;
@@ -111,7 +111,7 @@ abstract public class NodeModel implements 
TemplateNodeModelEx, TemplateHashMode
     }
     
     @Override
-    public TemplateModel get(String key) throws TemplateModelException {
+    public TemplateModel get(String key) throws TemplateException {
         if (key.startsWith("@@")) {
             if (key.equals(AtAtKey.TEXT.getKey())) {
                 return new SimpleScalar(getText(node));
@@ -140,10 +140,10 @@ abstract public class NodeModel implements 
TemplateNodeModelEx, TemplateHashMode
             } else {
                 // As @@... would cause exception in the XPath engine, we 
throw a nicer exception now. 
                 if (AtAtKey.containsKey(key)) {
-                    throw new TemplateModelException(
+                    throw new TemplateException(
                             "\"" + key + "\" is not supported for an XML node 
of type \"" + getNodeType() + "\".");
                 } else {
-                    throw new TemplateModelException("Unsupported @@ key: " + 
key);
+                    throw new TemplateException("Unsupported @@ key: " + key);
                 }
             }
         } else {
@@ -151,7 +151,7 @@ abstract public class NodeModel implements 
TemplateNodeModelEx, TemplateHashMode
             if (xps != null) {
                 return xps.executeQuery(node, key);
             } else {
-                throw new TemplateModelException(
+                throw new TemplateException(
                         "Can't try to resolve the XML query key, because no 
XPath support is available. "
                         + "This is either malformed or an XPath expression: " 
+ key);
             }
@@ -173,12 +173,12 @@ abstract public class NodeModel implements 
TemplateNodeModelEx, TemplateHashMode
     }
 
     @Override
-    public TemplateNodeModelEx getPreviousSibling() throws 
TemplateModelException {
+    public TemplateNodeModelEx getPreviousSibling() throws TemplateException {
         return wrap(node.getPreviousSibling());
     }
 
     @Override
-    public TemplateNodeModelEx getNextSibling() throws TemplateModelException {
+    public TemplateNodeModelEx getNextSibling() throws TemplateException {
         return wrap(node.getNextSibling());
     }
 
@@ -191,7 +191,7 @@ abstract public class NodeModel implements 
TemplateNodeModelEx, TemplateHashMode
     }
     
     @Override
-    public final String getNodeType() throws TemplateModelException {
+    public final String getNodeType() throws TemplateException {
         short nodeType = node.getNodeType();
         switch (nodeType) {
             case Node.ATTRIBUTE_NODE : return "attribute";
@@ -207,20 +207,7 @@ abstract public class NodeModel implements 
TemplateNodeModelEx, TemplateHashMode
             case Node.PROCESSING_INSTRUCTION_NODE : return "pi";
             case Node.TEXT_NODE : return "text";
         }
-        throw new TemplateModelException("Unknown node type: " + nodeType + ". 
This should be impossible!");
-    }
-    
-    public TemplateModel exec(List args) throws TemplateModelException {
-        if (args.size() != 1) {
-            throw new TemplateModelException("Expecting exactly one 
arguments");
-        }
-        String query = (String) args.get(0);
-        // Now, we try to behave as if this is an XPath expression
-        XPathSupport xps = getXPathSupport();
-        if (xps == null) {
-            throw new TemplateModelException("No XPath support available");
-        }
-        return xps.executeQuery(node, query);
+        throw new TemplateException("Unknown node type: " + nodeType + ". This 
should be impossible!");
     }
     
     /**
@@ -579,7 +566,7 @@ abstract public class NodeModel implements 
TemplateNodeModelEx, TemplateHashMode
     }
     
     
-    String getQualifiedName() throws TemplateModelException {
+    String getQualifiedName() throws TemplateException {
         return getNodeName();
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeQueryResultItemObjectWrapper.java
----------------------------------------------------------------------
diff --git 
a/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeQueryResultItemObjectWrapper.java
 
b/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeQueryResultItemObjectWrapper.java
index e84e977..20a8662 100644
--- 
a/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeQueryResultItemObjectWrapper.java
+++ 
b/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeQueryResultItemObjectWrapper.java
@@ -21,11 +21,11 @@ package org.apache.freemarker.dom;
 
 import org.apache.freemarker.core.Environment;
 import org.apache.freemarker.core.model.ObjectWrapper;
+import org.apache.freemarker.core.model.ObjectWrappingException;
 import org.apache.freemarker.core.model.TemplateBooleanModel;
 import org.apache.freemarker.core.model.TemplateDateModel;
 import org.apache.freemarker.core.model.TemplateModel;
 import org.apache.freemarker.core.model.TemplateModelAdapter;
-import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.WrappingTemplateModel;
 import org.apache.freemarker.core.model.impl.SimpleDate;
 import org.apache.freemarker.core.model.impl.SimpleNumber;
@@ -47,7 +47,7 @@ class NodeQueryResultItemObjectWrapper implements 
ObjectWrapper {
     }
 
     @Override
-    public TemplateModel wrap(Object obj) throws TemplateModelException {
+    public TemplateModel wrap(Object obj) throws ObjectWrappingException {
         if (obj instanceof NodeModel) {
             return (NodeModel) obj;
         }
@@ -85,7 +85,7 @@ class NodeQueryResultItemObjectWrapper implements 
ObjectWrapper {
                 }
                 return new SimpleDate((java.util.Date) obj, 
TemplateDateModel.UNKNOWN);
             }
-            throw new TemplateModelException("Don't know how to wrap a W3C DOM 
query result item of this type: "
+            throw new ObjectWrappingException("Don't know how to wrap a W3C 
DOM query result item of this type: "
                     + obj.getClass().getName());
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-dom/src/main/java/org/apache/freemarker/dom/SunInternalXalanXPathSupport.java
----------------------------------------------------------------------
diff --git 
a/freemarker-dom/src/main/java/org/apache/freemarker/dom/SunInternalXalanXPathSupport.java
 
b/freemarker-dom/src/main/java/org/apache/freemarker/dom/SunInternalXalanXPathSupport.java
index 991c93f..20fd66e 100644
--- 
a/freemarker-dom/src/main/java/org/apache/freemarker/dom/SunInternalXalanXPathSupport.java
+++ 
b/freemarker-dom/src/main/java/org/apache/freemarker/dom/SunInternalXalanXPathSupport.java
@@ -25,9 +25,9 @@ import javax.xml.transform.TransformerException;
 
 import org.apache.freemarker.core.Environment;
 import org.apache.freemarker.core.Template;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.TemplateBooleanModel;
 import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.impl.SimpleNumber;
 import org.apache.freemarker.core.model.impl.SimpleScalar;
 import org.w3c.dom.Node;
@@ -60,25 +60,25 @@ class SunInternalXalanXPathSupport implements XPathSupport {
             = "Cannot perform an XPath query against an empty node set." + 
ERRMSG_RECOMMEND_JAXEN;
     
     @Override
-    synchronized public TemplateModel executeQuery(Object context, String 
xpathQuery) throws TemplateModelException {
+    synchronized public TemplateModel executeQuery(Object context, String 
xpathQuery) throws TemplateException {
         if (!(context instanceof Node)) {
             if (context != null) {
                 if (isNodeList(context)) {
                     int cnt = ((List) context).size();
                     if (cnt != 0) {
-                        throw new TemplateModelException(
+                        throw new TemplateException(
                                 "Cannot perform an XPath query against a node 
set of " + cnt
                                 + " nodes. Expecting a single node." + 
ERRMSG_RECOMMEND_JAXEN);
                     } else {
-                        throw new 
TemplateModelException(ERRMSG_EMPTY_NODE_SET);
+                        throw new TemplateException(ERRMSG_EMPTY_NODE_SET);
                     }
                 } else {
-                    throw new TemplateModelException(
+                    throw new TemplateException(
                             "Cannot perform an XPath query against a " + 
context.getClass().getName()
                             + ". Expecting a single org.w3c.dom.Node.");
                 }
             } else {
-                throw new TemplateModelException(ERRMSG_EMPTY_NODE_SET);
+                throw new TemplateException(ERRMSG_EMPTY_NODE_SET);
             }
         }
         Node node = (Node) context;
@@ -111,9 +111,9 @@ class SunInternalXalanXPathSupport implements XPathSupport {
             if (xresult instanceof XNumber) {
                 return new SimpleNumber(Double.valueOf(((XNumber) 
xresult).num()));
             }
-            throw new TemplateModelException("Cannot deal with type: " + 
xresult.getClass().getName());
+            throw new TemplateException("Cannot deal with type: " + 
xresult.getClass().getName());
         } catch (TransformerException te) {
-            throw new TemplateModelException(te);
+            throw new TemplateException(te);
         }
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-dom/src/main/java/org/apache/freemarker/dom/XPathSupport.java
----------------------------------------------------------------------
diff --git 
a/freemarker-dom/src/main/java/org/apache/freemarker/dom/XPathSupport.java 
b/freemarker-dom/src/main/java/org/apache/freemarker/dom/XPathSupport.java
index e94d391..b2f32fd 100644
--- a/freemarker-dom/src/main/java/org/apache/freemarker/dom/XPathSupport.java
+++ b/freemarker-dom/src/main/java/org/apache/freemarker/dom/XPathSupport.java
@@ -19,12 +19,12 @@
  
 package org.apache.freemarker.dom;
 
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 
 public interface XPathSupport {
     
     // [2.4] Add argument to pass down the ObjectWrapper to use 
-    TemplateModel executeQuery(Object context, String xpathQuery) throws 
TemplateModelException;
+    TemplateModel executeQuery(Object context, String xpathQuery) throws 
TemplateException;
     
 }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-dom/src/main/java/org/apache/freemarker/dom/XalanXPathSupport.java
----------------------------------------------------------------------
diff --git 
a/freemarker-dom/src/main/java/org/apache/freemarker/dom/XalanXPathSupport.java 
b/freemarker-dom/src/main/java/org/apache/freemarker/dom/XalanXPathSupport.java
index 99a4249..67640d4 100644
--- 
a/freemarker-dom/src/main/java/org/apache/freemarker/dom/XalanXPathSupport.java
+++ 
b/freemarker-dom/src/main/java/org/apache/freemarker/dom/XalanXPathSupport.java
@@ -25,9 +25,9 @@ import javax.xml.transform.TransformerException;
 
 import org.apache.freemarker.core.Environment;
 import org.apache.freemarker.core.Template;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.TemplateBooleanModel;
 import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.impl.SimpleNumber;
 import org.apache.freemarker.core.model.impl.SimpleScalar;
 import org.apache.xml.utils.PrefixResolver;
@@ -60,25 +60,25 @@ class XalanXPathSupport implements XPathSupport {
             = "Cannot perform an XPath query against an empty node set."; /* " 
+ ERRMSG_RECOMMEND_JAXEN;*/
     
     @Override
-    synchronized public TemplateModel executeQuery(Object context, String 
xpathQuery) throws TemplateModelException {
+    synchronized public TemplateModel executeQuery(Object context, String 
xpathQuery) throws TemplateException {
         if (!(context instanceof Node)) {
             if (context != null) {
                 if (isNodeList(context)) {
                     int cnt = ((List) context).size();
                     if (cnt != 0) {
-                        throw new TemplateModelException(
+                        throw new TemplateException(
                                 "Cannot perform an XPath query against a node 
set of " + cnt
                                 + " nodes. Expecting a single node."/* " + 
ERRMSG_RECOMMEND_JAXEN*/);
                     } else {
-                        throw new 
TemplateModelException(ERRMSG_EMPTY_NODE_SET);
+                        throw new TemplateException(ERRMSG_EMPTY_NODE_SET);
                     }
                 } else {
-                    throw new TemplateModelException(
+                    throw new TemplateException(
                             "Cannot perform an XPath query against a " + 
context.getClass().getName()
                             + ". Expecting a single org.w3c.dom.Node.");
                 }
             } else {
-                throw new TemplateModelException(ERRMSG_EMPTY_NODE_SET);
+                throw new TemplateException(ERRMSG_EMPTY_NODE_SET);
             }
         }
         Node node = (Node) context;
@@ -111,9 +111,9 @@ class XalanXPathSupport implements XPathSupport {
             if (xresult instanceof XNumber) {
                 return new SimpleNumber(Double.valueOf(((XNumber) 
xresult).num()));
             }
-            throw new TemplateModelException("Cannot deal with type: " + 
xresult.getClass().getName());
+            throw new TemplateException("Cannot deal with type: " + 
xresult.getClass().getName());
         } catch (TransformerException te) {
-            throw new TemplateModelException(te);
+            throw new TemplateException(te);
         }
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/BaseNTemplateNumberFormatFactory.java
----------------------------------------------------------------------
diff --git 
a/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/BaseNTemplateNumberFormatFactory.java
 
b/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/BaseNTemplateNumberFormatFactory.java
index a670b62..df15635 100644
--- 
a/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/BaseNTemplateNumberFormatFactory.java
+++ 
b/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/BaseNTemplateNumberFormatFactory.java
@@ -21,7 +21,7 @@ package org.apache.freemarker.manual.examples;
 import java.util.Locale;
 
 import org.apache.freemarker.core.Environment;
-import org.apache.freemarker.core.model.TemplateModelException;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.TemplateNumberModel;
 import org.apache.freemarker.core.util._NumberUtils;
 import org.apache.freemarker.core.util._StringUtils;
@@ -98,7 +98,7 @@ public class BaseNTemplateNumberFormatFactory extends 
TemplateNumberFormatFactor
         
         @Override
         public String formatToPlainText(TemplateNumberModel numberModel)
-                throws TemplateModelException, TemplateValueFormatException {
+                throws TemplateException, TemplateValueFormatException {
             Number n = TemplateFormatUtil.getNonNullNumber(numberModel);
             try {
                 return Integer.toString(_NumberUtils.toIntExact(n), base);

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/UnitAwareTemplateNumberFormatFactory.java
----------------------------------------------------------------------
diff --git 
a/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/UnitAwareTemplateNumberFormatFactory.java
 
b/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/UnitAwareTemplateNumberFormatFactory.java
index 2b50654..dcc26bd 100644
--- 
a/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/UnitAwareTemplateNumberFormatFactory.java
+++ 
b/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/UnitAwareTemplateNumberFormatFactory.java
@@ -21,7 +21,7 @@ package org.apache.freemarker.manual.examples;
 import java.util.Locale;
 
 import org.apache.freemarker.core.Environment;
-import org.apache.freemarker.core.model.TemplateModelException;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.TemplateNumberModel;
 import org.apache.freemarker.core.valueformat.TemplateNumberFormat;
 import org.apache.freemarker.core.valueformat.TemplateNumberFormatFactory;
@@ -58,7 +58,7 @@ public class UnitAwareTemplateNumberFormatFactory extends 
TemplateNumberFormatFa
 
         @Override
         public String formatToPlainText(TemplateNumberModel numberModel)
-                throws TemplateModelException, TemplateValueFormatException {
+                throws TemplateException, TemplateValueFormatException {
             String innerResult = innerFormat.formatToPlainText(numberModel);
             return numberModel instanceof UnitAwareTemplateNumberModel
                     ? innerResult + " " + ((UnitAwareTemplateNumberModel) 
numberModel).getUnit()

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/UnitAwareTemplateNumberModel.java
----------------------------------------------------------------------
diff --git 
a/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/UnitAwareTemplateNumberModel.java
 
b/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/UnitAwareTemplateNumberModel.java
index 65105c6..b81f913 100644
--- 
a/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/UnitAwareTemplateNumberModel.java
+++ 
b/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/UnitAwareTemplateNumberModel.java
@@ -18,7 +18,7 @@
  */
 package org.apache.freemarker.manual.examples;
 
-import org.apache.freemarker.core.model.TemplateModelException;
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.TemplateNumberModel;
 
 public class UnitAwareTemplateNumberModel implements TemplateNumberModel {
@@ -32,7 +32,7 @@ public class UnitAwareTemplateNumberModel implements 
TemplateNumberModel {
     }
 
     @Override
-    public Number getAsNumber() throws TemplateModelException {
+    public Number getAsNumber() throws TemplateException {
         return value;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/AllHttpScopesHashModel.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/AllHttpScopesHashModel.java
 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/AllHttpScopesHashModel.java
index 207f18a..819458a 100644
--- 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/AllHttpScopesHashModel.java
+++ 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/AllHttpScopesHashModel.java
@@ -26,9 +26,9 @@ import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.ObjectWrapper;
 import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.impl.SimpleHash;
 
 /**
@@ -74,7 +74,7 @@ public class AllHttpScopesHashModel extends SimpleHash {
     }
 
     @Override
-    public TemplateModel get(String key) throws TemplateModelException {
+    public TemplateModel get(String key) throws TemplateException {
         // Lookup in page scope
         TemplateModel model = super.get(key);
         if (model != null) {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
index 2121720..1e484fc 100644
--- 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
+++ 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
@@ -53,7 +53,6 @@ import org.apache.freemarker.core.TemplateNotFoundException;
 import org.apache.freemarker.core.model.ObjectWrapper;
 import org.apache.freemarker.core.model.ObjectWrapperAndUnwrapper;
 import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.impl.SimpleHash;
 import org.apache.freemarker.core.outputformat.OutputFormat;
 import org.apache.freemarker.core.outputformat.impl.UndefinedOutputFormat;
@@ -916,7 +915,7 @@ public class FreemarkerServlet extends HttpServlet {
     protected TemplateModel createModel(ObjectWrapperAndUnwrapper 
objectWrapper,
                                         ServletContext servletContext,
                                         final HttpServletRequest request,
-                                        final HttpServletResponse response) 
throws TemplateModelException {
+                                        final HttpServletResponse response) 
throws TemplateException {
         try {
             AllHttpScopesHashModel params = new 
AllHttpScopesHashModel(objectWrapper, servletContext, request);
 
@@ -984,9 +983,9 @@ public class FreemarkerServlet extends HttpServlet {
             params.putUnlistedModel(KEY_REQUEST_PARAMETERS, 
requestParametersModel);
             return params;
         } catch (ServletException e) {
-            throw new TemplateModelException(e);
+            throw new TemplateException(e);
         } catch (IOException e) {
-            throw new TemplateModelException(e);
+            throw new TemplateException(e);
         }
     }
 
@@ -997,7 +996,7 @@ public class FreemarkerServlet extends HttpServlet {
      */
     @SuppressWarnings("unchecked")
     protected TaglibFactory createTaglibFactory(ObjectWrapper objectWrapper, 
ServletContext servletContext)
-            throws TemplateModelException {
+            throws TemplateException {
 
         List<MetaInfTldSource> metaInfTldSourcesFromSysProp = null;
         try {
@@ -1006,7 +1005,7 @@ public class FreemarkerServlet extends HttpServlet {
                     ? 
TaglibFactory.parseMetaInfTldLocations(InitParamParser.parseCommaSeparatedList(prop))
                     : Collections.emptyList());
         } catch (ParseException e) {
-            throw new TemplateModelException(
+            throw new TemplateException(
                     "Failed to parse system property \"" + 
SYSTEM_PROPERTY_META_INF_TLD_SOURCES + "\"", e);
         }
 
@@ -1030,7 +1029,7 @@ public class FreemarkerServlet extends HttpServlet {
             classpathTldsFromSysProp = (prop != null) ? 
InitParamParser.parseCommaSeparatedList(prop)
                     : Collections.<String>emptyList();
         } catch (ParseException e) {
-            throw new TemplateModelException(
+            throw new TemplateException(
                     "Failed to parse system property \"" + 
SYSTEM_PROPERTY_CLASSPATH_TLDS + "\"", e);
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/HttpRequestHashModel.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/HttpRequestHashModel.java
 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/HttpRequestHashModel.java
index a14bbc2..cb6ee96 100644
--- 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/HttpRequestHashModel.java
+++ 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/HttpRequestHashModel.java
@@ -25,12 +25,12 @@ import java.util.Enumeration;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.ObjectWrapper;
 import org.apache.freemarker.core.model.ObjectWrapperAndUnwrapper;
 import org.apache.freemarker.core.model.TemplateCollectionModel;
 import org.apache.freemarker.core.model.TemplateHashModelEx;
 import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.impl.SimpleCollection;
 
 /**
@@ -57,7 +57,7 @@ public final class HttpRequestHashModel implements 
TemplateHashModelEx {
     }
     
     @Override
-    public TemplateModel get(String key) throws TemplateModelException {
+    public TemplateModel get(String key) throws TemplateException {
         return wrapper.wrap(request.getAttribute(key));
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d73da6da/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/HttpSessionHashModel.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/HttpSessionHashModel.java
 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/HttpSessionHashModel.java
index 469dc29..1a0ff52 100644
--- 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/HttpSessionHashModel.java
+++ 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/HttpSessionHashModel.java
@@ -26,10 +26,10 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
+import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.ObjectWrapper;
 import org.apache.freemarker.core.model.TemplateHashModel;
 import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
 
 /**
  * TemplateHashModel wrapper for a HttpSession attributes.
@@ -78,12 +78,12 @@ public final class HttpSessionHashModel implements 
TemplateHashModel, Serializab
     }
 
     @Override
-    public TemplateModel get(String key) throws TemplateModelException {
+    public TemplateModel get(String key) throws TemplateException {
         checkSessionExistence();
         return wrapper.wrap(session != null ? session.getAttribute(key) : 
null);
     }
 
-    private void checkSessionExistence() throws TemplateModelException {
+    private void checkSessionExistence() throws TemplateException {
         if (session == null && request != null) {
             session = request.getSession(false);
             if (session != null && servlet != null) {
@@ -96,7 +96,7 @@ public final class HttpSessionHashModel implements 
TemplateHashModel, Serializab
                 } catch (RuntimeException e) {
                     throw e;
                 } catch (Exception e) {
-                    throw new TemplateModelException(e);
+                    throw new TemplateException(e);
                 }
             }
         }
@@ -108,7 +108,7 @@ public final class HttpSessionHashModel implements 
TemplateHashModel, Serializab
     }
 
     @Override
-    public boolean isEmpty() throws TemplateModelException {
+    public boolean isEmpty() throws TemplateException {
         checkSessionExistence();
         return session == null || 
!session.getAttributeNames().hasMoreElements();
     }


Reply via email to