diff --git a/gui/slick/images/providers/animenzb.gif b/gui/slick/images/providers/animenzb.gif
index 9fa65fe495d7885f6f02b96ee3ff8e91511ddba8..6debf8569013f891b439665645115bb2c997379c 100644
Binary files a/gui/slick/images/providers/animenzb.gif and b/gui/slick/images/providers/animenzb.gif differ
diff --git a/gui/slick/images/providers/api_dognzb_cr.png b/gui/slick/images/providers/api_dognzb_cr.png
new file mode 100644
index 0000000000000000000000000000000000000000..f99e0d6a696d62f519360d51e15f99367e549ae0
Binary files /dev/null and b/gui/slick/images/providers/api_dognzb_cr.png differ
diff --git a/gui/slick/images/providers/drunkenslug.png b/gui/slick/images/providers/drunkenslug.png
new file mode 100644
index 0000000000000000000000000000000000000000..a3e8188960748753ebcc19f0f0cae4dd4104693d
Binary files /dev/null and b/gui/slick/images/providers/drunkenslug.png differ
diff --git a/gui/slick/images/providers/drunkenslug_com.png b/gui/slick/images/providers/drunkenslug_com.png
new file mode 100644
index 0000000000000000000000000000000000000000..a3e8188960748753ebcc19f0f0cae4dd4104693d
Binary files /dev/null and b/gui/slick/images/providers/drunkenslug_com.png differ
diff --git a/gui/slick/images/providers/dusky_deepcave.png b/gui/slick/images/providers/dusky_deepcave.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b41c190b812bde0be1730e2cd1601521b0a26cc
Binary files /dev/null and b/gui/slick/images/providers/dusky_deepcave.png differ
diff --git a/gui/slick/images/providers/dusky_deepcave_net.png b/gui/slick/images/providers/dusky_deepcave_net.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b41c190b812bde0be1730e2cd1601521b0a26cc
Binary files /dev/null and b/gui/slick/images/providers/dusky_deepcave_net.png differ
diff --git a/gui/slick/images/providers/nzb_abbeygirl.png b/gui/slick/images/providers/nzb_abbeygirl.png
new file mode 100644
index 0000000000000000000000000000000000000000..00661132caede706c761729411d775dc48a81bb7
Binary files /dev/null and b/gui/slick/images/providers/nzb_abbeygirl.png differ
diff --git a/gui/slick/images/providers/nzb_abbeygirl_co_uk.png b/gui/slick/images/providers/nzb_abbeygirl_co_uk.png
new file mode 100644
index 0000000000000000000000000000000000000000..00661132caede706c761729411d775dc48a81bb7
Binary files /dev/null and b/gui/slick/images/providers/nzb_abbeygirl_co_uk.png differ
diff --git a/gui/slick/images/providers/nzb_ag.png b/gui/slick/images/providers/nzb_ag.png
new file mode 100644
index 0000000000000000000000000000000000000000..356386a0dd1c6fc18f4e2abe5fdc3eada5bb7369
Binary files /dev/null and b/gui/slick/images/providers/nzb_ag.png differ
diff --git a/gui/slick/images/providers/nzbndx.png b/gui/slick/images/providers/nzbndx.png
new file mode 100644
index 0000000000000000000000000000000000000000..260fbed4980e1878c7e9fbc569f2a26f571f996d
Binary files /dev/null and b/gui/slick/images/providers/nzbndx.png differ
diff --git a/gui/slick/images/providers/nzbndx_com.png b/gui/slick/images/providers/nzbndx_com.png
new file mode 100644
index 0000000000000000000000000000000000000000..260fbed4980e1878c7e9fbc569f2a26f571f996d
Binary files /dev/null and b/gui/slick/images/providers/nzbndx_com.png differ
diff --git a/gui/slick/images/providers/nzbs4u.png b/gui/slick/images/providers/nzbs4u.png
new file mode 100644
index 0000000000000000000000000000000000000000..b2d709be95e5c81164609ff22f5d9f0b39a89ece
Binary files /dev/null and b/gui/slick/images/providers/nzbs4u.png differ
diff --git a/gui/slick/images/providers/nzbs4u_net.png b/gui/slick/images/providers/nzbs4u_net.png
new file mode 100644
index 0000000000000000000000000000000000000000..b2d709be95e5c81164609ff22f5d9f0b39a89ece
Binary files /dev/null and b/gui/slick/images/providers/nzbs4u_net.png differ
diff --git a/gui/slick/images/providers/qoqmovies.png b/gui/slick/images/providers/qoqmovies.png
new file mode 100644
index 0000000000000000000000000000000000000000..b2d709be95e5c81164609ff22f5d9f0b39a89ece
Binary files /dev/null and b/gui/slick/images/providers/qoqmovies.png differ
diff --git a/gui/slick/images/providers/qoqmovies_com.png b/gui/slick/images/providers/qoqmovies_com.png
new file mode 100644
index 0000000000000000000000000000000000000000..b2d709be95e5c81164609ff22f5d9f0b39a89ece
Binary files /dev/null and b/gui/slick/images/providers/qoqmovies_com.png differ
diff --git a/gui/slick/images/providers/spots4u.png b/gui/slick/images/providers/spots4u.png
new file mode 100644
index 0000000000000000000000000000000000000000..b2d709be95e5c81164609ff22f5d9f0b39a89ece
Binary files /dev/null and b/gui/slick/images/providers/spots4u.png differ
diff --git a/gui/slick/images/providers/spots4u_nl.png b/gui/slick/images/providers/spots4u_nl.png
new file mode 100644
index 0000000000000000000000000000000000000000..b2d709be95e5c81164609ff22f5d9f0b39a89ece
Binary files /dev/null and b/gui/slick/images/providers/spots4u_nl.png differ
diff --git a/gui/slick/interfaces/default/displayShow.tmpl b/gui/slick/interfaces/default/displayShow.tmpl
index b3c9f04766989d7b1cb5f202cafb7dc9e7311dcd..fc40c90b53a170737af9cd8caf98a6de06430e90 100644
--- a/gui/slick/interfaces/default/displayShow.tmpl
+++ b/gui/slick/interfaces/default/displayShow.tmpl
@@ -344,7 +344,6 @@
 
 <table #if not $show.is_anime then "id=\"showTable\"" else "id=\"animeTable\""# class="displayShowTable display_show" cellspacing="0" border="0" cellpadding="0">
 #set $curSeason = -1
