diff --git a/firmware_handler.cpp b/firmware_handler.cpp
index d72c5c7..56ad3a2 100644
--- a/firmware_handler.cpp
+++ b/firmware_handler.cpp
@@ -17,8 +17,8 @@
 #include "firmware_handler.hpp"
 
 #include "image_handler.hpp"
+#include "status.hpp"
 #include "util.hpp"
-#include "verify.hpp"
 
 #include <algorithm>
 #include <cstdint>
@@ -38,8 +38,8 @@
     FirmwareBlobHandler::CreateFirmwareBlobHandler(
         const std::vector<HandlerPack>& firmwares,
         const std::vector<DataHandlerPack>& transports,
-        std::unique_ptr<VerificationInterface> verification,
-        std::unique_ptr<UpdateInterface> update)
+        std::unique_ptr<TriggerableActionInterface> verification,
+        std::unique_ptr<TriggerableActionInterface> update)
 {
     /* There must be at least one. */
     if (!firmwares.size())
@@ -708,7 +708,7 @@
 
 bool FirmwareBlobHandler::triggerVerification()
 {
-    bool result = verification->triggerVerification();
+    bool result = verification->trigger();
     if (result)
     {
         state = UpdateState::verificationStarted;
@@ -719,7 +719,7 @@
 
 bool FirmwareBlobHandler::triggerUpdate()
 {
-    bool result = update->triggerUpdate();
+    bool result = update->trigger();
     if (result)
     {
         state = UpdateState::updateStarted;
diff --git a/firmware_handler.hpp b/firmware_handler.hpp
index fd4f9ef..9aab59a 100644
--- a/firmware_handler.hpp
+++ b/firmware_handler.hpp
@@ -4,9 +4,8 @@
 
 #include "data_handler.hpp"
 #include "image_handler.hpp"
-#include "update.hpp"
+#include "status.hpp"
 #include "util.hpp"
-#include "verify.hpp"
 
 #include <algorithm>
 #include <blobs-ipmid/blobs.hpp>
@@ -118,8 +117,8 @@
     static std::unique_ptr<GenericBlobInterface> CreateFirmwareBlobHandler(
         const std::vector<HandlerPack>& firmwares,
         const std::vector<DataHandlerPack>& transports,
-        std::unique_ptr<VerificationInterface> verification,
-        std::unique_ptr<UpdateInterface> update);
+        std::unique_ptr<TriggerableActionInterface> verification,
+        std::unique_ptr<TriggerableActionInterface> update);
 
     /**
      * Create a FirmwareBlobHandler.
@@ -131,12 +130,12 @@
      * @param[in] verification - pointer to object for triggering verification
      * @param[in] update - point to object for triggering the update
      */
-    FirmwareBlobHandler(const std::vector<HandlerPack>& firmwares,
-                        const std::vector<std::string>& blobs,
-                        const std::vector<DataHandlerPack>& transports,
-                        std::uint16_t bitmask,
-                        std::unique_ptr<VerificationInterface> verification,
-                        std::unique_ptr<UpdateInterface> update) :
+    FirmwareBlobHandler(
+        const std::vector<HandlerPack>& firmwares,
+        const std::vector<std::string>& blobs,
+        const std::vector<DataHandlerPack>& transports, std::uint16_t bitmask,
+        std::unique_ptr<TriggerableActionInterface> verification,
+        std::unique_ptr<TriggerableActionInterface> update) :
         handlers(firmwares),
         blobIDs(blobs), transports(transports), bitmask(bitmask),
         activeImage(activeImageBlobId), activeHash(activeHashBlobId),
@@ -228,9 +227,9 @@
     /** The firmware update state. */
     UpdateState state;
 
-    std::unique_ptr<VerificationInterface> verification;
+    std::unique_ptr<TriggerableActionInterface> verification;
 
-    std::unique_ptr<UpdateInterface> update;
+    std::unique_ptr<TriggerableActionInterface> update;
 
     /** Temporary variable to track whether a blob is open. */
     bool fileOpen = false;
diff --git a/main.cpp b/main.cpp
index 36b4ee7..09a9713 100644
--- a/main.cpp
+++ b/main.cpp
@@ -23,9 +23,9 @@
 #include "lpc_handler.hpp"
 #include "lpc_nuvoton.hpp"
 #include "pci_handler.hpp"
+#include "status.hpp"
 #include "update_systemd.hpp"
 #include "util.hpp"
-#include "verify.hpp"
 #include "verify_systemd.hpp"
 
 #include <cstdint>
diff --git a/status.hpp b/status.hpp
index 2789d9c..869fe89 100644
--- a/status.hpp
+++ b/status.hpp
@@ -14,4 +14,23 @@
     unknown = 3,
 };
 
+class TriggerableActionInterface
+{
+  public:
+    virtual ~TriggerableActionInterface() = default;
+
+    /**
+     * Trigger action.
+     *
+     * @return true if successfully started, false otherwise.
+     */
+    virtual bool trigger() = 0;
+
+    /** Abort the action if possible. */
+    virtual void abort() = 0;
+
+    /** Check the current state of the action. */
+    virtual ActionStatus status() = 0;
+};
+
 } // namespace ipmi_flash
diff --git a/test/bmc_update_mock.hpp b/test/bmc_update_mock.hpp
deleted file mode 100644
index 296b513..0000000
--- a/test/bmc_update_mock.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#pragma once
-
-#include "status.hpp"
-#include "update.hpp"
-
-#include <memory>
-#include <vector>
-
-#include <gmock/gmock.h>
-
-namespace ipmi_flash
-{
-
-class UpdateMock : public UpdateInterface
-{
-  public:
-    MOCK_METHOD0(triggerUpdate, bool());
-    MOCK_METHOD0(abortUpdate, void());
-    MOCK_METHOD0(status, ActionStatus());
-};
-
-std::unique_ptr<UpdateInterface> CreateUpdateMock()
-{
-    return std::make_unique<UpdateMock>();
-}
-
-} // namespace ipmi_flash
diff --git a/test/firmware_canhandle_unittest.cpp b/test/firmware_canhandle_unittest.cpp
index c9685bd..7fb4c7f 100644
--- a/test/firmware_canhandle_unittest.cpp
+++ b/test/firmware_canhandle_unittest.cpp
@@ -1,9 +1,8 @@
-#include "bmc_update_mock.hpp"
 #include "data_mock.hpp"
 #include "firmware_handler.hpp"
 #include "image_mock.hpp"
+#include "triggerable_mock.hpp"
 #include "util.hpp"
-#include "verification_mock.hpp"
 
 #include <vector>
 
@@ -34,7 +33,7 @@
     };
 
     auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
-        blobs, data, CreateVerifyMock(), CreateUpdateMock());
+        blobs, data, CreateTriggerMock(), CreateTriggerMock());
 
     for (const auto& item : items)
     {
diff --git a/test/firmware_close_unittest.cpp b/test/firmware_close_unittest.cpp
index a46973f..66b9c83 100644
--- a/test/firmware_close_unittest.cpp
+++ b/test/firmware_close_unittest.cpp
@@ -2,8 +2,8 @@
 #include "firmware_handler.hpp"
 #include "firmware_unittest.hpp"
 #include "image_mock.hpp"
+#include "triggerable_mock.hpp"
 #include "util.hpp"
-#include "verification_mock.hpp"
 
 #include <memory>
 #include <vector>
diff --git a/test/firmware_commit_unittest.cpp b/test/firmware_commit_unittest.cpp
index 37e619e..11ce3fc 100644
--- a/test/firmware_commit_unittest.cpp
+++ b/test/firmware_commit_unittest.cpp
@@ -1,9 +1,8 @@
-#include "bmc_update_mock.hpp"
 #include "data_mock.hpp"
 #include "firmware_handler.hpp"
 #include "image_mock.hpp"
+#include "triggerable_mock.hpp"
 #include "util.hpp"
-#include "verification_mock.hpp"
 
 #include <memory>
 #include <vector>
@@ -46,11 +45,11 @@
      */
 
     /* Verify it doesn't get called by using StrictMock. */
-    std::unique_ptr<VerificationInterface> verifyMock =
-        std::make_unique<StrictMock<VerificationMock>>();
+    std::unique_ptr<TriggerableActionInterface> verifyMock =
+        std::make_unique<StrictMock<TriggerMock>>();
 
     auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
-        blobs, data, std::move(verifyMock), CreateUpdateMock());
+        blobs, data, std::move(verifyMock), CreateTriggerMock());
 
     EXPECT_CALL(imageMock2, open("asdf")).WillOnce(Return(true));
 
