diff --git a/src/java/com/android/internal/telephony/ServiceStateTracker.java b/src/java/com/android/internal/telephony/ServiceStateTracker.java
index bd2e4e4..b3e6958 100644
--- a/src/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -212,6 +212,7 @@
     protected static final int EVENT_RADIO_POWER_FROM_CARRIER          = 51;
     protected static final int EVENT_SIM_NOT_INSERTED                  = 52;
     protected static final int EVENT_IMS_SERVICE_STATE_CHANGED         = 53;
+    protected static final int EVENT_RADIO_POWER_OFF_DONE              = 54;
 
     protected static final String TIMEZONE_PROPERTY = "persist.sys.timezone";
 
@@ -1134,6 +1135,16 @@
                 }
                 break;
 
+            case EVENT_RADIO_POWER_OFF_DONE:
+                if (DBG) log("EVENT_RADIO_POWER_OFF_DONE");
+                if (mDeviceShuttingDown && mCi.getRadioState().isAvailable()) {
+                    // during shutdown the modem may not send radio state changed event
+                    // as a result of radio power request
+                    // Hence, issuing shut down regardless of radio power response
+                    mCi.requestShutdown(null);
+                }
+                break;
+
             // GSM
             case EVENT_SIM_READY:
                 // Reset the mPreviousSubId so we treat a SIM power bounce
@@ -4460,7 +4471,7 @@
             mPhone.mCT.mForegroundCall.hangupIfAlive();
         }
 
-        mCi.setRadioPower(false, null);
+        mCi.setRadioPower(false, obtainMessage(EVENT_RADIO_POWER_OFF_DONE));
 
     }
 
diff --git a/src/java/com/android/internal/telephony/test/SimulatedCommands.java b/src/java/com/android/internal/telephony/test/SimulatedCommands.java
index 7553b61..1b43bcd 100644
--- a/src/java/com/android/internal/telephony/test/SimulatedCommands.java
+++ b/src/java/com/android/internal/telephony/test/SimulatedCommands.java
@@ -132,6 +132,7 @@
 
     private boolean mDcSuccess = true;
     private DataCallResponse mDcResponse;
+    private boolean mIsRadioPowerFailResponse = false;
 
     //***** Constructor
     public
@@ -1188,11 +1189,17 @@
 
     @Override
     public void setRadioPower(boolean on, Message result) {
+        if (mIsRadioPowerFailResponse) {
+            resultFail(result, null, new RuntimeException("setRadioPower failed!"));
+            return;
+        }
+
         if(on) {
             setRadioState(RadioState.RADIO_ON);
         } else {
             setRadioState(RadioState.RADIO_OFF);
         }
+        resultSuccess(result, null);
     }
 
 
@@ -2151,4 +2158,8 @@
         super.setOnRestrictedStateChanged(h, what, obj);
         SimulatedCommandsVerifier.getInstance().setOnRestrictedStateChanged(h, what, obj);
     }
+
+    public void setRadioPowerFailResponse(boolean fail) {
+        mIsRadioPowerFailResponse = fail;
+    }
 }
diff --git a/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
index 018ac88..fba9ead 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
@@ -1114,6 +1114,33 @@
 
     @Test
     @SmallTest
+    public void testShuttingDownRequest() throws Exception {
+        sst.setRadioPower(true);
+        waitForMs(100);
+
+        sst.requestShutdown();
+        waitForMs(100);
+        assertFalse(mSimulatedCommands.getRadioState().isAvailable());
+    }
+
+    @Test
+    @SmallTest
+    public void testShuttingDownRequestWithRadioPowerFailResponse() throws Exception {
+        sst.setRadioPower(true);
+        waitForMs(100);
+
+        // Simulate RIL fails the radio power settings.
+        mSimulatedCommands.setRadioPowerFailResponse(true);
+        sst.setRadioPower(false);
+        waitForMs(100);
+        assertTrue(mSimulatedCommands.getRadioState().isOn());
+        sst.requestShutdown();
+        waitForMs(100);
+        assertFalse(mSimulatedCommands.getRadioState().isAvailable());
+    }
+
+    @Test
+    @SmallTest
     public void testSetTimeFromNITZStr() throws Exception {
         doReturn(mAlarmManager).when(mIBinder).queryLocalInterface(anyString());
         mServiceManagerMockedServices.put(Context.ALARM_SERVICE, mIBinder);
