Index: /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 14661)
+++ /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 14662)
@@ -178,6 +178,6 @@
 
     static void update(PropertiesMembershipChoiceDialog dialog, Node existingNode, List<Node> newNodes, Collection<Command> cmds) {
-        updateMemberships(dialog.getMemberships(), existingNode, newNodes, cmds);
-        updateProperties(dialog.getTags(), existingNode, newNodes, cmds);
+        updateMemberships(dialog.getMemberships().orElse(null), existingNode, newNodes, cmds);
+        updateProperties(dialog.getTags().orElse(null), existingNode, newNodes, cmds);
     }
 
@@ -213,5 +213,5 @@
         List<Command> cmds = new LinkedList<>();
         cmds.add(new AddCommand(selectedNode.getDataSet(), unglued));
-        if (dialog != null && ExistingBothNew.NEW.equals(dialog.getTags())) {
+        if (dialog != null && ExistingBothNew.NEW.equals(dialog.getTags().orElse(null))) {
             // unglued node gets the ID and history, thus replace way node with a fresh one
             final Way way = selectedNode.getParentWays().get(0);
@@ -219,6 +219,8 @@
             newWayNodes.replaceAll(n -> selectedNode.equals(n) ? unglued : n);
             cmds.add(new ChangeNodesCommand(way, newWayNodes));
-            updateMemberships(dialog.getMemberships().opposite(), selectedNode, Collections.singletonList(unglued), cmds);
-            updateProperties(dialog.getTags().opposite(), selectedNode, Collections.singletonList(unglued), cmds);
+            updateMemberships(dialog.getMemberships().map(ExistingBothNew::opposite).orElse(null),
+                    selectedNode, Collections.singletonList(unglued), cmds);
+            updateProperties(dialog.getTags().map(ExistingBothNew::opposite).orElse(null),
+                    selectedNode, Collections.singletonList(unglued), cmds);
             moveSelectedNode = true;
         } else if (dialog != null) {
@@ -386,5 +388,5 @@
      */
     private static void updateMemberships(ExistingBothNew memberships, Node originalNode, List<Node> newNodes, Collection<Command> cmds) {
-        if (ExistingBothNew.OLD.equals(memberships)) {
+        if (memberships == null || ExistingBothNew.OLD.equals(memberships)) {
             return;
         }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesMembershipChoiceDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesMembershipChoiceDialog.java	(revision 14661)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesMembershipChoiceDialog.java	(revision 14662)
@@ -7,4 +7,5 @@
 import java.util.Collection;
 import java.util.Objects;
+import java.util.Optional;
 
 import javax.swing.AbstractButton;
@@ -113,16 +114,16 @@
     /**
      * Returns the tags choice.
-     * @return the tags choice (can be null)
+     * @return the tags choice
      */
-    public ExistingBothNew getTags() {
-        return tags.getSelected();
+    public Optional<ExistingBothNew> getTags() {
+        return Optional.ofNullable(tags).map(ExistingBothNewChoice::getSelected);
     }
 
     /**
      * Returns the memberships choice.
-     * @return the memberships choice (can be null)
+     * @return the memberships choice
      */
-    public ExistingBothNew getMemberships() {
-        return memberships.getSelected();
+    public Optional<ExistingBothNew> getMemberships() {
+        return Optional.ofNullable(memberships).map(ExistingBothNewChoice::getSelected);
     }
 
