diff --git a/kwant/solvers/sparse.py b/kwant/solvers/sparse.py
index 559d17c958ea16537086be8f795e5aa055245b9e..c0568011ffe7a6d04d8ff8c5ae44ba6ac66e1fdb 100644
--- a/kwant/solvers/sparse.py
+++ b/kwant/solvers/sparse.py
@@ -8,6 +8,20 @@ import scipy.sparse as sp
 import scipy.sparse.linalg as spl
 from kwant import physics, system
 
+# This patches a memory leak in scipy:
+# http://projects.scipy.org/scipy/ticket/1597
+#
+# TODO: Remove this code once it is likely that the official bug fix has
+# reached all of our users.
+def del_for_umfpackcontext(self):
+    self.free()
+try:
+    if not hasattr(spl.dsolve.umfpack.UmfpackContext, '__del__'):
+        spl.dsolve.umfpack.UmfpackContext.__del__ = del_for_umfpackcontext
+except:
+    pass
+del del_for_umfpackcontext
+
 def make_linear_sys(sys, out_leads, in_leads, energy=0,
                     force_realspace=False):
     """