diff --git build.xml build.xml
index c29ba7c..6251973 100644
--- build.xml
+++ build.xml
@@ -154,13 +154,16 @@
       <packageset dir="${plugins.dir}/index-anchor/src/java"/>
       <packageset dir="${plugins.dir}/index-basic/src/java"/>
       <packageset dir="${plugins.dir}/index-more/src/java"/>
+      <packageset dir="${plugins.dir}/index-metadata/src/java"/>
       <packageset dir="${plugins.dir}/indexer-solr/src/java"/>
+      <packageset dir="${plugins.dir}/indexer-elastic/src/java"/>
       <packageset dir="${plugins.dir}/language-identifier/src/java"/>
       <packageset dir="${plugins.dir}/lib-http/src/java"/>
       <packageset dir="${plugins.dir}/lib-regex-filter/src/java"/>
       <packageset dir="${plugins.dir}/microformats-reltag/src/java"/>
       <packageset dir="${plugins.dir}/parse-ext/src/java"/>
       <packageset dir="${plugins.dir}/parse-html/src/java"/>
+      <packageset dir="${plugins.dir}/parse-metatags/src/java"/>
       <packageset dir="${plugins.dir}/parse-js/src/java"/>
       <packageset dir="${plugins.dir}/parse-swf/src/java"/>
       <packageset dir="${plugins.dir}/parse-tika/src/java"/>
@@ -576,6 +579,7 @@
       <packageset dir="${plugins.dir}/parse-ext/src/java"/>
       <packageset dir="${plugins.dir}/parse-html/src/java"/>
       <packageset dir="${plugins.dir}/parse-js/src/java"/>
+      <packageset dir="${plugins.dir}/parse-metatags/src/java"/>
       <packageset dir="${plugins.dir}/parse-swf/src/java"/>
       <packageset dir="${plugins.dir}/parse-tika/src/java"/>
       <packageset dir="${plugins.dir}/parse-zip/src/java"/>
@@ -940,6 +944,7 @@
         <source path="${basedir}/src/plugin/index-basic/src/test/" />
         <source path="${basedir}/src/plugin/index-more/src/java/" />
         <source path="${basedir}/src/plugin/index-more/src/test/" />
+        <source path="${basedir}/src/plugin/index-metadata/src/java/" />
         <source path="${basedir}/src/plugin/language-identifier/src/java/" />
         <source path="${basedir}/src/plugin/language-identifier/src/test/" />
         <source path="${basedir}/src/plugin/lib-http/src/java/" />
@@ -955,6 +960,8 @@
         <source path="${basedir}/src/plugin/parse-html/src/test/" />
         <source path="${basedir}/src/plugin/parse-js/src/java/" />
         <source path="${basedir}/src/plugin/parse-js/src/test/" />
+        <source path="${basedir}/src/plugin/parse-metatags/src/java/" />
+        <source path="${basedir}/src/plugin/parse-metatags/src/test/" />
         <!-- parse-swf and parse-zip are currently disabled 
         <source path="${basedir}/src/plugin/parse-swf/src/java/" />
         <source path="${basedir}/src/plugin/parse-swf/src/test/" />
diff --git conf/nutch-default.xml conf/nutch-default.xml
index e629917..c720437 100644
--- conf/nutch-default.xml
+++ conf/nutch-default.xml
@@ -1096,6 +1096,47 @@
   </description>
 </property>
 
+<!-- index-metadata plugin properties -->
+
+<property>
+  <name>index.parse.md</name>
+  <value>description,keywords</value>
+  <description>
+  Comma-separated list of keys to be taken from the parse metadata to generate fields.
+  Can be used e.g. for 'description' or 'keywords' provided that these values are generated
+  by a parser (see parse-metatags plugin)  
+  </description>
+</property>
+
+<property>
+  <name>index.content.md</name>
+  <value></value>
+  <description>
+   Comma-separated list of keys to be taken from the content metadata to generate fields. 
+  </description>
+</property>
+
+<property>
+  <name>index.db.md</name>
+  <value></value>
+  <description>
+     Comma-separated list of keys to be taken from the crawldb metadata to generate fields.
+     Can be used to index values propagated from the seeds with the plugin urlmeta 
+  </description>
+</property>
+
+<!-- parse-metatags plugin properties -->
+<property>
+  <name>metatags.names</name>
+  <value>description;keywords</value>
+  <description> Names of the metatags to extract, separated by;. 
+  Use '*' to extract all metatags. Prefixes the names with 'metatag.'
+  in the parse-metadata. For instance to index description and keywords, 
+  you need to activate the plugin index-metadata and set the value of the 
+  parameter 'index.parse.md' to 'metatag.description;metatag.keywords'.
+  </description>
+</property>
+
 <!-- Temporary Hadoop 0.17.x workaround. -->
 
 <property>
