diff --git a/magick/cache.c b/magick/cache.c
index f440e83..a8dcbdf 100644
--- a/magick/cache.c
+++ b/magick/cache.c
@@ -119,10 +119,14 @@
 
 static const PixelPacket
   *GetVirtualPixelCache(const Image *,const VirtualPixelMethod,const ssize_t,
-     const ssize_t,const size_t,const size_t,ExceptionInfo *),
+    const ssize_t,const size_t,const size_t,ExceptionInfo *),
   *GetVirtualPixelsCache(const Image *);
 
 static MagickBooleanType
+  GetOneAuthenticPixelFromCache(Image *,const ssize_t,const ssize_t,
+    PixelPacket *,ExceptionInfo *),
+  GetOneVirtualPixelFromCache(const Image *,const VirtualPixelMethod,
+    const ssize_t,const ssize_t,PixelPacket *,ExceptionInfo *),
   OpenPixelCache(Image *,const MapMode,ExceptionInfo *),
   ReadPixelCacheIndexes(CacheInfo *,NexusInfo *,ExceptionInfo *),
   ReadPixelCachePixels(CacheInfo *,NexusInfo *,ExceptionInfo *),
@@ -131,6 +135,8 @@
   WritePixelCachePixels(CacheInfo *,NexusInfo *,ExceptionInfo *);
 
 static PixelPacket
+  *GetAuthenticPixelsCache(Image *,const ssize_t,const ssize_t,const size_t,
+    const size_t,ExceptionInfo *),
   *QueueAuthenticPixelsCache(Image *,const ssize_t,const ssize_t,const size_t,
     const size_t,ExceptionInfo *),
   *SetPixelCacheNexusPixels(const Image *,const RectangleInfo *,NexusInfo *,
@@ -1610,7 +1616,11 @@
   const int
     id = GetOpenMPThreadId();
 
+  assert(image != (const Image *) NULL);
+  assert(image->signature == MagickSignature);
+  assert(image->cache != (Cache) NULL);
   cache_info=(CacheInfo *) image->cache;
+  assert(cache_info->signature == MagickSignature);
   assert(id < (int) cache_info->number_threads);
   return(GetPixelCacheNexusIndexes(image->cache,cache_info->nexus_info[id]));
 }
@@ -1771,7 +1781,11 @@
   const int
     id = GetOpenMPThreadId();
 
+  assert(image != (const Image *) NULL);
+  assert(image->signature == MagickSignature);
+  assert(image->cache != (Cache) NULL);
   cache_info=(CacheInfo *) image->cache;
+  assert(cache_info->signature == MagickSignature);
   assert(id < (int) cache_info->number_threads);
   return(GetPixelCacheNexusPixels(image->cache,cache_info->nexus_info[id]));
 }
@@ -1884,6 +1898,7 @@
        (GetAuthenticPixelsHandler) NULL)
     return(cache_info->methods.get_authentic_pixels_handler(image,x,y,columns,
       rows,exception));
+  return(GetAuthenticPixelsCache(image,x,y,columns,rows,exception));
   assert(id < (int) cache_info->number_threads);
   return(GetAuthenticPixelCacheNexus(image,x,y,columns,rows,
     cache_info->nexus_info[id],exception));
@@ -1930,9 +1945,13 @@
   const int
     id = GetOpenMPThreadId();
 
+  assert(image != (const Image *) NULL);
+  assert(image->signature == MagickSignature);
+  assert(image->cache != (Cache) NULL);
   cache_info=(CacheInfo *) image->cache;
   if (cache_info == (Cache) NULL)
     return((PixelPacket *) NULL);
+  assert(cache_info->signature == MagickSignature);
   assert(id < (int) cache_info->number_threads);
   return(GetAuthenticPixelCacheNexus(image,x,y,columns,rows,
     cache_info->nexus_info[id],exception));
