Index: trunk/src/org/openstreetmap/josm/gui/history/DiffTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/DiffTableModel.java	(revision 4689)
+++ trunk/src/org/openstreetmap/josm/gui/history/DiffTableModel.java	(revision 4689)
@@ -0,0 +1,41 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.history;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.table.AbstractTableModel;
+
+/**
+ * Simple model storing "diff cells" in a list. Could probably have used a DefaultTableModel instead..
+ *
+ * {@see NodeListDiffTableCellRenderer}
+ */
+class DiffTableModel extends AbstractTableModel {
+    private List<TwoColumnDiff.Item> rows;
+
+    public void setRows(List<TwoColumnDiff.Item> rows) {
+        this.rows = rows;
+    }
+
+    public DiffTableModel(List<TwoColumnDiff.Item> rows) {
+        this.rows = rows;
+    }
+    public DiffTableModel() {
+        this.rows = new ArrayList<TwoColumnDiff.Item>();
+    }
+    @Override
+    public int getRowCount() {
+        return rows.size();
+    }
+
+    @Override
+    public int getColumnCount() {
+        return 1;
+    }
+
+    @Override
+    public TwoColumnDiff.Item getValueAt(int rowIndex, int columnIndex) {
+        return rows.get(rowIndex);
+    }
+}
Index: trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java	(revision 4688)
+++ trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java	(revision 4689)
@@ -8,5 +8,4 @@
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Observable;
 
@@ -900,137 +899,2 @@
     }
 }
