diff --git a/lib/sdk/Libraries/BTLE/stack/ble-profiles/sources/apps/app/app_slave.c b/lib/sdk/Libraries/BTLE/stack/ble-profiles/sources/apps/app/app_slave.c
index bc298c74595898cbbbd05fa3dc9333e41c66505b..fa2a857c1357310749330ef63f36e00a25dfecac 100644
--- a/lib/sdk/Libraries/BTLE/stack/ble-profiles/sources/apps/app/app_slave.c
+++ b/lib/sdk/Libraries/BTLE/stack/ble-profiles/sources/apps/app/app_slave.c
@@ -206,6 +206,12 @@ static void appSetAdvScanDataFrag(uint8_t advHandle, uint8_t location)
     remainLen = appSlaveCb.maxAdvDataLen[advHandle];
   }
 
+  if(remainLen == 0)
+  {
+    op = HCI_ADV_DATA_OP_COMP_FRAG;
+    DmAdvSetData(advHandle, op, APP_LOC_2_DM_LOC(location), 0, NULL);
+  }
+
   /* while there remains data to be sent */
   while (remainLen > 0)
   {
@@ -257,13 +263,15 @@ static void appSetAdvScanData(uint8_t advHandle, uint8_t mode)
   scanLoc = APP_MODE_2_SCAN_LOC(mode);
 
   /* set advertising data */
-  if (appSlaveCb.advDataOffset[advHandle][advLoc] < appSlaveCb.advDataLen[advHandle][advLoc])
+  if (appSlaveCb.advDataOffset[advHandle][advLoc] < appSlaveCb.advDataLen[advHandle][advLoc] ||
+       appSlaveCb.advDataLen[advHandle][advLoc] == 0)
   {
     appSetAdvScanDataFrag(advHandle, advLoc);
   }
 
   /* set scan data */
-  if (appSlaveCb.advDataOffset[advHandle][scanLoc] < appSlaveCb.advDataLen[advHandle][scanLoc])
+  if (appSlaveCb.advDataOffset[advHandle][scanLoc] < appSlaveCb.advDataLen[advHandle][scanLoc] ||
+       appSlaveCb.advDataLen[advHandle][scanLoc] == 0)
   {
     appSetAdvScanDataFrag(advHandle, scanLoc);
   }