-#set $seasonCount = 0
 #set $odd = 0
     #for $epResult in $sqlResults:
         #set $epStr = str($epResult["season"]) + "x" + str($epResult["episode"])
@@ -408,10 +407,25 @@
                 <th data-sorter="false" class="col-search">Search</th>        
         </tr>
     </thead>            
-    <tbody class="tablesorter-no-sort">      
-        <tr>
-            <th class="row-seasonheader displayShowTable" colspan="13" style="width: auto;">          
-                <h3><a name="season-$epResult["season"]"></a>#if int($epResult["season"]) == 0 then "Specials" else "Season " + str($epResult["season"])#</h3>
+    <tbody class="tablesorter-no-sort">
+        <tr style="height: 60px;">
+            <th class="row-seasonheader displayShowTable" colspan="13" style="vertical-align: bottom; width: auto;">
+                <h3 style="display: inline;"><a name="season-$epResult["season"]"></a>#if int($epResult["season"]) == 0 then "Specials" else "Season " + str($epResult["season"])#</h3>
+                #if $sickbeard.DISPLAY_ALL_SEASONS == False:
+                    <button id="showseason-$epResult['season']" type="button" class="btn btn-xs pull-right" data-toggle="collapse" data-target="#collapseSeason-$epResult['season']">Show Episodes</button>
+                    <script type="text/javascript">
+                    <!--
+                        \$(function() {
+                            \$('#collapseSeason-$epResult['season']').on('hide.bs.collapse', function () {
+                                \$('#showseason-$epResult['season']').text('Show Episodes');
+                            })
+                            \$('#collapseSeason-$epResult['season']').on('show.bs.collapse', function () {
+                                \$('#showseason-$epResult['season']').text('Hide Episodes');
+                            })
+                        });
+                    //-->
+                    </script>
+                #end if
             </th>
         </tr>
     </tbody>
@@ -435,28 +449,25 @@
         </tr>
             #else:
     </tbody>
