diff --git a/extensions/phal/fw_update_watch.cpp b/extensions/phal/fw_update_watch.cpp
index a49cc9c..af9dd3f 100644
--- a/extensions/phal/fw_update_watch.cpp
+++ b/extensions/phal/fw_update_watch.cpp
@@ -1,10 +1,22 @@
+#include "config.h"
+
 #include "fw_update_watch.hpp"
 
-#include <fmt/format.h>
+#include "common_utils.hpp"
+#include "create_pel.hpp"
+#include "pdbg_utils.hpp"
 
+#include <fmt/format.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include <phosphor-logging/elog-errors.hpp>
 #include <phosphor-logging/elog.hpp>
 #include <sdbusplus/exception.hpp>
 
+#include <filesystem>
+
 namespace openpower
 {
 namespace phal
@@ -12,6 +24,8 @@
 namespace fwupdate
 {
 using namespace phosphor::logging;
+namespace fs = std::filesystem;
+
 using Message = std::string;
 using Attributes = std::variant<Message>;
 using PropertyName = std::string;
@@ -72,15 +86,90 @@
         // Device tree data collection is required only for the first trigger
         setSoftwareUpdateProgress(true);
 
-        // Colect device tree data
-        openpower::phal::fwupdate::exportDevtree();
+        try
+        {
+            // Colect device tree data
+            openpower::phal::fwupdate::exportDevtree();
+        }
+        catch (fs::filesystem_error& e)
+        {
+            log<level::ERR>(
+                fmt::format("Filesystem error reported Error:({})", e.what())
+                    .c_str());
+            throw std::runtime_error(e.what());
+        }
+
+        log<level::INFO>("Successfully exported devtree attribute data");
     }
 
     return;
 }
 
 void exportDevtree()
-{}
+{
+    constexpr auto ERROR_DEVTREE_BACKUP =
+        "org.open_power.PHAL.Error.devtreeBackup";
+
+    // Check devtree export filter file is present
+    auto path = fs::path(DEVTREE_EXPORT_FILTER_FILE);
+    if (!fs::exists(path))
+    {
+        log<level::ERR>(
+            fmt::format("devtree export filter file is not available: ({})",
+                        DEVTREE_EXPORT_FILTER_FILE)
+                .c_str());
+        openpower::pel::createPEL(ERROR_DEVTREE_BACKUP);
+        return;
+    }
+
+    // delete export data file if present
+    auto expFile = fs::path(DEVTREE_EXP_FILE);
+    if (fs::exists(expFile))
+    {
+        fs::remove_all(expFile);
+    }
+    else
+    {
+        // create directory
+        fs::create_directory(expFile.parent_path());
+    }
+
+    // Update PDBG_DTB value
+    openpower::phal::setDevtreeEnv();
+
+    int status = 0;
+    pid_t pid = fork();
+    if (pid == 0)
+    {
+        std::string cmd("/usr/bin/attributes ");
+        cmd += "export ";
+        cmd += DEVTREE_EXPORT_FILTER_FILE;
+        cmd += " > ";
+        cmd += DEVTREE_EXP_FILE;
+        execl("/bin/sh", "sh", "-c", cmd.c_str(), 0);
+
+        auto error = errno;
+        log<level::ERR>(fmt::format("Error occurred during attributes function "
+                                    "execution, errno({})",
+                                    error)
+                            .c_str());
+        // Creating PEL at one place.
+    }
+    else if (pid > 0)
+    {
+        waitpid(pid, &status, 0);
+        if (WEXITSTATUS(status))
+        {
+            log<level::ERR>("Failed to collect attribute export data");
+            openpower::pel::createPEL(ERROR_DEVTREE_BACKUP);
+        }
+    }
+    else
+    {
+        log<level::ERR>("exportDevtree fork() failed");
+        std::runtime_error("exportDevtree fork() failed");
+    }
+}
 
 } // namespace fwupdate
 } // namespace phal