@@ -68,11 +67,11 @@
      */
 
     /* Verify it doesn't get called by using StrictMock. */
-    std::unique_ptr<VerificationInterface> verifyMock =
-        std::make_unique<StrictMock<VerificationMock>>();
+    std::unique_ptr<TriggerableActionInterface> verifyMock =
+        std::make_unique<StrictMock<TriggerMock>>();
 
     auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
-        blobs, data, std::move(verifyMock), CreateUpdateMock());
+        blobs, data, std::move(verifyMock), CreateTriggerMock());
 
     EXPECT_CALL(imageMock1, open(StrEq(hashBlobId))).WillOnce(Return(true));
 
diff --git a/test/firmware_createhandler_unittest.cpp b/test/firmware_createhandler_unittest.cpp
index 3bc52fe..dc6d968 100644
--- a/test/firmware_createhandler_unittest.cpp
+++ b/test/firmware_createhandler_unittest.cpp
@@ -1,9 +1,8 @@
-#include "bmc_update_mock.hpp"
 #include "data_mock.hpp"
 #include "firmware_handler.hpp"
 #include "image_mock.hpp"
+#include "triggerable_mock.hpp"
 #include "util.hpp"
-#include "verification_mock.hpp"
 
 #include <gtest/gtest.h>
 
@@ -32,7 +31,7 @@
     };
 
     auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
