Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java	(revision 1888)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java	(revision 1889)
@@ -34,4 +34,5 @@
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.visitor.MergeVisitor;
+import org.openstreetmap.josm.gui.ExceptionDialogUtil;
 import org.openstreetmap.josm.gui.OptionPaneUtil;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
@@ -306,17 +307,4 @@
         }
 
-        protected void showLastException() {
-            String msg = lastException.getMessage();
-            if (msg == null) {
-                msg = lastException.toString();
-            }
-            OptionPaneUtil.showMessageDialog(
-                    Main.parent,
-                    msg,
-                    tr("Error"),
-                    JOptionPane.ERROR_MESSAGE
-            );
-        }
-
         protected void refreshView(Relation relation){
             for (int i=0; i < childTree.getRowCount(); i++) {
@@ -333,5 +321,5 @@
                 return;
             if (lastException != null) {
-                showLastException();
+                ExceptionDialogUtil.explainException(lastException);
                 return;
             }
@@ -476,17 +464,4 @@
         }
 
-        protected void showLastException() {
-            String msg = lastException.getMessage();
-            if (msg == null) {
-                msg = lastException.toString();
-            }
-            OptionPaneUtil.showMessageDialog(
-                    Main.parent,
-                    msg,
-                    tr("Error"),
-                    JOptionPane.ERROR_MESSAGE
-            );
-        }
-
         protected void refreshView(Relation relation){
             for (int i=0; i < childTree.getRowCount(); i++) {
@@ -503,5 +478,5 @@
                 return;
             if (lastException != null) {
-                showLastException();
+                ExceptionDialogUtil.explainException(lastException);
                 return;
             }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 1888)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 1889)
@@ -65,4 +65,5 @@
 import org.openstreetmap.josm.data.osm.visitor.MergeVisitor;
 import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
+import org.openstreetmap.josm.gui.ExceptionDialogUtil;
 import org.openstreetmap.josm.gui.OptionPaneUtil;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
@@ -620,14 +621,4 @@
         // FIXME: Make it remember dialog size
         return new Dimension(700, 500);
-    }
-
-    /**
-     * Asynchronously download the members of the currently edited relation
-     * 
-     */
-    private void downloadRelationMembers() {
-        if (!memberTableModel.hasIncompleteMembers())
-            return;
-        Main.worker.submit(new DownloadTask(this));
     }
 
@@ -1273,9 +1264,15 @@
             Shortcut.registerShortcut("relationeditor:downloadincomplete", tr("Relation Editor: Download Members"),
                     KeyEvent.VK_K, Shortcut.GROUP_MNEMONIC);
-            setEnabled(true);
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            downloadRelationMembers();
+            updateEnabledState();
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            if (!isEnabled())
+                return;
+            Main.worker.submit(new DownloadTask(GenericRelationEditor.this));
+        }
+
+        protected void updateEnabledState() {
+            setEnabled(getRelation() != null && getRelation().id > 0);
         }
     }
@@ -1473,17 +1470,4 @@
         }
 
-        protected void showLastException() {
-            String msg = lastException.getMessage();
-            if (msg == null) {
-                msg = lastException.toString();
-            }
-            OptionPaneUtil.showMessageDialog(
-                    Main.parent,
-                    msg,
-                    tr("Error"),
-                    JOptionPane.ERROR_MESSAGE
-            );
-        }
-
         @Override
         protected void finish() {
@@ -1492,5 +1476,5 @@
             memberTableModel.updateMemberReferences(getLayer().data);
             if (lastException != null) {
-                showLastException();
+                ExceptionDialogUtil.explainException(lastException);
             }
 
