diff --git a/ui-blob.c b/ui-blob.c
index d388489..2f8bb7a 100644
--- a/ui-blob.c
+++ b/ui-blob.c
@@ -13,7 +13,7 @@
 
 struct walk_tree_context {
 	const char *match_path;
-	unsigned char *matched_sha1;
+	struct object_id matched_oid;
 	unsigned int found_path:1;
 	unsigned int file_only:1;
 };
@@ -28,14 +28,14 @@
 	if (strncmp(base->buf, walk_tree_ctx->match_path, base->len)
 		|| strcmp(walk_tree_ctx->match_path + base->len, pathname))
 		return READ_TREE_RECURSIVE;
-	memmove(walk_tree_ctx->matched_sha1, sha1, 20);
+	hashcpy(walk_tree_ctx->matched_oid.hash, sha1);
 	walk_tree_ctx->found_path = 1;
 	return 0;
 }
 
 int cgit_ref_path_exists(const char *path, const char *ref, int file_only)
 {
-	unsigned char sha1[20];
+	struct object_id oid;
 	unsigned long size;
 	struct pathspec_item path_items = {
 		.match = path,
@@ -47,22 +47,22 @@
 	};
 	struct walk_tree_context walk_tree_ctx = {
 		.match_path = path,
-		.matched_sha1 = sha1,
+		.matched_oid = oid,
 		.found_path = 0,
 		.file_only = file_only
 	};
 
-	if (get_sha1(ref, sha1))
+	if (get_oid(ref, &oid))
 		return 0;
-	if (sha1_object_info(sha1, &size) != OBJ_COMMIT)
+	if (sha1_object_info(oid.hash, &size) != OBJ_COMMIT)
 		return 0;
-	read_tree_recursive(lookup_commit_reference(sha1)->tree, "", 0, 0, &paths, walk_tree, &walk_tree_ctx);
+	read_tree_recursive(lookup_commit_reference(oid.hash)->tree, "", 0, 0, &paths, walk_tree, &walk_tree_ctx);
 	return walk_tree_ctx.found_path;
 }
 
 int cgit_print_file(char *path, const char *head, int file_only)
 {
-	unsigned char sha1[20];
+	struct object_id oid;
 	enum object_type type;
 	char *buf;
 	unsigned long size;
@@ -77,24 +77,24 @@
 	};
 	struct walk_tree_context walk_tree_ctx = {
 		.match_path = path,
-		.matched_sha1 = sha1,
+		.matched_oid = oid,
 		.found_path = 0,
 		.file_only = file_only
 	};
 
-	if (get_sha1(head, sha1))
+	if (get_oid(head, &oid))
 		return -1;
-	type = sha1_object_info(sha1, &size);
+	type = sha1_object_info(oid.hash, &size);
 	if (type == OBJ_COMMIT) {
-		commit = lookup_commit_reference(sha1);
+		commit = lookup_commit_reference(oid.hash);
 		read_tree_recursive(commit->tree, "", 0, 0, &paths, walk_tree, &walk_tree_ctx);
 		if (!walk_tree_ctx.found_path)
 			return -1;
-		type = sha1_object_info(sha1, &size);
+		type = sha1_object_info(oid.hash, &size);
 	}
 	if (type == OBJ_BAD)
 		return -1;
-	buf = read_sha1_file(sha1, &type, &size);
+	buf = read_sha1_file(oid.hash, &type, &size);
 	if (!buf)
 		return -1;
 	buf[size] = '\0';
@@ -105,7 +105,7 @@
 
 void cgit_print_blob(const char *hex, char *path, const char *head, int file_only)
 {
-	unsigned char sha1[20];
+	struct object_id oid;
 	enum object_type type;
 	char *buf;
 	unsigned long size;
@@ -120,31 +120,31 @@
 	};
 	struct walk_tree_context walk_tree_ctx = {
 		.match_path = path,
-		.matched_sha1 = sha1,
+		.matched_oid = oid,
 		.found_path = 0,
 		.file_only = file_only
 	};
 
 	if (hex) {
-		if (get_sha1_hex(hex, sha1)) {
+		if (get_oid_hex(hex, &oid)) {
 			cgit_print_error_page(400, "Bad request",
 					"Bad hex value: %s", hex);
 			return;
 		}
 	} else {
-		if (get_sha1(head, sha1)) {
+		if (get_oid(head, &oid)) {
 			cgit_print_error_page(404, "Not found",
 					"Bad ref: %s", head);
 			return;
 		}
 	}
 
-	type = sha1_object_info(sha1, &size);
+	type = sha1_object_info(oid.hash, &size);
 
 	if ((!hex) && type == OBJ_COMMIT && path) {
-		commit = lookup_commit_reference(sha1);
+		commit = lookup_commit_reference(oid.hash);
 		read_tree_recursive(commit->tree, "", 0, 0, &paths, walk_tree, &walk_tree_ctx);
-		type = sha1_object_info(sha1,&size);
+		type = sha1_object_info(oid.hash, &size);
 	}
 
 	if (type == OBJ_BAD) {
@@ -153,7 +153,7 @@
 		return;
 	}
 
-	buf = read_sha1_file(sha1, &type, &size);
+	buf = read_sha1_file(oid.hash, &type, &size);
 	if (!buf) {
 		cgit_print_error_page(500, "Internal server error",
 				"Error reading object %s", hex);
