diff --git a/configure.ac b/configure.ac
index 2ec466c..144afac 100644
--- a/configure.ac
+++ b/configure.ac
@@ -75,6 +75,20 @@
       AC_DEFINE_UNQUOTED([UCD90160_DEVICE_ACCESS], ["$UCD90160_DEVICE_ACCESS"], [Turn off UCD90160 hardware access])
 )
 
+AC_ARG_VAR(INPUT_HISTORY_BUSNAME_ROOT, [The D-Bus busname root for the PS input history.])
+AS_IF([test "x$INPUT_HISTORY_BUSNAME_ROOT" == "x"],
+      [INPUT_HISTORY_BUSNAME_ROOT="org.open_power.powersupply"])
+AC_DEFINE_UNQUOTED([INPUT_HISTORY_BUSNAME_ROOT],
+                   ["$INPUT_HISTORY_BUSNAME_ROOT"],
+                   [The D-Bus busname root for the PS input history.])
+
+AC_ARG_VAR(INPUT_HISTORY_SENSOR_ROOT, [The D-Bus power sensors namespace root])
+AS_IF([test "x$INPUT_HISTORY_SENSOR_ROOT" == "x"],
+      [INPUT_HISTORY_SENSOR_ROOT="/org/open_power/sensors/aggregation/per_30s"])
+AC_DEFINE_UNQUOTED([INPUT_HISTORY_SENSOR_ROOT],
+                   ["$INPUT_HISTORY_SENSOR_ROOT"],
+                   [The D-Bus power sensors namespace root])
+
 # Create configured output
 AC_CONFIG_FILES([Makefile power-sequencer/Makefile power-supply/Makefile test/Makefile power-supply/test/Makefile])
 AC_OUTPUT
diff --git a/power-supply/main.cpp b/power-supply/main.cpp
index dc13ef9..ee93f74 100644
--- a/power-supply/main.cpp
+++ b/power-supply/main.cpp
@@ -17,6 +17,7 @@
 #include <phosphor-logging/log.hpp>
 #include <systemd/sd-daemon.h>
 #include "argument.hpp"
+#include "config.h"
 #include "event.hpp"
 #include "power_supply.hpp"
 #include "device_monitor.hpp"
@@ -97,6 +98,58 @@
                                                         powerOnDelay,
                                                         presentDelay);
 
+    // Get the number of input power history records to keep in D-Bus.
+    long int numRecords = 0;
+    auto records = (options)["num-history-records"];
+    if (records != ArgumentParser::emptyString)
+    {
+        numRecords = std::stol(records);
+        if (numRecords < 0)
+        {
+            std::cerr << "Invalid number of history records specified.\n";
+            return -6;
+        }
+    }
+
+    if (numRecords != 0)
+    {
+        // Get the GPIO information for controlling the SYNC signal.
+        // If one is there, they both must be.
+        auto syncGPIOPath = (options)["sync-gpio-path"];
+        auto syncGPIONum = (options)["sync-gpio-num"];
+
+        if (((syncGPIOPath == ArgumentParser::emptyString) &&
+            (syncGPIONum != ArgumentParser::emptyString)) ||
+            ((syncGPIOPath != ArgumentParser::emptyString) &&
+            (syncGPIONum == ArgumentParser::emptyString)))
+        {
+            std::cerr << "Invalid sync GPIO number or path\n";
+            return -7;
+        }
+
+        size_t gpioNum = 0;
+        if (syncGPIONum != ArgumentParser::emptyString)
+        {
+            gpioNum = stoul(syncGPIONum);
+        }
+
+        std::string name{"ps" + instnum + "_input_power"};
+        std::string basePath =
+            std::string{INPUT_HISTORY_SENSOR_ROOT} + '/' + name;
+
+        psuDevice->enableHistory(basePath,
+                                 numRecords,
+                                 syncGPIOPath,
+                                 gpioNum);
+
+        // Systemd object manager
+        sdbusplus::server::manager::manager objManager{bus, basePath.c_str()};
+
+        std::string busName =
+                std::string{INPUT_HISTORY_BUSNAME_ROOT} + '.' + name;
+        bus.request_name(busName.c_str());
+    }
+
     auto pollInterval = std::chrono::milliseconds(1000);
     DeviceMonitor mainloop(std::move(psuDevice), eventPtr, pollInterval);
     mainloop.run();
