diff --git a/include/eigenpy/numpy.hpp b/include/eigenpy/numpy.hpp
index 8bb32150bdd718fbd8b6a068af9c2e3a43f08533..1631a79752cf1153589f0886fb3e4b25cf0fac38 100644
--- a/include/eigenpy/numpy.hpp
+++ b/include/eigenpy/numpy.hpp
@@ -21,10 +21,10 @@
 
 #if defined _WIN32 || defined __CYGWIN__
   #define EIGENPY_GET_PY_ARRAY_TYPE(array) \
-    call_PyArray_ObjectType(reinterpret_cast<PyObject *>(array), 0)
+    call_PyArray_MinScalarType(array)->type_num
 #else
   #define EIGENPY_GET_PY_ARRAY_TYPE(array) \
-    PyArray_ObjectType(reinterpret_cast<PyObject *>(array), 0)
+    PyArray_MinScalarType(array)->type_num
 #endif
 
 namespace eigenpy
@@ -51,6 +51,10 @@ namespace eigenpy
   EIGENPY_DLLAPI void call_PyArray_InitArrFuncs(PyArray_ArrFuncs * funcs);
 
   EIGENPY_DLLAPI int call_PyArray_RegisterDataType(PyArray_Descr * dtype);
+
+  EIGENPY_DLLAPI int call_PyArray_RegisterCanCast(PyArray_Descr *descr, int totype, NPY_SCALARKIND scalar);
+
+  EIGENPY_DLLAPI PyArray_Descr * call_PyArray_MinScalarType(PyArrayObject *arr);
 }
 #else
   #define call_PyArray_Check(py_obj) PyArray_Check(py_obj)
@@ -59,8 +63,10 @@ namespace eigenpy
     PyArray_New(py_type_ptr,nd,shape,np_type,NULL,data_ptr,0,options,NULL)
   #define getPyArrayType() &PyArray_Type
   #define call_PyArray_DescrFromType(typenum) PyArray_DescrFromType(typenum)
+  #define call_PyArray_MinScalarType(py_arr) PyArray_MinScalarType(py_arr)
   #define call_PyArray_InitArrFuncs(funcs) PyArray_InitArrFuncs(funcs)
- #define call_PyArray_RegisterDataType(dtype) PyArray_RegisterDataType(dtype)
+  #define call_PyArray_RegisterDataType(dtype) PyArray_RegisterDataType(dtype)
+  #define call_PyArray_RegisterCanCast(descr,totype,scalar) PyArray_RegisterCanCast(descr,totype,scalar)
 #endif
 
 #endif // ifndef __eigenpy_numpy_hpp__
diff --git a/include/eigenpy/user-type.hpp b/include/eigenpy/user-type.hpp
index 20c12cabf02f5b1bf7d79686298105534a61e224..27ac831ee8f1b829a46ec6b1144fdb16c4c6fd20 100644
--- a/include/eigenpy/user-type.hpp
+++ b/include/eigenpy/user-type.hpp
@@ -198,6 +198,9 @@ namespace eigenpy
                                          copyswap, copyswapn,
                                          dotfunc);
     
+    call_PyArray_RegisterCanCast(call_PyArray_DescrFromType(NPY_OBJECT),
+                                 code, NPY_NOSCALAR);
+    
     return code;
   }
   
diff --git a/src/numpy.cpp b/src/numpy.cpp
index 10c3d7ea0557a69616b4cbf6af0869d80f645605..fc132c9571fc550c821a01887df378d91fbf9623 100644
--- a/src/numpy.cpp
+++ b/src/numpy.cpp
@@ -58,6 +58,16 @@ namespace eigenpy
   {
     return PyArray_RegisterDataType(dtype);
   }
+
+  PyArray_Descr * call_PyArray_MinScalarType(PyArrayObject * arr)
+  {
+    return PyArray_MinScalarType(arr);
+  }
+
+  int call_PyArray_RegisterCanCast(PyArray_Descr *descr, int totype, NPY_SCALARKIND scalar)
+  {
+    return PyArray_RegisterCanCast(descr,totype,scalar);
+  }
   
 #endif
 }