diff --git a/dist/iwmlib.3rdparty.js b/dist/iwmlib.3rdparty.js
index ee85538..6b23a37 100644
--- a/dist/iwmlib.3rdparty.js
+++ b/dist/iwmlib.3rdparty.js
@@ -92733,86 +92733,86 @@ module.exports = function (_Plugin) {
 
 },{}]},{},[13]);
 
-/*jslint plusplus: true, vars: true, indent: 2 */
-/* convertPointFromPageToNode.js from
- 
-
-  convertPointFromPageToNode(element, event.pageX, event.pageY) -> {x, y}
-  returns coordinate in element's local coordinate system (works properly
-  with css transforms without perspective projection)
-  convertPointFromNodeToPage(element, offsetX, offsetY) -> {x, y}
-  returns coordinate in window's coordinate system (works properly with
-  css transforms without perspective projection)
-*/
-
-(function () {
-    'use strict'
-
-    var I = (typeof(WebKitCSSMatrix) == 'undefined') ? new DOMMatrix() : new WebKitCSSMatrix()
-
-    function Point(x, y, z) {
-        this.x = x
-        this.y = y
-        this.z = z
-    }
-
-    Point.prototype.transformBy = function (matrix) {
-        var tmp = matrix.multiply(I.translate(this.x, this.y, this.z))
-        return new Point(tmp.m41, tmp.m42, tmp.m43)
-    }
-
-    function createMatrix(transform) {
-        try {
-            return (typeof(WebKitCSSMatrix) == 'undefined') ? new DOMMatrix(transform) : new WebKitCSSMatrix(transform)
-        } catch(e) {
-            console.warn(transform)
-            console.warn(e.toString())
-            return I
-        }
-    }
-
-    function getTransformationMatrix(element) {
-        var transformationMatrix = I
-        var x = element
-
-        while (x != undefined && x !== x.ownerDocument.documentElement) {
-            var computedStyle = window.getComputedStyle(x, undefined)
-            var transform = computedStyle.transform || 'none'
-            var c = transform === 'none' ? I : createMatrix(transform)
-            transformationMatrix = c.multiply(transformationMatrix)
-            x = x.parentNode
-        }
-
-        var w = element.offsetWidth
-        var h = element.offsetHeight
-        var i = 4
-        var left = +Infinity
-        var top = +Infinity
-        while (--i >= 0) {
-            var p = new Point(i === 0 || i === 1 ? 0 : w, i === 0 || i === 3 ? 0 : h,
-                        0).transformBy(transformationMatrix)
-            if (p.x < left) {
-                left = p.x
-            }
-            if (p.y < top) {
-                top = p.y
-            }
-        }
-        var rect = element.getBoundingClientRect()
-        transformationMatrix = I.translate(window.pageXOffset + rect.left - left,
-                                        window.pageYOffset + rect.top - top, 0)
-                            .multiply(transformationMatrix)
-        return transformationMatrix
-    }
-
-    window.convertPointFromPageToNode = function (element, pageX, pageY) {
-        return new Point(pageX, pageY, 0).transformBy(
-                                    getTransformationMatrix(element).inverse())
-    }
-
-    window.convertPointFromNodeToPage = function (element, offsetX, offsetY) {
-        return new Point(offsetX, offsetY, 0).transformBy(
-                                    getTransformationMatrix(element))
-    }
-
-}())
+/*jslint plusplus: true, vars: true, indent: 2 */
+/* convertPointFromPageToNode.js from
+ 
+
+  convertPointFromPageToNode(element, event.pageX, event.pageY) -> {x, y}
+  returns coordinate in element's local coordinate system (works properly
+  with css transforms without perspective projection)
+  convertPointFromNodeToPage(element, offsetX, offsetY) -> {x, y}
+  returns coordinate in window's coordinate system (works properly with
+  css transforms without perspective projection)
+*/
+
+(function () {
+    'use strict'
+
+    var I = (typeof(WebKitCSSMatrix) == 'undefined') ? new DOMMatrix() : new WebKitCSSMatrix()
+
+    function Point(x, y, z) {
+        this.x = x
+        this.y = y
+        this.z = z
+    }
+
+    Point.prototype.transformBy = function (matrix) {
+        var tmp = matrix.multiply(I.translate(this.x, this.y, this.z))
+        return new Point(tmp.m41, tmp.m42, tmp.m43)
+    }
+
+    function createMatrix(transform) {
+        try {
+            return (typeof(WebKitCSSMatrix) == 'undefined') ? new DOMMatrix(transform) : new WebKitCSSMatrix(transform)
+        } catch(e) {
+            console.warn(transform)
+            console.warn(e.toString())
+            return I
+        }
+    }
+
+    function getTransformationMatrix(element) {
+        var transformationMatrix = I
+        var x = element
+
+        while (x != undefined && x !== x.ownerDocument.documentElement) {
+            var computedStyle = window.getComputedStyle(x, undefined)
+            var transform = computedStyle.transform || 'none'
+            var c = transform === 'none' ? I : createMatrix(transform)
+            transformationMatrix = c.multiply(transformationMatrix)
+            x = x.parentNode
+        }
+
+        var w = element.offsetWidth
+        var h = element.offsetHeight
+        var i = 4
+        var left = +Infinity
+        var top = +Infinity
+        while (--i >= 0) {
+            var p = new Point(i === 0 || i === 1 ? 0 : w, i === 0 || i === 3 ? 0 : h,
+                        0).transformBy(transformationMatrix)
+            if (p.x < left) {
+                left = p.x
+            }
+            if (p.y < top) {
+                top = p.y
+            }
+        }
+        var rect = element.getBoundingClientRect()
+        transformationMatrix = I.translate(window.pageXOffset + rect.left - left,
+                                        window.pageYOffset + rect.top - top, 0)
+                            .multiply(transformationMatrix)
+        return transformationMatrix
+    }
+
+    window.convertPointFromPageToNode = function (element, pageX, pageY) {
+        return new Point(pageX, pageY, 0).transformBy(
+                                    getTransformationMatrix(element).inverse())
+    }
+
+    window.convertPointFromNodeToPage = function (element, offsetX, offsetY) {
+        return new Point(offsetX, offsetY, 0).transformBy(
+                                    getTransformationMatrix(element))
+    }
+
+}())
diff --git a/dist/iwmlib.js b/dist/iwmlib.js
index 4e0dbb3..968a683 100644
--- a/dist/iwmlib.js
+++ b/dist/iwmlib.js
@@ -2336,8 +2336,6 @@
         onMouseWheel(event) {
             if (this.capture(event) && this.target.onMouseWheel) {
                 this.target.onMouseWheel(event);
-            } else {
-                //console.warn('Target has no onMouseWheel callback')
             }
         }
 
