diff --git a/js/spniCore.js b/js/spniCore.js
index 7fd3fc12c876ca483928cb8a5a8d31b54e499d29..8757839db59decf681edf41812a9eca48cb51fcc 100644
--- a/js/spniCore.js
+++ b/js/spniCore.js
@@ -324,11 +324,18 @@ Player.prototype.resetState = function () {
         this.folders = appearance.folders;
         
         if (appearance.tags) {
-            var added_tags = appearance.tags.find('tag').map(function () {
-                return $(this).text();
-            }).get();
-            
-            Array.prototype.push.apply(this.tags, added_tags);
+            var alt_tags = appearance.tags.find('tag').each(function (idx, elem) {
+                var $elem = $(elem);
+                var tag = $elem.text();
+                var removed = $elem.attr('remove') || '';
+                if (removed.toLowerCase() === 'true') {
+                    if (this.tags.indexOf(tag) > 0) {
+                        this.tags.splice(this.tags.indexOf(tag), 1);
+                    }
+                } else {
+                    this.tags.push(tag);
+                }
+            }.bind(this));
         }
         
         if (appearance.id) {
@@ -497,7 +504,17 @@ Opponent.prototype.unloadAlternateCostume = function () {
     
     if (this.alt_costume.tags) {
         this.alt_costume.tags.find('tag').each(function (idx, elem) {
-            this.tags.splice(this.tags.indexOf($(elem).text()), 1);
+            var $elem = $(elem);
+            var tag = $elem.text();
+            var removed = $elem.attr('remove') || '';
+            if (removed.toLowerCase() === 'true') {
+                this.tags.push(tag);    // tag was previously removed, readd it
+            } else {
+                if (this.tags.indexOf(tag) > 0) {
+                    // remove added tag
+                    this.tags.splice(this.tags.indexOf(tag), 1);
+                }
+            }
         }.bind(this));
     }