Index: src/java/org/apache/nutch/searcher/NutchBean.java
===================================================================
--- src/java/org/apache/nutch/searcher/NutchBean.java	(revision 378108)
+++ src/java/org/apache/nutch/searcher/NutchBean.java	(working copy)
@@ -22,6 +22,7 @@
 import javax.servlet.ServletContext;
 
 import org.apache.hadoop.fs.*;
+import org.apache.hadoop.io.Closeable;
 import org.apache.hadoop.conf.*;
 import org.apache.hadoop.util.LogFormatter;
 import org.apache.nutch.parse.*;
@@ -35,7 +36,7 @@
  */   
 public class NutchBean
   implements Searcher, HitDetailer, HitSummarizer, HitContent, HitInlinks,
-             DistributedSearch.Protocol {
+             DistributedSearch.Protocol, Closeable {
 
   public static final Logger LOG =
     LogFormatter.getLogger("org.apache.nutch.searcher.NutchBean");
@@ -352,6 +353,13 @@
     return content.getFetchDate(hit);
   }
 
+  public void close() throws IOException {
+    if(content != null) {content.close();}
+    if(searcher!=null){searcher.close();}
+    if(linkDb!=null){linkDb.close();}
+    if(fs!=null){fs.close();}
+  }
+  
   /** For debugging. */
   public static void main(String[] args) throws Exception {
     String usage = "NutchBean query";
Index: src/java/org/apache/nutch/searcher/FetchedSegments.java
===================================================================
--- src/java/org/apache/nutch/searcher/FetchedSegments.java	(revision 378108)
+++ src/java/org/apache/nutch/searcher/FetchedSegments.java	(working copy)
@@ -20,6 +20,7 @@
 import java.io.File;
 
 import java.util.HashMap;
+import java.util.Iterator;
 
 import org.apache.hadoop.io.*;
 import org.apache.hadoop.fs.*;
@@ -34,7 +35,7 @@
  * fetched segments. */
 public class FetchedSegments implements HitSummarizer, HitContent {
 
-  private static class Segment {
+  private static class Segment implements Closeable {
     private static final Partitioner PARTITIONER = new HashPartitioner();
 
     private FileSystem fs;
@@ -93,6 +94,19 @@
       return MapFileOutputFormat.getEntry(readers, PARTITIONER, url, entry);
     }
 
+    public void close() throws IOException {
+      if(content!=null){closeReaders(content);}
+      if(parseText!=null){closeReaders(parseText);}
+      if(parseData!=null){closeReaders(parseData);}
+      if(crawl!=null){closeReaders(crawl);}
+    }
+
+    private void closeReaders(MapFile.Reader[] readers) throws IOException {
+      for (int i = 0; i < readers.length; i++) {
+        readers[i].close();
+      }
+    }
+
   }
 
   private HashMap segments = new HashMap();
@@ -206,5 +220,11 @@
     return new UTF8(details.getValue("url"));
   }
 
-
+  public void close() throws IOException {
+    Iterator iterator = segments.values().iterator();
+    while (iterator.hasNext()) {
+      ((Segment) iterator.next()).close();
+    }
+  }
+  
 }
Index: src/java/org/apache/nutch/searcher/HitInlinks.java
===================================================================
--- src/java/org/apache/nutch/searcher/HitInlinks.java	(revision 378108)
+++ src/java/org/apache/nutch/searcher/HitInlinks.java	(working copy)
@@ -18,10 +18,11 @@
 
 import java.io.IOException;
 
+import org.apache.hadoop.io.Closeable;
 import org.apache.nutch.crawl.Inlinks;
 
 /** Service that returns information about incoming links to a hit. */
-public interface HitInlinks {
+public interface HitInlinks extends Closeable {
   /** Returns the anchors of a hit document. */
   String[] getAnchors(HitDetails details) throws IOException;
 
Index: src/java/org/apache/nutch/searcher/HitContent.java
===================================================================
--- src/java/org/apache/nutch/searcher/HitContent.java	(revision 378108)
+++ src/java/org/apache/nutch/searcher/HitContent.java	(working copy)
@@ -18,11 +18,12 @@
 
 import java.io.IOException;
 
+import org.apache.hadoop.io.Closeable;
 import org.apache.nutch.parse.ParseData;
 import org.apache.nutch.parse.ParseText;
 
 /** Service that returns the content of a hit. */
-public interface HitContent {
+public interface HitContent extends Closeable{
   /** Returns the content of a hit document. */
   byte[] getContent(HitDetails details) throws IOException;
 
Index: src/java/org/apache/nutch/searcher/IndexSearcher.java
===================================================================
--- src/java/org/apache/nutch/searcher/IndexSearcher.java	(revision 378108)
+++ src/java/org/apache/nutch/searcher/IndexSearcher.java	(working copy)
@@ -165,5 +165,10 @@
     }
     return new Hits(topDocs.totalHits, hits);
   }
+  
+  public void close() throws IOException {
+    if(luceneSearcher!=null){luceneSearcher.close();}
+    if(reader!=null){reader.close();}
+  }
 
 }
Index: src/java/org/apache/nutch/searcher/LinkDbInlinks.java
===================================================================
--- src/java/org/apache/nutch/searcher/LinkDbInlinks.java	(revision 378108)
+++ src/java/org/apache/nutch/searcher/LinkDbInlinks.java	(working copy)
@@ -30,4 +30,8 @@
   public Inlinks getInlinks(HitDetails details) throws IOException {
     return linkdb.getInlinks(new UTF8(details.getValue("url")));
   }
+
+  public void close() throws IOException {
+   if(linkdb!=null){linkdb.close();}
+  }
 }
Index: src/java/org/apache/nutch/searcher/Searcher.java
===================================================================
--- src/java/org/apache/nutch/searcher/Searcher.java	(revision 378108)
+++ src/java/org/apache/nutch/searcher/Searcher.java	(working copy)
@@ -18,8 +18,10 @@
 
 import java.io.IOException;
 
+import org.apache.hadoop.io.Closeable;
+
 /** Service that searches. */
-public interface Searcher {
+public interface Searcher extends Closeable{
   /** Return the top-scoring hits for a query. */
   Hits search(Query query, int numHits,
               String dedupField, String sortField, boolean reverse)
Index: src/java/org/apache/nutch/crawl/LinkDbReader.java
===================================================================
--- src/java/org/apache/nutch/crawl/LinkDbReader.java	(revision 378108)
+++ src/java/org/apache/nutch/crawl/LinkDbReader.java	(working copy)
@@ -32,7 +32,7 @@
 import java.util.logging.Logger;
 
 /** . */
-public class LinkDbReader {
+public class LinkDbReader implements Closeable{
   public static final Logger LOG = LogFormatter.getLogger(LinkDbReader.class.getName());
 
   private static final Partitioner PARTITIONER = new HashPartitioner();
@@ -68,6 +68,15 @@
       (readers, PARTITIONER, url, new Inlinks());
   }
   
+  public void close() throws IOException {
+    if (readers != null) {
+      for (int i = 0; i < readers.length; i++) {
+        readers[i].close();
+      }
+    }
+    
+  }
+  
   public static void processDumpJob(String linkdb, String output, Configuration config) throws IOException {
     LOG.info("LinkDb dump: starting");
     LOG.info("LinkDb db: " + linkdb);
@@ -113,4 +122,6 @@
       return;
     }
   }
+
+ 
 }
