Index: src/java/org/apache/nutch/parse/ParserJob.java
===================================================================
--- src/java/org/apache/nutch/parse/ParserJob.java	(revision 1365561)
+++ src/java/org/apache/nutch/parse/ParserJob.java	(working copy)
@@ -55,6 +55,8 @@
   private static final String FORCE_KEY = "parse.job.force";
   
   public static final String SKIP_TRUNCATED = "parser.skip.truncated";
+  
+  private static final Utf8 REPARSE = new Utf8("-reparse");
 
   private static final Collection<WebPage.Field> FIELDS = new HashSet<WebPage.Field>();
 
@@ -100,19 +102,23 @@
         throws IOException, InterruptedException {
       Utf8 mark = Mark.FETCH_MARK.checkMark(page);
       String unreverseKey = TableUtil.unreverseUrl(key);
-      if (!NutchJob.shouldProcess(mark, batchId)) {
-        LOG.info("Skipping " + unreverseKey + "; different batch id");
-        return;
-      }
-      if (shouldResume && Mark.PARSE_MARK.checkMark(page) != null) {
-        if (force) {
-          LOG.info("Forced parsing " + unreverseKey + "; already parsed");
-        } else {
-          LOG.info("Skipping " + unreverseKey + "; already parsed");
+      if (batchId.equals(REPARSE)) {
+        LOG.debug("Reparsing " + unreverseKey);
+      } else {
+        if (!NutchJob.shouldProcess(mark, batchId)) {
+          LOG.info("Skipping " + unreverseKey + "; different batch id");
           return;
         }
-      } else {
-        LOG.info("Parsing " + unreverseKey);
+        if (shouldResume && Mark.PARSE_MARK.checkMark(page) != null) {
+          if (force) {
+            LOG.info("Forced parsing " + unreverseKey + "; already parsed");
+          } else {
+            LOG.info("Skipping " + unreverseKey + "; already parsed");
+            return;
+          }
+        } else {
+          LOG.info("Parsing " + unreverseKey);
+        }
       }
 
       if (skipTruncated && isTruncated(unreverseKey, page)) {
@@ -294,7 +300,7 @@
       }
     }
     if (batchId == null) {
-      System.err.println("BatchId not set (or -all not specified)!");
+      System.err.println("BatchId not set (or -all/-reparse not specified)!");
       return -1;
     }
     return parse(batchId, shouldResume, force);
Index: src/java/org/apache/nutch/parse/ParseUtil.java
===================================================================
--- src/java/org/apache/nutch/parse/ParseUtil.java	(revision 1365561)
+++ src/java/org/apache/nutch/parse/ParseUtil.java	(working copy)
@@ -269,7 +269,10 @@
 
           page.putToOutlinks(new Utf8(toUrl), new Utf8(outlinks[i].getAnchor()));
         }
-        Mark.PARSE_MARK.putMark(page, Mark.FETCH_MARK.checkMark(page));
+        Utf8 fetchMark = Mark.FETCH_MARK.checkMark(page);
+        if (fetchMark != null) {
+          Mark.PARSE_MARK.putMark(page, fetchMark);
+        }
       }
     }
     return redirectedPage;
