diff --git a/ChangeLog b/ChangeLog
index 99136d3..7ece677 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2016-08-25  Harry Metske (metskem@apache.org)
+
+       * 2.10.3-svn-14
+
+       * Fixed JSPWIKI-1031 provide stacktrace when throwing InternalWikiException, fix by Jürgen Weber.
+
 2016-08-18  Harry Metske (metskem@apache.org)
 
        * 2.10.3-svn-13
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/InternalWikiException.java b/jspwiki-war/src/main/java/org/apache/wiki/InternalWikiException.java
index c166f4f..0dd9b32 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/InternalWikiException.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/InternalWikiException.java
@@ -38,4 +38,16 @@
     {
         super( msg );
     }
+
+	public InternalWikiException(String message, Throwable cause)
+	{
+		super(message, cause);
+	}
+
+	public InternalWikiException(Throwable cause)
+	{
+		super(cause);
+	}
+    
+    
 }
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/ReferenceManager.java b/jspwiki-war/src/main/java/org/apache/wiki/ReferenceManager.java
index 63d99f5..74682da 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/ReferenceManager.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/ReferenceManager.java
@@ -412,7 +412,7 @@
         }
         catch (UnsupportedEncodingException e)
         {
-            throw new InternalWikiException("AAAAGH!  UTF-8 is gone!  My eyes!  It burns...!");
+            throw new InternalWikiException("AAAAGH!  UTF-8 is gone!  My eyes!  It burns...!", e);
         }
 
         return TextUtil.toHexString(dig)+".cache";
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/Release.java b/jspwiki-war/src/main/java/org/apache/wiki/Release.java
index e6bb027..246f335 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/Release.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/Release.java
@@ -72,7 +72,7 @@
      *  <p>
      *  If the build identifier is empty, it is not added.
      */
