diff --git a/MagickCore/morphology.c b/MagickCore/morphology.c
index 26ea08e..fb185b1 100644
--- a/MagickCore/morphology.c
+++ b/MagickCore/morphology.c
@@ -2631,6 +2631,7 @@
     ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
   for (i=0; i < (ssize_t) GetOpenMPMaximumThreads(); i++)
     changes[i]=0;
+
   if ((method == ConvolveMorphology) && (kernel->width == 1))
     {
       register ssize_t
@@ -2701,14 +2702,11 @@
               *restrict pixels;
 
             register ssize_t
-              u;
+              v;
 
             size_t
               count;
 
-            ssize_t
-              v;
-
             channel=GetPixelChannelChannel(image,i);
             traits=GetPixelChannelTraits(image,channel);
             morphology_traits=GetPixelChannelTraits(morphology_image,channel);
@@ -2721,7 +2719,7 @@
                 SetPixelChannel(morphology_image,channel,p[center+i],q);
                 continue;
               }
-            k=(&kernel->values[kernel->width*kernel->height-1]);
+            k=(&kernel->values[kernel->height-1]);
             pixels=p;
             pixel=bias;
             gamma=0.0;
@@ -2729,39 +2727,33 @@
             if ((morphology_traits & BlendPixelTrait) == 0)
               for (v=0; v < (ssize_t) kernel->height; v++)
               {
-                for (u=0; u < (ssize_t) kernel->width; u++)
-                {
-                  if (!IsNaN(*k))
-                    {
-                      pixel+=(*k)*pixels[i];
-                      gamma+=(*k);
-                      count++;
-                    }
-                  k--;
-                  pixels+=GetPixelChannels(image);
-                }
+                if (!IsNaN(*k))
+                  {
+                    pixel+=(*k)*pixels[i];
+                    gamma+=(*k);
+                    count++;
+                  }
+                k--;
+                pixels+=GetPixelChannels(image);
               }
             else
               for (v=0; v < (ssize_t) kernel->height; v++)
               {
-                for (u=0; u < (ssize_t) kernel->width; u++)
-                {
-                  if (!IsNaN(*k))
-                    {
-                      alpha=(double) (QuantumScale*GetPixelAlpha(image,pixels));
-                      pixel+=alpha*(*k)*pixels[i];
-                      gamma+=alpha*(*k);
-                      count++;
-                    }
-                  k--;
-                  pixels+=GetPixelChannels(image);
-                }
+                if (!IsNaN(*k))
+                  {
+                    alpha=(double) (QuantumScale*GetPixelAlpha(image,pixels));
+                    pixel+=alpha*(*k)*pixels[i];
+                    gamma+=alpha*(*k);
+                    count++;
+                  }
+                k--;
+                pixels+=GetPixelChannels(image);
               }
             if (fabs(pixel-p[center+i]) > MagickEpsilon)
               changes[id]++;
             gamma=PerceptibleReciprocal(gamma);
             if (count != 0)
-              gamma*=(double) kernel->height*kernel->width/count;
+              gamma*=(double) kernel->height/count;
             SetPixelChannel(morphology_image,channel,ClampToQuantum(gamma*
               pixel),q);
           }
diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c
index 4790c7b..6d481f0 100644
--- a/MagickWand/mogrify.c
+++ b/MagickWand/mogrify.c
@@ -395,7 +395,9 @@
   register char
     *p;
 
-  if (extent < 2)
+  if ((extent <= 1) || (offset < 0) || (offset >= (MagickOffsetType) extent))
+    return(MagickTrue);
+  if ((offset != (MagickOffsetType) (extent-1)) && ((offset % 50) != 0))
     return(MagickTrue);
   (void) CopyMagickMemory(tag,text,MagickPathExtent);
   p=strrchr(tag,'/');
diff --git a/MagickWand/operation.c b/MagickWand/operation.c
index 1e2bcaa..14a835f 100644
--- a/MagickWand/operation.c
+++ b/MagickWand/operation.c
@@ -101,7 +101,9 @@
   register char
     *p;
 
-  if (extent < 2)
+  if ((extent <= 1) || (offset < 0) || (offset >= (MagickOffsetType) extent))
+    return(MagickTrue);
+  if ((offset != (MagickOffsetType) (extent-1)) && ((offset % 50) != 0))
     return(MagickTrue);
   (void) CopyMagickMemory(tag,text,MagickPathExtent);
   p=strrchr(tag,'/');
