diff --git a/src/ports/SkTypeface_fontations.cpp b/src/ports/SkTypeface_fontations.cpp
index ed8146c..b8ea64d 100644
--- a/src/ports/SkTypeface_fontations.cpp
+++ b/src/ports/SkTypeface_fontations.cpp
@@ -22,17 +22,19 @@
     return SkData::MakeFromStream(font_data.get(), font_data->getLength());
 }
 
-::rust::Box<::fontations_ffi::BridgeFontRef> make_bridge_font_ref(sk_sp<SkData> fontData,
-                                                                  uint32_t index = 0) {
+rust::Box<::fontations_ffi::BridgeFontRef> make_bridge_font_ref(sk_sp<SkData> fontData,
+                                                                  uint32_t index) {
     rust::Slice<const uint8_t> slice{fontData->bytes(), fontData->size()};
     return fontations_ffi::make_font_ref(slice, index);
 }
 }  // namespace
 
-SkTypeface_Fontations::SkTypeface_Fontations(std::unique_ptr<SkStreamAsset> font_data)
+SkTypeface_Fontations::SkTypeface_Fontations(std::unique_ptr<SkStreamAsset> font_data,
+                                             uint32_t ttcIndex)
         : SkTypeface(SkFontStyle(), true)
         , fFontData(streamToData(font_data))
-        , fBridgeFontRef(make_bridge_font_ref(fFontData)) {}
+        , fTtcIndex(ttcIndex)
+        , fBridgeFontRef(make_bridge_font_ref(fFontData, fTtcIndex)) {}
 
 int SkTypeface_Fontations::onGetUPEM() const {
     return fontations_ffi::units_per_em_or_zero(*fBridgeFontRef);
@@ -177,6 +179,11 @@
     const fontations_ffi::BridgeFontRef& fBridgeFontRef;
 };
 
+std::unique_ptr<SkStreamAsset> SkTypeface_Fontations::onOpenStream(int* ttcIndex) const {
+    *ttcIndex = fTtcIndex;
+    return std::make_unique<SkMemoryStream>(fFontData);
+}
+
 std::unique_ptr<SkScalerContext> SkTypeface_Fontations::onCreateScalerContext(
         const SkScalerContextEffects& effects, const SkDescriptor* desc) const {
     return std::make_unique<SkFontationsScalerContext>(
diff --git a/src/ports/SkTypeface_fontations.h b/src/ports/SkTypeface_fontations.h
index ece4b81..bd9b0f4 100644
--- a/src/ports/SkTypeface_fontations.h
+++ b/src/ports/SkTypeface_fontations.h
@@ -21,12 +21,12 @@
 /** SkTypeface implementation based on Google Fonts Fontations Rust libraries. */
 class SkTypeface_Fontations : public SkTypeface {
 public:
-    SkTypeface_Fontations(std::unique_ptr<SkStreamAsset> font_data);
+    SkTypeface_Fontations(std::unique_ptr<SkStreamAsset> font_data, uint32_t ttcIndex = 0);
 
     const fontations_ffi::BridgeFontRef& getBridgeFontRef() { return *fBridgeFontRef; }
 
 protected:
-    std::unique_ptr<SkStreamAsset> onOpenStream(int* ttcIndex) const override { return nullptr; }
+    std::unique_ptr<SkStreamAsset> onOpenStream(int* ttcIndex) const override;
     sk_sp<SkTypeface> onMakeClone(const SkFontArguments& args) const override {
         return sk_ref_sp(this);
     }
@@ -59,6 +59,8 @@
 
 private:
     sk_sp<SkData> fFontData;
+    // Incoming ttc index requested when this typeface was instantiated from data.
+    uint32_t fTtcIndex = 0;
     // fBridgeFontRef accesses the data in fFontData. fFontData needs to be kept around for the
     // lifetime of fBridgeFontRef to safely request parsed data.
     rust::Box<::fontations_ffi::BridgeFontRef> fBridgeFontRef;
