 <p>The createPolygon function needs to return the resulting polygon to GeoXml3 so it can manage it.</p> <pre><code>function addMyPolygon(placemark) { var polygon = geoXml.createPolygon(placemark); google.maps.event.addListener(polygon, 'click', function(event) { var myLatlng = event.latLng; infowindow.setContent("&lt;b&gt;"+placemark.name+"&lt;/b&gt;&lt;br&gt;"+placemark.description+"&lt;br&gt;"+event.latLng.toUrlValue(6)); infowindow.setPosition(myLatlng); infowindow.open(map); }); return polygon; }; </code></pre> <p>Also, if you are going to use <code>event</code> inside the polygon 'click' listener it needs to be defined.</p> <p><a href="http://www.geocodezip.com/geoxml3_test/v3_SO_geoxml3_createPolygon.html" rel="nofollow">working example</a></p>