diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ExpressionVerbalizer.java b/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ExpressionVerbalizer.java
index 0c48ff0..2e8cba7 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ExpressionVerbalizer.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ExpressionVerbalizer.java
@@ -81,7 +81,9 @@
   }
 
   public String verbalize(IRutaExpression expression) {
-    if (expression instanceof GenericFeatureExpression) {
+    if (expression instanceof NullExpression) {
+      return "null";
+    } else if (expression instanceof GenericFeatureExpression) {
       return verbalize(((GenericFeatureExpression) expression).getFeatureExpression());
     } else if (expression instanceof AnnotationTypeExpression) {
       return verbalize((AnnotationTypeExpression) expression);
@@ -107,8 +109,6 @@
       return verbalize((IStringExpression) expression);
     } else if (expression instanceof MatchReference) {
       return verbalize((MatchReference) expression);
-    } else if(expression instanceof NullExpression) {
-      return "null";
     }
     return expression.getClass().getSimpleName();
   }
@@ -299,23 +299,23 @@
     }
     return expression.getClass().getSimpleName();
   }
-  
+
   public String verbalize(MatchReference expression) {
     String match = expression.getMatch();
-    if(match == null) {
+    if (match == null) {
       String string = expression.toString();
-      if(StringUtils.equals(string, CAS.TYPE_NAME_DOCUMENT_ANNOTATION)) {
+      if (StringUtils.equals(string, CAS.TYPE_NAME_DOCUMENT_ANNOTATION)) {
         return "Document";
       } else {
         return string;
       }
     }
-    if(expression.getArgument() != null) {
-     return  match + expression.getComparator() + verbalizer.verbalize(expression.getArgument());
+    if (expression.getArgument() != null) {
+      return match + expression.getComparator() + verbalizer.verbalize(expression.getArgument());
     }
     return match;
   }
-  
+
   public String verbalize(AnnotationTypeExpression expression) {
     return verbalize(expression.getReference());
   }
@@ -325,7 +325,7 @@
     if (expression instanceof SimpleFeatureExpression) {
       SimpleFeatureExpression sfe = (SimpleFeatureExpression) expression;
       sb.append(sfe.getMatchReference().getMatch());
-    } else if(expression instanceof NullExpression) {
+    } else if (expression instanceof NullExpression) {
       sb.append("null");
     }
     return sb.toString();
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ScriptVerbalizerTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ScriptVerbalizerTest.java
index 50f12c7..c0caa79 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ScriptVerbalizerTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ScriptVerbalizerTest.java
@@ -33,13 +33,13 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-
 public class ScriptVerbalizerTest {
 
   @Test
-  public void testRuleVerbalization() throws Exception{
+  public void testRuleVerbalization() throws Exception {
     JCas jcas = RutaTestUtils.getCAS("Some text.").getJCas();
-    
+
+    assertRuleVerbalization(jcas, "DocumentAnnotation.language!=null;");
     assertRuleVerbalization(jcas, "Document{->MARK(T1)};");
     assertRuleVerbalization(jcas, "W{->T1} W{->T2};");
     assertRuleVerbalization(jcas, "T1<-{W PERIOD;};");
@@ -48,24 +48,26 @@
     assertRuleVerbalization(jcas, "W W? W?? W+ W+? W* W*? W[1,2] W[1,2]? #;");
     assertRuleVerbalization(jcas, "Document{CONTAINS(T1)->T2};");
     assertRuleVerbalization(jcas, "Document{->ADDFILTERTYPE(CW)};");
-    
+
     jcas.release();
   }
 
-  private void assertRuleVerbalization(JCas jcas, String rule) throws AnalysisEngineProcessException, ResourceInitializationException {
+  private void assertRuleVerbalization(JCas jcas, String rule)
+          throws AnalysisEngineProcessException, ResourceInitializationException {
     assertRuleVerbalization(jcas, rule, rule);
   }
-  
-  private void assertRuleVerbalization(JCas jcas, String rule, String expected) throws AnalysisEngineProcessException, ResourceInitializationException {
-    Ruta.applyRule(jcas, rule, RutaEngine.PARAM_DEBUG, true, RutaEngine.PARAM_DEBUG_WITH_MATCHES, true);
+
+  private void assertRuleVerbalization(JCas jcas, String rule, String expected)
+          throws AnalysisEngineProcessException, ResourceInitializationException {
+    Ruta.applyRule(jcas, rule, RutaEngine.PARAM_DEBUG, true, RutaEngine.PARAM_DEBUG_WITH_MATCHES,
+            true);
     Collection<DebugBlockApply> blockApplies = JCasUtil.select(jcas, DebugBlockApply.class);
     Assert.assertEquals(1, blockApplies.size());
-    DebugBlockApply blockApply =  blockApplies.iterator().next();
+    DebugBlockApply blockApply = blockApplies.iterator().next();
     Assert.assertEquals(1, blockApply.getInnerApply().size());
     DebugRuleApply ruleApply = (DebugRuleApply) blockApply.getInnerApply(0);
     Assert.assertEquals(expected, ruleApply.getElement());
     Ruta.removeDebugInformation(jcas);
   }
-  
-  
+
 }
