diff --git a/src/allowlist-filter.cpp b/src/allowlist-filter.cpp
index fa9eb26..aed090c 100644
--- a/src/allowlist-filter.cpp
+++ b/src/allowlist-filter.cpp
@@ -449,7 +449,7 @@
             Allowlisted = false;
             break;
         }
-        default: // for Allowlist and blacklist
+        default: // for Allowlist and Blocklist
             return ipmi::ccInsufficientPrivilege;
     }
 
diff --git a/src/bridgingcommands.cpp b/src/bridgingcommands.cpp
index f6fc02f..405db62 100644
--- a/src/bridgingcommands.cpp
+++ b/src/bridgingcommands.cpp
@@ -213,14 +213,14 @@
     constexpr uint8_t cmdMeOemReadMemSmbus = 0x47;
     constexpr uint8_t cmdMeOemWriteMemSmbus = 0x48;
     constexpr uint8_t cmdMeOemSlotIpmb = 0x51;
-    constexpr uint8_t cmdMeOemSlotI2cMasterWriteRead = 0x52;
+    constexpr uint8_t cmdMeOemSlotI2cControllerWriteRead = 0x52;
     constexpr uint8_t cmdMeOemSendRawPmbus = 0xD9;
     constexpr uint8_t cmdMeOemUnlockMeRegion = 0xE7;
     constexpr uint8_t cmdMeOemAggSendRawPmbus = 0xEC;
 
     switch (makeCmdKey(netFn, cmd))
     {
-        // Restrict ME Master write command
+        // Restrict ME Controller write command
         case makeCmdKey(ipmi::netFnApp, ipmi::app::cmdMasterWriteRead):
         // Restrict ME OEM commands
         case makeCmdKey(netFnMeOEM, cmdMeOemSendRawPeci):
@@ -230,7 +230,7 @@
         case makeCmdKey(netFnMeOEM, cmdMeOemReadMemSmbus):
         case makeCmdKey(netFnMeOEM, cmdMeOemWriteMemSmbus):
         case makeCmdKey(netFnMeOEMGeneral, cmdMeOemSlotIpmb):
-        case makeCmdKey(netFnMeOEMGeneral, cmdMeOemSlotI2cMasterWriteRead):
+        case makeCmdKey(netFnMeOEMGeneral, cmdMeOemSlotI2cControllerWriteRead):
         case makeCmdKey(netFnMeOEM, cmdMeOemSendRawPmbus):
         case makeCmdKey(netFnMeOEM, cmdMeOemUnlockMeRegion):
         case makeCmdKey(netFnMeOEM, cmdMeOemAggSendRawPmbus):
@@ -264,7 +264,7 @@
     auto sendMsgReqData = reinterpret_cast<const ipmbHeader*>(msgData.data());
 
     // allow bridging to ME only
-    if (sendMsgReqData->Header.Req.address != ipmbMeSlaveAddress)
+    if (sendMsgReqData->Header.Req.address != ipmbMeTargetAddress)
     {
         phosphor::logging::log<phosphor::logging::level::INFO>(
             "handleIpmbChannel, IPMB address invalid");
diff --git a/src/manufacturingcommands.cpp b/src/manufacturingcommands.cpp
index 6376eee..644a2e2 100644
--- a/src/manufacturingcommands.cpp
+++ b/src/manufacturingcommands.cpp
@@ -840,7 +840,7 @@
     // Restricted commands, must be executed only in Manufacturing mode
     switch (makeCmdKey(request->ctx->netFn, request->ctx->cmd))
     {
-        // i2c master write read command needs additional checking
+        // i2c controller write read command needs additional checking
         case makeCmdKey(ipmi::netFnApp, ipmi::app::cmdMasterWriteRead):
             if (request->payload.size() > 4)
             {
@@ -1163,7 +1163,7 @@
     return ipmi::responseSuccess(validData, ethData);
 }
 
-/** @brief implements slot master write read IPMI command which can be used
+/** @brief implements slot controller write read IPMI command which can be used
  * for low-level I2C/SMBus write, read or write-read access for PCIE slots
  * @param reserved - skip 3 bit
  * @param muxType - mux type
@@ -1171,16 +1171,16 @@
  * @param bbSlotNum - baseboard slot number
  * @param riserSlotNum - riser slot number
  * @param reserved2 - skip 2 bit
- * @param slaveAddr - slave address
+ * @param targetAddr - target address
  * @param readCount - number of bytes to be read
  * @param writeData - data to be written
  *
  * @returns IPMI completion code plus response data
  */
 
-ipmi::RspType<std::vector<uint8_t>> appSlotI2CMasterWriteRead(
+ipmi::RspType<std::vector<uint8_t>> appSlotI2CControllerWriteRead(
     uint3_t reserved, uint3_t muxType, uint2_t addressType, uint3_t bbSlotNum,
-    uint3_t riserSlotNum, uint2_t reserved2, uint8_t slaveAddr,
+    uint3_t riserSlotNum, uint2_t reserved2, uint8_t targetAddr,
     uint8_t readCount, std::vector<uint8_t> writeData)
 {
     if (reserved || reserved2)
@@ -1226,7 +1226,7 @@
         }
         else
         {
-            lg2::error("Master write read command: Cannot get BusID");
+            lg2::error("Controller write read command: Cannot get BusID");
             return ipmi::responseInvalidFieldRequest();
         }
     }
@@ -1238,7 +1238,7 @@
     }
     else
     {
-        lg2::error("Master write read command: invalid request");
+        lg2::error("Controller write read command: invalid request");
         return ipmi::responseInvalidFieldRequest();
     }
 
@@ -1254,19 +1254,20 @@
 
     if (readCount > slotI2CMaxReadSize)
     {
-        lg2::error("Master write read command: Read count exceeds limit");
+        lg2::error("Controller write read command: Read count exceeds limit");
         return ipmi::responseParmOutOfRange();
     }
 
     if (!readCount && !writeCount)
     {
-        lg2::error("Master write read command: Read & write count are 0");
+        lg2::error("Controller write read command: Read & write count are 0");
         return ipmi::responseInvalidFieldRequest();
     }
 
     std::vector<uint8_t> readBuf(readCount);
 
-    ipmi::Cc retI2C = ipmi::i2cWriteRead(i2cBus, slaveAddr, writeData, readBuf);
+    ipmi::Cc retI2C =
+        ipmi::i2cWriteRead(i2cBus, targetAddr, writeData, readBuf);
     if (retI2C != ipmi::ccSuccess)
     {
         return ipmi::response(retI2C);
@@ -1277,15 +1278,16 @@
 
 ipmi::RspType<> clearCMOS()
 {
-    // There is an i2c device on bus 4, the slave address is 0x38. Based on
+    // There is an i2c device on bus 4, the target address is 0x38. Based on
     // the spec, writing 0x1 to address 0x61 on this device, will trigger
     // the clear CMOS action.
-    constexpr uint8_t slaveAddr = 0x38;
+    constexpr uint8_t targetAddr = 0x38;
     std::string i2cBus = "/dev/i2c-4";
     std::vector<uint8_t> writeData = {0x61, 0x1};
     std::vector<uint8_t> readBuf(0);
 
-    ipmi::Cc retI2C = ipmi::i2cWriteRead(i2cBus, slaveAddr, writeData, readBuf);
+    ipmi::Cc retI2C =
+        ipmi::i2cWriteRead(i2cBus, targetAddr, writeData, readBuf);
     return ipmi::response(retI2C);
 }
 
@@ -1522,9 +1524,9 @@
                           ipmi::Privilege::Admin, ipmi::mtmBMCFeatureControl);
 
     ipmi::registerHandler(ipmi::prioOemBase, ipmi::intel::netFnApp,
-                          ipmi::intel::general::cmdSlotI2CMasterWriteRead,
+                          ipmi::intel::general::cmdSlotI2CControllerWriteRead,
                           ipmi::Privilege::Admin,
-                          ipmi::appSlotI2CMasterWriteRead);
+                          ipmi::appSlotI2CControllerWriteRead);
 
     ipmi::registerHandler(ipmi::prioOemBase, ipmi::intel::netFnPlatform,
                           ipmi::intel::platform::cmdClearCMOS,
diff --git a/src/multinodecommands.cpp b/src/multinodecommands.cpp
index 20a1841..d6712b3 100644
--- a/src/multinodecommands.cpp
+++ b/src/multinodecommands.cpp
@@ -62,9 +62,9 @@
         if (valueStr == "single")
             value = static_cast<uint8_t>(NodeRole::single);
         else if (valueStr == "master")
-            value = static_cast<uint8_t>(NodeRole::master);
+            value = static_cast<uint8_t>(NodeRole::controller);
         else if (valueStr == "slave")
-            value = static_cast<uint8_t>(NodeRole::slave);
+            value = static_cast<uint8_t>(NodeRole::target);
         else if (valueStr == "arbitrating")
             value = static_cast<uint8_t>(NodeRole::arbitrating);
         else
diff --git a/src/oemcommands.cpp b/src/oemcommands.cpp
index cb506c9..11dab6f 100644
--- a/src/oemcommands.cpp
+++ b/src/oemcommands.cpp
@@ -171,7 +171,7 @@
 {
 static uint8_t bus = 4;
 static std::string i2cBus = "/dev/i2c-" + std::to_string(bus);
-static uint8_t slaveAddr = 56;
+static uint8_t targetAddr = 56;
 static constexpr auto systemRoot = "/xyz/openbmc_project/inventory/system";
 static constexpr auto sessionIntf = "xyz.openbmc_project.Configuration.PFR";
 const std::string match = "Baseboard/PFR";
@@ -258,7 +258,7 @@
 
         bus = static_cast<int>(*i2cBusNum);
         i2cBus = "/dev/i2c-" + std::to_string(bus);
-        slaveAddr = static_cast<int>(*address);
+        targetAddr = static_cast<int>(*address);
 
         i2cConfigLoaded = true;
     }
@@ -270,7 +270,8 @@
     // trigger the write FIFO operation.
     std::vector<uint8_t> writeData = {cmdReg, val};
     std::vector<uint8_t> readBuf(0);
-    ipmi::Cc retI2C = ipmi::i2cWriteRead(i2cBus, slaveAddr, writeData, readBuf);
+    ipmi::Cc retI2C =
+        ipmi::i2cWriteRead(i2cBus, targetAddr, writeData, readBuf);
 }
 
 } // namespace mailbox
