Index: src/org/openstreetmap/josm/data/validation/OsmValidator.java
===================================================================
--- src/org/openstreetmap/josm/data/validation/OsmValidator.java	(revision 14750)
+++ src/org/openstreetmap/josm/data/validation/OsmValidator.java	(working copy)
@@ -12,6 +12,7 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -241,6 +242,55 @@
     }
 
     /**
+     * Get the list of all ignored errors
+     * @return The <code>Collection&ltString&gt</code> of errors that are ignored
+     */
+    public static Collection<String> getIgnoredErrors() {
+        return ignoredErrors;
+    }
+
+    /**
+     * Reset the error list by deleting ignorederrors
+     */
+    public static void resetErrorList() {
+        saveIgnoredErrors();
+        File ignoredErrors = new File(OsmValidator.getValidatorDir(), "ignorederrors");
+        if (!ignoredErrors.isFile()) return;
+        File ignoredErrorsBak = new File(ignoredErrors.getAbsolutePath() + ".bak");
+        try {
+            Files.move(ignoredErrors.toPath(), ignoredErrorsBak.toPath(), StandardCopyOption.REPLACE_EXISTING);
+        } catch (IOException e) {
+            ignoredErrors.delete();
+        }
+        OsmValidator.initialize();
+    }
+
+    /**
+     * Restore the error list by copying ignorederrors.bak to ignorederrors
+     */
+    public static void restoreErrorList() {
+        saveIgnoredErrors();
+        File ignoredErrors = new File(OsmValidator.getValidatorDir(), "ignorederrors");
+        File ignoredErrorsBak = new File(ignoredErrors.getAbsolutePath() + ".bak");
+        if (!ignoredErrors.isFile() || !ignoredErrorsBak.isFile()) return;
+        File ignoredErrorsBak2 = new File(ignoredErrorsBak.getAbsolutePath() + "2");
+        try {
+            Files.move(ignoredErrors.toPath(),
+                    ignoredErrorsBak2.toPath(),
+                    StandardCopyOption.REPLACE_EXISTING);
+            if (ignoredErrorsBak.isFile()) {
+                Files.move(ignoredErrorsBak.toPath(),
+                        ignoredErrors.toPath(), StandardCopyOption.REPLACE_EXISTING);
+            }
+            Files.move(ignoredErrorsBak2.toPath(),
+                    ignoredErrorsBak.toPath(), StandardCopyOption.REPLACE_EXISTING);
+        } catch (IOException e) {
+            Logging.debug(e);
+        }
+        OsmValidator.initialize();
+    }
+
+    /**
      * Saves the names of the ignored errors to a file
      */
     public static void saveIgnoredErrors() {
Index: src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java	(revision 14750)
+++ src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java	(working copy)
@@ -6,6 +6,7 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseEvent;
+import java.io.File;
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
@@ -46,6 +47,7 @@
 import org.openstreetmap.josm.data.validation.OsmValidator;
 import org.openstreetmap.josm.data.validation.TestError;
 import org.openstreetmap.josm.data.validation.ValidatorVisitor;
+import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
 import org.openstreetmap.josm.gui.PopupMenuHandler;
@@ -85,6 +87,8 @@
     private final SideButton fixButton;
     /** The ignore button */
     private final SideButton ignoreButton;
+    /** The reset ignorelist button */
+    private final SideButton resetignorelistButton;
     /** The select button */
     private final SideButton selectButton;
     /** The lookup button */
@@ -174,9 +178,62 @@
             });
             ignoreButton.setEnabled(false);
             buttons.add(ignoreButton);
+            resetignorelistButton = new SideButton(new AbstractAction() {
+                int reset = 0;
+                {
+                    toggle();
+                }
+
+                public void toggle() {
+                    this.setEnabled(true);
+                    if (!OsmValidator.getIgnoredErrors().isEmpty()) {
+                        putValue(NAME, tr("Clear Ignore"));
+                        putValue(SHORT_DESCRIPTION, tr("Clear ignore list"));
+                        new ImageProvider("dialogs", "fix").getResource().attachImageIcon(this, true);
+                        reset = 1;
+                    } else {
+                        File ignoredErrors = new File(OsmValidator.getValidatorDir());
+                        ignoredErrors = new File(ignoredErrors.getAbsolutePath() + File.separator + "ignorederrors.bak");
+                        if (ignoredErrors.isFile()) {
+                            putValue(NAME, tr("Restore Ignore"));
+                            putValue(SHORT_DESCRIPTION, tr("Restore ignore list"));
+                            new ImageProvider("copy").getResource().attachImageIcon(this, true);
+                            reset = 2;
+                        } else if (!OsmValidator.getIgnoredErrors().isEmpty()) {
+                            putValue(NAME, tr("Save Ignore"));
+                            putValue(SHORT_DESCRIPTION, tr("Save ignore list"));
+                            new ImageProvider("save").getResource().attachImageIcon(this, true);
+                            reset = 3;
+                        } else {
+                            putValue(NAME, tr("Ignore list modification"));
+                            putValue(SHORT_DESCRIPTION, tr("Clear/Restore/Save the ignore list, depending upon various conditions"));
+                            new ImageProvider("dialogs", "validator").getResource().attachImageIcon(this, true);
+                            //this.setEnabled(false); // TODO enable when I figure out how to call from ignore
+                        }
+                    }
+                }
+
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    if (reset == 1) {
+                        OsmValidator.resetErrorList();
+                    } else if (reset == 2) {
+                        OsmValidator.restoreErrorList();
+                    } else if (reset == 3 && !OsmValidator.getIgnoredErrors().isEmpty()) {
+                        OsmValidator.saveIgnoredErrors();
+                    } else if (reset == 0) {
+                        // Do nothing
+                    }
+                    if (reset == 1 || reset == 2) rerunValidatorPrompt();
+                    toggle();
+                }
+            });
+            buttons.add(resetignorelistButton);
         } else {
             ignoreButton = null;
+            resetignorelistButton = null;
         }
+
         createLayout(tree, true, buttons);
     }
 
@@ -285,6 +342,25 @@
     }
 
     /**
+     * Prompt to rerun the validator when the ignore list changes
+     */
+    public void rerunValidatorPrompt() {
+        if (!validateAction.isEnabled()) return;
+        final int answer = ConditionalOptionPaneUtil.showOptionDialog(
+                "rerun_validation_when_ignorelist_changed",
+                MainApplication.getMainFrame(),
+                "<hmtl><h3>" + tr("Should the validation be rerun?") + "</h3></html>",
+                tr("Ignored error filter changed"),
+                JOptionPane.YES_NO_CANCEL_OPTION,
+                JOptionPane.QUESTION_MESSAGE,
+                null,
+                null);
+        if (answer == JOptionPane.YES_OPTION) {
+            validateAction.doValidate(true);
+        }
+    }
+
+    /**
      * Sets the selection of the map to the current selected items.
      */
     @SuppressWarnings("unchecked")
