diff --git a/src/report_manager.cpp b/src/report_manager.cpp
index 38b9f16..9ea6026 100644
--- a/src/report_manager.cpp
+++ b/src/report_manager.cpp
@@ -1,7 +1,7 @@
 #include "report_manager.hpp"
 
+#include "interfaces/types.hpp"
 #include "report.hpp"
-#include "types/types.hpp"
 #include "utils/conversion.hpp"
 #include "utils/transform.hpp"
 
@@ -11,19 +11,6 @@
 #include <stdexcept>
 #include <system_error>
 
-ReadingParameters
-    convertToReadingParameters(ReadingParametersPastVersion params)
-{
-    return utils::transform(params, [](const auto& param) {
-        using namespace std::chrono_literals;
-
-        return ReadingParameters::value_type(
-            std::get<0>(param), std::get<1>(param), std::get<2>(param),
-            std::get<3>(param), utils::enumToString(CollectionTimeScope::point),
-            0u);
-    });
-}
-
 ReportManager::ReportManager(
     std::unique_ptr<interfaces::ReportFactory> reportFactoryIn,
     std::unique_ptr<interfaces::JsonStorage> reportStorageIn,
@@ -51,25 +38,7 @@
                                     const bool emitsReadingsUpdate,
                                     const bool logToMetricReportsCollection,
                                     const uint64_t interval,
-                                    ReadingParametersPastVersion metricParams) {
-                    return addReport(yield, reportName, reportingType,
-                                     emitsReadingsUpdate,
-                                     logToMetricReportsCollection,
-                                     std::chrono::milliseconds(interval),
-                                     convertToReadingParameters(
-                                         std::move(metricParams)))
-                        .getPath();
-                });
-
-            dbusIface.register_method(
-                "AddReportFutureVersion",
-                [this](boost::asio::yield_context& yield,
-                       const std::string& reportName,
-                       const std::string& reportingType,
-                       const bool emitsReadingsUpdate,
-                       const bool logToMetricReportsCollection,
-                       const uint64_t interval,
-                       ReadingParameters metricParams) {
+                                    ReadingParameters metricParams) {
                     return addReport(yield, reportName, reportingType,
                                      emitsReadingsUpdate,
                                      logToMetricReportsCollection,
@@ -175,8 +144,7 @@
                 sdbusplus::message::object_path(
                     param.at_index<0>().at_label<Path>()),
                 utils::enumToString(param.at_index<1>()), param.at_index<2>(),
-                param.at_index<3>(), utils::enumToString(param.at_index<4>()),
-                param.at_index<5>().t.count());
+                param.at_index<3>());
         });
 
     verifyAddReport(reportName, reportingType, interval, metricParams);
