diff --git a/magick/effect.c b/magick/effect.c
index fafd7a0..fccd214 100644
--- a/magick/effect.c
+++ b/magick/effect.c
@@ -41,7 +41,7 @@
   Include declarations.
 */
 #include "magick/studio.h"
-#include "magick/property.h"
+#include "magick/accelerate.h"
 #include "magick/blob.h"
 #include "magick/cache-view.h"
 #include "magick/color.h"
@@ -2165,9 +2165,6 @@
     *filter_view,
     *image_view;
 
-  double
-    *normal_kernel;
-
   Image
     *filter_image;
 
@@ -2181,12 +2178,6 @@
   MagickPixelPacket
     bias;
 
-  MagickRealType
-    gamma;
-
-  register long
-    i;
-
   /*
     Initialize filter image attributes.
   */
@@ -2238,22 +2229,9 @@
       }
       message=DestroyString(message);
     }
-  /*
-    Normalize kernel.
-  */
-  normal_kernel=(double *) AcquireQuantumMemory(kernel->width*kernel->height,
-    sizeof(*normal_kernel));
-  if (normal_kernel == (double *) NULL)
-    {
-      filter_image=DestroyImage(filter_image);
-      ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
-    }
-  gamma=0.0;
-  for (i=0; i < (long) (kernel->width*kernel->height); i++)
-    gamma+=kernel->values[i];
-  gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
-  for (i=0; i < (long) (kernel->width*kernel->height); i++)
-    normal_kernel[i]=gamma*kernel->values[i];
+  status=AccelerateConvolveImage(image,kernel,filter_image,exception);
+  if (status == MagickTrue)
+    return(filter_image);
   /*
     Filter image.
   */
@@ -2318,7 +2296,7 @@
         u;
 
       pixel=bias;
-      k=normal_kernel;
+      k=kernel->values;
       kernel_pixels=p;
       if (((channel & OpacityChannel) == 0) || (image->matte == MagickFalse))
         {
@@ -2341,7 +2319,7 @@
             SetBluePixelComponent(q,ClampBluePixelComponent(&pixel));
           if ((channel & OpacityChannel) != 0)
             {
-              k=normal_kernel;
+              k=kernel->values;
               kernel_pixels=p;
               for (v=0; v < (long) kernel->width; v++)
               {
@@ -2360,7 +2338,7 @@
               register const IndexPacket
                 *restrict kernel_indexes;
 
-              k=normal_kernel;
+              k=kernel->values;
               kernel_indexes=indexes;
               for (v=0; v < (long) kernel->width; v++)
               {
@@ -2404,7 +2382,7 @@
             q->blue=ClampToQuantum(gamma*GetBluePixelComponent(&pixel));
           if ((channel & OpacityChannel) != 0)
             {
-              k=normal_kernel;
+              k=kernel->values;
               kernel_pixels=p;
               for (v=0; v < (long) kernel->width; v++)
               {
@@ -2423,7 +2401,7 @@
               register const IndexPacket
                 *restrict kernel_indexes;
 
-              k=normal_kernel;
+              k=kernel->values;
               kernel_pixels=p;
               kernel_indexes=indexes;
               for (v=0; v < (long) kernel->width; v++)
@@ -2464,7 +2442,6 @@
   filter_image->type=image->type;
   filter_view=DestroyCacheView(filter_view);
   image_view=DestroyCacheView(image_view);
-  normal_kernel=(double *) RelinquishMagickMemory(normal_kernel);
   if (status == MagickFalse)
     filter_image=DestroyImage(filter_image);
   return(filter_image);