diff --git a/control/fanctl.cpp b/control/fanctl.cpp
index 6822b5d..34677f1 100644
--- a/control/fanctl.cpp
+++ b/control/fanctl.cpp
@@ -525,19 +525,18 @@
 /**
  * @function dump the FlightRecorder log data
  */
-void dumpFlightRecorder()
+void dumpFanControl()
 {
     try
     {
         SDBusPlus::callMethod(systemdService, systemdPath, systemdMgrIface,
                               "KillUnit", phosphorServiceName, "main", SIGUSR1);
-        std::cout << "FlightRecorder log written to: /tmp/fan_control_dump.json"
+        std::cout << "Fan control dump written to: /tmp/fan_control_dump.json"
                   << std::endl;
     }
     catch (const phosphor::fan::util::DBusPropertyError& e)
     {
-        std::cerr << "Unable to dump flight recorder log: " << e.what()
-                  << std::endl;
+        std::cerr << "Unable to dump fan control: " << e.what() << std::endl;
     }
 }
 
@@ -644,7 +643,7 @@
         }
         else if (app.got_subcommand("dump"))
         {
-            dumpFlightRecorder();
+            dumpFanControl();
         }
     }
     catch (const std::exception& e)
diff --git a/control/json/manager.cpp b/control/json/manager.cpp
index 10bb84d..01365e7 100644
--- a/control/json/manager.cpp
+++ b/control/json/manager.cpp
@@ -106,6 +106,7 @@
 {
     json data;
     FlightRecorder::instance().dump(data);
+    dumpCache(data);
 
     std::ofstream file{Manager::dumpFile};
     if (!file)
@@ -119,6 +120,35 @@
     debugDumpEventSource.reset();
 }
 
+void Manager::dumpCache(json& data)
+{
+    auto& objects = data["objects"];
+    for (const auto& [path, interfaces] : _objects)
+    {
+        auto& interfaceJSON = objects[path];
+
+        for (const auto& [interface, properties] : interfaces)
+        {
+            auto& propertyJSON = interfaceJSON[interface];
+            for (const auto& [propName, propValue] : properties)
+            {
+                std::visit(
+                    [&obj = propertyJSON[propName]](auto&& val) { obj = val; },
+                    propValue);
+            }
+        }
+    }
+
+    auto& parameters = data["parameters"];
+    for (const auto& [name, value] : _parameters)
+    {
+        std::visit([&obj = parameters["name"]](auto&& val) { obj = val; },
+                   value);
+    }
+
+    data["services"] = _servTree;
+}
+
 void Manager::load()
 {
     if (_loadAllowed)
diff --git a/control/json/manager.hpp b/control/json/manager.hpp
index 92f837e..22b5630 100644
--- a/control/json/manager.hpp
+++ b/control/json/manager.hpp
@@ -587,6 +587,13 @@
      * @brief Callback from debugDumpEventSource to dump debug data
      */
     void dumpDebugData(sdeventplus::source::EventBase&);
+
+    /**
+     * @brief Dump the _objects, _servTree, and _parameters maps to JSON
+     *
+     * @param[out] data - The JSON that will be filled in
+     */
+    void dumpCache(json& data);
 };
 
 } // namespace phosphor::fan::control::json
