diff --git a/gn/effects_imagefilters.gni b/gn/effects_imagefilters.gni
index 9ca09d0..bbb5896 100644
--- a/gn/effects_imagefilters.gni
+++ b/gn/effects_imagefilters.gni
@@ -24,7 +24,6 @@
   "$_src/effects/imagefilters/SkMagnifierImageFilter.cpp",
   "$_src/effects/imagefilters/SkMatrixConvolutionImageFilter.cpp",
   "$_src/effects/imagefilters/SkMergeImageFilter.cpp",
-  "$_src/effects/imagefilters/SkMergeImageFilter.h",
   "$_src/effects/imagefilters/SkMorphologyImageFilter.cpp",
   "$_src/effects/imagefilters/SkMorphologyImageFilter.h",
   "$_src/effects/imagefilters/SkOffsetImageFilter.cpp",
diff --git a/src/core/SkImageFilter_Base.h b/src/core/SkImageFilter_Base.h
index 98ef1dc..11ba0a2 100644
--- a/src/core/SkImageFilter_Base.h
+++ b/src/core/SkImageFilter_Base.h
@@ -495,5 +495,6 @@
 void SkRegisterLightingImageFilterFlattenables();
 void SkRegisterMagnifierImageFilterFlattenable();
 void SkRegisterMatrixConvolutionImageFilterFlattenable();
+void SkRegisterMergeImageFilterFlattenable();
 
 #endif // SkImageFilter_Base_DEFINED
diff --git a/src/effects/imagefilters/SkImageFilters.cpp b/src/effects/imagefilters/SkImageFilters.cpp
index 73c524c..cc87fd5 100644
--- a/src/effects/imagefilters/SkImageFilters.cpp
+++ b/src/effects/imagefilters/SkImageFilters.cpp
@@ -9,7 +9,6 @@
 
 #include "include/core/SkPaint.h"
 
-#include "src/effects/imagefilters/SkMergeImageFilter.h"
 #include "src/effects/imagefilters/SkMorphologyImageFilter.h"
 #include "src/effects/imagefilters/SkOffsetImageFilter.h"
 #include "src/effects/imagefilters/SkPaintImageFilter.h"
@@ -22,7 +21,6 @@
 
 void SkImageFilters::RegisterFlattenables() {
     SkDilateImageFilter::RegisterFlattenables();
-    SkMergeImageFilter::RegisterFlattenables();
     SkOffsetImageFilter::RegisterFlattenables();
     SkPaintImageFilter::RegisterFlattenables();
     SkPictureImageFilter::RegisterFlattenables();
@@ -45,11 +43,6 @@
 }
 #endif
 