-    <tbody class="tablesorter-no-sort">       
-        <tr>
-                <th class="row-seasonheader displayShowTable" colspan="13" style="width: auto;">
-                    <div class="pull-left"> <h3><a name="season-$epResult["season"]"></a>#if int($epResult["season"]) == 0 then "Specials" else "Season " + str($epResult["season"])#</h3></div>
-                #if $sickbeard.DISPLAY_ALL_SEASONS == False and $seasonCount >= 1:
-                    <div class="pull-right">
-                        <button id="showseason-$epResult['season']" type="button" class="btn btn-xs pull-right" data-toggle="collapse" data-target="#collapseSeason-$epResult['season']"><span class="sgicon-arrowdown"></span> Show Episodes</button>
+    <tbody class="tablesorter-no-sort">
+        <tr style="height: 60px;">
+            <th class="row-seasonheader displayShowTable" colspan="13" style="vertical-align: bottom; width: auto;">
+                <h3 style="display: inline;"><a name="season-$epResult["season"]"></a>#if int($epResult["season"]) == 0 then "Specials" else "Season " + str($epResult["season"])#</h3>
+                #if $sickbeard.DISPLAY_ALL_SEASONS == False:
+                    <button id="showseason-$epResult['season']" type="button" class="btn btn-xs pull-right" data-toggle="collapse" data-target="#collapseSeason-$epResult['season']">Show Episodes</button>
                     <script type="text/javascript">
                     <!--
                         \$(function() {
                             \$('#collapseSeason-$epResult['season']').on('hide.bs.collapse', function () {
-                                \$('#showseason-$epResult['season']').html('<span class="sgicon-arrowdown"></span> Show Episodes');
+                                \$('#showseason-$epResult['season']').text('Show Episodes');
                             })
                             \$('#collapseSeason-$epResult['season']').on('show.bs.collapse', function () {
-                                \$('#showseason-$epResult['season']').html('<span class="sgicon-arrowup"></span> Hide Episodes');
+                                \$('#showseason-$epResult['season']').text('Hide Episodes');
                             })
                         });
                     //-->
                     </script>
-                    </div>                    
                 #end if
-
             </th>
         </tr>
     </tbody>
@@ -480,9 +491,8 @@
         </tr>                    
             #end if
     </tbody>
-                #set $seasonCount = $seasonCount + 1
-                #if $sickbeard.DISPLAY_ALL_SEASONS == False and $seasonCount >= 2:
-    <tbody class="collapse" id="collapseSeason-$epResult['season']">
+                #if $sickbeard.DISPLAY_ALL_SEASONS == False:
+    <tbody class="collapse#if $curSeason == -1 then ' in' else ''#" id="collapseSeason-$epResult['season']">
                 #else
     <tbody>
                 #end if  
diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index 4ee1a49d8f6e95a3682747a87c51dc27dfdf4f62..ccbe9686e377424713739e70d93dbfb3b236fd31 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -1333,53 +1333,6 @@ def _setUpSession(session, headers):
 
     return session
 
