diff --git a/Lib/bsddb/__init__.py b/Lib/bsddb/__init__.py
index 26e41b1..939700f 100644
--- a/Lib/bsddb/__init__.py
+++ b/Lib/bsddb/__init__.py
@@ -64,10 +64,10 @@
 
 #----------------------------------------------------------------------
 
-import sys, os, UserDict
+import sys, os, collections
 from weakref import ref
 
-class _iter_mixin(UserDict.DictMixin):
+class _iter_mixin(collections.MutableMapping):
     def _make_iter_cursor(self):
         cur = _DeadlockWrap(self.db.cursor)
         key = id(cur)
@@ -289,7 +289,7 @@
     def _cursor_refs(self):
         return self.db._cursor_refs
 
-class StringKeys(UserDict.DictMixin, _ExposedProperties):
+class StringKeys(collections.MutableMapping, _ExposedProperties):
     """Wrapper around DB object that automatically encodes
     all keys as UTF-8; the keys must be strings."""
 
@@ -357,7 +357,7 @@
     def sync(self):
         return self.db.sync()
 
-class StringValues(UserDict.DictMixin, _ExposedProperties):
+class StringValues(collections.MutableMapping, _ExposedProperties):
     """Wrapper around DB object that automatically encodes
     and decodes all values as UTF-8; input values must be strings."""
 
diff --git a/Lib/bsddb/dbobj.py b/Lib/bsddb/dbobj.py
index 987f773..4c0f125 100644
--- a/Lib/bsddb/dbobj.py
+++ b/Lib/bsddb/dbobj.py
@@ -24,10 +24,9 @@
 from . import db
 
 try:
-    from UserDict import DictMixin
+    from collections import MutableMapping
 except ImportError:
-    # DictMixin is new in Python 2.3
-    class DictMixin: pass
+    class MutableMapping: pass
 
 class DBEnv:
     def __init__(self, *args, **kwargs):
@@ -113,7 +112,7 @@
             return self._cobj.lsn_reset(*args, **kwargs)
 
 
-class DB(DictMixin):
+class DB(MutableMapping):
     def __init__(self, dbenv, *args, **kwargs):
         # give it the proper DBEnv C object that its expecting
         self._cobj = db.DB(dbenv._cobj, *args, **kwargs)
@@ -127,6 +126,8 @@
         self._cobj[key] = value
     def __delitem__(self, arg):
         del self._cobj[arg]
+    def __iter__(self):
+        return iter(self.keys())
 
     def append(self, *args, **kwargs):
         return self._cobj.append(*args, **kwargs)
diff --git a/Lib/bsddb/dbshelve.py b/Lib/bsddb/dbshelve.py
index 8264f2d..942ee17 100644
--- a/Lib/bsddb/dbshelve.py
+++ b/Lib/bsddb/dbshelve.py
@@ -38,12 +38,12 @@
     HIGHEST_PROTOCOL = pickle.HIGHEST_PROTOCOL
     def _dumps(object, protocol):
         return pickle.dumps(object, protocol=protocol)
-    from UserDict import DictMixin
+    from collections import MutableMapping
 else:
     HIGHEST_PROTOCOL = None
     def _dumps(object, protocol):
         return pickle.dumps(object, bin=protocol)
-    class DictMixin: pass
+    class MutableMapping: pass
 
 from . import db
 
@@ -90,7 +90,7 @@
 class DBShelveError(db.DBError): pass
 
 
-class DBShelf(DictMixin):
+class DBShelf(MutableMapping):
     """A shelf to hold pickled objects, built upon a bsddb DB object.  It
     automatically pickles/unpickles data objects going to/from the DB.
     """
@@ -141,6 +141,8 @@
         else:
             return self.db.keys()
 
+    def __iter__(self):
+        return iter(self.keys())
 
     def open(self, *args, **kwargs):
         self.db.open(*args, **kwargs)
