Index: /applications/editors/josm/plugins/reverter/src/reverter/ChangesetIdQuery.java
===================================================================
--- /applications/editors/josm/plugins/reverter/src/reverter/ChangesetIdQuery.java	(revision 29346)
+++ /applications/editors/josm/plugins/reverter/src/reverter/ChangesetIdQuery.java	(revision 29347)
@@ -3,8 +3,10 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.Color;
 import java.awt.GridBagLayout;
 import java.awt.Insets;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
 import java.text.NumberFormat;
-import java.text.ParseException;
 
 import javax.swing.ButtonGroup;
@@ -14,13 +16,17 @@
 import javax.swing.JPanel;
 import javax.swing.JRadioButton;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.tools.GBC;
+
 import reverter.ChangesetReverter.RevertType;
 
 @SuppressWarnings("serial")
 public class ChangesetIdQuery extends ExtendedDialog {
-    private final JFormattedTextField tcid = new JFormattedTextField(NumberFormat.getInstance());
+    private final JFormattedTextField tcid = new JFormattedTextField(NumberFormat.getIntegerInstance());
     private final ButtonGroup bgRevertType = new ButtonGroup();
     private final JRadioButton rbFull = new JRadioButton(tr("Revert changeset fully"));
@@ -28,9 +34,11 @@
     private final JRadioButton rbSelectionUndelete = new JRadioButton(tr("Revert selection and restore deleted objects"));
     private final JCheckBox cbNewLayer = new JCheckBox(tr("Download as new layer"));
+    
+    private final Color defaultForegroundColor = tcid.getForeground();
 
     public int getChangesetId() {
         try {
-            return NumberFormat.getInstance().parse(tcid.getText()).intValue();
-        } catch (ParseException e) {
+            return Integer.parseInt(tcid.getText());
+        } catch (NumberFormatException e) {
             return 0;
         }
@@ -73,7 +81,46 @@
                 +"Unselect to download into the currently active data layer.</html>"));
         panel.add(cbNewLayer, GBC.eol().fill(GBC.HORIZONTAL));
-
+        
+        final DataSet ds = Main.main.getCurrentDataSet();
+        
+        // Disables "Download in new layer" choice if there is no current data set (i.e no data layer)
+        if (ds == null) {
+            cbNewLayer.setSelected(true);
+            cbNewLayer.setEnabled(false);
+        }
+        // Disables selection-related choices of there is no current selected objects
+        if (ds == null || ds.getAllSelected().isEmpty()) {
+            rbSelection.setEnabled(false);
+            rbSelectionUndelete.setEnabled(false);
+        }
+        
+        // Enables/disables the Revert button when a changeset id is correctly set or not
+        tcid.getDocument().addDocumentListener(new DocumentListener() {
+            @Override public void removeUpdate(DocumentEvent e) { idChanged(); }
+            @Override public void insertUpdate(DocumentEvent e) { idChanged(); }
+            @Override public void changedUpdate(DocumentEvent e) { idChanged(); }
+            private void idChanged() {
+                boolean idOK = getChangesetId() > 0;
+                tcid.setForeground(idOK ? defaultForegroundColor : Color.RED);
+                buttons.get(0).setEnabled(idOK);
+            }
+        });
+        
         setContent(panel);
         setupDialog();
+        
+        // Initially disables the Revert button
+        buttons.get(0).setEnabled(false);
+        
+        // When pressing Enter in the changeset id field, validate the dialog if the id is correct (i.e. Revert button enabled)
+        tcid.addKeyListener(new KeyListener() {
+            @Override public void keyPressed(KeyEvent e) {}
+            @Override public void keyTyped(KeyEvent e) { }
+            @Override public void keyReleased(KeyEvent e) {
+                if (e != null && e.getKeyCode() == KeyEvent.VK_ENTER && buttons.get(0).isEnabled()) {
+                    buttons.get(0).doClick();
+                }
+            }
+        });
     }
 }
Index: /applications/editors/josm/plugins/reverter/src/reverter/ChangesetReverter.java
===================================================================
--- /applications/editors/josm/plugins/reverter/src/reverter/ChangesetReverter.java	(revision 29346)
+++ /applications/editors/josm/plugins/reverter/src/reverter/ChangesetReverter.java	(revision 29347)
@@ -31,4 +31,5 @@
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.MultiFetchServerObjectReader;
 import org.openstreetmap.josm.io.OsmTransferException;
@@ -55,5 +56,5 @@
     public final Changeset changeset;
     public final RevertType revertType;
-
+    
     private final OsmDataLayer layer; // data layer associated with reverter
     private final DataSet ds; // DataSet associated with reverter
@@ -139,5 +140,10 @@
             monitor.finishTask();
             if (newLayer) {
-                Main.main.addLayer(layer);
+                GuiHelper.runInEDT(new Runnable() {
+                    @Override
+                    public void run() {
+                        Main.main.addLayer(layer);
+                    }
+                });
             }
         }
Index: /applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetAction.java
===================================================================
--- /applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetAction.java	(revision 29346)
+++ /applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetAction.java	(revision 29347)
@@ -23,12 +23,5 @@
     }
 
-    @Override
-    protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null);
-    }
-
     public void actionPerformed(ActionEvent arg0)  {
-        if (getCurrentDataSet() == null)
-            return;
         final ChangesetIdQuery dlg = new ChangesetIdQuery();
         dlg.setVisible(true);
Index: /applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetTask.java
===================================================================
--- /applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetTask.java	(revision 29346)
+++ /applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetTask.java	(revision 29347)
@@ -12,4 +12,5 @@
 import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.OsmTransferException;
 
@@ -84,7 +85,12 @@
         if (!checkAndDownloadMissing()) return;
         List<Command> cmds = rev.getCommands();
-        Command cmd = new RevertChangesetCommand(tr(revertType == RevertType.FULL ? "Revert changeset #{0}" :
+        final Command cmd = new RevertChangesetCommand(tr(revertType == RevertType.FULL ? "Revert changeset #{0}" :
                 "Partially revert changeset #{0}",changesetId),cmds);
-        Main.main.undoRedo.add(cmd);
+        GuiHelper.runInEDT(new Runnable() {
+            @Override
+            public void run() {
+                Main.main.undoRedo.add(cmd);
+            }
+        });
     }
 
