diff --git a/src/sbbs3/gtkuserlist/GNUmakefile b/src/sbbs3/gtkuserlist/GNUmakefile
index d6d9bc9386af7302002810dc4c03c09a8117556b..7eb6c6a4eb9b8e97162b051315f8c51029bb56b1 100644
--- a/src/sbbs3/gtkuserlist/GNUmakefile
+++ b/src/sbbs3/gtkuserlist/GNUmakefile
@@ -23,10 +23,10 @@ endif
 
 vpath %.c ..
 
-CFLAGS	+=	$(SBBSDEFS) -I.. -I../../comio $(SMBLIB_CFLAGS) $(HASH_CFLAGS) $(XPDEV-MT_CFLAGS) $(CRYPT_CFLAGS) `pkg-config libglade-2.0 --cflags`
+CFLAGS	+=	$(SBBSDEFS) -I.. -I../../comio $(SMBLIB_CFLAGS) $(HASH_CFLAGS) $(XPDEV-MT_CFLAGS) $(CRYPT_CFLAGS) `pkg-config gtk+-3.0 --cflags`
 # Hopefully, -Wl,-E exports all symbols dynamically everywhere.
 LDFLAGS	+=	-Wl,-E -L../$(LIBODIR) $(SMBLIB_LDFLAGS) $(XPDEV-MT_LDFLAGS) $(MT_LDFLAGS)
-EXTRA_LIBS += `pkg-config libglade-2.0 --libs`
+EXTRA_LIBS += `pkg-config gtk+-3.0 --libs`
 
 # Because pkg-config for libglade uses --rpath, we need to also, LD_RUN_PATH
 # won't work.  :-(
diff --git a/src/sbbs3/gtkuserlist/events.c b/src/sbbs3/gtkuserlist/events.c
index 03287de46dbc3ea484cdfad69bed340aa98b6d6a..c62e79d582f0a4d2176c38344f6dd611564bc582 100644
--- a/src/sbbs3/gtkuserlist/events.c
+++ b/src/sbbs3/gtkuserlist/events.c
@@ -47,7 +47,7 @@ void display_message(char *title, char *message, char *icon)
 	dialog=gtk_dialog_new_with_buttons(title
 			,GTK_WINDOW(gtk_builder_get_object(builder, "UserListWindow"))
 			,GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT
-			,GTK_STOCK_OK
+			,"_OK"
 			,GTK_RESPONSE_NONE
 			,NULL);
 	if(icon==NULL)
@@ -59,7 +59,7 @@ void display_message(char *title, char *message, char *icon)
 			,"response"
 			,G_CALLBACK(gtk_widget_destroy)
             ,dialog);
-	gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox),
+	gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)),
 			label);
 	gtk_widget_show_all (dialog);
 	gtk_dialog_run(GTK_DIALOG(dialog));
diff --git a/src/sbbs3/gtkuserlist/gtkuserlist.c b/src/sbbs3/gtkuserlist/gtkuserlist.c
index 1442546c53383b650ce2cb64b3b2f513e26aa596..d2763ea051ab1ba2e484fd11d00f5541649be86c 100644
--- a/src/sbbs3/gtkuserlist/gtkuserlist.c
+++ b/src/sbbs3/gtkuserlist/gtkuserlist.c
@@ -21,7 +21,6 @@ int main(int argc, char **argv)
 	GtkListStore	*quickstore = NULL;
 	GtkTreeIter		curr;
 	GtkCellRenderer *column;
-	GtkWindow*	xml;
 
     gtk_init(&argc, &argv);
 
@@ -51,10 +50,6 @@ int main(int argc, char **argv)
     /* connect the signals in the interface */
 	gtk_builder_connect_signals (builder, NULL);
 
