diff --git a/Lib/tkinter/test/test_tkinter/__init__.py b/Lib/tkinter/test/test_tkinter/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Lib/tkinter/test/test_tkinter/__init__.py
diff --git a/Lib/tkinter/test/test_tkinter/test_text.py b/Lib/tkinter/test/test_tkinter/test_text.py
new file mode 100644
index 0000000..fffd455
--- /dev/null
+++ b/Lib/tkinter/test/test_tkinter/test_text.py
@@ -0,0 +1,39 @@
+import unittest
+import tkinter
+from test.support import requires, run_unittest
+from tkinter.ttk import setup_master
+
+requires('gui')
+
+class TextTest(unittest.TestCase):
+
+    def setUp(self):
+        self.root = setup_master()
+        self.text = tkinter.Text(self.root)
+
+    def tearDown(self):
+        self.text.destroy()
+
+
+    def test_search(self):
+        text = self.text
+
+        # pattern and index are obligatory arguments.
+        self.failUnlessRaises(tkinter.TclError, text.search, None, '1.0')
+        self.failUnlessRaises(tkinter.TclError, text.search, 'a', None)
+        self.failUnlessRaises(tkinter.TclError, text.search, None, None)
+
+        # Invalid text index.
+        self.failUnlessRaises(tkinter.TclError, text.search, '', 0)
+
+        # Check if we are getting the indices as strings -- you are likely
+        # to get Tcl_Obj under Tk 8.5 if Tkinter doesn't convert it.
+        text.insert('1.0', 'hi-test')
+        self.failUnlessEqual(text.search('-test', '1.0', 'end'), '1.2')
+        self.failUnlessEqual(text.search('test', '1.0', 'end'), '1.3')
+
+
+tests_gui = (TextTest, )
+
+if __name__ == "__main__":
+    run_unittest(*tests_gui)
diff --git a/Lib/tkinter/ttk.py b/Lib/tkinter/ttk.py
index 89a9bf1..108a65f 100644
--- a/Lib/tkinter/ttk.py
+++ b/Lib/tkinter/ttk.py
@@ -23,7 +23,7 @@
            # Extensions
            "LabeledScale", "OptionMenu",
            # functions
-           "tclobjs_to_py"]
+           "tclobjs_to_py", "setup_master"]
 
 import tkinter
 
@@ -47,24 +47,6 @@
         master.tk.eval('package require tile') # TclError may be raised here
         master._tile_loaded = True
 
-
-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):
     """Formats optdict to a tuple to pass it to tk.call.
 
@@ -367,6 +349,22 @@
 
     return adict
 
+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
+
 
 class Style(object):
     """Manipulate style database."""
@@ -374,7 +372,7 @@
     _name = "ttk::style"
 
     def __init__(self, master=None):
-        master = _setup_master(master)
+        master = setup_master(master)
 
         if not getattr(master, '_tile_loaded', False):
             # Load tile now, if needed
@@ -555,7 +553,7 @@
             active, disabled, focus, pressed, selected, background,
             readonly, alternate, invalid
         """
-        master = _setup_master(master)
+        master = setup_master(master)
         if not getattr(master, '_tile_loaded', False):
             # Load tile now, if needed
             _load_tile(master)
