diff --git a/src/com/android/browser/GeolocationPermissionsPrompt.java b/src/com/android/browser/GeolocationPermissionsPrompt.java
index 982aa89..95c5415 100755
--- a/src/com/android/browser/GeolocationPermissionsPrompt.java
+++ b/src/com/android/browser/GeolocationPermissionsPrompt.java
@@ -46,15 +46,26 @@
 
     public GeolocationPermissionsPrompt(Context context, AttributeSet attrs) {
         super(context, attrs);
-        LayoutInflater factory = LayoutInflater.from(context);
-        factory.inflate(R.layout.geolocation_permissions_prompt, this);
+    }
 
+    void init() {
         mInner = (LinearLayout) findViewById(R.id.inner);
         mMessage = (TextView) findViewById(R.id.message);
         mShareButton = (Button) findViewById(R.id.share_button);
         mDontShareButton = (Button) findViewById(R.id.dont_share_button);
         mRemember = (CheckBox) findViewById(R.id.remember);
-        setButtonClickListeners();
+
+        final GeolocationPermissionsPrompt me = this;
+        mShareButton.setOnClickListener(new View.OnClickListener() {
+            public void onClick(View v) {
+                me.handleButtonClick(true);
+            }
+        });
+        mDontShareButton.setOnClickListener(new View.OnClickListener() {
+            public void onClick(View v) {
+                me.handleButtonClick(false);
+            }
+        });
     }
 
     /**
@@ -79,23 +90,6 @@
     }
 
     /**
-     * Sets the on click listeners for the buttons.
-     */
-    private void setButtonClickListeners() {
-        final GeolocationPermissionsPrompt me = this;
-        mShareButton.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                me.handleButtonClick(true);
-            }
-        });
-        mDontShareButton.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                me.handleButtonClick(false);
-            }
-        });
-    }
-
-    /**
      * Handles a click on one the buttons by invoking the callback.
      */
     private void handleButtonClick(boolean allow) {
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 8c2371a..01424e2 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -48,6 +48,7 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.ViewStub;
 import android.view.View.OnClickListener;
 import android.webkit.ConsoleMessage;
 import android.webkit.CookieSyncManager;
@@ -1097,7 +1098,7 @@
         public void onGeolocationPermissionsShowPrompt(String origin,
                 GeolocationPermissions.Callback callback) {
             if (mInForeground) {
-                mGeolocationPermissionsPrompt.show(origin, callback);
+                getGeolocationPermissionsPrompt().show(origin, callback);
             }
         }
 
@@ -1106,7 +1107,7 @@
          */
         @Override
         public void onGeolocationPermissionsHidePrompt() {
-            if (mInForeground) {
+            if (mInForeground && mGeolocationPermissionsPrompt != null) {
                 mGeolocationPermissionsPrompt.hide();
             }
         }
@@ -1309,10 +1310,6 @@
         // WebView, as well as any other UI elements associated with the tab.
         mContainer = mInflateService.inflate(R.layout.tab, null);
 
-        mGeolocationPermissionsPrompt =
-            (GeolocationPermissionsPrompt) mContainer.findViewById(
-                R.id.geolocation_permissions_prompt);
-
         mDownloadListener = new DownloadListener() {
             public void onDownloadStart(String url, String userAgent,
                     String contentDisposition, String mimetype,
@@ -1362,7 +1359,9 @@
         }
         // If the WebView is changing, the page will be reloaded, so any ongoing
         // Geolocation permission requests are void.
-        mGeolocationPermissionsPrompt.hide();
+        if (mGeolocationPermissionsPrompt != null) {
+            mGeolocationPermissionsPrompt.hide();
+        }
 
         // Just remove the old one.
         FrameLayout wrapper =
@@ -1661,6 +1660,13 @@
      * @return The geolocation permissions prompt for this tab.
      */
     GeolocationPermissionsPrompt getGeolocationPermissionsPrompt() {
+        if (mGeolocationPermissionsPrompt == null) {
+            ViewStub stub = (ViewStub) mContainer
+                    .findViewById(R.id.geolocation_permissions_prompt);
+            mGeolocationPermissionsPrompt = (GeolocationPermissionsPrompt) stub
+                    .inflate();
+            mGeolocationPermissionsPrompt.init();
+        }
         return mGeolocationPermissionsPrompt;
     }
 