diff --git src/plugin/build.xml src/plugin/build.xml
index eaffa7b..a7f2a22 100755
--- src/plugin/build.xml
+++ src/plugin/build.xml
@@ -30,6 +30,7 @@
      <ant dir="index-anchor" target="deploy"/>
      <ant dir="index-basic" target="deploy"/>
      <ant dir="index-more" target="deploy"/>
+     <ant dir="index-metadata" target="deploy"/>
      <ant dir="indexer-solr" target="deploy"/>
      <ant dir="indexer-elastic" target="deploy"/>
      <ant dir="language-identifier" target="deploy"/>
@@ -47,6 +48,7 @@
      <ant dir="parse-js" target="deploy"/>
      <ant dir="parse-html" target="deploy"/>
      <ant dir="parse-tika" target="deploy"/>
+     <ant dir="parse-metatags" target="deploy"/>
      <ant dir="scoring-link" target="deploy"/>
      <ant dir="scoring-opic" target="deploy"/>
      <ant dir="subcollection" target="deploy"/>
@@ -77,6 +79,7 @@
      <ant dir="protocol-file" target="test"/>
      <ant dir="parse-html" target="test"/>
      <ant dir="parse-js" target="test"/>
+     <ant dir="parse-metatags" target="test"/>
      <ant dir="index-anchor" target="test"/>
      <ant dir="index-basic" target="test"/>
      <ant dir="index-more" target="test"/>
@@ -112,6 +115,7 @@
     <ant dir="index-anchor" target="clean"/>
     <ant dir="index-basic" target="clean"/>
     <ant dir="index-more" target="clean"/>
+    <ant dir="index-metadata" target="clean"/>
     <ant dir="indexer-solr" target="clean"/>
     <ant dir="indexer-elastic" target="clean"/>
     <ant dir="language-identifier" target="clean"/>
@@ -127,6 +131,7 @@
     <ant dir="parse-swf" target="clean"/>
     <ant dir="parse-tika" target="clean"/>
     <ant dir="parse-zip" target="clean"/>
+    <ant dir="parse-metatags" target="clean"/>
     <ant dir="protocol-file" target="clean"/>
     <ant dir="protocol-ftp" target="clean"/>
     <ant dir="protocol-httpclient" target="clean"/>
