diff --git a/phosphor-regulators/src/meson.build b/phosphor-regulators/src/meson.build
index 8238d93..7b852bb 100644
--- a/phosphor-regulators/src/meson.build
+++ b/phosphor-regulators/src/meson.build
@@ -15,6 +15,7 @@
     'id_map.cpp',
     'journal.cpp',
     'pmbus_utils.cpp',
+    'presence_detection.cpp',
     'presence_service.cpp',
     'rail.cpp',
     'sensor_monitoring.cpp',
diff --git a/phosphor-regulators/src/presence_detection.cpp b/phosphor-regulators/src/presence_detection.cpp
new file mode 100644
index 0000000..3ed5350
--- /dev/null
+++ b/phosphor-regulators/src/presence_detection.cpp
@@ -0,0 +1,64 @@
+/**
+ * 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.
+ */
+
+#include "presence_detection.hpp"
+
+#include "action_environment.hpp"
+#include "action_utils.hpp"
+#include "chassis.hpp"
+#include "device.hpp"
+#include "exception_utils.hpp"
+#include "system.hpp"
+
+#include <exception>
+
+namespace phosphor::power::regulators
+{
+
+bool PresenceDetection::execute(Services& services, System& system,
+                                Chassis& /*chassis*/, Device& device)
+{
+    // If no presence value is cached
+    if (!isPresent.has_value())
+    {
+        // Initially assume device is present
+        isPresent = true;
+
+        // Execute actions to find device presence
+        try
+        {
+            // Create ActionEnvironment
+            ActionEnvironment environment{system.getIDMap(), device.getID(),
+                                          services};
+
+            // Execute the actions and cache resulting value
+            isPresent = action_utils::execute(actions, environment);
+        }
+        catch (const std::exception& e)
+        {
+            // Log error messages in journal
+            services.getJournal().logError(exception_utils::getMessages(e));
+            services.getJournal().logError("Unable to determine presence of " +
+                                           device.getID());
+
+            // TODO: Create error log entry
+        }
+    }
+
+    return isPresent.value();
+}
+
+} // namespace phosphor::power::regulators
diff --git a/phosphor-regulators/src/presence_detection.hpp b/phosphor-regulators/src/presence_detection.hpp
index 23f416c..0574003 100644
--- a/phosphor-regulators/src/presence_detection.hpp
+++ b/phosphor-regulators/src/presence_detection.hpp
@@ -16,14 +16,21 @@
 #pragma once
 
 #include "action.hpp"
+#include "services.hpp"
 
 #include <memory>
+#include <optional>
 #include <utility>
 #include <vector>
 
 namespace phosphor::power::regulators
 {
 
+// Forward declarations to avoid circular dependencies
+class Chassis;
+class Device;
+class System;
+
 /**
  * @class PresenceDetection
  *
@@ -69,20 +76,30 @@
     }
 
     /**
+     * Clears the cached presence value.
+     */
+    void clearCache(void)
+    {
+        isPresent.reset();
+    }
+
+    /**
      * Executes the actions to detect whether the device is present.
      *
      * The return value of the last action indicates whether the device is
      * present.  A return value of true means the device is present; false means
      * the device is missing.
      *
+     * Caches the resulting presence value.  Subsequent calls to execute() will
+     * return the cached value rather than re-executing the actions.  This
+     * provides a performance improvement since the actions may be expensive to
+     * execute, such as I2C reads or D-Bus method calls.  The cached value can
+     * be cleared by calling clearCache().
+     *
      * @return true if device is present, false otherwise
      */
-    bool execute()
-    {
-        // TODO: Create ActionEnvironment, execute actions, catch and handle any
-        // exceptions
-        return true;
-    }
+    bool execute(Services& services, System& system, Chassis& chassis,
+                 Device& device);
 
     /**
      * Returns the actions that detect whether the device is present.
@@ -94,11 +111,26 @@
         return actions;
     }
 
+    /**
+     * Returns the cached presence value, if any.
+     *
+     * @return cached presence value
+     */
+    std::optional<bool> getCachedPresence() const
+    {
+        return isPresent;
+    }
+
   private:
     /**
      * Actions that detect whether the device is present.
      */
     std::vector<std::unique_ptr<Action>> actions{};
+
+    /**
+     * Cached presence value.  Initially has no value.
+     */
+    std::optional<bool> isPresent{};
 };
 
 } // namespace phosphor::power::regulators