@@ -2227,24 +2246,14 @@
 static MagickBooleanType GetOneAuthenticPixelFromCache(Image *image,
   const ssize_t x,const ssize_t y,PixelPacket *pixel,ExceptionInfo *exception)
 {
-  CacheInfo
-    *cache_info;
-
-  const int
-    id = GetOpenMPThreadId();
-
   PixelPacket
     *pixels;
 
   assert(image != (const Image *) NULL);
   assert(image->signature == MagickSignature);
   assert(image->cache != (Cache) NULL);
-  cache_info=(CacheInfo *) image->cache;
-  assert(cache_info->signature == MagickSignature);
   *pixel=image->background_color;
-  assert(id < (int) cache_info->number_threads);
-  pixels=GetAuthenticPixelCacheNexus(image,x,y,1UL,1UL,
-    cache_info->nexus_info[id],exception);
+  pixels=GetAuthenticPixelsCache(image,x,y,1UL,1UL,exception);
   if (pixels == (PixelPacket *) NULL)
     return(MagickFalse);
   *pixel=(*pixels);
@@ -2304,13 +2313,13 @@
   assert(image->cache != (Cache) NULL);
   cache_info=(CacheInfo *) image->cache;
   assert(cache_info->signature == MagickSignature);
-  GetMagickPixelPacket(image,pixel);
   assert(id < (int) cache_info->number_threads);
   pixels=GetVirtualPixelsFromNexus(image,GetPixelCacheVirtualMethod(image),x,y,
     1UL,1UL,cache_info->nexus_info[id],exception);
+  GetMagickPixelPacket(image,pixel);
   if (pixels == (const PixelPacket *) NULL)
     return(MagickFalse);
-  indexes=GetVirtualIndexesFromNexus(cache_info,cache_info->nexus_info[id]);
+  indexes=GetVirtualIndexQueue(image);
   SetMagickPixelPacket(image,pixels,indexes,pixel);
   return(MagickTrue);
 }
@@ -2373,7 +2382,6 @@
        (GetOneVirtualPixelFromHandler) NULL)
     return(cache_info->methods.get_one_virtual_pixel_from_handler(image,
       virtual_pixel_method,x,y,pixel,exception));
-  *pixel=image->background_color;
   assert(id < (int) cache_info->number_threads);
   pixels=GetVirtualPixelsFromNexus(image,virtual_pixel_method,x,y,1UL,1UL,
     cache_info->nexus_info[id],exception);
@@ -2492,9 +2500,13 @@
   const PixelPacket
     *pixels;
 
-  *pixel=image->background_color;
+  assert(image != (const Image *) NULL);
+  assert(image->signature == MagickSignature);
+  assert(image->cache != (Cache) NULL);
   cache_info=(CacheInfo *) image->cache;
+  assert(cache_info->signature == MagickSignature);
   assert(id < (int) cache_info->number_threads);
+  *pixel=image->background_color;
   pixels=GetVirtualPixelsFromNexus(image,virtual_pixel_method,x,y,1UL,1UL,
     cache_info->nexus_info[id],exception);
   if (pixels == (const PixelPacket *) NULL)
@@ -2613,7 +2625,7 @@
   MagickSizeType
     extent;
 
-  assert(cache != (Cache) NULL);
+  assert(cache != (const Cache) NULL);
   cache_info=(CacheInfo *) cache;
   assert(cache_info->signature == MagickSignature);
   extent=(MagickSizeType) nexus_info->region.width*nexus_info->region.height;
@@ -2654,8 +2666,7 @@
   CacheInfo
     *cache_info;
 
-  if (cache == (Cache) NULL)
-    return((IndexPacket *) NULL);
+  assert(cache != (const Cache) NULL);
   cache_info=(CacheInfo *) cache;
   assert(cache_info->signature == MagickSignature);
   if (cache_info->storage_class == UndefinedClass)
@@ -2695,8 +2706,7 @@
   CacheInfo
     *cache_info;
 
-  if (cache == (Cache) NULL)
-    return((PixelPacket *) NULL);
+  assert(cache != (const Cache) NULL);
   cache_info=(CacheInfo *) cache;
   assert(cache_info->signature == MagickSignature);
   if (cache_info->storage_class == UndefinedClass)
