diff --git a/Include/pydebug.h b/Include/pydebug.h
index 9ecd8a0..d92161c 100644
--- a/Include/pydebug.h
+++ b/Include/pydebug.h
@@ -16,6 +16,10 @@
 extern DL_IMPORT(int) Py_UnicodeFlag;
 extern DL_IMPORT(int) Py_IgnoreEnvironmentFlag;
 extern DL_IMPORT(int) Py_DivisionWarningFlag;
+/* _XXX Py_QnewFlag should go away in 2.3.  It's true iff -Qnew is passed,
+  on the command line, and is used in 2.2 by ceval.c to make all "/" divisions
+  true divisions (which they will be in 2.3). */
+extern DL_IMPORT(int) _Py_QnewFlag;
 
 /* this is a wrapper around getenv() that pays attention to
    Py_IgnoreEnvironmentFlag.  It should be used for getting variables like
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index 481ca0f..a0958df 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -23,6 +23,11 @@
 def testbinop(a, b, res, expr="a+b", meth="__add__"):
     if verbose: print "checking", expr
     dict = {'a': a, 'b': b}
+
+    # XXX Hack so this passes before 2.3 when -Qnew is specified.
+    if meth == "__div__" and 1/2 == 0.5:
+        meth = "__truediv__"
+
     vereq(eval(expr, dict), res)
     t = type(a)
     m = getattr(t, meth)
diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py
index 118b1d9..2c319e5 100644
--- a/Lib/test/test_generators.py
+++ b/Lib/test/test_generators.py
@@ -182,7 +182,7 @@
 Specification: Generators and Exception Propagation
 
     >>> def f():
-    ...     return 1/0
+    ...     return 1//0
     >>> def g():
     ...     yield f()  # the zero division exception propagates
     ...     yield 42   # and we'll never get here
@@ -206,7 +206,7 @@
     ...         yield 1
     ...         try:
     ...             yield 2
-    ...             1/0
+    ...             1//0
     ...             yield 3  # never get here
     ...         except ZeroDivisionError:
     ...             yield 4
@@ -253,7 +253,7 @@
     ...     n = len(list)
     ...     if n == 0:
     ...         return []
-    ...     i = n / 2
+    ...     i = n // 2
     ...     return Tree(list[i], tree(list[:i]), tree(list[i+1:]))
 
     >>> # Show it off: create a tree.
@@ -691,7 +691,7 @@
 >>> def f():
 ...     try:
 ...         try:
-...             1/0
+...             1//0
 ...         except ZeroDivisionError:
 ...             yield 666  # bad because *outer* try has finally
 ...         except:
@@ -708,7 +708,7 @@
 ...     try:
 ...         try:
 ...             yield 12
-...             1/0
+...             1//0
 ...         except ZeroDivisionError:
 ...             yield 666
 ...         except:
@@ -751,7 +751,7 @@
 ...             pass
 ...         elif 0:
 ...             try:
-...                 1/0
+...                 1//0
 ...             except SyntaxError:
 ...                 pass
 ...             else:
diff --git a/Lib/zipfile.py b/Lib/zipfile.py
index 4b59ac6..0efcad3 100644
--- a/Lib/zipfile.py
+++ b/Lib/zipfile.py
@@ -117,7 +117,7 @@
         """Return the per-file header as a string."""
         dt = self.date_time
         dosdate = (dt[0] - 1980) << 9 | dt[1] << 5 | dt[2]
-        dostime = dt[3] << 11 | dt[4] << 5 | dt[5] / 2
+        dostime = dt[3] << 11 | dt[4] << 5 | (dt[5] // 2)
         if self.flag_bits & 0x08:
             # Set these to zero because we write them after the file data
             CRC = compress_size = file_size = 0
@@ -468,7 +468,7 @@
                 count = count + 1
                 dt = zinfo.date_time
                 dosdate = (dt[0] - 1980) << 9 | dt[1] << 5 | dt[2]
-                dostime = dt[3] << 11 | dt[4] << 5 | dt[5] / 2
+                dostime = dt[3] << 11 | dt[4] << 5 | (dt[5] // 2)
                 centdir = struct.pack(structCentralDir,
                   stringCentralDir, zinfo.create_version,
                   zinfo.create_system, zinfo.extract_version, zinfo.reserved,
diff --git a/Misc/NEWS b/Misc/NEWS
index eabe9b6..db38eca 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -39,6 +39,13 @@
 
 Core and builtins
 
+- -Qnew now works as documented in PEP 238:  when -Qnew is passed on
+  the command line, all occurrences of "/" use true division instead
+  of classic division.  See the PEP for details.  Note that "all"
+  means all instances in library and 3rd-party modules, as well as in
+  your own code.  As the PEP says, -Qnew is intended for use only in
+  educational environments with control over the libraries in use.
+
 Extension modules
 
 - gc.get_referents was renamed to gc.get_referrers.
@@ -712,11 +719,15 @@
   warnings are issued.  Using -Qwarn issues a run-time warning about
   all uses of classic division for int and long arguments; -Qwarnall
   also warns about classic division for float and complex arguments
-  (for use with fixdiv.py).  Using -Qnew is questionable; it turns on
-  new division by default, but only in the __main__ module.  You can
-  usefully combine -Qwarn or -Qwarnall and -Qnew: this gives the
-  __main__ module new division, and warns about classic division
-  everywhere else.
+  (for use with fixdiv.py).
+  [Note:  the remainder of this paragraph (preserved below) became
+   obsolete in 2.2c1 -- -Qnew has global effect in 2.2]
+  <obsolete>
+  Using -Qnew is questionable; it turns on new division by default, but
+  only in the __main__ module.  You can usefully combine -Qwarn or
+  -Qwarnall and -Qnew: this gives the __main__ module new division, and
+  warns about classic division everywhere else.
+  </obsolete>
 
 - Many built-in types can now be subclassed.  This applies to int,
   long, float, str, unicode, and tuple.  (The types complex, list and
diff --git a/Modules/main.c b/Modules/main.c
index eea848f..5f71ee2 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -169,8 +169,11 @@
 				break;
 			}
 			if (strcmp(_PyOS_optarg, "new") == 0) {
-				/* XXX This only affects __main__ */
+				/* This only affects __main__ */
 				cf.cf_flags |= CO_FUTURE_DIVISION;
