Index: org/openstreetmap/josm/gui/widgets/OsmIdTextField.java
===================================================================
--- org/openstreetmap/josm/gui/widgets/OsmIdTextField.java	(revision 4057)
+++ org/openstreetmap/josm/gui/widgets/OsmIdTextField.java	(working copy)
@@ -1,6 +1,8 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.widgets;
 
+import java.util.Arrays;
+import java.util.StringTokenizer;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import javax.swing.JTextField;
@@ -21,6 +23,10 @@
         return validator.getOsmId();
     }
 
+    public int[] getOsmIds() {
+        return validator.getOsmIds();
+    }
+
     /**
      * Validator for a changeset ID entered in a {@see JTextComponent}.
      *
@@ -37,7 +43,7 @@
 
         @Override
         public boolean isValid() {
-            return getOsmId() > 0;
+            return getOsmId() > 0 || getOsmIds()!=null;
         }
 
         @Override
@@ -60,5 +66,24 @@
                 return 0;
             }
         }
+
+        public int[] getOsmIds() {
+            String value  = getComponent().getText();
+            if (value == null || value.trim().length() == 0) return null;
+            try {
+                //String[] parts = value.split("[,\\.\\s\\t\\n]+");
+                StringTokenizer st = new StringTokenizer(value,",.+/ \t\n");
+                int ids[]=new int[st.countTokens()];
+                int j=0; String s;
+                while (st.hasMoreTokens()) {
+                    s = st.nextToken();
+                    // convert tokens to int skipping v-words (version v2 etc)
+                    if (s.charAt(0)!='v') ids[j++]=Integer.parseInt(s);
+                    }
+                return Arrays.copyOf(ids, j);
+            } catch(NumberFormatException e) {
+                return null;
+            }
+        }
     }
 }
Index: org/openstreetmap/josm/actions/DownloadPrimitiveAction.java
===================================================================
--- org/openstreetmap/josm/actions/DownloadPrimitiveAction.java	(revision 4057)
+++ org/openstreetmap/josm/actions/DownloadPrimitiveAction.java	(working copy)
@@ -92,16 +92,18 @@
         Main.pref.putInteger("downloadprimitive.lasttype", cbType.getSelectedIndex());
         Main.pref.put("downloadprimitive.referrers", referrers.isSelected());
         Main.pref.put("download.newlayer", layer.isSelected());
-        int id = tfId.getOsmId();
-        if(id <= 0)
+        int ids[] = tfId.getOsmIds();
+        if(ids == null)
             JOptionPane.showMessageDialog(
                     Main.parent,
-                    tr("Invalid ID specified. Cannot download object."),
+                    tr("Invalid ID specified. Single ID or any list can be entered\n"
+                    + " Cannot download object."),
                     tr("Information"),
                     JOptionPane.INFORMATION_MESSAGE
             );
-        else
-            download(layer.isSelected(), cbType.getType(), id, referrers.isSelected());
+        else for (int i=0;i<ids.length;i++) {
+            download(layer.isSelected(), cbType.getType(), ids[i], referrers.isSelected());
+            }
     }
 
     /**