-def headURL(url, params=None, headers={}, timeout=30, session=None, json=False, proxyGlypeProxySSLwarning=None):
-    """
-    Checks if URL is valid, without reading it
-    """
-
-    session = _setUpSession(session, headers)
-    session.params = params
-
-    try:
-        resp = session.head(url, timeout=timeout, allow_redirects=True, verify=session.verify)
-
-        if not resp.ok:
-            logger.log(u"Requested headURL " + url + " returned status code is " + str(
-                resp.status_code) + ': ' + codeDescription(resp.status_code), logger.DEBUG)
-            return False
-
-        if proxyGlypeProxySSLwarning is not None:
-            if re.search('The site you are attempting to browse is on a secure connection', resp.text):
-                resp = session.head(proxyGlypeProxySSLwarning, timeout=timeout, allow_redirects=True, verify=session.verify)
-
-                if not resp.ok:
-                    logger.log(u"GlypeProxySSLwarning: Requested headURL " + url + " returned status code is " + str(
-                        resp.status_code) + ': ' + codeDescription(resp.status_code), logger.DEBUG)
-                    return False
-
-        return resp.status_code == 200
-
-    except requests.exceptions.HTTPError as e:
-        logger.log(u"HTTP error in headURL %s. Error: %s" % (url, ex(e)), logger.WARNING)
-        pass
-    except requests.exceptions.ConnectionError as e:
-        logger.log(u"Connection error in headURL %s. Error: %s " % (url, ex(e)), logger.WARNING)
-        pass
-    except requests.exceptions.Timeout as e:
-        logger.log(u"Connection timed out accessing headURL %s. Error: %s" % (url, ex(e)), logger.WARNING)
-        pass
-    except requests.exceptions.ContentDecodingError:
-        logger.log(u"Content-Encoding was gzip, but content was not compressed. headURL: %s" % url, logger.DEBUG)
-        logger.log(traceback.format_exc(), logger.DEBUG)
-        pass
-    except Exception as e:
-        logger.log(u"Unknown exception in headURL %s. Error: %s" % (url, ex(e)), logger.WARNING)
-        logger.log(traceback.format_exc(), logger.WARNING)
-        pass
-
-    return False
-
 
 def getURL(url, post_data=None, params={}, headers={}, timeout=30, session=None, json=False, proxyGlypeProxySSLwarning=None):
     """
diff --git a/sickbeard/nzbSplitter.py b/sickbeard/nzbSplitter.py
index 1cbf10c45c48595200568e3798cca829bff7860b..528778f828c6104c66985fccde90e7953f509225 100644
--- a/sickbeard/nzbSplitter.py
+++ b/sickbeard/nzbSplitter.py
@@ -159,7 +159,7 @@ def splitResult(result):
         for epNo in parse_result.episode_numbers:
             if not result.extraInfo[0].wantEpisode(season, epNo, result.quality):
                 logger.log(u"Ignoring result " + newNZB + " because we don't want an episode that is " +
-                           Quality.qualityStrings[result.quality], logger.DEBUG)
+                           Quality.qualityStrings[result.quality], logger.INFO)
                 wantEp = False
                 break
         if not wantEp:
diff --git a/sickbeard/properFinder.py b/sickbeard/properFinder.py
index d5dbf6b62663b20e5ae8d6d73a13ba0da33ba561..fc217b9b9a75dd708f89c6121b93e4f4121fa6df 100644
--- a/sickbeard/properFinder.py
+++ b/sickbeard/properFinder.py
@@ -87,17 +87,21 @@ class ProperFinder():
                 logger.log(u"Error while searching " + curProvider.name + ", skipping: " + ex(e), logger.ERROR)
                 logger.log(traceback.format_exc(), logger.DEBUG)
                 continue
-            finally:
-                threading.currentThread().name = origThreadName
 
             # if they haven't been added by a different provider than add the proper to the list
             for x in curPropers:
+                if not re.search('(^|[\. _-])(proper|repack)([\. _-]|$)', x.name, re.I):
+                    logger.log(u'findPropers returned a non-proper, we have caught and skipped it but please report this', logger.WARNING)
+                    continue
+
                 name = self._genericName(x.name)
                 if not name in propers:
                     logger.log(u"Found new proper: " + x.name, logger.DEBUG)
                     x.provider = curProvider
                     propers[name] = x
 
+            threading.currentThread().name = origThreadName
+
         # take the list of unique propers and get it sorted by
         sortedPropers = sorted(propers.values(), key=operator.attrgetter('date'), reverse=True)
         finalPropers = []
@@ -205,7 +209,7 @@ class ProperFinder():
             historyResults = myDB.select(
                 "SELECT resource FROM history " +
                 "WHERE showid = ? AND season = ? AND episode = ? AND quality = ? AND date >= ? " +
-                "AND action IN (" + ",".join([str(x) for x in Quality.SNATCHED]) + ")",
+                "AND action IN (" + ",".join([str(x) for x in Quality.SNATCHED + Quality.DOWNLOADED]) + ")",
                 [curProper.indexerid, curProper.season, curProper.episode, curProper.quality,
                  historyLimit.strftime(history.dateFormat)])
 
diff --git a/sickbeard/providers/btn.py b/sickbeard/providers/btn.py
index 1ca0085ab3806dfe5c1588e99471009a333cbe7d..2268c2dbe69d9582b408304c38bad40073268d1d 100644
--- a/sickbeard/providers/btn.py
+++ b/sickbeard/providers/btn.py
@@ -454,7 +454,7 @@ class BTNProvider(generic.TorrentProvider):
                 logger.log(
                     u"Ignoring result " + title + " because we don't want an episode that is " +
                     Quality.qualityStrings[
-                        quality], logger.DEBUG)
+                        quality], logger.INFO)
 
                 continue
 
diff --git a/sickbeard/providers/frenchtorrentdb.py b/sickbeard/providers/frenchtorrentdb.py
index a08ae5963b798c516acae852ed01ad55945f1934..13b78f3418c7a3104a134d3c904baa0ecd4f3b1e 100644
--- a/sickbeard/providers/frenchtorrentdb.py
+++ b/sickbeard/providers/frenchtorrentdb.py
@@ -178,7 +178,7 @@ class FrenchTorrentDBProvider(generic.TorrentProvider):
 
         # check for auth
         if not self._doLogin():
-            return False
+            return results
 
         for mode in search_params.keys():
 
@@ -244,7 +244,7 @@ class FrenchTorrentDBProvider(generic.TorrentProvider):
         )
 
         if not sqlResults:
-            return []
+            return results
 
         for sqlshow in sqlResults:
             self.show = helpers.findCertainShow(sickbeard.showList, int(sqlshow["showid"]))
@@ -261,23 +261,7 @@ class FrenchTorrentDBProvider(generic.TorrentProvider):
     def seedRatio(self):
         return self.ratio
 
-    def headURL(self, result):
-        """
-        Check if URL is valid and the file exists at URL.
-        Original function overwritten because FrenchTorrentDB links only support one request
-        """
-
-        # check for auth
-        if not self._doLogin():
-            return False
 
-        urls, filename = self._makeURL(result)
-
-        for url in urls:
-                return url
-
-        return u''
-        
     def _get_season_search_strings(self, ep_obj):
 
         search_string = {'Season': []}
diff --git a/sickbeard/providers/generic.py b/sickbeard/providers/generic.py
index 8d04c71017a79b02c1ea0580d279872542d401c7..b909fb07a45b16c1a0f9cc922741ece00e4ade64 100644
--- a/sickbeard/providers/generic.py
+++ b/sickbeard/providers/generic.py
@@ -188,34 +188,6 @@ class GenericProvider:
         return (urls, filename)
 
 
-    def headURL(self, result):
-        """
-        Check if URL is valid and the file exists at URL
-        """
-
-        # check for auth
-        if not self._doLogin():
-            return False
-
-        urls, filename = self._makeURL(result)
-
-        if self.proxy.isEnabled():
-            self.headers.update({'Referer': self.proxy.getProxyURL()})
-            self.proxyGlypeProxySSLwarning = self.proxy.getProxyURL() + 'includes/process.php?action=sslagree&submit=Continue anyway...'
-        else:
-            if 'Referer' in self.headers:
-                self.headers.pop('Referer')
-            self.proxyGlypeProxySSLwarning = None
-
-        for url in urls:
-            if 'NO_DOWNLOAD_NAME' in url:
-                continue
-            if helpers.headURL(self.proxy._buildURL(url), session=self.session, headers=self.headers,
-                               proxyGlypeProxySSLwarning=self.proxyGlypeProxySSLwarning):
-                return url
-
-        return u''
-
     def downloadResult(self, result):
         """
         Save the result to disk.
