diff --git a/README.md b/README.md
index 9292dd8..2de5e27 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ HPP-FCL — An extension of the Flexible Collision Library
   <a href="http://projects.laas.fr/gepetto/doc/humanoid-path-planner/hpp-fcl/master/coverage/"><img src="https://gepgitlab.laas.fr/humanoid-path-planner/hpp-fcl/badges/master/coverage.svg?job=doc-coverage" alt="Coverage report"/></a>
   <a href="https://anaconda.org/conda-forge/hpp-fcl"><img src="https://img.shields.io/conda/dn/conda-forge/hpp-fcl.svg" alt="Conda Downloads"/></a>
   <a href="https://anaconda.org/conda-forge/hpp-fcl"><img src="https://img.shields.io/conda/vn/conda-forge/hpp-fcl.svg" alt="Conda Version"/></a>
-  <a href="https://badge.fury.io/py/hpp-fcl"><img src="https://badge.fury.io/py/hpp-fcl.svg" alt="PyPI version" height="18"></a>
+  <a href="https://badge.fury.io/py/hpp-fcl"><img src="https://badge.fury.io/py/hpp-fcl.svg" alt="PyPI version"></a>
 </p>
 
 This project is initially a fork from https://github.com/flexible-collision-library/fcl and has evolved since then.
Submodule cmake 9078d52..ee7a773:
diff --git a/cmake/Config.cmake.in b/cmake/Config.cmake.in
index f60c019..01f118b 100644
--- a/cmake/Config.cmake.in
+++ b/cmake/Config.cmake.in
@@ -22,6 +22,8 @@ set("@PROJECT_NAME_UPPER@_DOXYGENDOCDIR" "${PACKAGE_PREFIX_DIR}/share/doc/@PROJE
 set("@PROJECT_NAME@_DEPENDENCIES" "@_PACKAGE_CONFIG_DEPENDENCIES_PROJECTS@")
 set("@PROJECT_NAME@_PKG_CONFIG_DEPENDENCIES" "@_PKG_CONFIG_REQUIRES_LIST@")
 
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} @_PACKAGE_CONFIG_DEPENDENCIES_FIND_EXTERNAL@)
+
 # Find absolute library paths for all _PKG_CONFIG_LIBS as CMake expects full paths, while pkg-config does not.
 set(_PACKAGE_CONFIG_LIBRARIES "")
 set(_PKG_CONFIG_LIBDIR "@_PKG_CONFIG_LIBDIR@")