-        blobs, data, CreateVerifyMock(), CreateUpdateMock());
+        blobs, data, CreateTriggerMock(), CreateTriggerMock());
 
     //    EXPECT_EQ(handler, nullptr);
     EXPECT_FALSE(handler == nullptr);
diff --git a/test/firmware_delete_unittest.cpp b/test/firmware_delete_unittest.cpp
index ff2d7b3..058295d 100644
--- a/test/firmware_delete_unittest.cpp
+++ b/test/firmware_delete_unittest.cpp
@@ -1,10 +1,9 @@
-#include "bmc_update_mock.hpp"
 #include "data_mock.hpp"
 #include "firmware_handler.hpp"
 #include "firmware_unittest.hpp"
 #include "image_mock.hpp"
+#include "triggerable_mock.hpp"
 #include "util.hpp"
-#include "verification_mock.hpp"
 
 #include <vector>
 
diff --git a/test/firmware_handler_unittest.cpp b/test/firmware_handler_unittest.cpp
index e2ef7f4..a5d60f5 100644
--- a/test/firmware_handler_unittest.cpp
+++ b/test/firmware_handler_unittest.cpp
@@ -1,8 +1,7 @@
-#include "bmc_update_mock.hpp"
 #include "firmware_handler.hpp"
 #include "image_mock.hpp"
+#include "triggerable_mock.hpp"
 #include "util.hpp"
-#include "verification_mock.hpp"
 
 #include <algorithm>
 #include <vector>
@@ -23,7 +22,7 @@
     };
 
     auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
-        {}, data, CreateVerifyMock(), CreateUpdateMock());
+        {}, data, CreateTriggerMock(), CreateTriggerMock());
     EXPECT_EQ(handler, nullptr);
 }
 TEST(FirmwareHandlerTest, CreateEmptyDataHandlerListFails)
@@ -36,7 +35,7 @@
     };
 
     auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
-        blobs, {}, CreateVerifyMock(), CreateUpdateMock());
+        blobs, {}, CreateTriggerMock(), CreateTriggerMock());
     EXPECT_EQ(handler, nullptr);
 }
 TEST(FirmwareHandlerTest, VerifyHashRequiredForHappiness)
@@ -52,13 +51,13 @@
     };
 
     auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
-        blobs, data, CreateVerifyMock(), CreateUpdateMock());
+        blobs, data, CreateTriggerMock(), CreateTriggerMock());
     EXPECT_EQ(handler, nullptr);
 
     blobs.push_back({hashBlobId, &imageMock});
 
     handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
