diff --git a/tree/dataframe/inc/ROOT/RDF/RBookedCustomColumns.hxx b/tree/dataframe/inc/ROOT/RDF/RBookedCustomColumns.hxx
index 82ccf755b9855aecec6936686a88c3e94babdbda..0988aede6778904ba0b41348910e80808a90954a 100644
--- a/tree/dataframe/inc/ROOT/RDF/RBookedCustomColumns.hxx
+++ b/tree/dataframe/inc/ROOT/RDF/RBookedCustomColumns.hxx
@@ -82,7 +82,7 @@ public:
 
    ////////////////////////////////////////////////////////////////////////////
    /// \brief Returns the list of the pointers to the defined columns
-   RCustomColumnBasePtrMap_t GetColumns() const { return *fCustomColumns; }
+   const RCustomColumnBasePtrMap_t &GetColumns() const { return *fCustomColumns; }
 
    ////////////////////////////////////////////////////////////////////////////
    /// \brief Check if the provided name is tracked in the names list
diff --git a/tree/dataframe/inc/ROOT/RDF/RInterface.hxx b/tree/dataframe/inc/ROOT/RDF/RInterface.hxx
index b9226249bf84a293f9a6203b8e71e09530b724b5..4776b824872e40ae1e76fbb1860ecc739777ce14 100644
--- a/tree/dataframe/inc/ROOT/RDF/RInterface.hxx
+++ b/tree/dataframe/inc/ROOT/RDF/RInterface.hxx
@@ -511,7 +511,7 @@ public:
 
       for (auto &c : validColumnNames) {
          const auto isCustom = std::find(customCols.begin(), customCols.end(), c) != customCols.end();
-         const auto customColID = isCustom ? fCustomColumns.GetColumns()[c]->GetID() : 0;
+         const auto customColID = isCustom ? fCustomColumns.GetColumns().at(c)->GetID() : 0;
          snapCall << RDFInternal::ColumnName2ColumnTypeName(c, nsID, tree, fDataSource, isCustom, dontConvertVector,
                                                             customColID)
                   << ", ";
@@ -631,7 +631,7 @@ public:
       const auto &customCols = fCustomColumns.GetNames();
       for (auto &c : columnList) {
          const auto isCustom = std::find(customCols.begin(), customCols.end(), c) != customCols.end();
-         const auto customColID = isCustom ? fCustomColumns.GetColumns()[c]->GetID() : 0;
+         const auto customColID = isCustom ? fCustomColumns.GetColumns().at(c)->GetID() : 0;
          cacheCall << RDFInternal::ColumnName2ColumnTypeName(c, nsID, tree, fDataSource, isCustom,
                                                              /*vector2rvec=*/true, customColID)
                    << ", ";
@@ -1571,7 +1571,7 @@ public:
                                                        convertVector2RVec);
       } else {
          // must convert the alias "__tdf::column_type" to a readable type
-         const auto colID = std::to_string(fCustomColumns.GetColumns()[std::string(column)]->GetID());
+         const auto colID = std::to_string(fCustomColumns.GetColumns().at(std::string(column))->GetID());
          const auto call = "ROOT::Internal::RDF::TypeID2TypeName(typeid(__tdf" + std::to_string(fLoopManager->GetID()) +
                            "::" + std::string(column) + colID + "_type))";
          const auto calcRes = RDFInternal::InterpreterCalc(call.c_str());
diff --git a/tree/dataframe/src/RDFInterfaceUtils.cxx b/tree/dataframe/src/RDFInterfaceUtils.cxx
index 481bb22c73c8c3836cbf66d494a7db60f582adb9..f17ed7c9bfb8874d62dd71f9675c6a1c48287bc4 100644
--- a/tree/dataframe/src/RDFInterfaceUtils.cxx
+++ b/tree/dataframe/src/RDFInterfaceUtils.cxx
@@ -524,7 +524,7 @@ std::vector<std::string> ColumnTypesAsString(ColumnNames_t &colNames, ColumnName
       const auto &realColName = aliasMapEnd == aliasMapIt ? colName : aliasMapIt->second;
       // The map is a const reference, so no operator[]
       const auto isCustomCol = customCols.HasName(realColName);
-      const auto customColID = isCustomCol ? customCols.GetColumns()[realColName]->GetID() : 0;
+      const auto customColID = isCustomCol ? customCols.GetColumns().at(realColName)->GetID() : 0;
       const auto colTypeName =
          ColumnName2ColumnTypeName(realColName, namespaceID, tree, ds, isCustomCol, /*vector2rvec=*/true, customColID);
       colTypes.emplace_back(colTypeName);
@@ -720,7 +720,7 @@ std::string JitBuildAction(const ColumnNames_t &bl, void *prevNode, const std::t
    std::vector<std::string> columnTypeNames(nBranches);
    for (auto i = 0u; i < nBranches; ++i) {
       const auto isCustomCol = customCols.HasName(bl[i]);
-      const auto customColID = isCustomCol ? customCols.GetColumns()[bl[i]]->GetID() : 0;
+      const auto customColID = isCustomCol ? customCols.GetColumns().at(bl[i])->GetID() : 0;
       const auto columnTypeName =
          ColumnName2ColumnTypeName(bl[i], namespaceID, tree, ds, isCustomCol, /*vector2rvec=*/true, customColID);
       if (columnTypeName.empty()) {