diff --git a/CHANGELOG b/CHANGELOG
index db89edd1191865c81c16ea7accaae850ced7082c..55c85a0e44a101f0c6a7e77c589fec02c7de4c7d 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,5 @@
+# Version 0.1.4 (December 6, 2024)
+
 # Version 0.0.1 (January 23, 2024)
 
 Initial release
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e27b11e53a7973c7d0eba0ed3050053e453b5948..bfe4b03222d49c27c0e0c3cd8408126a7c4fbfaa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,5 @@
-cmake_minimum_required(VERSION 3.15)
+cmake_minimum_required(VERSION 3.18)
+set(CXX_STANDARD 14)
 
 file(STRINGS "${CMAKE_SOURCE_DIR}/version.txt" version)
 
@@ -19,6 +20,7 @@ option(PYBIND "python binding" OFF)
 option(WERROR "Warning as error" OFF)
 option(TEST "Enable tests" ON)
 option(COVERAGE "Enable coverage" OFF)
+option(ENABLE_ASAN "Enable ASan (AddressSanitizer) for runtime analysis of memory use (over/underflow, memory leak, ...)" OFF)
 
 ##############################################
 # Import utils CMakeLists
@@ -28,6 +30,13 @@ if(CMAKE_COMPILER_IS_GNUCXX AND COVERAGE)
     Include(CodeCoverage)
 endif()
 
+if(NOT $ENV{AIDGE_INSTALL} STREQUAL "")
+    set(CMAKE_INSTALL_PREFIX $ENV{AIDGE_INSTALL})
+    list(APPEND CMAKE_PREFIX_PATH $ENV{AIDGE_INSTALL})
+    message(WARNING "Env var AIDGE_INSTALL detected : $ENV{AIDGE_INSTALL}. Set CMAKE_INSTALL_PREFIX to AIDGE_INSTALL & added to CMAKE_PREFIX_PATH"
+                    "\n\tCMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}"
+                    "\n\tCMAKE_PREFIX_PATH = ${CMAKE_PREFIX_PATH}")
+endif()
 ##############################################
 # Find system dependencies
 find_package(aidge_core REQUIRED)
diff --git a/include/aidge/backend/opencv/data/TensorImpl.hpp b/include/aidge/backend/opencv/data/TensorImpl.hpp
index 4b548d2157219a3172b947013e4e53faee65d31a..d5254fbd66e60dd3a89ee457873342a6445cca4a 100644
--- a/include/aidge/backend/opencv/data/TensorImpl.hpp
+++ b/include/aidge/backend/opencv/data/TensorImpl.hpp
@@ -91,10 +91,10 @@ public:
     }
 
     void copy(const void *src, NbElts_t length, NbElts_t offset = 0) override final {
+        AIDGE_ASSERT(offset + length <= mNbElts, "TensorImpl_opencv<{}>::copy(): copy offset ({}) + length ({}) is above capacity ({})", typeid(T).name(), offset, length, mNbElts);
         const T* srcT = static_cast<const T *>(src);
         T* dstT = static_cast<T *>(rawPtr(offset));
 
-        AIDGE_ASSERT(length <= (mData.total() * mData.channels()) || length <= mNbElts, "TensorImpl_opencv<{}>::copy(): copy length ({}) is above capacity ({})", typeid(T).name(), length, mNbElts);
         AIDGE_ASSERT(dstT < srcT || dstT >= srcT + length, "TensorImpl_opencv<{}>::copy(): overlapping copy is not supported", typeid(T).name());
         std::copy(srcT, srcT + length, dstT);
 
@@ -105,8 +105,8 @@ public:
             return;
         }
 
+        AIDGE_ASSERT(offset + length <= mNbElts, "TensorImpl_opencv<{}>::copyCast(): copy offset ({}) + length ({}) is above capacity ({})", typeid(T).name(), offset, length, mNbElts);
         T* dstT = static_cast<T *>(rawPtr(offset));
