diff --git a/Lib/lib-tk/Tkinter.py b/Lib/lib-tk/Tkinter.py
index aace39a..3c2b0ab 100644
--- a/Lib/lib-tk/Tkinter.py
+++ b/Lib/lib-tk/Tkinter.py
@@ -1,15 +1,15 @@
 # Tkinter.py -- Tk/Tcl widget wrappers
 
-import tkinter
-from tkinter import TclError
+import _tkinter
+from _tkinter import TclError
 from types import *
 from Tkconstants import *
 
 CallableTypes = (FunctionType, MethodType,
 		 BuiltinFunctionType, BuiltinMethodType)
 
-TkVersion = eval(tkinter.TK_VERSION)
-TclVersion = eval(tkinter.TCL_VERSION)
+TkVersion = eval(_tkinter.TK_VERSION)
+TclVersion = eval(_tkinter.TCL_VERSION)
 
 
 def _flatten(tuple):
@@ -575,18 +575,18 @@
 			import sys, os
 			baseName = os.path.basename(sys.argv[0])
 			if baseName[-3:] == '.py': baseName = baseName[:-3]
-		self.tk = tkinter.create(screenName, baseName, className)
+		self.tk = _tkinter.create(screenName, baseName, className)
 		# Version sanity checks
 		tk_version = self.tk.getvar('tk_version')
-		if tk_version != tkinter.TK_VERSION:
+		if tk_version != _tkinter.TK_VERSION:
 		    raise RuntimeError, \
 		    "tk.h version (%s) doesn't match libtk.a version (%s)" \
-		    % (tkinter.TK_VERSION, tk_version)
+		    % (_tkinter.TK_VERSION, tk_version)
 		tcl_version = self.tk.getvar('tcl_version')
-		if tcl_version != tkinter.TCL_VERSION:
+		if tcl_version != _tkinter.TCL_VERSION:
 		    raise RuntimeError, \
 		    "tcl.h version (%s) doesn't match libtcl.a version (%s)" \
-		    % (tkinter.TCL_VERSION, tcl_version)
+		    % (_tkinter.TCL_VERSION, tcl_version)
 		if TkVersion < 4.0:
 		    raise RuntimeError, \
 			  "Tk 4.0 or higher is required; found Tk %s" \
diff --git a/Lib/tkinter/Tkinter.py b/Lib/tkinter/Tkinter.py
index aace39a..3c2b0ab 100755
--- a/Lib/tkinter/Tkinter.py
+++ b/Lib/tkinter/Tkinter.py
@@ -1,15 +1,15 @@
 # Tkinter.py -- Tk/Tcl widget wrappers
 
-import tkinter
-from tkinter import TclError
+import _tkinter
+from _tkinter import TclError
 from types import *
 from Tkconstants import *
 
 CallableTypes = (FunctionType, MethodType,
 		 BuiltinFunctionType, BuiltinMethodType)
 
-TkVersion = eval(tkinter.TK_VERSION)
-TclVersion = eval(tkinter.TCL_VERSION)
+TkVersion = eval(_tkinter.TK_VERSION)
+TclVersion = eval(_tkinter.TCL_VERSION)
 
 
 def _flatten(tuple):
@@ -575,18 +575,18 @@
 			import sys, os
 			baseName = os.path.basename(sys.argv[0])
 			if baseName[-3:] == '.py': baseName = baseName[:-3]
-		self.tk = tkinter.create(screenName, baseName, className)
+		self.tk = _tkinter.create(screenName, baseName, className)
 		# Version sanity checks
 		tk_version = self.tk.getvar('tk_version')
-		if tk_version != tkinter.TK_VERSION:
+		if tk_version != _tkinter.TK_VERSION:
 		    raise RuntimeError, \
 		    "tk.h version (%s) doesn't match libtk.a version (%s)" \
-		    % (tkinter.TK_VERSION, tk_version)
+		    % (_tkinter.TK_VERSION, tk_version)
 		tcl_version = self.tk.getvar('tcl_version')
-		if tcl_version != tkinter.TCL_VERSION:
+		if tcl_version != _tkinter.TCL_VERSION:
 		    raise RuntimeError, \
 		    "tcl.h version (%s) doesn't match libtcl.a version (%s)" \
-		    % (tkinter.TCL_VERSION, tcl_version)
+		    % (_tkinter.TCL_VERSION, tcl_version)
 		if TkVersion < 4.0:
 		    raise RuntimeError, \
 			  "Tk 4.0 or higher is required; found Tk %s" \
