diff --git a/extensions/openpower-pels/temporary_file.hpp b/extensions/openpower-pels/temporary_file.hpp
new file mode 100644
index 0000000..76c9e6a
--- /dev/null
+++ b/extensions/openpower-pels/temporary_file.hpp
@@ -0,0 +1,120 @@
+#pragma once
+
+#include <filesystem>
+#include <utility>
+
+namespace openpower
+{
+namespace pels
+{
+namespace util
+{
+
+namespace fs = std::filesystem;
+
+/**
+ * @class TemporaryFile
+ *
+ * A temporary file in the file system.
+ *
+ * The temporary file is created by the constructor.  The absolute path to the
+ * file can be obtained using getPath().
+ *
+ * Note: Callers responsibility to delete the file after usage.
+ *       The temporary file can be deleted by calling remove().
+ *
+ * TemporaryFile objects cannot be copied, but they can be moved.  This enables
+ * them to be stored in containers like std::vector.
+ */
+class TemporaryFile
+{
+  public:
+    // Specify which compiler-generated methods we want
+    TemporaryFile(const TemporaryFile&) = delete;
+    TemporaryFile& operator=(const TemporaryFile&) = delete;
+
+    /**
+     * Constructor.
+     *
+     * Creates a temporary file in the temporary directory (normally /tmp).
+     *
+     * Throws an exception if the file cannot be created.
+     *
+     *  @param data - data buffer
+     *  @param len - length of the data buffer
+     */
+    TemporaryFile(const char* data, const uint32_t len);
+
+    /**
+     * Move constructor.
+     *
+     * Transfers ownership of a temporary file.
+     *
+     * @param file TemporaryFile object being moved
+     */
+    TemporaryFile(TemporaryFile&& file) : path{std::move(file.path)}
+    {
+        // Clear path in other object; after move path is in unspecified state
+        file.path.clear();
+    }
+
+    /**
+     * Move assignment operator.
+     *
+     * Deletes the temporary file owned by this object.  Then transfers
+     * ownership of the temporary file owned by the other object.
+     *
+     * Throws an exception if an error occurs during the deletion.
+     *
+     * @param file TemporaryFile object being moved
+     */
+    TemporaryFile& operator=(TemporaryFile&& file);
+
+    /**
+     * Destructor.
+     */
+    ~TemporaryFile()
+    {
+    }
+
+    /**
+     * Deletes the temporary file.
+     *
+     * Does nothing if the file has already been deleted.
+     *
+     * Throws an exception if an error occurs during the deletion.
+     */
+    void remove();
+
+    /**
+     * Returns the absolute path to the temporary file.
+     *
+     * Returns an empty path if the file has been deleted.
+     *
+     * @return temporary file path
+     */
+    const fs::path& getPath() const
+    {
+        return path;
+    }
+
+    int getFd() const
+    {
+        return fd;
+    }
+
+  private:
+    /**
+     * Absolute path to the temporary file.
+     */
+    fs::path path{};
+
+    /**
+     * File descriptor of the temporary file.
+     */
+    int fd;
+};
+
+} // namespace util
+} // namespace pels
+} // namespace openpower
