diff --git a/src/hb-ot-color-colr-table.hh b/src/hb-ot-color-colr-table.hh
index fe93f64..c1cf6de 100644
--- a/src/hb-ot-color-colr-table.hh
+++ b/src/hb-ot-color-colr-table.hh
@@ -79,51 +79,9 @@
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    if (!(c->check_struct (this) &&
-        c->check_array (&(this+layers), sizeof (LayerRecord), numLayers) &&
-        c->check_array (&(this+baseGlyphs), sizeof (BaseGlyphRecord), numBaseGlyphs)))
-      return_trace (false);
-
-    const BaseGlyphRecord* base_glyph_records = (this+baseGlyphs).arrayZ;
-    for (unsigned int i = 0; i < numBaseGlyphs; ++i)
-      if (base_glyph_records[i].firstLayerIdx +
-          base_glyph_records[i].numLayers > numLayers)
-        return_trace (false);
-
-    return_trace (true);
-  }
-
-  inline bool get_base_glyph_record (hb_codepoint_t glyph_id,
-				     unsigned int &first_layer,
-				     unsigned int &num_layers) const
-  {
-    const BaseGlyphRecord* base_glyph_records = (this+baseGlyphs).arrayZ;
-    unsigned int min = 0, max = numBaseGlyphs - 1;
-    while (min <= max)
-    {
-      unsigned int mid = (min + max) / 2;
-      hb_codepoint_t glyphid = base_glyph_records[mid].glyphid;
-      if (glyphid > glyph_id)
-        max = mid - 1;
-      else if (glyphid < glyph_id)
-        min = mid + 1;
-      else
-      {
-        first_layer = base_glyph_records[mid].firstLayerIdx;
-        num_layers = base_glyph_records[mid].numLayers;
-        return true;
-      }
-    }
-    return false;
-  }
-
-  inline void get_layer_record (int layer,
-				hb_codepoint_t &glyph_id,
-				unsigned int &palette_index) const
-  {
-    const LayerRecord* records = (this+layers).arrayZ;
-    glyph_id = records[layer].glyphid;
-    palette_index = records[layer].colorIdx;
+    return_trace (c->check_struct (this) &&
+		  (this+baseGlyphs).sanitize (c, numBaseGlyphs) &&
+		  (this+layers).sanitize (c, numLayers));
   }
 
   protected:
