diff --git a/test/meson.build b/test/meson.build
index 7a5e468..81ca2e2 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -42,14 +42,24 @@
 
 analyzer_src = files(
   '../analyzer/service_data.cpp',
+  '../analyzer/resolution.cpp',
+)
+
+# We cannot link to `util_lib` because that is built without `-DTEST_TRACE` and
+# any of the util functions that use `trace.hpp` will throw a linker error
+# because we don't have access to phosphor-logging in test ... yet.
+util_src = files(
+    '../util/ffdc_file.cpp',
+    '../util/pdbg.cpp',
+    '../util/temporary_file.cpp',
 )
 
 foreach t : tests
     test(t,
          executable(t.underscorify(),
-                    [ files(t + '.cpp'), pdbg_test_dtb, analyzer_src ],
-                    link_with : [ util_lib ],
-                    dependencies : [ libhei_dep, gtest_dep ],
+                    [ files(t + '.cpp'), pdbg_test_dtb,
+                      analyzer_src, util_src ],
+                    dependencies : [ libhei_dep, libpdbg_dep, gtest_dep ],
                     cpp_args : test_arg,
                     include_directories : incdir),
          env : [ 'PDBG_DTB=' + pdbg_test_dtb.full_path() ])
diff --git a/test/resolution_test.cpp b/test/resolution_test.cpp
index 4063bcb..8e43138 100644
--- a/test/resolution_test.cpp
+++ b/test/resolution_test.cpp
@@ -2,6 +2,7 @@
 
 #include <analyzer/analyzer_main.hpp>
 #include <analyzer/resolution.hpp>
+#include <util/pdbg.hpp>
 #include <util/trace.hpp>
 
 #include <regex>
@@ -18,255 +19,12 @@
 constexpr auto ocmb_str   = "pib/perv12/mc0/mi0/mcc0/omi0/ocmb0";
 constexpr auto core_str   = "pib/perv39/eq7/fc1/core1";
 
-// Local implementation of this function.
-namespace analyzer
-{
-
-//------------------------------------------------------------------------------
-
-// Helper function to get the root cause chip target path from the service data.
-std::string __getRootCauseChipPath(const ServiceData& i_sd)
-{
-    return std::string{(const char*)i_sd.getRootCause().getChip().getChip()};
-}
-
-//------------------------------------------------------------------------------
-
-// Helper function to get a unit target path from the given unit path, which is
-// a devtree path relative the the containing chip. An empty string indicates
-// the chip target path should be returned.
-std::string __getUnitPath(const std::string& i_chipPath,
-                          const std::string& i_unitPath)
-{
-    auto path = i_chipPath; // default, if i_unitPath is empty
-
-    if (!i_unitPath.empty())
-    {
-        path += "/" + i_unitPath;
-    }
-
-    return path;
-}
-
-//------------------------------------------------------------------------------
-
-// Helper function to get the connected target Path on the other side of the
-// given bus.
-std::tuple<std::string, std::string>
-    __getConnectedPath(const std::string& i_rxPath,
-                       const callout::BusType& i_busType)
-{
-    std::string txUnitPath{};
-    std::string txChipPath{};
-
-    // Need to get the target type from the RX path.
-    const std::regex re{"(/proc0)(.*)/([a-z]+)([0-9]+)"};
-    std::smatch match;
-    std::regex_match(i_rxPath, match, re);
-    assert(5 == match.size());
-    std::string rxType = match[3].str();
-
-    if (callout::BusType::SMP_BUS == i_busType && "smpgroup" == rxType)
-    {
-        // Use the RX unit path on a different processor.
-        txUnitPath = "/proc1" + match[2].str() + "/" + rxType + match[4].str();
-        txChipPath = "/proc1";
-    }
-    else if (callout::BusType::OMI_BUS == i_busType && "omi" == rxType)
-    {
-        // Append the OCMB to the RX path.
-        txUnitPath = i_rxPath + "/ocmb0";
-        txChipPath = txUnitPath;
-    }
-    else if (callout::BusType::OMI_BUS == i_busType && "ocmb" == rxType)
-    {
-        // Strip the OCMB off of the RX path.
-        txUnitPath = match[1].str() + match[2].str();
-        txChipPath = "/proc0";
-    }
-    else
-    {
-        // This would be a code bug.
-        throw std::logic_error("Unsupported config: i_rxTarget=" + i_rxPath +
-                               " i_busType=" + i_busType.getString());
-    }
-
-    assert(!txUnitPath.empty()); // just in case we missed something above
-
-    return std::make_tuple(txUnitPath, txChipPath);
-}
-
-//------------------------------------------------------------------------------
-
-void __calloutTarget(ServiceData& io_sd, const std::string& i_locCode,
-                     const callout::Priority& i_priority, bool i_guard,
-                     const std::string& i_guardPath)
-{
-    nlohmann::json callout;
-    callout["LocationCode"] = i_locCode;
-    callout["Priority"]     = i_priority.getUserDataString();
-    callout["Deconfigured"] = false;
-    callout["Guarded"]      = false; // default
-
-    // Check if guard info should be added.
-    if (i_guard)
-    {
-        auto guardType = io_sd.queryGuardPolicy();
-
-        if (!(callout::GuardType::NONE == guardType))
-        {
-            callout["Guarded"]    = true;
-            callout["Guard Path"] = i_guardPath;
-            callout["Guard Type"] = guardType.getString();
-        }
-    }
-
-    io_sd.addCallout(callout);
-}
-
-//------------------------------------------------------------------------------
-
-void __calloutBackplane(ServiceData& io_sd, const callout::Priority& i_priority)
-{
-    // TODO: There isn't a device tree object for this. So will need to hardcode
-    //       the location code for now. In the future, we will need a mechanism
-    //       to make this data driven.
-
-    nlohmann::json callout;
-    callout["LocationCode"] = "P0";
-    callout["Priority"]     = i_priority.getUserDataString();
-    callout["Deconfigured"] = false;
-    callout["Guarded"]      = false;
-    io_sd.addCallout(callout);
-}
-
-//------------------------------------------------------------------------------
-
-void HardwareCalloutResolution::resolve(ServiceData& io_sd) const
-{
-    // Get the location code and entity path for this target.
-    auto locCode    = __getRootCauseChipPath(io_sd);
-    auto entityPath = __getUnitPath(locCode, iv_unitPath);
-
-    // Add the actual callout to the service data.
-    __calloutTarget(io_sd, locCode, iv_priority, iv_guard, entityPath);
-
-    // Add the callout FFDC to the service data.
-    nlohmann::json ffdc;
-    ffdc["Callout Type"] = "Hardware Callout";
-    ffdc["Target"]       = entityPath;
-    ffdc["Priority"]     = iv_priority.getRegistryString();
-    ffdc["Guard"]        = iv_guard;
-    io_sd.addCalloutFFDC(ffdc);
-}
-
-//------------------------------------------------------------------------------
-
-void ConnectedCalloutResolution::resolve(ServiceData& io_sd) const
-{
-    // Get the chip target path from the root cause signature.
-    auto chipPath = __getRootCauseChipPath(io_sd);
-
-    // Get the endpoint target path for the receiving side of the bus.
-    auto rxPath = __getUnitPath(chipPath, iv_unitPath);
-
-    // Get the endpoint target path for the transfer side of the bus.
-    auto txPath = __getConnectedPath(rxPath, iv_busType);
-
-    // Callout the TX endpoint.
-    __calloutTarget(io_sd, std::get<1>(txPath), iv_priority, iv_guard,
-                    std::get<0>(txPath));
-
-    // Add the callout FFDC to the service data.
-    nlohmann::json ffdc;
-    ffdc["Callout Type"] = "Connected Callout";
-    ffdc["Bus Type"]     = iv_busType.getString();
-    ffdc["Target"]       = std::get<0>(txPath);
-    ffdc["Priority"]     = iv_priority.getRegistryString();
-    ffdc["Guard"]        = iv_guard;
-    io_sd.addCalloutFFDC(ffdc);
-}
-
-//------------------------------------------------------------------------------
-
-void BusCalloutResolution::resolve(ServiceData& io_sd) const
-{
-    // Get the chip target path from the root cause signature.
-    auto chipPath = __getRootCauseChipPath(io_sd);
-
-    // Get the endpoint target path for the receiving side of the bus.
-    auto rxPath = __getUnitPath(chipPath, iv_unitPath);
-
-    // Get the endpoint target path for the transfer side of the bus.
-    auto txPath = __getConnectedPath(rxPath, iv_busType);
-
-    // Callout the RX endpoint.
-    __calloutTarget(io_sd, chipPath, iv_priority, iv_guard, rxPath);
-
-    // Callout the TX endpoint.
-    __calloutTarget(io_sd, std::get<1>(txPath), iv_priority, iv_guard,
-                    std::get<0>(txPath));
-
-    // Callout everything else in between.
-    // TODO: For P10 (OMI bus and XBUS), the callout is simply the backplane.
-    __calloutBackplane(io_sd, iv_priority);
-
-    // Add the callout FFDC to the service data.
-    nlohmann::json ffdc;
-    ffdc["Callout Type"] = "Bus Callout";
-    ffdc["Bus Type"]     = iv_busType.getString();
-    ffdc["RX Target"]    = rxPath;
-    ffdc["TX Target"]    = std::get<0>(txPath);
-    ffdc["Priority"]     = iv_priority.getRegistryString();
-    ffdc["Guard"]        = iv_guard;
-    io_sd.addCalloutFFDC(ffdc);
-}
-
-//------------------------------------------------------------------------------
-
-void ProcedureCalloutResolution::resolve(ServiceData& io_sd) const
-{
-    // Add the actual callout to the service data.
-    nlohmann::json callout;
-    callout["Procedure"] = iv_procedure.getString();
-    callout["Priority"]  = iv_priority.getUserDataString();
-    io_sd.addCallout(callout);
-
-    // Add the callout FFDC to the service data.
-    nlohmann::json ffdc;
-    ffdc["Callout Type"] = "Procedure Callout";
-    ffdc["Procedure"]    = iv_procedure.getString();
-    ffdc["Priority"]     = iv_priority.getRegistryString();
-    io_sd.addCalloutFFDC(ffdc);
-}
-
-//------------------------------------------------------------------------------
-
-void ClockCalloutResolution::resolve(ServiceData& io_sd) const
-{
-    // Callout the clock target.
-    // TODO: For P10, the callout is simply the backplane. Also, there are no
-    //       clock targets in the device tree. So at the moment there is no
-    //       guard support for clock targets.
-    __calloutBackplane(io_sd, iv_priority);
-
-    // Add the callout FFDC to the service data.
-    // TODO: Add the target and guard type if guard is ever supported.
-    nlohmann::json ffdc;
-    ffdc["Callout Type"] = "Clock Callout";
-    ffdc["Clock Type"]   = iv_clockType.getString();
-    ffdc["Priority"]     = iv_priority.getRegistryString();
-    io_sd.addCalloutFFDC(ffdc);
-}
-
-//------------------------------------------------------------------------------
-
-} // namespace analyzer
-
 using namespace analyzer;
 
 TEST(Resolution, TestSet1)
 {
+    pdbg_targets_init(nullptr);
+
     // Create a few resolutions
     auto c1 = std::make_shared<HardwareCalloutResolution>(
         proc_str, callout::Priority::HIGH, false);
@@ -296,7 +54,7 @@
     l2->push(l1);
 
     // Get some ServiceData objects
-    libhei::Chip chip{chip_str, 0xdeadbeef};
+    libhei::Chip chip{util::pdbg::getTrgt(chip_str), 0xdeadbeef};
     libhei::Signature sig{chip, 0xabcd, 0, 0, libhei::ATTN_TYPE_CHECKSTOP};
     ServiceData sd1{sig, AnalysisType::SYSTEM_CHECKSTOP};
     ServiceData sd2{sig, AnalysisType::TERMINATE_IMMEDIATE};
@@ -319,6 +77,14 @@
     },
     {
         "Deconfigured": false,
+        "EntityPath": [],
+        "GuardType": "GARD_Unrecoverable",
+        "Guarded": true,
+        "LocationCode": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0",
+        "Priority": "A"
+    },
+    {
+        "Deconfigured": false,
         "Guarded": false,
         "LocationCode": "P0",
         "Priority": "L"
@@ -334,14 +100,28 @@
     },
     {
         "Deconfigured": false,
-        "Guard Path": "/proc0/pib/perv39/eq7/fc1/core1",
-        "Guard Type": "GARD_Predictive",
+        "EntityPath": [],
+        "GuardType": "GARD_Predictive",
         "Guarded": true,
+        "LocationCode": "/proc0/pib/perv39/eq7/fc1/core1",
+        "Priority": "M"
+    },
+    {
+        "Deconfigured": false,
+        "Guarded": false,
         "LocationCode": "/proc0",
         "Priority": "H"
     },
     {
         "Deconfigured": false,
+        "EntityPath": [],
+        "GuardType": "GARD_Predictive",
+        "Guarded": true,
+        "LocationCode": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0",
+        "Priority": "A"
+    },
+    {
+        "Deconfigured": false,
         "Guarded": false,
         "LocationCode": "P0",
         "Priority": "L"
@@ -352,10 +132,12 @@
 
 TEST(Resolution, HardwareCallout)
 {
+    pdbg_targets_init(nullptr);
+
     auto c1 = std::make_shared<HardwareCalloutResolution>(
         omi_str, callout::Priority::MED_A, true);
 
-    libhei::Chip chip{chip_str, 0xdeadbeef};
+    libhei::Chip chip{util::pdbg::getTrgt(chip_str), 0xdeadbeef};
     libhei::Signature sig{chip, 0xabcd, 0, 0, libhei::ATTN_TYPE_CHECKSTOP};
     ServiceData sd{sig, AnalysisType::SYSTEM_CHECKSTOP};
 
@@ -369,10 +151,10 @@
     s = R"([
     {
         "Deconfigured": false,
-        "Guard Path": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0",
-        "Guard Type": "GARD_Unrecoverable",
+        "EntityPath": [],
+        "GuardType": "GARD_Unrecoverable",
         "Guarded": true,
-        "LocationCode": "/proc0",
+        "LocationCode": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0",
         "Priority": "A"
     }
 ])";
