diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index a77fd7d..a2b454a 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -1257,10 +1257,8 @@
 static PyObject *
 array_fromfile_as_read(arrayobject *self, PyObject *args)
 {
-	if (Py_Py3kWarningFlag &&
-	    PyErr_Warn(PyExc_DeprecationWarning,
-		       "array.read() not supported in 3.x; "
-		       "use array.fromfile()") < 0)
+	if (PyErr_WarnPy3k("array.read() not supported in 3.x; "
+		       "use array.fromfile()", 1) < 0)
 		return NULL;
 	return array_fromfile(self, args);
 }
@@ -1298,10 +1296,8 @@
 static PyObject *
 array_tofile_as_write(arrayobject *self, PyObject *f)
 {
-	if (Py_Py3kWarningFlag &&
-	    PyErr_Warn(PyExc_DeprecationWarning,
-		       "array.write() not supported in 3.x; "
-		       "use array.tofile()") < 0)
+	if (PyErr_WarnPy3k("array.write() not supported in 3.x; "
+		       "use array.tofile()", 1) < 0)
 		return NULL;
 	return array_tofile(self, f);
 }
diff --git a/Objects/bufferobject.c b/Objects/bufferobject.c
index f4c69a0..37d9bcb 100644
--- a/Objects/bufferobject.c
+++ b/Objects/bufferobject.c
@@ -233,9 +233,7 @@
 	Py_ssize_t offset = 0;
 	Py_ssize_t size = Py_END_OF_BUFFER;
 