diff --git src/plugin/index-metadata/build.xml src/plugin/index-metadata/build.xml
new file mode 100644
index 0000000..ad96d11
--- /dev/null
+++ src/plugin/index-metadata/build.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<!--
+ 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.
+-->
+<project name="index-metadata" default="jar-core">
+
+  <import file="../build-plugin.xml"/>
+
+</project>
diff --git src/plugin/index-metadata/ivy.xml src/plugin/index-metadata/ivy.xml
new file mode 100644
index 0000000..24d7606
--- /dev/null
+++ src/plugin/index-metadata/ivy.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" ?>
+
+<!--
+   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.
+-->
+
+<ivy-module version="1.0">
+  <info organisation="org.apache.nutch" module="${ant.project.name}">
+    <license name="Apache 2.0"/>
+    <ivyauthor name="Apache Nutch Team" url="http://nutch.apache.org"/>
+    <description>
+        Apache Nutch
+    </description>
+  </info>
+
+  <configurations>
+    <include file="../../../ivy/ivy-configurations.xml"/>
+  </configurations>
+
+  <publications>
+    <!--get the artifact from our module name-->
+    <artifact conf="master"/>
+  </publications>
+
+  <dependencies>
+  </dependencies>
+  
+</ivy-module>
diff --git src/plugin/index-metadata/plugin.xml src/plugin/index-metadata/plugin.xml
new file mode 100644
index 0000000..4d4c9a7
--- /dev/null
+++ src/plugin/index-metadata/plugin.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<plugin
+   id="index-metadata"
+   name="Index Metadata"
+   version="1.0.0"
+   provider-name="nutch.org">
+
+    <runtime>
+      <library name="index-metadata.jar">
+         <export name="*"/>
+      </library>
+   </runtime>
+
+   <requires>
+      <import plugin="nutch-extensionpoints"/>
+   </requires>
+
+
+   <extension id="org.apache.nutch.indexer.metadata"
+              name="Nutch metadata indexer"
+              point="org.apache.nutch.indexer.IndexingFilter">
+      <implementation id="MetadataIndexer"
+                      class="org.apache.nutch.indexer.metadata.MetadataIndexer"/>
+   </extension>
+
+</plugin>
diff --git src/plugin/index-metadata/src/java/org/apache/nutch/indexer/metadata/MetadataIndexer.java src/plugin/index-metadata/src/java/org/apache/nutch/indexer/metadata/MetadataIndexer.java
new file mode 100644
index 0000000..0568d73
--- /dev/null
+++ src/plugin/index-metadata/src/java/org/apache/nutch/indexer/metadata/MetadataIndexer.java
@@ -0,0 +1,125 @@
+/**
+ * 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.indexer.metadata;
+
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.avro.util.Utf8;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.io.Text;
+// import org.apache.nutch.crawl.Inlinks;
+import org.apache.nutch.indexer.IndexingException;
+import org.apache.nutch.indexer.IndexingFilter;
+import org.apache.nutch.indexer.NutchDocument;
+import org.apache.nutch.parse.Parse;
+import org.apache.nutch.storage.WebPage;
+import org.apache.nutch.storage.WebPage.Field;
+import org.apache.nutch.util.Bytes;
+
+/**
+ * Indexer which can be configured to extract metadata from the crawldb, parse
+ * metadata or content metadata. You can specify the properties "index.db",
+ * "index.parse" or "index.content" who's values are comma-delimited
+ * <value>key1, key2, key3</value>.
+ */
+
+public class MetadataIndexer implements IndexingFilter {
+  private Configuration conf;
+  private HashMap<String, String[]> staticfields;
+  private static String[] dbFieldnames;
+  private static String[] parseFieldnames;
+  private static String[] contentFieldnames;
+  private static final String db_CONF_PROPERTY = "index.db.md";
+  private static final String parse_CONF_PROPERTY = "index.parse.md";
+  private static final String content_CONF_PROPERTY = "index.content.md";
+
+  public NutchDocument filter(NutchDocument doc, String url, WebPage page)
+      throws IndexingException {
+
+    // just in case
+    if (doc == null)
+      return doc;
+
+    // add the fields from crawldb
+    if (dbFieldnames != null) {
+      for (String metatag : dbFieldnames) {
+        ByteBuffer bmetadatas = page.getFromMetadata(new Utf8(metatag));
+        String metadata = new String(bmetadatas.array());
+        if (metadata != null)
+          doc.add("meta_" + metatag, metadata.toString());
+      }
+    }
+
+    // add the fields from parsemd
+    if (parseFieldnames != null) {
+      for (String metatag : parseFieldnames) {
+        ByteBuffer bvalues = page.getFromMetadata(new Utf8(metatag));
+        if (bvalues != null) {
+          String value = new String(bvalues.array());
+          String[] values = value.split("\t");
+          for (String eachvalue : values) {
+            if (values != null)
+              doc.add("meta_" + metatag, eachvalue);
+          }
+        }
+      }
+    }
+
+    // add the fields from contentmd
+    if (contentFieldnames != null) {
+      for (String metatag : contentFieldnames) {
+        // String[] value = parse.getData().getContentMeta().getValues(metatag);
+        ByteBuffer bvalues = page.getFromMetadata(new Utf8(metatag));
+        String value = new String(bvalues.array());
+        if (value != null)
+          doc.add("meta_" + metatag, value);
+
+      }
+    }
+
+    return doc;
+  }
+
+  public void setConf(Configuration conf) {
+    this.conf = conf;
+    dbFieldnames = conf.getStrings(db_CONF_PROPERTY);
+    parseFieldnames = conf.getStrings(parse_CONF_PROPERTY);
+    contentFieldnames = conf.getStrings(content_CONF_PROPERTY);
+
+    // TODO check conflict between field names e.g. could have same label
+    // from different sources
+
+  }
+
+  public Configuration getConf() {
+    return this.conf;
+  }
+
+  @Override
+  public Collection<Field> getFields() {
+    // TODO Auto-generated method stub
+    return null;
+  }
+}
diff --git src/plugin/parse-metatags/README.txt src/plugin/parse-metatags/README.txt
new file mode 100644
index 0000000..17c5def
--- /dev/null
+++ src/plugin/parse-metatags/README.txt
@@ -0,0 +1,22 @@
+Parse-metatags plugin
+
+The parse-metatags plugin consists of a HTMLParserFilter which takes as 
+parameter a list of metatag names with '*' as default value. The values 
+are separated by ';'.
+In order to extract the values of the metatags description and keywords, 
+you must specify in nutch-site.xml
+
+<property>
+  <name>metatags.names</name>
+  <value>description;keywords</value>
+</property>
+
+Prefixes the names with 'metatag.' in the parse-metadata. For instance to 
+index description and keywords, you need to activate the plugin index-metadata 
+and set the value of the parameter 'index.parse.md' to 'metatag.description;metatag.keywords'.
+  
+This code has been developed by DigitalPebble Ltd and offered to the community by ANT.com
+
+
+
+
diff --git src/plugin/parse-metatags/build.xml src/plugin/parse-metatags/build.xml
new file mode 100644
index 0000000..63ccb95
--- /dev/null
+++ src/plugin/parse-metatags/build.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<!--
+ 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.
+-->
+<project name="parse-metatags" default="jar-core">
+
+  <import file="../build-plugin.xml" />
+
+  <!-- Deploy Unit test dependencies -->
+  <target name="deps-test">
+    <ant target="deploy" inheritall="false" dir="../nutch-extensionpoints" />
+    <ant target="deploy" inheritall="false" dir="../protocol-file" />
+  </target>
+
+
+  <!-- for junit test -->
+  <mkdir dir="${build.test}/data" />
+  <copy todir="${build.test}/data">
+    <fileset dir="sample">
+      <include name="*.html"/>
+    </fileset>
+  </copy>
+
+</project>
diff --git src/plugin/parse-metatags/ivy.xml src/plugin/parse-metatags/ivy.xml
new file mode 100644
index 0000000..1a86d68
--- /dev/null
+++ src/plugin/parse-metatags/ivy.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" ?>
+
+<!--
+   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.
+-->
+
+<ivy-module version="1.0">
+  <info organisation="org.apache.nutch" module="${ant.project.name}">
+    <license name="Apache 2.0"/>
+    <ivyauthor name="Apache Nutch Team" url="http://nutch.apache.org"/>
+    <description>
+        Apache Nutch
+    </description>
+  </info>
+
+  <configurations>
+    <include file="../../..//ivy/ivy-configurations.xml"/>
+  </configurations>
+
+  <publications>
+    <!--get the artifact from our module name-->
+    <artifact conf="master"/>
+  </publications>
+
+  <dependencies>
+  </dependencies>
+  
+</ivy-module>
diff --git src/plugin/parse-metatags/plugin.xml src/plugin/parse-metatags/plugin.xml
new file mode 100644
index 0000000..6285e9c
--- /dev/null
+++ src/plugin/parse-metatags/plugin.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin
+   id="parse-metatags"
+   name="MetaTags"
+   version="1.0"
+   provider-name="digitalpebble.com">
+
+   <runtime>
+      <library name="parse-metatags.jar">
+         <export name="*"/>
+      </library>
+   </runtime>
+
+   <extension id="org.apache.nutch.parse.metatags.parser"
+              name="MetaTags Parser"
+              point="org.apache.nutch.parse.ParseFilter">
+      <implementation id="MetaTagsParser"
+                      class="org.apache.nutch.parse.MetaTagsParser"/>
+   </extension>
+
+</plugin>
+
diff --git src/plugin/parse-metatags/sample/testMetatags.html src/plugin/parse-metatags/sample/testMetatags.html
new file mode 100644
index 0000000..f056fd4
--- /dev/null
+++ src/plugin/parse-metatags/sample/testMetatags.html
@@ -0,0 +1,11 @@
+<html>
+<head>
+<meta name="Keywords" content="This is a test of keywords" />
+<meta name="Description" content="This is a test of description" />
+<meta name="Creator" content="Author1" />
+<meta name="Creator" content="Author2" />
+</head>
+<body>
+text of the document
+</body>
+
diff --git src/plugin/parse-metatags/sample/testMultivalueMetatags.html src/plugin/parse-metatags/sample/testMultivalueMetatags.html
new file mode 100644
index 0000000..63ad158
--- /dev/null
+++ src/plugin/parse-metatags/sample/testMultivalueMetatags.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+<meta name="DC.creator" content="Doug Cutting">
+<meta name="DC.creator" content="Michael Cafarella">
+<!-- meta keywords in different casing -->
+meta name="keywords" lang="en" content="web crawler" />
+<meta name="Keywords" lang="fr" content="robot d'indexation" />
+<meta name="KEYWORDS" lang="de" content="Webcrawler" />
+</head>
+<body>
+A test for multi-valued metatags.
+</body>
+</html>
\ No newline at end of file
diff --git src/plugin/parse-metatags/src/java/org/apache/nutch/parse/MetaTagsParser.java src/plugin/parse-metatags/src/java/org/apache/nutch/parse/MetaTagsParser.java
new file mode 100644
index 0000000..3421832
--- /dev/null
+++ src/plugin/parse-metatags/src/java/org/apache/nutch/parse/MetaTagsParser.java
@@ -0,0 +1,137 @@
+/**
+ * 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.nio.ByteBuffer;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Properties;
+import java.util.Set;
+
+import org.apache.avro.util.Utf8;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.nutch.metadata.Metadata;
+import org.apache.nutch.storage.WebPage;
+import org.apache.nutch.storage.WebPage.Field;
+import org.apache.nutch.util.Bytes;
+import org.w3c.dom.DocumentFragment;
+
+/**
+ * Parse HTML meta tags (keywords, description) and store them in the parse
+ * metadata so that they can be indexed with the index-metadata plugin with the
+ * prefix 'metatag.'
+ ***/
+
+public class MetaTagsParser implements ParseFilter {
+
+  private static final Log LOG = LogFactory.getLog(MetaTagsParser.class
+      .getName());
+
+  private Configuration conf;
+
+  private Set<String> metatagset = new HashSet<String>();
+
+  public void setConf(Configuration conf) {
+    this.conf = conf;
+    // specify whether we want a specific subset of metadata
+    // by default take everything we can find
+    String metatags = conf.get("metatags.names", "*");
+    String[] values = metatags.split(";");
+    for (String val : values)
+      metatagset.add(val.toLowerCase());
+  }
+
+  public Configuration getConf() {
+    return this.conf;
+  }
+
+  public Parse filter(String url, WebPage page, Parse parse,
+      HTMLMetaTags metaTags, DocumentFragment doc) {
+
+    Metadata metadata = new Metadata();
+    StringBuilder sb;
+
+    // check in the metadata first : the tika-parser
+    // might have stored the values there already
+    for (String mdName : metadata.names()) {
+      String value = metadata.get(mdName);
+      // check whether the name is in the list of what we want or if
+      // specified *
+      if (metatagset.contains("*") || metatagset.contains(mdName.toLowerCase())) {
+        LOG.debug("Found meta tag: '" + mdName + "', with value: '" + value
+            + "'");
+        metadata.add("metatag." + mdName.toLowerCase(), value);
+      }
+    }
+
+    Properties generalMetaTags = metaTags.getGeneralTags();
+    for (Iterator<Object> it = generalMetaTags.keySet().iterator(); it
+        .hasNext();) {
+      sb = new StringBuilder();
+      String name = (String) it.next();
+      String[] values = new String[] { (String) generalMetaTags.get(name) };
+      // The multivalues of a metadata field are saved with a separator '\t' in
+      // the storage
+      // unless there is only one entry, where no \t is appended.
+      for (String value : values) {
+        if (values.length > 1) {
+          sb.append(value + "\t");
+        } else {
+          sb.append(value);
+        }
+      }
+      page.putToMetadata(new Utf8(name),
+          ByteBuffer.wrap(Bytes.toBytes(sb.toString())));
+
+      // check whether the name is in the list of what we want or if
+      // specified *
+      if (metatagset.contains("*") || metatagset.contains(name.toLowerCase())) {
+        for (int i = 0; i < values.length; i++) {
+          // Add the recently parsed value of multiValued array to metadata
+          LOG.warn("Found meta tag : " + name + "\t" + values[i]);
+          metadata.add("metatag." + name.toLowerCase(), values[i]);
+        }
+      }
+    }
+
+    Properties httpequiv = metaTags.getHttpEquivTags();
+    for (Enumeration<?> tagNames = httpequiv.propertyNames(); tagNames
+        .hasMoreElements();) {
+      String name = (String) tagNames.nextElement();
+      String value = httpequiv.getProperty(name);
+      // check whether the name is in the list of what we want or if
+      // specified *
+      if (metatagset.contains("*") || metatagset.contains(name.toLowerCase())) {
+        LOG.debug("Found meta tag : " + name + "\t" + value);
+        metadata.add("metatag." + name.toLowerCase(), value);
+      }
+    }
+
+    return parse;
+  }
+
+  @Override
+  public Collection<Field> getFields() {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+}
diff --git src/plugin/parse-metatags/src/test/org/apache/nutch/parse/html/TestMetatagsParser.java src/plugin/parse-metatags/src/test/org/apache/nutch/parse/html/TestMetatagsParser.java
new file mode 100644
index 0000000..ca24b20
--- /dev/null
+++ src/plugin/parse-metatags/src/test/org/apache/nutch/parse/html/TestMetatagsParser.java
@@ -0,0 +1,87 @@
+/**
+ * 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.html;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import org.apache.avro.util.Utf8;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.nutch.parse.ParseUtil;
+import org.apache.nutch.storage.WebPage;
+import org.apache.nutch.util.Bytes;
+import org.apache.nutch.util.NutchConfiguration;
+import org.junit.Test;
+
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.nio.ByteBuffer;
+import java.util.Map;
+
+public class TestMetatagsParser {
+
+  private String fileSeparator = System.getProperty("file.separator");
+  private String sampleDir = System.getProperty("test.data", ".");
+  private String sampleFile = "testMetatags.html";
+  private String description = "This is a test of description";
+  private String keywords = "This is a test of keywords";
+
+  public Map<Utf8, ByteBuffer> parseMeta(String fileName, Configuration conf) {
+    try {
+      String urlString = "file:" + sampleDir + fileSeparator + fileName;
+
+      File file = new File(sampleDir + fileSeparator + fileName);
+      byte[] bytes = new byte[(int) file.length()];
+      DataInputStream in = new DataInputStream(new FileInputStream(file));
+      in.readFully(bytes);
+      in.close();
+
+      WebPage page = new WebPage();
+      page.setBaseUrl(new Utf8(urlString));
+      page.setContent(ByteBuffer.wrap(bytes));
+      page.setContentType(new Utf8("text/html"));
+      
+      ParseUtil parser = new ParseUtil(NutchConfiguration.create());
+      parser.parse(urlString, page);
+
+      return page.getMetadata();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.toString());
+      return null;
+    }
+  }
+
+  @Test
+  public void testIt() {
+    Configuration conf = NutchConfiguration.create();
+
+    // check that we get the same values
+    Map<Utf8, ByteBuffer> meta = parseMeta(sampleFile, conf);
+
+    assertEquals(description, getMeta(meta, "description"));
+    assertEquals(keywords, getMeta(meta, "keywords"));
+  }
+
+  private String getMeta(Map<Utf8, ByteBuffer> meta, String name) {
+    ByteBuffer raw = meta.get(new Utf8(name));
+    return Bytes.toString(raw);
+  }
+
+}
