diff --git a/CMakeLists.txt b/CMakeLists.txt
index c67436a527cfda16a9c239583151343e0def0a1e..971e078d6c095a836920bcaa73e4c61517ab1c83 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -33,6 +33,12 @@ ENDIF(WIN32)
 # ----------------------------------------------------
 ADD_REQUIRED_DEPENDENCY("eigenpy >= v1.0.1")
 ADD_REQUIRED_DEPENDENCY("urdfdom >= v0.3.0")
+ADD_REQUIRED_DEPENDENCY("eigen3 >= v3.0.5")
+ 
+# ----------------------------------------------------
+# --- BENCHMARKS -------------------------------------
+# ----------------------------------------------------
+OPTION (BUILD_BENCHMARK "Build the benchmarks" OFF)
 
 # ----------------------------------------------------
 # --- INCLUDE ----------------------------------------
@@ -149,52 +155,12 @@ FOREACH(python ${PYTHON_FILES})
     DESTINATION ${PYTHON_SITELIB}/${PROJECT_NAME})
 ENDFOREACH(python)
 
-# ----------------------------------------------------
-# --- UNITTESTS --------------------------------------
-# ----------------------------------------------------
-ADD_EXECUTABLE(tspatial EXCLUDE_FROM_ALL unittest/tspatial.cpp)
-PKG_CONFIG_USE_DEPENDENCY(tspatial eigenpy)
-
-ADD_EXECUTABLE(symmetric EXCLUDE_FROM_ALL unittest/symmetric.cpp)
-PKG_CONFIG_USE_DEPENDENCY(symmetric eigenpy)
-
-ADD_EXECUTABLE(constraint EXCLUDE_FROM_ALL unittest/constraint.cpp)
-PKG_CONFIG_USE_DEPENDENCY(constraint eigenpy)
-
-ADD_EXECUTABLE(rnea EXCLUDE_FROM_ALL unittest/rnea.cpp)
-PKG_CONFIG_USE_DEPENDENCY(rnea eigenpy)
-
-ADD_EXECUTABLE(crba EXCLUDE_FROM_ALL unittest/crba.cpp)
-PKG_CONFIG_USE_DEPENDENCY(crba eigenpy)
-PKG_CONFIG_USE_DEPENDENCY(crba urdfdom)
-
-ADD_EXECUTABLE(timings EXCLUDE_FROM_ALL unittest/timings.cpp)
-PKG_CONFIG_USE_DEPENDENCY(timings eigenpy)
-PKG_CONFIG_USE_DEPENDENCY(timings urdfdom)
-
-ADD_EXECUTABLE(jacobian EXCLUDE_FROM_ALL unittest/jacobian.cpp)
-PKG_CONFIG_USE_DEPENDENCY(jacobian eigenpy)
-
-ADD_EXECUTABLE(com EXCLUDE_FROM_ALL unittest/com.cpp)
-PKG_CONFIG_USE_DEPENDENCY(com eigenpy)
-
-ADD_EXECUTABLE(cholesky EXCLUDE_FROM_ALL unittest/cholesky.cpp)
-PKG_CONFIG_USE_DEPENDENCY(cholesky eigenpy)
-PKG_CONFIG_USE_DEPENDENCY(cholesky urdfdom)
-
-ADD_EXECUTABLE(dg EXCLUDE_FROM_ALL unittest/dg.cpp)
-PKG_CONFIG_USE_DEPENDENCY(dg eigenpy)
-
-ADD_EXECUTABLE(urdf EXCLUDE_FROM_ALL unittest/urdf.cpp)
-PKG_CONFIG_USE_DEPENDENCY(urdf eigenpy)
-PKG_CONFIG_USE_DEPENDENCY(urdf urdfdom)
 
-ADD_EXECUTABLE(value EXCLUDE_FROM_ALL unittest/value.cpp)
-PKG_CONFIG_USE_DEPENDENCY(value eigenpy)
-PKG_CONFIG_USE_DEPENDENCY(value urdfdom)
+ADD_SUBDIRECTORY(unittest)
 
