diff --git a/Lib/bsddb/dbtables.py b/Lib/bsddb/dbtables.py
index b5fa9eb..c1628ab 100644
--- a/Lib/bsddb/dbtables.py
+++ b/Lib/bsddb/dbtables.py
@@ -27,14 +27,10 @@
 from bsddb.db import *
 
 # All table names, row names etc. must be ASCII strings
+# However, rowids, when represented as strings, are latin-1 encoded
 def _E(s):
     return s.encode("ascii")
 
-# Yet, rowid are arbitrary bytes; if there is a need to hash
-# them, convert them to Latin-1 first
-def _D(s):
-    return s.decode("latin-1")
-
 # XXX(nnorwitz): is this correct? DBIncompleteError is conditional in _bsddb.c
 try:
     DBIncompleteError
@@ -55,22 +51,22 @@
 
 class ExactCond(Cond):
     """Acts as an exact match condition function"""
-    def __init__(self, strtomatch):
-        self.strtomatch = strtomatch
+    def __init__(self, strtomatch, encoding="utf-8"):
+        self.strtomatch = strtomatch.encode(encoding)
     def __call__(self, s):
         return s == self.strtomatch
 
 class PrefixCond(Cond):
     """Acts as a condition function for matching a string prefix"""
-    def __init__(self, prefix):
-        self.prefix = prefix
+    def __init__(self, prefix, encoding="utf-8"):
+        self.prefix = prefix.encode(encoding)
     def __call__(self, s):
         return s[:len(self.prefix)] == self.prefix
 
 class PostfixCond(Cond):
     """Acts as a condition function for matching a string postfix"""
-    def __init__(self, postfix):
-        self.postfix = postfix
+    def __init__(self, postfix, encoding="utf-8"):
+        self.postfix = postfix.encode(encoding)
     def __call__(self, s):
         return s[-len(self.postfix):] == self.postfix
 
@@ -80,7 +76,7 @@
     string.  Case insensitive and % signs are wild cards.
     This isn't perfect but it should work for the simple common cases.
     """
-    def __init__(self, likestr, re_flags=re.IGNORECASE):
+    def __init__(self, likestr, re_flags=re.IGNORECASE, encoding="utf-8"):
         # escape python re characters
         chars_to_escape = '.*+()[]?'
         for char in chars_to_escape :
@@ -88,8 +84,9 @@
         # convert %s to wildcards
         self.likestr = likestr.replace('%', '.*')
         self.re = re.compile('^'+self.likestr+'$', re_flags)
+        self.encoding = encoding
     def __call__(self, s):
-        return self.re.match(s)
+        return self.re.match(s.decode(self.encoding))
 
 #
 # keys used to store database metadata
@@ -264,10 +261,11 @@
             txn.commit()
             txn = None
         except DBError as dberror:
+            raise TableDBError, dberror.args[1]
+        finally:
             if txn:
                 txn.abort()
-            raise TableDBError, dberror.args[1]
-
+                txn = None
 
     def ListTableColumns(self, table):
         """Return a list of columns in the given table.
@@ -342,9 +340,10 @@
 
                 self.__load_column_info(table)
             except DBError as dberror:
+                raise TableDBError, dberror.args[1]
+            finally:
                 if txn:
                     txn.abort()
-                raise TableDBError, dberror.args[1]
 
 
     def __load_column_info(self, table) :
@@ -419,7 +418,11 @@
             if txn:
                 txn.abort()
                 self.db.delete(_rowid_key(table, rowid))
+                txn = None
             raise TableDBError, dberror.args[1], info[2]
+        finally:
+            if txn:
+                txn.abort()
 
 
     def Modify(self, table, conditions={}, mappings={}):
@@ -465,10 +468,9 @@
                         txn = None
 
                 # catch all exceptions here since we call unknown callables
-                except:
+                finally:
                     if txn:
                         txn.abort()
-                    raise
 
         except DBError as dberror:
             raise TableDBError, dberror.args[1]
@@ -493,23 +495,23 @@
                     for column in columns:
                         # delete the data key
                         try:
