diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt
index 03d0997e78d6ccc4c4ead4556fba9ad43b3f8c78..747401e2c28abdb796cff0dc0ccda2e592fb865d 100644
--- a/unittest/CMakeLists.txt
+++ b/unittest/CMakeLists.txt
@@ -32,6 +32,7 @@ ENDMACRO(ADD_LIB_UNIT_TEST)
 ADD_LIB_UNIT_TEST(matrix "eigen3")
 ADD_LIB_UNIT_TEST(geometry "eigen3")
 ADD_LIB_UNIT_TEST(complex "eigen3")
+ADD_LIB_UNIT_TEST(return_by_ref "eigen3")
 IF(NOT ${EIGEN3_VERSION} VERSION_LESS "3.2.0")
   ADD_LIB_UNIT_TEST(ref "eigen3")
 ENDIF()
diff --git a/unittest/return_by_ref.cpp b/unittest/return_by_ref.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ae88b32b947ae0bf3b9c0dc639b5badb9cd6bac8
--- /dev/null
+++ b/unittest/return_by_ref.cpp
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2014-2019, CNRS
+ * Copyright 2018-2020, INRIA
+ */
+
+#include "eigenpy/eigenpy.hpp"
+#include <iostream>
+
+template<typename Matrix>
+struct Base
+{
+  Base(const Eigen::DenseIndex rows,
+       const Eigen::DenseIndex cols)
+  : mat(rows,cols)
+  {}
+  
+  void show()
+  {
+    std::cout << mat << std::endl;
+  }
+  
+  Matrix & ref() { return mat; }
+  Matrix  copy() { return mat; }
+  
+protected:
+  
+  Matrix mat;
+};
+
+
+BOOST_PYTHON_MODULE(return_by_ref)
+{
+  using namespace Eigen;
+  namespace bp = boost::python;
+  eigenpy::enableEigenPy();
+
+  
+  typedef Eigen::Matrix<double,Eigen::Dynamic,Eigen::Dynamic,Eigen::RowMajor> RowMatrixType;
+  bp::class_<Base<RowMatrixType> >("Matrix",bp::init<DenseIndex,DenseIndex>())
+  .def("show",&Base<RowMatrixType>::show)
+  .def("ref",&Base<RowMatrixType>::ref, bp::return_internal_reference<>())
+  .def("copy",&Base<RowMatrixType>::copy);
+}
+