diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst
index 3c0aa18..e857154 100644
--- a/Doc/library/stdtypes.rst
+++ b/Doc/library/stdtypes.rst
@@ -1296,9 +1296,9 @@
 +------------+-----------------------------------------------------+-------+
 | ``'E'``    | Floating point exponential format (uppercase).      | \(3)  |
 +------------+-----------------------------------------------------+-------+
-| ``'f'``    | Floating point decimal format (lowercase).          | \(3)  |
+| ``'f'``    | Floating point decimal format.                      | \(3)  |
 +------------+-----------------------------------------------------+-------+
-| ``'F'``    | Floating point decimal format (uppercase).          | \(3)  |
+| ``'F'``    | Floating point decimal format.                      | \(3)  |
 +------------+-----------------------------------------------------+-------+
 | ``'g'``    | Floating point format. Uses lowercase exponential   | \(4)  |
 |            | format if exponent is less than -4 or not less than |       |
diff --git a/Doc/library/string.rst b/Doc/library/string.rst
index cb9cf93..0e345e3 100644
--- a/Doc/library/string.rst
+++ b/Doc/library/string.rst
@@ -429,14 +429,13 @@
    | ``'e'`` | Exponent notation. Prints the number in scientific       |
    |         | notation using the letter 'e' to indicate the exponent.  |
    +---------+----------------------------------------------------------+
-   | ``'E'`` | Exponent notation. Same as ``'e'`` except it converts    |
-   |         | the number to upper case.                                |
+   | ``'E'`` | Exponent notation. Same as ``'e'`` except it uses an     |
+   |         | upper case 'E' as the separator character.               |
    +---------+----------------------------------------------------------+
    | ``'f'`` | Fixed point. Displays the number as a fixed-point        |
    |         | number.                                                  |
    +---------+----------------------------------------------------------+
-   | ``'F'`` | Fixed point. Same as ``'f'`` except it converts the      |
-   |         | number to upper case.                                    |
+   | ``'F'`` | Fixed point. Same as ``'f'``.                            |
    +---------+----------------------------------------------------------+
    | ``'g'`` | General format. This prints the number as a fixed-point  |
    |         | number, unless the number is too large, in which case    |
diff --git a/Lib/test/test_format.py b/Lib/test/test_format.py
index 1268670..cd46bc2 100644
--- a/Lib/test/test_format.py
+++ b/Lib/test/test_format.py
@@ -88,18 +88,6 @@
         testboth("%#.*F", (110, -1.e+100/3.))
         overflowrequired = 0
 
-        # check for %f and %F
-        testboth("%f", (1.0,), "1.000000")
-        testboth("%F", (1.0,), "1.000000")
-        testboth("%f", (1e100,), "1e+100")
-        testboth("%F", (1e100,), "1E+100")
-        testboth("%f", (1e100,), "1e+100")
-        testboth("%F", (1e100,), "1E+100")
-        testboth("%f", (float('nan'),), "nan")
-        testboth("%F", (float('nan'),), "NAN")
-        testboth("%f", (float('inf'),), "inf")
-        testboth("%F", (float('inf'),), "INF")
-
         # Formatting of long integers. Overflow is not ok
         overflowok = 0
         testboth("%x", 10L, "a")
diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py
index 78106a3..03f2ff8 100644
--- a/Lib/test/test_types.py
+++ b/Lib/test/test_types.py
@@ -587,17 +587,9 @@
         test( 1.0, '+f', '+1.000000')
         test(-1.0, '+f', '-1.000000')
         test(1.1234e90, 'f', '1.1234e+90')
-        test(1.1234e90, 'F', '1.1234E+90')
+        test(1.1234e90, 'F', '1.1234e+90')
         test(1.1234e200, 'f', '1.1234e+200')
-        test(1.1234e200, 'F', '1.1234E+200')
-        test(1e100, 'x<20f', '1e+100xxxxxxxxxxxxxx')
-        test(1e100, 'x<20F', '1E+100xxxxxxxxxxxxxx')
-        test(float('nan'), 'f', 'nan')
-        test(float('nan'), 'F', 'NAN')
-        test(float('inf'), 'f', 'inf')
-        test(float('inf'), 'F', 'INF')
-        test(float('-inf'), 'f', '-inf')
-        test(float('-inf'), 'F', '-INF')
+        test(1.1234e200, 'F', '1.1234e+200')
 
         test( 1.0, 'e', '1.000000e+00')
         test(-1.0, 'e', '-1.000000e+00')