-                            self.db.delete(_data_key(table, column, rowid),
+                            self.db.delete(_data_key(table, column,
+                                                     rowid.encode("latin-1")),
                                            txn)
                         except DBNotFoundError:
                             # XXXXXXX column may not exist, assume no error
                             pass
 
                     try:
-                        self.db.delete(_rowid_key(table, rowid), txn)
+                        self.db.delete(_rowid_key(table, rowid.encode("latin-1")), txn)
                     except DBNotFoundError:
                         # XXXXXXX row key somehow didn't exist, assume no error
                         pass
                     txn.commit()
                     txn = None
-                except DBError as dberror:
+                finally:
                     if txn:
                         txn.abort()
-                    raise
         except DBError as dberror:
             raise TableDBError, dberror.args[1]
 
@@ -603,7 +605,7 @@
                 key, data = cur.set_range(searchkey)
                 while key[:len(searchkey)] == searchkey:
                     # extract the rowid from the key
-                    rowid = _D(key[-_rowid_str_len:])
+                    rowid = key[-_rowid_str_len:].decode("latin-1")
 
                     if rowid not in rejected_rowids:
                         # if no condition was specified or the condition
@@ -706,6 +708,7 @@
                 del self.__tablecolumns[table]
 
         except DBError as dberror:
+            raise TableDBError, dberror.args[1]
+        finally:
             if txn:
                 txn.abort()
-            raise TableDBError, dberror.args[1]
diff --git a/Lib/bsddb/test/test_dbtables.py b/Lib/bsddb/test/test_dbtables.py
index 2b9796d..970f253 100644
--- a/Lib/bsddb/test/test_dbtables.py
+++ b/Lib/bsddb/test/test_dbtables.py
@@ -79,7 +79,7 @@
         values = list(values)
 
         colval = pickle.loads(values[0][colname])
-        assert(colval > 3.141 and colval < 3.142)
+        self.assertTrue(colval > 3.141 and colval < 3.142)
 
 
     def test02(self):
@@ -105,11 +105,11 @@
             conditions={col0: lambda x: pickle.loads(x) >= 8})
         values = list(values)
 
-        assert len(values) == 2
-        if values[0]['Species'] == 'Penguin' :
-            assert values[1]['Species'] == 'SR-71A Blackbird'
-        elif values[0]['Species'] == 'SR-71A Blackbird' :
-            assert values[1]['Species'] == 'Penguin'
+        self.assertEquals(len(values), 2)
+        if values[0]['Species'] == b'Penguin' :
+            self.assertEquals(values[1]['Species'], b'SR-71A Blackbird')
+        elif values[0]['Species'] == b'SR-71A Blackbird' :
+            self.assertEquals(values[1]['Species'], b'Penguin')
         else :
             if verbose:
                 print("values= %r" % (values,))
@@ -139,13 +139,13 @@
                             {'a': "",
                              'e': pickle.dumps([{4:5, 6:7}, 'foo'], 1),
                              'f': "Zero"})
-            assert 0
+            self.fail("exception not raised")
         except dbtables.TableDBError:
             pass
 
         try:
             self.tdb.Select(tabname, [], conditions={'foo': '123'})
-            assert 0
+            self.fail("exception not raised")
         except dbtables.TableDBError:
             pass
 
@@ -174,7 +174,7 @@
         values = self.tdb.Select(tabname, ['b', 'a', 'd'],
             conditions={'e': re.compile('wuzzy').search,
                         'a': re.compile('^[0-9]+$').match})
-        assert len(values) == 2
+        self.assertEquals(len(values), 2)
 
         # now lets delete one of them and try again
         self.tdb.Delete(tabname, conditions={'b': dbtables.ExactCond('good')})
@@ -182,14 +182,14 @@
             tabname, ['a', 'd', 'b'],
             conditions={'e': dbtables.PrefixCond('Fuzzy')})
         values = list(values)
-        assert len(values) == 1
-        assert values[0]['d'] == None
+        self.assertEquals(len(values), 1)
+        self.assertEquals(values[0]['d'], None)
 
         values = self.tdb.Select(tabname, ['b'],
-            conditions={'c': lambda c: c == 'meep'})
+            conditions={'c': lambda c: c.decode("ascii") == 'meep'})
         values = list(values)
-        assert len(values) == 1
-        assert values[0]['b'] == "bad"
+        self.assertEquals(len(values), 1)
+        self.assertEquals(values[0]['b'], b"bad")
 
 
     def test04_MultiCondSelect(self):
@@ -205,7 +205,7 @@
                             {'a': "",
                              'e': pickle.dumps([{4:5, 6:7}, 'foo'], 1),
                              'f': "Zero"})
-            assert 0
+            self.fail("exception not raised")
         except dbtables.TableDBError:
             pass
 
@@ -229,7 +229,7 @@
                         'a': dbtables.ExactCond('A'),
                         'd': dbtables.PrefixCond('-')
                        } )
