diff --git a/ChangeLog b/ChangeLog
index c26a46d..8bee844 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2010-09-26  6.6.4-7 Anthony Thyssen <A.Thyssen@griffith...>
+  * Fix Point filter for ResizeImage() caused by support limiting the
+    Box weighting function.
+
 2010-09-24  6.6.4-6 Nicolas Robidoux <nicolas.robidoux@gmail...>
   * Now that MagickPIL is a MagickRealType, some casts are unneeded.
 
diff --git a/magick/resize.c b/magick/resize.c
index 02b2b3f..180f438 100644
--- a/magick/resize.c
+++ b/magick/resize.c
@@ -177,15 +177,14 @@
   return((1.0-x)*cospix+(1.0/MagickPIL)*sinpix);
 }
 
-static MagickRealType Box(const MagickRealType x,
-  const ResizeFilter *resize_filter)
+static MagickRealType Box(const MagickRealType magick_unused(x),
+  const ResizeFilter *magick_unused(resize_filter))
 {
   /*
     Return a Box filter up to its support size.
+    DO NOT LIMIT results by support or resize point sampling will fil
   */
-  if ( x < resize_filter->support )
-    return(1.0);
-  return(0.0);
+  return(1.0);
 }
 
 static MagickRealType CubicBC(const MagickRealType x,
@@ -982,17 +981,16 @@
           x;
 
         /*
-          Reset the filter_type for specific compound filters so the
-          actual 'function' is returned, not the user selection.
-          Specifically this is needed for the Sinc and Cubic compound
-          filters.
+          Set the weighting function properly when the weighting
+          function may not exactly match the filter of the same name.
+          EG: a Point filter really uses a Box weighting function
+          with a different support than is typically used.
+
         */
-        if (resize_filter->filter == Sinc)
-          filter_type=SincFilter;
-        if (resize_filter->filter == SincFast)
-          filter_type=SincFastFilter;
-        if (resize_filter->filter == CubicBC)
-          filter_type=CubicFilter;
+        if (resize_filter->filter == Box)       filter_type=BoxFilter;
+        if (resize_filter->filter == Sinc)      filter_type=SincFilter;
+        if (resize_filter->filter == SincFast)  filter_type=SincFastFilter;
+        if (resize_filter->filter == CubicBC)   filter_type=CubicFilter;
         /*
           Report Filter Details.
         */
@@ -1001,14 +999,14 @@
         (void) fprintf(stdout,"# filter = %s\n",MagickOptionToMnemonic(
            MagickFilterOptions,filter_type));
         (void) fprintf(stdout,"# window = %s\n",MagickOptionToMnemonic(
-          MagickFilterOptions, window_type));
+           MagickFilterOptions, window_type));
         (void) fprintf(stdout,"# support = %.*g\n",GetMagickPrecision(),
-          (double) resize_filter->support);
+           (double) resize_filter->support);
         (void) fprintf(stdout,"# win-support = %.*g\n",GetMagickPrecision(),
-		       (double) resize_filter->window_support);
+           (double) resize_filter->window_support);
         (void) fprintf(stdout,"# blur = %.*g\n",GetMagickPrecision(),
            (double) resize_filter->blur);
-        (void) fprintf(stdout,"# blurred_support = %.*g\n",GetMagickPrecision(),
+       (void) fprintf(stdout,"# blurred_support = %.*g\n",GetMagickPrecision(),
            (double) support);
         (void) fprintf(stdout,"# B,C = %.*g,%.*g\n",GetMagickPrecision(),
            (double) B,GetMagickPrecision(),(double) C);
