diff --git a/iron-icon.html b/iron-icon.html
index 71378a7..2430851 100644
--- a/iron-icon.html
+++ b/iron-icon.html
@@ -183,13 +183,20 @@
this._iconset.removeIcon(this);
}
} else if (this._iconsetName && this._meta) {
- this._iconset = /** @type {?Polymer.Iconset} */ (
- this._meta.byKey(this._iconsetName));
- if (this._iconset) {
- this._iconset.applyIcon(this, this._iconName, this.theme);
- this.unlisten(window, 'iron-iconset-added', '_updateIcon');
- } else {
- this.listen(window, 'iron-iconset-added', '_updateIcon');
+ // Since _updateIcon can be called multiple times, make sure we
+ // avoid cloning the SVG if the icon & theme haven't changed
+ if (this._iconName !== this._lastIconName ||
+ this.theme !== this._lastTheme) {
+ this._iconset = /** @type {?Polymer.Iconset} */ (
+ this._meta.byKey(this._iconsetName));
+ if (this._iconset) {
+ this._lastIconName = this._iconName;
+ this._lastTheme = this.theme;
+ this._iconset.applyIcon(this, this._iconName, this.theme);
+ this.unlisten(window, 'iron-iconset-added', '_updateIcon');
+ } else {
+ this.listen(window, 'iron-iconset-added', '_updateIcon');
+ }
}
}
} else {