diff --git a/avifinfo.c b/avifinfo.c
index 77b8b03..62abf28 100644
--- a/avifinfo.c
+++ b/avifinfo.c
@@ -175,6 +175,7 @@
   uint8_t data_was_skipped;  // True if some loops/indices were skipped.
   uint8_t tone_mapped_item_id;  // Id of the "tmap" box, > 0 if present.
   uint8_t iinf_parsed;  // True if the "iinf" (item info) box was parsed.
+  uint8_t iref_parsed;  // True if the "iref" (item reference) box was parsed.
 
   uint8_t num_tiles;
   AvifInfoInternalTile tiles[AVIFINFO_MAX_TILES];
@@ -267,7 +268,8 @@
   }
   // If the gain map has not been found but we haven't read all the relevant
   // metadata, we might still find one later and cannot stop now.
-  if (!f->primary_item_features.has_gainmap && !f->iinf_parsed) {
+  if (!f->primary_item_features.has_gainmap &&
+      (!f->iinf_parsed || (f->tone_mapped_item_id && !f->iref_parsed))) {
     return kNotFound;
   }
 
@@ -605,6 +607,8 @@
                                         uint32_t num_remaining_bytes,
                                         uint32_t* num_parsed_boxes,
                                         AvifInfoInternalFeatures* features) {
+  features->iref_parsed = 1;
+
   do {
     AvifInfoInternalBox box;
     AVIFINFO_CHECK_FOUND(AvifInfoInternalParseBox(
diff --git a/tests/avifinfo_test.cc b/tests/avifinfo_test.cc
index e115299..a9f4b5e 100644
--- a/tests/avifinfo_test.cc
+++ b/tests/avifinfo_test.cc
@@ -128,37 +128,43 @@
 }
 
 TEST(AvifInfoGetTest, WithGainmapTmap) {
-  const Data input = LoadFile("avifinfo_test_12x34_gainmap_tmap.avif");
-  ASSERT_FALSE(input.empty());
+  for (const char* file_name :
+       {"avifinfo_test_12x34_gainmap_tmap.avif",
+        "avifinfo_test_12x34_gainmap_tmap_iref_after_iprp.avif"}) {
+    SCOPED_TRACE(file_name);
+    const Data input = LoadFile(file_name);
+    ASSERT_FALSE(input.empty());
 
-  ASSERT_EQ(AvifInfoIdentify(input.data(), input.size()), kAvifInfoOk);
-  AvifInfoFeatures f;
-  ASSERT_EQ(AvifInfoGetFeatures(input.data(), input.size(), &f), kAvifInfoOk);
-  ExpectEqual(f, {.width = 12u,
-                  .height = 34u,
-                  .bit_depth = 10u,
-                  .num_channels = 4u,
-                  .has_gainmap = 1u,
-                  .gainmap_item_id = 4u,
-                  .primary_item_id_location = 96u,
-                  .primary_item_id_bytes = 2u});
+    ASSERT_EQ(AvifInfoIdentify(input.data(), input.size()), kAvifInfoOk);
+    AvifInfoFeatures f;
+    ASSERT_EQ(AvifInfoGetFeatures(input.data(), input.size(), &f), kAvifInfoOk);
+    ExpectEqual(f, {.width = 12u,
+                    .height = 34u,
+                    .bit_depth = 10u,
+                    .num_channels = 4u,
+                    .has_gainmap = 1u,
+                    .gainmap_item_id = 4u,
+                    .primary_item_id_location = 96u,
+                    .primary_item_id_bytes = 2u});
 
-  Data gainmap = input;
-  ASSERT_TRUE(SetPrimaryItemIdToGainmapId(gainmap));
-  ASSERT_EQ(AvifInfoIdentify(gainmap.data(), gainmap.size()), kAvifInfoOk);
-  AvifInfoFeatures gainmap_f;
-  ASSERT_EQ(AvifInfoGetFeatures(gainmap.data(), gainmap.size(), &gainmap_f),
-            kAvifInfoOk);
-  // Note that num_channels says 4 even though the alpha plane is associated to
-  // the main image and not the gain map, but libavifinfo does not check this.
-  ExpectEqual(gainmap_f, {.width = 6u,
-                          .height = 17u,
-                          .bit_depth = 8u,
-                          .num_channels = 4u,
-                          .has_gainmap = 1u,
-                          .gainmap_item_id = 4u,
-                          .primary_item_id_location = 96u,
-                          .primary_item_id_bytes = 2u});
+    Data gainmap = input;
+    ASSERT_TRUE(SetPrimaryItemIdToGainmapId(gainmap));
+    ASSERT_EQ(AvifInfoIdentify(gainmap.data(), gainmap.size()), kAvifInfoOk);
+    AvifInfoFeatures gainmap_f;
+    ASSERT_EQ(AvifInfoGetFeatures(gainmap.data(), gainmap.size(), &gainmap_f),
+              kAvifInfoOk);
+    // Note that num_channels says 4 even though the alpha plane is associated
+    // to the main image and not the gain map, but libavifinfo does not check
+    // this.
+    ExpectEqual(gainmap_f, {.width = 6u,
+                            .height = 17u,
+                            .bit_depth = 8u,
+                            .num_channels = 4u,
+                            .has_gainmap = 1u,
+                            .gainmap_item_id = 4u,
+                            .primary_item_id_location = 96u,
+                            .primary_item_id_bytes = 2u});
+  }
 }
 
 TEST(AvifInfoGetTest, NoPixi10b) {
diff --git a/tests/avifinfo_test_12x34_gainmap_tmap_iref_after_iprp.avif b/tests/avifinfo_test_12x34_gainmap_tmap_iref_after_iprp.avif
new file mode 100644
index 0000000..c363b12
--- /dev/null
+++ b/tests/avifinfo_test_12x34_gainmap_tmap_iref_after_iprp.avif
Binary files differ
