diff --git a/CORE/MAC/src/pe/lim/limApi.c b/CORE/MAC/src/pe/lim/limApi.c
index dfb1e9d..a272b1a 100644
--- a/CORE/MAC/src/pe/lim/limApi.c
+++ b/CORE/MAC/src/pe/lim/limApi.c
@@ -692,7 +692,7 @@
       * other than OFFLINE. Return response to host and
       * log error
       */
-      limLog(pMac, LOGE, FL("Invalid SME state %X"),pMac->lim.gLimSmeState );
+      limLog(pMac, LOGE, FL("Invalid SME state %d"),pMac->lim.gLimSmeState );
       retCode = eSIR_FAILURE;
    }
    
diff --git a/CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c b/CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c
index 5fe3bc8..acd7523 100644
--- a/CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c
+++ b/CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c
@@ -566,7 +566,7 @@
             * or in states other than link-established state.
             * Log error.
             */
-        PELOG1(limLog(pMac, LOG1, FL("received heartbeat timeout in state %X"),
+        PELOG1(limLog(pMac, LOG1, FL("received heartbeat timeout in state %d"),
                psessionEntry->limMlmState);)
         limPrintMlmState(pMac, LOG1, psessionEntry->limMlmState);
         pMac->lim.gLimHBfailureCntInOtherStates++;
diff --git a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
index f36f248..ba26c73 100644
--- a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
@@ -835,14 +835,14 @@
                 pMac->lim.gLimNumAssocReqDropInvldState++;
 #endif
                 limLog(pMac, LOG1, FL("received Assoc req in state "
-                   "%X from "), pStaDs->mlmStaContext.mlmState);
+                   "%d from "), pStaDs->mlmStaContext.mlmState);
             }
             else
             {     
 #ifdef WLAN_DEBUG    
                 pMac->lim.gLimNumReassocReqDropInvldState++;
 #endif
-                limLog(pMac, LOG1, FL("received ReAssoc req in state %X"
+                limLog(pMac, LOG1, FL("received ReAssoc req in state %d"
                             " from "), pStaDs->mlmStaContext.mlmState);
             }
             limPrintMacAddr(pMac, pHdr->sa, LOG1);
@@ -912,7 +912,7 @@
                                           sizeof(tSirMacCapabilityInfo)))&&
                                          (subType == LIM_ASSOC))
         {
-            limLog(pMac, LOGE, FL(" Received Assoc req in state %X STAid=%d"),
+            limLog(pMac, LOGE, FL(" Received Assoc req in state %d STAid=%d"),
                                        pStaDs->mlmStaContext.mlmState,peerIdx);
             goto error;
         }
diff --git a/CORE/MAC/src/pe/lim/limProcessBeaconFrame.c b/CORE/MAC/src/pe/lim/limProcessBeaconFrame.c
index 69c120b..51e8b90 100644
--- a/CORE/MAC/src/pe/lim/limProcessBeaconFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessBeaconFrame.c
@@ -121,7 +121,7 @@
             // Received wrongly formatted/invalid Beacon.
             // Ignore it and move on.
             limLog(pMac, LOGW,
-                   FL("Received invalid Beacon in state %X"),
+                   FL("Received invalid Beacon in state %d"),
                    psessionEntry->limMlmState);
             limPrintMlmState(pMac, LOGW,  psessionEntry->limMlmState);
             vos_mem_free(pBeacon);
@@ -272,7 +272,7 @@
         if (sirConvertBeaconFrame2Struct(pMac, (tANI_U8 *) pRxPacketInfo, pBeacon) != eSIR_SUCCESS)
         {
             // Received wrongly formatted/invalid Beacon. Ignore and move on. 
-            limLog(pMac, LOGW, FL("Received invalid Beacon in global MLM state %X"), pMac->lim.gLimMlmState);
+            limLog(pMac, LOGW, FL("Received invalid Beacon in global MLM state %d"), pMac->lim.gLimMlmState);
             limPrintMlmState(pMac, LOGW,  pMac->lim.gLimMlmState);
             vos_mem_free(pBeacon);
             return;
diff --git a/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c b/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c
index 927ad9a..f0ad865 100644
--- a/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c
@@ -290,7 +290,7 @@
 
                         // Log error
                         PELOG1(limLog(pMac, LOG1,
-                           FL("received Deauth frame state %X with failure "
+                           FL("received Deauth frame state %d with failure "
                            "code %d from "MAC_ADDRESS_STR),
                            psessionEntry->limMlmState, reasonCode,
                            MAC_ADDR_ARRAY(pHdr->sa));)
@@ -302,7 +302,7 @@
 
                     case eLIM_MLM_AUTHENTICATED_STATE:
                         limLog(pMac, LOG1,
-                           FL("received Deauth frame state %X with "
+                           FL("received Deauth frame state %d with "
                            "reasonCode=%d from "MAC_ADDRESS_STR),
                            psessionEntry->limMlmState, reasonCode,
                            MAC_ADDR_ARRAY(pHdr->sa));
@@ -328,7 +328,7 @@
                          * if any and issue ASSOC_CNF to SME.
                          */
                        limLog(pMac, LOG1,
-                           FL("received Deauth frame state %X with "
+                           FL("received Deauth frame state %d with "
                            "reasonCode=%d from "MAC_ADDRESS_STR),
                            psessionEntry->limMlmState, reasonCode,
                            MAC_ADDR_ARRAY(pHdr->sa));
@@ -366,7 +366,7 @@
                     case eLIM_MLM_WT_ADD_STA_RSP_STATE:
                          psessionEntry->fDeauthReceived = true;
                          PELOGW(limLog(pMac, LOGW,
-                            FL("Received Deauth frame in state %X with Reason "
+                            FL("Received Deauth frame in state %d with Reason "
                             "Code %d from Peer"MAC_ADDRESS_STR),
                             psessionEntry->limMlmState, reasonCode,
                             MAC_ADDR_ARRAY(pHdr->sa));)
@@ -378,7 +378,7 @@
                         if ((NULL != pStaDs) && (STA_ENTRY_TDLS_PEER == pStaDs->staType))
                         {
                            PELOGE(limLog(pMac, LOGE,
-                              FL("received Deauth frame in state %X with "
+                              FL("received Deauth frame in state %d with "
                               "reason code %d from Tdls peer"
                               MAC_ADDRESS_STR),
                               psessionEntry->limMlmState,reasonCode,
@@ -406,7 +406,7 @@
 
                     case eLIM_MLM_WT_REASSOC_RSP_STATE:
                         limLog(pMac, LOGE,
-                           FL("received Deauth frame state %X with "
+                           FL("received Deauth frame state %d with "
                            "reasonCode=%d from "MAC_ADDRESS_STR),
                            psessionEntry->limMlmState, reasonCode,
                            MAC_ADDR_ARRAY(pHdr->sa));
@@ -414,7 +414,7 @@
 
                     case eLIM_MLM_WT_FT_REASSOC_RSP_STATE:
                         PELOGE(limLog(pMac, LOGE,
-                           FL("received Deauth frame in FT state %X with "
+                           FL("received Deauth frame in FT state %d with "
                            "reasonCode=%d from "MAC_ADDRESS_STR),
                            psessionEntry->limMlmState, reasonCode,
                            MAC_ADDR_ARRAY(pHdr->sa));)
@@ -422,7 +422,7 @@
 
                     default:
                         PELOGE(limLog(pMac, LOGE,
-                           FL("received Deauth frame in state %X with "
+                           FL("received Deauth frame in state %d with "
                            "reasonCode=%d from "MAC_ADDRESS_STR),
                            psessionEntry->limMlmState, reasonCode,
                            MAC_ADDR_ARRAY(pHdr->sa));)
@@ -462,7 +462,7 @@
          * and received Deauthentication frame. Log and Ignore.
          */
         PELOGE(limLog(pMac, LOGE,
-           FL("received Deauth frame from peer that is in state %X, addr "
+           FL("received Deauth frame from peer that is in state %d, addr "
            MAC_ADDRESS_STR),
            pStaDs->mlmStaContext.mlmState,MAC_ADDR_ARRAY(pHdr->sa));)
         return;
diff --git a/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c b/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c
index 23febc7..e3242b6 100644
--- a/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c
@@ -291,7 +291,7 @@
             pStaDs->mlmStaContext.updateContext = 1;
 
         PELOGE(limLog(pMac, LOGE,
-               FL("received Disassoc frame from peer that is in state %X, addr "
+               FL("received Disassoc frame from peer that is in state %d, addr "
                MAC_ADDRESS_STR),
                pStaDs->mlmStaContext.mlmState, MAC_ADDR_ARRAY(pHdr->sa));)
 
diff --git a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
index c32540f..e2b0ea2 100644
--- a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
@@ -2040,7 +2040,7 @@
          * Log error
          */
         limLog(pMac, LOGW,
-               FL("received unexpected MLM_SCAN_REQ in state %X OR zero number of channels: %X"),
+               FL("received unexpected MLM_SCAN_REQ in state %d OR zero number of channels: %d"),
                pMac->lim.gLimMlmState, ((tLimMlmScanReq *) pMsgBuf)->channelList.numChannels);
         limPrintMlmState(pMac, LOGW, pMac->lim.gLimMlmState);
 
@@ -2086,7 +2086,7 @@
          * Log error
          */
 
-        PELOGW(limLog(pMac, LOGW, FL("OEM_DATA: unexpected LIM_MLM_OEM_DATA_REQ in invalid state %X"),pMac->lim.gLimMlmState);)
+        PELOGW(limLog(pMac, LOGW, FL("OEM_DATA: unexpected LIM_MLM_OEM_DATA_REQ in invalid state %d"),pMac->lim.gLimMlmState);)
 
         limPrintMlmState(pMac, LOGW, pMac->lim.gLimMlmState);
 
@@ -2303,13 +2303,13 @@
               * Return join confirm with invalid parameters code.
               */
         PELOGE(limLog(pMac, LOGE,
-               FL("Unexpected Join request for role %d state %X"),
+               FL("Unexpected Join request for role %d state %d"),
                psessionEntry->limSystemRole,
                psessionEntry->limMlmState);)
         limPrintMlmState(pMac, LOGE, psessionEntry->limMlmState);
         
         limLog(pMac, LOGE,
-               FL("SessionId:%d Unexpected Join request for role %d state %X "),
+               FL("SessionId:%d Unexpected Join request for role %d state %d "),
                psessionEntry->peSessionId,psessionEntry->limSystemRole,
                psessionEntry->limMlmState);
     }
@@ -2644,7 +2644,7 @@
 
         // Log error
         PELOGW(limLog(pMac, LOGW,
-           FL("received unexpected MLM_ASSOC_CNF in state %X for role=%d, MAC addr= "
+           FL("received unexpected MLM_ASSOC_CNF in state %d for role=%d, MAC addr= "
            MAC_ADDRESS_STR), psessionEntry->limMlmState,
            psessionEntry->limSystemRole, MAC_ADDR_ARRAY(pMlmAssocReq->peerMacAddr));)
         limPrintMlmState(pMac, LOGW, psessionEntry->limMlmState);
@@ -2798,7 +2798,7 @@
 
         // Log error
         limLog(pMac, LOGW,
-           FL("received unexpected MLM_REASSOC_CNF in state %X for role=%d, "
+           FL("received unexpected MLM_REASSOC_CNF in state %d for role=%d, "
            "MAC addr= "
            MAC_ADDRESS_STR), psessionEntry->limMlmState,
            psessionEntry->limSystemRole,
@@ -3861,7 +3861,7 @@
         }
 
         limLog(pMac, LOGW,
-           FL("Sending End Scan req from MIN_CH_TIMEOUT in state %X ch-%d"),
+           FL("Sending End Scan req from MIN_CH_TIMEOUT in state %d ch-%d"),
            pMac->lim.gLimMlmState,channelNum);
         limSendHalEndScanReq(pMac, channelNum, eLIM_HAL_END_SCAN_WAIT_STATE);
     }
@@ -3873,7 +3873,7 @@
          * Log error.
          */
         limLog(pMac, LOGW,
-           FL("received unexpected MIN channel timeout in mlme state %X and hal scan State %X"),
+           FL("received unexpected MIN channel timeout in mlme state %d and hal scan State %d"),
            pMac->lim.gLimMlmState,pMac->lim.gLimHalScanState);
         limPrintMlmState(pMac, LOGE, pMac->lim.gLimMlmState);
     }
@@ -3936,7 +3936,7 @@
             }
         }
         limLog(pMac, LOGW,
-           FL("Sending End Scan req from MAX_CH_TIMEOUT in state %X on ch-%d"),
+           FL("Sending End Scan req from MAX_CH_TIMEOUT in state %d on ch-%d"),
            pMac->lim.gLimMlmState,channelNum);
         limSendHalEndScanReq(pMac, channelNum, eLIM_HAL_END_SCAN_WAIT_STATE);
     }
@@ -3948,7 +3948,7 @@
          * Log error.
          */
         limLog(pMac, LOGW,
-           FL("received unexpected MAX channel timeout in mlme state %X and hal scan state %X"),
+           FL("received unexpected MAX channel timeout in mlme state %d and hal scan state %d"),
            pMac->lim.gLimMlmState, pMac->lim.gLimHalScanState);
         limPrintMlmState(pMac, LOGW, pMac->lim.gLimMlmState);
     }
@@ -4044,7 +4044,7 @@
          * Log error.
          */
         limLog(pMac, LOG1,
-           FL("received unexpected Periodic scan timeout in state %X"),
+           FL("received unexpected Periodic scan timeout in state %d"),
            pMac->lim.gLimMlmState);
     }
 } /*** limProcessPeriodicProbeReqTimer() ***/
@@ -4151,7 +4151,7 @@
          * Log error.
          */
         limLog(pMac, LOGW,
-           FL("received unexpected JOIN failure timeout in state %X"),psessionEntry->limMlmState);
+           FL("received unexpected JOIN failure timeout in state %d"),psessionEntry->limMlmState);
         limPrintMlmState(pMac, LOGW, psessionEntry->limMlmState);
     }
 } /*** limProcessJoinFailureTimeout() ***/
@@ -4243,7 +4243,7 @@
         return;
     }
     limLog(pMac, LOGE, FL("received AUTH failure timeout in sessionid %d "
-    "limMlmstate %X limSmeState %X"), psessionEntry->peSessionId,
+    "limMlmstate %d limSmeState %d"), psessionEntry->peSessionId,
     psessionEntry->limMlmState, psessionEntry->limSmeState);
 #ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT_LIM
     WLAN_VOS_DIAG_LOG_ALLOC(pRssiLog,
@@ -4279,7 +4279,7 @@
              * in states other than wt_auth_frame2/4
              * Log error.
              */
-            PELOGE(limLog(pMac, LOGE, FL("received unexpected AUTH failure timeout in state %X"), psessionEntry->limMlmState);)
+            PELOGE(limLog(pMac, LOGE, FL("received unexpected AUTH failure timeout in state %d"), psessionEntry->limMlmState);)
             limPrintMlmState(pMac, LOGE, psessionEntry->limMlmState);
 
             break;
@@ -4443,7 +4443,7 @@
 
         // Log error
         limLog(pMac, LOGW,
-           FL("received unexpected REASSOC failure timeout in state %X for role %d"),
+           FL("received unexpected REASSOC failure timeout in state %d for role %d"),
            psessionEntry->limMlmState, psessionEntry->limSystemRole);
         limPrintMlmState(pMac, LOGW, psessionEntry->limMlmState);
     }
diff --git a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
index 4bdfe2c..49f49c5 100644
--- a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
@@ -235,7 +235,7 @@
              * Log error
              */
             PELOGE(limLog(pMac, LOGE,
-               FL("received unexpected MLM_SCAN_CNF in state %X"),
+               FL("received unexpected MLM_SCAN_CNF in state %d"),
                pMac->lim.gLimSmeState);)
             return;
     }
@@ -380,7 +380,7 @@
          * Log error
          */
         PELOGE(limLog(pMac, LOGE,
-           FL("received unexpected MLM_START_CNF in state %X"),
+           FL("received unexpected MLM_START_CNF in state %d"),
            psessionEntry->limSmeState);)
         return;
     }
@@ -466,7 +466,7 @@
     if (psessionEntry->limSmeState!= eLIM_SME_WT_JOIN_STATE)
     {
         PELOGE(limLog(pMac, LOGE,
-               FL("received unexpected MLM_JOIN_CNF in state %X"),
+               FL("received unexpected MLM_JOIN_CNF in state %d"),
                psessionEntry->limSmeState);)
          return;
     }
@@ -547,7 +547,7 @@
          * Log error
          */
         PELOGE(limLog(pMac, LOGE,
-               FL("SessionId:%d received unexpected MLM_AUTH_CNF in state %X"),
+               FL("SessionId:%d received unexpected MLM_AUTH_CNF in state %d"),
                psessionEntry->peSessionId,psessionEntry->limSmeState);)
         return;
     }
