diff --git a/dom/src/main/java/org/apache/james/mime4j/message/DefaultMessageBuilder.java b/dom/src/main/java/org/apache/james/mime4j/message/DefaultMessageBuilder.java
index fa27ac6..215e1a3 100644
--- a/dom/src/main/java/org/apache/james/mime4j/message/DefaultMessageBuilder.java
+++ b/dom/src/main/java/org/apache/james/mime4j/message/DefaultMessageBuilder.java
@@ -298,7 +298,7 @@
             FieldParser<? extends ParsedField> fp = fieldParser != null ? fieldParser : 
                 strict ? DefaultFieldParser.getParser() : LenientFieldParser.getParser();
             MutableBodyDescriptorFactory bdf = bodyDescFactory != null ? bodyDescFactory :
-                new MinimalBodyDescriptorFactory(fp, true);
+                new MinimalBodyDescriptorFactory(fp);
             BodyFactory bf = bodyFactory != null ? bodyFactory : new BasicBodyFactory();
             MimeStreamParser parser = new MimeStreamParser(cfg, mon, bdf);
             // EntityBuilder expect the parser will send ParserFields for the well known fields
diff --git a/dom/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptor.java b/dom/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptor.java
index a2c5ccd..3cc45ab 100644
--- a/dom/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptor.java
+++ b/dom/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptor.java
@@ -61,16 +61,16 @@
     }
     
     protected MaximalBodyDescriptor(final BodyDescriptor parent) {
-        this(parent, null, true, null);
+        this(parent, null, null);
     }
 
