diff --git a/pldmtool/pldm_fw_update_cmd.cpp b/pldmtool/pldm_fw_update_cmd.cpp
index d07b197..3921925 100644
--- a/pldmtool/pldm_fw_update_cmd.cpp
+++ b/pldmtool/pldm_fw_update_cmd.cpp
@@ -1215,6 +1215,46 @@
     bool8_t selfContainedActivRequest;
 };
 
+class CancelUpdateComponent : public CommandInterface
+{
+  public:
+    ~CancelUpdateComponent() = default;
+    CancelUpdateComponent() = delete;
+    CancelUpdateComponent(const CancelUpdateComponent&) = delete;
+    CancelUpdateComponent(CancelUpdateComponent&&) = delete;
+    CancelUpdateComponent& operator=(const CancelUpdateComponent&) = delete;
+    CancelUpdateComponent& operator=(CancelUpdateComponent&&) = delete;
+
+    using CommandInterface::CommandInterface;
+
+    std::pair<int, std::vector<uint8_t>> createRequestMsg() override
+    {
+        std::vector<uint8_t> requestMsg(sizeof(pldm_msg_hdr));
+        auto request = new (requestMsg.data()) pldm_msg;
+        auto rc = encode_cancel_update_component_req(
+            instanceId, request, PLDM_CANCEL_UPDATE_COMPONENT_REQ_BYTES);
+        return {rc, requestMsg};
+    }
+
+    void parseResponseMsg(pldm_msg* responsePtr, size_t payloadLength) override
+    {
+        uint8_t cc = 0;
+
+        auto rc = decode_cancel_update_component_resp(responsePtr,
+                                                      payloadLength, &cc);
+        if (rc != PLDM_SUCCESS)
+        {
+            std::cerr << "Parsing CancelUpdateComponent response failed: "
+                      << "rc=" << rc << ",cc=" << static_cast<int>(cc) << "\n";
+            return;
+        }
+
+        ordered_json data;
+        fillCompletionCode(cc, data, PLDM_FWUP);
+        pldmtool::helper::DisplayInJson(data);
+    }
+};
+
 void registerCommand(CLI::App& app)
 {
     auto fwUpdate =
@@ -1254,6 +1294,11 @@
         fwUpdate->add_subcommand("ActivateFirmware", "To activate firmware");
     commands.push_back(std::make_unique<ActivateFirmware>(
         "fw_update", "ActivateFirmware", activateFirmware));
+
+    auto cancelUpdateComp = fwUpdate->add_subcommand(
+        "CancelUpdateComponent", "To cancel component update");
+    commands.push_back(std::make_unique<CancelUpdateComponent>(
+        "fw_update", "CancelUpdateComponent", cancelUpdateComp));
 }
 
 } // namespace fw_update
