More external API cleanup
diff --git a/CMakeLists.txt b/CMakeLists.txt
index bde872f..5d77466 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -204,7 +204,7 @@
 
 	ADD_CUSTOM_COMMAND(
 		OUTPUT ${CLAR_PATH}/clar_main.c ${CLAR_PATH}/clar.h
-		COMMAND ${PYTHON_EXECUTABLE} clar -vtap .
+		COMMAND ${PYTHON_EXECUTABLE} clar .
 		DEPENDS ${CLAR_PATH}/clar ${SRC_TEST}
 		WORKING_DIRECTORY ${CLAR_PATH}
 	)
diff --git a/include/git2/attr.h b/include/git2/attr.h
index 2de9f4b..b1a7e0e 100644
--- a/include/git2/attr.h
+++ b/include/git2/attr.h
@@ -183,6 +183,8 @@
 	size_t num_attr,
 	const char **names);
 
+typedef int (*git_attr_foreach_cb)(const char *name, const char *value, void *payload);
+
 /**
  * Loop over all the git attributes for a path.
  *
@@ -204,7 +206,7 @@
 	git_repository *repo,
 	uint32_t flags,
 	const char *path,
-	int (*callback)(const char *name, const char *value, void *payload),
+	git_attr_foreach_cb callback,
 	void *payload);
 
 /**
diff --git a/include/git2/blob.h b/include/git2/blob.h
index f0719f1..a68c78b 100644
--- a/include/git2/blob.h
+++ b/include/git2/blob.h
@@ -68,6 +68,17 @@
 	git_object_free((git_object *) blob);
 }
 
+/**
+ * Get the id of a blob.
+ *
+ * @param blob a previously loaded blob.
+ * @return SHA1 hash for this blob.
+ */
+GIT_INLINE(const git_oid *) git_blob_id(const git_blob *blob)
+{
+	return git_object_id((const git_object *)blob);
+}
+
 
 /**
  * Get a read-only buffer with the raw content of a blob.
@@ -88,32 +99,35 @@
  * @param blob pointer to the blob
  * @return size on bytes
  */
-GIT_EXTERN(size_t) git_blob_rawsize(git_blob *blob);
+GIT_EXTERN(git_off_t) git_blob_rawsize(git_blob *blob);
 
 /**
  * Read a file from the working folder of a repository
  * and write it to the Object Database as a loose blob
  *
- * @param oid return the id of the written blob
+ * @param id return the id of the written blob
  * @param repo repository where the blob will be written.
  *	this repository cannot be bare
- * @param path file from which the blob will be created,
+ * @param relative_path file from which the blob will be created,
  *	relative to the repository's working dir
  * @return 0 or an error code
  */
-GIT_EXTERN(int) git_blob_create_fromfile(git_oid *oid, git_repository *repo, const char *path);
+GIT_EXTERN(int) git_blob_create_fromworkdir(git_oid *id, git_repository *repo, const char *relative_path);
 
 /**
  * Read a file from the filesystem and write its content
  * to the Object Database as a loose blob
  *
- * @param oid return the id of the written blob
+ * @param id return the id of the written blob
  * @param repo repository where the blob will be written.
  *	this repository can be bare or not
  * @param path file from which the blob will be created
  * @return 0 or an error code
  */
-GIT_EXTERN(int) git_blob_create_fromdisk(git_oid *oid, git_repository *repo, const char *path);
+GIT_EXTERN(int) git_blob_create_fromdisk(git_oid *id, git_repository *repo, const char *path);
+
+
+typedef int (*git_blob_chunk_cb)(char *content, size_t max_length, void *payload);
 
 /**
  * Write a loose blob to the Object Database from a
@@ -141,7 +155,7 @@
  *  - When an error occurs, the callback should return -1.
  *
  *
- * @param oid Return the id of the written blob
+ * @param id Return the id of the written blob
  *
  * @param repo repository where the blob will be written.
  * This repository can be bare or not.
@@ -152,10 +166,10 @@
  * @return GIT_SUCCESS or an error code
  */
 GIT_EXTERN(int) git_blob_create_fromchunks(
-	git_oid *oid,
+	git_oid *id,
 	git_repository *repo,
 	const char *hintpath,
-	int (*source_cb)(char *content, size_t max_length, void *payload),
+	git_blob_chunk_cb callback,
 	void *payload);
 
 /**
diff --git a/include/git2/branch.h b/include/git2/branch.h
index f06609a..c9ae9cc 100644
--- a/include/git2/branch.h
+++ b/include/git2/branch.h
@@ -29,7 +29,7 @@
  *
  * The returned reference must be freed by the user.
  *
- * @param branch_out Pointer where to store the underlying reference.
+ * @param out Pointer where to store the underlying reference.
  *
  * @param branch_name Name for the branch; this name is
  * validated for consistency. It should also not conflict with
@@ -47,10 +47,10 @@
  * pointing to the provided target commit.
  */
 GIT_EXTERN(int) git_branch_create(
-		git_reference **branch_out,
+		git_reference **out,
 		git_repository *repo,
 		const char *branch_name,
-		const git_object *target,
+		const git_commit *target,
 		int force);
 
 /**
@@ -113,7 +113,7 @@
  *
  * The generated reference must be freed by the user.
  *
- * @param branch_out pointer to the looked-up branch reference
+ * @param out pointer to the looked-up branch reference
  *
  * @param repo the repository to look up the branch
  *
@@ -127,7 +127,7 @@
  * exists, otherwise an error code.
  */
 GIT_EXTERN(int) git_branch_lookup(
-		git_reference **branch_out,
+		git_reference **out,
 		git_repository *repo,
 		const char *branch_name,
 		git_branch_t branch_type);
@@ -136,7 +136,7 @@
  * Return the reference supporting the remote tracking branch,
  * given a local branch reference.
  *
- * @param tracking_out Pointer where to store the retrieved
+ * @param out Pointer where to store the retrieved
  * reference.
  *
  * @param branch Current underlying reference of the branch.
@@ -145,7 +145,7 @@
  * reference exists, otherwise an error code.
  */
 GIT_EXTERN(int) git_branch_tracking(
-		git_reference **tracking_out,
+		git_reference **out,
 		git_reference *branch);
 
 /**
diff --git a/include/git2/checkout.h b/include/git2/checkout.h
index 27ecc71..bd988db 100644
--- a/include/git2/checkout.h
+++ b/include/git2/checkout.h
@@ -146,8 +146,12 @@
  * Checkout options structure
  *
  * Use zeros to indicate default settings.
+ * This needs to be initialized with the `GIT_CHECKOUT_OPTS_INIT` macro:
+ *
+ *		git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
  */
 typedef struct git_checkout_opts {
+	unsigned int version;
 	unsigned int checkout_strategy; /** default will be a dry run */
 
 	int disable_filters; /** don't apply filters like CRLF conversion */
@@ -182,6 +186,8 @@
 	git_strarray paths;
 } git_checkout_opts;
 
+#define GIT_CHECKOUT_OPTS_INIT {1, 0}
+
 /**
  * Updates files in the index and the working tree to match the content of the
  * commit pointed at by HEAD.
@@ -223,7 +229,7 @@
  */
 GIT_EXTERN(int) git_checkout_tree(
 	git_repository *repo,
-	git_object *treeish,
+	const git_object *treeish,
 	git_checkout_opts *opts);
 
 /** @} */
diff --git a/include/git2/clone.h b/include/git2/clone.h
index 7d8d321..2a02723 100644
--- a/include/git2/clone.h
+++ b/include/git2/clone.h
@@ -42,9 +42,9 @@
 		git_repository **out,
 		const char *origin_url,
 		const char *workdir_path,
+		git_checkout_opts *checkout_opts,
 		git_transfer_progress_callback fetch_progress_cb,
-		void *fetch_progress_payload,
-		git_checkout_opts *checkout_opts);
+		void *fetch_progress_payload);
 
 /**
  * Create a bare clone of a remote repository.
diff --git a/include/git2/commit.h b/include/git2/commit.h
index a159b79..872f691 100644
--- a/include/git2/commit.h
+++ b/include/git2/commit.h
@@ -76,7 +76,10 @@
  * @param commit a previously loaded commit.
  * @return object identity for the commit.
  */