+				/* And this tells the eval loop to treat
+				   BINARY_DIVIDE as BINARY_TRUE_DIVIDE */
+				_Py_QnewFlag = 1;
 				break;
 			}
 			fprintf(stderr,
diff --git a/Python/ceval.c b/Python/ceval.c
index 5358517..76424e1 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -903,9 +903,22 @@
 			break;
 
 		case BINARY_DIVIDE:
+			if (!_Py_QnewFlag) {
+				w = POP();
+				v = POP();
+				x = PyNumber_Divide(v, w);
+				Py_DECREF(v);
+				Py_DECREF(w);
+				PUSH(x);
+				if (x != NULL) continue;
+				break;
+			}
+			/* -Qnew is in effect:  fall through to
+			   BINARY_TRUE_DIVIDE */
+		case BINARY_TRUE_DIVIDE:
 			w = POP();
 			v = POP();
-			x = PyNumber_Divide(v, w);
+			x = PyNumber_TrueDivide(v, w);
 			Py_DECREF(v);
 			Py_DECREF(w);
 			PUSH(x);
@@ -922,16 +935,6 @@
 			if (x != NULL) continue;
 			break;
 
-		case BINARY_TRUE_DIVIDE:
-			w = POP();
-			v = POP();
-			x = PyNumber_TrueDivide(v, w);
-			Py_DECREF(v);
-			Py_DECREF(w);
-			PUSH(x);
-			if (x != NULL) continue;
-			break;
-
 		case BINARY_MODULO:
 			w = POP();
 			v = POP();
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 628058b..a8ad845 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -64,6 +64,10 @@
 int Py_FrozenFlag; /* Needed by getpath.c */
 int Py_UnicodeFlag = 0; /* Needed by compile.c */
 int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
+/* _XXX Py_QnewFlag should go away in 2.3.  It's true iff -Qnew is passed,
+  on the command line, and is used in 2.2 by ceval.c to make all "/" divisions
+  true divisions (which they will be in 2.3). */
+int _Py_QnewFlag = 0;
 
 static int initialized = 0;
 