-        blobs, data, CreateVerifyMock(), CreateUpdateMock());
+        blobs, data, CreateTriggerMock(), CreateTriggerMock());
     auto result = handler->getBlobIds();
     std::vector<std::string> expectedBlobs = {"asdf", hashBlobId};
     EXPECT_THAT(result, UnorderedElementsAreArray(expectedBlobs));
diff --git a/test/firmware_open_unittest.cpp b/test/firmware_open_unittest.cpp
index 8190a47..7df0743 100644
--- a/test/firmware_open_unittest.cpp
+++ b/test/firmware_open_unittest.cpp
@@ -2,8 +2,8 @@
 #include "firmware_handler.hpp"
 #include "firmware_unittest.hpp"
 #include "image_mock.hpp"
+#include "triggerable_mock.hpp"
 #include "util.hpp"
-#include "verification_mock.hpp"
 
 #include <memory>
 #include <vector>
diff --git a/test/firmware_sessionstat_unittest.cpp b/test/firmware_sessionstat_unittest.cpp
index a484716..d2d1896 100644
--- a/test/firmware_sessionstat_unittest.cpp
+++ b/test/firmware_sessionstat_unittest.cpp
@@ -2,8 +2,8 @@
 #include "firmware_handler.hpp"
 #include "firmware_unittest.hpp"
 #include "image_mock.hpp"
+#include "triggerable_mock.hpp"
 #include "util.hpp"
-#include "verification_mock.hpp"
 
 #include <vector>
 
diff --git a/test/firmware_stat_unittest.cpp b/test/firmware_stat_unittest.cpp
index 1960c44..4efae94 100644
--- a/test/firmware_stat_unittest.cpp
+++ b/test/firmware_stat_unittest.cpp
@@ -1,8 +1,7 @@
-#include "bmc_update_mock.hpp"
 #include "firmware_handler.hpp"
 #include "image_mock.hpp"
+#include "triggerable_mock.hpp"
 #include "util.hpp"
-#include "verification_mock.hpp"
 
 #include <vector>
 
@@ -30,7 +29,7 @@
     };
 
     auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
-        blobs, data, CreateVerifyMock(), CreateUpdateMock());
+        blobs, data, CreateTriggerMock(), CreateTriggerMock());
 
     blobs::BlobMeta meta;
     EXPECT_TRUE(handler->stat("asdf", &meta));
diff --git a/test/firmware_state_updatecompleted_unittest.cpp b/test/firmware_state_updatecompleted_unittest.cpp
index 324a307..625e075 100644
--- a/test/firmware_state_updatecompleted_unittest.cpp
+++ b/test/firmware_state_updatecompleted_unittest.cpp
@@ -162,7 +162,7 @@
 {
     getToUpdateCompleted(ActionStatus::success);
 
-    EXPECT_CALL(*updateMockPtr, triggerUpdate()).Times(0);
+    EXPECT_CALL(*updateMockPtr, trigger()).Times(0);
     EXPECT_FALSE(handler->commit(session, {}));
 }
 
@@ -171,7 +171,7 @@
 {
     getToUpdateCompleted(ActionStatus::failed);
 
-    EXPECT_CALL(*updateMockPtr, triggerUpdate()).Times(0);
+    EXPECT_CALL(*updateMockPtr, trigger()).Times(0);
     EXPECT_FALSE(handler->commit(session, {}));
 }
 
diff --git a/test/firmware_state_updatepending_unittest.cpp b/test/firmware_state_updatepending_unittest.cpp
index 00bdc2a..31c88e9 100644
--- a/test/firmware_state_updatepending_unittest.cpp
+++ b/test/firmware_state_updatepending_unittest.cpp
@@ -215,7 +215,7 @@
     EXPECT_TRUE(handler->open(session, flags, updateBlobId));
     expectedState(FirmwareBlobHandler::UpdateState::updatePending);
 
-    EXPECT_CALL(*updateMockPtr, triggerUpdate()).WillOnce(Return(true));
+    EXPECT_CALL(*updateMockPtr, trigger()).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->commit(session, {}));
     expectedState(FirmwareBlobHandler::UpdateState::updateStarted);
