diff --git a/Lib/lib-tk/ttk.py b/Lib/lib-tk/ttk.py
index 43da726..c2907c9 100644
--- a/Lib/lib-tk/ttk.py
+++ b/Lib/lib-tk/ttk.py
@@ -29,32 +29,41 @@
 
 _flatten = Tkinter._flatten
 
-# Verify if Tk is new enough to not need Tile checking
+# Verify if Tk is new enough to not need the Tile package
 _REQUIRE_TILE = True if Tkinter.TkVersion < 8.5 else False
 
-def _loadttk(loadtk):
-    # This extends the default Tkinter.Tk._loadtk method so we can be
-    # sure that ttk is available for use, or not.
-    def _wrapper(self):
-        loadtk(self)
+def _load_tile(master):
+    if _REQUIRE_TILE:
+        import os
+        tilelib = os.environ.get('TILE_LIBRARY')
+        if tilelib:
+            # append custom tile path to the the list of directories that
+            # Tcl uses when attempting to resolve packages with the package
+            # command
+            master.tk.eval(
+                    'global auto_path; '
+                    'lappend auto_path {%s}' % tilelib)
 
-        if _REQUIRE_TILE:
-            import os
-            tilelib = os.environ.get('TILE_LIBRARY')
-            if tilelib:
-                # append custom tile path to the the list of directories that
-                # Tcl uses when attempting to resolve packages with the package
-                # command
-                self.tk.eval('global auto_path; '
-                             'lappend auto_path {%s}' % tilelib)
-            self.tk.eval('package require tile') # TclError may be raised here
+        master.tk.eval('package require tile') # TclError may be raised here
+        master._tile_loaded = True
 
-    return _wrapper
 
-# Store the original Tkinter.Tk._loadtk before replacing it just in case
-# someone wants to restore it.
-__loadtk__ = Tkinter.Tk._loadtk
-Tkinter.Tk._loadtk = _loadttk(Tkinter.Tk._loadtk)
+def _setup_master(master=None):
+    """If master is not None, itself is returned. If master is None,
+    the default master is returned if there is one, otherwise a new
+    master is created and returned.
+
+    If it is not allowed to use the default root and master is None,
+    RuntimeError is raised."""
+    if master is None:
+        if Tkinter._support_default_root:
+            master = Tkinter._default_root or Tkinter.Tk()
+        else:
+            raise RuntimeError(
+                    "No master specified and Tkinter is "
+                    "configured to not support default root")
+    return master
+
 
 
 def _format_optdict(optdict, script=False, ignore=None):
@@ -366,12 +375,11 @@
     _name = "ttk::style"
 
     def __init__(self, master=None):
-        if master is None:
-            if Tkinter._support_default_root:
-                master = Tkinter._default_root or Tkinter.Tk()
-            else:
-                raise RuntimeError("No master specified and Tkinter is "
-                    "configured to not support default master")
+        master = _setup_master(master)
+
+        if not getattr(master, '_tile_loaded', False):
+            # Load tile now, if needed
+            _load_tile(master)
 
         self.master = master
         self.tk = self.master.tk
@@ -548,6 +556,10 @@
             active, disabled, focus, pressed, selected, background,
             readonly, alternate, invalid
         """
+        master = _setup_master(master)
+        if not getattr(master, '_tile_loaded', False):
+            # Load tile now, if needed
+            _load_tile(master)
         Tkinter.Widget.__init__(self, master, widgetname, kw=kw)
 
 
