Index: app/core/gimpimagefile.c
===================================================================
--- app/core/gimpimagefile.c	(revision 25896)
+++ app/core/gimpimagefile.c	(working copy)
@@ -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);
Index: app/widgets/gimpthumbbox.c
===================================================================
--- app/widgets/gimpthumbbox.c	(revision 25896)
+++ 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)
Index: libgimpthumb/Makefile.am
===================================================================
--- libgimpthumb/Makefile.am	(revision 25896)
+++ 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 25896)
+++ 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 25896)
+++ libgimpthumb/gimpthumb-enums.h	(working copy)
@@ -58,6 +58,7 @@ typedef enum
 
 GType gimp_thumb_state_get_type (void) G_GNUC_CONST;
 
+/* Note, the order is important! */
 typedef enum
 {
   GIMP_THUMB_STATE_UNKNOWN,
@@ -65,6 +66,7 @@ typedef enum
   GIMP_THUMB_STATE_FOLDER,
   GIMP_THUMB_STATE_SPECIAL,
   GIMP_THUMB_STATE_NOT_FOUND,
+  GIMP_THUMB_STATE_NO_READ_ACCESS,
   GIMP_THUMB_STATE_EXISTS,
   GIMP_THUMB_STATE_OLD,
   GIMP_THUMB_STATE_FAILED,
Index: libgimpthumb/gimpthumb-utils.c
===================================================================
--- libgimpthumb/gimpthumb-utils.c	(revision 25896)
+++ 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 25896)
+++ 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 25896)
+++ 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 (thumbnail->image_state == GIMP_THUMB_STATE_NO_READ_ACCESS ||
+      state == GIMP_THUMB_STATE_FAILED ||
+      state  < GIMP_THUMB_STATE_EXISTS)
     return NULL;
 
   pixbuf = gdk_pixbuf_new_from_file (thumbnail->thumb_filename, NULL);