@@ -809,7 +810,7 @@
 ipmi::RspType<uint8_t, std::vector<uint8_t>>
     ipmiOEMSlotIpmb(ipmi::Context::ptr ctx, uint6_t reserved1,
                     uint2_t slotNumber, uint3_t baseBoardSlotNum,
-                    uint3_t riserSlotNum, uint2_t reserved2, uint8_t slaveAddr,
+                    uint3_t riserSlotNum, uint2_t reserved2, uint8_t targetAddr,
                     uint8_t netFn, uint8_t cmd,
                     std::optional<std::vector<uint8_t>> writeData)
 {
@@ -825,7 +826,7 @@
         ctx->yield, ec, "xyz.openbmc_project.Ipmi.Channel.Ipmb",
         "/xyz/openbmc_project/Ipmi/Channel/Ipmb", "org.openbmc.Ipmb",
         "SlotIpmbRequest", static_cast<uint8_t>(slotNumber),
-        static_cast<uint8_t>(baseBoardSlotNum), slaveAddr, netFn, cmd,
+        static_cast<uint8_t>(baseBoardSlotNum), targetAddr, netFn, cmd,
         *writeData);
     if (ec)
     {
@@ -3720,11 +3721,11 @@
         return ipmi::responseResponseError();
     }
 
-    for (const auto& slaveAddr : addrTable)
+    for (const auto& targetAddr : addrTable)
     {
         std::vector<uint8_t> writeData = {psuRevision};
         std::vector<uint8_t> readBuf(verLen);
-        uint8_t addr = static_cast<uint8_t>(slaveAddr) + addrOffset;
+        uint8_t addr = static_cast<uint8_t>(targetAddr) + addrOffset;
         std::string i2cBus = "/dev/i2c-" + std::to_string(bus);
 
         auto retI2C = ipmi::i2cWriteRead(i2cBus, addr, writeData, readBuf);
@@ -3879,7 +3880,7 @@
     {
 
         phosphor::logging::log<phosphor::logging::level::ERR>(
-            "Calling PFR Load Configuration Function to Get I2C Bus and Slave "
+            "Calling PFR Load Configuration Function to Get I2C Bus and Target "
             "Address ");
 
         ipmi::mailbox::loadPfrConfig(ctx, ipmi::mailbox::i2cConfigLoaded);
@@ -3923,7 +3924,7 @@
                 {
 
                     ipmi::Cc ret = ipmi::i2cWriteRead(ipmi::mailbox::i2cBus,
-                                                      ipmi::mailbox::slaveAddr,
+                                                      ipmi::mailbox::targetAddr,
                                                       writeData, readBuf);
                     if (ret != ipmi::ccSuccess)
                     {
@@ -3952,7 +3953,7 @@
             std::vector<uint8_t> readBuf(numOfBytes);
 
             ipmi::Cc ret = ipmi::i2cWriteRead(ipmi::mailbox::i2cBus,
-                                              ipmi::mailbox::slaveAddr,
+                                              ipmi::mailbox::targetAddr,
                                               writeData, readBuf);
             if (ret != ipmi::ccSuccess)
             {
diff --git a/src/storagecommands.cpp b/src/storagecommands.cpp
index 96e2d2b..ec8df36 100644
--- a/src/storagecommands.cpp
+++ b/src/storagecommands.cpp
@@ -1331,7 +1331,7 @@
         nm.oemID2 = 0x0;
         nm.subType = 0x0D;
         nm.version = 0x1;
-        nm.slaveAddress = 0x2C;
+        nm.targetAddress = 0x2C;
         nm.channelNumber = 0x60;
         nm.healthEventSensor = 0x19;
         nm.exceptionEventSensor = 0x18;
