diff --git a/Lib/UserString.py b/Lib/UserString.py
index 292e852..ed90b8d 100755
--- a/Lib/UserString.py
+++ b/Lib/UserString.py
@@ -5,14 +5,14 @@
 Note: string objects have grown methods in Python 1.6
 This module requires Python 1.6 or later.
 """
-from types import StringType, UnicodeType
+from types import StringTypes
 import sys
 
 __all__ = ["UserString","MutableString"]
 
 class UserString:
     def __init__(self, seq):
-        if isinstance(seq, StringType) or isinstance(seq, UnicodeType):
+        if isinstance(seq, StringTypes):
             self.data = seq
         elif isinstance(seq, UserString):
             self.data = seq.data[:]
@@ -43,19 +43,19 @@
     def __add__(self, other):
         if isinstance(other, UserString):
             return self.__class__(self.data + other.data)
-        elif isinstance(other, StringType) or isinstance(other, UnicodeType):
+        elif isinstance(other, StringTypes):
             return self.__class__(self.data + other)
         else:
             return self.__class__(self.data + str(other))
     def __radd__(self, other):
-        if isinstance(other, StringType) or isinstance(other, UnicodeType):
+        if isinstance(other, StringTypes):
             return self.__class__(other + self.data)
         else:
             return self.__class__(str(other) + self.data)
     def __iadd__(self, other):
         if isinstance(other, UserString):
             self.data += other.data
-        elif isinstance(other, StringType) or isinstance(other, UnicodeType):
+        elif isinstance(other, StringTypes):
             self.data += other
         else:
             self.data += str(other)
@@ -159,7 +159,7 @@
         start = max(start, 0); end = max(end, 0)
         if isinstance(sub, UserString):
             self.data = self.data[:start]+sub.data+self.data[end:]
-        elif isinstance(sub, StringType) or isinstance(sub, UnicodeType):
+        elif isinstance(sub, StringTypes):
             self.data = self.data[:start]+sub+self.data[end:]
         else:
             self.data =  self.data[:start]+str(sub)+self.data[end:]
diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py
index 4185b9b..334a6b9 100644
--- a/Lib/test/string_tests.py
+++ b/Lib/test/string_tests.py
@@ -176,10 +176,15 @@
     test('strip', 'hello', 'hello', 'xyz')
 
     # strip/lstrip/rstrip with unicode arg
-    test('strip', 'xyzzyhelloxyzzy', u'hello', u'xyz')
-    test('lstrip', 'xyzzyhelloxyzzy', u'helloxyzzy', u'xyz')
-    test('rstrip', 'xyzzyhelloxyzzy', u'xyzzyhello', u'xyz')
-    test('strip', 'hello', u'hello', u'xyz')
+    if have_unicode:
+        test('strip', 'xyzzyhelloxyzzy', 
+             unicode('hello', 'ascii'), unicode('xyz', 'ascii'))
+        test('lstrip', 'xyzzyhelloxyzzy', 
+             unicode('helloxyzzy', 'ascii'), unicode('xyz', 'ascii'))
+        test('rstrip', 'xyzzyhelloxyzzy',
+             unicode('xyzzyhello', 'ascii'), unicode('xyz', 'ascii'))
+        test('strip', 'hello', 
+             unicode('hello', 'ascii'), unicode('xyz', 'ascii'))
 
     test('swapcase', 'HeLLo cOmpUteRs', 'hEllO CoMPuTErS')
     test('translate', 'xyzabcdef', 'xyzxyz', transtable, 'def')
