diff --git a/CMakeLists.txt b/CMakeLists.txt
index fe143b1f57c2de58a915fb2bfaa02c77efa01c6d..5e1f1b42074348798e95080832206f68cdd011c3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -207,6 +207,7 @@ set(${PROJECT_NAME}_SOURCES
     src/quaternion.cpp
     src/geometry-conversion.cpp
     src/std-vector.cpp
+    src/optional.cpp
     src/version.cpp)
 
 add_library(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_SOURCES}
diff --git a/include/eigenpy/optional.hpp b/include/eigenpy/optional.hpp
index 8394ba7244ad43c5f548a241979338f24fafa8af..be6fbe4742a6939982641512233ac6a50305b3e5 100644
--- a/include/eigenpy/optional.hpp
+++ b/include/eigenpy/optional.hpp
@@ -56,6 +56,15 @@ struct nullopt_helper<std::optional> {
 };
 #endif
 
+template <typename NoneType>
+struct NoneToPython {
+  static PyObject *convert(const NoneType &) { Py_RETURN_NONE; }
+
+  static void registration() {
+    bp::to_python_converter<NoneType, NoneToPython, false>();
+  }
+};
+
 template <typename T,
           template <typename> class OptionalTpl = EIGENPY_DEFAULT_OPTIONAL>
 struct OptionalToPython {
diff --git a/src/eigenpy.cpp b/src/eigenpy.cpp
index 62b9f88c8b5302476dc2f54613ddf663d0b3c885..6e13f13f3a9256d32bfb2186c8d616db677ca759 100644
--- a/src/eigenpy.cpp
+++ b/src/eigenpy.cpp
@@ -22,6 +22,8 @@ void exposeMatrixComplexFloat();
 void exposeMatrixComplexDouble();
 void exposeMatrixComplexLongDouble();
 
+void exposeNoneType();
+
 /* Enable Eigen-Numpy serialization for a set of standard MatrixBase instances.
  */
 void enableEigenPy() {
@@ -54,6 +56,8 @@ void enableEigenPy() {
   exposeMatrixComplexFloat();
   exposeMatrixComplexDouble();
   exposeMatrixComplexLongDouble();
+
+  exposeNoneType();
 }
 
 }  // namespace eigenpy
diff --git a/src/optional.cpp b/src/optional.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..eb56912111f9c1b7c0b374b3459e74904025ae88
--- /dev/null
+++ b/src/optional.cpp
@@ -0,0 +1,12 @@
+/// Copyright 2023 CNRS, INRIA
+
+#include "eigenpy/optional.hpp"
+
+namespace eigenpy {
+void exposeNoneType() {
+  detail::NoneToPython<boost::none_t>::registration();
+#ifdef EIGENPY_WITH_CXX17_SUPPORT
+  detail::NoneToPython<std::nullopt_t>::registration();
+#endif
+}
+}  // namespace eigenpy
diff --git a/unittest/bind_optional.cpp.in b/unittest/bind_optional.cpp.in
index f71773d6505fa7dd5c76174c8b9ac6db5359ab9e..844449b19e0437cdd5b7d6248586d74f4e43800a 100644
--- a/unittest/bind_optional.cpp.in
+++ b/unittest/bind_optional.cpp.in
@@ -74,6 +74,6 @@ BOOST_PYTHON_MODULE(@MODNAME@) {
           bp::make_setter(&mystruct::msg));
 
   bp::def("none_if_zero", none_if_zero, bp::args("i"));
-  bp::def("create_if_true", create_if_true, bp::args("flag", "b"));
+  bp::def("create_if_true", create_if_true, (bp::arg("flag"), bp::arg("b") = OPT_NONE));
   bp::def("random_mat_if_true", random_mat_if_true, bp::args("flag"));
 }