diff --git a/src/register.cpp b/src/register.cpp
index 3fd2cccd8d8bca7c4f811e0dfb7754f43f346924..ada352457fbe7a16650a0a3539a9d848126d26ac 100644
--- a/src/register.cpp
+++ b/src/register.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright 2020 INRIA
+ * Copyright 2020-2021 INRIA
  */
 
 #include "eigenpy/register.hpp"
@@ -43,6 +43,20 @@ namespace eigenpy
                                 PyArray_CopySwapNFunc * copyswapn,
                                 PyArray_DotFunc * dotfunc)
   {
+    namespace bp = boost::python;
+    bp::list bases(bp::handle<>(bp::borrowed(py_type_ptr->tp_bases)));
+    bases.append((bp::handle<>(bp::borrowed(&PyGenericArrType_Type))));
+
+    bp::tuple tp_bases_extended(bases);
+    Py_INCREF(tp_bases_extended.ptr());
+    py_type_ptr->tp_bases = tp_bases_extended.ptr();
+
+    py_type_ptr->tp_flags &= ~Py_TPFLAGS_READY; // to force the rebuild
+    if(PyType_Ready(py_type_ptr) < 0) // Force rebuilding of the __bases__ and mro
+    {
+      throw std::invalid_argument("PyType_Ready fails to initialize input type.");
+    }
+
     PyArray_Descr * descr_ptr = new PyArray_Descr(*call_PyArray_DescrFromType(NPY_OBJECT));
     PyArray_Descr & descr = *descr_ptr;
     descr.typeobj = py_type_ptr;