diff --git a/conf/nutch-default.xml b/conf/nutch-default.xml
index 576a080..8009b9c 100644
--- a/conf/nutch-default.xml
+++ b/conf/nutch-default.xml
@@ -1017,6 +1017,15 @@
   property is activated due to extremely high levels of CPU which parsing can sometimes take.  
   </description>
 </property>
+<property>
+  <name>useBoilerpipe</name>
+  <value>false</value>
+</property>
+
+<property>
+  <name>boilerpipe.extractor</name>
+  <value>ArticleExtractor</value>
+</property>
 
 <!--
 <property>
diff --git a/src/java/org/apache/nutch/parse/BoilerpipeExtractorRepository.java b/src/java/org/apache/nutch/parse/BoilerpipeExtractorRepository.java
new file mode 100644
index 0000000..07578e7
--- /dev/null
+++ b/src/java/org/apache/nutch/parse/BoilerpipeExtractorRepository.java
@@ -0,0 +1,60 @@
+/*
+ * 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.nutch.parse;
+
+import java.lang.ClassLoader;
+import java.lang.InstantiationException;
+import java.util.WeakHashMap;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import de.l3s.boilerpipe.BoilerpipeExtractor;
+import de.l3s.boilerpipe.extractors.*;
+
+public class BoilerpipeExtractorRepository {
+
+  public static final Log LOG = LogFactory.getLog(BoilerpipeExtractorRepository.class);
+  public static final WeakHashMap<String, BoilerpipeExtractor> extractorRepository = new WeakHashMap<String, BoilerpipeExtractor>();
+ 
+  /**
+   * Returns an instance of the specified extractor
+   */
+  public static synchronized BoilerpipeExtractor getExtractor(String boilerpipeExtractorName) {
+    // Check if there's no instance of this extractor
+    if (!extractorRepository.containsKey(boilerpipeExtractorName)) {
+      // FQCN
+      boilerpipeExtractorName = "de.l3s.boilerpipe.extractors." + boilerpipeExtractorName;
+
+      // Attempt to load the class
+      try {
+        ClassLoader loader = BoilerpipeExtractor.class.getClassLoader();
+	Class extractorClass = loader.loadClass(boilerpipeExtractorName);
+
+	// Add an instance to the repository
+	extractorRepository.put(boilerpipeExtractorName, (BoilerpipeExtractor)extractorClass.newInstance());
+
+      } catch (ClassNotFoundException e) {
+        LOG.error("BoilerpipeExtractor " + boilerpipeExtractorName + " not found!");
+      } catch (InstantiationException e) {
+        LOG.error("Could not instantiate " + boilerpipeExtractorName);
+      } catch (Exception e) {
+        LOG.error(e);
+      }
+    }
+
+    return extractorRepository.get(boilerpipeExtractorName);
+  }
+}
diff --git a/src/java/org/apache/nutch/parse/ParseUtil.java b/src/java/org/apache/nutch/parse/ParseUtil.java
index e517315..dd9a377 100644
--- a/src/java/org/apache/nutch/parse/ParseUtil.java
+++ b/src/java/org/apache/nutch/parse/ParseUtil.java
@@ -45,6 +45,11 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 
+import de.l3s.boilerpipe.BoilerpipeExtractor;
+import de.l3s.boilerpipe.BoilerpipeProcessingException;
+import de.l3s.boilerpipe.extractors.*;
+import java.nio.charset.Charset;
+
 /**
  * A Utility class containing methods to simply perform parsing utilities such
  * as iterating through a preferred list of {@link Parser}s to obtain
@@ -72,6 +77,8 @@ public class ParseUtil extends Configured {
   private int maxParseTime;
   private ExecutorService executorService;
   
+  private boolean useBoilerpipe;
+  private BoilerpipeExtractor boilerpipeExtractorName ;
   /**
    *
    * @param conf
@@ -99,6 +106,8 @@ public class ParseUtil extends Configured {
     ignoreExternalLinks = conf.getBoolean("db.ignore.external.links", false);
     executorService = Executors.newCachedThreadPool(new ThreadFactoryBuilder()
       .setNameFormat("parse-%d").setDaemon(true).build());
+    useBoilerpipe = conf.getBoolean("useBoilerpipe", false);
+    boilerpipeExtractorName = BoilerpipeExtractorRepository.getExtractor(conf.get("boilerpipe.extractor", "ArticleExtractor"));
   }
 
   /**
@@ -227,7 +236,19 @@ public class ParseUtil extends Configured {
           }
         }
       } else {
-        page.setText(new Utf8(parse.getText()));
+         String text=parse.getText();
+        //use boilerpipe to parse text
+        if(useBoilerpipe)
+        {
+          try{
+              text = boilerpipeExtractorName.getText(Charset.forName("UTF-8").decode(page.getContent()).toString());
+              if (LOG.isDebugEnabled()){ LOG.debug("text extracted by boilerpipe extractor is "+ text); }
+            }
+            catch(BoilerpipeProcessingException e)
+            {}
+        }
+        page.setText(new Utf8(text));
+
         page.setTitle(new Utf8(parse.getTitle()));
         ByteBuffer prevSig = page.getSignature();
         if (prevSig != null) {
