diff --git a/apache-whisker-plugin4maven/src/it/example-copyright-notices/verify.groovy b/apache-whisker-plugin4maven/src/it/example-copyright-notices/verify.groovy
index 6098a08..c913c6f 100644
--- a/apache-whisker-plugin4maven/src/it/example-copyright-notices/verify.groovy
+++ b/apache-whisker-plugin4maven/src/it/example-copyright-notices/verify.groovy
@@ -37,10 +37,14 @@
      license.expectThat(aLineContainsMIT())
      license.expectThat(aLineContainsResource("mit.txt"))
      license.expectThat(aLineContainsAL2())
+     license.expectThat(noLineContains("Copyright (c) 9595 The Example Project"))
+     license.expectThat(noLineContains("This product includes software developed at"))
+     license.expectThat(noLineContains("The Example Foundation (http://example.org/)."))
      //license.expectThat(aLineContainsResource("apache.txt"))
      notice = noticeIn(basedir)
      notice.expectThat(aLineContains("Copyright (c) 9595 The Example Project"))
      notice.expectThat(aLineContains("This product includes software developed at"))
      notice.expectThat(aLineContains("The Example Foundation (http://example.org/)."))
+     notice.expectThat(noLineContains("Copyright (c) 2525 The Example Project"))
      return aggregate(license.failures(), notice.failures())
 }
\ No newline at end of file
diff --git a/apache-whisker-plugin4maven/src/test/java/org/apache/creadur/whisker/it/Helpers.java b/apache-whisker-plugin4maven/src/test/java/org/apache/creadur/whisker/it/Helpers.java
index 4e05f32..824aeac 100644
--- a/apache-whisker-plugin4maven/src/test/java/org/apache/creadur/whisker/it/Helpers.java
+++ b/apache-whisker-plugin4maven/src/test/java/org/apache/creadur/whisker/it/Helpers.java
@@ -72,6 +72,10 @@
                 "COMMON DEVELOPMENT AND DISTRIBUTION LICENSE Version 1.0 (CDDL-1.0)");
     }
 
+    public static Check noLineContains(String value) {
+        return new NoLineContainsCheck(value);
+    }
+
     public static Check aLineContains(String value) {
         return new AnyLineContainsCheck(value);
     }
diff --git a/apache-whisker-plugin4maven/src/test/java/org/apache/creadur/whisker/it/NoLineContainsCheck.java b/apache-whisker-plugin4maven/src/test/java/org/apache/creadur/whisker/it/NoLineContainsCheck.java
new file mode 100644
index 0000000..1a75baa
--- /dev/null
+++ b/apache-whisker-plugin4maven/src/test/java/org/apache/creadur/whisker/it/NoLineContainsCheck.java
@@ -0,0 +1,51 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.creadur.whisker.it;
+
+import static org.apache.creadur.whisker.it.Not.*;
+
+public class NoLineContainsCheck implements Check {
+
+    final String value;
+
+    Latch latch = Latch.UP;
+
+    public static final String WARNING = "Text contains incorrect phrase: ";
+
+    public NoLineContainsCheck(String value) {
+        super();
+        this.value = value;
+    }
+
+    public void check(String line) {
+        if (isNotNull(line) && line.contains(value)) {
+            latch = latch.push();
+        }
+    }
+
+    public boolean hasPassed() {
+        return latch == Latch.UP;
+    }
+
+    public void report(Results result) {
+        if (not(hasPassed())) {
+           result.fail(WARNING + value);
+        }
+    }
+}
diff --git a/apache-whisker-plugin4maven/src/test/java/org/apache/creadur/whisker/it/TestNoLineContainsCheck.java b/apache-whisker-plugin4maven/src/test/java/org/apache/creadur/whisker/it/TestNoLineContainsCheck.java
new file mode 100644
index 0000000..87c552d
--- /dev/null
+++ b/apache-whisker-plugin4maven/src/test/java/org/apache/creadur/whisker/it/TestNoLineContainsCheck.java
@@ -0,0 +1,67 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.creadur.whisker.it;
+
+import junit.framework.TestCase;
+
+public class TestNoLineContainsCheck extends TestCase {
+
+    private static final String CHECKED_FOR_VALUE = "some value";
+
+    NoLineContainsCheck subject;
+    Results results;
+
+    public void setUp() {
+        subject = new NoLineContainsCheck(CHECKED_FOR_VALUE);
+        results = new Results();
+    }
+
+    public void testNullLine() {
+        subject.check(null);
+        assertTrue(subject.hasPassed());
+        subject.report(results);
+        assertFalse(results.hasFailed());
+        assertNull(results.collate());
+    }
+
+    public void testDifferentLine() {
+        subject.check("something different");
+        assertTrue(subject.hasPassed());
+        subject.report(results);
+        assertFalse(results.hasFailed());
+        assertNull(results.collate());
+    }
+
+    public void testSameLine() {
+        subject.check(CHECKED_FOR_VALUE);
+        assertFalse(subject.hasPassed());
+        subject.report(results);
+        assertTrue(results.hasFailed());
+        assertTrue(results.collate().contains(NoLineContainsCheck.WARNING + CHECKED_FOR_VALUE));
+    }
+
+    public void testLineContainingText() {
+        subject.check("prefix " + CHECKED_FOR_VALUE + " suffix");
+        assertFalse(subject.hasPassed());
+        subject.report(results);
+        assertTrue(results.hasFailed());
+        assertTrue(results.collate().contains(NoLineContainsCheck.WARNING + CHECKED_FOR_VALUE));
+    }
+
+}
