Index: src/test/org/apache/nutch/searcher/TestHitDetails.java
===================================================================
--- src/test/org/apache/nutch/searcher/TestHitDetails.java	(revision 375396)
+++ src/test/org/apache/nutch/searcher/TestHitDetails.java	(working copy)
@@ -25,7 +25,7 @@
   public void testHitDetails() throws Exception {
     final int length = 3;
     final String[] fields = new String[] {"a", "b", "c" };
-    final String[] values = new String[] { "foo", "bar", "baz" };
+    final String[][] values = new String[][] { {"foo"}, {"bar"}, {"baz", "bazz"} };
 
     HitDetails before = new HitDetails(fields, values);
 
@@ -40,8 +40,9 @@
     assertEquals(length, after.getLength());
     for (int i = 0; i < length; i++) {
       assertEquals(fields[i], after.getField(i));
-      assertEquals(values[i], after.getValue(i));
-      assertEquals(values[i], after.getValue(fields[i]));
+      assertEquals(values[i][0], after.getValue(i));
+      assertEquals(values[i][0], after.getValue(fields[i]));
     }
+    assertEquals(values[2][1], after.getValues(fields[2])[1]);
   }
 }
Index: src/java/org/apache/nutch/searcher/IndexSearcher.java
===================================================================
--- src/java/org/apache/nutch/searcher/IndexSearcher.java	(revision 375396)
+++ src/java/org/apache/nutch/searcher/IndexSearcher.java	(working copy)
@@ -111,14 +111,17 @@
     Document doc = luceneSearcher.doc(hit.getIndexDocNo());
 
     Enumeration e = doc.fields();
+    String fieldName;
+    Field field;
     while (e.hasMoreElements()) {
-      Field field = (Field)e.nextElement();
-      fields.add(field.name());
-      values.add(field.stringValue());
+      field = (Field)e.nextElement();
+      fieldName = field.name();
+      fields.add(fieldName);
+      values.add(doc.getValues(fieldName));
     }
 
     return new HitDetails((String[])fields.toArray(new String[fields.size()]),
-                          (String[])values.toArray(new String[values.size()]));
+                          (String[][])values.toArray(new String[values.size()][]));
   }
 
   public HitDetails[] getDetails(Hit[] hits) throws IOException {
Index: src/java/org/apache/nutch/searcher/HitDetails.java
===================================================================
--- src/java/org/apache/nutch/searcher/HitDetails.java	(revision 375396)
+++ src/java/org/apache/nutch/searcher/HitDetails.java	(working copy)
@@ -19,28 +19,25 @@
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
-import java.util.logging.Logger;
 
 import org.apache.hadoop.io.*;
 import org.apache.nutch.html.Entities;
-import org.apache.hadoop.util.LogFormatter;
 
 /** Data stored in the index for a hit.
  *
  * <p>Represented as a list of name/value pairs.
  */
 public final class HitDetails implements Writable {
-  private static final Logger LOG =
-    LogFormatter.getLogger("org.apache.nutch.searcher.HitDetails");
+  
 
   private int length;
   private String[] fields;
-  private String[] values;
+  private String[][] values;
 
   public HitDetails() {}
 
   /** Construct from field names and values arrays. */
-  public HitDetails(String[] fields, String[] values) {
+  public HitDetails(String[] fields, String[][] values) {
     this.length = fields.length;
     this.fields = fields;
     this.values = values;
@@ -48,11 +45,11 @@
 
   /** Construct minimal details from a segment name and document number. */
   public HitDetails(String segment, String url) {
-    this(new String[2], new String[2]);
+    this(new String[2], new String[2][1]);
     this.fields[0] = "segment";
-    this.values[0] = segment;
+    this.values[0][0] = segment;
     this.fields[1] = "url";
-    this.values[1] = url;
+    this.values[1][0] = url;
   }
 
   /** Returns the number of fields contained in this. */
@@ -62,12 +59,21 @@
   public String getField(int i) { return fields[i]; }
 
   /** Returns the value of the <code>i</code><sup>th</sup> field. */
-  public String getValue(int i) { return values[i]; }
+  public String getValue(int i) { return values[i][0]; }
   
   /** Returns the value of the first field with the specified name. */
   public String getValue(String field) {
     for (int i = 0; i < length; i++) {
       if (fields[i].equals(field))
+        return values[i][0];
+    }
+    return null;
+  }
+  
+  /** Returns the values of the first field with the specified name. */
+  public String[] getValues(String field) {
+    for (int i = 0; i < length; i++) {
+      if (fields[i].equals(field))
         return values[i];
     }
     return null;
@@ -78,8 +84,12 @@
     out.writeInt(length);
     for (int i = 0; i < length; i++) {
       out.writeUTF(fields[i]);
-      out.writeUTF(values[i]);
-    }
+      int count = values[i].length;
+      out.writeInt(count);
+        for (int j = 0; j < count; j++) {
+          out.writeUTF(values[i][j]);
+         }
+      }
   }
   
   /** Constructs, reads and returns an instance. */
@@ -93,11 +103,15 @@
   public void readFields(DataInput in) throws IOException {
     length = in.readInt();
     fields = new String[length];
-    values = new String[length];
+    values = new String[length][];
     for (int i = 0; i < length; i++) {
       fields[i] = in.readUTF();
-      values[i] = in.readUTF();
-    }
+      int count = in.readInt();
+       values[i] = new String[count];
+       for (int j = 0; j < count; j++) {
+           values[i][j] = in.readUTF();
+        }
+     }
   }
 
   /** Display as a string. */
@@ -113,7 +127,7 @@
       buffer.append("<li>");
       buffer.append(fields[i]);
       buffer.append(" = ");
-      buffer.append(Entities.encode(values[i]));
+      buffer.append(Entities.encode(values[i][0]));
       buffer.append("</li>\n");
     }
     buffer.append("</ul>\n");
