diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index c12b581..cd1388f 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -51,6 +51,7 @@
 
 import com.android.browser.Tab.SecurityState;
 
+import org.codeaurora.swe.BrowserCommandLine;
 import org.codeaurora.swe.WebView;
 
 import java.util.List;
@@ -460,6 +461,10 @@
     }
 
     public void refreshEdgeSwipeController(View container) {
+        if (BrowserCommandLine.hasSwitch("ui-low-power-mode")) {
+            return;
+        }
+
         if (mEdgeSwipeController != null) {
             mEdgeSwipeController.cleanup();
         }
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index a7157d0..64be289 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -64,6 +64,7 @@
 import com.android.browser.provider.MyNavigationProvider;
 import com.android.browser.provider.SnapshotProvider.Snapshots;
 
+import org.codeaurora.swe.BrowserCommandLine;
 import org.codeaurora.swe.BrowserDownloadListener;
 import org.codeaurora.swe.ClientCertRequestHandler;
 import org.codeaurora.swe.HttpAuthHandler;
@@ -633,6 +634,10 @@
 
         @Override
         public void beforeNavigation(WebView view, String url) {
+            if (BrowserCommandLine.hasSwitch("ui-low-power-mode")) {
+                return;
+            }
+
             if (isPrivateBrowsingEnabled()) {
                 return;
             }
@@ -663,6 +668,10 @@
 
         @Override
         public void onHistoryItemCommit(WebView view, int index) {
+            if (BrowserCommandLine.hasSwitch("ui-low-power-mode")) {
+                return;
+            }
+
             mTabHistoryUpdateObservable.set(index);
             final int maxIdx = view.copyBackForwardList().getSize();
             final WebView wv = view;
@@ -1382,7 +1391,8 @@
             dismissSubWindow();
             // save the WebView to call destroy() after detach it from the tab
             final WebView webView = mMainView;
-            if (!mWebViewDestroyedByMemoryMonitor) {
+            if (!mWebViewDestroyedByMemoryMonitor &&
+                    !BrowserCommandLine.hasSwitch("ui-low-power-mode")) {
                 webView.getSnapshotIds(new ValueCallback<List<Integer>>() {
                     @Override
                     public void onReceiveValue(List<Integer> ids) {
diff --git a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
index 3641380..40e0106 100644
--- a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
+++ b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
@@ -36,6 +36,8 @@
 import com.android.browser.PreferenceKeys;
 import com.android.browser.R;
 
+import org.codeaurora.swe.BrowserCommandLine;
+
 public class AdvancedPreferencesFragment
         implements Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener {
 
@@ -73,15 +75,19 @@
         ListPreference edgeSwipePref =
                 (ListPreference) mFragment.findPreference("edge_swiping_action");
 
-        String[] options = mFragment.getResources().getStringArray(
-                R.array.pref_edge_swiping_values);
+        if (BrowserCommandLine.hasSwitch("ui-low-power-mode")) {
+            edgeSwipePref.setEnabled(false);
+        } else {
+            String[] options = mFragment.getResources().getStringArray(
+                    R.array.pref_edge_swiping_values);
 
-        String value = BrowserSettings.getInstance().getEdgeSwipeAction();
+            String value = BrowserSettings.getInstance().getEdgeSwipeAction();
 
-        for (int i = 0; i < options.length; i++) {
-            if (value.equals(options[i])) {
-                edgeSwipePref.setValueIndex(i);
-                break;
+            for (int i = 0; i < options.length; i++) {
+                if (value.equals(options[i])) {
+                    edgeSwipePref.setValueIndex(i);
+                    break;
+                }
             }
         }
     }
