diff --git a/TODO.txt b/TODO.txt
index 7b33ba4..cc74b66 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -5,7 +5,6 @@ Signature
 
 References
 ==========
-- Free the git_reference struct.
 - Wrap missing functions: git_reference_foreach, git_reference_is_packed,
   git_reference_reload
 
diff --git a/pygit2.c b/pygit2.c
index c9b41d0..ae1fcb1 100644
--- a/pygit2.c
+++ b/pygit2.c
@@ -845,7 +845,7 @@ Repository_create_reference(Repository *self,  PyObject *args)
     /* 2- Create the reference */
     err = git_reference_create_oid(&c_reference, self->repo, c_name, &oid, 0);
     if (err < 0)
-      return Error_set(err);
+        return Error_set(err);
 
     /* 3- Make an instance of Reference and return it */
     return wrap_reference(c_reference);
@@ -2364,6 +2364,13 @@ static PyTypeObject WalkerType = {
     0,                                         /* tp_new            */
 };
 
+static void
+Reference_dealloc(Reference *self)
+{
+    git_reference_free(self->reference);
+    PyObject_Del(self);
+}
+
 static PyObject *
 Reference_delete(Reference *self, PyObject *args)
 {
@@ -2569,7 +2576,7 @@ static PyTypeObject ReferenceType = {
     "pygit2.Reference",                        /* tp_name           */
     sizeof(Reference),                         /* tp_basicsize      */
     0,                                         /* tp_itemsize       */
-    0,                                         /* tp_dealloc        */
+    (destructor)Reference_dealloc,             /* tp_dealloc        */
     0,                                         /* tp_print          */
     0,                                         /* tp_getattr        */
     0,                                         /* tp_setattr        */