Index: trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 8977)
+++ trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 8978)
@@ -199,13 +199,16 @@
             final Way wayToKeep = Strategy.keepLongestChunk().determineWayToKeep(newWays);
 
-            if (ExpertToggleAction.isExpert() && !selectedWay.isNew() && Main.pref.getBoolean("splitway.segment-selection-dialog", true)) {
+            if (ExpertToggleAction.isExpert() && !selectedWay.isNew()) {
                 final ExtendedDialog dialog = new SegmentToKeepSelectionDialog(selectedWay, newWays, wayToKeep, sel);
-                dialog.setModal(false);
-                dialog.showDialog();
-            } else {
-                final SplitWayResult result = doSplitWay(getEditLayer(), selectedWay, wayToKeep, newWays, sel);
-                Main.main.undoRedo.add(result.getCommand());
-                getCurrentDataSet().setSelected(result.getNewSelection());
-            }
+                dialog.toggleEnable("way.split.segment-selection-dialog");
+                if (!dialog.toggleCheckState()) {
+                    dialog.setModal(false);
+                    dialog.showDialog();
+                    return; // splitting is performed in SegmentToKeepSelectionDialog.buttonAction()
+                }
+            }
+            final SplitWayResult result = doSplitWay(getEditLayer(), selectedWay, wayToKeep, newWays, sel);
+            Main.main.undoRedo.add(result.getCommand());
+            getCurrentDataSet().setSelected(result.getNewSelection());
         }
     }
@@ -228,5 +231,4 @@
             this.selection = selection;
             this.list = new JList<>(newWays.toArray(new Way[newWays.size()]));
-            buildList();
             this.list.setSelectedValue(wayToKeep, true);
 
@@ -238,5 +240,5 @@
         }
 
-        private void buildList() {
+        private void configureList() {
             list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
             list.addListSelectionListener(new ListSelectionListener() {
@@ -280,4 +282,5 @@
             super.setVisible(visible);
             if (visible) {
+                configureList(); // not in constructor to not highlight segments unless dialog is shown
                 list.setSelectedIndex(list.getSelectedIndex()); // highlight way segments
             } else {
@@ -289,4 +292,5 @@
         protected void buttonAction(int buttonIndex, ActionEvent evt) {
             super.buttonAction(buttonIndex, evt);
+            toggleSaveState(); // necessary since #showDialog() does not handle it due to the non-modal dialog
             if (getValue() == 1) {
                 final Way wayToKeep = list.getSelectedValue();
Index: trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 8977)
+++ trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 8978)
@@ -609,5 +609,5 @@
      * writes the corresponding pref.
      */
-    private void toggleSaveState() {
+    protected void toggleSaveState() {
         if (!toggleable ||
                 togglePanel == null ||