diff --git a/cmake/cxx-standard.cmake b/cmake/cxx-standard.cmake
index e4f8131..c687423 100644
--- a/cmake/cxx-standard.cmake
+++ b/cmake/cxx-standard.cmake
@@ -26,9 +26,6 @@ option(ENFORCE_MINIMAL_CXX_STANDARD "Set CMAKE_CXX_STANDARD if a dependency requ
 #
 #      Supported values are 98, 11, 14, 17, and 20.
 #
-#      Note on cross-compilation: Please manually fill the `_COMPILER_DEFAULT_CXX_STANDARD`
-#      variable for your target. Supported values are: 199711, 201103, 201402, 201703, and 202002.
-#
 macro(CHECK_MINIMAL_CXX_STANDARD STANDARD)
   set(options ENFORCE)
   set(oneValueArgs)
@@ -36,7 +33,7 @@ macro(CHECK_MINIMAL_CXX_STANDARD STANDARD)
   cmake_parse_arguments(MINIMAL_CXX_STANDARD "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
 
   # Get compiler default cxx standard, by printing "__cplusplus" (only once)
-  if(NOT DEFINED _COMPILER_DEFAULT_CXX_STANDARD)
+  if(NOT DEFINED _COMPILER_DEFAULT_CXX_STANDARD AND NOT CMAKE_CROSSCOMPILING)
     if(MSVC)
       # See https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
       string(APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus")
diff --git a/cmake/package-config.cmake b/cmake/package-config.cmake
index d244f3e..13031b1 100644
--- a/cmake/package-config.cmake
+++ b/cmake/package-config.cmake
@@ -49,11 +49,12 @@ set(namespace "${PROJECT_NAME}::")
 set(_PACKAGE_CONFIG_DEPENDENCIES_PROJECTS "" CACHE INTERNAL "")
 set(_PACKAGE_CONFIG_DEPENDENCIES_FIND_PACKAGE "" CACHE INTERNAL "")
 set(_PACKAGE_CONFIG_DEPENDENCIES_FIND_DEPENDENCY "" CACHE INTERNAL "")
+set(_PACKAGE_CONFIG_DEPENDENCIES_FIND_EXTERNAL "" CACHE INTERNAL "")
 set(PACKAGE_EXTRA_MACROS "" CACHE INTERNAL "")
 ENDMACRO(_SETUP_PROJECT_PACKAGE_INIT)
 
 #.rst:
-# .. command:: ADD_PROJECT_DEPENDENCY(ARGS [PKG_CONFIG_REQUIRES pkg] [FOR_COMPONENT component])
+# .. command:: ADD_PROJECT_DEPENDENCY(ARGS [PKG_CONFIG_REQUIRES pkg] [FOR_COMPONENT component] [FIND_EXTERNAL pkg])
 #
 #   This is a wrapper around find_package to add correct find_dependency calls in
 #   the generated config script. All arguments are passed to find_package.
@@ -65,10 +66,13 @@ ENDMACRO(_SETUP_PROJECT_PACKAGE_INIT)
 #   If PKG_CONFIG_REQUIRES is provided, it will also add pkg to the Requires
 #   section of the generated .pc file
 #
+#   If FIND_EXTERNAL is provided, a custom dependency finder will be added in $CMAKE_MODULE_PATH
+#   and installed with the project
+#
 MACRO(ADD_PROJECT_DEPENDENCY)
   # add dependency to the generated .pc
   # ref https://github.com/jrl-umi3218/jrl-cmakemodules/pull/335
-  cmake_parse_arguments(PARSED_ARGN "" "PKG_CONFIG_REQUIRES;FOR_COMPONENT" "" ${ARGN})
+  cmake_parse_arguments(PARSED_ARGN "" "PKG_CONFIG_REQUIRES;FOR_COMPONENT;FIND_EXTERNAL" "" ${ARGN})
   IF(PARSED_ARGN_PKG_CONFIG_REQUIRES)
     _ADD_TO_LIST_IF_NOT_PRESENT(_PKG_CONFIG_REQUIRES "${PARSED_ARGN_PKG_CONFIG_REQUIRES}")
     _ADD_TO_LIST_IF_NOT_PRESENT(_PKG_CONFIG_DEP_NOT_FOR_CONFIG_CMAKE "${PARSED_ARGN_PKG_CONFIG_REQUIRES}")
@@ -76,6 +80,15 @@ MACRO(ADD_PROJECT_DEPENDENCY)
   if(PARSED_ARGN_FOR_COMPONENT)
     set(component "_${PARSED_ARGN_FOR_COMPONENT}")
   endif(PARSED_ARGN_FOR_COMPONENT)
+  if(PARSED_ARGN_FIND_EXTERNAL)
+    set(_ext "find-external/${PARSED_ARGN_FIND_EXTERNAL}")
+    set(CMAKE_MODULE_PATH "${PROJECT_JRL_CMAKE_MODULE_DIR}/${_ext}"
+      ${CMAKE_MODULE_PATH})
+    set(_PACKAGE_CONFIG_DEPENDENCIES_FIND_EXTERNAL
+      "${_PACKAGE_CONFIG_DEPENDENCIES_FIND_EXTERNAL}\n \${PACKAGE_PREFIX_DIR}/${CONFIG_INSTALL_DIR}/${_ext}")
+    install(DIRECTORY "${PROJECT_JRL_CMAKE_MODULE_DIR}/${_ext}"
+      DESTINATION "${CONFIG_INSTALL_DIR}/find-external")
+  endif()
   _ADD_TO_LIST_IF_NOT_PRESENT(_PACKAGE_CONFIG${component}_DEPENDENCIES_PROJECTS "${ARGV0}")
 
   string(REPLACE ";" " " PACKAGE_ARGS "${PARSED_ARGN_UNPARSED_ARGUMENTS}")
diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
index 07a72ef..aee9d22 100644
--- a/python/CMakeLists.txt
+++ b/python/CMakeLists.txt
@@ -42,6 +42,7 @@ SET(LIBRARY_NAME hppfcl)
 
 SET(${LIBRARY_NAME}_HEADERS
   fcl.hh
+  deprecation.hh
   )
 
 SET(ENABLE_PYTHON_DOXYGEN_AUTODOC TRUE CACHE BOOL "Enable automatic documentation of Python bindings from Doxygen documentation")
diff --git a/python/collision-geometries.cc b/python/collision-geometries.cc
index e6f35f8..54cac0b 100644
--- a/python/collision-geometries.cc
+++ b/python/collision-geometries.cc
@@ -33,8 +33,10 @@
 //  POSSIBILITY OF SUCH DAMAGE.
 
 #include <eigenpy/eigenpy.hpp>
+#include <eigenpy/eigen-to-python.hpp>
 
 #include "fcl.hh"
+#include "deprecation.hh"
 
 #include <hpp/fcl/fwd.hh>
 #include <hpp/fcl/shape/geometric_shapes.h>
@@ -69,6 +71,7 @@
 using namespace boost::python;
 using namespace hpp::fcl;
 namespace dv = doxygen::visitor;
+namespace bp = boost::python;
 
 using boost::noncopyable;
 
@@ -77,18 +80,19 @@ typedef std::vector<Triangle> Triangles;
 
 struct BVHModelBaseWrapper
 {
-  typedef Eigen::Matrix<double,Eigen::Dynamic,3> MatrixX3;
-  typedef Eigen::Map<MatrixX3> MapMatrixX3;
+  typedef Eigen::Matrix<double,Eigen::Dynamic,3,Eigen::RowMajor> RowMatrixX3;
+  typedef Eigen::Map<RowMatrixX3> MapRowMatrixX3;
+  typedef Eigen::Ref<RowMatrixX3> RefRowMatrixX3;
   
-  static Vec3f & vertice (BVHModelBase & bvh, int i)
+  static Vec3f & vertex (BVHModelBase & bvh, int i)
   {
     if (i >= bvh.num_vertices) throw std::out_of_range("index is out of range");
     return bvh.vertices[i];
   }
 
-  static MapMatrixX3 vertices(BVHModelBase & bvh)
+  static RefRowMatrixX3 vertices(BVHModelBase & bvh)
   {
-    return MapMatrixX3(bvh.vertices[0].data(),bvh.num_vertices,3);
+    return MapRowMatrixX3(bvh.vertices[0].data(),bvh.num_vertices,3);
   }
   
   static Triangle tri_indices (const BVHModelBase& bvh, int i)
@@ -119,11 +123,20 @@ void exposeBVHModel (const std::string& bvname)
 
 struct ConvexBaseWrapper
 {
-  static Vec3f points (const ConvexBase& convex, int i)
+  typedef Eigen::Matrix<double,Eigen::Dynamic,3,Eigen::RowMajor> RowMatrixX3;
+  typedef Eigen::Map<RowMatrixX3> MapRowMatrixX3;
+  typedef Eigen::Ref<RowMatrixX3> RefRowMatrixX3;
+  
+  static Vec3f & point (const ConvexBase& convex, int i)
   {
     if (i >= convex.num_points) throw std::out_of_range("index is out of range");
     return convex.points[i];
   }
+  
+  static RefRowMatrixX3 points (const ConvexBase& convex)
+  {
+    return MapRowMatrixX3(convex.points[0].data(),convex.num_points,3);
+  }
 
   static list neighbors (const ConvexBase& convex, int i)
   {
@@ -229,7 +242,18 @@ void exposeShapes ()
     ("ConvexBase", doxygen::class_doc<ConvexBase>(), no_init)
     .DEF_RO_CLASS_ATTRIB (ConvexBase, center)
     .DEF_RO_CLASS_ATTRIB (ConvexBase, num_points)
-    .def ("points", &ConvexBaseWrapper::points)
+    .def ("point", &ConvexBaseWrapper::point,
+          bp::args("self","index"),"Retrieve the point given by its index.",
+          bp::return_internal_reference<>())
+    .def ("points", &ConvexBaseWrapper::point,
+          bp::args("self","index"),"Retrieve the point given by its index.",
+          ::hpp::fcl::python::deprecated_member< bp::return_internal_reference<> >())
+    .def ("points", &ConvexBaseWrapper::points,
+          bp::args("self"),"Retrieve all the points.",
+          bp::with_custodian_and_ward_postcall<0,1>())
+  //    .add_property ("points",
+  //                   bp::make_function(&ConvexBaseWrapper::points,bp::with_custodian_and_ward_postcall<0,1>()),
+  //                   "Points of the convex.")
     .def ("neighbors", &ConvexBaseWrapper::neighbors)
     .def ("convexHull", &ConvexBaseWrapper::convexHull,
         doxygen::member_func_doc(&ConvexBase::convexHull),
@@ -367,8 +391,6 @@ void exposeCollisionGeometries ()
       ;
   }
   
-  namespace bp = boost::python;
-  
   class_<AABB>("AABB",
                "A class describing the AABB collision structure, which is a box in 3D space determined by two diagonal points",
                no_init)
@@ -469,12 +491,18 @@ void exposeCollisionGeometries ()
 
   class_ <BVHModelBase, bases<CollisionGeometry>, BVHModelPtr_t, noncopyable>
     ("BVHModelBase", no_init)
-    .def ("vertice", &BVHModelBaseWrapper::vertice,
+    .def ("vertex", &BVHModelBaseWrapper::vertex,
           bp::args("self","index"),"Retrieve the vertex given by its index.",
           bp::return_internal_reference<>())
+    .def ("vertices", &BVHModelBaseWrapper::vertex,
+          bp::args("self","index"),"Retrieve the vertex given by its index.",
+          ::hpp::fcl::python::deprecated_member< bp::return_internal_reference<> >())
     .def ("vertices", &BVHModelBaseWrapper::vertices,
-          bp::args("self"),"Retrieve the vertex given by its index.",
+          bp::args("self"),"Retrieve all the vertices.",
           bp::with_custodian_and_ward_postcall<0,1>())
+//    .add_property ("vertices",
+//                   bp::make_function(&BVHModelBaseWrapper::vertices,bp::with_custodian_and_ward_postcall<0,1>()),
+//                   "Vertices of the BVH.")
     .def ("tri_indices", &BVHModelBaseWrapper::tri_indices,
           bp::args("self","index"),"Retrieve the triangle given by its index.")
     .def_readonly ("num_vertices", &BVHModelBase::num_vertices)
diff --git a/python/deprecation.hh b/python/deprecation.hh
new file mode 100644
index 0000000..b5d90df
--- /dev/null
+++ b/python/deprecation.hh
@@ -0,0 +1,61 @@
+//
+// Copyright (c) 2020-2021 INRIA
+//
+
+#ifndef HPP_FCL_PYTHON_UTILS_DEPRECATION_H
+#define HPP_FCL_PYTHON_UTILS_DEPRECATION_H
+
+#include <Python.h>
+#include <boost/python.hpp>
+#include <string>
+
+namespace hpp {
+namespace fcl {
+namespace python {
+
+  template<class Policy = boost::python::default_call_policies>
+  struct deprecated_warning_policy : Policy
+  {
+    deprecated_warning_policy(const std::string & warning_message = "")
+    : Policy()
+    , m_warning_message(warning_message)
+    {}
+  
+    template <class ArgumentPackage>
+    bool precall(ArgumentPackage const & args) const
+    {
+      PyErr_WarnEx(PyExc_UserWarning,m_warning_message.c_str(),1);
+      return static_cast<const Policy*>(this)->precall(args);
+    }
+  
+    typedef typename Policy::result_converter result_converter;
+    typedef typename Policy::argument_package argument_package;
+  
+  protected:
+  
+    const std::string m_warning_message;
+  };
+
+  template<class Policy = boost::python::default_call_policies>
+  struct deprecated_member : deprecated_warning_policy<Policy>
+  {
+    deprecated_member(const std::string & warning_message
+                      = "This class member has been marked as deprecated and will be removed in a future release.")
+    : deprecated_warning_policy<Policy>(warning_message)
+    {}
+  };
+
+  template<class Policy = boost::python::default_call_policies>
+  struct deprecated_function : deprecated_warning_policy<Policy>
+  {
+    deprecated_function(const std::string & warning_message
+                        = "This function has been marked as deprecated and will be removed in a future release.")
+    : deprecated_warning_policy<Policy>(warning_message)
+    {}
+  };
+
+}
+}
+}
+
+#endif // ifndef HPP_FCL_PYTHON_UTILS_DEPRECATION_H
diff --git a/python/fcl.cc b/python/fcl.cc
index ccc5883..ccac1d1 100644
--- a/python/fcl.cc
+++ b/python/fcl.cc
@@ -89,6 +89,10 @@ void exposeMeshLoader ()
 
 BOOST_PYTHON_MODULE(hppfcl)
 {
+  namespace bp = boost::python;
+  
+  PyImport_ImportModule("warnings");
+  
   exposeVersion();
   exposeMaths();
   exposeCollisionGeometries();