@@ -228,7 +228,7 @@
     EXPECT_TRUE(handler->open(session, flags, updateBlobId));
     expectedState(FirmwareBlobHandler::UpdateState::updatePending);
 
-    EXPECT_CALL(*updateMockPtr, triggerUpdate()).WillOnce(Return(false));
+    EXPECT_CALL(*updateMockPtr, trigger()).WillOnce(Return(false));
 
     EXPECT_FALSE(handler->commit(session, {}));
     expectedState(FirmwareBlobHandler::UpdateState::updatePending);
diff --git a/test/firmware_state_updatestarted_unittest.cpp b/test/firmware_state_updatestarted_unittest.cpp
index 6b55b4e..420d7a7 100644
--- a/test/firmware_state_updatestarted_unittest.cpp
+++ b/test/firmware_state_updatestarted_unittest.cpp
@@ -148,7 +148,7 @@
        CallingCommitShouldReturnTrueAndHaveNoEffect)
 {
     getToUpdateStarted();
-    EXPECT_CALL(*updateMockPtr, triggerUpdate()).Times(0);
+    EXPECT_CALL(*updateMockPtr, trigger()).Times(0);
 
     EXPECT_TRUE(handler->commit(session, {}));
     expectedState(FirmwareBlobHandler::UpdateState::updateStarted);
diff --git a/test/firmware_state_verificationcompleted_unittest.cpp b/test/firmware_state_verificationcompleted_unittest.cpp
index 90338f0..d9b4e70 100644
--- a/test/firmware_state_verificationcompleted_unittest.cpp
+++ b/test/firmware_state_verificationcompleted_unittest.cpp
@@ -251,7 +251,7 @@
      * let you try-again.
      */
     getToVerificationCompleted(ActionStatus::success);
-    EXPECT_CALL(*verifyMockPtr, triggerVerification()).Times(0);
+    EXPECT_CALL(*verifyMockPtr, trigger()).Times(0);
 
     EXPECT_FALSE(handler->commit(session, {}));
 }
@@ -260,7 +260,7 @@
        CommitOnVerifyBlobAfterFailureReturnsFailure)
 {
     getToVerificationCompleted(ActionStatus::failed);
-    EXPECT_CALL(*verifyMockPtr, triggerVerification()).Times(0);
+    EXPECT_CALL(*verifyMockPtr, trigger()).Times(0);
 
     EXPECT_FALSE(handler->commit(session, {}));
 }
diff --git a/test/firmware_state_verificationpending_unittest.cpp b/test/firmware_state_verificationpending_unittest.cpp
index d22b887..b7c1bfc 100644
--- a/test/firmware_state_verificationpending_unittest.cpp
+++ b/test/firmware_state_verificationpending_unittest.cpp
@@ -192,7 +192,7 @@
 {
     getToVerificationPending(staticLayoutBlobId);
     EXPECT_TRUE(handler->open(session, flags, verifyBlobId));
-    EXPECT_CALL(*verifyMockPtr, triggerVerification()).WillOnce(Return(true));
+    EXPECT_CALL(*verifyMockPtr, trigger()).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->commit(session, {}));
     expectedState(FirmwareBlobHandler::UpdateState::verificationStarted);
@@ -209,7 +209,7 @@
      */
     getToVerificationPending(staticLayoutBlobId);
     EXPECT_TRUE(handler->open(session, flags, verifyBlobId));
-    EXPECT_CALL(*verifyMockPtr, triggerVerification()).Times(0);
+    EXPECT_CALL(*verifyMockPtr, trigger()).Times(0);
     EXPECT_CALL(*verifyMockPtr, status()).Times(0);
 
     blobs::BlobMeta meta, expectedMeta = {};
diff --git a/test/firmware_unittest.hpp b/test/firmware_unittest.hpp
index 11d49bf..a79cd4f 100644
--- a/test/firmware_unittest.hpp
+++ b/test/firmware_unittest.hpp
@@ -1,10 +1,9 @@
 #pragma once
 
-#include "bmc_update_mock.hpp"
 #include "data_mock.hpp"
 #include "firmware_handler.hpp"
 #include "image_mock.hpp"
