diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
index 3ae73b4..5b3ba7f 100755
--- a/Lib/test/regrtest.py
+++ b/Lib/test/regrtest.py
@@ -64,6 +64,7 @@
 import random
 import StringIO
 import warnings
+from sets import Set
 
 # I see no other way to suppress these warnings;
 # putting them in test_grammar.py has no effect:
@@ -262,7 +263,7 @@
         e = _ExpectedSkips()
         plat = sys.platform
         if e.isvalid():
-            surprise = _Set(skipped) - e.getexpected()
+            surprise = Set(skipped) - e.getexpected()
             if surprise:
                 print count(len(surprise), "skip"), \
                       "unexpected on", plat + ":"
@@ -468,7 +469,7 @@
         return "%d %ss" % (n, word)
 
 def printlist(x, width=70, indent=4):
-    """Print the elements of a sequence to stdout.
+    """Print the elements of iterable x to stdout.
 
     Optional arg width (default 70) is the maximum line length.
     Optional arg indent (default 4) is the number of blanks with which to
@@ -480,34 +481,6 @@
     print fill(' '.join(map(str, x)), width,
                initial_indent=blanks, subsequent_indent=blanks)
 
-class _Set:
-    def __init__(self, seq=[]):
-        data = self.data = {}
-        for x in seq:
-            data[x] = 1
-
-    def __len__(self):
-        return len(self.data)
-
-    def __sub__(self, other):
-        "Return set of all elements in self not in other."
-        result = _Set()
-        data = result.data = self.data.copy()
-        for x in other.data:
-            if x in data:
-                del data[x]
-        return result
-
-    def __iter__(self):
-        return iter(self.data)
-
-    def tolist(self, sorted=1):
-        "Return _Set elements as a list."
-        data = self.data.keys()
-        if sorted:
-            data.sort()
-        return data
-
 # Map sys.platform to a string containing the basenames of tests
 # expected to be skipped on that platform.
 
@@ -776,11 +749,11 @@
 
 class _ExpectedSkips:
     def __init__(self):
-        self.valid = 0
+        self.valid = False
         if sys.platform in _expectations:
             s = _expectations[sys.platform]
-            self.expected = _Set(s.split())
-            self.valid = 1
+            self.expected = Set(s.split())
+            self.valid = True
 
     def isvalid(self):
         "Return true iff _ExpectedSkips knows about the current platform."
