diff --git a/frameworks/base/location/java/com/android/internal/location/GpsLocationProvider.java b/frameworks/base/location/java/com/android/internal/location/GpsLocationProvider.java
--- a/frameworks/base/location/java/com/android/internal/location/GpsLocationProvider.java
+++ b/frameworks/base/location/java/com/android/internal/location/GpsLocationProvider.java
@@ -198,8 +198,8 @@
 
     // flags to trigger NTP or XTRA data download when network becomes available
     // initialized to true so we do NTP and XTRA when the network comes up after booting
-    private boolean mInjectNtpTimePending = true;
-    private boolean mDownloadXtraDataPending = true;
+    private boolean mInjectNtpTimePending = false;
+    private boolean mDownloadXtraDataPending = false;
 
     // true if GPS is navigating
     private boolean mNavigating;
@@ -276,6 +276,8 @@
     // by more than 5 minutes.
     private static final long MAX_NTP_SYSTEM_TIME_OFFSET = 5*60*1000;
 
+    private static final long SETTLE_DELAY = 5000;
+
     private final IGpsStatusProvider mGpsStatusProvider = new IGpsStatusProvider.Stub() {
         public void addGpsStatusListener(IGpsStatusListener listener) throws RemoteException {
             if (listener == null) {
@@ -467,11 +469,11 @@
         if (mNetworkAvailable) {
             if (mInjectNtpTimePending) {
                 mHandler.removeMessages(INJECT_NTP_TIME);
-                mHandler.sendMessage(Message.obtain(mHandler, INJECT_NTP_TIME));
+                mHandler.sendMessageDelayed(Message.obtain(mHandler, INJECT_NTP_TIME), SETTLE_DELAY);
             }
             if (mDownloadXtraDataPending) {
                 mHandler.removeMessages(DOWNLOAD_XTRA_DATA);
-                mHandler.sendMessage(Message.obtain(mHandler, DOWNLOAD_XTRA_DATA));
+                mHandler.sendMessageDelayed(Message.obtain(mHandler, DOWNLOAD_XTRA_DATA), SETTLE_DELAY);
             }
         }
     }
@@ -666,6 +668,13 @@
                 native_set_agps_server(AGPS_TYPE_C2K, mC2KServerHost, mC2KServerPort);
             }
 
+            mHandler.removeMessages(INJECT_NTP_TIME);
+            mHandler.sendMessage(Message.obtain(mHandler, INJECT_NTP_TIME));
+
+            if (native_supports_xtra()) {
+                xtraDownloadRequest();
+            }
+
             // run event listener thread while we are enabled
             mEventThread = new GpsEventThread();
             mEventThread.start();
@@ -696,6 +705,12 @@
         stopNavigating();
         native_disable();
 
+        mHandler.removeMessages(INJECT_NTP_TIME);
+        mInjectNtpTimePending = false;
+
+        mHandler.removeMessages(DOWNLOAD_XTRA_DATA);
+        mDownloadXtraDataPending = false;
+
         // make sure our event thread exits
         if (mEventThread != null) {
             try {
