diff --git a/ANNOUNCE b/ANNOUNCE
index 2a70932..3d44665 100644
--- a/ANNOUNCE
+++ b/ANNOUNCE
@@ -1,5 +1,5 @@
 
-Libpng 1.5.4beta05 - June 16, 2011
+Libpng 1.5.4beta04 - June 16, 2011
 
 This is not intended to be a public release.  It will be replaced
 within a few weeks by a public version or by another test version.
@@ -9,20 +9,20 @@
 Source files with LF line endings (for Unix/Linux) and with a
 "configure" script
 
-   1.5.4beta05.tar.xz (LZMA-compressed, recommended)
-   1.5.4beta05.tar.gz
-   1.5.4beta05.tar.bz2
+   1.5.4beta04.tar.xz (LZMA-compressed, recommended)
+   1.5.4beta04.tar.gz
+   1.5.4beta04.tar.bz2
 
 Source files with CRLF line endings (for Windows), without the
 "configure" script
 
-   lp154b05.7z  (LZMA-compressed, recommended)
-   lp154b05.zip
+   lp154b04.7z  (LZMA-compressed, recommended)
+   lp154b04.zip
 
 Other information:
 
-   1.5.4beta05-README.txt
-   1.5.4beta05-LICENSE.txt
+   1.5.4beta04-README.txt
+   1.5.4beta04-LICENSE.txt
 
 Changes since the last public release (1.5.2):
 
@@ -220,8 +220,6 @@
     not enabled, png_set_strip_16() and png_do_scale_16_to_8() aren't built.
   Revised contrib/visupng, gregbook, and pngminim to demonstrate chop_16_to_8
 