@@ -365,7 +337,7 @@ class GenericProvider:
                 # get season search results
                 for curString in self._get_season_search_strings(epObj):
                     itemList += self._doSearch(curString, search_mode, len(episodes), epObj=epObj)
-            else:
+            elif search_mode == 'eponly':
                 # get single episode search results
                 for curString in self._get_episode_search_strings(epObj):
                     itemList += self._doSearch(curString, 'eponly', len(episodes), epObj=epObj)
@@ -488,7 +460,7 @@ class GenericProvider:
                 logger.log(
                     u"Ignoring result " + title + " because we don't want an episode that is " +
                     Quality.qualityStrings[
-                        quality], logger.DEBUG)
+                        quality], logger.INFO)
 
                 continue
 
diff --git a/sickbeard/providers/hdtorrents.py b/sickbeard/providers/hdtorrents.py
index b18e71da2343f7dd7918d90317699e2fa1113e51..73062435395af162e52d73536d1515bb0d6378ba 100644
--- a/sickbeard/providers/hdtorrents.py
+++ b/sickbeard/providers/hdtorrents.py
@@ -35,7 +35,6 @@ from sickbeard import clients
 import requests
 from requests import exceptions
 from bs4 import BeautifulSoup as soup
-#from sickbeard.bs4_parser import BS4Parser
 from unidecode import unidecode
 from sickbeard.helpers import sanitizeSceneName
 from requests.auth import AuthBase
@@ -49,8 +48,6 @@ class HDTorrentsProvider(generic.TorrentProvider):
         self.supportsBacklog = True
 
         self.enabled = False
-        #self._uid = None
-        #self._hash = None
         self.session = requests.Session()
         self.username = None
         self.password = None