-    public static final String     BUILD         = "13";
+    public static final String     BUILD         = "14";
 
     /**
      *  This is the generic version string you should use when printing out the version.  It is of 
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/WikiBackgroundThread.java b/jspwiki-war/src/main/java/org/apache/wiki/WikiBackgroundThread.java
index 21f6faa..636e57a 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/WikiBackgroundThread.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/WikiBackgroundThread.java
@@ -141,7 +141,7 @@
             shutdownTask();
         } catch( Throwable t ) {
             LOG.error( "Background thread error: (stack trace follows)", t );
-            throw new InternalWikiException( t.getMessage() );
+            throw new InternalWikiException( t.getMessage() ,t);
         }
     }
     
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/WikiEngine.java b/jspwiki-war/src/main/java/org/apache/wiki/WikiEngine.java
index a253653..f17fa78 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/WikiEngine.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/WikiEngine.java
@@ -378,7 +378,7 @@
             {
                 context.log( "ERROR: Failed to create a Wiki engine: "+e.getMessage() );
                 log.error( "ERROR: Failed to create a Wiki engine, stacktrace follows " , e);
-                throw new InternalWikiException( "No wiki engine, check logs." );
+                throw new InternalWikiException( "No wiki engine, check logs." , e);
             }
 
         }
@@ -1280,7 +1280,7 @@
         }
         catch( UnsupportedEncodingException e )
         {
-            throw new InternalWikiException( "ISO-8859-1 not a supported encoding!?!  Your platform is borked." );
+            throw new InternalWikiException( "ISO-8859-1 not a supported encoding!?!  Your platform is borked." , e);
         }
     }
 
@@ -1300,7 +1300,7 @@
         }
         catch( UnsupportedEncodingException e )
         {
-            throw new InternalWikiException("ISO-8859-1 not a supported encoding!?!  Your platform is borked.");
+            throw new InternalWikiException("ISO-8859-1 not a supported encoding!?!  Your platform is borked.", e);
         }
     }
 
@@ -2365,7 +2365,7 @@
             catch ( WikiException we )
             {
                 log.fatal( "unable to instantiate class for AclManager: " + we.getMessage() );
-                throw new InternalWikiException("Cannot instantiate AclManager, please check logs.");
+                throw new InternalWikiException("Cannot instantiate AclManager, please check logs.", we);
             }
         }
         return m_aclManager;
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/auth/SecurityVerifier.java b/jspwiki-war/src/main/java/org/apache/wiki/auth/SecurityVerifier.java
index ef2a5b1..c90c505 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/auth/SecurityVerifier.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/auth/SecurityVerifier.java
@@ -429,7 +429,7 @@
             // If we couldn't evaluate constraints it means
             // there's some sort of IO mess or parsing issue
             LOG.error( "Malformed XML in web.xml", e );
-            throw new InternalWikiException( e.getClass().getName() + ": " + e.getMessage() );
+            throw new InternalWikiException( e.getClass().getName() + ": " + e.getMessage() , e);
         }
 
         s.append( "</tbody>\n" );
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/auth/authorize/WebContainerAuthorizer.java b/jspwiki-war/src/main/java/org/apache/wiki/auth/authorize/WebContainerAuthorizer.java
index 1d72aa8..6e58ab4 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/auth/authorize/WebContainerAuthorizer.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/auth/authorize/WebContainerAuthorizer.java
@@ -121,12 +121,12 @@
         catch ( IOException e )
         {
             log.error("Initialization failed: ",e);
-            throw new InternalWikiException( e.getClass().getName()+": "+e.getMessage() );
+            throw new InternalWikiException( e.getClass().getName()+": "+e.getMessage() , e);
         }
         catch ( JDOMException e )
         {
             log.error("Malformed XML in web.xml",e);
-            throw new InternalWikiException( e.getClass().getName()+": "+e.getMessage() );
+            throw new InternalWikiException( e.getClass().getName()+": "+e.getMessage() , e);
         }
 
         if ( m_containerRoles.length > 0 )
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/filters/SpamFilter.java b/jspwiki-war/src/main/java/org/apache/wiki/filters/SpamFilter.java
index 3659cb2..1352350 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/filters/SpamFilter.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/filters/SpamFilter.java
@@ -275,7 +275,7 @@
             m_urlPattern = m_compiler.compile( URL_REGEXP );
         } catch( MalformedPatternException e ) {
             log.fatal( "Internal error: Someone put in a faulty pattern.", e );
-            throw new InternalWikiException( "Faulty pattern." );
+            throw new InternalWikiException( "Faulty pattern." , e);
         }
 
         m_akismetAPIKey = TextUtil.getStringProperty( properties,
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/parser/JSPWikiMarkupParser.java b/jspwiki-war/src/main/java/org/apache/wiki/parser/JSPWikiMarkupParser.java
index 3787496..ce62e07 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/parser/JSPWikiMarkupParser.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/parser/JSPWikiMarkupParser.java
@@ -308,7 +308,7 @@
             catch( MalformedPatternException e )
             {
                 log.fatal("Internal error: Someone put in a faulty pattern.",e);
-                throw new InternalWikiException("Faulty camelcasepattern in TranslatorReader");
+                throw new InternalWikiException("Faulty camelcasepattern in TranslatorReader", e);
             }
             m_engine.setAttribute( CAMELCASE_PATTERN, m_camelCasePattern );
         }
@@ -1149,7 +1149,7 @@
         catch( IOException e )
         {
             log.fatal("CleanTranslator not working", e);
-            throw new InternalWikiException("CleanTranslator not working as expected, when cleaning title"+ e.getMessage() );
+            throw new InternalWikiException("CleanTranslator not working as expected, when cleaning title"+ e.getMessage() , e);
         }
 
         return outTitle;
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/parser/PluginContent.java b/jspwiki-war/src/main/java/org/apache/wiki/parser/PluginContent.java
index 83b110a..f21a2de 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/parser/PluginContent.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/parser/PluginContent.java
@@ -270,7 +270,7 @@
             }
         } catch (ClassCastException e) {
             log.error("Invalid type offered in parsing plugin arguments.", e);
-            throw new InternalWikiException("Oops, someone offered !String!");
+            throw new InternalWikiException("Oops, someone offered !String!", e);
         } catch (NoSuchElementException e) {
             String msg = "Missing parameter in plugin definition: " + commandline;
             log.warn(msg, e);
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/plugin/DefaultPluginManager.java b/jspwiki-war/src/main/java/org/apache/wiki/plugin/DefaultPluginManager.java
index 06928b9..e4c7714 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/plugin/DefaultPluginManager.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/plugin/DefaultPluginManager.java
@@ -224,7 +224,7 @@
             m_pluginPattern = compiler.compile( PLUGIN_INSERT_PATTERN );
         } catch( MalformedPatternException e ) {
             log.fatal( "Internal error: someone messed with pluginmanager patterns.", e );
-            throw new InternalWikiException( "PluginManager patterns are broken" );
+            throw new InternalWikiException( "PluginManager patterns are broken" , e);
         }
 
     }
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/providers/AbstractFileProvider.java b/jspwiki-war/src/main/java/org/apache/wiki/providers/AbstractFileProvider.java
index 3a25294..c0c1a81 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/providers/AbstractFileProvider.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/providers/AbstractFileProvider.java
@@ -241,7 +241,7 @@
         }
         catch( UnsupportedEncodingException e ) 
         {
-            throw new InternalWikiException("Faulty encoding; should never happen");
+            throw new InternalWikiException("Faulty encoding; should never happen", e);
         }
     }
     
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/search/LuceneSearchProvider.java b/jspwiki-war/src/main/java/org/apache/wiki/search/LuceneSearchProvider.java
index 70cc9c2..ea56612 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/search/LuceneSearchProvider.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/search/LuceneSearchProvider.java
@@ -767,7 +767,7 @@
             }
             catch( InterruptedException e )
             {
-                throw new InternalWikiException("Interrupted while waiting to start.");
+                throw new InternalWikiException("Interrupted while waiting to start.", e);
             }
 
             m_watchdog.enterState("Full reindex");
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/ui/CommandResolver.java b/jspwiki-war/src/main/java/org/apache/wiki/ui/CommandResolver.java
index 28290ff..e6f6a70 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/ui/CommandResolver.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/ui/CommandResolver.java
@@ -459,7 +459,7 @@
         catch( IOException e )
         {
             m_log.error( "Unable to create context", e );
-            throw new InternalWikiException( "Big internal booboo, please check logs." );
+            throw new InternalWikiException( "Big internal booboo, please check logs." , e);
         }
 
         // Didn't resolve; return null