-#include "verification_mock.hpp"
+#include "triggerable_mock.hpp"
 
 #include <memory>
 #include <vector>
@@ -29,13 +28,13 @@
             {staticLayoutBlobId, &imageMock},
         };
 
-        std::unique_ptr<VerificationInterface> verifyMock =
-            std::make_unique<VerificationMock>();
-        verifyMockPtr = reinterpret_cast<VerificationMock*>(verifyMock.get());
+        std::unique_ptr<TriggerableActionInterface> verifyMock =
+            std::make_unique<TriggerMock>();
+        verifyMockPtr = reinterpret_cast<TriggerMock*>(verifyMock.get());
 
-        std::unique_ptr<UpdateInterface> updateMock =
-            std::make_unique<UpdateMock>();
-        updateMockPtr = reinterpret_cast<UpdateMock*>(updateMock.get());
+        std::unique_ptr<TriggerableActionInterface> updateMock =
+            std::make_unique<TriggerMock>();
+        updateMockPtr = reinterpret_cast<TriggerMock*>(updateMock.get());
 
         handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
             blobs, data, std::move(verifyMock), std::move(updateMock));
@@ -68,8 +67,7 @@
         getToVerificationPending(blobId);
 
         EXPECT_TRUE(handler->open(session, flags, verifyBlobId));
-        EXPECT_CALL(*verifyMockPtr, triggerVerification())
-            .WillOnce(Return(true));
+        EXPECT_CALL(*verifyMockPtr, trigger()).WillOnce(Return(true));
 
         EXPECT_TRUE(handler->commit(session, {}));
         expectedState(FirmwareBlobHandler::UpdateState::verificationStarted);
@@ -98,7 +96,7 @@
         getToUpdatePending();
         EXPECT_TRUE(handler->open(session, flags, updateBlobId));
 
-        EXPECT_CALL(*updateMockPtr, triggerUpdate()).WillOnce(Return(true));
+        EXPECT_CALL(*updateMockPtr, trigger()).WillOnce(Return(true));
         EXPECT_TRUE(handler->commit(session, {}));
         expectedState(FirmwareBlobHandler::UpdateState::updateStarted);
     }
@@ -118,8 +116,8 @@
     std::vector<DataHandlerPack> data = {
         {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr}};
     std::unique_ptr<blobs::GenericBlobInterface> handler;
-    VerificationMock* verifyMockPtr;
-    UpdateMock* updateMockPtr;
+    TriggerMock* verifyMockPtr;
+    TriggerMock* updateMockPtr;
 
     std::uint16_t session = 1;
     std::uint16_t flags =
@@ -142,7 +140,7 @@
             {"asdf", &imageMock},
         };
         handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
-            blobs, data, CreateVerifyMock(), CreateUpdateMock());
+            blobs, data, CreateTriggerMock(), CreateTriggerMock());
     }
 };
 
@@ -166,7 +164,7 @@
             {FirmwareBlobHandler::UpdateFlags::lpc, &dataMock},
         };
         handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
-            blobs, data, CreateVerifyMock(), CreateUpdateMock());
+            blobs, data, CreateTriggerMock(), CreateTriggerMock());
     }
 };
 
diff --git a/test/firmware_write_unittest.cpp b/test/firmware_write_unittest.cpp
index f4f78fc..d74f3c8 100644
--- a/test/firmware_write_unittest.cpp
+++ b/test/firmware_write_unittest.cpp
@@ -2,8 +2,8 @@
 #include "firmware_handler.hpp"
 #include "firmware_unittest.hpp"
 #include "image_mock.hpp"
+#include "triggerable_mock.hpp"
 #include "util.hpp"
-#include "verification_mock.hpp"
 
 #include <cstdint>
 #include <cstring>
diff --git a/test/firmware_writemeta_unittest.cpp b/test/firmware_writemeta_unittest.cpp
index e7d8463..491d669 100644
--- a/test/firmware_writemeta_unittest.cpp
+++ b/test/firmware_writemeta_unittest.cpp
@@ -2,8 +2,8 @@
 #include "firmware_handler.hpp"
 #include "firmware_unittest.hpp"
 #include "image_mock.hpp"