-        assert len(values) == 0, values
+        self.assertEquals(len(values), 0, values)
 
 
     def test_CreateOrExtend(self):
@@ -242,7 +242,7 @@
                             {'taste': 'crap',
                              'filling': 'no',
                              'is it Guinness?': 'no'})
-            assert 0, "Insert should've failed due to bad column name"
+            self.fail("Insert should've failed due to bad column name")
         except:
             pass
         self.tdb.CreateOrExtendTable(tabname,
@@ -277,17 +277,17 @@
             tabname, ['p', 'e'],
             conditions={'e': dbtables.PrefixCond('the l')})
         values = list(values)
-        assert len(values) == 2, values
-        assert values[0]['e'] == values[1]['e'], values
-        assert values[0]['p'] != values[1]['p'], values
+        self.assertEquals(len(values), 2)
+        self.assertEquals(values[0]['e'], values[1]['e'])
+        self.assertNotEquals(values[0]['p'], values[1]['p'])
 
         values = self.tdb.Select(
             tabname, ['d', 'a'],
             conditions={'a': dbtables.LikeCond('%aardvark%')})
         values = list(values)
-        assert len(values) == 1, values
-        assert values[0]['d'] == "is for dog", values
-        assert values[0]['a'] == "is for aardvark", values
+        self.assertEquals(len(values), 1)
+        self.assertEquals(values[0]['d'], b"is for dog")
+        self.assertEquals(values[0]['a'], b"is for aardvark")
 
         values = self.tdb.Select(tabname, None,
                                  {'b': dbtables.Cond(),
@@ -297,9 +297,9 @@
                                   'c':dbtables.PrefixCond('is for'),
                                   'p':lambda s: not s})
         values = list(values)
-        assert len(values) == 1, values
-        assert values[0]['d'] == "is for dog", values
-        assert values[0]['a'] == "is for aardvark", values
+        self.assertEquals(len(values), 1)
+        self.assertEquals(values[0]['d'], b"is for dog")
+        self.assertEquals(values[0]['a'], b"is for aardvark")
 
     def test_Delete(self):
         tabname = "test_Delete"
@@ -315,7 +315,7 @@
         self.tdb.Delete(tabname, conditions={'x': dbtables.PrefixCond('X')})
         values = self.tdb.Select(tabname, ['y'],
                                  conditions={'x': dbtables.PrefixCond('X')})
-        assert len(values) == 0
+        self.assertEquals(len(values), 0)
 
     def test_Modify(self):
         tabname = "test_Modify"
@@ -362,26 +362,26 @@
             tabname, None,
             conditions={'Type': dbtables.ExactCond('Unknown')})
         values = list(values)
-        assert len(values) == 1, values
-        assert values[0]['Name'] == None, values
-        assert values[0]['Access'] == None, values
+        self.assertEquals(len(values), 1)
+        self.assertEquals(values[0]['Name'], None)
+        self.assertEquals(values[0]['Access'], None)
 
         # Modify value by select conditions
         values = self.tdb.Select(
             tabname, None,
             conditions={'Name': dbtables.ExactCond('Nifty.MP3')})
         values = list(values)
-        assert len(values) == 1, values
-        assert values[0]['Type'] == "MP3", values
-        assert values[0]['Access'] == "2", values
+        self.assertEquals(len(values), 1)
+        self.assertEquals(values[0]['Type'], b"MP3")
+        self.assertEquals(values[0]['Access'], b"2")
 
         # Make sure change applied only to select conditions
         values = self.tdb.Select(
             tabname, None, conditions={'Name': dbtables.LikeCond('%doc%')})
         values = list(values)
-        assert len(values) == 1, values
-        assert values[0]['Type'] == "Word", values
-        assert values[0]['Access'] == "9", values
+        self.assertEquals(len(values), 1)
+        self.assertEquals(values[0]['Type'], b"Word")
+        self.assertEquals(values[0]['Access'], b"9")
 
 
 def test_suite():
diff --git a/Lib/test/test_bsddb3.py b/Lib/test/test_bsddb3.py
index 39d8cc70..fe0469c 100644
--- a/Lib/test/test_bsddb3.py
+++ b/Lib/test/test_bsddb3.py
@@ -24,8 +24,7 @@
 def suite():
     try:
         # this is special, it used to segfault the interpreter
-        #import bsddb.test.test_1413192
-        pass
+        import bsddb.test.test_1413192
     except:
         for f in ['__db.001', '__db.002', '__db.003', 'log.0000000001']:
             unlink(f)