@@ -2817,16 +2827,10 @@
 MagickExport void GetPixelCacheTileSize(const Image *image,size_t *width,
   size_t *height)
 {
-  CacheInfo
-    *cache_info;
-
   assert(image != (Image *) NULL);
   assert(image->signature == MagickSignature);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
-  assert(image->cache != (Cache) NULL);
-  cache_info=(CacheInfo *) image->cache;
-  assert(cache_info->signature == MagickSignature);
   *width=2048UL/sizeof(PixelPacket);
   if (GetPixelCacheType(image) == DiskCache)
     *width=8192UL/sizeof(PixelPacket);
@@ -2936,9 +2940,13 @@
   const int
     id = GetOpenMPThreadId();
 
+  assert(image != (const Image *) NULL);
+  assert(image->signature == MagickSignature);
+  assert(image->cache != (Cache) NULL);
   cache_info=(CacheInfo *) image->cache;
+  assert(cache_info->signature == MagickSignature);
   assert(id < (int) cache_info->number_threads);
-  return(GetVirtualIndexesFromNexus(image->cache,cache_info->nexus_info[id]));
+  return(GetVirtualIndexesFromNexus(cache_info,cache_info->nexus_info[id]));
 }
 
 /*
@@ -2973,8 +2981,7 @@
   CacheInfo
     *cache_info;
 
-  if (cache == (Cache) NULL)
-    return((IndexPacket *) NULL);
+  assert(cache != (Cache) NULL);
   cache_info=(CacheInfo *) cache;
   assert(cache_info->signature == MagickSignature);
   if (cache_info->storage_class == UndefinedClass)
@@ -3198,7 +3205,11 @@
   /*
     Acquire pixels.
   */
+  assert(image != (const Image *) NULL);
+  assert(image->signature == MagickSignature);
+  assert(image->cache != (Cache) NULL);
   cache_info=(CacheInfo *) image->cache;
+  assert(cache_info->signature == MagickSignature);
   if (cache_info->type == UndefinedCache)
     return((const PixelPacket *) NULL);
   region.x=x;
@@ -3528,7 +3539,11 @@
   const int
     id = GetOpenMPThreadId();
 
+  assert(image != (const Image *) NULL);
+  assert(image->signature == MagickSignature);
+  assert(image->cache != (Cache) NULL);
   cache_info=(CacheInfo *) image->cache;
+  assert(cache_info->signature == MagickSignature);
   assert(id < (int) cache_info->number_threads);
   return(GetVirtualPixelsFromNexus(image,virtual_pixel_method,x,y,columns,rows,
     cache_info->nexus_info[id],exception));
@@ -3680,7 +3695,11 @@
   const int
     id = GetOpenMPThreadId();
 
+  assert(image != (const Image *) NULL);
+  assert(image->signature == MagickSignature);
+  assert(image->cache != (Cache) NULL);
   cache_info=(CacheInfo *) image->cache;
+  assert(cache_info->signature == MagickSignature);
   assert(id < (int) cache_info->number_threads);
   return(GetVirtualPixelsNexus(image->cache,cache_info->nexus_info[id]));
 }
@@ -3717,8 +3736,7 @@
   CacheInfo
     *cache_info;
 
-  if (cache == (Cache) NULL)
-    return((PixelPacket *) NULL);
+  assert(cache != (Cache) NULL);
   cache_info=(CacheInfo *) cache;
   assert(cache_info->signature == MagickSignature);
   if (cache_info->storage_class == UndefinedClass)
@@ -3962,11 +3980,15 @@
     columns,
     packet_size;
 
+  assert(image != (const Image *) NULL);
+  assert(image->signature == MagickSignature);
+  assert(image->cache != (Cache) NULL);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   if ((image->columns == 0) || (image->rows == 0))
     ThrowBinaryException(CacheError,"NoPixelsDefinedInCache",image->filename);
   cache_info=(CacheInfo *) image->cache;