-	/* Get MainWindow and display it */
-	xml = GTK_WINDOW (gtk_builder_get_object (builder, "MainWindow"));
-	gtk_window_present(xml);
-
 	/* Set up user list */
 	w=GTK_WIDGET(gtk_builder_get_object(builder, "lUserList"));
 	lstore = gtk_list_store_new(17
diff --git a/src/sbbs3/gtkuserlist/gtkuserlist.glade b/src/sbbs3/gtkuserlist/gtkuserlist.glade
index 9be79b998174ece6724362a37fa5933ec02bb98b..e64ef1e0b5410a7a467a3fc4aab42189475f0488 100644
--- a/src/sbbs3/gtkuserlist/gtkuserlist.glade
+++ b/src/sbbs3/gtkuserlist/gtkuserlist.glade
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.22.1 -->
 <interface>
-  <!-- interface-requires gtk+ 2.16 -->
-  <!-- interface-naming-policy toplevel-contextual -->
+  <requires lib="gtk+" version="3.20"/>
   <object class="GtkWindow" id="UserListWindow">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
@@ -10,23 +10,27 @@
     <property name="icon_name">gtk-index</property>
     <signal name="destroy" handler="gtk_main_quit" swapped="no"/>
     <child>
-      <object class="GtkVBox" id="vbox4">
+      <placeholder/>
+    </child>
+    <child>
+      <object class="GtkBox" id="vbox4">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
         <child>
-          <object class="GtkHBox" id="hbox21">
+          <object class="GtkBox" id="hbox21">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <child>
               <object class="GtkLabel" id="label24">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="xpad">10</property>
                 <property name="label" translatable="yes">ARS Filter</property>
               </object>
               <packing>
                 <property name="expand">False</property>
                 <property name="fill">False</property>
+                <property name="padding">10</property>
                 <property name="position">0</property>
               </packing>
             </child>
@@ -36,8 +40,6 @@
                 <property name="can_focus">True</property>
                 <property name="primary_icon_activatable">False</property>
                 <property name="secondary_icon_activatable">False</property>
-                <property name="primary_icon_sensitive">True</property>
-                <property name="secondary_icon_sensitive">True</property>
               </object>
               <packing>
                 <property name="expand">True</property>
@@ -58,7 +60,7 @@
                     <property name="xscale">0</property>
                     <property name="yscale">0</property>
                     <child>
-                      <object class="GtkHBox" id="hbox22">
+                      <object class="GtkBox" id="hbox22">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="spacing">2</property>
@@ -111,7 +113,7 @@
                     <property name="xscale">0</property>
                     <property name="yscale">0</property>
                     <child>
-                      <object class="GtkHBox" id="hbox23">
+                      <object class="GtkBox" id="hbox23">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="spacing">2</property>
@@ -162,14 +164,15 @@
           <object class="GtkScrolledWindow" id="scrolledwindow3">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
-            <property name="hscrollbar_policy">automatic</property>
-            <property name="vscrollbar_policy">automatic</property>
             <property name="shadow_type">in</property>
             <child>
               <object class="GtkTreeView" id="lUserList">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="reorderable">True</property>
+                <child internal-child="selection">
+                  <object class="GtkTreeSelection"/>
+                </child>
               </object>
             </child>
           </object>
@@ -180,19 +183,19 @@
           </packing>
         </child>
         <child>
-          <object class="GtkHBox" id="hbox17">
+          <object class="GtkBox" id="hbox17">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <child>
               <object class="GtkLabel" id="label20">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="xpad">10</property>
                 <property name="label" translatable="yes">Quick Validation Sets</property>
               </object>
               <packing>
                 <property name="expand">False</property>
                 <property name="fill">False</property>
+                <property name="padding">10</property>
                 <property name="position">0</property>
               </packing>
             </child>
@@ -221,7 +224,7 @@
                     <property name="xscale">0</property>
                     <property name="yscale">0</property>
                     <child>
-                      <object class="GtkHBox" id="hbox18">
+                      <object class="GtkBox" id="hbox18">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="spacing">2</property>
@@ -275,7 +278,7 @@
                     <property name="xscale">0</property>
                     <property name="yscale">0</property>
                     <child>
-                      <object class="GtkHBox" id="hbox19">
+                      <object class="GtkBox" id="hbox19">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="spacing">2</property>
@@ -329,7 +332,7 @@
                     <property name="xscale">0</property>
                     <property name="yscale">0</property>
                     <child>
-                      <object class="GtkHBox" id="hbox20">
+                      <object class="GtkBox" id="hbox20">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="spacing">2</property>