Index: src/test/org/apache/nutch/crawl/TestLinkDbMerger.java
===================================================================
--- src/test/org/apache/nutch/crawl/TestLinkDbMerger.java	(revision 628628)
+++ src/test/org/apache/nutch/crawl/TestLinkDbMerger.java	(working copy)
@@ -149,7 +149,7 @@
       Inlinks inlinks = new Inlinks();
       String[] vals = (String[])init.get(key);
       for (int i = 0; i < vals.length; i++) {
-        Inlink in = new Inlink(vals[i], vals[i]);
+        Inlink in = new Inlink(vals[i], vals[i], 0.0f);
         inlinks.add(in);
       }
       writer.append(new Text(key), inlinks);
Index: src/java/org/apache/nutch/crawl/LinkDb.java
===================================================================
--- src/java/org/apache/nutch/crawl/LinkDb.java	(revision 628628)
+++ src/java/org/apache/nutch/crawl/LinkDb.java	(working copy)
@@ -33,6 +33,7 @@
 import org.apache.hadoop.util.StringUtils;
 import org.apache.hadoop.util.ToolBase;
 
+import org.apache.nutch.metadata.Nutch;
 import org.apache.nutch.net.URLFilters;
 import org.apache.nutch.net.URLNormalizers;
 import org.apache.nutch.parse.*;
@@ -98,6 +99,7 @@
     }
     if (fromUrl == null) return; // discard all outlinks
     ParseData parseData = (ParseData)value;
+    float score = Float.parseFloat(parseData.getContentMeta().get(Nutch.SCORE_KEY));
     Outlink[] outlinks = parseData.getOutlinks();
     Inlinks inlinks = new Inlinks();
     for (int i = 0; i < outlinks.length; i++) {
@@ -132,7 +134,7 @@
       if (anchor.length() > maxAnchorLength) {
         anchor = anchor.substring(0, maxAnchorLength);
       }
-      inlinks.add(new Inlink(fromUrl, anchor));   // collect inverted link
+      inlinks.add(new Inlink(fromUrl, anchor, score));   // collect inverted link
       output.collect(new Text(toUrl), inlinks);
     }
   }
Index: src/java/org/apache/nutch/crawl/LinkDbMerger.java
===================================================================
--- src/java/org/apache/nutch/crawl/LinkDbMerger.java	(revision 628628)
+++ src/java/org/apache/nutch/crawl/LinkDbMerger.java	(working copy)
@@ -79,7 +79,7 @@
       Inlinks inlinks = (Inlinks)values.next();
 
       int end = Math.min(maxInlinks - result.size(), inlinks.size());
-      Iterator<Inlink> it = inlinks.iterator();
+      Iterator<Inlink> it = inlinks.iterator();      
       int i = 0;
       while(it.hasNext() && i++ < end) {
         result.add(it.next());
Index: src/java/org/apache/nutch/crawl/Inlinks.java
===================================================================
--- src/java/org/apache/nutch/crawl/Inlinks.java	(revision 628628)
+++ src/java/org/apache/nutch/crawl/Inlinks.java	(working copy)
@@ -25,13 +25,30 @@
 
 /** A list of {@link Inlink}s. */
 public class Inlinks implements Writable {
-  private HashSet<Inlink> inlinks = new HashSet<Inlink>(1);
+  
+  // a treeset using a reverse float comparator, should give us the highest
+  // scoring urls first
+  private TreeSet<Inlink> inlinks = new TreeSet<Inlink>(new Comparator<Inlink>() {
+    public int compare(Inlink first, Inlink second) {
+      boolean areEqual = first.equals(second);
+      float firstScore = first.getScore();
+      float secondScore = second.getScore();
+      if (firstScore < secondScore) {
+        return 1;
+      }
+      else if (firstScore == secondScore && areEqual) {
+        return 0;
+      }      
+      return -1;
+    }    
+  });
 
   public void add(Inlink inlink) { inlinks.add(inlink); }
 
   public void add(Inlinks inlinks) { this.inlinks.addAll(inlinks.inlinks); }
 
   public Iterator<Inlink> iterator() {
+
     return this.inlinks.iterator();
   }
   
Index: src/java/org/apache/nutch/crawl/LinkDbFilter.java
===================================================================
--- src/java/org/apache/nutch/crawl/LinkDbFilter.java	(revision 628628)
+++ src/java/org/apache/nutch/crawl/LinkDbFilter.java	(working copy)
@@ -116,7 +116,7 @@
         }
       }
       if (fromUrl != null) { 
-        result.add(new Inlink(fromUrl, inlink.getAnchor()));
+        result.add(new Inlink(fromUrl, inlink.getAnchor(), inlink.getScore()));
       }
     }
     if (result.size() > 0) { // don't collect empty inlinks
Index: src/java/org/apache/nutch/crawl/Inlink.java
===================================================================
--- src/java/org/apache/nutch/crawl/Inlink.java	(revision 628628)
+++ src/java/org/apache/nutch/crawl/Inlink.java	(working copy)
@@ -25,28 +25,33 @@
 
   private String fromUrl;
   private String anchor;
+  private float score = 0.0f;
 
   public Inlink() {}
 
-  public Inlink(String fromUrl, String anchor) {
+  public Inlink(String fromUrl, String anchor, float score) {
     this.fromUrl = fromUrl;
     this.anchor = anchor;
+    this.score = score;
   }
 
   public void readFields(DataInput in) throws IOException {
     fromUrl = Text.readString(in);
     anchor = Text.readString(in);
+    score = in.readFloat();
   }
 
   /** Skips over one Inlink in the input. */
   public static void skip(DataInput in) throws IOException {
     Text.skip(in);                                // skip fromUrl
     Text.skip(in);                                // skip anchor
+    in.readFloat();
   }
 
   public void write(DataOutput out) throws IOException {
     Text.writeString(out, fromUrl);
     Text.writeString(out, anchor);
+    out.writeFloat(score);
   }
 
   public static Inlink read(DataInput in) throws IOException {
@@ -57,6 +62,7 @@
 
   public String getFromUrl() { return fromUrl; }
   public String getAnchor() { return anchor; }
+  public float getScore() { return score; }
 
   public boolean equals(Object o) {
     if (!(o instanceof Inlink))
@@ -64,15 +70,16 @@
     Inlink other = (Inlink)o;
     return
       this.fromUrl.equals(other.fromUrl) &&
-      this.anchor.equals(other.anchor);
+      this.anchor.equals(other.anchor) &&
+      this.score == other.score;
   }
 
   public int hashCode() {
-    return fromUrl.hashCode() ^ anchor.hashCode();
+    return fromUrl.hashCode() ^ anchor.hashCode() + (int)score;
   }
 
   public String toString() {
-    return "fromUrl: " + fromUrl + " anchor: " + anchor;
+    return "fromUrl: " + fromUrl + " anchor: " + anchor + " score: " + score;
   }
 
 }

