diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index dbbc164..c546f48 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -1058,7 +1058,9 @@
 
     @Override
     public boolean shouldOverrideUrlLoading(Tab tab, WebView view, String url) {
-        return mUrlHandler.shouldOverrideUrlLoading(tab, view, url);
+        // if tab is snapshot tab we want to prevent navigation from occuring
+        // since snapshot tab opens a new tab with the url
+        return  goLive(url) || mUrlHandler.shouldOverrideUrlLoading(tab, view, url);
     }
 
     @Override
@@ -2149,9 +2151,10 @@
                 break;
 
             case R.id.snapshot_go_live:
-                goLive();
-                return true;
-
+                // passing null to distinguish between
+                // "go live" button and navigating a web page
+                //  on a snapshot tab
+                return goLive(null);
             case R.id.share_page_menu_id:
                 Tab currentTab = mTabControl.getCurrentTab();
                 if (null == currentTab) {
@@ -2360,23 +2363,18 @@
         }
     }
 
-    private void goLive() {
-        if (!getCurrentTab().isSnapshot()) return;
+    public boolean goLive(String url) {
+        if (!getCurrentTab().isSnapshot())
+            return false;
         SnapshotTab t = (SnapshotTab) getCurrentTab();
-        String url = t.getLiveUrl();
-        boolean onlySingleTabRemaining = false;
-        if (mTabControl.getTabCount() > 1) {
-            // destroy the old snapshot tab
-            closeCurrentTab();
-        } else {
-            onlySingleTabRemaining = true;
-        }
-        Tab liveTab =  createNewTab(false, true, false);
-        if (onlySingleTabRemaining) {
+
+        if (url == null) { // "go live" button was clicked
+            url = t.getLiveUrl();
             closeTab(t);
         }
-
+        Tab liveTab = createNewTab(false, true, false);
         loadUrl(liveTab, url);
+        return true;
     }
 
     private void showExitDialog(final Activity activity) {
diff --git a/src/com/android/browser/SnapshotTab.java b/src/com/android/browser/SnapshotTab.java
index 7471bca..c63bf10 100644
--- a/src/com/android/browser/SnapshotTab.java
+++ b/src/com/android/browser/SnapshotTab.java
@@ -49,7 +49,6 @@
     private long mDateCreated;
     private boolean mIsLive;
     private String mLiveUrl;
-    private Bundle mSavedState;
 
     // Used for saving and restoring each Tab
     static final String SNAPSHOT_ID = "snapshotId";
@@ -65,6 +64,7 @@
         WebView web = mWebViewFactory.createWebView(false);
         setWebView(web);
         loadData();
+        mIsLive = false;
     }
 
     @Override
@@ -125,10 +125,11 @@
             return super.saveState();
         }
 
-        mSavedState = new Bundle();
-        mSavedState = super.saveState();
-        mSavedState.putLong(SNAPSHOT_ID, mSnapshotId);
-        return mSavedState;
+        Bundle savedState = new Bundle();
+        savedState.putLong(SNAPSHOT_ID, mSnapshotId);
+        savedState.putLong(ID, getId());
+
+        return savedState;
     }
 
     public long getDateCreated() {
@@ -140,15 +141,6 @@
     }
 
     @Override
-    public void loadUrl(String url, Map<String, String> headers) {
-        if (!mIsLive) {
-            mIsLive = true;
-            getWebView().clearViewState();
-        }
-        super.loadUrl(url, headers);
-    }
-
-    @Override
     public boolean canGoBack() {
         return super.canGoBack() || mIsLive;
     }
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index a4cc47f..3fc6eb5 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -655,6 +655,8 @@
                 return;
             }
 
+
+
             final int idx = view.copyBackForwardList().getCurrentIndex();
             boolean bitmapExists = view.hasSnapshot(idx);
 
@@ -681,6 +683,11 @@
                 return;
             }
 
+            // prevent snapshot tab from commiting any history
+            if (isSnapshot()) {
+                return;
+            }
+
             mTabHistoryUpdateObservable.set(index);
             final int maxIdx = view.copyBackForwardList().getSize();
             final WebView wv = view;
