diff --git a/include/dbus/file_notifier.hpp b/include/dbus/file_notifier.hpp
new file mode 100644
index 0000000..16b61b8
--- /dev/null
+++ b/include/dbus/file_notifier.hpp
@@ -0,0 +1,62 @@
+#pragma once
+
+#include <fmt/format.h>
+
+#include <sdbusplus/server.hpp>
+#include <xyz/openbmc_project/Common/FilePath/server.hpp>
+
+#include <string>
+
+namespace bios_bmc_smm_error_logger
+{
+
+using FileNotifierInterface = sdbusplus::server::object_t<
+    sdbusplus::xyz::openbmc_project::Common::server::FilePath>;
+
+/**
+ * @brief A class for notifying file paths of CPER logs.
+ */
+class CperFileNotifier : public FileNotifierInterface
+{
+  public:
+    /**
+     * @brief Constructor for the CperFileNotifier class.
+     *
+     * @param bus - bus to attach to.
+     * @param filePath - full path of the CPER log JSON file.
+     * @param entry - index of the DBus file path object.
+     */
+    CperFileNotifier(sdbusplus::bus::bus& bus, const std::string& filePath,
+                     uint64_t entry) :
+        FileNotifierInterface(bus, generatePath(entry).c_str(),
+                              action::emit_no_signals),
+        entry(entry), bus(bus)
+    {
+        // We only need the interface added signal for the fault monitor. So
+        // stop emitting properties changed signal.
+        path(filePath, /*skipSignal=*/true);
+    }
+
+    static constexpr const char* cperBasePath =
+        "/xyz/openbmc_project/external_storer/bios_bmc_smm_error_logger/CPER";
+
+  private:
+    /**
+     * @brief DBus index of the entry.
+     */
+    uint64_t entry;
+
+    sdbusplus::bus::bus& bus;
+
+    /**
+     * @brief Generate a path for the CperFileNotifier DBus object.
+     *
+     * @param[in] entry - unique index for the DBus object.
+     */
+    std::string generatePath(uint64_t entry)
+    {
+        return fmt::format("{}/entry{}", cperBasePath, entry);
+    }
+};
+
+} // namespace bios_bmc_smm_error_logger
diff --git a/include/rde/notifier_dbus_handler.hpp b/include/rde/notifier_dbus_handler.hpp
new file mode 100644
index 0000000..efcbd86
--- /dev/null
+++ b/include/rde/notifier_dbus_handler.hpp
@@ -0,0 +1,49 @@
+#pragma once
+
+#include "dbus/file_notifier.hpp"
+
+#include <memory>
+#include <vector>
+
+namespace bios_bmc_smm_error_logger
+{
+namespace rde
+{
+
+/**
+ * @brief A class to handle CPER DBus notification objects.
+ */
+class CperFileNotifierHandler
+{
+  public:
+    /**
+     * @brief Constructor for the CperFileNotifierHandler class.
+     *
+     * @param bus - bus to attache to.
+     */
+    explicit CperFileNotifierHandler(sdbusplus::bus::bus& bus);
+
+    /**
+     * @brief Create a DBus object with the provided filePath value.
+     *
+     * @param filePath - file path of the CPER log JSON file.
+     */
+    void createEntry(const std::string& filePath);
+
+  private:
+    sdbusplus::bus::bus& bus;
+    sdbusplus::server::manager::manager objManager;
+
+    /**
+     * @brief A vector to keep track of DBus FilePath objects.
+     */
+    std::vector<std::unique_ptr<CperFileNotifier>> notifierObjs;
+
+    /**
+     * @brief DBus index of the next entry.
+     */
+    uint64_t nextEntry = 0;
+};
+
+} // namespace rde
+} // namespace bios_bmc_smm_error_logger
diff --git a/src/rde/meson.build b/src/rde/meson.build
index c6831e2..1f13f18 100644
--- a/src/rde/meson.build
+++ b/src/rde/meson.build
@@ -1,14 +1,18 @@
-libbej_dep = dependency('libbej')
-
 rde_pre = declare_dependency(
   include_directories: [rde_inc],
-  dependencies: [libbej_dep])
+  dependencies: [
+    dependency('libbej'),
+    dependency('phosphor-dbus-interfaces'),
+    dependency('sdbusplus'),
+  ]
+)
 
 rde_lib = static_library(
   'rde',
   'rde_dictionary_manager.cpp',
   'external_storer_file.cpp',
   'rde_handler.cpp',
+  'notifier_dbus_handler.cpp',
   implicit_include_directories: false,
   dependencies: rde_pre)
 
diff --git a/src/rde/notifier_dbus_handler.cpp b/src/rde/notifier_dbus_handler.cpp
new file mode 100644
index 0000000..c7bf310
--- /dev/null
+++ b/src/rde/notifier_dbus_handler.cpp
@@ -0,0 +1,22 @@
+#include "rde/notifier_dbus_handler.hpp"
+
+namespace bios_bmc_smm_error_logger
+{
+namespace rde
+{
+
+CperFileNotifierHandler::CperFileNotifierHandler(sdbusplus::bus::bus& bus) :
+    bus(bus), objManager(bus, CperFileNotifier::cperBasePath)
+{}
+
+void CperFileNotifierHandler::createEntry(const std::string& filePath)
+{
+    auto obj = std::make_unique<CperFileNotifier>(bus, filePath, nextEntry);
+    // Notify fault log monitor through InterfacesAdded signal.
+    obj->emit_added();
+    notifierObjs.push_back(std::move(obj));
+    ++nextEntry;
+}
+
+} // namespace rde
+} // namespace bios_bmc_smm_error_logger