-ADD_EXECUTABLE(variant EXCLUDE_FROM_ALL unittest/variant.cpp)
-PKG_CONFIG_USE_DEPENDENCY(variant eigenpy)
+IF (BUILD_BENCHMARK)
+	ADD_SUBDIRECTORY (benchmark)
+ENDIF (BUILD_BENCHMARK)
 
 SETUP_PROJECT_FINALIZE()
 SETUP_PROJECT_CPACK()
diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7db2d9a2ff72a99c84d8a38b62982cb0938191f5
--- /dev/null
+++ b/benchmark/CMakeLists.txt
@@ -0,0 +1,8 @@
+# ----------------------------------------------------
+# --- BENCHMARK --------------------------------------
+# ----------------------------------------------------
+
+ADD_EXECUTABLE(timings timings.cpp)
+PKG_CONFIG_USE_DEPENDENCY(timings eigenpy) # Should be eigen3, to be corrected.
+PKG_CONFIG_USE_DEPENDENCY(timings urdfdom)
+
diff --git a/unittest/timings.cpp b/benchmark/timings.cpp
similarity index 100%
rename from unittest/timings.cpp
rename to benchmark/timings.cpp
diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2c69043a0ad22161ff25d828503248eb18885a43
--- /dev/null
+++ b/unittest/CMakeLists.txt
@@ -0,0 +1,36 @@
+ADD_EXECUTABLE(tspatial EXCLUDE_FROM_ALL ./tspatial.cpp)
+PKG_CONFIG_USE_DEPENDENCY(tspatial eigen3)
+
+ADD_EXECUTABLE(symmetric EXCLUDE_FROM_ALL ./symmetric.cpp)
+PKG_CONFIG_USE_DEPENDENCY(symmetric eigen3)
+
+ADD_EXECUTABLE(constraint EXCLUDE_FROM_ALL ./constraint.cpp)
+PKG_CONFIG_USE_DEPENDENCY(constraint eigen3)
+
+ADD_EXECUTABLE(rnea EXCLUDE_FROM_ALL ./rnea.cpp)
+PKG_CONFIG_USE_DEPENDENCY(rnea eigen3)
+
+ADD_EXECUTABLE(crba EXCLUDE_FROM_ALL ./crba.cpp)
+PKG_CONFIG_USE_DEPENDENCY(crba eigen3)
+PKG_CONFIG_USE_DEPENDENCY(crba urdfdom)
+
+ADD_EXECUTABLE(jacobian EXCLUDE_FROM_ALL ./jacobian.cpp)
+PKG_CONFIG_USE_DEPENDENCY(jacobian eigen3)
+
+ADD_EXECUTABLE(com EXCLUDE_FROM_ALL ./com.cpp)
+PKG_CONFIG_USE_DEPENDENCY(com eigen3)
+
+ADD_EXECUTABLE(cholesky EXCLUDE_FROM_ALL ./cholesky.cpp)
+PKG_CONFIG_USE_DEPENDENCY(cholesky eigen3)
+PKG_CONFIG_USE_DEPENDENCY(cholesky urdfdom)
+
+ADD_EXECUTABLE(urdf EXCLUDE_FROM_ALL ./urdf.cpp)
+PKG_CONFIG_USE_DEPENDENCY(urdf eigen3)
+PKG_CONFIG_USE_DEPENDENCY(urdf urdfdom)
+
+ADD_EXECUTABLE(value EXCLUDE_FROM_ALL ./value.cpp)
+PKG_CONFIG_USE_DEPENDENCY(value eigen3)
+PKG_CONFIG_USE_DEPENDENCY(value urdfdom)
+
+ADD_EXECUTABLE(variant EXCLUDE_FROM_ALL ./variant.cpp)
+PKG_CONFIG_USE_DEPENDENCY(variant eigen3)