Index: trunk/src/org/openstreetmap/josm/data/osm/Filter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Filter.java	(revision 11972)
+++ trunk/src/org/openstreetmap/josm/data/osm/Filter.java	(revision 11973)
@@ -1,4 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.osm;
+
+import java.util.Objects;
 
 import org.openstreetmap.josm.actions.search.SearchAction.SearchMode;
@@ -114,4 +116,27 @@
         @writeExplicitly
         @pref public boolean inverted;
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(case_sensitive, enable, hiding, inverted, mapCSS_search, mode, regex_search, text, version);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj)
+                return true;
+            if (obj == null || getClass() != obj.getClass())
+                return false;
+            FilterPreferenceEntry other = (FilterPreferenceEntry) obj;
+            return case_sensitive == other.case_sensitive
+                    && enable == other.enable
+                    && hiding == other.hiding
+                    && inverted == other.inverted
+                    && mapCSS_search == other.mapCSS_search
+                    && regex_search == other.regex_search
+                    && Objects.equals(mode, other.mode)
+                    && Objects.equals(text, other.text)
+                    && Objects.equals(version, other.version);
+        }
     }
 
Index: trunk/test/unit/org/openstreetmap/josm/data/osm/ChangesetDataSetTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/osm/ChangesetDataSetTest.java	(revision 11972)
+++ trunk/test/unit/org/openstreetmap/josm/data/osm/ChangesetDataSetTest.java	(revision 11973)
@@ -2,12 +2,18 @@
 package org.openstreetmap.josm.data.osm;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.Date;
+import java.util.Iterator;
 import java.util.Set;
 
-import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.ChangesetDataSet.ChangesetDataSetEntry;
 import org.openstreetmap.josm.data.osm.ChangesetDataSet.ChangesetModificationType;
 import org.openstreetmap.josm.data.osm.history.HistoryNode;
@@ -38,5 +44,5 @@
         try {
             cds.getPrimitivesByModificationType(null);
-            Assert.fail("Should have thrown an IllegalArgumentException as we gave a null argument.");
+            fail("Should have thrown an IllegalArgumentException as we gave a null argument.");
         } catch (IllegalArgumentException e) {
             Main.trace(e);
@@ -45,5 +51,5 @@
 
         // empty object, a modification type => empty list
-        Assert.assertTrue(
+        assertTrue(
             "Empty data set should produce an empty list.",
             cds.getPrimitivesByModificationType(
@@ -61,6 +67,22 @@
         Set<HistoryOsmPrimitive> result = cds.getPrimitivesByModificationType(
                     ChangesetModificationType.CREATED);
-        Assert.assertEquals("We should have found only one item.", 1, result.size());
-        Assert.assertTrue("The item found is prim1.", result.contains(prim1));
+        assertEquals("We should have found only one item.", 1, result.size());
+        assertTrue("The item found is prim1.", result.contains(prim1));
+    }
+
+    /**
+     * Unit test of method {@link ChangesetDataSet#iterator}.
+     */
+    @Test
+    public void testIterator() {
+        final ChangesetDataSet cds = new ChangesetDataSet();
+        HistoryNode prim1 = new HistoryNode(1, 1, true, User.getAnonymous(), 1, new Date(), LatLon.ZERO);
+        cds.put(prim1, ChangesetModificationType.CREATED);
+        Iterator<ChangesetDataSetEntry> it = cds.iterator();
+        assertTrue(it.hasNext());
+        ChangesetDataSetEntry cdse = it.next();
+        assertEquals(ChangesetModificationType.CREATED, cdse.getModificationType());
+        assertEquals(prim1, cdse.getPrimitive());
+        assertFalse(it.hasNext());
     }
 }
Index: trunk/test/unit/org/openstreetmap/josm/data/osm/FilterTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/osm/FilterTest.java	(revision 11972)
+++ trunk/test/unit/org/openstreetmap/josm/data/osm/FilterTest.java	(revision 11973)
@@ -2,4 +2,5 @@
 package org.openstreetmap.josm.data.osm;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -18,4 +19,5 @@
 import org.openstreetmap.josm.actions.search.SearchCompiler.ParseError;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.Filter.FilterPreferenceEntry;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
 import org.openstreetmap.josm.io.OsmReader;
@@ -23,4 +25,6 @@
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import nl.jqno.equalsverifier.EqualsVerifier;
+import nl.jqno.equalsverifier.Warning;
 
 /**
@@ -187,5 +191,61 @@
     }
 
-    private String filterCode(OsmPrimitive osm) {
+    /**
+     * Unit tests of {@link Filter.FilterPreferenceEntry} class.
+     */
+    @Test
+    public void testFilterPreferenceEntry() {
+        Filter f = new Filter();
+        FilterPreferenceEntry fpe = f.getPreferenceEntry();
+
+        assertTrue(fpe.enable);
+
+        assertFalse(fpe.case_sensitive);
+        assertFalse(fpe.hiding);
+        assertFalse(fpe.inverted);
+        assertFalse(fpe.mapCSS_search);
+        assertFalse(fpe.regex_search);
+
+        assertEquals("add", fpe.mode);
+        assertEquals("1", fpe.version);
+        assertEquals("", fpe.text);
+
+        f.allElements = !f.allElements;
+        f.caseSensitive = !f.caseSensitive;
+        f.enable = !f.enable;
+        f.hiding = !f.hiding;
+        f.inverted = !f.inverted;
+        f.mapCSSSearch = !f.mapCSSSearch;
+        f.mode = SearchMode.remove;
+        f.regexSearch = !f.regexSearch;
+        f.text = "foo";
+        fpe = f.getPreferenceEntry();
+
+        assertFalse(fpe.enable);
+
+        assertTrue(fpe.case_sensitive);
+        assertTrue(fpe.hiding);
+        assertTrue(fpe.inverted);
+        assertTrue(fpe.mapCSS_search);
+        assertTrue(fpe.regex_search);
+
+        assertEquals("remove", fpe.mode);
+        assertEquals("1", fpe.version);
+        assertEquals("foo", fpe.text);
+
+        assertEquals(fpe, new Filter(fpe).getPreferenceEntry());
+    }
+
+    /**
+     * Unit test of methods {@link FilterPreferenceEntry#equals} and {@link FilterPreferenceEntry#hashCode}.
+     */
+    @Test
+    public void testEqualsContract() {
+        EqualsVerifier.forClass(FilterPreferenceEntry.class).usingGetClass()
+            .suppress(Warning.NONFINAL_FIELDS)
+            .verify();
+    }
+
+    private static String filterCode(OsmPrimitive osm) {
         if (!osm.isDisabled())
             return "v";
