diff --git a/main.py b/main.py
index 23d80e4..5caa362 100755
--- a/main.py
+++ b/main.py
@@ -36,6 +36,8 @@ SLEEP_BETWEEN_BALANCE_N_TOPUP = config.getint('globals', 'SLEEP_BETWEEN_BALANCE_
 TOPUP_USSD_TIMEOUT = config.getint('globals', 'TOPUP_USSD_TIMEOUT')
 SLEEP_AFTER_USSD_ERROR = 180
 
+NEED_CHECK_BALANCE = False
+
 MIN_SIGNAL_STRENGTH = 0
 try:
     MIN_SIGNAL_STRENGTH = config.getint('globals', 'MIN_SIGNAL_STRENGTH')
@@ -97,6 +99,7 @@ def handleSms(sms):
     global LAST_PRODUCT
     global LAST_REQUEST_ID
     global LAST_SN
+    global NEED_CHECK_BALANCE
     
     try:
         logger.info(u'Incoming SMS from: {0}; Time: {1}; Message: {2}'.format(sms.number, sms.time, sms.text))
@@ -164,7 +167,7 @@ def handleSms(sms):
     if sms.text.find('Anda terima uang XLTunai') >= 0:
         LAST_SN = xltunai.getSNFromReceiveTransferMessage(sms.text)
         logger.info('Override LAST_SN: {0}'.format(LAST_SN))
-        checkBalance(modem)
+        NEED_CHECK_BALANCE = True
         return
     
     if sms.text.find('Kirim uang ke ') == 0:
@@ -588,11 +591,16 @@ def  publishMessageToRedis():
 
 def pullLoop(modem):
     global TERMINATING
+    global NEED_CHECK_BALANCE
     
     while True:
         signalStrength = modem.signalStrength
         saveSignalStrengthToRedis(signalStrength)
-    
+            
+        if NEED_CHECK_BALANCE:
+            checkBalance(modem)
+            NEED_CHECK_BALANCE = False
+            
         if TERMINATING:
             logger.info('Terminated by request signal')
             sys.exit(0)