diff --git a/Misc/NEWS b/Misc/NEWS
index a7f371e..8b32d61 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,9 +10,6 @@
 Core and Builtins
 -----------------
 
-- Issue #3382: Make '%F' and float.__format__('F') convert results
-  to uppercase.
-
 - Issue #3156: Fix inconsistent behavior of the bytearray type: all
   its methods now allow for items objects that can be converted to
   an integer using operator.index().
diff --git a/Objects/stringlib/formatter.h b/Objects/stringlib/formatter.h
index d8cb171..b964435 100644
--- a/Objects/stringlib/formatter.h
+++ b/Objects/stringlib/formatter.h
@@ -741,6 +741,10 @@
     /* first, do the conversion as 8-bit chars, using the platform's
        snprintf.  then, if needed, convert to unicode. */
 
+    /* 'F' is the same as 'f', per the PEP */
+    if (type == 'F')
+        type = 'f';
+
     x = PyFloat_AsDouble(value);
 
     if (x == -1.0 && PyErr_Occurred())
@@ -754,12 +758,8 @@
 
     if (precision < 0)
         precision = 6;
-    if ((type == 'f' || type == 'F') && (fabs(x) / 1e25) >= 1e25) {
-	if (type == 'f')
-	    type = 'g';
-	else
-	    type = 'G';
-    }
+    if (type == 'f' && (fabs(x) / 1e25) >= 1e25)
+        type = 'g';
 
     /* cast "type", because if we're in unicode we need to pass a
        8-bit char.  this is safe, because we've restricted what "type"
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index b161c8c..793cc88 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -4320,12 +4320,8 @@
 	}
 	if (prec < 0)
 		prec = 6;
-	if ((type == 'f' || type == 'F') && (fabs(x) / 1e25) >= 1e25) {
-		if (type == 'f')
-			type = 'g';
-		else
-			type = 'G';
-	}
+	if (type == 'f' && fabs(x)/1e25 >= 1e25)
+		type = 'g';
 	/* Worst case length calc to ensure no buffer overrun:
 
 	   'g' formats:
@@ -4344,8 +4340,7 @@
 	*/
 	if (((type == 'g' || type == 'G') &&
               buflen <= (size_t)10 + (size_t)prec) ||
-	    ((type == 'f' || type == 'F') &&
-	      buflen <= (size_t)53 + (size_t)prec)) {
+	    (type == 'f' && buflen <= (size_t)53 + (size_t)prec)) {
 		PyErr_SetString(PyExc_OverflowError,
 			"formatted float is too long (precision too large?)");
 		return -1;
@@ -4915,6 +4910,8 @@
 			case 'F':
 			case 'g':
 			case 'G':
+				if (c == 'F')
+					c = 'f';
 				pbuf = formatbuf;
 				len = formatfloat(pbuf, sizeof(formatbuf),
 						  flags, prec, c, v);
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index a885ff0..a62e929 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -8191,12 +8191,8 @@
 	return -1;
     if (prec < 0)
 	prec = 6;
-    if ((type == 'f' || type == 'F') && (fabs(x) / 1e25) >= 1e25) {
-        if (type == 'f')
-            type = 'g';
-        else
-            type = 'G';
-    }
+    if (type == 'f' && (fabs(x) / 1e25) >= 1e25)
+	type = 'g';
     /* Worst case length calc to ensure no buffer overrun:
 
        'g' formats:
@@ -8215,8 +8211,7 @@
     */
     if (((type == 'g' || type == 'G') && 
           buflen <= (size_t)10 + (size_t)prec) ||
-	((type == 'f' || type == 'F')  &&
-          buflen <= (size_t)53 + (size_t)prec)) {
+	(type == 'f' && buflen <= (size_t)53 + (size_t)prec)) {
 	PyErr_SetString(PyExc_OverflowError,
 			"formatted float is too long (precision too large?)");
 	return -1;
@@ -8709,6 +8704,8 @@
 	    case 'F':
 	    case 'g':
 	    case 'G':
+		if (c == 'F')
+			c = 'f';
 		pbuf = formatbuf;
 		len = formatfloat(pbuf, sizeof(formatbuf)/sizeof(Py_UNICODE),
 			flags, prec, c, v);
