Index: app/core/gimpimagefile.c
===================================================================
--- app/core/gimpimagefile.c	(revision 25900)
+++ app/core/gimpimagefile.c	(working copy)
@@ -245,7 +245,7 @@ gimp_imagefile_create_thumbnail (GimpIma
   image_state = gimp_thumbnail_peek_image (thumbnail);
 
   if (image_state == GIMP_THUMB_STATE_REMOTE ||
-      image_state >= GIMP_THUMB_STATE_EXISTS)
+      gimp_thumbnail_state_implies_thumbnailing (image_state))
     {
       GimpImage    *image;
       gboolean      success;
@@ -540,6 +540,11 @@ gimp_imagefile_get_desc_string (GimpImag
       imagefile->static_desc = TRUE;
       break;
 
+    case GIMP_THUMB_STATE_NO_READ_ACCESS:
+      imagefile->description = (gchar *) _("No Read Access");
+      imagefile->static_desc = TRUE;
+      break;
+
     default:
       {
         GString *str = g_string_new (NULL);
@@ -650,16 +655,18 @@ gimp_imagefile_load_thumb (GimpImagefile
                            gint           width,
                            gint           height)
 {
-  GimpThumbnail *thumbnail = imagefile->thumbnail;
-  GdkPixbuf     *pixbuf    = NULL;
-  GError        *error     = NULL;
-  gint           size      = MAX (width, height);
-  gint           pixbuf_width;
-  gint           pixbuf_height;
-  gint           preview_width;
-  gint           preview_height;
+  GimpThumbnail  *thumbnail = imagefile->thumbnail;
+  GdkPixbuf      *pixbuf    = NULL;
+  GError         *error     = NULL;
+  gint            size      = MAX (width, height);
+  GimpThumbState  state;
+  gint            pixbuf_width;
+  gint            pixbuf_height;
+  gint            preview_width;
+  gint            preview_height;
 
-  if (gimp_thumbnail_peek_thumb (thumbnail, size) < GIMP_THUMB_STATE_EXISTS)
+  state = gimp_thumbnail_peek_thumb (thumbnail, size);
+  if (! gimp_thumbnail_state_implies_thumbnailing (state))
     return NULL;
 
   if (thumbnail->image_state == GIMP_THUMB_STATE_NOT_FOUND)
Index: app/widgets/gimpthumbbox.c
===================================================================
--- app/widgets/gimpthumbbox.c	(revision 25900)
+++ app/widgets/gimpthumbbox.c	(working copy)
@@ -525,7 +525,8 @@ gimp_thumb_box_thumb_state_notify (GimpT
   if (box->idle_id)
     return;
 
-  if (thumb->image_state == GIMP_THUMB_STATE_REMOTE)
+  if (thumb->image_state == GIMP_THUMB_STATE_REMOTE ||
+      thumb->image_state == GIMP_THUMB_STATE_NO_READ_ACCESS)
     return;
 
   switch (thumb->thumb_state)
@@ -665,9 +666,10 @@ gimp_thumb_box_create_thumbnail (GimpThu
                                  gboolean           force,
                                  GimpProgress      *progress)
 {
-  gchar         *filename = file_utils_filename_from_uri (uri);
-  GimpThumbnail *thumb;
-  gchar         *basename;
+  gchar          *filename = file_utils_filename_from_uri (uri);
+  GimpThumbnail  *thumb;
+  gchar          *basename;
+  GimpThumbState  state;
 
   if (filename)
     {
@@ -687,8 +689,10 @@ gimp_thumb_box_create_thumbnail (GimpThu
 
   gimp_object_set_name (GIMP_OBJECT (box->imagefile), uri);
 
+  state = gimp_thumbnail_peek_thumb (thumb, size);
   if (force ||
-      (gimp_thumbnail_peek_thumb (thumb, size) < GIMP_THUMB_STATE_FAILED &&
+      (state != GIMP_THUMB_STATE_FAILED && 
+       state != GIMP_THUMB_STATE_OK     &&
        ! gimp_thumbnail_has_failed (thumb)))
     {
       gimp_imagefile_create_thumbnail (box->imagefile, box->context,
Index: libgimpthumb/Makefile.am
===================================================================
--- libgimpthumb/Makefile.am	(revision 25900)
+++ libgimpthumb/Makefile.am	(working copy)
@@ -46,6 +46,7 @@ INCLUDES = \
 	-I$(top_srcdir)		\
 	$(GDK_PIXBUF_CFLAGS)	\
 	$(GLIB_CFLAGS)		\
+	$(GIO_CFLAGS)		\
 	-I$(includedir)
 
 EXTRA_DIST = \
@@ -79,7 +80,10 @@ libgimpthumb_2_0_la_LDFLAGS = \
 	$(no_undefined)				\
 	$(libgimpthumb_export_symbols)
 
-libgimpthumb_2_0_la_LIBADD = $(GDK_PIXBUF_LIBS) $(GLIB_LIBS) 
+libgimpthumb_2_0_la_LIBADD = \
+	$(GDK_PIXBUF_LIBS)	\
+	$(GLIB_LIBS)		\
+	$(GIO_LIBS)
 
 
 noinst_PROGRAMS = gimp-thumbnail-list
Index: libgimpthumb/gimp-thumbnail-list.c
===================================================================
--- libgimpthumb/gimp-thumbnail-list.c	(revision 25900)
+++ libgimpthumb/gimp-thumbnail-list.c	(working copy)
@@ -34,7 +34,7 @@ static const GOptionEntry main_entries[]
     "state", 's', 0,
     G_OPTION_ARG_CALLBACK, parse_option_state,
     "Filter by thumbnail state "
-    "(unknown|remote|folder|special|not-found|exists|old|failed|ok|error)",
+    "(unknown|remote|folder|special|not-found|no-read-access|exists|old|failed|ok|error)",
     "<state>"
   },
   {
@@ -116,6 +116,8 @@ parse_option_state (const gchar  *option
     option_state = GIMP_THUMB_STATE_SPECIAL;
   else if (strcmp (value, "not-found") == 0)
     option_state = GIMP_THUMB_STATE_NOT_FOUND;
+  else if (strcmp (value, "no-read-access") == 0)
+    option_state = GIMP_THUMB_STATE_NO_READ_ACCESS;
   else if (strcmp (value, "exists") == 0)
     option_state = GIMP_THUMB_STATE_EXISTS;
   else if (strcmp (value, "old") == 0)
@@ -235,6 +237,10 @@ process_thumbnail (const gchar *filename
           g_print ("%s Image not found '%s'\n", filename, thumbnail->image_uri);
           break;
 
+        case GIMP_THUMB_STATE_NO_READ_ACCESS:
+          g_print ("%s No read access for image '%s'\n", filename, thumbnail->image_uri);
+          break;
+
         case GIMP_THUMB_STATE_OLD:
           g_print ("%s Thumbnail old '%s'\n", filename, thumbnail->image_uri);
           break;
Index: libgimpthumb/gimpthumb-enums.h
===================================================================
--- libgimpthumb/gimpthumb-enums.h	(revision 25900)
+++ libgimpthumb/gimpthumb-enums.h	(working copy)
@@ -68,7 +68,8 @@ typedef enum
   GIMP_THUMB_STATE_EXISTS,
   GIMP_THUMB_STATE_OLD,
   GIMP_THUMB_STATE_FAILED,
-  GIMP_THUMB_STATE_OK
+  GIMP_THUMB_STATE_OK,
+  GIMP_THUMB_STATE_NO_READ_ACCESS,
 } GimpThumbState;
 
 
Index: libgimpthumb/gimpthumb-utils.c
===================================================================
--- libgimpthumb/gimpthumb-utils.c	(revision 25900)
+++ libgimpthumb/gimpthumb-utils.c	(working copy)
@@ -33,6 +33,7 @@
 #include <unistd.h>
 #endif
 
+#include <gio/gio.h>
 #include <glib-object.h>
 #include <glib/gstdio.h>
 
@@ -510,6 +511,40 @@ gimp_thumb_file_test (const gchar *filen
   return GIMP_THUMB_FILE_TYPE_NONE;
 }
 
+gboolean
+gimp_thumb_file_readable (const gchar *filename)
+{
+  GFile     *file;
+  GError    *error     = NULL;
+  gboolean   readable  = FALSE;
+  GFileInfo *file_info;
+
+  if (! filename)
+    return FALSE;
+
+  file      = g_file_new_for_path (filename);
+  file_info = g_file_query_info (file,
+                                 G_FILE_ATTRIBUTE_ACCESS_CAN_READ,
+                                 G_FILE_QUERY_INFO_NONE,
+                                 NULL,
+                                 &error);
+  if (error == NULL)
+    {
+      readable =
+        g_file_info_get_attribute_boolean (file_info,
+                                           G_FILE_ATTRIBUTE_ACCESS_CAN_READ);
+    }
+  else
+    {
+      readable = FALSE;
+      g_error_free (error);
+    }
+
+  g_object_unref (file);
+
+  return readable;
+}
+
 /**
  * gimp_thumbs_delete_for_uri:
  * @uri: an escaped URI
Index: libgimpthumb/gimpthumb-utils.h
===================================================================
--- libgimpthumb/gimpthumb-utils.h	(revision 25900)
+++ libgimpthumb/gimpthumb-utils.h	(working copy)
@@ -39,6 +39,7 @@ GimpThumbFileType   gimp_thumb_file_test
                                                        gint64         *mtime,
                                                        gint64         *size,
                                                        gint           *err_no);
+gboolean            gimp_thumb_file_readable          (const gchar    *filename);
 
 gchar             * gimp_thumb_name_from_uri          (const gchar    *uri,
                                                        GimpThumbSize   size) G_GNUC_MALLOC;
Index: libgimpthumb/gimpthumbnail.c
===================================================================
--- libgimpthumb/gimpthumbnail.c	(revision 25900)
+++ libgimpthumb/gimpthumbnail.c	(working copy)
@@ -640,6 +640,12 @@ gimp_thumbnail_update_image (GimpThumbna
       break;
 
     default:
+      if (! gimp_thumb_file_readable (thumbnail->image_filename))
+        {
+          state = GIMP_THUMB_STATE_NO_READ_ACCESS;
+          break;
+        }
+
       switch (gimp_thumb_file_test (thumbnail->image_filename,
                                     &mtime, &filesize,
                                     &thumbnail->image_not_found_errno))
@@ -1016,7 +1022,9 @@ gimp_thumbnail_load_thumb (GimpThumbnail
 
   state = gimp_thumbnail_peek_thumb (thumbnail, size);
 
-  if (state < GIMP_THUMB_STATE_EXISTS || state == GIMP_THUMB_STATE_FAILED)
+  if (state                  == GIMP_THUMB_STATE_FAILED         ||
+      thumbnail->image_state == GIMP_THUMB_STATE_NO_READ_ACCESS ||
+      ! gimp_thumbnail_state_implies_thumbnailing (state))
     return NULL;
 
   pixbuf = gdk_pixbuf_new_from_file (thumbnail->thumb_filename, NULL);
@@ -1372,12 +1380,13 @@ gimp_thumbnail_delete_others (GimpThumbn
 gboolean
 gimp_thumbnail_has_failed (GimpThumbnail *thumbnail)
 {
-  GdkPixbuf   *pixbuf;
-  const gchar *option;
-  gchar       *filename;
-  gint64       image_mtime;
-  gint64       image_size;
-  gboolean     failed = FALSE;
+  GdkPixbuf      *pixbuf;
+  const gchar    *option;
+  gchar          *filename;
+  GimpThumbState  state;
+  gint64          image_mtime;
+  gint64          image_size;
+  gboolean        failed = FALSE;
 
   g_return_val_if_fail (GIMP_IS_THUMBNAIL (thumbnail), FALSE);
   g_return_val_if_fail (thumbnail->image_uri != NULL, FALSE);
@@ -1395,7 +1404,8 @@ gimp_thumbnail_has_failed (GimpThumbnail
   if (! pixbuf)
     return FALSE;
 
-  if (gimp_thumbnail_peek_image (thumbnail) < GIMP_THUMB_STATE_EXISTS)
+  state = gimp_thumbnail_peek_image (thumbnail);
+  if (! gimp_thumbnail_state_implies_thumbnailing(state))
     goto finish;
 
   /* URI and mtime from the thumbnail need to match our file */
@@ -1423,3 +1433,21 @@ gimp_thumbnail_has_failed (GimpThumbnail
 
   return failed;
 }
+
+/**
+ * gimp_thumbnail_state_implies_thumbnailing:
+ * @state: a #GimpThumbState state
+ *
+ * Returns: %TRUE if the #GimpThumbState implies that thumnailing
+ *          makes sense.
+ *
+ * Since: GIMP 2.6
+ **/
+gboolean
+gimp_thumbnail_state_implies_thumbnailing (GimpThumbState state)
+{
+  return state == GIMP_THUMB_STATE_EXISTS ||
+         state == GIMP_THUMB_STATE_OLD    ||
+         state == GIMP_THUMB_STATE_FAILED ||
+         state == GIMP_THUMB_STATE_OK;
+}
Index: libgimpthumb/gimpthumbnail.h
===================================================================
--- libgimpthumb/gimpthumbnail.h	(revision 25900)
+++ libgimpthumb/gimpthumbnail.h	(working copy)
@@ -77,47 +77,48 @@ struct _GimpThumbnailClass
 };
 
 
-GType            gimp_thumbnail_get_type         (void) G_GNUC_CONST;
+GType            gimp_thumbnail_get_type                   (void) G_GNUC_CONST;
 
-GimpThumbnail  * gimp_thumbnail_new              (void);
+GimpThumbnail  * gimp_thumbnail_new                        (void);
 
-void             gimp_thumbnail_set_uri          (GimpThumbnail  *thumbnail,
-                                                  const gchar    *uri);
-gboolean         gimp_thumbnail_set_filename     (GimpThumbnail  *thumbnail,
-                                                  const gchar    *filename,
-                                                  GError        **error);
-gboolean         gimp_thumbnail_set_from_thumb   (GimpThumbnail  *thumbnail,
-                                                  const gchar    *filename,
-                                                  GError        **error);
-
-GimpThumbState   gimp_thumbnail_peek_image       (GimpThumbnail  *thumbnail);
-GimpThumbState   gimp_thumbnail_peek_thumb       (GimpThumbnail  *thumbnail,
-                                                  GimpThumbSize   size);
-
-GimpThumbState   gimp_thumbnail_check_thumb      (GimpThumbnail  *thumbnail,
-                                                  GimpThumbSize   size);
-
-GdkPixbuf      * gimp_thumbnail_load_thumb       (GimpThumbnail  *thumbnail,
-                                                  GimpThumbSize   size,
-                                                  GError        **error);
-
-gboolean         gimp_thumbnail_save_thumb       (GimpThumbnail  *thumbnail,
-                                                  GdkPixbuf      *pixbuf,
-                                                  const gchar    *software,
-                                                  GError        **error);
-gboolean         gimp_thumbnail_save_thumb_local (GimpThumbnail  *thumbnail,
-                                                  GdkPixbuf      *pixbuf,
-                                                  const gchar    *software,
-                                                  GError        **error);
-
-gboolean         gimp_thumbnail_save_failure     (GimpThumbnail  *thumbnail,
-                                                  const gchar    *software,
-                                                  GError        **error);
-void             gimp_thumbnail_delete_failure   (GimpThumbnail  *thumbnail);
-void             gimp_thumbnail_delete_others    (GimpThumbnail  *thumbnail,
-                                                  GimpThumbSize   size);
+void             gimp_thumbnail_set_uri                    (GimpThumbnail  *thumbnail,
+                                                            const gchar    *uri);
+gboolean         gimp_thumbnail_set_filename               (GimpThumbnail  *thumbnail,
+                                                            const gchar    *filename,
+                                                            GError        **error);
+gboolean         gimp_thumbnail_set_from_thumb             (GimpThumbnail  *thumbnail,
+                                                            const gchar    *filename,
+                                                            GError        **error);
+
+GimpThumbState   gimp_thumbnail_peek_image                 (GimpThumbnail  *thumbnail);
+GimpThumbState   gimp_thumbnail_peek_thumb                 (GimpThumbnail  *thumbnail,
+                                                            GimpThumbSize   size);
+
+GimpThumbState   gimp_thumbnail_check_thumb                (GimpThumbnail  *thumbnail,
+                                                            GimpThumbSize   size);
+
+GdkPixbuf      * gimp_thumbnail_load_thumb                 (GimpThumbnail  *thumbnail,
+                                                            GimpThumbSize   size,
+                                                            GError        **error);
+
+gboolean         gimp_thumbnail_save_thumb                 (GimpThumbnail  *thumbnail,
+                                                            GdkPixbuf      *pixbuf,
+                                                            const gchar    *software,
+                                                            GError        **error);
+gboolean         gimp_thumbnail_save_thumb_local           (GimpThumbnail  *thumbnail,
+                                                            GdkPixbuf      *pixbuf,
+                                                            const gchar    *software,
+                                                            GError        **error);
+
+gboolean         gimp_thumbnail_save_failure               (GimpThumbnail  *thumbnail,
+                                                            const gchar    *software,
+                                                            GError        **error);
+void             gimp_thumbnail_delete_failure             (GimpThumbnail  *thumbnail);
+void             gimp_thumbnail_delete_others              (GimpThumbnail  *thumbnail,
+                                                            GimpThumbSize   size);
 
-gboolean         gimp_thumbnail_has_failed       (GimpThumbnail  *thumbnail);
+gboolean         gimp_thumbnail_has_failed                 (GimpThumbnail  *thumbnail);
+gboolean         gimp_thumbnail_state_implies_thumbnailing (GimpThumbState state);
 
 
 G_END_DECLS
