Index: src/java/org/apache/nutch/crawl/CrawlDbReducer.java
===================================================================
--- src/java/org/apache/nutch/crawl/CrawlDbReducer.java	(revision 760293)
+++ src/java/org/apache/nutch/crawl/CrawlDbReducer.java	(working copy)
@@ -232,9 +232,9 @@
     case CrawlDatum.STATUS_FETCH_GONE:            // permanent failure
       if (oldSet)
         result.setSignature(old.getSignature());  // use old signature
-      result.setStatus(CrawlDatum.STATUS_DB_GONE);
-      result = schedule.setPageGoneSchedule((Text)key, result, prevFetchTime,
-          prevModifiedTime, fetch.getFetchTime());
+        result.setStatus(CrawlDatum.STATUS_DB_GONE);
+        result = schedule.setPageGoneSchedule((Text)key, result, prevFetchTime,
+            prevModifiedTime, fetch.getFetchTime());
       break;
 
     default:
Index: src/java/org/apache/nutch/crawl/AbstractFetchSchedule.java
===================================================================
--- src/java/org/apache/nutch/crawl/AbstractFetchSchedule.java	(revision 760293)
+++ src/java/org/apache/nutch/crawl/AbstractFetchSchedule.java	(working copy)
@@ -125,7 +125,10 @@
    */
   public CrawlDatum setPageRetrySchedule(Text url, CrawlDatum datum,
           long prevFetchTime, long prevModifiedTime, long fetchTime) {
-    datum.setFetchTime(fetchTime + (long)SECONDS_PER_DAY*1000);
+    // increase the interval by 50% and try much later.
+    int fetchInterval = (int) Math.min(datum.getFetchInterval() * 1.5f, maxInterval);
+    datum.setFetchInterval(fetchInterval);
+    datum.setFetchTime(fetchTime + (long) datum.getFetchInterval() * 1000);
     datum.setRetriesSinceFetch(datum.getRetriesSinceFetch() + 1);
     return datum;
   }
