diff --git a/js/spniCore.js b/js/spniCore.js
index d6de5c7f4aa9d99fd59cc6d28be4a6b6480630cf..12d6b32615562ebc907df49e7d4d5fda0683a3fb 100644
--- a/js/spniCore.js
+++ b/js/spniCore.js
@@ -575,6 +575,7 @@ function Opponent (id, $metaXml, status, releaseNumber) {
      */
     this.baseTags = $metaXml.find('tags').children().map(function() { return canonicalizeTag($(this).text()); }).get();
     this.updateTags();
+    this.searchTags = this.baseTags.slice();
     
     /* Attempt to preload this opponent's picture for selection. */
     new Image().src = 'opponents/'+id+'/'+this.image;
diff --git a/js/spniSelect.js b/js/spniSelect.js
index 0ffe065bd0246fba023a7a136389047972e0a2e4..687223e03f642ab5074b77172da6e006829007fb 100644
--- a/js/spniSelect.js
+++ b/js/spniSelect.js
@@ -586,7 +586,7 @@ function updateSelectableOpponents(autoclear) {
         }
 
         // filter by tag
-        if (tag && !opp.hasTag(tag)) {
+        if (tag && !(opp.searchTags && opp.searchTags.indexOf(canonicalizeTag(tag)) >= 0)) {
             return false;
         }
         
@@ -760,7 +760,7 @@ function updateSelectableGroups(screen) {
         })) return false;
 
         if (tag && !group.opponents.some(function(opp) {
-            return opp.hasTag(tag);
+            return opp.searchTags && opp.searchTags.indexOf(canonicalizeTag(tag)) >= 0;
         })) return false;
 
         if ((chosenGroupGender == 2 || chosenGroupGender == 3)