Index: applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxTree.java
===================================================================
--- applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxTree.java	(revision 35534)
+++ applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxTree.java	(revision 35730)
@@ -4,4 +4,5 @@
 import java.awt.BorderLayout;
 import java.awt.event.MouseAdapter;
+import java.util.Objects;
 
 import javax.swing.JFrame;
@@ -151,5 +152,9 @@
         for (int i = 0; i < node.getChildCount(); i++) {
             DefaultMutableTreeNode childNode = node(node.getChildAt(i));
-            if (!data(childNode).isSelected().equals(data(node).isSelected())) {
+            // Fix NPE from #20557
+            final CheckBoxNodeData childData = data(childNode);
+            final CheckBoxNodeData nodeData = data(node);
+            if (childData != null && nodeData != null &&
+                    !Objects.equals(childData.isSelected(), nodeData.isSelected())) {
                 data(childNode).setSelected(data(node).isSelected());
                 setChildrens(childNode, value);
