=== modified file 'src/com/goldencode/p2j/ui/ControlSetConfig.java'
--- old/src/com/goldencode/p2j/ui/ControlSetConfig.java	2022-07-28 18:11:07 +0000
+++ new/src/com/goldencode/p2j/ui/ControlSetConfig.java	2025-12-22 19:28:17 +0000
@@ -109,8 +109,12 @@
 
 package com.goldencode.p2j.ui;
 
-import static com.goldencode.util.NativeTypeSerializer.*; 
+import static com.goldencode.util.NativeTypeSerializer.*;
+
 import java.io.*;
+import java.util.*;
+
+import com.goldencode.p2j.ui.client.*;
 
 /**
  * This class holds the common attributes for all widgets which have a set
@@ -339,6 +343,29 @@
    }
    
    /**
+    * Conditionally sort items on widget realize.
+    *  
+    * @param csc
+    *        the control set component to sort items in
+    */
+   public final void sort(final ControlSetComponent csc)
+   {
+      if (sort)
+      {
+         // clone() only makes a shallow copy of the array (references are copied into a new array),
+         // which is enough to check whether the item order has changed.
+         ControlSetItem[] oldItems = items.clone();
+         Arrays.sort(items, (fst, snd) -> fst.getLabel().compareTo(snd.getLabel()));
+
+         if (!Arrays.equals(oldItems, items))
+         {
+            csc.refreshItems();
+            ClientConfigManager.getInstance().addDirtyConfig(this, "items");
+         }
+      }
+   }
+   
+   /**
     * Initialize this config.
     */
    private void init()

=== modified file 'src/com/goldencode/p2j/ui/client/ComboBox.java'
--- old/src/com/goldencode/p2j/ui/client/ComboBox.java	2025-12-18 09:11:10 +0000
+++ new/src/com/goldencode/p2j/ui/client/ComboBox.java	2025-12-22 19:23:35 +0000
@@ -324,12 +324,12 @@
 import org.roaringbitmap.*;
 
 import com.goldencode.p2j.ui.*;
-import com.goldencode.p2j.ui.ComboBoxConfig.Mode;
-import com.goldencode.p2j.ui.chui.ThinClient;
+import com.goldencode.p2j.ui.ComboBoxConfig.*;
+import com.goldencode.p2j.ui.chui.*;
 import com.goldencode.p2j.ui.client.event.*;
 import com.goldencode.p2j.ui.client.event.listener.*;
 import com.goldencode.p2j.ui.client.format.*;
-import com.goldencode.p2j.ui.client.gui.ComboBoxGuiImpl;
+import com.goldencode.p2j.ui.client.gui.*;
 import com.goldencode.p2j.ui.client.model.*;
 import com.goldencode.p2j.ui.client.widget.*;
 import com.goldencode.p2j.util.*;
@@ -1224,19 +1224,7 @@
          }
       }
 
-      if (config.sort)
-      {
-         // clone() only makes a shallow copy of the array (references are copied into a new array),
-         // which is enough to check whether the item order has changed.
-         ControlSetItem[] oldItems = config.items.clone();
-         Arrays.sort(config.items, (fst, snd) -> fst.getLabel().compareTo(snd.getLabel()));
-
-         if (!Arrays.equals(oldItems, config.items))
-         {
-            refreshItems();
-            getConfigManager().addDirtyConfig(config, "items");
-         }
-      }
+      config.sort(this);
    }
 
    /**

=== modified file 'src/com/goldencode/p2j/ui/client/RadioSet.java'
--- old/src/com/goldencode/p2j/ui/client/RadioSet.java	2025-12-18 09:11:10 +0000
+++ new/src/com/goldencode/p2j/ui/client/RadioSet.java	2025-12-22 19:22:55 +0000
@@ -217,7 +217,7 @@
 import java.util.*;
 
 import com.goldencode.p2j.ui.*;
-import com.goldencode.p2j.ui.chui.ThinClient;
+import com.goldencode.p2j.ui.chui.*;
 import com.goldencode.p2j.ui.client.driver.*;
 import com.goldencode.p2j.ui.client.event.*;
 import com.goldencode.p2j.ui.client.event.listener.*;
@@ -796,19 +796,7 @@
    @Override
    protected void widgetRealized()
    {
-      if (config.sort)
-      {
-         // clone() only makes a shallow copy of the array (references are copied into a new array),
-         // which is enough to check whether the item order has changed.
-         ControlSetItem[] oldItems = config.items.clone();
-         Arrays.sort(config.items, (fst, snd) -> fst.getLabel().compareTo(snd.getLabel()));
-
-         if (!Arrays.equals(oldItems, config.items))
-         {
-            refreshItems();
-            getConfigManager().addDirtyConfig(config, "items");
-         }
-      }
+      config.sort(this);
    }
 
    /**

=== modified file 'src/com/goldencode/p2j/ui/client/SelectionList.java'
--- old/src/com/goldencode/p2j/ui/client/SelectionList.java	2025-12-18 09:11:10 +0000
+++ new/src/com/goldencode/p2j/ui/client/SelectionList.java	2025-12-22 19:24:23 +0000
@@ -147,7 +147,7 @@
 import com.goldencode.p2j.ui.client.driver.*;
 import com.goldencode.p2j.ui.client.event.*;
 import com.goldencode.p2j.ui.client.event.listener.*;
-import com.goldencode.p2j.ui.client.model.ListSelectionModel;
+import com.goldencode.p2j.ui.client.model.*;
 import com.goldencode.p2j.ui.client.widget.*;
 import com.goldencode.p2j.util.*;
 
@@ -188,7 +188,6 @@
     * @param   cfg
     *          Configuration data.
     */
-   @SuppressWarnings("unchecked")
    public SelectionList(WidgetId id, SelectionListConfig cfg)
    {
       // no-op
@@ -217,7 +216,6 @@
     * @param    cfg
     *           The config used to initialize this widget.
     */
-   @SuppressWarnings("unchecked")
    @Override
    public void initialize(WidgetId id, SelectionListConfig cfg)
    {
@@ -665,25 +663,12 @@
                                           Keyboard.SE_DEFAULT_ACTION));
    }
 
-
    /**
     * Fired when the widget becomes realized.
     */
    @Override
    protected void widgetRealized()
    {
-      if (config.sort)
-      {
-         // clone() only makes a shallow copy of the array (references are copied into a new array),
-         // which is enough to check whether the item order has changed.
-         ControlSetItem[] oldItems = config.items.clone();
-         Arrays.sort(config.items, (fst, snd) -> fst.getLabel().compareTo(snd.getLabel()));
-
-         if (!Arrays.equals(oldItems, config.items))
-         {
-            refreshItems();
-            getConfigManager().addDirtyConfig(config, "items");
-         }
-      }
+      config.sort(this);
    }
 }