-Version 1.5.4beta05 [June 16, 2011]
-
 Send comments/corrections/commendations to png-mng-implement at lists.sf.net:
 (subscription required; visit
 https://lists.sourceforge.net/lists/listinfo/png-mng-implement
diff --git a/CHANGES b/CHANGES
index 603ae79..5771845 100644
--- a/CHANGES
+++ b/CHANGES
@@ -3483,8 +3483,6 @@
     not enabled, png_set_strip_16() and png_do_scale_16_to_8() aren't built.
   Revised contrib/visupng, gregbook, and pngminim to demonstrate chop_16_to_8
 
-Version 1.5.4beta05 [June 16, 2011]
-
 Send comments/corrections/commendations to png-mng-implement at lists.sf.net
 (subscription required; visit
 https://lists.sourceforge.net/lists/listinfo/png-mng-implement
diff --git a/example.c b/example.c
index 1422134..74cc3bc 100644
--- a/example.c
+++ b/example.c
@@ -192,9 +192,9 @@
     * low byte.
     */
 #ifdef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
-    png_set_strip_16(png_ptr);
+    png_set_scale_16(png_ptr);
 #else
-   png_set_chop_16(png_ptr);
+   png_set_strip_16(png_ptr);
 #endif
 
    /* Strip alpha bytes from the input data without combining with the
diff --git a/libpng-manual.txt b/libpng-manual.txt
index b28c835..6e131ed 100644
--- a/libpng-manual.txt
+++ b/libpng-manual.txt
@@ -1,6 +1,6 @@
 libpng-manual.txt - A description on how to use and modify libpng
 
- libpng version 1.5.4beta05 - June 18, 2011
+ libpng version 1.5.4beta04 - June 16, 2011
  Updated and distributed by Glenn Randers-Pehrson
  <glennrp at users.sourceforge.net>
  Copyright (c) 1998-2011 Glenn Randers-Pehrson
@@ -11,7 +11,7 @@
 
  Based on:
 
- libpng versions 0.97, January 1998, through 1.5.4beta05 - June 18, 2011
+ libpng versions 0.97, January 1998, through 1.5.4beta04 - June 16, 2011
  Updated and distributed by Glenn Randers-Pehrson
  Copyright (c) 1998-2011 Glenn Randers-Pehrson
 
@@ -847,8 +847,8 @@
 settings and API calls required are:
 
 8-bit values:
-   PNG_TRANSFORM_SCALE_16 | PNG_EXPAND
-   png_set_expand(png_ptr); png_set_scale_16(png_ptr);
+   PNG_TRANSFORM_STRIP_16 | PNG_EXPAND
+   png_set_expand(png_ptr); png_set_strip_16(png_ptr);
 
    If you must get exactly the same inaccurate results
    produced by default in versions prior to libpng-1.5.4,
@@ -878,7 +878,7 @@
 you want to do are limited to the following set:
 
     PNG_TRANSFORM_IDENTITY      No transformation
-    PNG_TRANSFORM_SCALE_16      Strip 16-bit samples to
+    PNG_TRANSFORM_STRIP_16      Strip 16-bit samples to
                                 8-bit
     PNG_TRANSFORM_STRIP_ALPHA   Discard the alpha channel
     PNG_TRANSFORM_PACKING       Expand 1, 2 and 4-bit
@@ -1404,12 +1404,12 @@
 in RGB RGB RGB format unless png_set_filler() or png_set_add_alpha()
 is called to insert filler bytes, either before or after each RGB triplet.
 16-bit RGB data will be returned RRGGBB RRGGBB, with the most significant
-byte of the color value first, unless png_set_scale_16() is called to
+byte of the color value first, unless png_set_strip_16() is called to
 transform it to regular RGB RGB triplets, or png_set_filler() or
 png_set_add alpha() is called to insert filler bytes, either before or
 after each RRGGBB triplet.  Similarly, 8-bit or 16-bit grayscale data can
 be modified with
-png_set_filler(), png_set_add_alpha(), or png_set_scale_16().
+png_set_filler(), png_set_add_alpha(), or png_set_strip_16().
 
 The following code transforms grayscale images of less than 8 to 8 bits,
 changes paletted images to RGB, and adds a full alpha channel if there is
@@ -1446,7 +1446,7 @@
 8 bits per channel, this will strip the pixels down to 8-bit.
 
     if (bit_depth == 16)
-       png_set_scale_16(png_ptr);
+       png_set_strip_16(png_ptr);
 
 If you need to process the alpha channel on the image separately from the image
 data (for example if you convert it to a bitmap mask) it is possible to have
@@ -4109,7 +4109,7 @@
 longer (see Clause 13.12 of the PNG specification).  If you must
 have exactly the same inaccurate results that libpng produced by
 default previously, then you can use the png_set_chop_16() API instead
-of png_set_scale_16().
+of png_set_strip_16().
 
 Prior to libpng-1.5.4, the png_set_user_limits() function could only be
 used to reduce the width and height limits from the value of
@@ -4425,13 +4425,13 @@
 
 XIV. Y2K Compliance in libpng
 
-June 18, 2011
+June 16, 2011
 
 Since the PNG Development group is an ad-hoc body, we can't make
 an official declaration.
 
 This is your unofficial assurance that libpng from version 0.71 and
-upward through 1.5.4beta05 are Y2K compliant.  It is my belief that earlier
+upward through 1.5.4beta04 are Y2K compliant.  It is my belief that earlier
 versions were also Y2K compliant.
 
 Libpng only has three year fields.  One is a 2-byte unsigned integer that
diff --git a/libpng.3 b/libpng.3
index bf6cfbf..fcf40e0 100644
--- a/libpng.3
+++ b/libpng.3
@@ -1,6 +1,6 @@
-.TH LIBPNG 3 "June 18, 2011"
+.TH LIBPNG 3 "June 16, 2011"
 .SH NAME
-libpng \- Portable Network Graphics (PNG) Reference Library 1.5.4beta05
+libpng \- Portable Network Graphics (PNG) Reference Library 1.5.4beta04
 .SH SYNOPSIS
 \fI\fB
 
@@ -955,7 +955,7 @@
 .SH LIBPNG.TXT
 libpng-manual.txt - A description on how to use and modify libpng
 
- libpng version 1.5.4beta05 - June 18, 2011
+ libpng version 1.5.4beta04 - June 16, 2011
  Updated and distributed by Glenn Randers-Pehrson
  <glennrp at users.sourceforge.net>
  Copyright (c) 1998-2011 Glenn Randers-Pehrson
@@ -966,7 +966,7 @@
 
  Based on:
 
- libpng versions 0.97, January 1998, through 1.5.4beta05 - June 18, 2011
+ libpng versions 0.97, January 1998, through 1.5.4beta04 - June 16, 2011
  Updated and distributed by Glenn Randers-Pehrson
  Copyright (c) 1998-2011 Glenn Randers-Pehrson
 
@@ -1802,8 +1802,8 @@
 settings and API calls required are:
 
 8-bit values:
-   PNG_TRANSFORM_SCALE_16 | PNG_EXPAND
-   png_set_expand(png_ptr); png_set_scale_16(png_ptr);
+   PNG_TRANSFORM_STRIP_16 | PNG_EXPAND
+   png_set_expand(png_ptr); png_set_strip_16(png_ptr);
 
    If you must get exactly the same inaccurate results
    produced by default in versions prior to libpng-1.5.4,
@@ -1833,7 +1833,7 @@
 you want to do are limited to the following set:
 
     PNG_TRANSFORM_IDENTITY      No transformation
-    PNG_TRANSFORM_SCALE_16      Strip 16-bit samples to
+    PNG_TRANSFORM_STRIP_16      Strip 16-bit samples to
                                 8-bit
     PNG_TRANSFORM_STRIP_ALPHA   Discard the alpha channel
     PNG_TRANSFORM_PACKING       Expand 1, 2 and 4-bit
@@ -2359,12 +2359,12 @@
 in RGB RGB RGB format unless png_set_filler() or png_set_add_alpha()
 is called to insert filler bytes, either before or after each RGB triplet.
 16-bit RGB data will be returned RRGGBB RRGGBB, with the most significant
-byte of the color value first, unless png_set_scale_16() is called to
+byte of the color value first, unless png_set_strip_16() is called to
 transform it to regular RGB RGB triplets, or png_set_filler() or
 png_set_add alpha() is called to insert filler bytes, either before or
 after each RRGGBB triplet.  Similarly, 8-bit or 16-bit grayscale data can
 be modified with
-png_set_filler(), png_set_add_alpha(), or png_set_scale_16().
+png_set_filler(), png_set_add_alpha(), or png_set_strip_16().
 
 The following code transforms grayscale images of less than 8 to 8 bits,
 changes paletted images to RGB, and adds a full alpha channel if there is
@@ -2401,7 +2401,7 @@
 8 bits per channel, this will strip the pixels down to 8-bit.
 
     if (bit_depth == 16)
-       png_set_scale_16(png_ptr);
+       png_set_strip_16(png_ptr);
 
 If you need to process the alpha channel on the image separately from the image
 data (for example if you convert it to a bitmap mask) it is possible to have
@@ -5064,7 +5064,7 @@
 longer (see Clause 13.12 of the PNG specification).  If you must
 have exactly the same inaccurate results that libpng produced by
 default previously, then you can use the png_set_chop_16() API instead
-of png_set_scale_16().
+of png_set_strip_16().
 
 Prior to libpng-1.5.4, the png_set_user_limits() function could only be
 used to reduce the width and height limits from the value of
@@ -5380,13 +5380,13 @@
 
 .SH XIV. Y2K Compliance in libpng
 
-June 18, 2011
+June 16, 2011
 
 Since the PNG Development group is an ad-hoc body, we can't make
 an official declaration.
 
 This is your unofficial assurance that libpng from version 0.71 and
-upward through 1.5.4beta05 are Y2K compliant.  It is my belief that earlier
+upward through 1.5.4beta04 are Y2K compliant.  It is my belief that earlier
 versions were also Y2K compliant.
 
 Libpng only has three year fields.  One is a 2-byte unsigned integer that
@@ -5579,7 +5579,7 @@
  1.5.3rc01-02        15    10503  15.so.15.3[.0]
  1.5.3beta11         15    10503  15.so.15.3[.0]
  1.5.3 [omitted]
- 1.5.4beta01-05      15    10504  15.so.15.4[.0]
+ 1.5.4beta01-03      15    10504  15.so.15.4[.0]
 
 Henceforth the source version will match the shared-library minor
 and patch numbers; the shared-library major version number will be
@@ -5636,7 +5636,7 @@
 
 Thanks to Frank J. T. Wojcik for helping with the documentation.
 
-Libpng version 1.5.4beta05 - June 18, 2011:
+Libpng version 1.5.4beta04 - June 16, 2011:
 Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc.
 Currently maintained by Glenn Randers-Pehrson (glennrp at users.sourceforge.net).
 
@@ -5659,7 +5659,7 @@
 
 This code is released under the libpng license.
 
-libpng versions 1.2.6, August 15, 2004, through 1.5.4beta05, June 18, 2011, are
+libpng versions 1.2.6, August 15, 2004, through 1.5.4beta04, June 16, 2011, are
 Copyright (c) 2004,2006-2007 Glenn Randers-Pehrson, and are
 distributed according to the same disclaimer and license as libpng-1.2.5
 with the following individual added to the list of Contributing Authors
@@ -5758,7 +5758,7 @@
 
 Glenn Randers-Pehrson
 glennrp at users.sourceforge.net
-June 18, 2011
+June 16, 2011
 
 .\" end of man page
 
diff --git a/png.c b/png.c
index 944cf22..ca9dfd7 100644
--- a/png.c
+++ b/png.c
@@ -617,13 +617,13 @@
 #else
 #  ifdef __STDC__
    return PNG_STRING_NEWLINE \
-     "libpng version 1.5.4beta05 - June 16, 2011" PNG_STRING_NEWLINE \
+     "libpng version 1.5.4beta05 - June 18, 2011" PNG_STRING_NEWLINE \
      "Copyright (c) 1998-2011 Glenn Randers-Pehrson" PNG_STRING_NEWLINE \
      "Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \
      "Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \
      PNG_STRING_NEWLINE;
 #  else
-      return "libpng version 1.5.4beta05 - June 16, 2011\
+      return "libpng version 1.5.4beta05 - June 18, 2011\
       Copyright (c) 1998-2011 Glenn Randers-Pehrson\
       Copyright (c) 1996-1997 Andreas Dilger\
       Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.";
@@ -2369,7 +2369,7 @@
      else
         shift = 0; /* keep all 16 bits */
 
-     if (png_ptr->transformations & (PNG_16_TO_8 | PNG_CHOP_16_TO_8))
+     if (png_ptr->transformations & (PNG_16_TO_8 | PNG_SCALE_16_TO_8))
      {
         /* PNG_MAX_GAMMA_8 is the number of bits to keep - effectively
          * the significant bits in the *input* when the output will
@@ -2390,7 +2390,7 @@
       * 16-bit output because the 8-bit table assumes the result will be reduced
       * to 8 bits.
       */
-     if (png_ptr->transformations & (PNG_16_TO_8 | PNG_CHOP_16_TO_8))
+     if (png_ptr->transformations & (PNG_16_TO_8 | PNG_SCALE_16_TO_8))
 #endif
          png_build_16to8_table(png_ptr, &png_ptr->gamma_16_table, shift,
          png_ptr->screen_gamma > 0 ? png_product2(png_ptr->gamma,
diff --git a/png.h b/png.h
index 82cb4bb..64ce1ae 100644
--- a/png.h
+++ b/png.h
@@ -902,7 +902,7 @@
 #define PNG_TRANSFORM_GRAY_TO_RGB   0x2000      /* read only */
 /* Added to libpng-1.5.4 */
 #define PNG_TRANSFORM_EXPAND_16     0x4000      /* read only */
-#define PNG_TRANSFORM_CHOP_16       0x8000      /* read only */
+#define PNG_TRANSFORM_SCALE_16      0x8000      /* read only */
 
 /* Flags for MNG supported features */
 #define PNG_FLAG_MNG_EMPTY_PLTE     0x01
@@ -1428,9 +1428,10 @@
 /* Scale a 16-bit depth file down to 8-bit, accurately. */
 PNG_EXPORT(48, void, png_set_scale_16, (png_structp png_ptr));
 #  endif
-#  ifdef PNG_READ_CHOP_16_TO_8_SUPPORTED
+
+#  ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
 /* Strip the second byte of information from a 16-bit depth file. */
-PNG_EXPORT(229, void, png_set_chop_16, (png_structp png_ptr));
+PNG_EXPORT(229, void, png_set_strip_16, (png_structp png_ptr));
 #  endif
 #endif
 
diff --git a/pngpriv.h b/pngpriv.h
index 4c34e8c..1d1903a 100644
--- a/pngpriv.h
+++ b/pngpriv.h
@@ -298,7 +298,7 @@
 #define PNG_ENCODE_ALPHA      0x800000L  /* Added to libpng-1.5.4 */
 #define PNG_ADD_ALPHA         0x1000000L  /* Added to libpng-1.2.7 */
 #define PNG_EXPAND_tRNS       0x2000000L  /* Added to libpng-1.2.9 */
-#define PNG_CHOP_16_TO_8      0x4000000L
+#define PNG_SCALE_16_TO_8     0x4000000L
                        /*   0x8000000L  unused */
                        /*  0x10000000L  unused */
                        /*  0x20000000L  unused */
@@ -824,7 +824,7 @@
     png_bytep row));
 #endif
 
-#ifdef PNG_READ_CHOP_16_TO_8_SUPPORTED
+#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
 PNG_EXTERN void png_do_chop PNGARG((png_row_infop row_info,
     png_bytep row));
 #endif
diff --git a/pngread.c b/pngread.c
index 06b5d22..e200705 100644
--- a/pngread.c
+++ b/pngread.c
@@ -1290,16 +1290,16 @@
    /* Tell libpng to strip 16-bit/color files down to 8 bits per color.
     */
 #  ifdef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
-   if (transforms & PNG_TRANSFORM_STRIP_16)
+   if (transforms & PNG_TRANSFORM_SCALE_16)
       png_set_scale_16(png_ptr);
 #  endif
-#  ifdef PNG_READ_CHOP_16_TO_8_SUPPORTED
+#  ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
   /* Added at libpng-1.5.4. "strip_16" produces the same result that it
    * did in earlier versions, while "scale_16" is now more accurate.
    */
    else
-     if (transforms & PNG_TRANSFORM_CHOP_16)
-        png_set_chop_16(png_ptr);
+     if (transforms & PNG_TRANSFORM_STRIP_16)
+        png_set_strip_16(png_ptr);
 #endif
 #endif
 
diff --git a/pngrtran.c b/pngrtran.c
index 3a16757..6afb23c 100644
--- a/pngrtran.c
+++ b/pngrtran.c
@@ -134,7 +134,7 @@
 
 #ifdef PNG_READ_16_TO_8_SUPPORTED
 /* Scale 16-bit depth files to 8-bit depth */
-#  ifdef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
+#  ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
 void PNGAPI
 png_set_scale_16(png_structp png_ptr)
 {
@@ -143,26 +143,26 @@
    if (png_ptr == NULL)
       return;
 
-   png_ptr->transformations |= PNG_16_TO_8;
-#    ifdef PNG_READ_CHOP_16_TO_8_SUPPORTED
-   png_ptr->transformations &= ~PNG_CHOP_16_TO_8;
+   png_ptr->transformations |= PNG_SCALE_16_TO_8;
+#    ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
+   png_ptr->transformations &= ~PNG_16_TO_8;
 #    endif
 }
 #  endif
 
-#  ifdef PNG_READ_CHOP_16_TO_8_SUPPORTED
+#  ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
 /* Chop 16-bit depth files to 8-bit depth */
 void PNGAPI
-png_set_chop_16(png_structp png_ptr)
+png_set_strip_16(png_structp png_ptr)
 {
-   png_debug(1, "in png_set_chop_16");
+   png_debug(1, "in png_set_strip_16");
 
    if (png_ptr == NULL)
       return;
 
-   png_ptr->transformations |= PNG_CHOP_16_TO_8;
-#    ifdef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
-   png_ptr->transformations &= ~PNG_16_TO_8;
+   png_ptr->transformations |= PNG_16_TO_8;
+#    ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
+   png_ptr->transformations &= ~PNG_SCALE_16_TO_8;
 #    endif
 }
 #  endif
@@ -1334,7 +1334,7 @@
     *  6) PNG_GAMMA
     *  7) PNG_STRIP_ALPHA (if compose)
     *  8) PNG_ENCODE_ALPHA
