diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index a507ba7..2c5366b 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -8,6 +8,10 @@
 	<body>
 	    <release version="1.6-SNAPSHOT" date="in Mercurial" description="development">
 	        <action dev="py4fun" type="update">
+                Refactor: introduce Chomping to avoid using null as value for Boolean.
+                Stay in line with Scala friens where null is not allowed (2010-01-19)
+            </action>
+            <action dev="py4fun" type="update">
                 Refactor: change signature for Constant.has(). When the additional String is
                 at the end it is possible to use default arguments in Scala (2010-01-18)
             </action>
diff --git a/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java b/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java
index 9b4f35c..96fb8dc 100644
--- a/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java
+++ b/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java
@@ -1234,9 +1234,8 @@
         Mark startMark = reader.getMark();
         // Scan the header.
         reader.forward();
-        Object[] chompi = scanBlockScalarIndicators(startMark);
-        Boolean chomping = (Boolean) chompi[0];
-        int increment = ((Integer) chompi[1]).intValue();
+        Chomping chompi = scanBlockScalarIndicators(startMark);
+        int increment = chompi.getIncrement();
         scanBlockScalarIgnoredLine(startMark);
 
         // Determine the indentation level and go to the first non-empty line.
@@ -1297,17 +1296,17 @@
             }
         }
         // Chomp the tail.
-        if (chomping == null || chomping.booleanValue()) {
+        if (chompi.chompTailIsNotFalse()) {
             chunks.append(lineBreak);
         }
-        if (chomping != null && chomping.booleanValue()) {
+        if (chompi.chompTailIsTrue()) {
             chunks.append(breaks);
         }
         // We are done.
         return new ScalarToken(chunks.toString(), false, startMark, endMark, style);
     }
 
-    private Object[] scanBlockScalarIndicators(Mark startMark) {
+    private Chomping scanBlockScalarIndicators(Mark startMark) {
         // See the specification for details.
         Boolean chomping = null;
         int increment = -1;
@@ -1353,7 +1352,7 @@
                     "expected chomping or indentation indicators, but found " + ch, reader
                             .getMark());
         }
-        return new Object[] { chomping, new Integer(increment) };
+        return new Chomping(chomping, increment);
     }
 
     private String scanBlockScalarIgnoredLine(Mark startMark) {
@@ -1750,4 +1749,29 @@
         }
         return "";
     }
+
+    /**
+     * Chomping the tail may have 3 values - yes, no, not defined.
+     */
+    private class Chomping {
+        private final Boolean value;
+        private final int increment;
+
+        public Chomping(Boolean value, int increment) {
+            this.value = value;
+            this.increment = increment;
+        }
+
+        public boolean chompTailIsNotFalse() {
+            return value == null || value;
+        }
+
+        public boolean chompTailIsTrue() {
+            return value != null && value;
+        }
+
+        public int getIncrement() {
+            return increment;
+        }
+    }
 }