+  assert(cache_info->signature == MagickSignature);
   source_info=(*cache_info);
   source_info.file=(-1);
   (void) FormatMagickString(cache_info->filename,MaxTextExtent,"%s[%.20g]",
@@ -4212,7 +4234,7 @@
       */
       if (image->debug != MagickFalse)
         (void) LogMagickEvent(CacheEvent,GetMagickModule(),
-          "attach persistent pixel cache");
+          "attach persistent cache");
       (void) CopyMagickString(cache_info->cache_filename,filename,
         MaxTextExtent);
       cache_info->type=DiskCache;
@@ -4236,9 +4258,6 @@
           /*
             Usurp existing persistent pixel cache.
           */
-          if (image->debug != MagickFalse)
-            (void) LogMagickEvent(CacheEvent,GetMagickModule(),
-              "usurp resident persistent pixel cache");
           status=rename(cache_info->cache_filename,filename);
           if (status == 0)
             {
@@ -4248,6 +4267,9 @@
                 page_size);
               UnlockSemaphoreInfo(cache_info->semaphore);
               cache_info=(CacheInfo *) ReferencePixelCache(cache_info);
+              if (image->debug != MagickFalse)
+                (void) LogMagickEvent(CacheEvent,GetMagickModule(),
+                  "Usurp resident persistent cache");
               return(MagickTrue);
             }
         }
@@ -4256,9 +4278,6 @@
   /*
     Clone persistent pixel cache.
   */
-  if (image->debug != MagickFalse)
-    (void) LogMagickEvent(CacheEvent,GetMagickModule(),
-      "clone persistent pixel cache");
   clone_image=(*image);
   clone_info=(CacheInfo *) clone_image.cache;
   image->cache=ClonePixelCache(cache_info);
@@ -4269,7 +4288,7 @@
   cache_info=(CacheInfo *) image->cache;
   status=OpenPixelCache(image,IOMode,exception);
   if (status != MagickFalse)
-    status=ClonePixelCachePixels(cache_info,clone_info,&image->exception);
+   status=ClonePixelCachePixels(cache_info,clone_info,&image->exception);
   *offset+=cache_info->length+page_size-(cache_info->length % page_size);
   clone_info=(CacheInfo *) DestroyPixelCache(clone_info);
   return(status);
@@ -4329,7 +4348,11 @@
   /*
     Validate pixel cache geometry.
   */
+  assert(image != (const Image *) NULL);
+  assert(image->signature == MagickSignature);
+  assert(image->cache != (Cache) NULL);
   cache_info=(CacheInfo *) GetImagePixelCache(image,MagickTrue,exception);
+  assert(cache_info->signature == MagickSignature);
   if (cache_info == (Cache) NULL)
     return((PixelPacket *) NULL);
   if ((cache_info->columns == 0) && (cache_info->rows == 0))
@@ -4405,9 +4428,11 @@
   const int
     id = GetOpenMPThreadId();
 
+  assert(image != (const Image *) NULL);
+  assert(image->signature == MagickSignature);
+  assert(image->cache != (Cache) NULL);
   cache_info=(CacheInfo *) image->cache;
-  if (cache_info == (Cache) NULL)
-    return((PixelPacket *) NULL);
+  assert(cache_info->signature == MagickSignature);
   assert(id < (int) cache_info->number_threads);
   return(QueueAuthenticNexus(image,x,y,columns,rows,cache_info->nexus_info[id],
     exception));
@@ -5114,6 +5139,7 @@
   if (image->cache == (Cache) NULL)
     ThrowBinaryException(CacheError,"PixelCacheIsNotOpen",image->filename);
   cache_info=(CacheInfo *) image->cache;
+  assert(cache_info->signature == MagickSignature);
   if (cache_info->type == UndefinedCache)
     return(MagickFalse);
   if ((image->clip_mask != (Image *) NULL) &&
@@ -5168,7 +5194,11 @@
   const int
     id = GetOpenMPThreadId();
 
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickSignature);
+  assert(image->cache != (Cache) NULL);
   cache_info=(CacheInfo *) image->cache;
+  assert(cache_info->signature == MagickSignature);
   assert(id < (int) cache_info->number_threads);
   return(SyncAuthenticPixelCacheNexus(image,cache_info->nexus_info[id],
     exception));