-	if (Py_Py3kWarningFlag &&
-	    PyErr_WarnEx(PyExc_DeprecationWarning,
-			 "buffer() not supported in 3.x; "
+	if (PyErr_WarnPy3k("buffer() not supported in 3.x; "
 			 "use memoryview()", 1) < 0)
 		return NULL;
 	
diff --git a/Objects/cellobject.c b/Objects/cellobject.c
index 46955ab..e2a8d29 100644
--- a/Objects/cellobject.c
+++ b/Objects/cellobject.c
@@ -55,9 +55,8 @@
 cell_compare(PyCellObject *a, PyCellObject *b)
 {
 	/* Py3K warning for comparisons  */
-	if (Py_Py3kWarningFlag &&
-	    PyErr_Warn(PyExc_DeprecationWarning,
-		       "cell comparisons not supported in 3.x") < 0) {
+	if (PyErr_WarnPy3k("cell comparisons not supported in 3.x",
+                           1) < 0) {
 		return -2;
 	}
 
diff --git a/Objects/codeobject.c b/Objects/codeobject.c
index 33b4610..815135d 100644
--- a/Objects/codeobject.c
+++ b/Objects/codeobject.c
@@ -340,10 +340,8 @@
 
 		/* Py3K warning if types are not equal and comparison
                    isn't == or !=  */
-		if (Py_Py3kWarningFlag &&
-		    PyErr_Warn(PyExc_DeprecationWarning,
-			       "code inequality comparisons not supported "
-			       "in 3.x") < 0) {
+		if (PyErr_WarnPy3k("code inequality comparisons not supported "
+			       "in 3.x", 1) < 0) {
 			return NULL;
 		}
 
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index d552098..2291524 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -1778,10 +1778,8 @@
 	}
 	else {
 		/* Py3K warning if comparison isn't == or !=  */
-		if (Py_Py3kWarningFlag &&
-		    PyErr_Warn(PyExc_DeprecationWarning,
-			       "dict inequality comparisons not supported "
-			       "in 3.x") < 0) {
+		if (PyErr_WarnPy3k("dict inequality comparisons not supported "
+			       "in 3.x", 1) < 0) {
 			return NULL;
 		}
 		res = Py_NotImplemented;
@@ -1811,10 +1809,8 @@
 static PyObject *
 dict_has_key(register PyDictObject *mp, PyObject *key)
 {
-	if (Py_Py3kWarningFlag &&
-	    PyErr_Warn(PyExc_DeprecationWarning, 
-		       "dict.has_key() not supported in 3.x; "
-		       "use the in operator") < 0)
+	if (PyErr_WarnPy3k("dict.has_key() not supported in 3.x; "
+		       "use the in operator", 1) < 0)
 		return NULL;
 	return dict_contains(mp, key);
 }
diff --git a/Objects/exceptions.c b/Objects/exceptions.c
index 2451a91..4a9eba1 100644
--- a/Objects/exceptions.c
+++ b/Objects/exceptions.c
@@ -189,12 +189,9 @@
 static PyObject *
 BaseException_getitem(PyBaseExceptionObject *self, Py_ssize_t index)
 {
-    if (Py_Py3kWarningFlag) {
-        if (PyErr_Warn(PyExc_DeprecationWarning,
-                       "__getitem__ not supported for exception "
-                       "classes in 3.x; use args attribute") == -1)
-            return NULL;
-    }
+    if (PyErr_WarnPy3k("__getitem__ not supported for exception "
+                       "classes in 3.x; use args attribute", 1) < 0)
+        return NULL;
     return PySequence_GetItem(self->args, index);
 }
 
@@ -202,12 +199,9 @@
 BaseException_getslice(PyBaseExceptionObject *self,
 			Py_ssize_t start, Py_ssize_t stop)
 {
-    if (Py_Py3kWarningFlag) {
-        if (PyErr_Warn(PyExc_DeprecationWarning,
-                       "__getslice__ not supported for exception "
-                       "classes in 3.x; use args attribute") == -1)
-            return NULL;
-    }
+    if (PyErr_WarnPy3k("__getslice__ not supported for exception "
+                       "classes in 3.x; use args attribute", 1) < 0)
+        return NULL;
     return PySequence_GetSlice(self->args, start, stop);
 }
 
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index d61e6a0..ef03232 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -1910,9 +1910,7 @@
 static PyObject *
 get_softspace(PyFileObject *f, void *closure)
 {
-	if (Py_Py3kWarningFlag &&
-	    PyErr_Warn(PyExc_DeprecationWarning,
-		       "file.softspace not supported in 3.x") < 0)
+	if (PyErr_WarnPy3k("file.softspace not supported in 3.x", 1) < 0)
 		return NULL;
 	return PyInt_FromLong(f->f_softspace);
 }
@@ -1921,9 +1919,7 @@
 set_softspace(PyFileObject *f, PyObject *value)
 {
 	int new;
-	if (Py_Py3kWarningFlag &&
-	    PyErr_Warn(PyExc_DeprecationWarning,
-		       "file.softspace not supported in 3.x") < 0)
+	if (PyErr_WarnPy3k("file.softspace not supported in 3.x", 1) < 0)
 		return -1;
 
 	if (value == NULL) {
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 81617e4..e4e8ae4 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -2038,9 +2038,7 @@
 	if (compare == Py_None)
 		compare = NULL;
 	if (compare != NULL && 
-            Py_Py3kWarningFlag &&
-	    PyErr_Warn(PyExc_DeprecationWarning, 
-		       "the cmp argument is not supported in 3.x") < 0)
+            PyErr_WarnPy3k("the cmp argument is not supported in 3.x", 1) < 0)
 		return NULL;
 	if (keyfunc == Py_None)
 		keyfunc = NULL;
diff --git a/Objects/methodobject.c b/Objects/methodobject.c
index e641df1..240cc05 100644
--- a/Objects/methodobject.c
+++ b/Objects/methodobject.c
@@ -235,10 +235,8 @@
 	    !PyCFunction_Check(other))
 	{
 		/* Py3K warning if types are not equal and comparison isn't == or !=  */
-		if (Py_Py3kWarningFlag &&
-		    PyErr_Warn(PyExc_DeprecationWarning,
-			       "builtin_function_or_method inequality "
-			       "comparisons not supported in 3.x") < 0) {
+		if (PyErr_WarnPy3k("builtin_function_or_method inequality "
+			       "comparisons not supported in 3.x", 1) < 0) {
 			return NULL;
 		}
 
diff --git a/Objects/object.c b/Objects/object.c
index e7d84ad..f77f552 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -868,9 +868,9 @@
 		/* Py3K warning if types are not equal and comparison isn't == or !=  */
 		if (Py_Py3kWarningFlag &&
 		    v->ob_type != w->ob_type && op != Py_EQ && op != Py_NE &&
-		    PyErr_Warn(PyExc_DeprecationWarning,
+		    PyErr_WarnEx(PyExc_DeprecationWarning,
 			       "comparing unequal types not supported "
-			       "in 3.x") < 0) {
+			       "in 3.x", 1) < 0) {
 			return NULL;
 		}
 
@@ -1691,9 +1691,9 @@
 		if (Py_Py3kWarningFlag &&
 		    (strcmp(attrname, "__members__") == 0 ||
 		     strcmp(attrname, "__methods__") == 0)) {
-			if (PyErr_Warn(PyExc_DeprecationWarning, 
+			if (PyErr_WarnEx(PyExc_DeprecationWarning, 
 				       "__members__ and __methods__ not "
-				       "supported in 3.x") < 0) {
+				       "supported in 3.x", 1) < 0) {
 				Py_XDECREF(list);
 				return -1;
 			}
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 6b732dd..54ad714 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -608,9 +608,9 @@
 
 	/* Py3K warning if comparison isn't == or !=  */
 	if (Py_Py3kWarningFlag && op != Py_EQ && op != Py_NE &&
-		PyErr_Warn(PyExc_DeprecationWarning,
+		PyErr_WarnEx(PyExc_DeprecationWarning,
 			   "type inequality comparisons not supported "
-			   "in 3.x") < 0) {
+			   "in 3.x", 1) < 0) {
 		return NULL;
 	}
 
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index bcdcda6..5d191a6 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -165,10 +165,8 @@
 	PyObject *func, *alist = NULL, *kwdict = NULL;
 	PyObject *t = NULL, *retval = NULL;
 
-	if (Py_Py3kWarningFlag &&
-	    PyErr_Warn(PyExc_DeprecationWarning, 
-		       "apply() not supported in 3.x; "
-		       "use func(*args, **kwargs)") < 0)
+	if (PyErr_WarnPy3k("apply() not supported in 3.x; "
+		       "use func(*args, **kwargs)", 1) < 0)
 		return NULL;
 
 	if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict))
@@ -225,10 +223,8 @@
 static PyObject *
 builtin_callable(PyObject *self, PyObject *v)
 {
-	if (Py_Py3kWarningFlag &&
-	    PyErr_Warn(PyExc_DeprecationWarning, 
-		       "callable() not supported in 3.x; "
-		       "use hasattr(o, '__call__')") < 0)
+	if (PyErr_WarnPy3k("callable() not supported in 3.x; "
+		       "use hasattr(o, '__call__')", 1) < 0)
 		return NULL;
 	return PyBool_FromLong((long)PyCallable_Check(v));
 }
@@ -438,9 +434,7 @@
 	PyObject *v, *w;
 	PyObject *res;
 
-	if (Py_Py3kWarningFlag &&
-	    PyErr_Warn(PyExc_DeprecationWarning, 
-		       "coerce() not supported in 3.x") < 0)
+	if (PyErr_WarnPy3k("coerce() not supported in 3.x", 1) < 0)
 		return NULL;
 
 	if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
@@ -709,9 +703,8 @@
 	PyCompilerFlags cf;
 	int exists;
 
-	if (Py_Py3kWarningFlag &&
-	    PyErr_Warn(PyExc_DeprecationWarning, 
-		       "execfile() not supported in 3.x; use exec()") < 0)
+	if (PyErr_WarnPy3k("execfile() not supported in 3.x; use exec()",
+                           1) < 0)
 		return NULL;
 
 	if (!PyArg_ParseTuple(args, "s|O!O:execfile",
@@ -937,10 +930,8 @@
 	n--;
 
 	if (func == Py_None) {
-		if (Py_Py3kWarningFlag &&
-		    PyErr_Warn(PyExc_DeprecationWarning, 
-			       "map(None, ...) not supported in 3.x; "
-			       "use list(...)") < 0)
+		if (PyErr_WarnPy3k("map(None, ...) not supported in 3.x; "
+			       "use list(...)", 1) < 0)
 			return NULL;
 		if (n == 1) {
 			/* map(None, S) is the same as list(S). */
@@ -1967,10 +1958,8 @@
 {
 	PyObject *seq, *func, *result = NULL, *it;
 
-	if (Py_Py3kWarningFlag &&
-	    PyErr_Warn(PyExc_DeprecationWarning, 
-		       "reduce() not supported in 3.x; "
-		       "use functools.reduce()") < 0)
+	if (PyErr_WarnPy3k("reduce() not supported in 3.x; "
+		       "use functools.reduce()", 1) < 0)
 		return NULL;
 
 	if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
@@ -2045,9 +2034,8 @@
 static PyObject *
 builtin_reload(PyObject *self, PyObject *v)
 {
-	if (Py_Py3kWarningFlag &&
-	    PyErr_Warn(PyExc_DeprecationWarning, 
-		       "reload() not supported in 3.x; use imp.reload()") < 0)
+	if (PyErr_WarnPy3k("In 3.x, reload() is renamed to imp.reload()",
+                           1) < 0)
 		return NULL;
 
 	return PyImport_ReloadModule(v);
diff --git a/Python/ceval.c b/Python/ceval.c
index 7c7116c..c085851 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -3164,9 +3164,9 @@
 
 	assert(PyExceptionClass_Check(type));
 	if (Py_Py3kWarningFlag && PyClass_Check(type)) {
-		if (PyErr_Warn(PyExc_DeprecationWarning,
+		if (PyErr_WarnEx(PyExc_DeprecationWarning,
 			       "exceptions must derive from BaseException "
-			       "in 3.x") == -1)
+			       "in 3.x", 1) == -1)
 			goto raise_error;
 	}
 
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 8c82d45..83d7d68 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -172,10 +172,8 @@
 	PyThreadState *tstate;
 	PyObject *tmp_type, *tmp_value, *tmp_tb;
 
-	if (Py_Py3kWarningFlag &&
-	    PyErr_Warn(PyExc_DeprecationWarning,
-		       "sys.exc_clear() not supported in 3.x; "
-		       "use except clauses") < 0)
+	if (PyErr_WarnPy3k("sys.exc_clear() not supported in 3.x; "
+		       "use except clauses", 1) < 0)
 		return NULL;
 
 	tstate = PyThreadState_GET();
