diff --git a/gui/slick/interfaces/default/inc_qualityChooser.tmpl b/gui/slick/interfaces/default/inc_qualityChooser.tmpl
index 329879c96aeed47bc68d9185f4c5e47d7a6bd23a..569667d8e85735d8682ff6cc59088f580353695d 100644
--- a/gui/slick/interfaces/default/inc_qualityChooser.tmpl
+++ b/gui/slick/interfaces/default/inc_qualityChooser.tmpl
@@ -36,7 +36,7 @@
 
         <div style="text-align: left; float: left;">
             <h5>Archive</h4>
-            #set $bestQualityList = filter(lambda x: x > $Quality.SDTV and x < $Quality.UNKNOWN, $Quality.qualityStrings)
+            #set $bestQualityList = filter(lambda x: x >= $Quality.SDTV and x < $Quality.UNKNOWN, $Quality.qualityStrings)
             <select id="bestQualities" name="bestQualities" multiple="multiple" size="$len($bestQualityList)" class="form-control form-control-inline input-sm">
             #for $curQuality in sorted($bestQualityList):
                 <option value="$curQuality" #if $curQuality in $bestQualities then "selected=\"selected\"" else ""#>$Quality.qualityStrings[$curQuality]</option>
diff --git a/sickbeard/tv.py b/sickbeard/tv.py
index 4b8e0199d33e2d1fb4134b85f2b297e03e5ea400..727fb7a19fb103a3c1646361029333b7e6b171d0 100644
--- a/sickbeard/tv.py
+++ b/sickbeard/tv.py
@@ -1204,6 +1204,22 @@ class TVShow(object):
         return toReturn
 
 
+    def qualitiesToString(self, qualities=[]):
+        result = u''
+        for quality in qualities:
+            if Quality.qualityStrings.has_key(quality):
+                result += Quality.qualityStrings[quality] + u', '
+            else:
+                logger.log(u"Bad quality value: " + str(quality))
+
+        result = re.sub(', $', '', result)
+
+        if not len(result):
+            result = u'None'
+
+        return result
+
+
     def wantEpisode(self, season, episode, quality, manualSearch=False, downCurQuality=False):
 
         logger.log(u"Checking if found episode " + str(season) + "x" + str(episode) + " is wanted at quality " +
@@ -1211,8 +1227,8 @@ class TVShow(object):
 
         # if the quality isn't one we want under any circumstances then just say no
         anyQualities, bestQualities = Quality.splitQuality(self.quality)
-        logger.log(u"any,best = " + str(anyQualities) + " " + str(bestQualities) + " and found " + str(quality),
-                   logger.DEBUG)
+        logger.log(u"Any,Best = [ %s ] [ %s ] Found = [ %s ]" % (self.qualitiesToString(anyQualities),
+                   self.qualitiesToString(bestQualities), self.qualitiesToString([quality])), logger.DEBUG)
 
         if quality not in anyQualities + bestQualities:
             logger.log(u"Don't want this quality, ignoring found episode", logger.DEBUG)
@@ -1253,9 +1269,9 @@ class TVShow(object):
                 logger.log(u"Quality is on wanted list, need to check if it's better than existing quality",
                            logger.DEBUG)
 
-        # if we are re-downloading then we only want it if it's in our bestQualities list and better than what we have
-        if curStatus in Quality.DOWNLOADED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST and quality in bestQualities and quality > curQuality:
-            logger.log(u"Episode already exists but the found episode has better quality, getting found episode",
+        # if we are re-downloading then we only want it if it's in our bestQualities list and better than what we have, or we only have one bestQuality and we do not have that quality yet
+        if curStatus in Quality.DOWNLOADED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST and quality in bestQualities and (quality > curQuality or (quality != curQuality and len(bestQualities) == 1)) :
+            logger.log(u"Episode already exists but the found episode quality is wanted more, getting found episode",
                        logger.DEBUG)
             return True
         elif curStatus == Quality.UNKNOWN and manualSearch: