diff --git a/phosphor-regulators/src/actions/compare_presence_action.hpp b/phosphor-regulators/src/actions/compare_presence_action.hpp
new file mode 100644
index 0000000..b2c7880
--- /dev/null
+++ b/phosphor-regulators/src/actions/compare_presence_action.hpp
@@ -0,0 +1,122 @@
+/**
+ * Copyright © 2020 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#pragma once
+
+#include "action.hpp"
+#include "action_environment.hpp"
+
+#include <ios>
+#include <sstream>
+#include <string>
+
+namespace phosphor::power::regulators
+{
+
+/**
+ * @class ComparePresenceAction
+ *
+ * Compares a hardware component's presence to an expected value.
+ *
+ * Implements the compare_presence action in the JSON config file.
+ */
+class ComparePresenceAction : public Action
+{
+  public:
+    // Specify which compiler-generated methods we want
+    ComparePresenceAction() = delete;
+    ComparePresenceAction(const ComparePresenceAction&) = delete;
+    ComparePresenceAction(ComparePresenceAction&&) = delete;
+    ComparePresenceAction& operator=(const ComparePresenceAction&) = delete;
+    ComparePresenceAction& operator=(ComparePresenceAction&&) = delete;
+    virtual ~ComparePresenceAction() = default;
+
+    /**
+     * Constructor.
+     *
+     * @param fru Field-Replaceable Unit (FRU)
+     * @param value Expected presence value
+     */
+    explicit ComparePresenceAction(const std::string& fru, bool value) :
+        fru{fru}, value{value}
+    {
+    }
+
+    /**
+     * Executes this action.
+     *
+     * TODO: Not implemented yet
+     *
+     * @param environment Action execution environment.
+     * @return true
+     */
+    virtual bool execute(ActionEnvironment& /* environment */) override
+    {
+        // TODO: Not implemented yet
+        return true;
+    }
+
+    /**
+     * Returns the Field-Replaceable Unit (FRU).
+     *
+     * @return FRU
+     */
+    const std::string& getFRU() const
+    {
+        return fru;
+    }
+
+    /**
+     * Returns the expected presence value.
+     *
+     * @return value
+     */
+    bool getValue() const
+    {
+        return value;
+    }
+
+    /**
+     * Returns a string description of this action.
+     *
+     * @return description of action
+     */
+    virtual std::string toString() const override
+    {
+        std::ostringstream ss;
+        ss << "compare_presence: { ";
+
+        ss << "fru: " << fru << ", ";
+
+        ss << "value: " << std::boolalpha << value << " }";
+
+        return ss.str();
+    }
+
+  private:
+    /**
+     * Field-Replaceable Unit (FRU) for this action.
+     *
+     * Specify the D-Bus inventory path of the FRU.
+     */
+    const std::string fru{};
+
+    /**
+     * Expected presence value.
+     */
+    const bool value{};
+};
+
+} // namespace phosphor::power::regulators