@@ -393,6 +175,8 @@
 
 TEST(Resolution, ConnectedCallout)
 {
+    pdbg_targets_init(nullptr);
+
     auto c1 = std::make_shared<ConnectedCalloutResolution>(
         callout::BusType::SMP_BUS, iolink_str, callout::Priority::MED_A, true);
 
@@ -402,7 +186,7 @@
     auto c3 = std::make_shared<ConnectedCalloutResolution>(
         callout::BusType::OMI_BUS, omi_str, callout::Priority::MED_C, true);
 
-    libhei::Chip chip{chip_str, 0xdeadbeef};
+    libhei::Chip chip{util::pdbg::getTrgt(chip_str), 0xdeadbeef};
     libhei::Signature sig{chip, 0xabcd, 0, 0, libhei::ATTN_TYPE_CHECKSTOP};
     ServiceData sd{sig, AnalysisType::SYSTEM_CHECKSTOP};
 
@@ -418,24 +202,24 @@
     s = R"([
     {
         "Deconfigured": false,
-        "Guard Path": "/proc1/pib/perv24/pauc0/iohs0/smpgroup0",
-        "Guard Type": "GARD_Unrecoverable",
+        "EntityPath": [],
+        "GuardType": "GARD_Unrecoverable",
         "Guarded": true,
-        "LocationCode": "/proc1",
+        "LocationCode": "/proc0/pib/perv24/pauc0/iohs0/smpgroup0",
         "Priority": "A"
     },
     {
         "Deconfigured": false,
-        "Guard Path": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0",
-        "Guard Type": "GARD_Unrecoverable",
+        "EntityPath": [],
+        "GuardType": "GARD_Unrecoverable",
         "Guarded": true,
-        "LocationCode": "/proc0",
+        "LocationCode": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0",
         "Priority": "B"
     },
     {
         "Deconfigured": false,
-        "Guard Path": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0/ocmb0",
-        "Guard Type": "GARD_Unrecoverable",
+        "EntityPath": [],
+        "GuardType": "GARD_Unrecoverable",
         "Guarded": true,
         "LocationCode": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0/ocmb0",
         "Priority": "C"
@@ -451,7 +235,7 @@
         "Callout Type": "Connected Callout",
         "Guard": true,
         "Priority": "medium_group_A",
-        "Target": "/proc1/pib/perv24/pauc0/iohs0/smpgroup0"
+        "Target": "/proc0/pib/perv24/pauc0/iohs0/smpgroup0"
     },
     {
         "Bus Type": "OMI_BUS",
@@ -473,6 +257,8 @@
 
 TEST(Resolution, BusCallout)
 {
+    pdbg_targets_init(nullptr);
+
     auto c1 = std::make_shared<HardwareCalloutResolution>(
         omi_str, callout::Priority::MED_A, true);
 
@@ -482,7 +268,7 @@
     auto c3 = std::make_shared<BusCalloutResolution>(
         callout::BusType::OMI_BUS, omi_str, callout::Priority::LOW, false);
 
-    libhei::Chip chip{chip_str, 0xdeadbeef};
+    libhei::Chip chip{util::pdbg::getTrgt(chip_str), 0xdeadbeef};
     libhei::Signature sig{chip, 0xabcd, 0, 0, libhei::ATTN_TYPE_CHECKSTOP};
     ServiceData sd{sig, AnalysisType::SYSTEM_CHECKSTOP};
 
@@ -498,16 +284,16 @@
     s = R"([
     {
         "Deconfigured": false,
-        "Guard Path": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0",
-        "Guard Type": "GARD_Unrecoverable",
+        "EntityPath": [],
+        "GuardType": "GARD_Unrecoverable",
         "Guarded": true,
-        "LocationCode": "/proc0",
+        "LocationCode": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0",
         "Priority": "A"
     },
     {
         "Deconfigured": false,
-        "Guard Path": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0/ocmb0",
-        "Guard Type": "GARD_Unrecoverable",
+        "EntityPath": [],
+        "GuardType": "GARD_Unrecoverable",
         "Guarded": true,
         "LocationCode": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0/ocmb0",
         "Priority": "A"
@@ -551,10 +337,12 @@
 
 TEST(Resolution, ClockCallout)
 {
+    pdbg_targets_init(nullptr);
+
     auto c1 = std::make_shared<ClockCalloutResolution>(
         callout::ClockType::OSC_REF_CLOCK_1, callout::Priority::HIGH, false);
 
-    libhei::Chip chip{chip_str, 0xdeadbeef};
+    libhei::Chip chip{util::pdbg::getTrgt(chip_str), 0xdeadbeef};
     libhei::Signature sig{chip, 0xabcd, 0, 0, libhei::ATTN_TYPE_CHECKSTOP};
     ServiceData sd{sig, AnalysisType::SYSTEM_CHECKSTOP};
 
@@ -589,10 +377,12 @@
 
 TEST(Resolution, ProcedureCallout)
 {
+    pdbg_targets_init(nullptr);
+
     auto c1 = std::make_shared<ProcedureCalloutResolution>(
         callout::Procedure::NEXTLVL, callout::Priority::LOW);
 
-    libhei::Chip chip{chip_str, 0xdeadbeef};
+    libhei::Chip chip{util::pdbg::getTrgt(chip_str), 0xdeadbeef};
     libhei::Signature sig{chip, 0xabcd, 0, 0, libhei::ATTN_TYPE_CHECKSTOP};
     ServiceData sd{sig, AnalysisType::SYSTEM_CHECKSTOP};
 
