diff --git a/sickbeard/tv.py b/sickbeard/tv.py
index ac9d597d918b0d9eb5fc724c9be37e8452643310..93ef682dbc8324b46d46c3af1cba6da17157c016 100644
--- a/sickbeard/tv.py
+++ b/sickbeard/tv.py
@@ -1298,37 +1298,23 @@ class TVShow(object):
             return Overview.SKIPPED
         elif epStatus in Quality.ARCHIVED:
             return Overview.GOOD
-        elif epStatus in Quality.DOWNLOADED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.FAILED + Quality.SNATCHED_BEST:
-
-            _, bestQualities = Quality.splitQuality(self.quality)  # @UnusedVariable
-            if bestQualities:
-                maxBestQuality = max(bestQualities)
-                minBestQuality = min(bestQualities)
-            else:
-                maxBestQuality = None
-                minBestQuality = None
-
+        elif epStatus in Quality.FAILED:
+            return Overview.WANTED
+        elif epStatus in Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST:
+            return Overview.SNATCHED
+        elif epStatus in Quality.DOWNLOADED:
+            anyQualities, bestQualities = Quality.splitQuality(self.quality)  # @UnusedVariable
             epStatus, curQuality = Quality.splitCompositeStatus(epStatus)
 
-            if epStatus == FAILED:
-                return Overview.WANTED
-            if epStatus == DOWNLOADED and curQuality == Quality.UNKNOWN:
-                return Overview.QUAL
-            elif epStatus in (SNATCHED, SNATCHED_PROPER, SNATCHED_BEST):
-                return Overview.SNATCHED
-            # if they don't want re-downloads then we call it good if they have anything
-            elif maxBestQuality is None:
-                return Overview.GOOD
-            # if the want only first match and already have one call it good
-            elif self.archive_firstmatch and curQuality in bestQualities:
-                return Overview.GOOD
-            # if they want only first match and current quality is higher than minimal best quality call it good
-            elif self.archive_firstmatch and minBestQuality is not None and curQuality > minBestQuality:
+            if curQuality not in anyQualities + bestQualities:
+                if curQuality != Quality.UNKNOWN and curQuality > max(anyQualities):
+                    return Overview.GOOD
+                else:
+                    return Overview.QUAL
+            elif self.archive_firstmatch:
                 return Overview.GOOD
-            # if they have one but it's not the best they want then mark it as qual
-            elif curQuality < maxBestQuality:
+            elif bestQualities and curQuality not in bestQualities:
                 return Overview.QUAL
-            # if it's >= maxBestQuality then it's good
             else:
                 return Overview.GOOD