diff --git a/magick/cache.c b/magick/cache.c
index 7da1c951..83446aa 100644
--- a/magick/cache.c
+++ b/magick/cache.c
@@ -1719,14 +1719,14 @@
   IndexPacket
     *indexes;
 
-  ssize_t
+  int
     id;
 
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   cache_info=(CacheInfo *) image->cache;
   id=GetOpenMPThreadId();
-  assert(id < (ssize_t) cache_info->number_threads);
+  assert(id < (int) cache_info->number_threads);
   indexes=GetPixelCacheNexusIndexes(image->cache,cache_info->nexus_info[id]);
   return(indexes);
 }
@@ -1884,7 +1884,7 @@
   CacheInfo
     *cache_info;
 
-  ssize_t
+  int
     id;
 
   PixelPacket
@@ -1894,7 +1894,7 @@
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   cache_info=(CacheInfo *) image->cache;
   id=GetOpenMPThreadId();
-  assert(id < (ssize_t) cache_info->number_threads);
+  assert(id < (int) cache_info->number_threads);
   pixels=GetPixelCacheNexusPixels(image->cache,cache_info->nexus_info[id]);
   return(pixels);
 }
@@ -2049,7 +2049,7 @@
   CacheInfo
     *cache_info;
 
-  ssize_t
+  int
     id;
 
   PixelPacket
@@ -2059,7 +2059,7 @@
   if (cache_info == (Cache) NULL)
     return((PixelPacket *) NULL);
   id=GetOpenMPThreadId();
-  assert(id < (ssize_t) cache_info->number_threads);
+  assert(id < (int) cache_info->number_threads);
   pixels=GetAuthenticPixelCacheNexus(image,x,y,columns,rows,
     cache_info->nexus_info[id],exception);
   return(pixels);
@@ -2093,7 +2093,7 @@
   CacheInfo
     *cache_info;
 
-  ssize_t
+  int
     id;
 
   MagickSizeType
@@ -2107,7 +2107,7 @@
   cache_info=(CacheInfo *) image->cache;
   assert(cache_info->signature == MagickSignature);
   id=GetOpenMPThreadId();
-  assert(id < (ssize_t) cache_info->number_threads);
+  assert(id < (int) cache_info->number_threads);
   extent=GetPixelCacheNexusExtent(image->cache,cache_info->nexus_info[id]);
   return(extent);
 }
@@ -2171,6 +2171,8 @@
     status;
 
   static MagickSizeType
+    cpu_throttle = 0,
+    cycles = 0,
     time_limit = 0;
 
   static time_t
@@ -2180,8 +2182,31 @@
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   status=MagickTrue;
   LockSemaphoreInfo(image->semaphore);
+  if (cpu_throttle == 0)
+    {
+      char
+        *limit;
+
+      /*
+        Set CPU throttle in milleseconds.
+      */
+      cpu_throttle=MagickResourceInfinity;
+      limit=GetEnvironmentValue("MAGICK_THROTTLE");
+      if (limit == (char *) NULL)
+        limit=GetPolicyValue("throttle");
+      if (limit != (char *) NULL)
+        {
+          cpu_throttle=(MagickSizeType) StringToInteger(limit);
+          limit=DestroyString(limit);
+        }
+    }
+  if ((cpu_throttle != MagickResourceInfinity) && ((cycles++ % 32) == 0))
+    MagickDelay(cpu_throttle);
   if (time_limit == 0)
     {
+      /*
+        Set the exire time in seconds.
+      */
       time_limit=GetMagickResourceLimit(TimeResource);
       cache_genesis=time((time_t *) NULL);
     }
@@ -3029,14 +3054,14 @@
   const IndexPacket
     *indexes;
 
-  ssize_t
+  int
     id;
 
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   cache_info=(CacheInfo *) image->cache;
   id=GetOpenMPThreadId();
-  assert(id < (ssize_t) cache_info->number_threads);
+  assert(id < (int) cache_info->number_threads);
   indexes=GetVirtualIndexesFromNexus(image->cache,cache_info->nexus_info[id]);
   return(indexes);
 }
@@ -3628,14 +3653,14 @@
   const PixelPacket
     *pixels;
 
-  ssize_t
+  int
     id;
 
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   cache_info=(CacheInfo *) image->cache;
   id=GetOpenMPThreadId();
-  assert(id < (ssize_t) cache_info->number_threads);
+  assert(id < (int) cache_info->number_threads);
   pixels=GetVirtualPixelsFromNexus(image,virtual_pixel_method,x,y,columns,rows,
     cache_info->nexus_info[id],exception);
   return(pixels);
@@ -3786,14 +3811,14 @@
   const PixelPacket
     *pixels;
 
-  ssize_t
+  int
     id;
 
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   cache_info=(CacheInfo *) image->cache;
   id=GetOpenMPThreadId();
-  assert(id < (ssize_t) cache_info->number_threads);
+  assert(id < (int) cache_info->number_threads);
   pixels=GetVirtualPixelsNexus(image->cache,cache_info->nexus_info[id]);
   return(pixels);
 }
@@ -4516,7 +4541,7 @@
   CacheInfo
     *cache_info;
 
-  ssize_t
+  int
     id;
 
   PixelPacket
@@ -4526,7 +4551,7 @@
   if (cache_info == (Cache) NULL)
     return((PixelPacket *) NULL);
   id=GetOpenMPThreadId();
-  assert(id < (ssize_t) cache_info->number_threads);
+  assert(id < (int) cache_info->number_threads);
   pixels=QueueAuthenticNexus(image,x,y,columns,rows,cache_info->nexus_info[id],
     exception);
   return(pixels);
@@ -5268,7 +5293,7 @@
   CacheInfo
     *cache_info;
 
-  ssize_t
+  int
     id;
 
   MagickBooleanType
@@ -5276,7 +5301,7 @@
 
   cache_info=(CacheInfo *) image->cache;
   id=GetOpenMPThreadId();
-  assert(id < (ssize_t) cache_info->number_threads);
+  assert(id < (int) cache_info->number_threads);
   status=SyncAuthenticPixelCacheNexus(image,cache_info->nexus_info[id],
     exception);
   return(status);