diff --git a/pom.xml b/pom.xml
index d3f8ddb..f64a9fd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -98,6 +98,12 @@
       <version>2.5</version>
       <scope>provided</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+      <version>3.5</version>
+      <scope>provided</scope>
+    </dependency>
     <!-- Apache Felix -->
     <dependency>
       <groupId>org.apache.felix</groupId>
diff --git a/src/main/java/org/apache/sling/scripting/thymeleaf/internal/PatternTemplateModeProvider.java b/src/main/java/org/apache/sling/scripting/thymeleaf/internal/PatternTemplateModeProvider.java
index b25c0c2..84108ca 100644
--- a/src/main/java/org/apache/sling/scripting/thymeleaf/internal/PatternTemplateModeProvider.java
+++ b/src/main/java/org/apache/sling/scripting/thymeleaf/internal/PatternTemplateModeProvider.java
@@ -20,6 +20,7 @@
 
 import java.util.regex.Pattern;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.scripting.thymeleaf.TemplateModeProvider;
 import org.osgi.framework.Constants;
@@ -80,44 +81,44 @@
 
     private void configure(final PatternTemplateModeProviderConfiguration configuration) {
         // HTML
-        htmlPattern = Pattern.compile(configuration.htmlPattern());
-        logger.debug("configured HTML pattern: {}", htmlPattern.pattern());
+        htmlPattern = StringUtils.isNotBlank(configuration.htmlPattern()) ? Pattern.compile(configuration.htmlPattern()) : null;
+        logger.debug("configured HTML pattern: {}", htmlPattern);
         // XML
-        xmlPattern = Pattern.compile(configuration.xmlPattern());
-        logger.debug("configured XML pattern: {}", xmlPattern.pattern());
+        xmlPattern = StringUtils.isNotBlank(configuration.xmlPattern()) ? Pattern.compile(configuration.xmlPattern()) : null;
+        logger.debug("configured XML pattern: {}", xmlPattern);
         // TEXT
-        textPattern = Pattern.compile(configuration.textPattern());
-        logger.debug("configured TEXT pattern: {}", textPattern.pattern());
+        textPattern = StringUtils.isNotBlank(configuration.textPattern()) ? Pattern.compile(configuration.textPattern()) : null;
+        logger.debug("configured TEXT pattern: {}", textPattern);
         // JAVASCRIPT
-        javascriptPattern = Pattern.compile(configuration.javascriptPattern());
-        logger.debug("configured JAVASCRIPT pattern: {}", javascriptPattern.pattern());
+        javascriptPattern = StringUtils.isNotBlank(configuration.javascriptPattern()) ? Pattern.compile(configuration.javascriptPattern()) : null;
+        logger.debug("configured JAVASCRIPT pattern: {}", javascriptPattern);
         // CSS
-        cssPattern = Pattern.compile(configuration.cssPattern());
-        logger.debug("configured CSS pattern: {}", cssPattern.pattern());
+        cssPattern = StringUtils.isNotBlank(configuration.cssPattern()) ? Pattern.compile(configuration.cssPattern()) : null;
+        logger.debug("configured CSS pattern: {}", cssPattern);
         // RAW
-        rawPattern = Pattern.compile(configuration.rawPattern());
-        logger.debug("configured RAW pattern: {}", rawPattern.pattern());
+        rawPattern = StringUtils.isNotBlank(configuration.rawPattern()) ? Pattern.compile(configuration.rawPattern()) : null;
+        logger.debug("configured RAW pattern: {}", rawPattern);
     }
 
     @Override
     public TemplateMode provideTemplateMode(final Resource resource) {
         final String path = resource.getPath();
-        if (htmlPattern.matcher(path).matches()) {
+        if (htmlPattern != null && htmlPattern.matcher(path).matches()) {
             return TemplateMode.HTML;
         }
-        if (xmlPattern.matcher(path).matches()) {
+        if (xmlPattern != null && xmlPattern.matcher(path).matches()) {
             return TemplateMode.XML;
         }
-        if (textPattern.matcher(path).matches()) {
+        if (textPattern != null && textPattern.matcher(path).matches()) {
             return TemplateMode.TEXT;
         }
-        if (javascriptPattern.matcher(path).matches()) {
+        if (javascriptPattern != null && javascriptPattern.matcher(path).matches()) {
             return TemplateMode.JAVASCRIPT;
         }
-        if (cssPattern.matcher(path).matches()) {
+        if (cssPattern != null && cssPattern.matcher(path).matches()) {
             return TemplateMode.CSS;
         }
-        if (rawPattern.matcher(path).matches()) {
+        if (rawPattern != null && rawPattern.matcher(path).matches()) {
             return TemplateMode.RAW;
         }
         return null;
diff --git a/src/main/java/org/apache/sling/scripting/thymeleaf/internal/PatternTemplateModeProviderConfiguration.java b/src/main/java/org/apache/sling/scripting/thymeleaf/internal/PatternTemplateModeProviderConfiguration.java
index 8b692ef..956b4f9 100644
--- a/src/main/java/org/apache/sling/scripting/thymeleaf/internal/PatternTemplateModeProviderConfiguration.java
+++ b/src/main/java/org/apache/sling/scripting/thymeleaf/internal/PatternTemplateModeProviderConfiguration.java
@@ -61,6 +61,6 @@
         name = "pattern for template mode RAW",
         description = "The template pattern (regular expression) for templates which should be processed with template mode RAW (e.g. *.raw - NOTE: extension needs to be enabled for this script engine)."
     )
-    String rawPattern() default "^.+$";
+    String rawPattern();
 
 }
diff --git a/src/test/java/org/apache/sling/scripting/thymeleaf/it/tests/PatternTemplateModeProviderIT.java b/src/test/java/org/apache/sling/scripting/thymeleaf/it/tests/PatternTemplateModeProviderIT.java
index b401055..32b1eae 100644
--- a/src/test/java/org/apache/sling/scripting/thymeleaf/it/tests/PatternTemplateModeProviderIT.java
+++ b/src/test/java/org/apache/sling/scripting/thymeleaf/it/tests/PatternTemplateModeProviderIT.java
@@ -31,6 +31,7 @@
 import org.thymeleaf.templatemode.TemplateMode;
 
 import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 @RunWith(PaxExam.class)
@@ -83,7 +84,7 @@
     public void provideTemplateMode_fall_through() throws Exception {
         final Resource resource = mockResource("foohtml");
         final TemplateMode templateMode = templateModeProvider.provideTemplateMode(resource);
-        assertThat(templateMode, is(TemplateMode.RAW));
+        assertThat(templateMode, is(nullValue()));
     }
 
 }
