diff --git a/src/rugby-list-store.c b/src/rugby-list-store.c
index bb4fae3ba3a8dcbb50c072413677ce8537b7f42e..b1f8b63fe6c1d01d5e691a5756c86549accfe198 100644
--- a/src/rugby-list-store.c
+++ b/src/rugby-list-store.c
@@ -102,14 +102,6 @@ process_data (RugbyListStore *self)
                                 g_list_model_get_n_items (G_LIST_MODEL (self->items)));
 }
 
-static void
-on_settings_changed (G_GNUC_UNUSED GSettings *settings,
-                     G_GNUC_UNUSED char      *key,
-                     gpointer                 user_data)
-{
-    process_data (RUGBY_LIST_STORE (user_data));
-}
-
 // GListModel implementation
 
 static GType
@@ -214,8 +206,13 @@ static void
 rugby_list_store_init (RugbyListStore *self)
 {
     self->settings = g_settings_new ("uk.me.bcowan.Rugby");
-    g_signal_connect (self->settings, "changed",
-                      G_CALLBACK (on_settings_changed), self);
+
+    g_signal_connect_swapped (self->settings, "changed::try-points",
+                              G_CALLBACK (process_data), self);
+    g_signal_connect_swapped (self->settings, "changed::utry-points",
+                              G_CALLBACK (process_data), self);
+    g_signal_connect_swapped (self->settings, "changed::kick-points",
+                              G_CALLBACK (process_data), self);
 
     self->score = 0;
     self->items = g_list_store_new (RUGBY_TYPE_POSSIBILITY);