-GIT_EXTERN(const git_oid *) git_commit_id(git_commit *commit);
+GIT_INLINE(const git_oid *) git_commit_id(const git_commit *commit)
+{
+	return git_object_id((const git_object *)commit);
+}
 
 /**
  * Get the encoding for the message of a commit,
@@ -88,7 +91,7 @@
  * @param commit a previously loaded commit.
  * @return NULL, or the encoding
  */
-GIT_EXTERN(const char *) git_commit_message_encoding(git_commit *commit);
+GIT_EXTERN(const char *) git_commit_message_encoding(const git_commit *commit);
 
 /**
  * Get the full message of a commit.
@@ -96,7 +99,7 @@
  * @param commit a previously loaded commit.
  * @return the message of a commit
  */
-GIT_EXTERN(const char *) git_commit_message(git_commit *commit);
+GIT_EXTERN(const char *) git_commit_message(const git_commit *commit);
 
 /**
  * Get the commit time (i.e. committer time) of a commit.
@@ -104,7 +107,7 @@
  * @param commit a previously loaded commit.
  * @return the time of a commit
  */
-GIT_EXTERN(git_time_t) git_commit_time(git_commit *commit);
+GIT_EXTERN(git_time_t) git_commit_time(const git_commit *commit);
 
 /**
  * Get the commit timezone offset (i.e. committer's preferred timezone) of a commit.
@@ -112,7 +115,7 @@
  * @param commit a previously loaded commit.
  * @return positive or negative timezone offset, in minutes from UTC
  */
-GIT_EXTERN(int) git_commit_time_offset(git_commit *commit);
+GIT_EXTERN(int) git_commit_time_offset(const git_commit *commit);
 
 /**
  * Get the committer of a commit.
@@ -120,7 +123,7 @@
  * @param commit a previously loaded commit.
  * @return the committer of a commit
  */
-GIT_EXTERN(const git_signature *) git_commit_committer(git_commit *commit);
+GIT_EXTERN(const git_signature *) git_commit_committer(const git_commit *commit);
 
 /**
  * Get the author of a commit.
@@ -128,7 +131,7 @@
  * @param commit a previously loaded commit.
  * @return the author of a commit
  */
-GIT_EXTERN(const git_signature *) git_commit_author(git_commit *commit);
+GIT_EXTERN(const git_signature *) git_commit_author(const git_commit *commit);
 
 /**
  * Get the tree pointed to by a commit.
@@ -137,7 +140,7 @@
  * @param commit a previously loaded commit.
  * @return 0 or an error code
  */
-GIT_EXTERN(int) git_commit_tree(git_tree **tree_out, git_commit *commit);
+GIT_EXTERN(int) git_commit_tree(git_tree **tree_out, const git_commit *commit);
 
 /**
  * Get the id of the tree pointed to by a commit. This differs from
@@ -147,7 +150,7 @@
  * @param commit a previously loaded commit.
  * @return the id of tree pointed to by commit.
  */
-GIT_EXTERN(const git_oid *) git_commit_tree_oid(git_commit *commit);
+GIT_EXTERN(const git_oid *) git_commit_tree_id(const git_commit *commit);
 
 /**
  * Get the number of parents of this commit
@@ -155,17 +158,17 @@
  * @param commit a previously loaded commit.
  * @return integer of count of parents
  */
-GIT_EXTERN(unsigned int) git_commit_parentcount(git_commit *commit);
+GIT_EXTERN(unsigned int) git_commit_parentcount(const git_commit *commit);
 
 /**
  * Get the specified parent of the commit.
  *
- * @param parent Pointer where to store the parent commit
+ * @param out Pointer where to store the parent commit
  * @param commit a previously loaded commit.
  * @param n the position of the parent (from 0 to `parentcount`)
  * @return 0 or an error code
  */
-GIT_EXTERN(int) git_commit_parent(git_commit **parent, git_commit *commit, unsigned int n);
+GIT_EXTERN(int) git_commit_parent(git_commit **out, git_commit *commit, unsigned int n);
 
 /**
  * Get the oid of a specified parent for a commit. This is different from
@@ -176,7 +179,7 @@
  * @param n the position of the parent (from 0 to `parentcount`)
  * @return the id of the parent, NULL on error.
  */
