diff --git a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseUtil.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseUtil.java
index a80dc1d..5ea768e 100644
--- a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseUtil.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseUtil.java
@@ -56,11 +56,11 @@
         }
     }
 
-    public static String process(String input, boolean unpad, boolean wrap) throws IOException {
+    public static String process(String input, boolean unpad, boolean wrap, boolean strict) throws IOException {
         try (BufferedReader reader = new BufferedReader(new StringReader(input))) {
             reader.mark(input.length() + 1);
             StringWriter sw = new StringWriter();
-            trim(sw, reader, unpad, wrap);
+            trim(sw, reader, unpad, wrap, strict);
             sw.append('\n');
             return sw.toString();
         }
@@ -75,20 +75,22 @@
     }
 
     private static void trim(Writer out, BufferedReader reader) throws IOException {
-        trim(out, reader, true, true);
+        trim(out, reader, true, true, false);
     }
 
-    private static void trim(Writer out, BufferedReader reader, boolean unpad, boolean wrap) throws IOException {
+    private static void trim(Writer out, BufferedReader reader, boolean unpad, boolean wrap, boolean strict)
+            throws IOException {
         Pair<Integer, Integer> result = null;
         if (unpad || wrap) {
             result = analyze(reader);
             reader.reset();
         }
         doTrim(out, reader, unpad ? result.getLeft() : 0,
-                wrap && (result.getRight() > wrapThreshold) ? wrapLength : Integer.MAX_VALUE);
+                wrap && (result.getRight() > wrapThreshold) ? wrapLength : Integer.MAX_VALUE, strict);
     }
 
-    private static void doTrim(Writer out, BufferedReader reader, int extraPadding, int wrapLength) throws IOException {
+    private static void doTrim(Writer out, BufferedReader reader, int extraPadding, int wrapLength, boolean strict)
+            throws IOException {
         boolean head = true;
         int empty = 0;
         for (String line = reader.readLine(); line != null; line = reader.readLine()) {
@@ -110,6 +112,8 @@
                         out.append(trimmed.substring(0, cut));
                         out.append('\n');
                         trimmed = trimmed.substring(cut + 1);
+                    } else if (!strict) {
+                        break;
                     } else {
                         out.append(trimmed.substring(0, wrapLength));
                         out.append('\n');
diff --git a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/freemarker/IndentDirective.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/freemarker/IndentDirective.java
index f58b419..9237dde 100644
--- a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/freemarker/IndentDirective.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/freemarker/IndentDirective.java
@@ -25,6 +25,9 @@
 import java.util.Arrays;
 import java.util.Map;
 
+import org.apache.commons.io.IOUtils;
+import org.apache.hyracks.maven.license.LicenseUtil;
+
 import freemarker.core.Environment;
 import freemarker.template.TemplateBooleanModel;
 import freemarker.template.TemplateDirectiveBody;
@@ -33,14 +36,13 @@
 import freemarker.template.TemplateModel;
 import freemarker.template.TemplateModelException;
 import freemarker.template.TemplateNumberModel;
-import org.apache.commons.io.IOUtils;
-import org.apache.hyracks.maven.license.LicenseUtil;
 
 public class IndentDirective implements TemplateDirectiveModel {
 
     private static final String PARAM_NAME_SPACES = "spaces";
     private static final String PARAM_NAME_UNPAD = "unpad";
     private static final String PARAM_NAME_WRAP = "wrap";
+    private static final String PARAM_NAME_STRICT = "strict";
 
     @Override
     public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body)
@@ -49,6 +51,7 @@
         int numSpaces = -1;
         boolean unpad = false;
         boolean wrap = false;
+        boolean strict = false;
 
         for (Object o : params.entrySet()) {
             Map.Entry ent = (Map.Entry) o;
@@ -66,6 +69,9 @@
                 case PARAM_NAME_WRAP:
                     wrap = getBooleanParam(paramName, paramValue);
                     break;
+                case PARAM_NAME_STRICT:
+                    strict = getBooleanParam(paramName, paramValue);
+                    break;
                 default:
                     throw new TemplateModelException("Unsupported parameter: " + paramName);
             }
@@ -81,7 +87,7 @@
             // case we don't provide a special writer as the parameter:
             StringWriter sw = new StringWriter();
             body.render(sw);
-            String fixedup = LicenseUtil.process(sw.toString(), unpad, wrap);
+            String fixedup = LicenseUtil.process(sw.toString(), unpad, wrap, strict);
             IOUtils.copy(new StringReader(fixedup), new IndentingWriter(env.getOut(), numSpaces));
         }
     }
