Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 1877)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 1878)
@@ -601,4 +601,5 @@
         buttonPanel.add(new SideButton(setRoleAction));
         tfRole.getDocument().addDocumentListener(setRoleAction);
+        tfRole.addActionListener(setRoleAction);
 
         // --- copy relation action
@@ -666,10 +667,10 @@
             );
             switch(ret) {
-                case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return;
-                case JOptionPane.CLOSED_OPTION: return;
-                case JOptionPane.NO_OPTION: return;
-                case JOptionPane.YES_OPTION:
-                    memberTableModel.removeMembersReferringTo(toCheck);
-                    break;
+            case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return;
+            case JOptionPane.CLOSED_OPTION: return;
+            case JOptionPane.NO_OPTION: return;
+            case JOptionPane.YES_OPTION:
+                memberTableModel.removeMembersReferringTo(toCheck);
+                break;
             }
         }
@@ -704,9 +705,9 @@
             );
             switch(ret) {
-                case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION : return true;
-                case JOptionPane.YES_OPTION: return true;
-                case JOptionPane.NO_OPTION: return false;
-                case JOptionPane.CLOSED_OPTION: return false;
-                case JOptionPane.CANCEL_OPTION: throw new AddAbortException();
+            case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION : return true;
+            case JOptionPane.YES_OPTION: return true;
+            case JOptionPane.NO_OPTION: return false;
+            case JOptionPane.CLOSED_OPTION: return false;
+            case JOptionPane.CANCEL_OPTION: throw new AddAbortException();
             }
             // should not happen
@@ -1079,7 +1080,7 @@
             );
             switch(ret) {
-                case JOptionPane.CANCEL_OPTION: return false;
-                case JOptionPane.YES_OPTION: return true;
-                case JOptionPane.NO_OPTION: return false;
+            case JOptionPane.CANCEL_OPTION: return false;
+            case JOptionPane.YES_OPTION: return true;
+            case JOptionPane.NO_OPTION: return false;
             }
             return false;
@@ -1288,8 +1289,42 @@
 
         protected void refreshEnabled() {
-            setEnabled(memberTable.getSelectedRowCount() > 0 && !tfRole.getText().equals(""));
-        }
-
-        public void actionPerformed(ActionEvent e) {
+            setEnabled(memberTable.getSelectedRowCount() > 0);
+        }
+
+        protected boolean isEmptyRole() {
+            return tfRole.getText() == null || tfRole.getText().trim().equals("");
+        }
+
+        protected boolean confirmSettingEmptyRole(int onNumMembers) {
+            String message = tr("<html>You are setting an empty role on {0} primitives.<br>"
+                    + "This is equal to deleting the roles of these primitives.<br>"
+                    + "Do you really want to apply the new role?</html>", onNumMembers);
+            String [] options = new String[] {
+                    tr("Yes, apply it"),
+                    tr("No, don't apply")
+            };
+            int ret = ConditionalOptionPaneUtil.showOptionDialog(
+                    "relation_editor.confirm_applying_empty_role",
+                    Main.parent,
+                    message,
+                    tr("Confirm empty role"),
+                    JOptionPane.YES_NO_OPTION,
+                    JOptionPane.WARNING_MESSAGE,
+                    options,
+                    options[0]
+            );
+            switch(ret) {
+            case JOptionPane.YES_OPTION: return true;
+            case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return true;
+            default:
+                return false;
+            }
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            if (isEmptyRole()) {
+                if (! confirmSettingEmptyRole(memberTable.getSelectedRowCount()))
+                    return;
+            }
             memberTableModel.updateRole(memberTable.getSelectedRows(), tfRole.getText());
         }
