diff --git a/include/aidge/operator/Pad.hpp b/include/aidge/operator/Pad.hpp
index 2c670bf23d4703a5a9e8502c8b356fdde32e2561..bc1852ec0759ffaafa015143f22b0a1c8f6c893e 100644
--- a/include/aidge/operator/Pad.hpp
+++ b/include/aidge/operator/Pad.hpp
@@ -21,6 +21,7 @@
 #include "aidge/operator/OperatorTensor.hpp"
 #include "aidge/utils/Registrar.hpp"
 #include "aidge/utils/StaticAttributes.hpp"
+#include "aidge/utils/ArrayHelpers.hpp"
 #include "aidge/utils/Types.h"
 
 namespace Aidge {
@@ -47,7 +48,7 @@ public:
     Pad_Op() = delete;
 
     constexpr Pad_Op(const std::array<DimSize_t, 2*DIM> &beginEndTuples,
-                     const PadBorderType &borderType = PadBorderType::Constant,
+                     PadBorderType borderType = PadBorderType::Constant,
                      double borderValue = 0.0)
         : OperatorTensor(Type, {InputCategory::Data}, 1),
           mAttributes(std::make_shared<Attributes_>(
@@ -92,7 +93,7 @@ public:
 template <std::array<DimSize_t, 1>::size_type DIM>
 std::shared_ptr<Node> Pad(const std::array<DimSize_t, 2*DIM> &beginEndTuples,
                         const std::string& name = "",
-                        const PadBorderType &borderType = PadBorderType::Constant,
+                        PadBorderType borderType = PadBorderType::Constant,
                         double borderValue = 0.0);
 
 // helper with C-style array instead of std::array for beginEndTuples to allow automatic template DIM deduction
@@ -100,7 +101,7 @@ template <DimSize_t DIM>
 inline std::shared_ptr<Node> Pad(
     DimSize_t const (&beginEndTuples)[2*DIM],
     const std::string& name = "",
-    const PadBorderType &borderType = PadBorderType::Constant,
+    PadBorderType borderType = PadBorderType::Constant,
     double borderValue = 0.0)
 {
     return Pad<DIM>(to_array(beginEndTuples), name, borderType, borderValue);
diff --git a/python_binding/operator/pybind_Pad.cpp b/python_binding/operator/pybind_Pad.cpp
index 2668f181385272bb3af24e83fcf63f1d50881eba..7dc4a4bee1a009b3ca033ea29861768c1a6fc19d 100644
--- a/python_binding/operator/pybind_Pad.cpp
+++ b/python_binding/operator/pybind_Pad.cpp
@@ -30,7 +30,7 @@ template <DimIdx_t DIM> void declare_PadOp(py::module &m) {
     m, pyClassName.c_str(),
     py::multiple_inheritance())
   .def(py::init<const std::array<DimSize_t, 2*DIM> &,
-                const PadBorderType &,
+                PadBorderType,
                 double>(),
         py::arg("beginEndTuples"),
         py::arg("borderType") = PadBorderType::Constant,
@@ -42,7 +42,7 @@ template <DimIdx_t DIM> void declare_PadOp(py::module &m) {
   declare_registrable<Pad_Op<DIM>>(m, pyClassName);
   m.def(("Pad" + std::to_string(DIM) + "D").c_str(), [](const std::vector<DimSize_t>& beginEndTuples,
                                                         const std::string& name,
-                                                        const PadBorderType &borderType = PadBorderType::Constant,
+                                                        PadBorderType borderType = PadBorderType::Constant,
                                                         double borderValue = 0.0) {
         AIDGE_ASSERT(beginEndTuples.size() == 2*DIM, "begin_end_tuples size [{}] does not match DIM [{}]", beginEndTuples.size(), 2*DIM);
         return Pad<DIM>(to_array<2*DIM>(beginEndTuples.begin()), name, borderType, borderValue);
diff --git a/src/operator/Pad.cpp b/src/operator/Pad.cpp
index e82f1ba3013dfef726475c255e8b9b804adc7daa..ba762da5737e986941e0c72196503415f7af29b7 100644
--- a/src/operator/Pad.cpp
+++ b/src/operator/Pad.cpp
@@ -61,16 +61,18 @@ std::set<std::string> Aidge::Pad_Op<DIM>::getAvailableBackends() const {
 template class Aidge::Pad_Op<1>;
 template class Aidge::Pad_Op<2>;
 
+////////////////////////////////////////////////////////////////////////////////
+
 template <std::array<Aidge::DimSize_t, 1>::size_type DIM>
 std::shared_ptr<Aidge::Node> Aidge::Pad(const std::array<Aidge::DimSize_t, 2*DIM> &beginEndTuples,
                                            const std::string& name,
-                                           const PadBorderType &borderType,
+                                           PadBorderType borderType,
                                            double borderValue)
 {
     AIDGE_ASSERT(DIM<=MaxDim, "Too many kernel dimensions required by {}, not supported", Pad_Op<DIM>::Type);
     return std::make_shared<Node>(std::make_shared<Pad_Op<static_cast<DimIdx_t>(DIM)>>(beginEndTuples, borderType, borderValue), name);
 }
 
-template std::shared_ptr<Aidge::Node> Aidge::Pad<1>(const std::array<Aidge::DimSize_t, 2> &beginEndTuples, const std::string&, const PadBorderType&, double borderValue);
-template std::shared_ptr<Aidge::Node> Aidge::Pad<2>(const std::array<Aidge::DimSize_t, 4> &beginEndTuples, const std::string&, const PadBorderType&, double borderValue);
-template std::shared_ptr<Aidge::Node> Aidge::Pad<3>(const std::array<Aidge::DimSize_t, 6> &beginEndTuples, const std::string&, const PadBorderType&, double borderValue);
+template std::shared_ptr<Aidge::Node> Aidge::Pad<1>(const std::array<Aidge::DimSize_t, 2> &beginEndTuples, const std::string&, PadBorderType, double borderValue);
+template std::shared_ptr<Aidge::Node> Aidge::Pad<2>(const std::array<Aidge::DimSize_t, 4> &beginEndTuples, const std::string&, PadBorderType, double borderValue);
+template std::shared_ptr<Aidge::Node> Aidge::Pad<3>(const std::array<Aidge::DimSize_t, 6> &beginEndTuples, const std::string&, PadBorderType, double borderValue);