diff --git a/src/biosconfigcommands.cpp b/src/biosconfigcommands.cpp
index 8f3baa2..92b1f41 100644
--- a/src/biosconfigcommands.cpp
+++ b/src/biosconfigcommands.cpp
@@ -184,7 +184,7 @@
     return true;
 }
 
-bool getPendingList(ipmi::Context::ptr ctx, std::string& payloadData)
+bool getPendingList(ipmi::Context::ptr& ctx, std::string& payloadData)
 {
     std::variant<PendingAttributesType> pendingAttributesData;
     boost::system::error_code ec;
@@ -358,7 +358,7 @@
     return true;
 }
 
-bool update(ipmi::Context::ptr ctx)
+bool update(ipmi::Context::ptr& ctx)
 {
     std::string payloadFilePath =
         "/var/oob/Payload" +
@@ -630,9 +630,6 @@
  **/
 static Cc InitNVOOBdata()
 {
-    FILE* fptr;
-    uint16_t size;
-
     if (!(std::filesystem::exists(biosConfigFolder)))
     {
         std::filesystem::create_directory(biosConfigFolder);
@@ -651,9 +648,9 @@
     return ipmi::ccResponseError;
 }
 
-ipmi::RspType<> ipmiOEMSetBIOSCap(ipmi::Context::ptr ctx,
-                                  uint8_t BIOSCapabilties, uint8_t reserved1,
-                                  uint8_t reserved2, uint8_t reserved3)
+ipmi::RspType<> ipmiOEMSetBIOSCap(ipmi::Context::ptr&, uint8_t BIOSCapabilties,
+                                  uint8_t reserved1, uint8_t reserved2,
+                                  uint8_t reserved3)
 {
     if (getPostCompleted())
     {
@@ -673,7 +670,7 @@
 }
 
 ipmi::RspType<uint8_t, uint8_t, uint8_t, uint8_t>
-    ipmiOEMGetBIOSCap(ipmi::Context::ptr ctx)
+    ipmiOEMGetBIOSCap(ipmi::Context::ptr&)
 {
     if (gNVOOBdata.mIsBIOSCapInitDone)
     {
@@ -686,8 +683,8 @@
     }
 }
 
-ipmi::RspType<uint32_t> ipmiOEMSetPayload(ipmi::Context::ptr ctx,
-                                          uint8_t paramSel, uint8_t payloadType,
+ipmi::RspType<uint32_t> ipmiOEMSetPayload(ipmi::Context::ptr&, uint8_t paramSel,
+                                          uint8_t payloadType,
                                           std::vector<uint8_t> payload)
 {
     uint8_t biosCapOffsetBit = 2; // BIT:1 0-OOB BIOS config not supported
@@ -917,7 +914,7 @@
 }
 
 ipmi::RspType<message::Payload>
-    ipmiOEMGetPayload(ipmi::Context::ptr ctx, uint8_t paramSel,
+    ipmiOEMGetPayload(ipmi::Context::ptr& ctx, uint8_t paramSel,
                       uint8_t payloadType, ipmi::message::Payload& payload)
 {
     //      1-OOB BIOS config is supported
@@ -1021,7 +1018,7 @@
                 }
                 std::ifstream::pos_type fileSize = ifs.tellg();
                 // Total file data within given offset
-                if (fileSize < static_cast<uint64_t>(offset))
+                if (fileSize < static_cast<int64_t>(offset))
                 {
                     phosphor::logging::log<phosphor::logging::level::ERR>(
                         "ipmiOEMGetPayload: filesize < offset");
@@ -1049,7 +1046,7 @@
                 retValue.pack(readCount);
                 retValue.pack(chkSum);
 
-                for (int i = 0; i < readCount; i++)
+                for (uint32_t i = 0; i < readCount; i++)
                 {
                     retValue.pack(Buffer.at(i));
                 }
@@ -1075,7 +1072,7 @@
 }
 
 ipmi::RspType<> ipmiOEMSetBIOSHashInfo(
-    ipmi::Context::ptr ctx, std::array<uint8_t, maxSeedSize>& pwdSeed,
+    ipmi::Context::ptr&, std::array<uint8_t, maxSeedSize>& pwdSeed,
     uint8_t algoInfo, std::array<uint8_t, maxHashSize>& adminPwdHash)
 {
     // We should not support this command after System Booted - After Exit Boot
@@ -1121,7 +1118,7 @@
 
 ipmi::RspType<std::array<uint8_t, maxSeedSize>, uint8_t,
               std::array<uint8_t, maxHashSize>>
-    ipmiOEMGetBIOSHash(ipmi::Context::ptr ctx)
+    ipmiOEMGetBIOSHash(ipmi::Context::ptr&)
 {
     nlohmann::json data = nullptr;
 