@@ -846,7 +846,7 @@
          * Log error
          */
         PELOGE(limLog(pMac, LOGE,
-               FL("SessionId:%d Received unexpected MLM_ASSOC_CNF in state %X"),
+               FL("SessionId:%d Received unexpected MLM_ASSOC_CNF in state %d"),
                psessionEntry->peSessionId,psessionEntry->limSmeState);)
         return;
     }
@@ -939,7 +939,7 @@
          * Log error
          */
         PELOGE(limLog(pMac, LOGE,
-                   FL("Rcv unexpected MLM_REASSOC_CNF in role %d, sme state 0x%X"),
+                   FL("Rcv unexpected MLM_REASSOC_CNF in role %d, sme state %d"),
                    psessionEntry->limSystemRole, psessionEntry->limSmeState);)
                 return;
     }
@@ -1395,7 +1395,7 @@
              * Log error
              */
             PELOGE(limLog(pMac, LOGE,
-               FL("received unexpected MLM_DISASSOC_CNF in state %X"),psessionEntry->limSmeState);)
+               FL("received unexpected MLM_DISASSOC_CNF in state %d"),psessionEntry->limSmeState);)
             return;
         }
         if (pMac->lim.gLimRspReqd)
@@ -1540,7 +1540,7 @@
              * Log error
              */
             PELOGE(limLog(pMac, LOGE,
-               FL("received unexpected MLM_DEAUTH_CNF in state %X"),
+               FL("received unexpected MLM_DEAUTH_CNF in state %d"),
                psessionEntry->limSmeState);)
             return;
         }
