diff --git a/magick/cache.c b/magick/cache.c
index ff834b9..eb5d373 100644
--- a/magick/cache.c
+++ b/magick/cache.c
@@ -2099,44 +2099,42 @@
   assert(image->cache != (Cache) NULL);
   cache_info=(CacheInfo *) image->cache;
   destroy=MagickFalse;
-  if (cache_info->type != PingCache)
+  if ((cache_info->reference_count > 1) || (cache_info->mode == ReadMode))
     {
-      if ((cache_info->reference_count > 1) || (cache_info->mode == ReadMode))
+      LockSemaphoreInfo(cache_info->semaphore);
+      if ((cache_info->reference_count > 1) ||
+          (cache_info->mode == ReadMode))
         {
-          LockSemaphoreInfo(cache_info->semaphore);
-          if ((cache_info->reference_count > 1) ||
-              (cache_info->mode == ReadMode))
+          Image
+            clone_image;
+
+          CacheInfo
+            *clone_info;
+
+          /*
+            Clone pixel cache.
+          */
+          clone_image=(*image);
+          clone_image.semaphore=AllocateSemaphoreInfo();
+          clone_image.reference_count=1;
+          clone_image.cache=ClonePixelCache(cache_info);
+          clone_info=(CacheInfo *) clone_image.cache;
+          status=OpenPixelCache(&clone_image,IOMode,exception);
+          if (status != MagickFalse)
             {
-              Image
-                clone_image;
-
-              CacheInfo
-                *clone_info;
-
-              /*
-                Clone pixel cache.
-              */
-              clone_image=(*image);
-              clone_image.semaphore=AllocateSemaphoreInfo();
-              clone_image.reference_count=1;
-              clone_image.cache=ClonePixelCache(cache_info);
-              clone_info=(CacheInfo *) clone_image.cache;
-              status=OpenPixelCache(&clone_image,IOMode,exception);
+              if ((clone != MagickFalse) &&
+                  (cache_info->type != PingCache))
+                status=ClonePixelCachePixels(clone_info,cache_info,
+                  exception);
               if (status != MagickFalse)
                 {
-                  if (clone != MagickFalse)
-                    status=ClonePixelCachePixels(clone_info,cache_info,
-                      exception);
-                  if (status != MagickFalse)
-                    {
-                      destroy=MagickTrue;
-                      image->cache=clone_image.cache;
-                    }
+                  destroy=MagickTrue;
+                  image->cache=clone_image.cache;
                 }
-              DestroySemaphoreInfo(&clone_image.semaphore);
             }
-          UnlockSemaphoreInfo(cache_info->semaphore);
+          DestroySemaphoreInfo(&clone_image.semaphore);
         }
+      UnlockSemaphoreInfo(cache_info->semaphore);
     }
   if (destroy != MagickFalse)
     cache_info=(CacheInfo *) DestroyPixelCache(cache_info);