diff --git a/Lib/test/test_future_builtins.py b/Lib/test/test_future_builtins.py
new file mode 100644
index 0000000..69e719b
--- /dev/null
+++ b/Lib/test/test_future_builtins.py
@@ -0,0 +1,27 @@
+import test.test_support, unittest
+
+# we're testing the behavior of these future builtins:
+from future_builtins import hex, oct
+
+class BuiltinTest(unittest.TestCase):
+    def test_hex(self):
+        self.assertEqual(hex(0), '0x0')
+        self.assertEqual(hex(16), '0x10')
+        self.assertEqual(hex(16L), '0x10')
+        self.assertEqual(hex(-16), '-0x10')
+        self.assertEqual(hex(-16L), '-0x10')
+        self.assertRaises(TypeError, hex, {})
+
+    def test_oct(self):
+        self.assertEqual(oct(0), '0o0')
+        self.assertEqual(oct(100), '0o144')
+        self.assertEqual(oct(100L), '0o144')
+        self.assertEqual(oct(-100), '-0o144')
+        self.assertEqual(oct(-100L), '-0o144')
+        self.assertRaises(TypeError, oct, ())
+
+def test_main(verbose=None):
+    test.test_support.run_unittest(BuiltinTest)
+
+if __name__ == "__main__":
+    test_main(verbose=True)
diff --git a/Misc/NEWS b/Misc/NEWS
index 5848dba..2921cb2 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,14 @@
 Core and builtins
 -----------------
 
+- Added the future_builtins module, which contains hex() and oct().
+  These are the PEP 3127 version of these functions, designed to be
+  compatible with the hex() and oct() builtins from Python 3.0.  They
+  differ slightly in their output formats from the existing, unchanged
+  Python 2.6 builtins.  The expected usage of the future_builtins
+  module is:
+    from future_builtins import hex, oct
+
 - Issue #1600: Modifed PyOS_ascii_formatd to use at most 2 digit
   exponents for exponents with absolute value < 100.  Follows C99
   standard.  This is a change on Windows, which would use 3 digits.
diff --git a/Modules/future_builtins.c b/Modules/future_builtins.c
new file mode 100644
index 0000000..d5c136a
--- /dev/null
+++ b/Modules/future_builtins.c
@@ -0,0 +1,69 @@
+
+/* future_builtins module */
+
+/* This module provides functions that will be builtins in Python 3.0,
+   but that conflict with builtins that already exist in Python
+   2.x. */
+
+
+#include "Python.h"
+
+PyDoc_STRVAR(module_doc,
+"This module provides functions that will be builtins in Python 3.0,\n\
+but that conflict with builtins that already exist in Python 2.x.\n\
+\n\
+Functions:\n\
+\n\
+hex(arg) -- Returns the hexidecimal representation of an integer\n\
+oct(arg) -- Returns the octal representation of an integer\n\
+\n\
+The typical usage of this module is to replace existing builtins in a\n\
+module's namespace:\n \n\
+from future_builtins import hex, oct\n");
+
+static PyObject *
+builtin_hex(PyObject *self, PyObject *v)
+{
+	return PyNumber_ToBase(v, 16);
+}
+
+PyDoc_STRVAR(hex_doc,
+"hex(number) -> string\n\
+\n\
+Return the hexadecimal representation of an integer or long integer.");
+
+
+static PyObject *
+builtin_oct(PyObject *self, PyObject *v)
+{
+	return PyNumber_ToBase(v, 8);
+}
+
+PyDoc_STRVAR(oct_doc,
+"oct(number) -> string\n\
+\n\
+Return the octal representation of an integer or long integer.");
+
+
+/* List of functions exported by this module */
+
+static PyMethodDef module_functions[] = {
+ 	{"hex",		builtin_hex,        METH_O, hex_doc},
+ 	{"oct",		builtin_oct,        METH_O, oct_doc},
+	{NULL,		NULL}	/* Sentinel */
+};
+
+
+/* Initialize this module. */
+
+PyMODINIT_FUNC
+initfuture_builtins(void)
+{
+	PyObject *m;
+
+	m = Py_InitModule3("future_builtins", module_functions, module_doc);
+	if (m == NULL)
+		return;
+
+	/* any other initialization needed */
+}
diff --git a/PC/config.c b/PC/config.c
index 9961efa..f2d38ae 100644
--- a/PC/config.c
+++ b/PC/config.c
@@ -12,6 +12,7 @@
 extern void initbinascii(void);
 extern void initcmath(void);
 extern void initerrno(void);
+extern void initfuture_builtins(void);
 extern void initgc(void);
 #ifndef MS_WINI64
 extern void initimageop(void);
@@ -84,6 +85,7 @@
         {"binascii", initbinascii},
         {"cmath", initcmath},
         {"errno", initerrno},
+        {"future_builtins", initfuture_builtins},
         {"gc", initgc},
 #ifndef MS_WINI64
         {"imageop", initimageop},
diff --git a/PCbuild/pythoncore.vcproj b/PCbuild/pythoncore.vcproj
index 3947074..f721ac7 100644
--- a/PCbuild/pythoncore.vcproj
+++ b/PCbuild/pythoncore.vcproj
@@ -1051,6 +1051,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\Modules\future_builtins.c"
+				>
+			</File>
+			<File
 				RelativePath="..\Modules\gcmodule.c"
 				>
 			</File>
diff --git a/setup.py b/setup.py
index 4bc6f8c..c643845 100644
--- a/setup.py
+++ b/setup.py
@@ -417,6 +417,9 @@
                                libraries=math_libs) )
         exts.append( Extension('datetime', ['datetimemodule.c', 'timemodule.c'],
                                libraries=math_libs) )
+        # code that will be builtins in the future, but conflict with the
+        #  current builtins
+        exts.append( Extension('future_builtins', ['future_builtins.c']) )
         # random number generator implemented in C
         exts.append( Extension("_random", ["_randommodule.c"]) )
         # fast iterator tools implemented in C
