diff --git a/include/aidge/backend/cuda/data/TensorImpl.hpp b/include/aidge/backend/cuda/data/TensorImpl.hpp
index ea63f581400b5dc0669793a8d5f4c351885a9bb9..73b211113b3b21b9c8294e51e16cc001afad25e1 100644
--- a/include/aidge/backend/cuda/data/TensorImpl.hpp
+++ b/include/aidge/backend/cuda/data/TensorImpl.hpp
@@ -58,7 +58,11 @@ class TensorImpl_cuda : public TensorImpl, public TensorImpl_cuda_  {
     void *rawPtr() override {
         lazyInit(reinterpret_cast<void**>(&mData));
         return mData;
-    };
+    }
+
+    void* getRaw(std::size_t idx) {
+        return static_cast<void*>(static_cast<T*>(rawPtr()) + idx);
+    }
 
     const cudnnTensorDescriptor_t& getCudnnTensorDesc() const override {
         if (mCudnnTensor == nullptr) {
diff --git a/src/operator/ConvImpl.cpp b/src/operator/ConvImpl.cpp
index 35efa84dc3d0d7f54a7a463d9100115ac8a79fdd..e21bc92c2b30300eb8ec64461d55ce0c599f52f4 100644
--- a/src/operator/ConvImpl.cpp
+++ b/src/operator/ConvImpl.cpp
@@ -80,9 +80,9 @@ void Aidge::ConvImpl_cuda<DIM>::forward() {
 
     // Lazy-initialize CuDNN convolution descriptor
     if (mConvDesc == nullptr) {
-        const std::vector<int> strides(mOp.template get<ConvParam::StrideDims>().begin(), mOp.template get<ConvParam::StrideDims>().end());
+        const std::vector<int> strides(mOp.template getAttr<ConvAttr::StrideDims>().begin(), mOp.template getAttr<ConvAttr::StrideDims>().end());
         const std::vector<int> paddings(DIM, 0);
-        const std::vector<int> upscales(mOp.template get<ConvParam::DilationDims>().begin(), mOp.template get<ConvParam::DilationDims>().end());
+        const std::vector<int> upscales(mOp.template getAttr<ConvAttr::DilationDims>().begin(), mOp.template getAttr<ConvAttr::DilationDims>().end());
 
         CHECK_CUDNN_STATUS(cudnnCreateConvolutionDescriptor(&mConvDesc));
         CHECK_CUDNN_STATUS(