-    public MaximalBodyDescriptor(final BodyDescriptor parent, final FieldParser<?> fieldParser, final boolean parseAllFields, final DecodeMonitor monitor) {
-        super(parent, fieldParser, parseAllFields, monitor);
+    public MaximalBodyDescriptor(final BodyDescriptor parent, final FieldParser<?> fieldParser, final DecodeMonitor monitor) {
+        super(parent, fieldParser, monitor);
     }
 
     @Override
     public MutableBodyDescriptor newChild() {
-        return new MaximalBodyDescriptor(this, getFieldParser(), getParseAllFields(), getDecodeMonitor());
+        return new MaximalBodyDescriptor(this, getFieldParser(), getDecodeMonitor());
     }
 
     @Override
diff --git a/dom/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptorFactory.java b/dom/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptorFactory.java
index f2a4d5e..1be58d8 100644
--- a/dom/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptorFactory.java
+++ b/dom/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptorFactory.java
@@ -27,20 +27,18 @@
 public class MaximalBodyDescriptorFactory implements MutableBodyDescriptorFactory {
 
     private final FieldParser<?> fieldParser;
-    private final boolean parseAllFields;
 
     public MaximalBodyDescriptorFactory() {
-        this(null, false);
+        this(null);
     }
 
     public MaximalBodyDescriptorFactory(final 
-            FieldParser<?> fieldParser, final boolean parseAllFields) {
+            FieldParser<?> fieldParser) {
         this.fieldParser = fieldParser;
-        this.parseAllFields = parseAllFields;
     }
 
     public MutableBodyDescriptor newInstance(DecodeMonitor monitor) {
-        return new MaximalBodyDescriptor(null, fieldParser, parseAllFields, monitor);
+        return new MaximalBodyDescriptor(null, fieldParser, monitor);
     }
     
 } 
diff --git a/dom/src/main/java/org/apache/james/mime4j/message/MinimalBodyDescriptor.java b/dom/src/main/java/org/apache/james/mime4j/message/MinimalBodyDescriptor.java
index 7953316..5b34ebd 100644
--- a/dom/src/main/java/org/apache/james/mime4j/message/MinimalBodyDescriptor.java
+++ b/dom/src/main/java/org/apache/james/mime4j/message/MinimalBodyDescriptor.java
@@ -74,8 +74,6 @@
 
     private final FieldParser<?> fieldParser;
 
-    private final boolean parseAllFields;
-    
     /**
      * Creates a new root <code>BodyDescriptor</code> instance.
      */
@@ -87,7 +85,7 @@
      * Creates a new root <code>BodyDescriptor</code> instance with the given parent
      */
     public MinimalBodyDescriptor(final BodyDescriptor parent) {
-        this(parent, null, false, null);
+        this(parent, null, null);
     }
 
     /**
@@ -96,7 +94,7 @@
      * @param parent the descriptor of the parent or <code>null</code> if this
      *        is the root descriptor.
      */
-    public MinimalBodyDescriptor(final BodyDescriptor parent, final FieldParser<?> fieldParser, boolean parseAllFields, final DecodeMonitor monitor) {
+    public MinimalBodyDescriptor(final BodyDescriptor parent, final FieldParser<?> fieldParser, final DecodeMonitor monitor) {
         if (parent != null && MimeUtil.isSameMimeType("multipart/digest", parent.getMimeType())) {
             this.mimeType = EMAIL_MESSAGE_MIME_TYPE;
             this.subType = SUB_TYPE_EMAIL;
@@ -107,7 +105,6 @@
             this.mediaType = DEFAULT_MEDIA_TYPE;
         }
         this.fieldParser = fieldParser != null ? fieldParser : DefaultFieldParser.getParser();
-        this.parseAllFields = parseAllFields;
         this.monitor = monitor != null ? monitor : DecodeMonitor.SILENT;
     }
     
@@ -119,12 +116,8 @@
         return fieldParser;
     }
     
-    protected boolean getParseAllFields() {
-        return parseAllFields;
-    }
-    
     public MutableBodyDescriptor newChild() {
-        return new MinimalBodyDescriptor(this, getFieldParser(), getParseAllFields(), getDecodeMonitor());
+        return new MinimalBodyDescriptor(this, getFieldParser(), getDecodeMonitor());
     }
     
     /**
@@ -141,9 +134,9 @@
             return parseContentLength(field);
         } else if (name.equalsIgnoreCase(FieldName.CONTENT_TYPE) && contentTypeField == null) {
             return parseContentType(field);
-        } else if (getParseAllFields()) {
+        } else {
             return getFieldParser().parse(field, monitor);
-        } else return null;
+        }
     }
 
     private ParsedField parseContentTransferEncoding(Field field) throws MimeException {
diff --git a/dom/src/main/java/org/apache/james/mime4j/message/MinimalBodyDescriptorFactory.java b/dom/src/main/java/org/apache/james/mime4j/message/MinimalBodyDescriptorFactory.java
index ec17d61..9c8855f 100644
--- a/dom/src/main/java/org/apache/james/mime4j/message/MinimalBodyDescriptorFactory.java
+++ b/dom/src/main/java/org/apache/james/mime4j/message/MinimalBodyDescriptorFactory.java
@@ -27,16 +27,14 @@
 public class MinimalBodyDescriptorFactory implements MutableBodyDescriptorFactory {
 
     private final FieldParser<?> fieldParser;
-    private final boolean parseAllFields;
 
     public MinimalBodyDescriptorFactory(final 
-            FieldParser<?> fieldParser, final boolean parseAllFields) {
+            FieldParser<?> fieldParser) {
         this.fieldParser = fieldParser;
-        this.parseAllFields = parseAllFields;
     }
 
     public MutableBodyDescriptor newInstance(DecodeMonitor monitor) {
-        return new MinimalBodyDescriptor(null, fieldParser, parseAllFields, monitor);
+        return new MinimalBodyDescriptor(null, fieldParser, monitor);
     }
     
 } 
diff --git a/dom/src/test/java/org/apache/james/mime4j/message/MaximalBodyDescriptorTest.java b/dom/src/test/java/org/apache/james/mime4j/message/MaximalBodyDescriptorTest.java
index 2d85bcf..898a5f8 100644
--- a/dom/src/test/java/org/apache/james/mime4j/message/MaximalBodyDescriptorTest.java
+++ b/dom/src/test/java/org/apache/james/mime4j/message/MaximalBodyDescriptorTest.java
@@ -41,7 +41,7 @@
         MimeEntityConfig config = new MimeEntityConfig();
         config.setStrictParsing(true);
         parser = new MimeTokenStream(config, 
-                new MaximalBodyDescriptorFactory(null, false));
+                new MaximalBodyDescriptorFactory(null));
     }
 
     @Override
