diff --git a/power-supply/record_manager.cpp b/power-supply/record_manager.cpp
index 1fcd463..c3f8984 100644
--- a/power-supply/record_manager.cpp
+++ b/power-supply/record_manager.cpp
@@ -27,6 +27,73 @@
 
 using namespace phosphor::logging;
 
+bool RecordManager::add(const std::vector<uint8_t>& rawRecord)
+{
+    if (rawRecord.size() == 0)
+    {
+        //The PS has no data - either the power supply just started up,
+        //or it just got a SYNC.  Clear the history.
+        records.clear();
+        return true;
+    }
+
+    try
+    {
+        //Peek at the ID to see if more processing is needed.
+        auto id = getRawRecordID(rawRecord);
+
+        if (!records.empty())
+        {
+            auto previousID = std::get<recIDPos>(records.front());
+
+            //Already have this record.  Done.
+            if (previousID == id)
+            {
+                return false;
+            }
+
+            //Check that the sequence ID is in order.
+            //If not, clear out current list.
+            if ((previousID + 1) != id)
+            {
+                //If it just rolled over from 0xFF to 0x00, then no
+                //need to clear.  If we see a 0 seemingly out of nowhere,
+                //then it was a sync so clear the old records.
+                auto rolledOver =
+                    (previousID == lastSequenceID) &&
+                    (id == FIRST_SEQUENCE_ID);
+
+                if (!rolledOver)
+                {
+                    if (id != FIRST_SEQUENCE_ID)
+                    {
+                        log<level::INFO>(
+                                "Noncontiguous INPUT_HISTORY sequence ID "
+                                "found. Clearing old entries",
+                                entry("OLD_ID=%ld", previousID),
+                                entry("NEW_ID=%ld", id));
+                    }
+                    records.clear();
+                }
+            }
+        }
+
+        records.push_front(std::move(createRecord(rawRecord)));
+
+        //If no more should be stored, prune the oldest
+        if (records.size() > maxRecords)
+        {
+            records.pop_back();
+        }
+    }
+    catch (InvalidRecordException& e)
+    {
+        return false;
+    }
+
+    return true;
+}
+
 size_t RecordManager::getRawRecordID(
         const std::vector<uint8_t>& data) const
 {
diff --git a/power-supply/record_manager.hpp b/power-supply/record_manager.hpp
index 73459df..e1a2cfc 100644
--- a/power-supply/record_manager.hpp
+++ b/power-supply/record_manager.hpp
@@ -53,6 +53,7 @@
 
         static constexpr auto RAW_RECORD_SIZE = 5;
         static constexpr auto RAW_RECORD_ID_OFFSET = 0;
+        static constexpr auto FIRST_SEQUENCE_ID = 0;
         static constexpr auto LAST_SEQUENCE_ID = 0xFF;
 
         using DBusRecord = std::tuple<uint64_t, int64_t>;
@@ -91,6 +92,22 @@
         }
 
         /**
+         * @brief Adds a new entry to the history
+         *
+         * Also checks to see if the old history should be
+         * cleared, such as when there is an invalid record
+         * sequence ID or if there was no data from the PS.
+         *
+         * @param[in] rawRecord - the record data straight
+         *                    from the power supply
+         *
+         * @return bool - If there has been a change to the
+         *                history records that needs to be
+         *                reflected in D-Bus.
+         */
+        bool add(const std::vector<uint8_t>& rawRecord);
+
+        /**
          * @brief Converts a Linear Format power number to an integer
          *
          * The PMBus spec describes a 2 byte Linear Format
