diff --git a/pygit2.c b/pygit2.c
index d0b8877..046148e 100644
--- a/pygit2.c
+++ b/pygit2.c
@@ -1703,21 +1703,27 @@ TreeBuilder_dealloc(TreeBuilder* self)
 }
 
 static PyObject *
-TreeBuilder_insert(TreeBuilder *self, TreeEntry *py_tentry)
+TreeBuilder_insert(TreeBuilder *self, PyObject *args)
 {
-    int err, attr;
-    const git_oid *oid;
+    PyObject *py_oid;
+    int len, err, attr;
+    git_oid oid;
     const char *fname;
-    const git_tree_entry *tentry;
 
-    tentry = py_tentry->entry;
-    fname = git_tree_entry_name(tentry);
-    oid = git_tree_entry_id(tentry);
-    attr = git_tree_entry_attributes(tentry);
+    if (!PyArg_ParseTuple(args, "sOi", &fname, &py_oid, &attr)) {
+        return NULL;
+    }
 
-    err = git_treebuilder_insert(NULL, self->bld, fname, oid, attr);
-    if (err < 0)
-        return Error_set(err);
+    len = py_str_to_git_oid(py_oid, &oid);
+    if (len < 0) {
+        return NULL;
+    }
+
+    err = git_treebuilder_insert(NULL, self->bld, fname, &oid, attr);
+    if (err < 0) {
+        Error_set(err);
+        return NULL;
+    }
 
     Py_RETURN_NONE;
 }
@@ -1760,7 +1766,7 @@ TreeBuilder_clear(TreeBuilder *self)
 }
 
 static PyMethodDef TreeBuilder_methods[] = {
-    {"insert", (PyCFunction)TreeBuilder_insert, METH_O,
+    {"insert", (PyCFunction)TreeBuilder_insert, METH_VARARGS,
      "Insert or replace an entry in the treebuilder"},
     {"write", (PyCFunction)TreeBuilder_write, METH_NOARGS,
      "Write the tree to the given repository"},
diff --git a/test/test_tree.py b/test/test_tree.py
index 6c1a916..c9f41cc 100644
--- a/test/test_tree.py
+++ b/test/test_tree.py
@@ -1,4 +1,4 @@
-# -*- coding: UTF-8 -*-
+# -*- coding: utf-8 -*-
 #
 # Copyright 2010 Google, Inc.
 #
@@ -83,24 +83,15 @@ class TreeTest(utils.BareRepoTestCase):
     # TODO This test worked with libgit2 v0.10.0, update to use the
     # tree-builder
     def xtest_new_tree(self):
-        tree = pygit2.Tree(self.repo)
-        self.assertEqual(0, len(tree))
-        tree.add_entry('1' * 40, 'x', 0o0100644)
-        tree.add_entry('2' * 40, 'y', 0o0100755)
-        self.assertEqual(2, len(tree))
+        b = self.repo.TreeBuilder()
+        b.insert('1' * 40, 'x', 0o0100644)
+        b.insert('2' * 40, 'y', 0o0100755)
+        tree = self.repo[b.write()]
+
         self.assertTrue('x' in tree)
         self.assertTrue('y' in tree)
         self.assertRaisesWithArg(KeyError, '1' * 40, tree['x'].to_object)
 
-        tree.add_entry('3' * 40, 'z1', 0o0100644)
-        tree.add_entry('4' * 40, 'z2', 0o0100644)
-        self.assertEqual(4, len(tree))
-        del tree['z1']
-        del tree[2]
-        self.assertEqual(2, len(tree))
-
-        self.assertEqual(None, tree.hex)
-        tree.write()
         contents = '100644 x\0%s100755 y\0%s' % ('\x11' * 20, '\x22' * 20)
         self.assertEqual((pygit2.GIT_OBJ_TREE, contents),
                          self.repo.read(tree.hex))
diff --git a/test/test_treebuilder.py b/test/test_treebuilder.py
index f9628b1..455f4f4 100644
--- a/test/test_treebuilder.py
+++ b/test/test_treebuilder.py
@@ -60,7 +60,7 @@ class TreeBuilderTest(utils.BareRepoTestCase):
         tree = self.repo[TREE_SHA]
         bld = self.repo.TreeBuilder()
         for e in tree:
-            bld.insert(e)
+            bld.insert(e.name, e.hex, e.attributes)
 
         result = bld.write()
         self.assertEqual(tree.oid, result)