diff --git a/Lib/UserDict.py b/Lib/UserDict.py
index 08f3161..50fee89 100644
--- a/Lib/UserDict.py
+++ b/Lib/UserDict.py
@@ -1,33 +1,36 @@
 # A more or less complete user-defined wrapper around dictionary objects
 
 class UserDict:
-    def __init__(self): self.data = {}
+    def __init__(self, dict=None):
+        self.data = {}
+        if dict is not None: self.update(dict)
     def __repr__(self): return repr(self.data)
     def __cmp__(self, dict):
-        if type(dict) == type(self.data):
-            return cmp(self.data, dict)
-        else:
+        if isinstance(dict, UserDict):
             return cmp(self.data, dict.data)
+        else:
+            return cmp(self.data, dict)
     def __len__(self): return len(self.data)
     def __getitem__(self, key): return self.data[key]
     def __setitem__(self, key, item): self.data[key] = item
     def __delitem__(self, key): del self.data[key]
-    def clear(self): return self.data.clear()
+    def clear(self): self.data.clear()
     def copy(self):
+        if self.__class__ is UserDict:
+            return UserDict(self.data)
         import copy
         return copy.copy(self)
     def keys(self): return self.data.keys()
     def items(self): return self.data.items()
     def values(self): return self.data.values()
     def has_key(self, key): return self.data.has_key(key)
-    def update(self, other):
-        if type(other) is type(self.data):
-            self.data.update(other)
+    def update(self, dict):
+        if isinstance(dict, UserDict):
+            self.data.update(dict.data)
+        elif isinstance(dict, type(self.data)):
+            self.data.update(dict)
         else:
-            for k, v in other.items():
+            for k, v in dict.items():
                 self.data[k] = v
     def get(self, key, failobj=None):
-        if self.data.has_key(key):
-            return self.data[key]
-        else:
-            return failobj
+        return self.data.get(key, failobj)