-        AIDGE_ASSERT(length <= (mData.total() * mData.channels()) || length <= mNbElts, "TensorImpl_opencv<{}>::copyCast(): copy length ({}) is above capacity ({})", typeid(T).name(), length, mNbElts);
         switch (srcDt)
         {
             case DataType::Float64:
@@ -171,8 +171,8 @@ public:
     }
 
     void copyToHost(void *dst, NbElts_t length, NbElts_t offset = 0) const override final {
+        AIDGE_ASSERT(offset + length <= mNbElts, "TensorImpl_opencv<{}>::copyToHost(): copy offset ({}) + length ({}) is above capacity ({})", typeid(T).name(), offset, length, mNbElts);
         const T* src = static_cast<const T*>(rawPtr(offset));
-        AIDGE_ASSERT(length <= (mData.total() * mData.channels()) || length <= mNbElts, "TensorImpl_opencv<{}>::copyToHost(): copy length ({}) is above capacity ({})", typeid(T).name(), length, mNbElts);
         std::copy(src, src + length, static_cast<T *>(dst));
     }
 
diff --git a/unit_tests/CMakeLists.txt b/unit_tests/CMakeLists.txt
index 9d9f81516b0cd2611484ee9e3e06e838833200db..91a55dacf4cdea1aa696a33ecc84a878510c33c3 100644
--- a/unit_tests/CMakeLists.txt
+++ b/unit_tests/CMakeLists.txt
@@ -3,7 +3,7 @@ Include(FetchContent)
 FetchContent_Declare(
   Catch2
   GIT_REPOSITORY https://github.com/catchorg/Catch2.git
-  GIT_TAG        v3.0.1 # or a later release
+  GIT_TAG        v3.7.1 # or a later release
 )
 
 FetchContent_MakeAvailable(Catch2)
diff --git a/unit_tests/Test_TensorImpl.cpp b/unit_tests/Test_TensorImpl.cpp
index 7ef7d5f7cbffe03b5f642897c2f2256caebf77e4..16e68bcce3bfc7c3dcd3d6999755667931e4835d 100644
--- a/unit_tests/Test_TensorImpl.cpp
+++ b/unit_tests/Test_TensorImpl.cpp
@@ -21,9 +21,7 @@ using namespace Aidge;
 TEST_CASE("Tensor creation opencv", "[Tensor][OpenCV]") {
     SECTION("from const array") {
         Tensor x;
-        x.setDataType(Aidge::DataType::Int32);
-        x.setBackend("opencv");
-        x = Array3D<int,2,2,2>{
+        x = Array3D<cpptype_t<DataType::Int32>,2,2,2>{
         {
             {
                 {1, 2},
@@ -34,11 +32,10 @@ TEST_CASE("Tensor creation opencv", "[Tensor][OpenCV]") {
                 {7, 8}
             }
         }};
+        x.setBackend("opencv");
 
         Tensor xCopy;
-        xCopy.setDataType(Aidge::DataType::Int32);
-        xCopy.setBackend("opencv");
-        xCopy = Array3D<int,2,2,2>{
+        xCopy = Array3D<cpptype_t<DataType::Int32>,2,2,2>{
         {
             {
                 {1, 2},
@@ -49,10 +46,9 @@ TEST_CASE("Tensor creation opencv", "[Tensor][OpenCV]") {
                 {7, 8}
             }
         }};
+        xCopy.setBackend("opencv");
 
-        Tensor xFloat;
-        xFloat.setBackend("opencv");
-        xFloat = Array3D<float,2,2,2>{
+        Tensor xFloat{Array3D<cpptype_t<DataType::Float32>,2,2,2>{
         {
             {
                 {1., 2.},
@@ -62,7 +58,8 @@ TEST_CASE("Tensor creation opencv", "[Tensor][OpenCV]") {
                 {5., 6.},
                 {7., 8.}
             }
-        }};
+        }}};
+        xFloat.setBackend("opencv");
 
         SECTION("Tensor features") {
             REQUIRE(x.nbDims() == 3);
diff --git a/version.txt b/version.txt
index b1e80bb2480a6db3c4b252661ac61ed945409b32..845639eef26c0e95586203ae78369f67552ccb17 100644
--- a/version.txt
+++ b/version.txt
@@ -1 +1 @@
-0.1.3
+0.1.4