Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 9510)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 9511)
@@ -127,4 +127,8 @@
      */
     private JButton sortBelowButton;
+    /**
+     * Action for performing the {@link CancelAction}
+     */
+    private CancelAction cancelAction;
 
     /**
@@ -219,4 +223,5 @@
         setSize(findMaxDialogSize());
 
+        setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
         addWindowListener(
                 new WindowAdapter() {
@@ -224,4 +229,9 @@
                     public void windowOpened(WindowEvent e) {
                         cleanSelfReferences();
+                    }
+
+                    @Override
+                    public void windowClosing(WindowEvent e) {
+                        cancel();
                     }
                 }
@@ -248,4 +258,8 @@
         memberTableModel.setSelectedMembers(selectedMembers);
         HelpUtil.setHelpContext(getRootPane(), ht("/Dialog/RelationEditor"));
+    }
+
+    protected void cancel() {
+        cancelAction.actionPerformed(null);
     }
 
@@ -274,5 +288,6 @@
         JPanel pnl = new JPanel(new FlowLayout(FlowLayout.CENTER));
         pnl.add(new SideButton(new OKAction(memberTable, memberTableModel, tagEditorPanel.getModel(), getLayer(), this, tfRole)));
-        pnl.add(new SideButton(new CancelAction(memberTable, memberTableModel, tagEditorPanel.getModel(), getLayer(), this, tfRole)));
+        cancelAction = new CancelAction(memberTable, memberTableModel, tagEditorPanel.getModel(), getLayer(), this, tfRole);
+        pnl.add(new SideButton(cancelAction));
         pnl.add(new SideButton(new ContextSensitiveHelpAction(ht("/Dialog/RelationEditor"))));
         return pnl;
