diff --git a/bridge/CMakeLists.txt b/bridge/CMakeLists.txt
index b63cf703c8..ca627ffa4a 100644
--- a/bridge/CMakeLists.txt
+++ b/bridge/CMakeLists.txt
@@ -558,7 +558,7 @@ if (${WEBF_JS_ENGINE} MATCHES "quickjs")
     out/qjs_union_double_sequencedouble.cc
     out/qjs_unionhtml_image_elementhtml_canvas_element.cc
     out/qjs_union_dom_stringcanvas_gradient.cc
-    out/qjs_union_sequencedoubledom_matrix_init.cc
+    out/qjs_union_sequencedoubledom_matrixdom_matrix_init.cc
     out/qjs_union_doubledom_point_init.cc
     out/canvas_types.cc
     out/qjs_html_button_element.cc
diff --git a/bridge/core/geometry/dom_matrix.cc b/bridge/core/geometry/dom_matrix.cc
index d49b44e15b..2ac5128208 100644
--- a/bridge/core/geometry/dom_matrix.cc
+++ b/bridge/core/geometry/dom_matrix.cc
@@ -8,7 +8,7 @@
 namespace webf {
 
 DOMMatrix* DOMMatrix::Create(ExecutingContext* context,
-                             const std::shared_ptr<QJSUnionSequenceDoubleDOMMatrixInit>& init,
+                             const std::shared_ptr<QJSUnionSequenceDoubleDOMMatrixDOMMatrixInit>& init,
                              ExceptionState& exception_state) {
   return MakeGarbageCollected<DOMMatrix>(context, init, exception_state);
 }
@@ -27,7 +27,7 @@ DOMMatrix::DOMMatrix(webf::ExecutingContext* context, webf::ExceptionState& exce
       DOMMatrixReadOnly(context, exception_state) {}
 
 DOMMatrix::DOMMatrix(ExecutingContext* context,
-                     const std::shared_ptr<QJSUnionSequenceDoubleDOMMatrixInit>& init,
+                     const std::shared_ptr<QJSUnionSequenceDoubleDOMMatrixDOMMatrixInit>& init,
                      ExceptionState& exception_state)
     : DOMMatrixReadOnly(context, init, exception_state) {}
 
diff --git a/bridge/core/geometry/dom_matrix.d.ts b/bridge/core/geometry/dom_matrix.d.ts
index 22b12d58ed..7a463af201 100644
--- a/bridge/core/geometry/dom_matrix.d.ts
+++ b/bridge/core/geometry/dom_matrix.d.ts
@@ -2,5 +2,5 @@ import {DOMMatrixInit} from "./dom_matrix_init";
 import {DOMMatrixReadOnly} from "./dom_matrix_read_only";
 
 interface DOMMatrix extends DOMMatrixReadOnly {
-    new(init?: number[] | DOMMatrixInit): DOMMatrix;
+    new(init?: number[] | DOMMatrix | DOMMatrixInit): DOMMatrix;
 }
\ No newline at end of file
diff --git a/bridge/core/geometry/dom_matrix.h b/bridge/core/geometry/dom_matrix.h
index 5b2b93a4d0..9d4b6ca819 100644
--- a/bridge/core/geometry/dom_matrix.h
+++ b/bridge/core/geometry/dom_matrix.h
@@ -15,7 +15,7 @@ class DOMMatrix : public DOMMatrixReadOnly {
  public:
   using ImplType = DOMMatrix*;
   static DOMMatrix* Create(ExecutingContext* context,
-                           const std::shared_ptr<QJSUnionSequenceDoubleDOMMatrixInit>& init,
+                           const std::shared_ptr<QJSUnionSequenceDoubleDOMMatrixDOMMatrixInit>& init,
                            ExceptionState& exception_state);
   static DOMMatrix* Create(ExecutingContext* context,
                            ExceptionState& exception_state);
@@ -27,7 +27,7 @@ class DOMMatrix : public DOMMatrixReadOnly {
   explicit DOMMatrix(ExecutingContext* context,
                      ExceptionState& exception_state);
   explicit DOMMatrix(ExecutingContext* context,
-                     const std::shared_ptr<QJSUnionSequenceDoubleDOMMatrixInit>& init,
+                     const std::shared_ptr<QJSUnionSequenceDoubleDOMMatrixDOMMatrixInit>& init,
                      ExceptionState& exception_state);
   explicit DOMMatrix(ExecutingContext* context,
                      NativeBindingObject* native_binding_object);
diff --git a/bridge/core/geometry/dom_matrix_read_only.cc b/bridge/core/geometry/dom_matrix_read_only.cc
index d1f028b492..e8559551f5 100644
--- a/bridge/core/geometry/dom_matrix_read_only.cc
+++ b/bridge/core/geometry/dom_matrix_read_only.cc
@@ -13,7 +13,7 @@
 
 namespace webf {
 DOMMatrixReadOnly* DOMMatrixReadOnly::Create(ExecutingContext* context,
-                                             const std::shared_ptr<QJSUnionSequenceDoubleDOMMatrixInit>& init,
+                                             const std::shared_ptr<QJSUnionSequenceDoubleDOMMatrixDOMMatrixInit>& init,
                                              ExceptionState& exception_state) {
   return MakeGarbageCollected<DOMMatrixReadOnly>(context, init, exception_state);
 }
@@ -44,7 +44,7 @@ DOMMatrix* DOMMatrixReadOnly::fromMatrix(ExecutingContext* context,
 }
 
 DOMMatrixReadOnly::DOMMatrixReadOnly(ExecutingContext* context,
-                                     const std::shared_ptr<QJSUnionSequenceDoubleDOMMatrixInit>& init,
+                                     const std::shared_ptr<QJSUnionSequenceDoubleDOMMatrixDOMMatrixInit>& init,
                                      ExceptionState& exception_state)
     : BindingObject(context->ctx()) {
 
@@ -54,6 +54,13 @@ DOMMatrixReadOnly::DOMMatrixReadOnly(ExecutingContext* context,
     GetExecutingContext()->dartMethodPtr()->createBindingObject(GetExecutingContext()->isDedicated(),
                                                               GetExecutingContext()->contextId(), bindingObject(),
                                                               CreateBindingObjectType::kCreateDOMMatrix, arguments, 1);
+  } else if(init->IsDOMMatrix()) {
+    auto domMatrix = init->GetAsDOMMatrix();
+    NativeValue arguments[1];
+    arguments[0] = NativeValueConverter<NativeTypePointer<DOMMatrix>>::ToNativeValue(init->GetAsDOMMatrix());
+    GetExecutingContext()->dartMethodPtr()->createBindingObject(GetExecutingContext()->isDedicated(),
+                                                              GetExecutingContext()->contextId(), bindingObject(),
+                                                              CreateBindingObjectType::kCreateDOMMatrix, arguments, 1);
   } else if (init->IsDOMMatrixInit()) {
     std::vector<double> domMatrixInitVectorDouble;
     auto domMatrixInit = init->GetAsDOMMatrixInit();
diff --git a/bridge/core/geometry/dom_matrix_read_only.d.ts b/bridge/core/geometry/dom_matrix_read_only.d.ts
index a81735efb2..ba46ce76a1 100644
--- a/bridge/core/geometry/dom_matrix_read_only.d.ts
+++ b/bridge/core/geometry/dom_matrix_read_only.d.ts
@@ -49,5 +49,5 @@ interface DOMMatrixReadOnly {
     // fromFloat32Array(): StaticMethod<DOMMatrix>;
     // fromFloat64Array(): StaticMethod<DOMMatrix>;
     fromMatrix(matrix: DOMMatrix): StaticMethod<DOMMatrix>;
-    new(init?: number[] | DOMMatrixInit): DOMMatrixReadOnly;
+    new(init?: number[] | DOMMatrix | DOMMatrixInit): DOMMatrixReadOnly;
 }
\ No newline at end of file
diff --git a/bridge/core/geometry/dom_matrix_read_only.h b/bridge/core/geometry/dom_matrix_read_only.h
index dc489f6e49..99138cad4f 100644
--- a/bridge/core/geometry/dom_matrix_read_only.h
+++ b/bridge/core/geometry/dom_matrix_read_only.h
@@ -8,7 +8,7 @@
 #include "bindings/qjs/script_wrappable.h"
 #include "core/binding_object.h"
 #include "qjs_dom_matrix_init.h"
-#include "qjs_union_sequencedoubledom_matrix_init.h"
+#include "qjs_union_sequencedoubledom_matrixdom_matrix_init.h"
 
 namespace webf {
 
@@ -21,7 +21,7 @@ class DOMMatrixReadOnly : public BindingObject {
  public:
   using ImplType = DOMMatrixReadOnly*;
   static DOMMatrixReadOnly* Create(ExecutingContext* context,
-                                   const std::shared_ptr<QJSUnionSequenceDoubleDOMMatrixInit>& init,
+                                   const std::shared_ptr<QJSUnionSequenceDoubleDOMMatrixDOMMatrixInit>& init,
                                    ExceptionState& exception_state);
   static DOMMatrixReadOnly* Create(ExecutingContext* context,
                                    ExceptionState& exception_state);
@@ -29,7 +29,7 @@ class DOMMatrixReadOnly : public BindingObject {
 
   DOMMatrixReadOnly() = delete;
   explicit DOMMatrixReadOnly(ExecutingContext* context,
-                             const std::shared_ptr<QJSUnionSequenceDoubleDOMMatrixInit>& init,
+                             const std::shared_ptr<QJSUnionSequenceDoubleDOMMatrixDOMMatrixInit>& init,
                              ExceptionState& exception_state);
   explicit DOMMatrixReadOnly(ExecutingContext* context, ExceptionState& exception_state);