@@ -2531,8 +2529,6 @@
                 }
                 if (this.target.onMouseWheel) {
                     this.target.onMouseWheel(event);
-                } else {
-                    //console.warn('Target has no onMouseWheel callback', this.target)
                 }
             }
         }
@@ -4206,10 +4202,7 @@
                 let event = new ResizeEvent(this, { width: w, height: h });
                 this.onResize(event);
             }
-            if (this.resizeButton != null) {
-                // this.resizeButton.style.width = 50/this.scale+"px"
-                // this.resizeButton.style.height = 50/this.scale+"px"
-            }
+            if (this.resizeButton != null) ;
         }
 
         startResize(e) {
diff --git a/dist/iwmlib.pixi.js b/dist/iwmlib.pixi.js
index bf30c2a..968cf84 100644
--- a/dist/iwmlib.pixi.js
+++ b/dist/iwmlib.pixi.js
@@ -5500,8 +5500,6 @@
         onMouseWheel(event) {
             if (this.capture(event) && this.target.onMouseWheel) {
                 this.target.onMouseWheel(event);
-            } else {
-                //console.warn('Target has no onMouseWheel callback')
             }
         }
 
@@ -5695,8 +5693,6 @@
                 }
                 if (this.target.onMouseWheel) {
                     this.target.onMouseWheel(event);
-                } else {
-                    //console.warn('Target has no onMouseWheel callback', this.target)
                 }
             }
         }
