diff --git a/control/json/manager.cpp b/control/json/manager.cpp
index e3de8dc..7202471 100644
--- a/control/json/manager.cpp
+++ b/control/json/manager.cpp
@@ -526,9 +526,9 @@
 }
 
 void Manager::handleSignal(sdbusplus::message::message& msg,
-                           const std::vector<SignalPkg>* pkgs)
+                           const std::vector<SignalPkg>& pkgs)
 {
-    for (auto& pkg : *pkgs)
+    for (auto& pkg : pkgs)
     {
         // Handle the signal callback and only run the actions if the handler
         // updated the cache for the given SignalObject
diff --git a/control/json/manager.hpp b/control/json/manager.hpp
index df6edb3..5e5b33c 100644
--- a/control/json/manager.hpp
+++ b/control/json/manager.hpp
@@ -101,12 +101,11 @@
 /**
  * Data associated to a subscribed signal
  * Tuple constructed of:
- *     std::unique_ptr<std::vector<SignalPkg>> =
- *         Pointer to the signal's packages
+ *     std::vector<SignalPkg> = List of the signal's packages
  *     std::unique_ptr<sdbusplus::server::match::match> =
  *         Pointer to match holding the subscription to a signal
  */
-using SignalData = std::tuple<std::unique_ptr<std::vector<SignalPkg>>,
+using SignalData = std::tuple<std::vector<SignalPkg>,
                               std::unique_ptr<sdbusplus::server::match::match>>;
 
 /**
@@ -402,7 +401,7 @@
      * @param[in] pkgs - Signal packages associated to the signal being handled
      */
     void handleSignal(sdbusplus::message::message& msg,
-                      const std::vector<SignalPkg>* pkgs);
+                      const std::vector<SignalPkg>& pkgs);
 
     /**
      * @brief Get the sdbusplus bus object
diff --git a/control/json/triggers/signal.cpp b/control/json/triggers/signal.cpp
index 28b2781..8b66c5f 100644
--- a/control/json/triggers/signal.cpp
+++ b/control/json/triggers/signal.cpp
@@ -50,8 +50,8 @@
     {
         // Signal subscription doesnt exist, add signal package and subscribe
         std::vector<SignalPkg> pkgs = {signalPkg};
-        std::unique_ptr<std::vector<SignalPkg>> dataPkgs =
-            std::make_unique<std::vector<SignalPkg>>(std::move(pkgs));
+        std::vector<SignalPkg> dataPkgs =
+            std::vector<SignalPkg>(std::move(pkgs));
         std::unique_ptr<sdbusplus::server::match::match> ptrMatch = nullptr;
         // TODO(ibm-openbmc/#3195) - Filter signal subscriptions to objects
         // owned by fan control?
@@ -61,7 +61,7 @@
             ptrMatch = std::make_unique<sdbusplus::server::match::match>(
                 mgr->getBus(), match.c_str(),
                 std::bind(std::mem_fn(&Manager::handleSignal), &(*mgr),
-                          std::placeholders::_1, dataPkgs.get()));
+                          std::placeholders::_1, dataPkgs));
         }
         signalData.emplace_back(std::move(dataPkgs), std::move(ptrMatch));
     }
@@ -69,9 +69,8 @@
     {
         // Signal subscription already exists
         // Only a single signal data entry tied to each match is supported
-        auto& pkgs = std::get<std::unique_ptr<std::vector<SignalPkg>>>(
-            signalData.front());
-        for (auto& pkg : *pkgs)
+        auto& pkgs = std::get<std::vector<SignalPkg>>(signalData.front());
+        for (auto& pkg : pkgs)
         {
             if (isSameSig(pkg))
             {
@@ -85,7 +84,7 @@
             else
             {
                 // Expected signal differs, add signal package
-                (*pkgs).emplace_back(std::move(signalPkg));
+                pkgs.emplace_back(std::move(signalPkg));
             }
         }
     }
