diff --git a/PIL/JpegImagePlugin.py b/PIL/JpegImagePlugin.py
--- a/PIL/JpegImagePlugin.py
+++ b/PIL/JpegImagePlugin.py
@@ -682,13 +682,16 @@ def validate_qtables(qtables):
                       o8(len(markers)) + marker)
             i += 1
 
+    # "progressive" is the official name, but older documentation
+    # says "progression"
+    # FIXME: issue a warning if the wrong form is used (post-1.1.7)
+    progressive = info.get("progressive", False) or\
+                  info.get("progression", False)
+
     # get keyword arguments
     im.encoderconfig = (
         quality,
-        # "progressive" is the official name, but older documentation
-        # says "progression"
-        # FIXME: issue a warning if the wrong form is used (post-1.1.7)
-        "progressive" in info or "progression" in info,
+        progressive,
         info.get("smooth", 0),
         "optimize" in info,
         info.get("streamtype", 0),
@@ -704,7 +707,7 @@ def validate_qtables(qtables):
     # channels*size, this is a value that's been used in a django patch.
     # https://github.com/matthewwithanm/django-imagekit/issues/50
     bufsize = 0
-    if "optimize" in info or "progressive" in info or "progression" in info:
+    if "optimize" in info or progressive:
         # keep sets quality to 0, but the actual value may be high.
         if quality >= 95 or quality == 0:
             bufsize = 2 * im.size[0] * im.size[1]

diff --git a/Tests/test_file_jpeg.py b/Tests/test_file_jpeg.py
--- a/Tests/test_file_jpeg.py
+++ b/Tests/test_file_jpeg.py
@@ -227,12 +227,20 @@ def test_exif_gps_typeerror(self):
 
     def test_progressive_compat(self):
         im1 = self.roundtrip(hopper())
+        self.assertFalse(im1.info.get("progressive"))
+        self.assertFalse(im1.info.get("progression"))
+
+        im2 = self.roundtrip(hopper(), progressive=0)
+        im3 = self.roundtrip(hopper(), progression=0)  # compatibility
+        self.assertFalse(im2.info.get("progressive"))
+        self.assertFalse(im2.info.get("progression"))
+        self.assertFalse(im3.info.get("progressive"))
+        self.assertFalse(im3.info.get("progression"))
+
         im2 = self.roundtrip(hopper(), progressive=1)
         im3 = self.roundtrip(hopper(), progression=1)  # compatibility
         self.assert_image_equal(im1, im2)
         self.assert_image_equal(im1, im3)
-        self.assertFalse(im1.info.get("progressive"))
-        self.assertFalse(im1.info.get("progression"))
         self.assertTrue(im2.info.get("progressive"))
         self.assertTrue(im2.info.get("progression"))
         self.assertTrue(im3.info.get("progressive"))

unintuitive save properties
> **progressive**
> If present, indicates that this image should be stored as a progressive JPEG file.

It is not completely obvious that `progressive = False` evaluates to it being set. I guess it's difficult to change this whilst keeping backwards compatibility. (I doubt someone passes `progressive = False` with the intention to enable it.)