-GIT_EXTERN(const git_oid *) git_commit_parent_oid(git_commit *commit, unsigned int n);
+GIT_EXTERN(const git_oid *) git_commit_parent_id(git_commit *commit, unsigned int n);
 
 /**
  * Get the commit object that is the <n>th generation ancestor
@@ -204,7 +207,7 @@
  * The message will not be cleaned up. This can be achieved
  * through `git_message_prettify()`.
  *
- * @param oid Pointer where to store the OID of the
+ * @param id Pointer where to store the OID of the
  *	newly created commit
  *
  * @param repo Repository where to store the commit
@@ -245,7 +248,7 @@
  *	the given reference will be updated to point to it
  */
 GIT_EXTERN(int) git_commit_create(
-		git_oid *oid,
+		git_oid *id,
 		git_repository *repo,
 		const char *update_ref,
 		const git_signature *author,
@@ -273,7 +276,7 @@
  * @see git_commit_create
  */
 GIT_EXTERN(int) git_commit_create_v(
-		git_oid *oid,
+		git_oid *id,
 		git_repository *repo,
 		const char *update_ref,
 		const git_signature *author,
diff --git a/include/git2/diff.h b/include/git2/diff.h
index 47bfa5f..f925cbe 100644
--- a/include/git2/diff.h
+++ b/include/git2/diff.h
@@ -106,6 +106,7 @@
  * - max_size: maximum blob size to diff, above this treated as binary
  */
 typedef struct {
+	unsigned int version;		/**< version for the struct */
 	uint32_t flags;				/**< defaults to GIT_DIFF_NORMAL */
 	uint16_t context_lines;		/**< defaults to 3 */
 	uint16_t interhunk_lines;	/**< defaults to 0 */
@@ -186,7 +187,7 @@
 /**
  * When iterating over a diff, callback that will be made per file.
  */
-typedef int (*git_diff_file_fn)(
+typedef int (*git_diff_file_cb)(
 	void *cb_data,
 	const git_diff_delta *delta,
 	float progress);
@@ -204,7 +205,7 @@
 /**
  * When iterating over a diff, callback that will be made per hunk.
  */
-typedef int (*git_diff_hunk_fn)(
+typedef int (*git_diff_hunk_cb)(
 	void *cb_data,
 	const git_diff_delta *delta,
 	const git_diff_range *range,
@@ -215,20 +216,20 @@
  * Line origin constants.
  *
  * These values describe where a line came from and will be passed to
- * the git_diff_data_fn when iterating over a diff.  There are some
+ * the git_diff_data_cb when iterating over a diff.  There are some
  * special origin constants at the end that are used for the text
  * output callbacks to demarcate lines that are actually part of
  * the file or hunk headers.
  */
 typedef enum {
-	/* These values will be sent to `git_diff_data_fn` along with the line */
+	/* These values will be sent to `git_diff_data_cb` along with the line */
 	GIT_DIFF_LINE_CONTEXT   = ' ',
 	GIT_DIFF_LINE_ADDITION  = '+',
 	GIT_DIFF_LINE_DELETION  = '-',
 	GIT_DIFF_LINE_ADD_EOFNL = '\n', /**< Removed line w/o LF & added one with */
 	GIT_DIFF_LINE_DEL_EOFNL = '\0', /**< LF was removed at end of file */
 
-	/* The following values will only be sent to a `git_diff_data_fn` when
+	/* The following values will only be sent to a `git_diff_data_cb` when
 	 * the content of a diff is being formatted (eg. through
 	 * git_diff_print_patch() or git_diff_print_compact(), for instance).
 	 */
@@ -245,7 +246,7 @@
  * of text.  This uses some extra GIT_DIFF_LINE_... constants for output
  * of lines of file and hunk headers.
  */
-typedef int (*git_diff_data_fn)(
+typedef int (*git_diff_data_cb)(
 	void *cb_data,
 	const git_diff_delta *delta,
 	const git_diff_range *range,
@@ -474,9 +475,9 @@
 GIT_EXTERN(int) git_diff_foreach(
 	git_diff_list *diff,
 	void *cb_data,
-	git_diff_file_fn file_cb,
-	git_diff_hunk_fn hunk_cb,
-	git_diff_data_fn line_cb);
+	git_diff_file_cb file_cb,
+	git_diff_hunk_cb hunk_cb,
+	git_diff_data_cb line_cb);
 
 /**
  * Iterate over a diff generating text output like "git diff --name-status".
@@ -492,7 +493,7 @@
 GIT_EXTERN(int) git_diff_print_compact(
 	git_diff_list *diff,
 	void *cb_data,
-	git_diff_data_fn print_cb);
+	git_diff_data_cb print_cb);
 
 /**
  * Look up the single character abbreviation for a delta status code.
@@ -528,7 +529,7 @@
 GIT_EXTERN(int) git_diff_print_patch(
 	git_diff_list *diff,
 	void *cb_data,
-	git_diff_data_fn print_cb);
+	git_diff_data_cb print_cb);
 
 /**
  * Query how many diff records are there in a diff list.
@@ -680,7 +681,7 @@
 GIT_EXTERN(int) git_diff_patch_print(
 	git_diff_patch *patch,
 	void *cb_data,
-	git_diff_data_fn print_cb);
+	git_diff_data_cb print_cb);
 
 /**
  * Get the content of a patch as a single diff text.
@@ -719,9 +720,9 @@
 	git_blob *new_blob,
 	const git_diff_options *options,
 	void *cb_data,
-	git_diff_file_fn file_cb,
-	git_diff_hunk_fn hunk_cb,
-	git_diff_data_fn line_cb);
+	git_diff_file_cb file_cb,
+	git_diff_hunk_cb hunk_cb,
+	git_diff_data_cb line_cb);
 
 GIT_END_DECL
 
diff --git a/include/git2/object.h b/include/git2/object.h
index fd6ae95..69af392 100644
--- a/include/git2/object.h
+++ b/include/git2/object.h
@@ -184,7 +184,7 @@
  */
 GIT_EXTERN(int) git_object_peel(
 		git_object **peeled,
-		git_object *object,
+		const git_object *object,
 		git_otype target_type);
 
 /** @} */
diff --git a/src/blob.c b/src/blob.c
index 76d265f..b168df1 100644
--- a/src/blob.c
+++ b/src/blob.c
@@ -19,10 +19,10 @@
 	return blob->odb_object->raw.data;
 }
 
-size_t git_blob_rawsize(git_blob *blob)
+git_off_t git_blob_rawsize(git_blob *blob)
 {
 	assert(blob);
-	return blob->odb_object->raw.len;
+	return (git_off_t)blob->odb_object->raw.len;
 }
 
 int git_blob__getbuf(git_buf *buffer, git_blob *blob)
@@ -205,7 +205,7 @@
 	return error;
 }
 
-int git_blob_create_fromfile(git_oid *oid, git_repository *repo, const char *path)
+int git_blob_create_fromworkdir(git_oid *oid, git_repository *repo, const char *path)
 {
 	git_buf full_path = GIT_BUF_INIT;
 	const char *workdir;
diff --git a/src/branch.c b/src/branch.c
index c6173ca..5eab5ae 100644
--- a/src/branch.c
+++ b/src/branch.c
@@ -44,12 +44,6 @@
 	return error;
 }
 
-static int create_error_invalid(const char *msg)
-{
-	giterr_set(GITERR_INVALID, "Cannot create branch - %s", msg);
-	return -1;
-}
-
 static int not_a_local_branch(git_reference *ref)
 {
 	giterr_set(GITERR_INVALID, "Reference '%s' is not a local branch.", git_reference_name(ref));
@@ -60,31 +54,26 @@
 		git_reference **ref_out,
 		git_repository *repository,
 		const char *branch_name,
-		const git_object *target,
+		const git_commit *commit,
 		int force)
 {
-	git_object *commit = NULL;
 	git_reference *branch = NULL;
 	git_buf canonical_branch_name = GIT_BUF_INIT;
 	int error = -1;
 
-	assert(branch_name && target && ref_out);
-	assert(git_object_owner(target) == repository);
-
-	if (git_object_peel(&commit, (git_object *)target, GIT_OBJ_COMMIT) < 0)
-		return create_error_invalid("The given target does not resolve to a commit");
+	assert(branch_name && commit && ref_out);
+	assert(git_object_owner((const git_object *)commit) == repository);
 
 	if (git_buf_joinpath(&canonical_branch_name, GIT_REFS_HEADS_DIR, branch_name) < 0)
 		goto cleanup;
 
 	error = git_reference_create_oid(&branch, repository,
-		git_buf_cstr(&canonical_branch_name), git_object_id(commit), force);
+		git_buf_cstr(&canonical_branch_name), git_commit_id(commit), force);
 
 	if (!error)
 		*ref_out = branch;
 
 cleanup:
-	git_object_free(commit);
 	git_buf_free(&canonical_branch_name);
 	return error;
 }
diff --git a/src/checkout.c b/src/checkout.c
index eff1481..5229357 100644
--- a/src/checkout.c
+++ b/src/checkout.c
@@ -691,7 +691,7 @@
 
 int git_checkout_tree(
 	git_repository *repo,
-	git_object *treeish,
+	const git_object *treeish,
 	git_checkout_opts *opts)
 {
 	int error = 0;
diff --git a/src/clone.c b/src/clone.c
index 9ef6f81..0548dc4 100644
--- a/src/clone.c
+++ b/src/clone.c
@@ -28,18 +28,18 @@
 	const git_oid *target,
 	const char *name)
 {
-	git_object *head_obj = NULL;
+	git_commit *head_obj = NULL;
 	git_reference *branch_ref;
 	int error;
 
 	/* Find the target commit */
-	if ((error = git_object_lookup(&head_obj, repo, target, GIT_OBJ_ANY)) < 0)
+	if ((error = git_commit_lookup(&head_obj, repo, target)) < 0)
 		return error;
 
 	/* Create the new branch */
 	error = git_branch_create(&branch_ref, repo, name, head_obj, 0);
 
-	git_object_free(head_obj);
+	git_commit_free(head_obj);
 
 	if (!error)
 		*branch = branch_ref;
@@ -381,9 +381,9 @@
 		git_repository **out,
 		const char *origin_url,
 		const char *workdir_path,
+		git_checkout_opts *checkout_opts,
 		git_transfer_progress_callback fetch_progress_cb,
-		void *fetch_progress_payload,
-		git_checkout_opts *checkout_opts)
+		void *fetch_progress_payload)
 {
 	assert(out && origin_url && workdir_path);
 
diff --git a/src/commit.c b/src/commit.c
index b66978a..4072518 100644
--- a/src/commit.c
+++ b/src/commit.c
@@ -22,18 +22,18 @@
 {
 	unsigned int i;
 
-	for (i = 0; i < commit->parent_oids.length; ++i) {
-		git_oid *parent = git_vector_get(&commit->parent_oids, i);
+	for (i = 0; i < commit->parent_ids.length; ++i) {
+		git_oid *parent = git_vector_get(&commit->parent_ids, i);
 		git__free(parent);
 	}
 
-	git_vector_clear(&commit->parent_oids);
+	git_vector_clear(&commit->parent_ids);
 }
 
 void git_commit__free(git_commit *commit)
 {
 	clear_parents(commit);
-	git_vector_free(&commit->parent_oids);
+	git_vector_free(&commit->parent_ids);
 
 	git_signature_free(commit->author);
 	git_signature_free(commit->committer);
@@ -43,11 +43,6 @@
 	git__free(commit);
 }
 
-const git_oid *git_commit_id(git_commit *c)
-{
-	return git_object_id((git_object *)c);
-}
-
 int git_commit_create_v(
 		git_oid *oid,
 		git_repository *repo,
@@ -141,26 +136,26 @@
 	const char *buffer = data;
 	const char *buffer_end = (const char *)data + len;
 
-	git_oid parent_oid;
+	git_oid parent_id;
 
-	git_vector_init(&commit->parent_oids, 4, NULL);
+	git_vector_init(&commit->parent_ids, 4, NULL);
 
-	if (git_oid__parse(&commit->tree_oid, &buffer, buffer_end, "tree ") < 0)
+	if (git_oid__parse(&commit->tree_id, &buffer, buffer_end, "tree ") < 0)
 		goto bad_buffer;
 
 	/*
 	 * TODO: commit grafts!
 	 */
 
-	while (git_oid__parse(&parent_oid, &buffer, buffer_end, "parent ") == 0) {
-		git_oid *new_oid;
+	while (git_oid__parse(&parent_id, &buffer, buffer_end, "parent ") == 0) {
+		git_oid *new_id;
 
-		new_oid = git__malloc(sizeof(git_oid));
-		GITERR_CHECK_ALLOC(new_oid);
+		new_id = git__malloc(sizeof(git_oid));
+		GITERR_CHECK_ALLOC(new_id);
 
-		git_oid_cpy(new_oid, &parent_oid);
+		git_oid_cpy(new_id, &parent_id);
 
-		if (git_vector_insert(&commit->parent_oids, new_oid) < 0)
+		if (git_vector_insert(&commit->parent_ids, new_id) < 0)
 			return -1;
 	}
 
@@ -214,7 +209,7 @@
 }
 
 #define GIT_COMMIT_GETTER(_rvalue, _name, _return) \
-	_rvalue git_commit_##_name(git_commit *commit) \
+	_rvalue git_commit_##_name(const git_commit *commit) \
 	{\
 		assert(commit); \
 		return _return; \
@@ -226,34 +221,34 @@
 GIT_COMMIT_GETTER(const char *, message_encoding, commit->message_encoding)
 GIT_COMMIT_GETTER(git_time_t, time, commit->committer->when.time)
 GIT_COMMIT_GETTER(int, time_offset, commit->committer->when.offset)
-GIT_COMMIT_GETTER(unsigned int, parentcount, (unsigned int)commit->parent_oids.length)
-GIT_COMMIT_GETTER(const git_oid *, tree_oid, &commit->tree_oid);
+GIT_COMMIT_GETTER(unsigned int, parentcount, (unsigned int)commit->parent_ids.length)
+GIT_COMMIT_GETTER(const git_oid *, tree_id, &commit->tree_id);
 
-int git_commit_tree(git_tree **tree_out, git_commit *commit)
+int git_commit_tree(git_tree **tree_out, const git_commit *commit)
 {
 	assert(commit);
-	return git_tree_lookup(tree_out, commit->object.repo, &commit->tree_oid);
+	return git_tree_lookup(tree_out, commit->object.repo, &commit->tree_id);
 }
 
-const git_oid *git_commit_parent_oid(git_commit *commit, unsigned int n)
+const git_oid *git_commit_parent_id(git_commit *commit, unsigned int n)
 {
 	assert(commit);
 
-	return git_vector_get(&commit->parent_oids, n);
+	return git_vector_get(&commit->parent_ids, n);
 }
 
 int git_commit_parent(git_commit **parent, git_commit *commit, unsigned int n)
 {
-	const git_oid *parent_oid;
+	const git_oid *parent_id;
 	assert(commit);
 
-	parent_oid = git_commit_parent_oid(commit, n);
-	if (parent_oid == NULL) {
+	parent_id = git_commit_parent_id(commit, n);
+	if (parent_id == NULL) {
 		giterr_set(GITERR_INVALID, "Parent %u does not exist", n);
 		return GIT_ENOTFOUND;
 	}
 
-	return git_commit_lookup(parent, commit->object.repo, parent_oid);
+	return git_commit_lookup(parent, commit->object.repo, parent_id);
 }
 
 int git_commit_nth_gen_ancestor(
diff --git a/src/commit.h b/src/commit.h
index d9f4928..1d1dc0d 100644
--- a/src/commit.h
+++ b/src/commit.h
@@ -17,8 +17,8 @@
 struct git_commit {
 	git_object object;
 
-	git_vector parent_oids;
-	git_oid tree_oid;
+	git_vector parent_ids;
+	git_oid tree_id;
 
 	git_signature *author;
 	git_signature *committer;
diff --git a/src/diff_output.c b/src/diff_output.c
index 46a9e02..5c887cd 100644
--- a/src/diff_output.c
+++ b/src/diff_output.c
@@ -441,9 +441,9 @@
 	git_repository *repo,
 	const git_diff_options *opts,
 	void *data,
-	git_diff_file_fn file_cb,
-	git_diff_hunk_fn hunk_cb,
-	git_diff_data_fn data_cb)
+	git_diff_file_cb file_cb,
+	git_diff_hunk_cb hunk_cb,
+	git_diff_data_cb data_cb)
 {
 	memset(ctxt, 0, sizeof(diff_context));
 
@@ -905,9 +905,9 @@
 int git_diff_foreach(
 	git_diff_list *diff,
 	void *cb_data,
-	git_diff_file_fn file_cb,
-	git_diff_hunk_fn hunk_cb,
-	git_diff_data_fn data_cb)
+	git_diff_file_cb file_cb,
+	git_diff_hunk_cb hunk_cb,
+	git_diff_data_cb data_cb)
 {
 	int error = 0;
 	diff_context ctxt;
@@ -951,7 +951,7 @@
 
 typedef struct {
 	git_diff_list *diff;
-	git_diff_data_fn print_cb;
+	git_diff_data_cb print_cb;
 	void *cb_data;
 	git_buf *buf;
 } diff_print_info;
@@ -1030,7 +1030,7 @@
 int git_diff_print_compact(
 	git_diff_list *diff,
 	void *cb_data,
-	git_diff_data_fn print_cb)
+	git_diff_data_cb print_cb)
 {
 	int error;
 	git_buf buf = GIT_BUF_INIT;
@@ -1211,7 +1211,7 @@
 int git_diff_print_patch(
 	git_diff_list *diff,
 	void *cb_data,
-	git_diff_data_fn print_cb)
+	git_diff_data_cb print_cb)
 {
 	int error;
 	git_buf buf = GIT_BUF_INIT;
@@ -1251,9 +1251,9 @@
 	git_blob *new_blob,
 	const git_diff_options *options,
 	void *cb_data,
-	git_diff_file_fn file_cb,
-	git_diff_hunk_fn hunk_cb,
-	git_diff_data_fn data_cb)
+	git_diff_file_cb file_cb,
+	git_diff_hunk_cb hunk_cb,
+	git_diff_data_cb data_cb)
 {
 	int error;
 	git_repository *repo;
@@ -1518,7 +1518,7 @@
 int git_diff_patch_print(
 	git_diff_patch *patch,
 	void *cb_data,
-	git_diff_data_fn print_cb)
+	git_diff_data_cb print_cb)
 {
 	int error;
 	git_buf temp = GIT_BUF_INIT;
diff --git a/src/diff_output.h b/src/diff_output.h
index f74dd3a..8d7b5e4 100644
--- a/src/diff_output.h
+++ b/src/diff_output.h
@@ -27,9 +27,9 @@
 	git_repository   *repo;
 	git_diff_list    *diff;
 	const git_diff_options *opts;
-	git_diff_file_fn  file_cb;
-	git_diff_hunk_fn  hunk_cb;
-	git_diff_data_fn  data_cb;
+	git_diff_file_cb  file_cb;
+	git_diff_hunk_cb  hunk_cb;
+	git_diff_data_cb  data_cb;
 	void *cb_data;
 	int   cb_error;
 	git_diff_range cb_range;
diff --git a/src/index.c b/src/index.c
index 128dd18..350d363 100644
--- a/src/index.c
+++ b/src/index.c
@@ -580,7 +580,7 @@
 	 */
 
 	/* write the blob to disk and get the oid */
-	if ((error = git_blob_create_fromfile(&oid, INDEX_OWNER(index), rel_path)) < 0)
+	if ((error = git_blob_create_fromworkdir(&oid, INDEX_OWNER(index), rel_path)) < 0)
 		return error;
 
 	entry = git__calloc(1, sizeof(git_index_entry));
diff --git a/src/object.c b/src/object.c
index 2e45eb8..89af915 100644
--- a/src/object.c
+++ b/src/object.c
@@ -374,7 +374,7 @@
 
 int git_object_peel(
 	git_object **peeled,
-	git_object *object,
+	const git_object *object,
 	git_otype target_type)
 {
 	git_object *source, *deref = NULL;
@@ -382,9 +382,9 @@
 	assert(object && peeled);
 
 	if (git_object_type(object) == target_type)
-		return git_object__dup(peeled, object);
+		return git_object__dup(peeled, (git_object *)object);
 
-	source = object;
+	source = (git_object *)object;
 
 	while (!dereference_object(&deref, source)) {
 
diff --git a/src/transports/local.c b/src/transports/local.c
index 46c9218..43d5da0 100644
--- a/src/transports/local.c
+++ b/src/transports/local.c
@@ -306,7 +306,7 @@
 		if (git_odb_exists(odb, &oid)) continue;
 
 		if (!git_object_lookup((git_object**)&commit, t->repo, &oid, GIT_OBJ_COMMIT)) {
-			const git_oid *tree_oid = git_commit_tree_oid(commit);
+			const git_oid *tree_oid = git_commit_tree_id(commit);
 			git_commit_free(commit);
 
 			/* Add the commit and its tree */
diff --git a/tests-clar/clone/network.c b/tests-clar/clone/network.c
index 1304f77..747fc2b 100644
--- a/tests-clar/clone/network.c
+++ b/tests-clar/clone/network.c
@@ -107,7 +107,7 @@
 
 void test_clone_network__can_checkout_a_cloned_repo(void)
 {
-	git_checkout_opts opts = {0};
+	git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
 	git_buf path = GIT_BUF_INIT;
 	git_reference *head;
 	bool checkout_progress_cb_was_called = false,
@@ -119,8 +119,8 @@
 
 	cl_set_cleanup(&cleanup_repository, "./default-checkout");
 
-	cl_git_pass(git_clone(&g_repo, LIVE_REPO_URL, "./default-checkout", 
-				&fetch_progress, &fetch_progress_cb_was_called, &opts));
+	cl_git_pass(git_clone(&g_repo, LIVE_REPO_URL, "./default-checkout", &opts,
+				&fetch_progress, &fetch_progress_cb_was_called));
 
 	cl_git_pass(git_buf_joinpath(&path, git_repository_workdir(g_repo), "master.txt"));
 	cl_assert_equal_i(true, git_path_isfile(git_buf_cstr(&path)));
diff --git a/tests-clar/diff/blob.c b/tests-clar/diff/blob.c
index 0a37e82..98b90c6 100644
--- a/tests-clar/diff/blob.c
+++ b/tests-clar/diff/blob.c
@@ -56,7 +56,7 @@
 
 	/* diff on tests/resources/attr/root_test1 */
 	cl_git_pass(git_diff_blobs(
-		a, b, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		a, b, &opts, &expected, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(1, expected.files);
 	cl_assert_equal_i(1, expected.file_status[GIT_DELTA_MODIFIED]);
@@ -71,7 +71,7 @@
 	/* diff on tests/resources/attr/root_test2 */
 	memset(&expected, 0, sizeof(expected));
 	cl_git_pass(git_diff_blobs(
-		b, c, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		b, c, &opts, &expected, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(1, expected.files);
 	cl_assert_equal_i(1, expected.file_status[GIT_DELTA_MODIFIED]);
@@ -86,7 +86,7 @@
 	/* diff on tests/resources/attr/root_test3 */
 	memset(&expected, 0, sizeof(expected));
 	cl_git_pass(git_diff_blobs(
-		a, c, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		a, c, &opts, &expected, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(1, expected.files);
 	cl_assert_equal_i(1, expected.file_status[GIT_DELTA_MODIFIED]);
@@ -100,7 +100,7 @@
 
 	memset(&expected, 0, sizeof(expected));
 	cl_git_pass(git_diff_blobs(
-		c, d, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		c, d, &opts, &expected, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(1, expected.files);
 	cl_assert_equal_i(1, expected.file_status[GIT_DELTA_MODIFIED]);
@@ -122,7 +122,7 @@
 	git_blob *e = NULL;
 
 	cl_git_pass(git_diff_blobs(
-		d, e, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		d, e, &opts, &expected, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(1, expected.files);
 	cl_assert_equal_i(1, expected.file_status[GIT_DELTA_DELETED]);
@@ -137,7 +137,7 @@
 	memset(&expected, 0, sizeof(expected));
 
 	cl_git_pass(git_diff_blobs(
-		d, e, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		d, e, &opts, &expected, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(1, expected.files);
 	cl_assert_equal_i(1, expected.file_status[GIT_DELTA_ADDED]);
@@ -152,7 +152,7 @@
 	memset(&expected, 0, sizeof(expected));
 
 	cl_git_pass(git_diff_blobs(
-		alien, NULL, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		alien, NULL, &opts, &expected, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(1, expected.files);
 	cl_assert_equal_i(1, expected.files_binary);
@@ -163,7 +163,7 @@
 	memset(&expected, 0, sizeof(expected));
 
 	cl_git_pass(git_diff_blobs(
-		NULL, alien, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		NULL, alien, &opts, &expected, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(1, expected.files);
 	cl_assert_equal_i(1, expected.files_binary);
@@ -183,21 +183,21 @@
 void test_diff_blob__can_compare_identical_blobs(void)
 {
 	cl_git_pass(git_diff_blobs(
-		d, d, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		d, d, &opts, &expected, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(0, expected.files_binary);
 	assert_identical_blobs_comparison(&expected);
 
 	memset(&expected, 0, sizeof(expected));
 	cl_git_pass(git_diff_blobs(
-		NULL, NULL, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		NULL, NULL, &opts, &expected, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(0, expected.files_binary);
 	assert_identical_blobs_comparison(&expected);
 
 	memset(&expected, 0, sizeof(expected));
 	cl_git_pass(git_diff_blobs(
-		alien, alien, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		alien, alien, &opts, &expected, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert(expected.files_binary > 0);
 	assert_identical_blobs_comparison(&expected);
@@ -223,14 +223,14 @@
 	cl_git_pass(git_blob_lookup_prefix(&heart, g_repo, &h_oid, 4));
 
 	cl_git_pass(git_diff_blobs(
-		alien, heart, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		alien, heart, &opts, &expected, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	assert_binary_blobs_comparison(&expected);
 
 	memset(&expected, 0, sizeof(expected));
 
 	cl_git_pass(git_diff_blobs(
-		heart, alien, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		heart, alien, &opts, &expected, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	assert_binary_blobs_comparison(&expected);
 
@@ -240,14 +240,14 @@
 void test_diff_blob__can_compare_a_binary_blob_and_a_text_blob(void)
 {
 	cl_git_pass(git_diff_blobs(
-		alien, d, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		alien, d, &opts, &expected, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	assert_binary_blobs_comparison(&expected);
 
 	memset(&expected, 0, sizeof(expected));
 
 	cl_git_pass(git_diff_blobs(
-		d, alien, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		d, alien, &opts, &expected, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	assert_binary_blobs_comparison(&expected);
 }
@@ -288,7 +288,7 @@
 
 	/* Test with default inter-hunk-context (not set) => default is 0 */
 	cl_git_pass(git_diff_blobs(
-		old_d, d, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		old_d, d, &opts, &expected, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(2, expected.hunks);
 
@@ -296,7 +296,7 @@
 	opts.interhunk_lines = 0;
 	memset(&expected, 0, sizeof(expected));
 	cl_git_pass(git_diff_blobs(
-		old_d, d, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		old_d, d, &opts, &expected, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(2, expected.hunks);
 
@@ -304,7 +304,7 @@
 	opts.interhunk_lines = 1;
 	memset(&expected, 0, sizeof(expected));
 	cl_git_pass(git_diff_blobs(
-		old_d, d, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		old_d, d, &opts, &expected, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(1, expected.hunks);
 
diff --git a/tests-clar/diff/diff_helpers.c b/tests-clar/diff/diff_helpers.c
index 992c87d..96a9213 100644
--- a/tests-clar/diff/diff_helpers.c
+++ b/tests-clar/diff/diff_helpers.c
@@ -21,7 +21,7 @@
 	return tree;
 }
 
-int diff_file_fn(
+int diff_file_cb(
 	void *cb_data,
 	const git_diff_delta *delta,
 	float progress)
@@ -42,7 +42,7 @@
 	return 0;
 }
 
-int diff_hunk_fn(
+int diff_hunk_cb(
 	void *cb_data,
 	const git_diff_delta *delta,
 	const git_diff_range *range,
@@ -61,7 +61,7 @@
 	return 0;
 }
 
-int diff_line_fn(
+int diff_line_cb(
 	void *cb_data,
 	const git_diff_delta *delta,
 	const git_diff_range *range,
@@ -104,9 +104,9 @@
 int diff_foreach_via_iterator(
 	git_diff_list *diff,
 	void *data,
-	git_diff_file_fn file_cb,
-	git_diff_hunk_fn hunk_cb,
-	git_diff_data_fn line_cb)
+	git_diff_file_cb file_cb,
+	git_diff_hunk_cb hunk_cb,
+	git_diff_data_cb line_cb)
 {
 	size_t d, num_d = git_diff_num_deltas(diff);
 
diff --git a/tests-clar/diff/diff_helpers.h b/tests-clar/diff/diff_helpers.h
index 6ff493d..b5c36d6 100644
--- a/tests-clar/diff/diff_helpers.h
+++ b/tests-clar/diff/diff_helpers.h
@@ -20,19 +20,19 @@
 	int line_dels;
 } diff_expects;
 
-extern int diff_file_fn(
+extern int diff_file_cb(
 	void *cb_data,
 	const git_diff_delta *delta,
 	float progress);
 
-extern int diff_hunk_fn(
+extern int diff_hunk_cb(
 	void *cb_data,
 	const git_diff_delta *delta,
 	const git_diff_range *range,
 	const char *header,
 	size_t header_len);
 
-extern int diff_line_fn(
+extern int diff_line_cb(
 	void *cb_data,
 	const git_diff_delta *delta,
 	const git_diff_range *range,
@@ -43,8 +43,8 @@
 extern int diff_foreach_via_iterator(
 	git_diff_list *diff,
 	void *data,
-	git_diff_file_fn file_cb,
-	git_diff_hunk_fn hunk_cb,
-	git_diff_data_fn line_cb);
+	git_diff_file_cb file_cb,
+	git_diff_hunk_cb hunk_cb,
+	git_diff_data_cb line_cb);
 
 extern void diff_print(FILE *fp, git_diff_list *diff);
diff --git a/tests-clar/diff/index.c b/tests-clar/diff/index.c
index 4b96bfa..e892602 100644
--- a/tests-clar/diff/index.c
+++ b/tests-clar/diff/index.c
@@ -35,7 +35,7 @@
 	cl_git_pass(git_diff_index_to_tree(&diff, g_repo, a, NULL, &opts));
 
 	cl_git_pass(git_diff_foreach(
-		diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	/* to generate these values:
 	 * - cd to tests/resources/status,
@@ -63,7 +63,7 @@
 	cl_git_pass(git_diff_index_to_tree(&diff, g_repo, b, NULL, &opts));
 
 	cl_git_pass(git_diff_foreach(
-		diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	/* to generate these values:
 	 * - cd to tests/resources/status,
diff --git a/tests-clar/diff/rename.c b/tests-clar/diff/rename.c
index 1ea2e3f..ee6a181 100644
--- a/tests-clar/diff/rename.c
+++ b/tests-clar/diff/rename.c
@@ -55,7 +55,7 @@
 	 */
 	memset(&exp, 0, sizeof(exp));
 	cl_git_pass(git_diff_foreach(
-		diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(4, exp.files);
 	cl_assert_equal_i(1, exp.file_status[GIT_DELTA_UNMODIFIED]);
@@ -69,7 +69,7 @@
 
 	memset(&exp, 0, sizeof(exp));
 	cl_git_pass(git_diff_foreach(
-		diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(3, exp.files);
 	cl_assert_equal_i(1, exp.file_status[GIT_DELTA_UNMODIFIED]);
@@ -91,7 +91,7 @@
 
 	memset(&exp, 0, sizeof(exp));
 	cl_git_pass(git_diff_foreach(
-		diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(3, exp.files);
 	cl_assert_equal_i(1, exp.file_status[GIT_DELTA_UNMODIFIED]);
diff --git a/tests-clar/diff/tree.c b/tests-clar/diff/tree.c
index 8e89399..6eb5826 100644
--- a/tests-clar/diff/tree.c
+++ b/tests-clar/diff/tree.c
@@ -37,7 +37,7 @@
 	cl_git_pass(git_diff_tree_to_tree(&diff, g_repo, a, b, &opts));
 
 	cl_git_pass(git_diff_foreach(
-		diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(5, exp.files);
 	cl_assert_equal_i(2, exp.file_status[GIT_DELTA_ADDED]);
@@ -59,7 +59,7 @@
 	cl_git_pass(git_diff_tree_to_tree(&diff, g_repo, c, b, &opts));
 
 	cl_git_pass(git_diff_foreach(
-		diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(2, exp.files);
 	cl_assert_equal_i(0, exp.file_status[GIT_DELTA_ADDED]);
@@ -94,17 +94,18 @@
 	int test_ab_or_cd[] = { 0, 0, 0, 0, 1, 1, 1, 1, 1 };
 	git_diff_options test_options[] = {
 		/* a vs b tests */
-		{ GIT_DIFF_NORMAL, 1, 1, NULL, NULL, {0} },
-		{ GIT_DIFF_NORMAL, 3, 1, NULL, NULL, {0} },
-		{ GIT_DIFF_REVERSE, 2, 1, NULL, NULL, {0} },
-		{ GIT_DIFF_FORCE_TEXT, 2, 1, NULL, NULL, {0} },
+		{ 1, GIT_DIFF_NORMAL, 1, 1, NULL, NULL, {0} },
+		{ 1, GIT_DIFF_NORMAL, 3, 1, NULL, NULL, {0} },
+		{ 1, GIT_DIFF_REVERSE, 2, 1, NULL, NULL, {0} },
+		{ 1, GIT_DIFF_FORCE_TEXT, 2, 1, NULL, NULL, {0} },
 		/* c vs d tests */
-		{ GIT_DIFF_NORMAL, 3, 1, NULL, NULL, {0} },
-		{ GIT_DIFF_IGNORE_WHITESPACE, 3, 1, NULL, NULL, {0} },
-		{ GIT_DIFF_IGNORE_WHITESPACE_CHANGE, 3, 1, NULL, NULL, {0} },
-		{ GIT_DIFF_IGNORE_WHITESPACE_EOL, 3, 1, NULL, NULL, {0} },
-		{ GIT_DIFF_IGNORE_WHITESPACE | GIT_DIFF_REVERSE, 1, 1, NULL, NULL, {0} },
+		{ 1, GIT_DIFF_NORMAL, 3, 1, NULL, NULL, {0} },
+		{ 1, GIT_DIFF_IGNORE_WHITESPACE, 3, 1, NULL, NULL, {0} },
+		{ 1, GIT_DIFF_IGNORE_WHITESPACE_CHANGE, 3, 1, NULL, NULL, {0} },
+		{ 1, GIT_DIFF_IGNORE_WHITESPACE_EOL, 3, 1, NULL, NULL, {0} },
+		{ 1, GIT_DIFF_IGNORE_WHITESPACE | GIT_DIFF_REVERSE, 1, 1, NULL, NULL, {0} },
 	};
+
 	/* to generate these values:
 	 * - cd to tests/resources/attr,
 	 * - mv .gitted .git
@@ -112,6 +113,7 @@
 	 * - mv .git .gitted
 	 */
 #define EXPECT_STATUS_ADM(ADDS,DELS,MODS) { 0, ADDS, DELS, MODS, 0, 0, 0, 0, 0 }
+
 	diff_expects test_expects[] = {
 		/* a vs b tests */
 		{ 5, 0, EXPECT_STATUS_ADM(3, 0, 2), 4, 0, 0, 51, 2, 46, 3 },
@@ -146,7 +148,7 @@
 			cl_git_pass(git_diff_tree_to_tree(&diff, g_repo, c, d, &opts));
 
 		cl_git_pass(git_diff_foreach(
-			diff, &actual, diff_file_fn, diff_hunk_fn, diff_line_fn));
+			diff, &actual, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 		expected = &test_expects[i];
 		cl_assert_equal_i(actual.files,     expected->files);
@@ -190,7 +192,7 @@
 	cl_git_pass(git_diff_tree_to_tree(&diff, g_repo, a, b, &opts));
 
 	cl_git_pass(git_diff_foreach(
-		diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(3, exp.files);
 	cl_assert_equal_i(2, exp.file_status[GIT_DELTA_ADDED]);
@@ -240,7 +242,7 @@
 	memset(&exp, 0, sizeof(exp));
 
 	cl_git_pass(git_diff_foreach(
-		diff1, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		diff1, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(6, exp.files);
 	cl_assert_equal_i(2, exp.file_status[GIT_DELTA_ADDED]);
diff --git a/tests-clar/diff/workdir.c b/tests-clar/diff/workdir.c
index a4dbe37..8701313 100644
--- a/tests-clar/diff/workdir.c
+++ b/tests-clar/diff/workdir.c
@@ -33,10 +33,10 @@
 
 		if (use_iterator)
 			cl_git_pass(diff_foreach_via_iterator(
-				diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 		else
 			cl_git_pass(git_diff_foreach(
-				diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 		/* to generate these values:
 		 * - cd to tests/resources/status,
@@ -101,10 +101,10 @@
 
 		if (use_iterator)
 			cl_git_pass(diff_foreach_via_iterator(
-				diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 		else
 			cl_git_pass(git_diff_foreach(
-				diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 		cl_assert_equal_i(14, exp.files);
 		cl_assert_equal_i(0, exp.file_status[GIT_DELTA_ADDED]);
@@ -137,10 +137,10 @@
 
 		if (use_iterator)
 			cl_git_pass(diff_foreach_via_iterator(
-				diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 		else
 			cl_git_pass(git_diff_foreach(
-				diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 		cl_assert_equal_i(15, exp.files);
 		cl_assert_equal_i(2, exp.file_status[GIT_DELTA_ADDED]);
@@ -174,10 +174,10 @@
 
 		if (use_iterator)
 			cl_git_pass(diff_foreach_via_iterator(
-				diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 		else
 			cl_git_pass(git_diff_foreach(
-				diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 		cl_assert_equal_i(16, exp.files);
 		cl_assert_equal_i(5, exp.file_status[GIT_DELTA_ADDED]);
@@ -223,9 +223,9 @@
 
 		if (use_iterator)
 			cl_git_pass(diff_foreach_via_iterator(
-				diff, &exp, diff_file_fn, NULL, NULL));
+				diff, &exp, diff_file_cb, NULL, NULL));
 		else
-			cl_git_pass(git_diff_foreach(diff, &exp, diff_file_fn, NULL, NULL));
+			cl_git_pass(git_diff_foreach(diff, &exp, diff_file_cb, NULL, NULL));
 
 		cl_assert_equal_i(13, exp.files);
 		cl_assert_equal_i(0, exp.file_status[GIT_DELTA_ADDED]);
@@ -246,9 +246,9 @@
 
 		if (use_iterator)
 			cl_git_pass(diff_foreach_via_iterator(
-				diff, &exp, diff_file_fn, NULL, NULL));
+				diff, &exp, diff_file_cb, NULL, NULL));
 		else
-			cl_git_pass(git_diff_foreach(diff, &exp, diff_file_fn, NULL, NULL));
+			cl_git_pass(git_diff_foreach(diff, &exp, diff_file_cb, NULL, NULL));
 
 		cl_assert_equal_i(1, exp.files);
 		cl_assert_equal_i(0, exp.file_status[GIT_DELTA_ADDED]);
@@ -269,9 +269,9 @@
 
 		if (use_iterator)
 			cl_git_pass(diff_foreach_via_iterator(
-				diff, &exp, diff_file_fn, NULL, NULL));
+				diff, &exp, diff_file_cb, NULL, NULL));
 		else
-			cl_git_pass(git_diff_foreach(diff, &exp, diff_file_fn, NULL, NULL));
+			cl_git_pass(git_diff_foreach(diff, &exp, diff_file_cb, NULL, NULL));
 
 		cl_assert_equal_i(3, exp.files);
 		cl_assert_equal_i(0, exp.file_status[GIT_DELTA_ADDED]);
@@ -292,9 +292,9 @@
 
 		if (use_iterator)
 			cl_git_pass(diff_foreach_via_iterator(
-				diff, &exp, diff_file_fn, NULL, NULL));
+				diff, &exp, diff_file_cb, NULL, NULL));
 		else
-			cl_git_pass(git_diff_foreach(diff, &exp, diff_file_fn, NULL, NULL));
+			cl_git_pass(git_diff_foreach(diff, &exp, diff_file_cb, NULL, NULL));
 
 		cl_assert_equal_i(2, exp.files);
 		cl_assert_equal_i(0, exp.file_status[GIT_DELTA_ADDED]);
@@ -331,10 +331,10 @@
 
 		if (use_iterator)
 			cl_git_pass(diff_foreach_via_iterator(
-				diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 		else
 			cl_git_pass(git_diff_foreach(
-				diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 		cl_assert_equal_i(0, exp.files);
 		cl_assert_equal_i(0, exp.file_status[GIT_DELTA_MODIFIED]);
@@ -354,10 +354,10 @@
 
 		if (use_iterator)
 			cl_git_pass(diff_foreach_via_iterator(
-				diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 		else
 			cl_git_pass(git_diff_foreach(
-				diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 		cl_assert_equal_i(1, exp.files);
 		cl_assert_equal_i(1, exp.file_status[GIT_DELTA_MODIFIED]);
@@ -390,7 +390,7 @@
 
 	memset(&exp, 0, sizeof(exp));
 	cl_git_pass(git_diff_foreach(
-		diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(0, exp.files);
 	cl_assert_equal_i(0, exp.file_status[GIT_DELTA_MODIFIED]);
@@ -406,7 +406,7 @@
 
 	memset(&exp, 0, sizeof(exp));
 	cl_git_pass(git_diff_foreach(
-		diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	cl_assert_equal_i(0, exp.files);
 	cl_assert_equal_i(0, exp.file_status[GIT_DELTA_MODIFIED]);
@@ -450,10 +450,10 @@
 
 		if (use_iterator)
 			cl_git_pass(diff_foreach_via_iterator(
-				diff_i2t, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff_i2t, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 		else
 			cl_git_pass(git_diff_foreach(
-				diff_i2t, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff_i2t, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 		cl_assert_equal_i(1, exp.files);
 		cl_assert_equal_i(0, exp.file_status[GIT_DELTA_ADDED]);
@@ -471,10 +471,10 @@
 
 		if (use_iterator)
 			cl_git_pass(diff_foreach_via_iterator(
-				diff_w2i, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff_w2i, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 		else
 			cl_git_pass(git_diff_foreach(
-				diff_w2i, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff_w2i, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 		cl_assert_equal_i(1, exp.files);
 		cl_assert_equal_i(0, exp.file_status[GIT_DELTA_ADDED]);
@@ -494,10 +494,10 @@
 
 		if (use_iterator)
 			cl_git_pass(diff_foreach_via_iterator(
-				diff_i2t, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff_i2t, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 		else
 			cl_git_pass(git_diff_foreach(
-				diff_i2t, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff_i2t, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 		cl_assert_equal_i(1, exp.files);
 		cl_assert_equal_i(0, exp.file_status[GIT_DELTA_ADDED]);
@@ -536,10 +536,10 @@
 
 		if (use_iterator)
 			cl_git_pass(diff_foreach_via_iterator(
-				diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 		else
 			cl_git_pass(git_diff_foreach(
-				diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 		cl_assert_equal_i(0, exp.files);
 		cl_assert_equal_i(0, exp.file_status[GIT_DELTA_ADDED]);
@@ -563,10 +563,10 @@
 
 		if (use_iterator)
 			cl_git_pass(diff_foreach_via_iterator(
-				diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 		else
 			cl_git_pass(git_diff_foreach(
-				diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 		cl_assert_equal_i(1, exp.files);
 		cl_assert_equal_i(0, exp.file_status[GIT_DELTA_ADDED]);
@@ -590,10 +590,10 @@
 
 		if (use_iterator)
 			cl_git_pass(diff_foreach_via_iterator(
-				diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 		else
 			cl_git_pass(git_diff_foreach(
-				diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+				diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 		cl_assert_equal_i(1, exp.files);
 		cl_assert_equal_i(0, exp.file_status[GIT_DELTA_ADDED]);
@@ -792,7 +792,7 @@
 
 	memset(&exp, 0, sizeof(exp));
 	cl_git_pass(git_diff_foreach(
-		diff, &exp, diff_file_fn, diff_hunk_fn, diff_line_fn));
+		diff, &exp, diff_file_cb, diff_hunk_cb, diff_line_cb));
 
 	/* the following differs from "git diff 873585" by one "untracked" file
 	 * because the diff list includes the "not_submodule/" directory which
diff --git a/tests-clar/object/blob/filter.c b/tests-clar/object/blob/filter.c
index 0b87b2b..4b05804 100644
--- a/tests-clar/object/blob/filter.c
+++ b/tests-clar/object/blob/filter.c
@@ -14,7 +14,7 @@
 	"foo\nbar\rboth\r\nreversed\n\ragain\nproblems\r",
 	"123\n\000\001\002\003\004abc\255\254\253\r\n"
 };
-static int g_len[NUM_TEST_OBJECTS] = { -1, -1, -1, -1, -1, 17 };
+static git_off_t g_len[NUM_TEST_OBJECTS] = { -1, -1, -1, -1, -1, 17 };
 static git_text_stats g_stats[NUM_TEST_OBJECTS] = {
 	{ 0, 0, 0, 0, 0, 0 },
 	{ 0, 0, 2, 0, 6, 0 },
@@ -65,7 +65,7 @@
 
 	for (i = 0; i < NUM_TEST_OBJECTS; i++) {
 		cl_git_pass(git_blob_lookup(&blob, g_repo, &g_oids[i]));
-		cl_assert((size_t)g_len[i] == git_blob_rawsize(blob));
+		cl_assert(g_len[i] == git_blob_rawsize(blob));
 		cl_assert(memcmp(git_blob_rawcontent(blob), g_raw[i], g_len[i]) == 0);
 		git_blob_free(blob);
 	}
diff --git a/tests-clar/object/blob/write.c b/tests-clar/object/blob/write.c
index 6d4cbab..203bc67 100644
--- a/tests-clar/object/blob/write.c
+++ b/tests-clar/object/blob/write.c
@@ -33,7 +33,7 @@
 {
 	repo = cl_git_sandbox_init(WORKDIR);
 
-	assert_blob_creation(WORKDIR "/test.txt", "test.txt", &git_blob_create_fromfile);
+	assert_blob_creation(WORKDIR "/test.txt", "test.txt", &git_blob_create_fromworkdir);
 }
 
 void test_object_blob_write__can_create_a_blob_in_a_standard_repo_from_a_absolute_filepath_pointing_outside_of_the_working_directory(void)
diff --git a/tests-clar/pack/packbuilder.c b/tests-clar/pack/packbuilder.c
index 208141c..46ed776 100644
--- a/tests-clar/pack/packbuilder.c
+++ b/tests-clar/pack/packbuilder.c
@@ -55,7 +55,7 @@
 		git_object *obj;
 		cl_git_pass(git_object_lookup(&obj, _repo, o, GIT_OBJ_COMMIT));
 		cl_git_pass(git_packbuilder_insert_tree(_packbuilder,
-					git_commit_tree_oid((git_commit *)obj)));
+					git_commit_tree_id((git_commit *)obj)));
 		git_object_free(obj);
 	}
 }
diff --git a/tests-clar/refs/branches/create.c b/tests-clar/refs/branches/create.c
index 9026b0d..0955b6c 100644
--- a/tests-clar/refs/branches/create.c
+++ b/tests-clar/refs/branches/create.c
@@ -2,7 +2,7 @@
 #include "refs.h"
 
 static git_repository *repo;
-static git_object *target;
+static git_commit *target;
 static git_reference *branch;
 
 void test_refs_branches_create__initialize(void)
@@ -17,23 +17,23 @@
 {
 	git_reference_free(branch);
 
-	git_object_free(target);
+	git_object_free((git_object *)target);
 	git_repository_free(repo);
 
 	cl_fixture_cleanup("testrepo.git");
 }
 
-static void retrieve_target_from_oid(git_object **object_out, git_repository *repo, const char *sha)
+static void retrieve_target_from_oid(git_commit **out, git_repository *repo, const char *sha)
 {
 	git_oid oid;
 
 	cl_git_pass(git_oid_fromstr(&oid, sha));
-	cl_git_pass(git_object_lookup(object_out, repo, &oid, GIT_OBJ_ANY));
+	cl_git_pass(git_commit_lookup(out, repo, &oid));
 }
 
-static void retrieve_known_commit(git_object **object, git_repository *repo)
+static void retrieve_known_commit(git_commit **commit, git_repository *repo)
 {
-	retrieve_target_from_oid(object, repo, "e90810b8df3e80c413d903f631643c716887138d");
+	retrieve_target_from_oid(commit, repo, "e90810b8df3e80c413d903f631643c716887138d");
 }
 
 #define NEW_BRANCH_NAME "new-branch-on-the-block"
@@ -43,7 +43,7 @@
 	retrieve_known_commit(&target, repo);
 
 	cl_git_pass(git_branch_create(&branch, repo, NEW_BRANCH_NAME, target, 0));
-	cl_git_pass(git_oid_cmp(git_reference_oid(branch), git_object_id(target)));
+	cl_git_pass(git_oid_cmp(git_reference_oid(branch), git_commit_id(target)));
 }
 
 void test_refs_branches_create__can_not_create_a_branch_if_its_name_collide_with_an_existing_one(void)
@@ -58,29 +58,6 @@
 	retrieve_known_commit(&target, repo);
 
 	cl_git_pass(git_branch_create(&branch, repo, "br2", target, 1));
-	cl_git_pass(git_oid_cmp(git_reference_oid(branch), git_object_id(target)));
+	cl_git_pass(git_oid_cmp(git_reference_oid(branch), git_commit_id(target)));
 	cl_assert_equal_s("refs/heads/br2", git_reference_name(branch));
 }
-
-void test_refs_branches_create__creating_a_branch_targeting_a_tag_dereferences_it_to_its_commit(void)
-{
-	/* b25fa35 is a tag, pointing to another tag which points to a commit */
-	retrieve_target_from_oid(&target, repo, "b25fa35b38051e4ae45d4222e795f9df2e43f1d1");
-
-	cl_git_pass(git_branch_create(&branch, repo, NEW_BRANCH_NAME, target, 0));
-	cl_git_pass(git_oid_streq(git_reference_oid(branch), "e90810b8df3e80c413d903f631643c716887138d"));
-}
-
-void test_refs_branches_create__can_not_create_a_branch_pointing_to_a_non_commit_object(void)
-{
-	/* 53fc32d is the tree of commit e90810b */
-	retrieve_target_from_oid(&target, repo, "53fc32d17276939fc79ed05badaef2db09990016");
-
-	cl_git_fail(git_branch_create(&branch, repo, NEW_BRANCH_NAME, target, 0));
-	git_object_free(target);
-
-	/* 521d87c is an annotated tag pointing to a blob */
-	retrieve_target_from_oid(&target, repo, "521d87c1ec3aef9824daf6d96cc0ae3710766d91");
-
-	cl_git_fail(git_branch_create(&branch, repo, NEW_BRANCH_NAME, target, 0));
-}