-    *  9) PNG_16_TO_8 or PNG_CHOP_16_TO_8 (strip16/chop16)
+    *  9) PNG_16_TO_8 or PNG_SCALE_16_TO_8 (strip16/scale16)
     * 10) PNG_QUANTIZE (converts to palette)
     * 11) PNG_EXPAND_16
     * 12) PNG_GRAY_TO_RGB iff PNG_BACKGROUND_IS_GRAY
@@ -1874,14 +1874,14 @@
 
 #ifdef PNG_READ_16_TO_8_SUPPORTED
 #ifdef PNG_READ_16BIT_SUPPORTED
-   if ((png_ptr->transformations & (PNG_16_TO_8 | PNG_CHOP_16_TO_8)) &&
+   if ((png_ptr->transformations & (PNG_16_TO_8 | PNG_SCALE_16_TO_8)) &&
        (info_ptr->bit_depth == 16))
       info_ptr->bit_depth = 8;
 #else
    /* Force chopping 16-bit input down to 8 */
    if (info_ptr->bit_depth == 16)
    {
-      if (!(png_ptr->transformations & PNG_CHOP_16_TO_8))
+      if (!(png_ptr->transformations & PNG_SCALE_16_TO_8))
         png_ptr->transformations |=PNG_16_TO_8;
       info_ptr->bit_depth = 8;
    }
diff --git a/pngvalid.c b/pngvalid.c
index d491a5e..2cbb542 100644
--- a/pngvalid.c
+++ b/pngvalid.c
@@ -5240,9 +5240,7 @@
 #define PT ITSTRUCT(expand_16)
 #endif /* PNG_READ_EXPAND_16_SUPPORTED */
 
-#ifdef PNG_READ_16_TO_8_SUPPORTED
-#  if !defined(PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED) && \
-   !defined(PNG_READ_CHOP_16_TO_8_SUPPORTED) /* the default before 1.5.4 */
+#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED  /* API added in 1.5.4 */
 /* png_set_scale_16 */
 static void
 image_transform_png_set_scale_16_set(PNG_CONST image_transform *this,
@@ -5263,21 +5261,6 @@
       if (that->green_sBIT > 8) that->green_sBIT = 8;
       if (that->blue_sBIT > 8) that->blue_sBIT = 8;
       if (that->alpha_sBIT > 8) that->alpha_sBIT = 8;
-
-#     ifndef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
-         /* The strip 16 algorithm drops the low 8 bits rather than calculating
-          * 1/257, so we need to adjust the permitted errors appropriately:
-          * Notice that this is only relevant prior to the addition of the
-          * png_set_chop_16 API in 1.5.4 (but 1.5.4+ always defines the above!)
-          */
-         {
-            PNG_CONST double d = (255-128.5)/65535;
-            that->rede += d;
-            that->greene += d;
-            that->bluee += d;
-            that->alphae += d;
-         }
-#     endif
    }
 
    this->next->mod(this->next, that, pp, display);
@@ -5300,18 +5283,18 @@
 #define PT ITSTRUCT(scale_16)
 #endif
 
-#ifdef PNG_READ_CHOP_16_TO_8_SUPPORTED  /* API added in 1.5.4 */
-/* png_set_chop_16 */
+#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED /* the default before 1.5.4 */
+/* png_set_strip_16 */
 static void
-image_transform_png_set_chop_16_set(PNG_CONST image_transform *this,
+image_transform_png_set_strip_16(PNG_CONST image_transform *this,
     transform_display *that, png_structp pp, png_infop pi)
 {
-   png_set_chop_16(pp);
+   png_set_strip_16(pp);
    this->next->set(this->next, that, pp, pi);
 }
 
 static void
-image_transform_png_set_chop_16_mod(PNG_CONST image_transform *this,
+image_transform_png_set_strip_16(PNG_CONST image_transform *this,
     image_pixel *that, png_structp pp, PNG_CONST transform_display *display)
 {
    if (that->bit_depth == 16)
@@ -5322,23 +5305,27 @@
       if (that->blue_sBIT > 8) that->blue_sBIT = 8;
       if (that->alpha_sBIT > 8) that->alpha_sBIT = 8;
 
-      /* From 1.5.4 there is a separate API to do the low byte drop; see the
-       * comments above for why this requires the following:
-       */
-      {
-         PNG_CONST double d = (255-128.5)/65535;
-         that->rede += d;
-         that->greene += d;
-         that->bluee += d;
-         that->alphae += d;
-      }
+#     ifndef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
+         /* The strip 16 algorithm drops the low 8 bits rather than calculating
+          * 1/257, so we need to adjust the permitted errors appropriately:
+          * Notice that this is only relevant prior to the addition of the
+          * png_set_scale_16 API in 1.5.4 (but 1.5.4+ always defines the above!)
+          */
+         {
+            PNG_CONST double d = (255-128.5)/65535;
+            that->rede += d;
+            that->greene += d;
+            that->bluee += d;
+            that->alphae += d;
+         }
+#     endif
    }
 
    this->next->mod(this->next, that, pp, display);
 }
 
 static int
-image_transform_png_set_chop_16_add(image_transform *this,
+image_transform_png_set_strip_16(image_transform *this,
     PNG_CONST image_transform **that, png_byte colour_type, png_byte bit_depth)
 {
    UNUSED(colour_type)
@@ -5349,11 +5336,10 @@
    return bit_depth > 8;
 }
 
-IT(chop_16);
+IT(strip_16);
 #undef PT
-#define PT ITSTRUCT(chop_16)
-#endif /* PNG_READ_CHOP_16_TO_8_SUPPORTED, from libpng 1.5.4 */
-#endif /* PNG_READ_16_TO_8_SUPPORTED */
+#define PT ITSTRUCT(strip_16)
+#endif /* PNG_READ_STRIP_16_TO_8_SUPPORTED, from libpng 1.5.4 */
 
 #ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
 /* png_set_strip_alpha */
