diff --git a/src/gs-fade.c b/src/gs-fade.c
index 57b3718..4794023 100644
--- a/src/gs-fade.c
+++ b/src/gs-fade.c
@@ -825,6 +825,7 @@ gs_fade_sync (GSFade        *fade,
 void
 gs_fade_reset (GSFade *fade)
 {
+        struct GSFadeScreenPrivate *screen_priv;
         int i;
         g_return_if_fail (GS_IS_FADE (fade));
 
@@ -838,8 +839,12 @@ gs_fade_reset (GSFade *fade)
 
         gs_fade_set_alpha (fade, fade->priv->current_alpha);
 
-        for (i = 0; i < fade->priv->num_screens; i++)
-                fade->priv->screen_priv[i].fade_finish (fade, i);
+        for (i = 0; i < fade->priv->num_screens; i++) {
+                screen_priv = &fade->priv->screen_priv[i];
+
+                if (screen_priv->fade_type != FADE_TYPE_NONE)
+                        fade->priv->screen_priv[i].fade_finish (fade, i);
+        }
 }
 
 static void
@@ -890,6 +895,7 @@ gs_fade_init (GSFade *fade)
 static void
 gs_fade_finalize (GObject *object)
 {
+        struct GSFadeScreenPrivate *screen_priv;
         GSFade *fade;
         int i;
 
@@ -900,8 +906,12 @@ gs_fade_finalize (GObject *object)
 
         g_return_if_fail (fade->priv != NULL);
 
-        for (i = 0; i < fade->priv->num_screens; i++)
-                fade->priv->screen_priv[i].fade_finish(fade, i);
+        for (i = 0; i < fade->priv->num_screens; i++) {
+                screen_priv = &fade->priv->screen_priv[i];
+
+                if (screen_priv->fade_type != FADE_TYPE_NONE)
+                        fade->priv->screen_priv[i].fade_finish(fade, i);
+        }
 
         if (fade->priv->screen_priv) {
                 for (i = 0; i < fade->priv->num_screens; i++) {
