diff --git a/Lib/bsddb/test/test_compare.py b/Lib/bsddb/test/test_compare.py
index 045ee25..4cf578b 100644
--- a/Lib/bsddb/test/test_compare.py
+++ b/Lib/bsddb/test/test_compare.py
@@ -193,6 +193,7 @@
             errorOut = temp.getvalue()
             if not successRe.search(errorOut):
                 self.fail("unexpected stderr output:\n"+errorOut)
+        sys.exc_traceback = sys.last_traceback = None
 
     def _test_compare_function_exception (self):
         self.startTest ()
diff --git a/Lib/bsddb/test/test_replication.py b/Lib/bsddb/test/test_replication.py
index 0ac8844..fabc165 100644
--- a/Lib/bsddb/test/test_replication.py
+++ b/Lib/bsddb/test/test_replication.py
@@ -4,6 +4,7 @@
 import os
 import time
 import unittest
+import weakref
 
 from test_all import db, test_support, have_threads, verbose, \
         get_new_environment_path, get_new_database_path
@@ -34,13 +35,16 @@
                 | db.DB_INIT_LOG | db.DB_INIT_MPOOL | db.DB_INIT_LOCK |
                 db.DB_INIT_REP | db.DB_RECOVER | db.DB_THREAD, 0666)
 
+        wr = weakref.ref(self)
         self.confirmed_master=self.client_startupdone=False
         def confirmed_master(a,b,c) :
             if b==db.DB_EVENT_REP_MASTER :
+                self = wr()
                 self.confirmed_master=True
 
         def client_startupdone(a,b,c) :
             if b==db.DB_EVENT_REP_STARTUPDONE :
+                self = wr()
                 self.client_startupdone=True
 
         self.dbenvMaster.set_event_notify(confirmed_master)
@@ -215,12 +219,15 @@
 class DBBaseReplication(DBReplicationManager):
     def setUp(self) :
         DBReplicationManager.setUp(self)
+        wr = weakref.ref(self)
         def confirmed_master(a,b,c) :
             if (b == db.DB_EVENT_REP_MASTER) or (b == db.DB_EVENT_REP_ELECTED) :
+                self = wr()
                 self.confirmed_master = True
 
         def client_startupdone(a,b,c) :
             if b == db.DB_EVENT_REP_STARTUPDONE :
+                self = wr()
                 self.client_startupdone = True
 
         self.dbenvMaster.set_event_notify(confirmed_master)
@@ -233,9 +240,11 @@
         # There are only two nodes, so we don't need to
         # do any routing decision
         def m2c(dbenv, control, rec, lsnp, envid, flags) :
+            self = wr()
             self.m2c.put((control, rec))
 
         def c2m(dbenv, control, rec, lsnp, envid, flags) :
+            self = wr()
             self.c2m.put((control, rec))
 
         self.dbenvMaster.rep_set_transport(13,m2c)
@@ -252,10 +261,12 @@
         #self.dbenvClient.set_verbose(db.DB_VERB_FILEOPS_ALL, True)
 
         def thread_master() :
+            self = wr()
             return self.thread_do(self.dbenvMaster, self.c2m, 3,
                     self.master_doing_election, True)
 
         def thread_client() :
+            self = wr()
             return self.thread_do(self.dbenvClient, self.m2c, 13,
                     self.client_doing_election, False)
 
@@ -408,6 +419,7 @@
                                     break
                                 except db.DBRepUnavailError :
                                     pass
+
                         if not election_status[0] and not self.confirmed_master :
                             from threading import Thread
                             election_status[0] = True
diff --git a/Misc/NEWS b/Misc/NEWS
index 319d128..9729699 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -35,7 +35,7 @@
 Library
 -------
 
-- Issue #1729305: Fix doctest to handle encode error with "backsplashreplace".
+- Issue #1729305: Fix doctest to handle encode error with "backslashreplace".
 
 - Issue #691291: codecs.open() should not convert end of lines on reading and
   writing.
@@ -83,6 +83,8 @@
 Extension Modules
 -----------------
 
+- Issue #7808: Fix reference leaks in _bsddb and related tests.
+
 - Issue #6544: fix a reference leak in the kqueue implementation's error
   handling.
 
diff --git a/Modules/_bsddb.c b/Modules/_bsddb.c
index 149e43d..5aedfca 100644
--- a/Modules/_bsddb.c
+++ b/Modules/_bsddb.c
@@ -2382,8 +2382,6 @@
 
 	args = BuildValue_SS(leftKey->data, leftKey->size, rightKey->data, rightKey->size);
 	if (args != NULL) {
-		/* XXX(twouters) I highly doubt this INCREF is correct */
-		Py_INCREF(self);
 		result = PyEval_CallObject(self->btCompareCallback, args);
 	}
 	if (args == NULL || result == NULL) {
@@ -2432,10 +2430,12 @@
     if (result == NULL)
         return NULL;
     if (!NUMBER_Check(result)) {
+	Py_DECREF(result);
 	PyErr_SetString(PyExc_TypeError,
 		        "callback MUST return an int");
 	return NULL;
     } else if (NUMBER_AsLong(result) != 0) {
+	Py_DECREF(result);
 	PyErr_SetString(PyExc_TypeError,
 		        "callback failed to return 0 on two empty strings");
 	return NULL;
@@ -5776,6 +5776,8 @@
             free(listp);
             return NULL;
         }
+        Py_DECREF(key);
+        Py_DECREF(tuple);
     }
     free(listp);
     return stats;
@@ -7578,4 +7580,3 @@
     return PyInit__bsddb();   /* Note the two underscores */
 #endif
 }
-
