Index: /applications/editors/josm/plugins/reverter/src/reverter/ChangesetIdsTextField.java
===================================================================
--- /applications/editors/josm/plugins/reverter/src/reverter/ChangesetIdsTextField.java	(revision 34937)
+++ /applications/editors/josm/plugins/reverter/src/reverter/ChangesetIdsTextField.java	(revision 34938)
@@ -1,4 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package reverter;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.util.Collection;
@@ -10,25 +12,41 @@
 
 import org.openstreetmap.josm.gui.widgets.AbstractIdTextField;
-import org.openstreetmap.josm.gui.widgets.ChangesetIdTextField;
+import org.openstreetmap.josm.gui.widgets.AbstractTextComponentValidator;
 
+/**
+ * A text field designed to enter one or more OSM changeset IDs.
+ */
 public class ChangesetIdsTextField extends AbstractIdTextField<ChangesetIdsTextField.OsmIdsValidator> {
 
+    /**
+     * Constructs a new {@link ChangesetIdsTextField}
+     */
     public ChangesetIdsTextField() {
         super(OsmIdsValidator.class);
     }
 
+    /**
+     * Reads the changeset ids.
+     * @return true if a list of valid changeset id has been successfully read, false otherwise
+     */
     @Override
     public boolean readIds() {
-        return validator.readChangesetId();
+        return validator.readChangesetIds();
     }
 
+    /**
+     * @return sorted changeset IDs (highest ID first)
+     */
     public Collection<Integer> getIdsInReverseOrder() {
         return validator.ids;
     }
 
-    public static class OsmIdsValidator extends ChangesetIdTextField.ChangesetIdValidator {
+    public static class OsmIdsValidator extends AbstractTextComponentValidator {
 
         private Collection<Integer> ids = new TreeSet<>(Collections.reverseOrder());
 
+        /**
+         * Constructs a new {@link OsmIdsValidator}
+         */
         public OsmIdsValidator(JTextComponent tc) {
             super(tc);
@@ -36,11 +54,29 @@
 
         @Override
-        public boolean readChangesetId() {
+        public void validate() {
+            String help = tr("Please enter one or more integer values > 0 or full changeset URLs.");
+            if (!isValid()) {
+                feedbackInvalid(tr("The current value is not a a list of valid changeset IDs. {0}", help));
+            } else {
+                feedbackValid(help);
+            }
+        }
+
+        /**
+         * Read list of changeset IDs or changeset URLs.
+         * @return true if list is valid
+         */
+        public boolean readChangesetIds() {
             ids.clear();
             String value = getComponent().getText();
             try {
-                final StringTokenizer tokenizer = new StringTokenizer(value, ",.+/ \t\n");
+                final StringTokenizer tokenizer = new StringTokenizer(value, ",+ \t\n");
                 while (tokenizer.hasMoreTokens()) {
-                    ids.add(Integer.parseInt(tokenizer.nextToken().trim()));
+                    String token = tokenizer.nextToken().trim();
+                    if (token.matches("http.*/changeset/[0-9]+")) {
+                        // full URL given, extract id
+                        token = token.substring(token.lastIndexOf('/') + 1);
+                    }
+                    ids.add(Integer.parseInt(token));
                 }
                 return true;
@@ -50,4 +86,9 @@
             }
         }
+
+        @Override
+        public boolean isValid() {
+            return readChangesetIds();
+        }
     }
 }
