diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 34a19fa..2ea733b 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -50,6 +50,7 @@
 
 import java.util.Locale;
 
+import org.codeaurora.net.NetworkServices;
 import org.codeaurora.swe.CookieManager;
 import org.codeaurora.swe.WebView;
 
@@ -218,6 +219,10 @@
     protected void onStart() {
         super.onStart();
         EngineInitializer.onActivityStart(BrowserActivity.this);
+        if (!BrowserSettings.getInstance().isPowerSaveModeEnabled()) {
+            //Notify about anticipated network activity
+            NetworkServices.hintUpcomingUserActivity();
+        }
     }
 
     @Override
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index 80ff6d8..05bd248 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -564,8 +564,10 @@
         LoaderManager lm = getLoaderManager();
         lm.restartLoader(LOADER_ACCOUNTS, null, this);
 
-        //Notify about anticipated network activity
-        NetworkServices.HintUpcomingUserActivity();
+        if (!BrowserSettings.getInstance().isPowerSaveModeEnabled()) {
+            //Notify about anticipated network activity
+            NetworkServices.hintUpcomingUserActivity();
+        }
 
         EditBookmarksRestriction.getInstance().registerView(mGrid);
 
diff --git a/src/com/android/browser/NavigationBarBase.java b/src/com/android/browser/NavigationBarBase.java
index d247066..344e7d9 100644
--- a/src/com/android/browser/NavigationBarBase.java
+++ b/src/com/android/browser/NavigationBarBase.java
@@ -56,6 +56,7 @@
 import java.net.URISyntaxException;
 import java.net.URL;
 
+import org.codeaurora.net.NetworkServices;
 import org.codeaurora.swe.Engine;
 import org.codeaurora.swe.WebRefiner;
 import org.codeaurora.swe.WebView;
@@ -338,6 +339,10 @@
         if (hasFocus) {
             Engine.warmUpChildProcessAsync(mUiController.getActivity().getApplicationContext());
             mBaseUi.showTitleBar();
+            if (!BrowserSettings.getInstance().isPowerSaveModeEnabled()) {
+                //Notify about anticipated network activity
+                NetworkServices.hintUpcomingUserActivity();
+            }
         } else if (!mUrlInput.needsUpdate()) {
             mUrlInput.dismissDropDown();
             mUrlInput.hideIME();
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index c051ec0..f3a08f7 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -46,6 +46,7 @@
 
 import com.android.browser.UrlInputView.StateListener;
 
+import org.codeaurora.net.NetworkServices;
 import org.codeaurora.swe.WebView;
 
 /**
@@ -337,6 +338,10 @@
                         onShowNavScreenContinue(sbm);
                     }
                 });
+        if (!BrowserSettings.getInstance().isPowerSaveModeEnabled()) {
+            //Notify about anticipated network activity
+            NetworkServices.hintUpcomingUserActivity();
+        }
         mActiveTab.capture();
     }
 
