diff --git a/cleanup/cleanup.hpp b/cleanup/cleanup.hpp
new file mode 100644
index 0000000..7c528af
--- /dev/null
+++ b/cleanup/cleanup.hpp
@@ -0,0 +1,88 @@
+#pragma once
+
+#include "fs.hpp"
+
+#include <blobs-ipmid/blobs.hpp>
+#include <memory>
+#include <string>
+#include <vector>
+
+namespace ipmi_flash
+{
+
+class FileCleanupHandler : public blobs::GenericBlobInterface
+{
+  public:
+    static std::unique_ptr<blobs::GenericBlobInterface>
+        CreateCleanupHandler(const std::string& blobId,
+                             const std::vector<std::string>& files);
+
+    FileCleanupHandler(const std::string& blobId,
+                       const std::vector<std::string>& files,
+                       const FileSystemInterface* helper = &fileSystemHelper) :
+        supported(blobId),
+        files(files), helper(helper)
+    {
+    }
+
+    ~FileCleanupHandler() = default;
+    FileCleanupHandler(const FileCleanupHandler&) = default;
+    FileCleanupHandler& operator=(const FileCleanupHandler&) = default;
+    FileCleanupHandler(FileCleanupHandler&&) = default;
+    FileCleanupHandler& operator=(FileCleanupHandler&&) = default;
+
+    bool canHandleBlob(const std::string& path) override;
+    std::vector<std::string> getBlobIds() override;
+    bool commit(uint16_t session, const std::vector<uint8_t>& data) override;
+
+    /* These methods return true without doing anything. */
+    bool open(uint16_t session, uint16_t flags,
+              const std::string& path) override
+    {
+        return true;
+    }
+    bool close(uint16_t session) override
+    {
+        return true;
+    }
+    bool expire(uint16_t session) override
+    {
+        return true;
+    }
+
+    /* These methods are unsupported. */
+    bool deleteBlob(const std::string& path) override
+    {
+        return false;
+    }
+    bool stat(const std::string& path, blobs::BlobMeta* meta) override
+    {
+        return false;
+    }
+    std::vector<uint8_t> read(uint16_t session, uint32_t offset,
+                              uint32_t requestedSize) override
+    {
+        return {};
+    }
+    bool write(uint16_t session, uint32_t offset,
+               const std::vector<uint8_t>& data) override
+    {
+        return false;
+    }
+    bool writeMeta(uint16_t session, uint32_t offset,
+                   const std::vector<uint8_t>& data) override
+    {
+        return false;
+    }
+    bool stat(uint16_t session, blobs::BlobMeta* meta) override
+    {
+        return false;
+    }
+
+  private:
+    std::string supported;
+    std::vector<std::string> files;
+    const FileSystemInterface* helper;
+};
+
+} // namespace ipmi_flash