@@ -1620,7 +1620,7 @@
                  * Log error
                  */
                 PELOGE(limLog(pMac, LOGE,
-                   FL("received unexpected MLM_PURGE_STA_IND in state %X"),
+                   FL("received unexpected MLM_PURGE_STA_IND in state %d"),
                    psessionEntry->limSmeState);)
                 break;
             }
@@ -1951,7 +1951,7 @@
         {
             //TODO: any response to be sent out here ?
             limLog( pMac, LOGE,
-                FL( "Received unexpected WDA_ADD_STA_RSP in state %X" ),
+                FL( "Received unexpected WDA_ADD_STA_RSP in state %d" ),
                 psessionEntry->limMlmState);
             mlmAssocCnf.resultCode = (tSirResultCodes) eSIR_SME_REFUSED;
             goto end;
@@ -2100,7 +2100,7 @@
         }
          if( eLIM_MLM_WT_DEL_BSS_RSP_STATE != pStaDs->mlmStaContext.mlmState)
         {
-            PELOGE(limLog( pMac, LOGE, FL( "Received unexpected WDA_DEL_BSS_RSP in state %X" ),
+            PELOGE(limLog( pMac, LOGE, FL( "Received unexpected WDA_DEL_BSS_RSP in state %d" ),
                            pStaDs->mlmStaContext.mlmState);)
             statusCode = eSIR_SME_REFUSED;
             goto end;
@@ -2169,7 +2169,7 @@
     if( eLIM_MLM_WT_DEL_BSS_RSP_STATE != psessionEntry->limMlmState)
     {
             limLog( pMac, LOGE,
-               FL( "Received unexpected WDA_DEL_BSS_RSP in state %X" ),
+               FL( "Received unexpected WDA_DEL_BSS_RSP in state %d" ),
                psessionEntry->limMlmState);
             rc = eSIR_SME_REFUSED;
            goto end;
@@ -2417,7 +2417,7 @@
     {
         //TODO: any response to be sent out here ?
         limLog( pMac, LOGE,
-                FL( "Received unexpected WDA_ADD_STA_RSP in state %X" ),
+                FL( "Received unexpected WDA_ADD_STA_RSP in state %d" ),
                 pStaDs->mlmStaContext.mlmState);
         goto end;
     }
@@ -3262,7 +3262,7 @@
             {
                 // Mesg received from HAL in Invalid state!
                 limLog( pMac, LOGE,FL( "SessionId:%d Received unexpected"
-                "WDA_ADD_BSS_RSP in state %X" ),
+                "WDA_ADD_BSS_RSP in state %d" ),
                  psessionEntry->peSessionId,psessionEntry->limMlmState);
                 mlmStartCnf.resultCode = eSIR_SME_BSS_ALREADY_STARTED_OR_JOINED;
                 if( 0 != limMsgQ->bodyptr )
@@ -3362,7 +3362,7 @@
     if( eLIM_MLM_WT_SET_STA_KEY_STATE != psessionEntry->limMlmState )
     {
         // Mesg received from HAL in Invalid state!
-        limLog( pMac, LOGW, FL( "Received unexpected [Mesg Id - %d] in state %X" ), limMsgQ->type, psessionEntry->limMlmState );
+        limLog( pMac, LOGW, FL( "Received unexpected [Mesg Id - %d] in state %d" ), limMsgQ->type, psessionEntry->limMlmState );
         // There's not much that MLME can do at this stage...
         respReqd = 0;
     }
@@ -3435,7 +3435,7 @@
         eLIM_MLM_WT_SET_STA_BCASTKEY_STATE != psessionEntry->limMlmState )
     {
         // Mesg received from HAL in Invalid state!
-        limLog( pMac, LOGW, FL( "Received unexpected [Mesg Id - %d] in state %X" ), limMsgQ->type, psessionEntry->limMlmState );
+        limLog( pMac, LOGW, FL( "Received unexpected [Mesg Id - %d] in state %d" ), limMsgQ->type, psessionEntry->limMlmState );
         // There's not much that MLME can do at this stage...
         respReqd = 0;
     }
@@ -3523,7 +3523,7 @@
     {
         // Mesg received from HAL in Invalid state!
         limLog(pMac, LOGW,
-            FL("Received unexpected [Mesg Id - %d] in state %X"),
+            FL("Received unexpected [Mesg Id - %d] in state %d"),
           limMsgQ->type,
           psessionEntry->limMlmState );
           respReqd = 0;
diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
index 92a6096..6a7cf54 100644
--- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
@@ -396,7 +396,7 @@
          * other than OFFLINE. Return response to host and
          * log error
          */
-        limLog(pMac, LOGE, FL("Invalid SME_START_REQ received in SME state %X"),pMac->lim.gLimSmeState );
+        limLog(pMac, LOGE, FL("Invalid SME_START_REQ received in SME state %d"),pMac->lim.gLimSmeState );
         limPrintSmeState(pMac, LOGE, pMac->lim.gLimSmeState);
         retCode = eSIR_SME_UNEXPECTED_REQ_RESULT_CODE;
     }
@@ -1694,7 +1694,7 @@
         if((psessionEntry = peFindSessionByBssid(pMac,pSmeJoinReq->bssDescription.bssId,&sessionId)) != NULL)
         {
             limLog(pMac, LOGE, FL("Session(%d) Already exists for BSSID: "
-            MAC_ADDRESS_STR" in limSmeState = %X"),sessionId,
+            MAC_ADDRESS_STR" in limSmeState = %d"),sessionId,
             MAC_ADDR_ARRAY(pSmeJoinReq->bssDescription.bssId),
             psessionEntry->limSmeState);
             
@@ -2040,7 +2040,7 @@
     {
         /* Received eWNI_SME_JOIN_REQ un expected state */
         limLog(pMac, LOGE, FL("received unexpected SME_JOIN_REQ "
-                             "in state %X"), pMac->lim.gLimSmeState);
+                             "in state %d"), pMac->lim.gLimSmeState);
         limPrintSmeState(pMac, LOGE, pMac->lim.gLimSmeState);
         retCode = eSIR_SME_UNEXPECTED_REQ_RESULT_CODE;
         psessionEntry = NULL;
@@ -2205,7 +2205,7 @@
         /// Should not have received eWNI_SME_REASSOC_REQ
         // Log the event
         limLog(pMac, LOGE,
-               FL("received unexpected SME_REASSOC_REQ in state %X"),
+               FL("received unexpected SME_REASSOC_REQ in state %d"),
                psessionEntry->limSmeState);
         limPrintSmeState(pMac, LOGE, psessionEntry->limSmeState);
 
@@ -2553,7 +2553,7 @@
                      * Log error and send response to host
                      */
                     limLog(pMac, LOGE,
-                       FL("received unexpected SME_DISASSOC_REQ in state %X"),
+                       FL("received unexpected SME_DISASSOC_REQ in state %d"),
                        psessionEntry->limSmeState);
                     limPrintSmeState(pMac, LOGE, psessionEntry->limSmeState);
 
@@ -2710,7 +2710,7 @@
                 (psessionEntry->limSmeState != eLIM_SME_WT_DEAUTH_STATE))
             {
                 limLog(pMac, LOGE,
-                   FL("received unexp SME_DISASSOC_CNF in state %X"),
+                   FL("received unexp SME_DISASSOC_CNF in state %d"),
                   psessionEntry->limSmeState);
                 limPrintSmeState(pMac, LOGE, psessionEntry->limSmeState);
                 return;
@@ -2866,7 +2866,7 @@
                      * peer. Log error and send response to host.
                      */
                     limLog(pMac, LOGE,
-                    FL("received unexp SME_DEAUTH_REQ in state %X"),
+                    FL("received unexp SME_DEAUTH_REQ in state %d"),
                     psessionEntry->limSmeState);
                     limPrintSmeState(pMac, LOGE, psessionEntry->limSmeState);
 
@@ -2909,7 +2909,7 @@
 
         default:
             limLog(pMac, LOGE,
-               FL("received unexpected SME_DEAUTH_REQ for role %X"),
+               FL("received unexpected SME_DEAUTH_REQ for role %d"),
                 psessionEntry->limSystemRole);
 
             return;
@@ -3111,7 +3111,7 @@
     else
     {
         limLog(pMac, LOGE,
-           FL("received unexpected SME_SETCONTEXT_REQ for role %d, state=%X"),
+           FL("received unexpected SME_SETCONTEXT_REQ for role %d, state=%d"),
            psessionEntry->limSystemRole,
            psessionEntry->limSmeState);
         limPrintSmeState(pMac, LOGE, psessionEntry->limSmeState);
@@ -3252,7 +3252,7 @@
     else
     {
         limLog(pMac, LOGE,
-           FL("received unexpected SME_REMOVEKEY_REQ for role %d, state=%X"),
+           FL("received unexpected SME_REMOVEKEY_REQ for role %d, state=%d"),
            psessionEntry->limSystemRole,
            psessionEntry->limSmeState);
         limPrintSmeState(pMac, LOGE, psessionEntry->limSmeState);
@@ -3375,7 +3375,7 @@
     if (psessionEntry->limSystemRole != eLIM_AP_ROLE)
     {
         limLog(pMac, LOGE,
-                        FL("Received unexpected message in state %X, in role %X"),
+                        FL("Received unexpected message in state %d, in role %d"),
                         psessionEntry->limSmeState, psessionEntry->limSystemRole);
         goto limAssocStaEnd;
     }
@@ -3479,7 +3479,7 @@
     if (psessionEntry->limSystemRole != eLIM_AP_ROLE)
     {
         limLog(pMac, LOGE,
-                        FL("Received unexpected message in role %X"),
+                        FL("Received unexpected message in role %d"),
                         psessionEntry->limSystemRole);
         goto limGetWPSPBCSessionsEnd;
     }
@@ -3627,7 +3627,7 @@
          * mode. Log error and return response to host.
          */
         limLog(pMac, LOGE,
-           FL("received unexpected SME_STOP_BSS_REQ in state %X, for role %d"),
+           FL("received unexpected SME_STOP_BSS_REQ in state %d, for role %d"),
            psessionEntry->limSmeState, psessionEntry->limSystemRole);
         limPrintSmeState(pMac, LOGE, psessionEntry->limSmeState);
         /// Send Stop BSS response to host
@@ -3789,7 +3789,7 @@
     if ( ((psessionEntry->limSystemRole != eLIM_AP_ROLE) && (psessionEntry->limSystemRole != eLIM_BT_AMP_AP_ROLE)) ||
          ((psessionEntry->limSmeState != eLIM_SME_NORMAL_STATE) && (psessionEntry->limSmeState != eLIM_SME_NORMAL_CHANNEL_SCAN_STATE)))
     {
-        limLog(pMac, LOGE, FL("Received unexpected message %X in state %X, in role %X"),
+        limLog(pMac, LOGE, FL("Received unexpected message %X in state %d, in role %d"),
                msgType, psessionEntry->limSmeState, psessionEntry->limSystemRole);
         goto end;
     }
diff --git a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c
index e4e12ba..7fb6c71 100644
--- a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c
+++ b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c
@@ -1866,7 +1866,7 @@
             vos_mem_copy( (tANI_U8 *)&pSirSmeWmStatusChangeNtf->statusChangeInfo,
                           (tANI_U8 *)pStatusChangeInfo, infoLen);
         }
-        limLog(pMac, LOGE, FL("***---*** StatusChg: code 0x%x, length %d ***---***"),
+        limLog(pMac, LOGE, FL("***---*** StatusChg: code %d, length %d ***---***"),
                statusChangeCode, infoLen);
         break;
     }
