diff --git a/CMakeLists.txt b/CMakeLists.txt
index d65f9d58d61537465e07df578644411cc9f12502..ea73ef4086d952dbaf28bc81230432739a50b036 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -74,6 +74,7 @@ SEARCH_FOR_BOOST()
 SET(${PROJECT_NAME}_UTILS_HEADERS
   include/eigenpy/utils/scalar-name.hpp
   include/eigenpy/utils/is-approx.hpp
+  include/eigenpy/utils/is-aligned.hpp
   )
 
 SET(${PROJECT_NAME}_SOLVERS_HEADERS
diff --git a/include/eigenpy/eigen-allocator.hpp b/include/eigenpy/eigen-allocator.hpp
index d6fdf208b94bcfce888dd7b4bf330468a5028685..b5f92c696c5fa1bd02f349745378b2b5fde422a2 100644
--- a/include/eigenpy/eigen-allocator.hpp
+++ b/include/eigenpy/eigen-allocator.hpp
@@ -8,8 +8,7 @@
 #include "eigenpy/fwd.hpp"
 #include "eigenpy/map.hpp"
 #include "eigenpy/scalar-conversion.hpp"
-
-#include <boost/align/is_aligned.hpp>
+#include "eigenpy/utils/is-aligned.hpp"
 
 namespace eigenpy
 {
@@ -233,7 +232,7 @@ namespace eigenpy
       if(Options != Eigen::Unaligned) // we need to check whether the memory is correctly aligned and composed of a continuous segment
       {
         void * data_ptr = PyArray_DATA(pyArray);
-        if(!PyArray_ISONESEGMENT(pyArray) || !boost::alignment::is_aligned(Options,data_ptr))
+        if(!PyArray_ISONESEGMENT(pyArray) || !is_aligned(data_ptr,Option))
           need_to_allocate |= true;
       }
       
diff --git a/include/eigenpy/utils/is-aligned.hpp b/include/eigenpy/utils/is-aligned.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..e87691158b76f249754f7844826e3914aced7b06
--- /dev/null
+++ b/include/eigenpy/utils/is-aligned.hpp
@@ -0,0 +1,16 @@
+//
+// Copyright (c) 2020 INRIA
+//
+
+#ifndef __eigenpy_utils_is_aligned_hpp__
+#define __eigenpy_utils_is_aligned_hpp__
+
+namespace eigenpy
+{
+  inline bool is_aligned(void * ptr, std::size_t alignment)
+  {
+    return (reinterpret_cast<std::size_t>(ptr) & (alignment - 1)) == 0;
+  }
+}
+
+#endif