Index: lib/OpenLayers/Layer/Google.js
===================================================================
--- lib/OpenLayers/Layer/Google.js	(revision 4394)
+++ lib/OpenLayers/Layer/Google.js	(working copy)
@@ -103,22 +103,9 @@
             // create GMap, hide nav controls
             this.mapObject = new GMap2( this.div );
 
-            // move the ToS and branding stuff up to the pane
-            // thanks a *mil* Erik for thinking of this
-            var poweredBy = this.div.lastChild;
-            this.div.removeChild(poweredBy);
-            this.pane.appendChild(poweredBy);
-            poweredBy.className = "olLayerGooglePoweredBy gmnoprint";
-            poweredBy.style.left = "";
-            poweredBy.style.bottom = "";
+            // Move GMap's special divs to eventPane so they can be clicked.
+            this.moveSpecialDivsToEventPane();
 
-            var termsOfUse = this.div.lastChild;
-            this.div.removeChild(termsOfUse);
-            this.pane.appendChild(termsOfUse);
-            termsOfUse.className = "olLayerGoogleCopyright";
-            termsOfUse.style.right = "";
-            termsOfUse.style.bottom = "";
-
         } catch (e) {
             // do not crash
         }
@@ -157,6 +144,47 @@
     },
 
     /**
+     * Method: moveSpecialDivsToEventPane
+     * Move the "Powered By" and "Terms of Use" divs to the eventPane so that
+     *     the user will still be able to click on them.
+     */
+    moveSpecialDivsToEventPane: function() {
+        // move the ToS and branding stuff up to the pane
+        // thanks a *mil* Erik for thinking of this
+        var poweredBy = this.div.lastChild;
+        if (poweredBy) {
+            this.div.removeChild(poweredBy);
+            this.pane.appendChild(poweredBy);
+            poweredBy.className = "olLayerGooglePoweredBy gmnoprint";
+            poweredBy.style.left = "";
+            poweredBy.style.bottom = "";
+        } else {
+            var msg = "Google Maps has changed its internal " + 
+                "workings and has therefore caused an error in " +
+                "the OpenLayers.Layer.Google layer. " + 
+                "Specifically, OL was unable to find the " +
+                "'Powered By' div to move it to the eventPane.";
+            OpenLayers.Console.warn(msg);
+        }
+        
+        var termsOfUse = this.div.lastChild;
+        if (termsOfUse) {
+            this.div.removeChild(termsOfUse);
+            this.pane.appendChild(termsOfUse);
+            termsOfUse.className = "olLayerGoogleCopyright";
+            termsOfUse.style.right = "";
+            termsOfUse.style.bottom = "";
+        } else {
+            var msg = "Google Maps has changed its internal " + 
+                "workings and has therefore caused an error in " +
+                "the OpenLayers.Layer.Google layer. " + 
+                "Specifically, OL was unable to find the " +
+                "'Terms of Use' div to move it to the eventPane.";
+            OpenLayers.Console.warn(msg);
+        }
+    },
+
+    /**
      * APIMethod: onMapResize
      * 
      * Parameters:
@@ -273,12 +301,28 @@
                 var gPoint = this.fromLatLngToDivPixel(gLatLng);
       
                 // locate the sliding "Div" div
-                var div = this.getContainer().firstChild.firstChild;
+                var container = this.getContainer();
+
+                //it's the grandchild of the container that has the 
+                // offset information we need. if we can't find the 
+                // grandchild, we'll just return the divpx. not ideal, but
+                // yes better than a script error
+                if (container.firstChild && container.firstChild.firstChild) {
+                    var div = this.getContainer().firstChild.firstChild;
   
-                // adjust by the offset of "Div" and voila!
-                gPoint.x += div.offsetLeft;
-                gPoint.y += div.offsetTop;
-    
+                    // adjust by the offset of "Div" and voila!
+                    gPoint.x += div.offsetLeft;
+                    gPoint.y += div.offsetTop;
+                } else {
+                    var msg = "Google Maps has changed its internal " + 
+                        "workings and has therefore caused an error in " +
+                        "the OpenLayers.Layer.Google layer. " + 
+                        "Specifically, OL was unable to find the proper " +
+                        "grandchild of the container div to translate " +
+                        "LatLng to ContainerPixel.";
+                    OpenLayers.Console.warn(msg);
+                }
+
                 return gPoint;
             };
         }
