diff --git a/ANNOUNCE b/ANNOUNCE
index 9f9003e..5f61992 100644
--- a/ANNOUNCE
+++ b/ANNOUNCE
@@ -499,7 +499,7 @@
     checking.  Several errors that caused rejection of the profile are now
     handled with a warning in such a way that the invalid profiles will be
     read by default in release (but not pre-RC) builds but will not be
-    written by default.  The easy part of handling a cHRM chunk is written,
+    written by default.  The easy part of handling the cHRM chunk is written,
     where the ICC profile contains the required data.  The more difficult
     part plus guessing a gAMA value requires code to pass selected RGB values
     through the profile.
diff --git a/CHANGES b/CHANGES
index d673c1a..05f9306 100644
--- a/CHANGES
+++ b/CHANGES
@@ -4251,7 +4251,7 @@
     checking.  Several errors that caused rejection of the profile are now
     handled with a warning in such a way that the invalid profiles will be
     read by default in release (but not pre-RC) builds but will not be
-    written by default.  The easy part of handling a cHRM chunk is written,
+    written by default.  The easy part of handling the cHRM chunk is written,
     where the ICC profile contains the required data.  The more difficult
     part plus guessing a gAMA value requires code to pass selected RGB values
     through the profile.
diff --git a/png.c b/png.c
index 16739a4..c9c425b 100644
--- a/png.c
+++ b/png.c
@@ -1995,10 +1995,10 @@
       return profile_error(png_ptr, colorspace, name, temp,
          "invalid signature");
 
-   /* Currently the PCS illuminant/adopted white point are required to be D50,
+   /* Currently the PCS illuminant/adapted white point are required to be D50,
     * however the profile contains a record of the illuminant so perhaps ICC
     * expects to be able to change this in the future (despite the rationale in
-    * the introduction for using a fixed PCS adopted white.)  Consequently the
+    * the introduction for using a fixed PCS adapted white.)  Consequently the
     * following is just a warning.
     */
    if (memcmp(profile+68, D50_nCIEXYZ, 12) != 0)
@@ -2371,7 +2371,7 @@
             temp == 0x73706163 /* 'spac' */) &&
             memcmp(profile+68, tag+8, 12) != 0)
             (void)profile_error(png_ptr, NULL, name, temp,
-               "media white point differs from image adopted white");
+               "media white point differs from image adapted white");
 
          (*adapted_white_point)[0] = png_get_int_32(tag+ 8);
          (*adapted_white_point)[1] = png_get_int_32(tag+12);
@@ -2437,10 +2437,10 @@
     * colorant values.
     *
     * All of the methods for determining the cHRM values depend on
-    * reversing the adaptatation to the PCS adopted white (D50); this is
+    * reversing the adaptatation to the PCS adapted white (D50); this is
     * because in all cases one or other PCS value has to be used.
     *
-    * This routine determines if 'chad' tag is present (if not the adopted white
+    * This routine determines if 'chad' tag is present (if not the adapted white
     * of the scene is D50 and no adaptation was performed) and returns the
     * inverted matrix.
     */
@@ -2515,7 +2515,7 @@
     * the PCS white, however the white point, which tells us the relative
     * intensity of the colorants, is not given.  We can get the white point from
     * the mediaWhitePointTag value, which should be present in all profiles,
-    * however this is adapted to the PCS illuminated/adopted white, so must be
+    * however this is adapted to the PCS illuminated/adapted white, so must be
     * unadapted.
     */
 {
@@ -2593,7 +2593,7 @@
                {
                   /* For the perfect reflector 'Y' shall be normalized
                    * to 1,0 (see ICC 2010 4.14, XYZNumber), but this is
-                   * the media white point (not the adopted white)
+                   * the media white point (not the adapted white)
                    * adapted to the PCS illuminant, so Y might be some
                    * other value, this sanity check is mainly to avoid
                    * integer overflow.
@@ -2771,7 +2771,7 @@
          png_XYZ cHRM_XYZ;
 
          /* Now we have colorant XYZ values in their unadapted form
-          * (i.e. implicitly with an adopted white of the media).
+          * (i.e. implicitly with an adapted white of the media).
           * This is what PNG uses for cHRM, but they need to be
           * converted to the libpng structure.
           *
@@ -3028,8 +3028,8 @@
 
          case 0x63686164: /* 'chad' - chromaticAdaptationTag */
             /* The tag must be a 9 element array of s15Fixed16ArrayType, the tag
-             * is optional, if absent it indicates that the original adopted
-             * white was the same as the PCS adopted white - D50.
+             * is optional, if absent it indicates that the original adapted
+             * white was the same as the PCS adapted white - D50.
              */
             if (tag_length != 44)
                (void)profile_error(png_ptr, NULL, name, tag_start,
diff --git a/pngstruct.h b/pngstruct.h
index a0a913b..b7c9ebd 100644
--- a/pngstruct.h
+++ b/pngstruct.h
@@ -147,11 +147,11 @@
    /* The profile description and copyright must be present in all valid ICC
     * profiles, however libpng does not use them so absence is just reported as
     * a warning.  The media white point should be present too, but if it isn't
-    * all we lose is the ability to know if it differs from the adopted white
+    * all we lose is the ability to know if it differs from the adapted white
     * (i.e. the information that the device maxima are actually colored;
     * a non-white substrate for a printer, or an uncorrected scan for example.)
-    * The chromaticAdaptationTag tells us that the adopted white of the original
-    * differs from the PCS adopted white (which is identical to the PCS
+    * The chromaticAdaptationTag tells us that the adapted white of the original
+    * differs from the PCS adapted white (which is identical to the PCS
     * illuminant and should always be D50).
     */
 #  define PNG_ICC_profileDescriptionTag  0x00000010U /* required */