@@ -70,8 +67,6 @@ class HDTorrentsProvider(generic.TorrentProvider):
 
         self.categories = "&category[]=59&category[]=60&category[]=30&category[]=38"
 
-        #self.cookies = None
-
     def isEnabled(self):
         return self.enabled
 
@@ -90,40 +85,26 @@ class HDTorrentsProvider(generic.TorrentProvider):
         if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()):
             return True
 
-        # requests automatically handles cookies.
-        #if self._uid and self._hash:
-
-        #    requests.utils.add_dict_to_cookiejar(self.session.cookies, self.cookies)
-
-        else:
-
-            login_params = {'uid': self.username,
-                            'pwd': self.password,
-                            'submit': 'Confirm',
-            }
+        login_params = {'uid': self.username,
+                        'pwd': self.password,
+                        'submit': 'Confirm'}
 
-            try:
-                response = self.session.post(self.urls['login'], data=login_params, timeout=30)
-            except (requests.exceptions.ConnectionError, requests.exceptions.HTTPError), e:
-                logger.log(u'Unable to connect to ' + self.name + ' provider: ' + ex(e), logger.ERROR)
-                return False
+        try:
+            response = self.session.post(self.urls['login'], data=login_params, timeout=30)
+        except (requests.exceptions.ConnectionError, requests.exceptions.HTTPError), e:
+            logger.log(u'Unable to connect to ' + self.name + ' provider: ' + ex(e), logger.ERROR)
+            return False
 
-            if re.search('You need cookies enabled to log in.', response.text) \
-                    or response.status_code == 401:
-                logger.log(u'Invalid username or password for ' + self.name + ' Check your settings', logger.ERROR)
-                return False
-
-            #self._uid = requests.utils.dict_from_cookiejar(self.session.cookies)['uid']
-            #self._hash = requests.utils.dict_from_cookiejar(self.session.cookies)['pass']
-            #self.cookies = {'uid': self._uid,
-            #                'pass': self._hash
-            #}
+        if re.search('You need cookies enabled to log in.', response.text) \
+                or response.status_code == 401:
+            logger.log(u'Invalid username or password for ' + self.name + ' Check your settings', logger.ERROR)
+            return False
 
         return True
 
     def _get_season_search_strings(self, ep_obj):
         if not ep_obj:
-            return search_strings
+            return []
 
         search_strings = []
         for show_name in set(show_name_helpers.allPossibleShowNames(self.show)):
@@ -136,7 +117,6 @@ class HDTorrentsProvider(generic.TorrentProvider):
 
             search_strings.append(ep_string)
 
-
         return [search_strings]
 
     def _get_episode_search_strings(self, ep_obj, add_string=''):
diff --git a/sickbeard/providers/iptorrents.py b/sickbeard/providers/iptorrents.py
index d72959335322fca153cf813e9d849506bd790af2..d8eaf5dea334d95f4f00931c9ff9d4cb0b3ae0b0 100644
--- a/sickbeard/providers/iptorrents.py
+++ b/sickbeard/providers/iptorrents.py
@@ -287,7 +287,7 @@ class IPTorrentsProvider(generic.TorrentProvider):
                 logger.log(
                     u"Ignoring result " + title + " because we don't want an episode that is " +
                     Quality.qualityStrings[
-                        quality], logger.DEBUG)
+                        quality], logger.INFO)
 
                 continue
 
diff --git a/sickbeard/providers/libertalia.py b/sickbeard/providers/libertalia.py
index 4cc3a07aa105dc20f1543697be9e8f03e3de834e..4670b11de0c5eb43f55e2315d688271de20846f7 100644
--- a/sickbeard/providers/libertalia.py
+++ b/sickbeard/providers/libertalia.py
@@ -165,7 +165,7 @@ class LibertaliaProvider(generic.TorrentProvider):
         
         # check for auth
         if not self._doLogin():
-            return False
+            return results
             
         for mode in search_params.keys():
 
diff --git a/sickbeard/providers/xthor.py b/sickbeard/providers/xthor.py
index 9b0ab91d0dc92cde2604b7b49edd211eaa94c6db..188c6fd12e6e66e6ab675568e91b7055b0cf48e1 100644
--- a/sickbeard/providers/xthor.py
+++ b/sickbeard/providers/xthor.py
@@ -57,6 +57,7 @@ class XthorProvider(generic.TorrentProvider):
         self.enabled = False
         self.username = None
         self.password = None