-
-/**
- * Simple model storing "diff cells" in a list. Could probably have used a DefaultTableModel instead..
- *
- * {@see NodeListDiffTableCellRenderer}
- */
-class DiffTableModel extends AbstractTableModel {
-    private List<TwoColumnDiff.Item> rows;
-
-    public void setRows(List<TwoColumnDiff.Item> rows) {
-        this.rows = rows;
-    }
-
-    public DiffTableModel(List<TwoColumnDiff.Item> rows) {
-        this.rows = rows;
-    }
-    public DiffTableModel() {
-        this.rows = new ArrayList<TwoColumnDiff.Item>();
-    }
-    @Override
-    public int getRowCount() {
-        return rows.size();
-    }
-
-    @Override
-    public int getColumnCount() {
-        return 1;
-    }
-
-    @Override
-    public TwoColumnDiff.Item getValueAt(int rowIndex, int columnIndex) {
-        return rows.get(rowIndex);
-    }
-}
-
-
-/// Feel free to move me somewhere else. Maybe a bit specific for josm.tools?
-/**
- * Produces a "two column diff" of two lists. (same as diff -y)
- *
- * Each list is annotated with the changes relative to the other, and "empty" cells are inserted so the lists are comparable item by item.
- *
- * diff on [1 2 3 4] [1 a 4 5] yields:
- *
- * item(SAME, 1)    item(SAME, 1)
- * item(CHANGED, 2) item(CHANGED, 2)
- * item(DELETED, 3) item(EMPTY)
- * item(SAME, 4)    item(SAME, 4)
- * item(EMPTY)      item(INSERTED, 5)
- *
- * @author olejorgenb
- */
-class TwoColumnDiff {
-    public static class Item {
-        public static final int INSERTED = 1;
-        public static final int DELETED = 2;
-        public static final int CHANGED = 3;
-        public static final int SAME = 4;
-        public static final int EMPTY = 5; // value should be null
-        public Item(int state, Object value) {
-            this.state = state;
-            this.value = state == EMPTY ? null : value;
-        }
-
-        public final Object value;
-        public final int state;
-    }
-
-    public ArrayList<Item> referenceDiff;
-    public ArrayList<Item> currentDiff;
-    Object[] reference;
-    Object[] current;
-
-    /**
-     * The arguments will _not_ be modified
-     */
-    public TwoColumnDiff(Object[] reference, Object[] current) {
-        this.reference = reference;
-        this.current = current;
-        referenceDiff = new ArrayList<Item>();
-        currentDiff = new ArrayList<Item>();
-        diff();
-    }
-    private void diff() {
-        Diff diff = new Diff(reference, current);
-        Diff.change script = diff.diff_2(false);
-        twoColumnDiffFromScript(script, reference, current);
-    }
-
-    /**
-     * The result from the diff algorithm is a "script" (a compressed description of the changes)
-     * This method expands this script into a full two column description.
-     */
-    private void twoColumnDiffFromScript(Diff.change script, Object[] a, Object[] b) {
-        int ia = 0;
-        int ib = 0;
-
-        while(script != null) {
-            int deleted = script.deleted;
-            int inserted = script.inserted;
-            while(ia < script.line0 && ib < script.line1){
-                // System.out.println(" "+a[ia] + "\t "+b[ib]);
-                Item cell = new Item(Item.SAME, a[ia]);
-                referenceDiff.add(cell);
-                currentDiff.add(cell);
-                ia++;
-                ib++;
-            }
-
-            while(inserted > 0 || deleted > 0) {
-                if(inserted > 0 && deleted > 0) {
-                    // System.out.println("="+a[ia] + "\t="+b[ib]);
-                    referenceDiff.add(new Item(Item.CHANGED, a[ia++]));
-                    currentDiff.add(new Item(Item.CHANGED, b[ib++]));
-                } else if(inserted > 0) {
-                    // System.out.println("\t+" + b[ib]);
-                    referenceDiff.add(new Item(Item.EMPTY, null));
-                    currentDiff.add(new Item(Item.INSERTED, b[ib++]));
-                } else if(deleted > 0) {
-                    // System.out.println("-"+a[ia]);
-                    referenceDiff.add(new Item(Item.DELETED, a[ia++]));
-                    currentDiff.add(new Item(Item.EMPTY, null));
-                }
-                inserted--;
-                deleted--;
-            }
-            script = script.link;
-        }
-        while(ia < a.length && ib < b.length) {
-            // System.out.println((ia < a.length ? " "+a[ia]+"\t" : "\t") + (ib < b.length ? " "+b[ib] : ""));
-            referenceDiff.add(new Item(Item.SAME, a[ia++]));
-            currentDiff.add(new Item(Item.SAME, b[ib++]));
-        }
-    }
-}
Index: trunk/src/org/openstreetmap/josm/gui/history/TwoColumnDiff.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/TwoColumnDiff.java	(revision 4689)
+++ trunk/src/org/openstreetmap/josm/gui/history/TwoColumnDiff.java	(revision 4689)
@@ -0,0 +1,106 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.history;
+/// Feel free to move me somewhere else. Maybe a bit specific for josm.tools?
+
+import java.util.ArrayList;
+
+import org.openstreetmap.josm.tools.Diff;
+
+/**
+ * Produces a "two column diff" of two lists. (same as diff -y)
+ *
+ * Each list is annotated with the changes relative to the other, and "empty" cells are inserted so the lists are comparable item by item.
+ *
+ * diff on [1 2 3 4] [1 a 4 5] yields:
+ *
+ * item(SAME, 1)    item(SAME, 1)
+ * item(CHANGED, 2) item(CHANGED, 2)
+ * item(DELETED, 3) item(EMPTY)
+ * item(SAME, 4)    item(SAME, 4)
+ * item(EMPTY)      item(INSERTED, 5)
+ *
+ * @author olejorgenb
+ */
+class TwoColumnDiff {
+    public static class Item {
+        public static final int INSERTED = 1;
+        public static final int DELETED = 2;
+        public static final int CHANGED = 3;
+        public static final int SAME = 4;
+        public static final int EMPTY = 5; // value should be null
+        public Item(int state, Object value) {
+            this.state = state;
+            this.value = state == EMPTY ? null : value;
+        }
+
+        public final Object value;
+        public final int state;
+    }
+
+    public ArrayList<Item> referenceDiff;
+    public ArrayList<Item> currentDiff;
+    Object[] reference;
+    Object[] current;
+
+    /**
+     * The arguments will _not_ be modified
+     */
+    public TwoColumnDiff(Object[] reference, Object[] current) {
+        this.reference = reference;
+        this.current = current;
+        referenceDiff = new ArrayList<Item>();
+        currentDiff = new ArrayList<Item>();
+        diff();
+    }
+    private void diff() {
+        Diff diff = new Diff(reference, current);
+        Diff.change script = diff.diff_2(false);
+        twoColumnDiffFromScript(script, reference, current);
+    }
+
+    /**
+     * The result from the diff algorithm is a "script" (a compressed description of the changes)
+     * This method expands this script into a full two column description.
+     */
+    private void twoColumnDiffFromScript(Diff.change script, Object[] a, Object[] b) {
+        int ia = 0;
+        int ib = 0;
+
+        while(script != null) {
+            int deleted = script.deleted;
+            int inserted = script.inserted;
+            while(ia < script.line0 && ib < script.line1){
+                // System.out.println(" "+a[ia] + "\t "+b[ib]);
+                Item cell = new Item(Item.SAME, a[ia]);
+                referenceDiff.add(cell);
+                currentDiff.add(cell);
+                ia++;
+                ib++;
+            }
+
+            while(inserted > 0 || deleted > 0) {
+                if(inserted > 0 && deleted > 0) {
+                    // System.out.println("="+a[ia] + "\t="+b[ib]);
+                    referenceDiff.add(new Item(Item.CHANGED, a[ia++]));
+                    currentDiff.add(new Item(Item.CHANGED, b[ib++]));
+                } else if(inserted > 0) {
+                    // System.out.println("\t+" + b[ib]);
+                    referenceDiff.add(new Item(Item.EMPTY, null));
+                    currentDiff.add(new Item(Item.INSERTED, b[ib++]));
+                } else if(deleted > 0) {
+                    // System.out.println("-"+a[ia]);
+                    referenceDiff.add(new Item(Item.DELETED, a[ia++]));
+                    currentDiff.add(new Item(Item.EMPTY, null));
+                }
+                inserted--;
+                deleted--;
+            }
+            script = script.link;
+        }
+        while(ia < a.length && ib < b.length) {
+            // System.out.println((ia < a.length ? " "+a[ia]+"\t" : "\t") + (ib < b.length ? " "+b[ib] : ""));
+            referenceDiff.add(new Item(Item.SAME, a[ia++]));
+            currentDiff.add(new Item(Item.SAME, b[ib++]));
+        }
+    }
+}
