diff --git a/src/operator/Conv.cpp b/src/operator/Conv.cpp
index ee850414cb97851b78e5413b5a4f69d77ad041a4..be575a1f2ce3d485c5563a09aa067c20845444c0 100644
--- a/src/operator/Conv.cpp
+++ b/src/operator/Conv.cpp
@@ -105,18 +105,18 @@ Aidge::Conv_Op<DIM>::computeReceptiveField(
         std::vector<DimSize_t> inputDims{outputDims[0], getInput(0)->dims()[1]};
         for (DimIdx_t i = 0; i < DIM; ++i) {
             inputDims.push_back((outputDims[2+static_cast<std::size_t>(i)] - 1)
-                        * mAttributes->template getAttr<ConvAttr::StrideDims>()[static_cast<std::size_t>(i)]
+                        * strideDims()[static_cast<std::size_t>(i)]
                         + 1
-                        + (mAttributes->template getAttr<ConvAttr::KernelDims>()[static_cast<std::size_t>(i)] - 1)
-                        * mAttributes->template getAttr<ConvAttr::DilationDims>()[static_cast<std::size_t>(i)]);
-            inputIdxDims[2+i] *= mAttributes->template getAttr<ConvAttr::StrideDims>()[static_cast<std::size_t>(i)];
+                        + (kernelDims()[static_cast<std::size_t>(i)] - 1)
+                        * dilationDims()[static_cast<std::size_t>(i)]);
+            inputIdxDims[2+i] *= strideDims()[static_cast<std::size_t>(i)];
         }
 
         // Weight
         // same output value, every input channel is used
         std::vector<DimSize_t> weightDims{outputDims[1], getInput(0)->dims()[1]};
         for (std::size_t i = 0; i < DIM; ++i) {
-            weightDims.push_back(mAttributes->template getAttr<ConvAttr::KernelDims>()[i]);
+            weightDims.push_back(kernelDims()[i]);
         }
         std::vector<DimSize_t> weightIdxDims = std::vector<DimSize_t>(DIM+2, 0);
         weightIdxDims[0] = firstEltDims[1];