@@ -7208,10 +7204,7 @@
                 let event = new ResizeEvent(this, { width: w, height: h });
                 this.onResize(event);
             }
-            if (this.resizeButton != null) {
-                // this.resizeButton.style.width = 50/this.scale+"px"
-                // this.resizeButton.style.height = 50/this.scale+"px"
-            }
+            if (this.resizeButton != null) ;
         }
 
         startResize(e) {
@@ -7806,8 +7799,8 @@
     const registeredTiles = new Map();
     const pendingTiles = new Map();
     /** Implements a baseTexture cache. The last textures are kept for reuse  */
-    const keepBaseTextures = 0;
-    const keptBaseTextures = [];
+    let keepTextures = 0;
+    const keptTextures = [];
 
     /** The current Tile implementation simply uses PIXI.Sprites.
      *
@@ -7828,8 +7821,8 @@
          * @param {*} value
          * @memberof Tile
          */
-        static enableKeepBaseTextures(value = 1000) {
-            keepBaseTextures = value;
+        static enableKeepTextures(value = 1000) {
+            keepTextures = value;
         }
 
         /**
@@ -7852,13 +7845,21 @@
          * Returns true iff the url is pending
          *
          * @static
+         * @param {*} url
          * @returns
          * @memberof Tile
          */
-        static isPending() {
+        static isPending(url) {
             return pendingTiles.has(url) && pendingTiles.get(url) > 0
         }
 
+        static isObsolete(url) {
+            if (registeredTiles.has(url) && registeredTiles.get(url) > 0) {
+                return false
+            }
+            return true
+        }
+
         /**
          * Removes the given url from pending urls.
          *
@@ -7924,6 +7925,7 @@
             tiles.delete(this);
             if (tiles.size == 0) {
                 registeredTiles.delete(this.url);
+                return 0
             }
             return tiles.size
         }
@@ -7937,25 +7939,24 @@
         destroy(options, debug = true) {
             let count = this.unregister();
 
-            if (keepBaseTextures > 0) {
-                keptBaseTextures.push({ url: this.url, texture: this.texture.baseTexture});
+            if (keepTextures > 0) {
+                keptTextures.push({ url: this.url, texture: this.texture});
 
                 let opts = { children: true, texture: false, baseTexture: false };
                 if (debug) console.log("Tile.destroy", registeredTiles.size, opts);
                 super.destroy(opts);
 
-                while(keptBaseTextures.length > keepBaseTextures) {
-                    let {url, texture} = keptBaseTextures.shift();
-                    let tiles = registeredTiles.get(url);
-                    if (tiles.size > 0 && !Tile.isPending(url)) {
-                        texture.destroy();
-                        if (debug) console.log("Destroying baseTexture", url);
+                while(keptTextures.length > keepTextures) {
+                    let {url, texture} = keptTextures.shift(); 
+                    if (Tile.isObsolete(url)) {
+                        texture.destroy(true); // Destroy base as well
+                        if (debug) console.log("Destroying texture and baseTexture", url);
                     }
                 }
             }
             else {
                 // No longer registered and not pending
-                if (count <= 0 && !Tile.isPending(url)) {
+                if (count <= 0 && !Tile.isPending(this.url)) {
                     let opts = { children: true, texture: true, baseTexture: true };
                     super.destroy(opts);
                     if (debug) console.log("Tile.destroy", registeredTiles.size, opts);
@@ -7971,7 +7972,6 @@
                     this.visible = false;
                 }
             }
-            
         }
 
         /**
@@ -7992,6 +7992,16 @@
             return null
         }
 
+        /**
+         * Texture received too late. We do not need it.
+         * @param {*} url 
+         * @param {*} texture 
+         */
+        static lateTexture(url, texture) {
+            let destroyBase = !registeredTiles.has(url);
+            texture.destroy(destroyBase);
+        }
+
         static printInfos() {
             let references = new Map();
             let multiples = 0;
@@ -8166,8 +8176,8 @@
         _onLoaded(loader, resource) {
             if (this.destroyed) {
                 let texture = resource.texture;
-                let destroyBase = !deepZoomTileCache.has(resource.url);
-                texture.destroy(destroyBase);
+                let url = resource.url;
+                Tile.lateTexture(url, texture);
                 console.warn("Received resource after destroy", texture);
                 return
             }
diff --git a/lib/pixi/thumbnail.png b/lib/pixi/thumbnail.png
index faf9b2e..3874702 100644
Binary files a/lib/pixi/thumbnail.png and b/lib/pixi/thumbnail.png differ
diff --git a/lib/pixi/thumbnails/badge.png b/lib/pixi/thumbnails/badge.png
index b1764f8..56c0d6b 100644
Binary files a/lib/pixi/thumbnails/badge.png and b/lib/pixi/thumbnails/badge.png differ
diff --git a/lib/pixi/thumbnails/button.png b/lib/pixi/thumbnails/button.png
index b557949..f27540e 100644
Binary files a/lib/pixi/thumbnails/button.png and b/lib/pixi/thumbnails/button.png differ
diff --git a/lib/pixi/thumbnails/buttongroup.png b/lib/pixi/thumbnails/buttongroup.png
index 9f69990..318bd83 100644
Binary files a/lib/pixi/thumbnails/buttongroup.png and b/lib/pixi/thumbnails/buttongroup.png differ
diff --git a/lib/pixi/thumbnails/coordinates.png b/lib/pixi/thumbnails/coordinates.png
index f37c3d0..de5cfb6 100644
Binary files a/lib/pixi/thumbnails/coordinates.png and b/lib/pixi/thumbnails/coordinates.png differ
diff --git a/lib/pixi/thumbnails/flippable.png b/lib/pixi/thumbnails/flippable.png
index 940cf9e..d26099d 100644
Binary files a/lib/pixi/thumbnails/flippable.png and b/lib/pixi/thumbnails/flippable.png differ
diff --git a/lib/pixi/thumbnails/popup.png b/lib/pixi/thumbnails/popup.png
index b23df46..f0aa561 100644
Binary files a/lib/pixi/thumbnails/popup.png and b/lib/pixi/thumbnails/popup.png differ
diff --git a/lib/pixi/thumbnails/scatter.png b/lib/pixi/thumbnails/scatter.png
index 1a610bf..58f7cee 100644
Binary files a/lib/pixi/thumbnails/scatter.png and b/lib/pixi/thumbnails/scatter.png differ
diff --git a/lib/pixi/thumbnails/slider.png b/lib/pixi/thumbnails/slider.png
index 74ee176..d24efb3 100644
Binary files a/lib/pixi/thumbnails/slider.png and b/lib/pixi/thumbnails/slider.png differ
diff --git a/lib/pixi/thumbnails/volatile.png b/lib/pixi/thumbnails/volatile.png
index e2ffaf8..ac1da17 100644
Binary files a/lib/pixi/thumbnails/volatile.png and b/lib/pixi/thumbnails/volatile.png differ
diff --git a/lib/thumbnail.png b/lib/thumbnail.png
index 02ac0b3..196e6eb 100644
Binary files a/lib/thumbnail.png and b/lib/thumbnail.png differ
diff --git a/lib/thumbnails/events.png b/lib/thumbnails/events.png
index b2fce42..ceea6d1 100644
Binary files a/lib/thumbnails/events.png and b/lib/thumbnails/events.png differ
diff --git a/lib/thumbnails/popup.png b/lib/thumbnails/popup.png
index 9ce33f6..8475e99 100644
Binary files a/lib/thumbnails/popup.png and b/lib/thumbnails/popup.png differ