+#include "triggerable_mock.hpp"
 #include "util.hpp"
-#include "verification_mock.hpp"
 
 #include <memory>
 #include <vector>
diff --git a/test/triggerable_mock.hpp b/test/triggerable_mock.hpp
new file mode 100644
index 0000000..c485d8e
--- /dev/null
+++ b/test/triggerable_mock.hpp
@@ -0,0 +1,24 @@
+#pragma once
+
+#include "status.hpp"
+
+#include <gtest/gtest.h>
+
+namespace ipmi_flash
+{
+// TriggerableActionInterface
+
+class TriggerMock : public TriggerableActionInterface
+{
+  public:
+    MOCK_METHOD0(trigger, bool());
+    MOCK_METHOD0(abort, void());
+    MOCK_METHOD0(status, ActionStatus());
+};
+
+std::unique_ptr<TriggerableActionInterface> CreateTriggerMock()
+{
+    return std::make_unique<TriggerMock>();
+}
+
+} // namespace ipmi_flash
diff --git a/test/verification_mock.hpp b/test/verification_mock.hpp
deleted file mode 100644
index 728411b..0000000
--- a/test/verification_mock.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#pragma once
-
-#include "status.hpp"
-#include "verify.hpp"
-
-#include <memory>
-#include <vector>
-
-#include <gtest/gtest.h>
-
-namespace ipmi_flash
-{
-
-class VerificationMock : public VerificationInterface
-{
-  public:
-    MOCK_METHOD0(triggerVerification, bool());
-    MOCK_METHOD0(abortVerification, void());
-    MOCK_METHOD0(status, ActionStatus());
-};
-
-std::unique_ptr<VerificationInterface> CreateVerifyMock()
-{
-    return std::make_unique<VerificationMock>();
-}
-
-} // namespace ipmi_flash
diff --git a/update.hpp b/update.hpp
deleted file mode 100644
index 8f2b03f..0000000
--- a/update.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#pragma once
-
-#include "status.hpp"
-
-namespace ipmi_flash
-{
-
-class UpdateInterface
-{
-  public:
-    virtual ~UpdateInterface() = default;
-
-    /**
-     * Trigger the update mechanism.
-     *
-     * @return true if successfully started, false otherwise.
-     */
-    virtual bool triggerUpdate() = 0;
-
-    /** Abort the update process. */
-    virtual void abortUpdate() = 0;
-
-    /** Check the current state of the update process. */
-    virtual ActionStatus status() = 0;
-};
-
-} // namespace ipmi_flash
diff --git a/update_systemd.cpp b/update_systemd.cpp
index e81b2bc..d8f2329 100644
--- a/update_systemd.cpp
+++ b/update_systemd.cpp
@@ -17,7 +17,6 @@
 #include "update_systemd.hpp"
 
 #include "status.hpp"
-#include "update.hpp"
 
 #include <memory>
 #include <sdbusplus/bus.hpp>
@@ -26,7 +25,7 @@
 namespace ipmi_flash
 {
 
-std::unique_ptr<UpdateInterface>
+std::unique_ptr<TriggerableActionInterface>
     SystemdUpdateMechanism::CreateSystemdUpdate(sdbusplus::bus::bus&& bus,
                                                 const std::string& target,
                                                 const std::string& mode)
@@ -35,7 +34,7 @@
                                                     mode);
 }
 
-bool SystemdUpdateMechanism::triggerUpdate()
+bool SystemdUpdateMechanism::trigger()
 {
     /* TODO: Add a util method for triggering a service with optional additional
      * parameter. */
@@ -63,7 +62,7 @@
     }
 }
 
-void SystemdUpdateMechanism::abortUpdate()
+void SystemdUpdateMechanism::abort()
 {
     return;
 }
diff --git a/update_systemd.hpp b/update_systemd.hpp
index 693beb4..15d616f 100644
--- a/update_systemd.hpp
+++ b/update_systemd.hpp
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "update.hpp"
+#include "status.hpp"
 
 #include <memory>
 #include <sdbusplus/bus.hpp>
@@ -12,10 +12,10 @@
 /**
  * Implements the update interface by simply triggering a systemd unit.
  */
