diff --git a/plugins/color/gcm-self-test.c b/plugins/color/gcm-self-test.c
index 08241ce..a5163a7 100644
--- a/plugins/color/gcm-self-test.c
+++ b/plugins/color/gcm-self-test.c
@@ -123,6 +123,9 @@ gcm_test_frac_day (void)
         /* test rollover to next day */
         g_assert (gsd_natural_light_frac_day_is_between (23, 20, 6));
         g_assert (!gsd_natural_light_frac_day_is_between (12, 20, 6));
+
+        /* test rollover to the previous day */
+        g_assert (gsd_natural_light_frac_day_is_between (5, 16, 8));
 }
 
 int
diff --git a/plugins/color/gsd-color-manager.c b/plugins/color/gsd-color-manager.c
index 679f9e3..062fd52 100644
--- a/plugins/color/gsd-color-manager.c
+++ b/plugins/color/gsd-color-manager.c
@@ -356,7 +356,7 @@ static void
 settings_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
 {
         GsdColorManager *manager = GSD_COLOR_MANAGER (user_data);
-        natural_light_recheck_schedule (manager);
+        natural_light_recheck (manager);
 }
 
 static void
@@ -503,6 +503,7 @@ handle_set_property (GDBusConnection *connection,
                 g_autoptr(GDateTime) dt = g_date_time_new_now_local ();
                 priv->disabled_until_tomorrow = g_variant_get_boolean (value);
                 priv->disabled_day_of_month = g_date_time_get_day_of_month (dt);
+                natural_light_recheck (manager);
                 return TRUE;
         }
 
@@ -531,6 +532,9 @@ natural_light_recheck_cb (gpointer user_data)
 {
         GsdColorManager *manager = GSD_COLOR_MANAGER (user_data);
 
+        /* calculate any new sunrise/sunset values */
+        update_cached_sunrise_sunset (manager);
+
         /* recheck parameters, then reschedule a new timeout */
         natural_light_recheck (manager);
         poll_timeout_destroy (manager);
@@ -565,6 +569,7 @@ static void
 poll_timeout_destroy (GsdColorManager *manager)
 {
         GsdColorManagerPrivate *priv = manager->priv;
+
         if (priv->natural_light_source == NULL)
                 return;
 
diff --git a/plugins/color/gsd-natural-light-common.c b/plugins/color/gsd-natural-light-common.c
index 10b693d..9150de6 100644
--- a/plugins/color/gsd-natural-light-common.c
+++ b/plugins/color/gsd-natural-light-common.c
@@ -121,6 +121,10 @@ gsd_natural_light_frac_day_is_between (gdouble value, gdouble start, gdouble end
         if (end < start)
                 end += 24;
 
+        /* wraparound to the previous day */
+        if (value < start && value < end)
+                value += 24;
+
         /* test limits */
-        return value > start && value < end;
+        return value > start && value <= end;
 }
