diff --git a/redfish-core/lib/ethernet.hpp b/redfish-core/lib/ethernet.hpp
index 8bd4cdc..8ef8b5a 100644
--- a/redfish-core/lib/ethernet.hpp
+++ b/redfish-core/lib/ethernet.hpp
@@ -1775,54 +1775,43 @@
                 return;
             }
 
-            const std::string* addr = nullptr;
-            uint8_t prefix = 0;
-
             // Find the address and prefixLength values. Any values that are
             // not explicitly provided are assumed to be unmodified from the
             // current state of the interface. Merge existing state into the
             // current request.
-            if (address)
+            if (!address)
             {
-                addr = &(*address);
-            }
-            else if (nicIpEntry != ipv6Data.end())
-            {
-                addr = &(nicIpEntry->address);
-            }
-            else
-            {
-                messages::propertyMissing(asyncResp->res,
-                                          pathString + "/Address");
-                return;
+                if (nicIpEntry == ipv6Data.end())
+                {
+                    messages::propertyMissing(asyncResp->res,
+                                              pathString + "/Address");
+                    return;
+                }
+                address = nicIpEntry->address;
             }
 
-            if (prefixLength)
+            if (!prefixLength)
             {
-                prefix = *prefixLength;
-            }
-            else if (nicIpEntry != ipv6Data.end())
-            {
-                prefix = nicIpEntry->prefixLength;
-            }
-            else
-            {
-                messages::propertyMissing(asyncResp->res,
-                                          pathString + "/PrefixLength");
-                return;
+                if (nicIpEntry == ipv6Data.end())
+                {
+                    messages::propertyMissing(asyncResp->res,
+                                              pathString + "/PrefixLength");
+                    return;
+                }
+                prefixLength = nicIpEntry->prefixLength;
             }
 
             if (nicIpEntry != ipv6Data.end())
             {
                 deleteAndCreateIPAddress(IpVersion::IpV6, ifaceId,
-                                         nicIpEntry->id, prefix, *addr, "",
-                                         asyncResp);
+                                         nicIpEntry->id, *prefixLength,
+                                         *address, "", asyncResp);
                 nicIpEntry = getNextStaticIpEntry(++nicIpEntry,
                                                   ipv6Data.cend());
             }
             else
             {
-                createIPv6(ifaceId, *prefixLength, *addr, asyncResp);
+                createIPv6(ifaceId, *prefixLength, *address, asyncResp);
             }
             entryIdx++;
         }
diff --git a/redfish-core/lib/fan.hpp b/redfish-core/lib/fan.hpp
index 8915229..39b9e2a 100644
--- a/redfish-core/lib/fan.hpp
+++ b/redfish-core/lib/fan.hpp
@@ -50,11 +50,11 @@
 
 inline void getFanPaths(
     const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-    const std::optional<std::string>& validChassisPath,
+    const std::string& validChassisPath,
     const std::function<void(const dbus::utility::MapperGetSubTreePathsResponse&
                                  fanPaths)>& callback)
 {
-    sdbusplus::message::object_path endpointPath{*validChassisPath};
+    sdbusplus::message::object_path endpointPath{validChassisPath};
     endpointPath /= "cooled_by";
 
     dbus::utility::getAssociatedSubTreePaths(
@@ -101,7 +101,7 @@
     asyncResp->res.jsonValue["Members"] = nlohmann::json::array();
     asyncResp->res.jsonValue["Members@odata.count"] = 0;
 
-    getFanPaths(asyncResp, validChassisPath,
+    getFanPaths(asyncResp, *validChassisPath,
                 std::bind_front(updateFanList, asyncResp, chassisId));
 }
 
