diff --git a/include/eigenpy/ufunc.hpp b/include/eigenpy/ufunc.hpp
index eb2c049cb9be65a06884383e17407131035b9a6d..2647f8cf2742ff050b85bc8148d975bf5b93d676 100644
--- a/include/eigenpy/ufunc.hpp
+++ b/include/eigenpy/ufunc.hpp
@@ -12,9 +12,15 @@ namespace eigenpy
   namespace internal
   {
   
+#ifdef NPY_1_19_API_VERSION
+  #define EIGENPY_NPY_CONST_UFUNC_ARG const
+#else
+  #define EIGENPY_NPY_CONST_UFUNC_ARG
+#endif
+  
 #define EIGENPY_REGISTER_BINARY_OPERATOR(name,op) \
     template<typename T1, typename T2, typename R> \
-    void binary_op_##name(char** args, const npy_intp * dimensions, const npy_intp * steps, void * /*data*/) \
+    void binary_op_##name(char** args, EIGENPY_NPY_CONST_UFUNC_ARG npy_intp * dimensions, EIGENPY_NPY_CONST_UFUNC_ARG npy_intp * steps, void * /*data*/) \
     { \
       npy_intp is0 = steps[0], is1 = steps[1], \
       os = steps[2], n = *dimensions; \
@@ -31,7 +37,7 @@ namespace eigenpy
     } \
     \
     template<typename T> \
-    void binary_op_##name(char** args, const npy_intp * dimensions, const npy_intp * steps, void * data) \
+    void binary_op_##name(char** args, EIGENPY_NPY_CONST_UFUNC_ARG npy_intp * dimensions, EIGENPY_NPY_CONST_UFUNC_ARG npy_intp * steps, void * data) \
     { \
       binary_op_##name<T,T,T>(args,dimensions,steps,data); \
     }
@@ -49,7 +55,7 @@ namespace eigenpy
   
   #define EIGENPY_REGISTER_UNARY_OPERATOR(name,op) \
     template<typename T, typename R> \
-    void unary_op_##name(char** args, const npy_intp * dimensions, const npy_intp * steps, void * /*data*/) \
+    void unary_op_##name(char** args, EIGENPY_NPY_CONST_UFUNC_ARG npy_intp * dimensions, EIGENPY_NPY_CONST_UFUNC_ARG npy_intp * steps, void * /*data*/) \
     { \
       npy_intp is = steps[0], \
       os = steps[1], n = *dimensions; \
@@ -65,7 +71,7 @@ namespace eigenpy
     } \
     \
     template<typename T> \
-    void unary_op_##name(char** args, const npy_intp * dimensions, const npy_intp * steps, void * data) \
+    void unary_op_##name(char** args, EIGENPY_NPY_CONST_UFUNC_ARG npy_intp * dimensions, EIGENPY_NPY_CONST_UFUNC_ARG npy_intp * steps, void * data) \
     { \
       unary_op_##name<T,T>(args,dimensions,steps,data); \
     }