-sk_sp<SkImageFilter> SkImageFilters::Merge(
-        sk_sp<SkImageFilter>* const filters, int count, const CropRect& cropRect) {
-    return SkMergeImageFilter::Make(filters, count, cropRect);
-}
-
 sk_sp<SkImageFilter> SkImageFilters::Offset(
         SkScalar dx, SkScalar dy, sk_sp<SkImageFilter> input, const CropRect& cropRect) {
     return SkOffsetImageFilter::Make(dx, dy, std::move(input), cropRect);
diff --git a/src/effects/imagefilters/SkMergeImageFilter.cpp b/src/effects/imagefilters/SkMergeImageFilter.cpp
index 5cac438..74a9509 100644
--- a/src/effects/imagefilters/SkMergeImageFilter.cpp
+++ b/src/effects/imagefilters/SkMergeImageFilter.cpp
@@ -5,9 +5,8 @@
  * found in the LICENSE file.
  */
 
-#include "src/effects/imagefilters/SkMergeImageFilter.h"
-
 #include "include/core/SkCanvas.h"
+#include "include/effects/SkImageFilters.h"
 #include "src/core/SkImageFilter_Base.h"
 #include "src/core/SkReadBuffer.h"
 #include "src/core/SkSpecialImage.h"
@@ -17,10 +16,10 @@
 
 namespace {
 
-class SkMergeImageFilterImpl final : public SkImageFilter_Base {
+class SkMergeImageFilter final : public SkImageFilter_Base {
 public:
-    SkMergeImageFilterImpl(sk_sp<SkImageFilter>* const filters, int count,
-                           const SkRect* cropRect)
+    SkMergeImageFilter(sk_sp<SkImageFilter>* const filters, int count,
+                       const SkRect* cropRect)
             : INHERITED(filters, count, cropRect) {
         SkASSERT(count >= 0);
     }
@@ -30,37 +29,36 @@
     bool onCanHandleComplexCTM() const override { return true; }
 
 private:
-    friend void SkMergeImageFilter::RegisterFlattenables();
-    SK_FLATTENABLE_HOOKS(SkMergeImageFilterImpl)
+    friend void ::SkRegisterMergeImageFilterFlattenable();
+    SK_FLATTENABLE_HOOKS(SkMergeImageFilter)
 
     using INHERITED = SkImageFilter_Base;
 };
 
 } // end namespace
-
-sk_sp<SkImageFilter> SkMergeImageFilter::Make(sk_sp<SkImageFilter>* const filters, int count,
-                                               const SkRect* cropRect) {
-    return sk_sp<SkImageFilter>(new SkMergeImageFilterImpl(filters, count, cropRect));
+sk_sp<SkImageFilter> SkImageFilters::Merge(sk_sp<SkImageFilter>* const filters, int count,
+                                           const CropRect& cropRect) {
+    return sk_sp<SkImageFilter>(new SkMergeImageFilter(filters, count, cropRect));
 }
 
-void SkMergeImageFilter::RegisterFlattenables() {
-    SK_REGISTER_FLATTENABLE(SkMergeImageFilterImpl);
+void SkRegisterMergeImageFilterFlattenable() {
+    SK_REGISTER_FLATTENABLE(SkMergeImageFilter);
     // TODO (michaelludwig) - Remove after grace period for SKPs to stop using old name
-    SkFlattenable::Register("SkMergeImageFilter", SkMergeImageFilterImpl::CreateProc);
+    SkFlattenable::Register("SkMergeImageFilterImpl", SkMergeImageFilter::CreateProc);
 }
 
-///////////////////////////////////////////////////////////////////////////////
-
-sk_sp<SkFlattenable> SkMergeImageFilterImpl::CreateProc(SkReadBuffer& buffer) {
+sk_sp<SkFlattenable> SkMergeImageFilter::CreateProc(SkReadBuffer& buffer) {
     Common common;
     if (!common.unflatten(buffer, -1) || !buffer.isValid()) {
         return nullptr;
     }
-    return SkMergeImageFilter::Make(common.inputs(), common.inputCount(), common.cropRect());
+    return SkImageFilters::Merge(common.inputs(), common.inputCount(), common.cropRect());
 }
 
-sk_sp<SkSpecialImage> SkMergeImageFilterImpl::onFilterImage(const Context& ctx,
-                                                            SkIPoint* offset) const {
+///////////////////////////////////////////////////////////////////////////////
+
+sk_sp<SkSpecialImage> SkMergeImageFilter::onFilterImage(const Context& ctx,
+                                                        SkIPoint* offset) const {
     int inputCount = this->countInputs();
     if (inputCount < 1) {
         return nullptr;
diff --git a/src/effects/imagefilters/SkMergeImageFilter.h b/src/effects/imagefilters/SkMergeImageFilter.h
deleted file mode 100644
index c7e801a..0000000
--- a/src/effects/imagefilters/SkMergeImageFilter.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2012 The Android Open Source Project
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkMergeImageFilter_DEFINED
-#define SkMergeImageFilter_DEFINED
-
-#include "include/core/SkImageFilter.h"
-
-// DEPRECATED: Use include/effects/SkImageFilters::Merge
-class SK_API SkMergeImageFilter {
-public:
-    static sk_sp<SkImageFilter> Make(sk_sp<SkImageFilter>* const filters, int count,
-                                     const SkRect* cropRect = nullptr);
-
-    static sk_sp<SkImageFilter> Make(sk_sp<SkImageFilter> first, sk_sp<SkImageFilter> second,
-                                     const SkRect* cropRect = nullptr) {
-        sk_sp<SkImageFilter> array[] = {
-            std::move(first),
-            std::move(second),
-        };
-        return Make(array, 2, cropRect);
-    }
-
-    static void RegisterFlattenables();
-
-private:
-    SkMergeImageFilter() = delete;
-};
-
-#endif
diff --git a/src/ports/SkGlobalInitialization_default.cpp b/src/ports/SkGlobalInitialization_default.cpp
index 5dd1dad..c79f947 100644
--- a/src/ports/SkGlobalInitialization_default.cpp
+++ b/src/ports/SkGlobalInitialization_default.cpp
@@ -128,6 +128,7 @@
         SkRegisterLightingImageFilterFlattenables();
         SkRegisterMagnifierImageFilterFlattenable();
         SkRegisterMatrixConvolutionImageFilterFlattenable();
+        SkRegisterMergeImageFilterFlattenable();
         SK_REGISTER_FLATTENABLE(SkLocalMatrixImageFilter);
         SK_REGISTER_FLATTENABLE(SkMatrixImageFilter);
     }
