diff --git a/src/ol/renderer/webgl/webgltilelayerrenderer.js b/src/ol/renderer/webgl/webgltilelayerrenderer.js
index <HASH>..<HASH> 100644
--- a/src/ol/renderer/webgl/webgltilelayerrenderer.js
+++ b/src/ol/renderer/webgl/webgltilelayerrenderer.js
@@ -277,9 +277,14 @@ ol.renderer.webgl.TileLayer.prototype.getTexture = function() {
 
 
 /**
+ * @param {goog.events.Event} event Event.
  * @protected
  */
-ol.renderer.webgl.TileLayer.prototype.handleTileChange = function() {
+ol.renderer.webgl.TileLayer.prototype.handleTileChange = function(event) {
+  var tile = /** @type {ol.Tile} */ (event.target);
+  var tileKey = goog.getUid(tile);
+  goog.asserts.assert(tileKey in this.tileChangeListenerKeys_);
+  delete this.tileChangeListenerKeys_[tileKey];
   this.dispatchChangeEvent();
 };
Remove tile change listeners when they have fired, thanks @fredj