diff --git a/Makefile.am b/Makefile.am
index 0ab5856..d26ed99 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,8 @@
 # Build these headers, don't install them
 noinst_HEADERS = \
 	occ_pass_through.hpp \
-	occ_status.hpp
+	occ_status.hpp \
+	powercap.hpp
 
 sbin_PROGRAMS = openpower-occ-control
 openpower_occ_control_SOURCES = \
@@ -9,7 +10,8 @@
 	occ_status.cpp \
 	occ_device.cpp \
 	app.cpp \
-	org/open_power/OCC/PassThrough/error.cpp
+	org/open_power/OCC/PassThrough/error.cpp \
+	powercap.cpp
 
 BUILT_SOURCES =  org/open_power/OCC/PassThrough/error.hpp \
                  org/open_power/OCC/PassThrough/error.cpp
diff --git a/powercap.cpp b/powercap.cpp
new file mode 100644
index 0000000..2d5362d
--- /dev/null
+++ b/powercap.cpp
@@ -0,0 +1,29 @@
+#include <powercap.hpp>
+#include <phosphor-logging/log.hpp>
+
+namespace open_power
+{
+namespace occ
+{
+namespace powercap
+{
+
+using namespace phosphor::logging;
+
+
+void PowerCap::pcapChanged(sdbusplus::message::message& msg)
+{
+    log<level::DEBUG>("Power Cap Change Detected");
+    if (!occStatus.occActive())
+    {
+        // Nothing to  do
+        return;
+    }
+    // TODO - Process this change
+}
+
+} // namespace open_power
+
+} // namespace occ
+
+}// namespace powercap
diff --git a/powercap.hpp b/powercap.hpp
new file mode 100644
index 0000000..878822b
--- /dev/null
+++ b/powercap.hpp
@@ -0,0 +1,78 @@
+#pragma once
+
+#include <sdbusplus/bus.hpp>
+#include <sdbusplus/bus/match.hpp>
+#include "occ_status.hpp"
+#include "config.h"
+
+namespace open_power
+{
+namespace occ
+{
+namespace powercap
+{
+
+namespace sdbusRule = sdbusplus::bus::match::rules;
+
+/** @class PowerCap
+ *  @brief Monitors for changes to the power cap and notifies occ
+ *
+ *  The customer power cap is provided to the OCC by host TMGT when the occ
+ *  first goes active or is reset.  This code is responsible for sending
+ *  the power cap to the OCC if the cap is changed while the occ is active.
+ */
+
+class PowerCap
+{
+public:
+    /** @brief PowerCap object to inform occ of changes to cap
+     *
+     * This object will monitor for changes to the power cap setting and
+     * power cap enable properties.  If a change is detected, and the occ
+     * is active, then this object will notify the OCC of the change.
+     *
+     * @param[in] bus       - The Dbus bus object
+     * @param[in] occStatus - The occ status object
+     */
+    PowerCap(sdbusplus::bus::bus &bus,
+             Status &occStatus) :
+        bus(bus),
+        occStatus(occStatus),
+        pcapMatch(
+                bus,
+                sdbusRule::member("PropertiesChanged") +
+                sdbusRule::path(
+                    "/xyz/openbmc_project/control/host0/power_cap") +
+                sdbusRule::argN(0, "xyz.openbmc_project.Control.Power.Cap") +
+                sdbusRule::interface("org.freedesktop.DBus.Properties"),
+                std::bind(std::mem_fn(&PowerCap::pcapChanged),
+                          this, std::placeholders::_1))
+    {};
+
+private:
+
+    /** @brief Callback for pcap setting changes
+     *
+     * Process change and inform OCC
+     *
+     * @param[in]  msg       - Data associated with pcap change signal
+     *
+     */
+    void pcapChanged(sdbusplus::message::message& msg);
+
+    /** @brief Reference to sdbus **/
+    sdbusplus::bus::bus& bus;
+
+    /* @brief OCC Status object */
+    Status &occStatus;
+
+    /** @brief Used to subscribe to dbus pcap propety changes **/
+    sdbusplus::bus::match_t pcapMatch;
+
+ };
+
+} // namespace open_power
+
+} // namespace occ
+
+}// namespace powercap