-class SystemdUpdateMechanism : public UpdateInterface
+class SystemdUpdateMechanism : public TriggerableActionInterface
 {
   public:
-    static std::unique_ptr<UpdateInterface>
+    static std::unique_ptr<TriggerableActionInterface>
         CreateSystemdUpdate(sdbusplus::bus::bus&& bus,
                             const std::string& target,
                             const std::string& mode = "");
@@ -33,8 +33,8 @@
     SystemdUpdateMechanism(SystemdUpdateMechanism&&) = default;
     SystemdUpdateMechanism& operator=(SystemdUpdateMechanism&&) = default;
 
-    bool triggerUpdate() override;
-    void abortUpdate() override;
+    bool trigger() override;
+    void abort() override;
     ActionStatus status() override;
 
   private:
diff --git a/verify.hpp b/verify.hpp
deleted file mode 100644
index 6c70d54..0000000
--- a/verify.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-#pragma once
-
-#include "status.hpp"
-
-#include <memory>
-#include <string>
-
-namespace ipmi_flash
-{
-
-class VerificationInterface
-{
-  public:
-    virtual ~VerificationInterface() = default;
-
-    /**
-     * Trigger verification service.
-     *
-     * @return true if successfully started, false otherwise.
-     */
-    virtual bool triggerVerification() = 0;
-
-    /** Abort the verification process. */
-    virtual void abortVerification() = 0;
-
-    /** Check the current state of the verification process. */
-    virtual ActionStatus status() = 0;
-};
-
-} // namespace ipmi_flash
diff --git a/verify_systemd.cpp b/verify_systemd.cpp
index 73d9f24..f7b88b0 100644
--- a/verify_systemd.cpp
+++ b/verify_systemd.cpp
@@ -17,7 +17,6 @@
 #include "verify_systemd.hpp"
 
 #include "status.hpp"
-#include "verify.hpp"
 
 #include <fstream>
 #include <memory>
@@ -28,7 +27,7 @@
 namespace ipmi_flash
 {
 
-std::unique_ptr<VerificationInterface>
+std::unique_ptr<TriggerableActionInterface>
     SystemdVerification::CreateVerification(sdbusplus::bus::bus&& bus,
                                             const std::string& path,
                                             const std::string& service)
@@ -36,7 +35,7 @@
     return std::make_unique<SystemdVerification>(std::move(bus), path, service);
 }
 
-bool SystemdVerification::triggerVerification()
+bool SystemdVerification::trigger()
 {
     static constexpr auto systemdService = "org.freedesktop.systemd1";
     static constexpr auto systemdRoot = "/org/freedesktop/systemd1";
@@ -62,7 +61,7 @@
     return true;
 }
 
-void SystemdVerification::abortVerification()
+void SystemdVerification::abort()
 {
     /* TODO: Implement this. */
 }
diff --git a/verify_systemd.hpp b/verify_systemd.hpp
index 9b2cbab..894b534 100644
--- a/verify_systemd.hpp
+++ b/verify_systemd.hpp
@@ -1,7 +1,6 @@
 #pragma once
 
 #include "status.hpp"
-#include "verify.hpp"
 
 #include <memory>
 #include <sdbusplus/bus.hpp>
@@ -16,7 +15,7 @@
  * verification step, however, it leaves room for a future possibility out
  * something wholly configurable.
  */
-class SystemdVerification : public VerificationInterface
+class SystemdVerification : public TriggerableActionInterface
 {
   public:
     /**
@@ -28,7 +27,7 @@
      * @param[in[ service - the systemd service to start to trigger
      * verification.
      */
-    static std::unique_ptr<VerificationInterface>
+    static std::unique_ptr<TriggerableActionInterface>
         CreateVerification(sdbusplus::bus::bus&& bus, const std::string& path,
                            const std::string& service);
 
@@ -45,8 +44,8 @@
     SystemdVerification(SystemdVerification&&) = default;
     SystemdVerification& operator=(SystemdVerification&&) = default;
 
-    bool triggerVerification() override;
-    void abortVerification() override;
+    bool trigger() override;
+    void abort() override;
     ActionStatus status() override;
 
   private:
