diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index c2555d4986..adf55d892f 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -1059,7 +1059,7 @@ static void write_reused_pack_one(struct packed_git *reuse_packfile,
 				    (uintmax_t)base_offset,
 				    reuse_packfile->pack_name);
 
-			nth_packed_object_id(&base_oid, reuse_packfile,
+			nth_packed_object_id(the_repository, &base_oid, reuse_packfile,
 					     pack_pos_to_index(reuse_packfile, base_pos));
 
 			len = encode_in_pack_object_header(header, sizeof(header),
@@ -2141,7 +2141,7 @@ static void check_object(struct object_entry *entry, uint32_t object_index)
 				uint32_t pos;
 				if (offset_to_pack_pos(p, ofs, &pos) < 0)
 					goto give_up;
-				if (!nth_packed_object_id(&base_ref, p,
+				if (!nth_packed_object_id(the_repository, &base_ref, p,
 							  pack_pos_to_index(p, pos)))
 					have_base = 1;
 			}
@@ -4036,7 +4036,7 @@ static void loosen_unused_packed_objects(void)
 			die(_("cannot open pack index"));
 
 		for (i = 0; i < p->num_objects; i++) {
-			nth_packed_object_id(&oid, p, i);
+			nth_packed_object_id(the_repository, &oid, p, i);
 			if (!packlist_find(&to_pack, &oid) &&
 			    !has_sha1_pack_kept_or_nonlocal(&oid) &&
 			    !loosened_object_can_be_discarded(&oid, p->mtime)) {
diff --git a/midx-write.c b/midx-write.c
index c57726ef94..4696b8326c 100644
--- a/midx-write.c
+++ b/midx-write.c
@@ -227,7 +227,7 @@ static void fill_pack_entry(uint32_t pack_int_id,
 			    struct pack_midx_entry *entry,
 			    int preferred)
 {
-	if (nth_packed_object_id(&entry->oid, p, cur_object) < 0)
+	if (nth_packed_object_id(the_repository, &entry->oid, p, cur_object) < 0)
 		die(_("failed to locate object %d in packfile"), cur_object);
 
 	entry->pack_int_id = pack_int_id;
diff --git a/object-name.c b/object-name.c
index c892fbe80a..43023884ef 100644
--- a/object-name.c
+++ b/object-name.c
@@ -188,7 +188,7 @@ static void unique_in_pack(struct packed_git *p,
 	 */
 	for (i = first; i < num && !ds->ambiguous; i++) {
 		struct object_id oid;
-		nth_packed_object_id(&oid, p, i);
+		nth_packed_object_id(ds->repo, &oid, p, i);
 		if (!match_hash(len, ds->bin_pfx.hash, oid.hash))
 			break;
 		update_candidates(ds, &oid);
@@ -776,14 +776,14 @@ static void find_abbrev_len_for_pack(struct packed_git *p,
 	 */
 	mad->init_len = 0;
 	if (!match) {
-		if (!nth_packed_object_id(&oid, p, first))
+		if (!nth_packed_object_id(mad->repo, &oid, p, first))
 			extend_abbrev_len(&oid, mad);
 	} else if (first < num - 1) {
-		if (!nth_packed_object_id(&oid, p, first + 1))
+		if (!nth_packed_object_id(mad->repo, &oid, p, first + 1))
 			extend_abbrev_len(&oid, mad);
 	}
 	if (first > 0) {
-		if (!nth_packed_object_id(&oid, p, first - 1))
+		if (!nth_packed_object_id(mad->repo, &oid, p, first - 1))
 			extend_abbrev_len(&oid, mad);
 	}
 	mad->init_len = mad->cur_len;
diff --git a/pack-bitmap.c b/pack-bitmap.c
index d959e30682..96716c785b 100644
--- a/pack-bitmap.c
+++ b/pack-bitmap.c
@@ -318,7 +318,7 @@ static int nth_bitmap_object_oid(struct bitmap_index *index,
 {
 	if (index->midx)
 		return nth_midxed_object_oid(oid, index->midx, n) ? 0 : -1;
-	return nth_packed_object_id(oid, index->pack, n);
+	return nth_packed_object_id(the_repository, oid, index->pack, n);
 }
 
 static int load_bitmap_entries_v1(struct bitmap_index *index)
diff --git a/pack-check.c b/pack-check.c
index e2c3b264e7..a5551809c1 100644
--- a/pack-check.c
+++ b/pack-check.c
@@ -111,7 +111,7 @@ static int verify_packfile(struct repository *r,
 		off_t curpos;
 		int data_valid;
 
-		if (nth_packed_object_id(&oid, p, entries[i].nr) < 0)
+		if (nth_packed_object_id(r, &oid, p, entries[i].nr) < 0)
 			BUG("unable to get oid of object %lu from %s",
 			    (unsigned long)entries[i].nr, p->pack_name);
 
diff --git a/packfile.c b/packfile.c
index 54f3b9f0a7..92c919d628 100644
--- a/packfile.c
+++ b/packfile.c
@@ -1273,7 +1273,7 @@ static int get_delta_base_oid(struct repository *repo, struct packed_git *p,
 		if (offset_to_pack_pos(p, base_offset, &base_pos) < 0)
 			return -1;
 
-		return nth_packed_object_id(oid, p,
+		return nth_packed_object_id(repo, oid, p,
 					    pack_pos_to_index(p, base_pos));
 	} else
 		return -1;
@@ -1288,7 +1288,7 @@ static int retry_bad_packed_offset(struct repository *r,
 	struct object_id oid;
 	if (offset_to_pack_pos(p, obj_offset, &pos) < 0)
 		return OBJ_BAD;
-	nth_packed_object_id(&oid, p, pack_pos_to_index(p, pos));
+	nth_packed_object_id(r, &oid, p, pack_pos_to_index(p, pos));
 	mark_bad_packed_object(p, &oid);
 	type = oid_object_info(r, &oid, NULL);
 	if (type <= OBJ_NONE)
@@ -1723,7 +1723,7 @@ void *unpack_entry(struct repository *r, struct packed_git *p, off_t obj_offset,
 			index_pos = pack_pos_to_index(p, pack_pos);
 			if (check_pack_crc(p, &w_curs, obj_offset, len, index_pos)) {
 				struct object_id oid;
-				nth_packed_object_id(&oid, p, index_pos);
+				nth_packed_object_id(r, &oid, p, index_pos);
 				error("bad packed object CRC for %s",
 				      oid_to_hex(&oid));
 				mark_bad_packed_object(p, &oid);
@@ -1813,7 +1813,7 @@ void *unpack_entry(struct repository *r, struct packed_git *p, off_t obj_offset,
 			if (!(offset_to_pack_pos(p, obj_offset, &pos))) {
 				struct object_info oi = OBJECT_INFO_INIT;
 
-				nth_packed_object_id(&base_oid, p,
+				nth_packed_object_id(r, &base_oid, p,
 						     pack_pos_to_index(p, pos));
 				error("failed to read delta base object %s"
 				      " at offset %"PRIuMAX" from %s",
@@ -1917,12 +1917,11 @@ int bsearch_pack(const struct object_id *oid, const struct packed_git *p, uint32
 			    index_lookup, index_lookup_width, result);
 }
 
-int nth_packed_object_id(struct object_id *oid,
-			 struct packed_git *p,
-			 uint32_t n)
+int nth_packed_object_id(struct repository *repo, struct object_id *oid,
+			 struct packed_git *p, uint32_t n)
 {
 	const unsigned char *index = p->index_data;
-	const unsigned int hashsz = the_hash_algo->rawsz;
+	const unsigned int hashsz = repo->hash_algo->rawsz;
 	if (!index) {
 		if (open_pack_index(p))
 			return -1;
@@ -1933,11 +1932,11 @@ int nth_packed_object_id(struct object_id *oid,
 	index += 4 * 256;
 	if (p->index_version == 1) {
 		oidread(oid, index + st_add(st_mult(hashsz + 4, n), 4),
-			the_repository->hash_algo);
+			repo->hash_algo);
 	} else {
 		index += 8;
 		oidread(oid, index + st_mult(hashsz, n),
-			the_repository->hash_algo);
+			repo->hash_algo);
 	}
 	return 0;
 }
@@ -2194,7 +2193,7 @@ int for_each_object_in_pack(struct packed_git *p,
 		else
 			index_pos = i;
 
-		if (nth_packed_object_id(&oid, p, index_pos) < 0)
+		if (nth_packed_object_id(the_repository, &oid, p, index_pos) < 0)
 			return error("unable to get sha1 of object %u in %s",
 				     index_pos, p->pack_name);
 
diff --git a/packfile.h b/packfile.h
index 050dc516b1..f744af6e9b 100644
--- a/packfile.h
+++ b/packfile.h
@@ -150,7 +150,8 @@ int bsearch_pack(const struct object_id *oid, const struct packed_git *p, uint32
  * parameter. Open the index if it is not already open.  Returns 0 on success,
  * negative otherwise.
  */
-int nth_packed_object_id(struct object_id *, struct packed_git *, uint32_t n);
+int nth_packed_object_id(struct repository *repo, struct object_id *,
+			 struct packed_git *, uint32_t n);
 
 /*
  * Return the offset of the nth object within the specified packfile.
diff --git a/t/helper/test-pack-mtimes.c b/t/helper/test-pack-mtimes.c
index f8f9afbb5b..ebd980b308 100644
--- a/t/helper/test-pack-mtimes.c
+++ b/t/helper/test-pack-mtimes.c
@@ -16,7 +16,7 @@ static void dump_mtimes(struct packed_git *p)
 
 	for (i = 0; i < p->num_objects; i++) {
 		struct object_id oid;
-		if (nth_packed_object_id(&oid, p, i) < 0)
+		if (nth_packed_object_id(the_repository, &oid, p, i) < 0)
 			die("could not load object id at position %"PRIu32, i);
 
 		printf("%s %"PRIu32"\n",
