diff --git a/src/secureboot.cpp b/src/secureboot.cpp
new file mode 100644
index 0000000..36dc875
--- /dev/null
+++ b/src/secureboot.cpp
@@ -0,0 +1,84 @@
+#include "secureboot.hpp"
+
+#include <cereal/archives/binary.hpp>
+
+#include <fstream>
+
+// Register class version with Cereal
+CEREAL_CLASS_VERSION(bios_config::SecureBoot, 0)
+
+namespace bios_config
+{
+
+SecureBoot::SecureBoot(sdbusplus::asio::object_server& objectServer,
+                       std::shared_ptr<sdbusplus::asio::connection>& systemBus,
+                       std::string persistPath) :
+    sdbusplus::xyz::openbmc_project::BIOSConfig::server::SecureBoot(
+        *systemBus, secureBootObjectPath),
+    objServer(objectServer), systemBus(systemBus)
+{
+    fs::path secureBootDir(persistPath);
+    fs::create_directories(secureBootDir);
+    secureBootFile = secureBootDir / secureBootPersistFile;
+    deserialize();
+}
+
+SecureBootBase::CurrentBootType SecureBoot::currentBoot(
+    SecureBootBase::CurrentBootType value)
+{
+    auto ret = SecureBootBase::currentBoot(value);
+    serialize();
+    return ret;
+}
+
+bool SecureBoot::pendingEnable(bool value)
+{
+    auto ret = SecureBootBase::pendingEnable(value);
+    serialize();
+    return ret;
+}
+
+SecureBootBase::ModeType SecureBoot::mode(SecureBootBase::ModeType value)
+{
+    auto ret = SecureBootBase::mode(value);
+    serialize();
+    return ret;
+}
+
+void SecureBoot::serialize()
+{
+    try
+    {
+        std::filesystem::create_directories(secureBootFile.parent_path());
+        std::ofstream os(secureBootFile.c_str(),
+                         std::ios::out | std::ios::binary);
+        cereal::BinaryOutputArchive oarchive(os);
+        oarchive(*this);
+    }
+    catch (const std::exception& e)
+    {
+        lg2::error("Failed to serialize SecureBoot: {ERROR}", "ERROR", e);
+    }
+}
+
+bool SecureBoot::deserialize()
+{
+    try
+    {
+        if (std::filesystem::exists(secureBootFile))
+        {
+            std::ifstream is(secureBootFile.c_str(),
+                             std::ios::in | std::ios::binary);
+            cereal::BinaryInputArchive iarchive(is);
+            iarchive(*this);
+            return true;
+        }
+        return false;
+    }
+    catch (const std::exception& e)
+    {
+        lg2::error("Failed to deserialize SecureBoot: {ERROR}", "ERROR", e);
+        return false;
+    }
+}
+} // namespace bios_config
