diff --git a/CMakeLists.txt b/CMakeLists.txt
index ba1bf98e01c2ef857f01b26d8dc971d834e44ef0..b1856dcc0f900cd82915f06f0e59b4557d6d993c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -245,6 +245,7 @@ SET(${PROJECT_NAME}_HEADERS
   include/hpp/fcl/distance_func_matrix.h
   include/hpp/fcl/collision.h
   include/hpp/fcl/collision_func_matrix.h
+  include/hpp/fcl/contact_patch.h
   include/hpp/fcl/distance.h
   include/hpp/fcl/math/matrix_3f.h
   include/hpp/fcl/math/vec_3f.h
diff --git a/include/hpp/fcl/contact_patch.h b/include/hpp/fcl/contact_patch.h
new file mode 100644
index 0000000000000000000000000000000000000000..4a9a32f694395b4694807a59963d75e527035b11
--- /dev/null
+++ b/include/hpp/fcl/contact_patch.h
@@ -0,0 +1,60 @@
+/*
+ * Software License Agreement (BSD License)
+ *
+ *  Copyright (c) 2024, INRIA
+ *  All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions
+ *  are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *   * Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the following
+ *     disclaimer in the documentation and/or other materials provided
+ *     with the distribution.
+ *   * Neither the name of Open Source Robotics Foundation nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ *  POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** \author Louis Montaut */
+
+#ifndef HPP_FCL_CONTACT_PATCH_H
+#define HPP_FCL_CONTACT_PATCH_H
+
+#include "hpp/fcl/data_types.h"
+#include "hpp/fcl/collision_data.h"
+
+namespace hpp {
+namespace fcl {
+
+/// @brief Main contact patch computation interface.
+/// @note Please see @ref ContactPatchRequest and @ref ContactPatchResult for
+/// more info on the content of the input/output of this function. Also, please
+/// read @ref ContactPatch if you want to fully understand what is meant by
+/// "contact patch".
+void computeContactPatch(const CollisionGeometry* o1, const Transform3f& tf1,
+                         const CollisionGeometry* o2, const Transform3f& tf2,
+                         const CollisionResult& collision_result,
+                         const ContactPatchRequest& request,
+                         ContactPatchResult& result);
+
+}  // namespace fcl
+}  // namespace hpp
+
+#endif
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 3699973b7d028da1a088fc9734b930e849269e36..2e993dc40955601d5f71eb59a73828955ad7f033 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -35,6 +35,7 @@
 set(LIBRARY_NAME ${PROJECT_NAME})
 set(${LIBRARY_NAME}_SOURCES
   collision.cpp
+  contact_patch.cpp
   distance_func_matrix.cpp
   collision_data.cpp
   collision_node.cpp
diff --git a/src/contact_patch.cpp b/src/contact_patch.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c47e257602aada97f29e60e52b2dd7afbe001f3c
--- /dev/null
+++ b/src/contact_patch.cpp
@@ -0,0 +1,56 @@
+/*
+ * Software License Agreement (BSD License)
+ *
+ *  Copyright (c) 2024, INRIA
+ *  All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions
+ *  are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *   * Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the following
+ *     disclaimer in the documentation and/or other materials provided
+ *     with the distribution.
+ *   * Neither the name of Open Source Robotics Foundation nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ *  POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** \author Louis Montaut */
+
+#include "hpp/fcl/contact_patch.h"
+
+namespace hpp {
+namespace fcl {
+
+void computeContactPatch(const CollisionGeometry* o1, const Transform3f& tf1,
+                         const CollisionGeometry* o2, const Transform3f& tf2,
+                         const CollisionResult& collision_result,
+                         const ContactPatchRequest& request,
+                         ContactPatchResult& result) {
+  // Before doing any computation, we initialize and clear the input result.
+  result.initialize(request);
+
+  if (!collision_result.isCollision()) {
+    return;
+  }
+}
+
+}  // namespace fcl
+}  // namespace hpp