+        self.ratio = None
         
     def isEnabled(self):
         return self.enabled
@@ -170,7 +171,7 @@ class XthorProvider(generic.TorrentProvider):
         
         # check for auth
         if not self._doLogin():
-            return False
+            return results
             
         for mode in search_params.keys():
 
@@ -221,7 +222,7 @@ class XthorProvider(generic.TorrentProvider):
         )
 
         if not sqlResults:
-            return []
+            return results
 
         for sqlshow in sqlResults:
             self.show = helpers.findCertainShow(sickbeard.showList, int(sqlshow["showid"]))
diff --git a/sickbeard/scene_numbering.py b/sickbeard/scene_numbering.py
index 686729c6ab187dedf12d526c2d2545b6d3fae2e8..eac8cedee3a536968e7f4785dac3ebb777dd6f32 100644
--- a/sickbeard/scene_numbering.py
+++ b/sickbeard/scene_numbering.py
@@ -497,11 +497,11 @@ def xem_refresh(indexer_id, indexer, force=False):
             # XEM MAP URL
             url = "http://thexem.de/map/havemap?origin=%s" % sickbeard.indexerApi(indexer).config['xem_origin']
             parsedJSON = sickbeard.helpers.getURL(url, session=xem_session, json=True)
-            if not parsedJSON or 'result' not in parsedJSON or 'success' not in parsedJSON['result'] or 'data' not in parsedJSON or indexer_id not in parsedJSON['data']:
+            if not parsedJSON or 'result' not in parsedJSON or 'success' not in parsedJSON['result'] or 'data' not in parsedJSON or str(indexer_id) not in parsedJSON['data']:
                 return
 
             # XEM API URL
-            url = "http://thexem.de/map/all?id=%s&origin=%s&destination=scene" % indexer_id, sickbeard.indexerApi(indexer).config['xem_origin']
+            url = "http://thexem.de/map/all?id=%s&origin=%s&destination=scene" % (indexer_id, sickbeard.indexerApi(indexer).config['xem_origin'])
 
             parsedJSON = sickbeard.helpers.getURL(url, session=xem_session, json=True)
             if not parsedJSON or not 'result' in parsedJSON or not 'success' in parsedJSON['result']:
diff --git a/sickbeard/search.py b/sickbeard/search.py
index 2c48f4fd7889dba664f6e40df1bc490705ea856f..4f4452ef4f7d9356fba844cad6d8b2ae1e6883fa 100644
--- a/sickbeard/search.py
+++ b/sickbeard/search.py
@@ -237,14 +237,6 @@ def pickBestResult(results, show):
                 logger.log(cur_result.name + u" has previously failed, rejecting it")
                 continue
 
-        # Only request HEAD instead of downloading content here, and only after all other checks but before bestresult!
-        # Otherwise we are spamming providers even when searching with cache only. We can validate now, and download later
-        if len(cur_result.url) and cur_result.provider:
-            cur_result.url = cur_result.provider.headURL(cur_result)
-            if not len(cur_result.url):
-                logger.log('Skipping %s, URL check failed. Bad result from provider.' % cur_result.name,logger.INFO) 
-                continue
-
         if cur_result.quality in bestQualities and (not bestResult or bestResult.quality < cur_result.quality or bestResult not in bestQualities):
             bestResult = cur_result
         elif cur_result.quality in anyQualities and (not bestResult or bestResult not in bestQualities) and (not bestResult or bestResult.quality < cur_result.quality):
diff --git a/sickbeard/tvcache.py b/sickbeard/tvcache.py
index 4047909909d6182e589f5933a9131774b69a359c..b34f8d5b3dc991d94dfc37c9a6872fb02b95aa9c 100644
--- a/sickbeard/tvcache.py
+++ b/sickbeard/tvcache.py
@@ -364,7 +364,7 @@ class TVCache():
             # if the show says we want that episode then add it to the list
             if not showObj.wantEpisode(curSeason, curEp, curQuality, manualSearch, downCurQuality):
                 logger.log(u"Skipping " + curResult["name"] + " because we don't want an episode that's " +
-                           Quality.qualityStrings[curQuality], logger.DEBUG)
+                           Quality.qualityStrings[curQuality], logger.INFO)
                 continue
 
             epObj = showObj.getEpisode(curSeason, curEp)