diff --git a/BUILD.gn b/BUILD.gn
index f3f170e..97cbf73 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -1390,6 +1390,9 @@
     if (!fontmgr_android_enabled) {
       sources -= [ "//tests/FontMgrAndroidParserTest.cpp" ]
     }
+    if (!(skia_use_freetype && skia_use_fontconfig)) {
+      sources -= [ "//tests/FontMgrFontConfigTest.cpp" ]
+    }
     deps = [
       ":experimental_svg_model",
       ":flags",
diff --git a/gn/tests.gni b/gn/tests.gni
index 32c3337..2068ae5 100644
--- a/gn/tests.gni
+++ b/gn/tests.gni
@@ -77,6 +77,7 @@
   "$_tests/FontHostStreamTest.cpp",
   "$_tests/FontHostTest.cpp",
   "$_tests/FontMgrAndroidParserTest.cpp",
+  "$_tests/FontMgrFontConfigTest.cpp",
   "$_tests/FontMgrTest.cpp",
   "$_tests/FontNamesTest.cpp",
   "$_tests/FontObjTest.cpp",
diff --git a/public.bzl b/public.bzl
index e8fbf61..b99c60c 100644
--- a/public.bzl
+++ b/public.bzl
@@ -496,6 +496,7 @@
     exclude = [
         "gm/cgms.cpp",
         "tests/FontMgrAndroidParserTest.cpp",  # Android-only.
+        "tests/FontMgrFontConfigTest.cpp",  # FontConfig-only.
         "tests/skia_test.cpp",  # Old main.
         "tools/gpu/atlastext/*",
         "tools/gpu/gl/angle/*",
diff --git a/src/ports/SkFontMgr_fontconfig.cpp b/src/ports/SkFontMgr_fontconfig.cpp
index 3589ae8..e5aed18 100644
--- a/src/ports/SkFontMgr_fontconfig.cpp
+++ b/src/ports/SkFontMgr_fontconfig.cpp
@@ -525,6 +525,21 @@
         return info;
     }
 
+    sk_sp<SkTypeface> onMakeClone(const SkFontArguments& args) const override {
+        std::unique_ptr<SkFontData> data = this->cloneFontData(args);
+        if (!data) {
+            return nullptr;
+        }
+
+        SkString fFamilyName;
+        this->getFamilyName(&fFamilyName);
+
+        return sk_make_sp<SkTypeface_stream>(std::move(data),
+                                             fFamilyName,
+                                             this->fontStyle(),
+                                             this->isFixedPitch());
+    }
+
     ~SkTypeface_fontconfig() override {
         // Hold the lock while unrefing the pattern.
         FCLocker lock;
diff --git a/tests/FontMgrFontConfigTest.cpp b/tests/FontMgrFontConfigTest.cpp
new file mode 100644
index 0000000..0ecca63
--- /dev/null
+++ b/tests/FontMgrFontConfigTest.cpp
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include <fontconfig/fontconfig.h>
+#include "Resources.h"
+#include "SkCanvas.h"
+#include "SkFontMgr.h"
+#include "SkFontMgr_fontconfig.h"
+#include "SkTypeface.h"
+#include "Test.h"
+
+static bool bitmap_compare(const SkBitmap& ref, const SkBitmap& test) {
+    for (int y = 0; y < test.height(); ++y) {
+        for (int x = 0; x < test.width(); ++x) {
+            SkColor testColor = test.getColor(x, y);
+            SkColor refColor = ref.getColor(x, y);
+            if (refColor != testColor) {
+                return false;
+            }
+        }
+    }
+    return true;
+}
+
+DEF_TEST(FontMgrFontConfig, reporter) {
+    FcConfig* config = FcConfigCreate();
+    SkString distortablePath = GetResourcePath("fonts/Distortable.ttf");
+    FcConfigAppFontAddFile(
+        config, reinterpret_cast<const FcChar8*>(distortablePath.c_str()));
+    FcConfigBuildFonts(config);
+
+    sk_sp<SkFontMgr> fontMgr(SkFontMgr_New_FontConfig(config));
+    sk_sp<SkTypeface> typeface(fontMgr->legacyMakeTypeface("Distortable", SkFontStyle()));
+
+    SkBitmap bitmapStream;
+    bitmapStream.allocN32Pixels(64, 64);
+    SkCanvas canvasStream(bitmapStream);
+    canvasStream.drawColor(SK_ColorWHITE);
+
+    SkBitmap bitmapClone;
+    bitmapClone.allocN32Pixels(64, 64);
+    SkCanvas canvasClone(bitmapClone);
+    canvasStream.drawColor(SK_ColorWHITE);
+
+    SkPaint paintStream;
+    paintStream.setColor(SK_ColorGRAY);
+    paintStream.setTextSize(SkIntToScalar(20));
+    paintStream.setAntiAlias(true);
+    paintStream.setLCDRenderText(true);
+
+    SkPaint paintClone;
+    paintClone.setColor(SK_ColorGRAY);
+    paintClone.setTextSize(SkIntToScalar(20));
+    paintClone.setAntiAlias(true);
+    paintClone.setLCDRenderText(true);
+
+    std::unique_ptr<SkStreamAsset> distortableStream(
+        GetResourceAsStream("fonts/Distortable.ttf"));
+    if (!distortableStream) {
+        return;
+    }
+
+    const char* text = "abc";
+    const size_t textLen = strlen(text);
+    SkPoint point = SkPoint::Make(20.0f, 20.0f);
+    SkFourByteTag tag = SkSetFourByteTag('w', 'g', 'h', 't');
+
+    for (int i = 0; i < 10; ++i) {
+        SkScalar styleValue =
+            SkDoubleToScalar(0.5 + i * ((2.0 - 0.5) / 10));
+        SkFontArguments::VariationPosition::Coordinate
+            coordinates[] = {{tag, styleValue}};
+        SkFontArguments::VariationPosition
+            position = {coordinates, SK_ARRAY_COUNT(coordinates)};
+
+        paintStream.setTypeface(sk_sp<SkTypeface>(
+            fontMgr->makeFromStream(distortableStream->duplicate(),
+                                    SkFontArguments().setVariationDesignPosition(position))));
+        paintClone.setTypeface(sk_sp<SkTypeface>(
+            typeface->makeClone(SkFontArguments().setVariationDesignPosition(position))));
+
+        canvasStream.drawColor(SK_ColorWHITE);
+        canvasStream.drawText(text, textLen, point.fX, point.fY, paintStream);
+
+        canvasClone.drawColor(SK_ColorWHITE);
+        canvasClone.drawText(text, textLen, point.fX, point.fY, paintClone);
+
+        bool success = bitmap_compare(bitmapStream, bitmapClone);
+        REPORTER_ASSERT(reporter, success);
+    }
+}
\ No newline at end of file
