diff --git a/sickbeard/providers/alpharatio.py b/sickbeard/providers/alpharatio.py
index 6b2dacb16f603ab1ec535ba167fe1a721cb0372e..d500d771cf24ecbda5ab576d80be7ad9c7a6bfad 100644
--- a/sickbeard/providers/alpharatio.py
+++ b/sickbeard/providers/alpharatio.py
@@ -53,7 +53,7 @@ class AlphaRatioProvider(TorrentProvider):
 
         self.cache = AlphaRatioCache(self)
 
-    def _do_login(self):
+    def login(self):
         login_params = {'username': self.username,
                         'password': self.password,
                         'remember_me': 'on',
@@ -71,12 +71,12 @@ class AlphaRatioProvider(TorrentProvider):
 
         return True
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_strings.keys():
@@ -158,6 +158,6 @@ class AlphaRatioCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_strings = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_strings)}
+        return {'entries': self.provider.search(search_strings)}
 
 provider = AlphaRatioProvider()
diff --git a/sickbeard/providers/animenzb.py b/sickbeard/providers/animenzb.py
index 8db04088dc85478a2a27f608c0624a0818118caa..57d23009692293c9dd8d8eb504dad521f648180c 100644
--- a/sickbeard/providers/animenzb.py
+++ b/sickbeard/providers/animenzb.py
@@ -53,7 +53,7 @@ class animenzb(NZBProvider):
     def _get_episode_search_strings(self, ep_obj, add_string=''):
         return [x for x in show_name_helpers.makeSceneSearchString(self.show, ep_obj)]
 
-    def _do_search(self, search_string, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_string, age=0, ep_obj=None):
 
         logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
@@ -85,7 +85,7 @@ class animenzb(NZBProvider):
 
         results = []
 
-        for item in self._do_search("v2|v3|v4|v5"):
+        for item in self.search("v2|v3|v4|v5"):
 
             (title, url) = self._get_title_and_url(item)
 
diff --git a/sickbeard/providers/bitcannon.py b/sickbeard/providers/bitcannon.py
index 677c334ef45ce79cea626783e5327012e0a1d8a8..69b494e9ba0dcfc39071b67dc220b889e7e357d3 100644
--- a/sickbeard/providers/bitcannon.py
+++ b/sickbeard/providers/bitcannon.py
@@ -46,7 +46,7 @@ class BitCannonProvider(TorrentProvider):
             'apiKey': ''
         }
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):
         # search_strings comes in one of these formats:
         #      {'Episode': ['Italian Works S05E10']}
         #      {'Season': ['Italian Works S05']}
@@ -146,6 +146,6 @@ class BitCannonCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_params = {'RSS': ['tv', 'anime']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 provider = BitCannonProvider()
diff --git a/sickbeard/providers/bitsnoop.py b/sickbeard/providers/bitsnoop.py
index d2d35ff79446593fea565dcfb2aee22a01cc1b34..7ff47b0171379439c0849d467f6162d3a36abffb 100644
--- a/sickbeard/providers/bitsnoop.py
+++ b/sickbeard/providers/bitsnoop.py
@@ -26,7 +26,7 @@ from sickrage.helper.common import try_int
 from sickrage.providers.TorrentProvider import TorrentProvider
 
 
-class BitSnoopProvider(TorrentProvider): # pylint: disable=too-many-instance-attributes,too-many-arguments
+class BitSnoopProvider(TorrentProvider): # pylint: disable=too-many-instance-attributes
     def __init__(self):
         TorrentProvider.__init__(self, "BitSnoop")
 
@@ -47,7 +47,7 @@ class BitSnoopProvider(TorrentProvider): # pylint: disable=too-many-instance-att
 
         self.cache = BitSnoopCache(self)
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None): # pylint: disable=too-many-branches,too-many-arguments,too-many-locals
+    def search(self, search_strings, age=0, ep_obj=None): # pylint: disable=too-many-branches,too-many-locals
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
@@ -136,7 +136,7 @@ class BitSnoopCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_strings = {'RSS': ['rss']}
-        return {'entries': self.provider._do_search(search_strings)}
+        return {'entries': self.provider.search(search_strings)}
 
 
 provider = BitSnoopProvider()
diff --git a/sickbeard/providers/bitsoup.py b/sickbeard/providers/bitsoup.py
index a634aaf730304fc47c0af99805e8bdf0eb614b45..f8585c739dbd3d1904525f60756e23fe771bc0ab 100644
--- a/sickbeard/providers/bitsoup.py
+++ b/sickbeard/providers/bitsoup.py
@@ -57,7 +57,7 @@ class BitSoupProvider(TorrentProvider):
 
         return True
 
-    def _do_login(self):
+    def login(self):
 
         login_params = {
             'username': self.username,
@@ -76,12 +76,12 @@ class BitSoupProvider(TorrentProvider):
 
         return True
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_strings.keys():
@@ -161,7 +161,7 @@ class BitSoupCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_strings = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_strings)}
+        return {'entries': self.provider.search(search_strings)}
 
 
 provider = BitSoupProvider()
diff --git a/sickbeard/providers/bluetigers.py b/sickbeard/providers/bluetigers.py
index f42c8e4b08df47b0daa49cb0200984aaf30c7a07..c3af540e1150240bac584fef9cecae73de518369 100644
--- a/sickbeard/providers/bluetigers.py
+++ b/sickbeard/providers/bluetigers.py
@@ -53,7 +53,7 @@ class BLUETIGERSProvider(TorrentProvider):
 
         self.url = self.urls['base_url']
 
-    def _do_login(self):
+    def login(self):
         if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()):
             return True
 
@@ -79,12 +79,12 @@ class BLUETIGERSProvider(TorrentProvider):
 
         return True
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_strings.keys():
@@ -166,7 +166,7 @@ class BLUETIGERSCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_strings = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_strings)}
+        return {'entries': self.provider.search(search_strings)}
 
 
 provider = BLUETIGERSProvider()
diff --git a/sickbeard/providers/btdigg.py b/sickbeard/providers/btdigg.py
index 64a44d93446395a82239a041ee3ed12860d2a8e3..ceb8b6010677161051207455442111b1cff745e5 100644
--- a/sickbeard/providers/btdigg.py
+++ b/sickbeard/providers/btdigg.py
@@ -45,7 +45,7 @@ class BTDIGGProvider(TorrentProvider):
 
         self.cache = BTDiggCache(self)
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
@@ -116,6 +116,6 @@ class BTDiggCache(tvcache.TVCache):
 
         # Use this hacky way for RSS search since most results will use this codecs
         search_params = {'RSS': ['x264', 'x264.HDTV', '720.HDTV.x264']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 provider = BTDIGGProvider()
diff --git a/sickbeard/providers/btn.py b/sickbeard/providers/btn.py
index 6361163bf8cb7d679f57ea0bc482fd20e41f3a0f..95d06605699b8372dc6b25f746a1b00bbb7c3bcd 100644
--- a/sickbeard/providers/btn.py
+++ b/sickbeard/providers/btn.py
@@ -68,7 +68,7 @@ class BTNProvider(TorrentProvider):
 
         return True
 
-    def _do_search(self, search_params, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_params, age=0, ep_obj=None):
 
         self._check_auth()
 
@@ -257,7 +257,7 @@ class BTNProvider(TorrentProvider):
     def _doGeneralSearch(self, search_string):
         # 'search' looks as broad is it can find. Can contain episode overview and title for example,
         # use with caution!
-        return self._do_search({'search': search_string})
+        return self.search({'search': search_string})
 
     def find_propers(self, search_date=None):
         results = []
@@ -265,7 +265,7 @@ class BTNProvider(TorrentProvider):
         search_terms = ['%.proper.%', '%.repack.%']
 
         for term in search_terms:
-            for item in self._do_search({'release': term}, age=4 * 24 * 60 * 60):
+            for item in self.search({'release': term}, age=4 * 24 * 60 * 60):
                 if item['Time']:
                     try:
                         result_date = datetime.fromtimestamp(float(item['Time']))
@@ -306,7 +306,7 @@ class BTNCache(tvcache.TVCache):
                 logger.DEBUG)
             seconds_since_last_update = 86400
 
-        return {'entries': self.provider._do_search(search_params=None, age=seconds_since_last_update)}
+        return {'entries': self.provider.search(search_params=None, age=seconds_since_last_update)}
 
 
 provider = BTNProvider()
diff --git a/sickbeard/providers/cpasbien.py b/sickbeard/providers/cpasbien.py
index dbb5d13f3c4997391e554edd1397b6547b56b84f..c826b9411be36254824d069af424e835218b3cc2 100644
--- a/sickbeard/providers/cpasbien.py
+++ b/sickbeard/providers/cpasbien.py
@@ -39,7 +39,7 @@ class CpasbienProvider(TorrentProvider):
 
         self.cache = CpasbienCache(self)
 
-    def _do_search(self, search_params, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_params, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
diff --git a/sickbeard/providers/elitetorrent.py b/sickbeard/providers/elitetorrent.py
index 8f0b9216bf7643aec7ec51db3a0ad507781b226f..bb1ab5b3c04017a9d0bf46167515764fe218d600 100644
--- a/sickbeard/providers/elitetorrent.py
+++ b/sickbeard/providers/elitetorrent.py
@@ -65,7 +65,7 @@ class elitetorrentProvider(TorrentProvider):
 
         }
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
@@ -179,7 +179,7 @@ class elitetorrentCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_params = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 
 provider = elitetorrentProvider()
diff --git a/sickbeard/providers/extratorrent.py b/sickbeard/providers/extratorrent.py
index 7325357f509ebb656f62d4c1adf2a059d4ab780b..b5a75f2dfdb29bc7648511a07c2220dc95776478 100644
--- a/sickbeard/providers/extratorrent.py
+++ b/sickbeard/providers/extratorrent.py
@@ -48,7 +48,7 @@ class ExtraTorrentProvider(TorrentProvider):
         self.headers.update({'User-Agent': USER_AGENT})
         self.search_params = {'cid': 8}
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
@@ -142,7 +142,7 @@ class ExtraTorrentCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_strings = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_strings)}
+        return {'entries': self.provider.search(search_strings)}
 
 
 provider = ExtraTorrentProvider()
diff --git a/sickbeard/providers/fnt.py b/sickbeard/providers/fnt.py
index d634a336df4e51112b1d32689098494a00ce7b60..95a78a1a8c8640f7e41fd63d8f8422724fcaf7c1 100644
--- a/sickbeard/providers/fnt.py
+++ b/sickbeard/providers/fnt.py
@@ -52,7 +52,7 @@ class FNTProvider(TorrentProvider):
             "visible": 1, "freeleech": 0, "nuke": 1, "3D": 0, "sort": "size", "order": "desc"
             }
 
-    def _do_login(self):
+    def login(self):
 
         if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()):
             return True
@@ -75,13 +75,13 @@ class FNTProvider(TorrentProvider):
 
         return True
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
         # check for auth
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_strings.keys():
@@ -166,7 +166,7 @@ class FNTCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_strings = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_strings)}
+        return {'entries': self.provider.search(search_strings)}
 
 
 provider = FNTProvider()
diff --git a/sickbeard/providers/freshontv.py b/sickbeard/providers/freshontv.py
index e6639f70974a070957abd58437af9ed0890aec99..81ea9ff6a5d7397475a9d228093def608d3726a6 100644
--- a/sickbeard/providers/freshontv.py
+++ b/sickbeard/providers/freshontv.py
@@ -61,7 +61,7 @@ class FreshOnTVProvider(TorrentProvider):
 
         return True
 
-    def _do_login(self):
+    def login(self):
         if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()):
             return True
 
@@ -100,14 +100,14 @@ class FreshOnTVProvider(TorrentProvider):
 
                     return False
 
-    def _do_search(self, search_params, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_params, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
         freeleech = '3' if self.freeleech else '0'
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_params.keys():
@@ -246,6 +246,6 @@ class FreshOnTVCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_params = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 provider = FreshOnTVProvider()
diff --git a/sickbeard/providers/gftracker.py b/sickbeard/providers/gftracker.py
index 8904b9e43619e6e0cad6398c8ebd7571ba6de862..c2fecc7148f0c0a525988adab96dc8fdb80167f2 100644
--- a/sickbeard/providers/gftracker.py
+++ b/sickbeard/providers/gftracker.py
@@ -61,7 +61,7 @@ class GFTrackerProvider(TorrentProvider):
 
         return True
 
-    def _do_login(self):
+    def login(self):
 
         login_params = {'username': self.username,
                         'password': self.password}
@@ -80,12 +80,12 @@ class GFTrackerProvider(TorrentProvider):
 
         return True
 
-    def _do_search(self, search_params, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_params, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_params.keys():
@@ -195,6 +195,6 @@ class GFTrackerCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_params = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 provider = GFTrackerProvider()
diff --git a/sickbeard/providers/hdbits.py b/sickbeard/providers/hdbits.py
index 62de609165196d519f25f27c4dc6d85149ecb614..72f069d6bc967d39ba16bb4e4d70186ff2a89f71 100644
--- a/sickbeard/providers/hdbits.py
+++ b/sickbeard/providers/hdbits.py
@@ -78,7 +78,7 @@ class HDBitsProvider(TorrentProvider):
 
         return title, url
 
-    def _do_search(self, search_params, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_params, age=0, ep_obj=None):
 
         # FIXME
         results = []
@@ -109,7 +109,7 @@ class HDBitsProvider(TorrentProvider):
         search_terms = [' proper ', ' repack ']
 
         for term in search_terms:
-            for item in self._do_search(self._make_post_data_JSON(search_term=term)):
+            for item in self.search(self._make_post_data_JSON(search_term=term)):
                 if item['utadded']:
                     try:
                         result_date = datetime.datetime.fromtimestamp(int(item['utadded']))
diff --git a/sickbeard/providers/hdspace.py b/sickbeard/providers/hdspace.py
index 2930c3298d39558bdac86cc0a8448ddc40d3a7b7..f50dcebaa496a29e0634a26249cb3ed52ab96421 100644
--- a/sickbeard/providers/hdspace.py
+++ b/sickbeard/providers/hdspace.py
@@ -61,7 +61,7 @@ class HDSpaceProvider(TorrentProvider):
 
         return True
 
-    def _do_login(self):
+    def login(self):
 
         if 'pass' in requests.utils.dict_from_cookiejar(self.session.cookies):
             return True
@@ -80,12 +80,12 @@ class HDSpaceProvider(TorrentProvider):
 
         return True
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_strings.keys():
@@ -191,6 +191,6 @@ class HDSpaceCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_strings = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_strings)}
+        return {'entries': self.provider.search(search_strings)}
 
 provider = HDSpaceProvider()
diff --git a/sickbeard/providers/hdtorrents.py b/sickbeard/providers/hdtorrents.py
index 0b80d7628d22e778e9a59d1050a6786442a8a7df..55ef723774b01a96b48f838898dfb52b4bdd9e69 100644
--- a/sickbeard/providers/hdtorrents.py
+++ b/sickbeard/providers/hdtorrents.py
@@ -59,7 +59,7 @@ class HDTorrentsProvider(TorrentProvider):
 
         return True
 
-    def _do_login(self):
+    def login(self):
 
         if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()):
             return True
@@ -79,12 +79,12 @@ class HDTorrentsProvider(TorrentProvider):
 
         return True
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_strings.keys():
@@ -223,6 +223,6 @@ class HDTorrentsCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_strings = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_strings)}
+        return {'entries': self.provider.search(search_strings)}
 
 provider = HDTorrentsProvider()
diff --git a/sickbeard/providers/hounddawgs.py b/sickbeard/providers/hounddawgs.py
index 4b715d3d01773f412ba6db5701f9ad305aac3582..8bb7c8a1454545e19c1f280317864277c2d00a8d 100644
--- a/sickbeard/providers/hounddawgs.py
+++ b/sickbeard/providers/hounddawgs.py
@@ -60,7 +60,7 @@ class HoundDawgsProvider(TorrentProvider):
             "searchtags": ''
         }
 
-    def _do_login(self):
+    def login(self):
 
         login_params = {'username': self.username,
                         'password': self.password,
@@ -81,12 +81,12 @@ class HoundDawgsProvider(TorrentProvider):
 
         return True
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_strings.keys():
@@ -189,7 +189,7 @@ class HoundDawgsCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_strings = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_strings)}
+        return {'entries': self.provider.search(search_strings)}
 
 
 provider = HoundDawgsProvider()
diff --git a/sickbeard/providers/iptorrents.py b/sickbeard/providers/iptorrents.py
index 571c44e08ca5db75667f195ca82711420f5e3e28..9043e86fabdc0342959e9018fa989da7a3ef4ed5 100644
--- a/sickbeard/providers/iptorrents.py
+++ b/sickbeard/providers/iptorrents.py
@@ -53,7 +53,7 @@ class IPTorrentsProvider(TorrentProvider):
 
         return True
 
-    def _do_login(self):
+    def login(self):
 
         login_params = {'username': self.username,
                         'password': self.password,
@@ -74,14 +74,14 @@ class IPTorrentsProvider(TorrentProvider):
 
         return True
 
-    def _do_search(self, search_params, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_params, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
         freeleech = '&free=on' if self.freeleech else ''
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_params.keys():
@@ -182,7 +182,7 @@ class IPTorrentsCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_params = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 
 provider = IPTorrentsProvider()
diff --git a/sickbeard/providers/kat.py b/sickbeard/providers/kat.py
index f102a4fe4ed2e5009f851e44b08fabf532da0ea9..a52c600a57277c87efec82b6ab786855a1037284 100755
--- a/sickbeard/providers/kat.py
+++ b/sickbeard/providers/kat.py
@@ -62,7 +62,7 @@ class KATProvider(TorrentProvider):
 
         self.cache = KATCache(self)
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
@@ -166,6 +166,6 @@ class KATCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_params = {'RSS': ['tv', 'anime']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 provider = KATProvider()
diff --git a/sickbeard/providers/morethantv.py b/sickbeard/providers/morethantv.py
index 08a4554dd98056c6bd0dacbaa7a93fa1b6425286..13f885a5c60cf9e9060ec4b0b7c08f658cf96880 100644
--- a/sickbeard/providers/morethantv.py
+++ b/sickbeard/providers/morethantv.py
@@ -67,7 +67,7 @@ class MoreThanTVProvider(TorrentProvider):
 
         return True
 
-    def _do_login(self):
+    def login(self):
         if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()):
             return True
 
@@ -90,14 +90,14 @@ class MoreThanTVProvider(TorrentProvider):
 
             return True
 
-    def _do_search(self, search_params, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_params, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
         # freeleech = '3' if self.freeleech else '0'
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_params.keys():
@@ -211,6 +211,6 @@ class MoreThanTVCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_params = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 provider = MoreThanTVProvider()
diff --git a/sickbeard/providers/newpct.py b/sickbeard/providers/newpct.py
index f21f7ba0ed3812d40020fa72b8dda97d75b2a1b9..a4874739365f58e7ac48578479058eb60867ddb6 100644
--- a/sickbeard/providers/newpct.py
+++ b/sickbeard/providers/newpct.py
@@ -68,7 +68,7 @@ class newpctProvider(TorrentProvider):
             'bus_de_': 'All'
         }
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
@@ -171,7 +171,7 @@ class newpctProvider(TorrentProvider):
         """
 
         # check for auth
-        if not self._do_login():
+        if not self.login():
             return False
 
         urls, filename = self._make_url(result)
@@ -253,7 +253,7 @@ class newpctCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_params = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 
 provider = newpctProvider()
diff --git a/sickbeard/providers/newznab.py b/sickbeard/providers/newznab.py
index 9c3eccbdbbfe9855173b209c2c457f6d8f4a78b8..b0934de88259610306a12356992892c2acf815bf 100644
--- a/sickbeard/providers/newznab.py
+++ b/sickbeard/providers/newznab.py
@@ -136,7 +136,7 @@ class NewznabProvider(NZBProvider):
 
     def _get_season_search_strings(self, ep_obj):
         """
-        Makes objects to pass to _do_search for manual and backlog season pack searching
+        Makes objects to pass to search for manual and backlog season pack searching
         Returns a list containing dicts of search parameters
         """
         to_return = []
@@ -165,7 +165,7 @@ class NewznabProvider(NZBProvider):
 
     def _get_episode_search_strings(self, ep_obj, add_string=''):
         """
-        Makes objects to pass to _do_search for manual and backlog season pack searching
+        Makes objects to pass to search for manual and backlog season pack searching
         Returns a list containing dicts of search parameters
         """
         to_return = []
@@ -227,7 +227,7 @@ class NewznabProvider(NZBProvider):
 
         return False
 
-    def _do_search(self, search_params, search_mode='eponly', age=0, ep_obj=None): # pylint: disable=too-many-arguments,too-many-locals
+    def search(self, search_params, age=0, ep_obj=None): # pylint: disable=too-many-arguments,too-many-locals
         """
         Searches indexer using the params in search_params, either for latest releases, or a string/id search
         Returns: list of results in dict form
@@ -331,7 +331,7 @@ class NewznabProvider(NZBProvider):
                 curEp = self.show.getEpisode(int(sqlshow["season"]), int(sqlshow["episode"]))
                 searchStrings = self._get_episode_search_strings(curEp, add_string='PROPER|REPACK')
                 for searchString in searchStrings:
-                    for item in self._do_search(searchString):
+                    for item in self.search(searchString):
                         title, url = self._get_title_and_url(item)
                         if re.match(r'.*(REPACK|PROPER).*', title, re.I):
                             results.append(classes.Proper(title, url, datetime.datetime.today(), self.show))
@@ -348,4 +348,4 @@ class NewznabCache(tvcache.TVCache):
         self.minTime = 30
 
     def _getRSSData(self):
-        return {'entries': self.provider._do_search({})}
+        return {'entries': self.provider.search({})}
diff --git a/sickbeard/providers/nyaatorrents.py b/sickbeard/providers/nyaatorrents.py
index 78756497a125aa020dc463d28748a95b2c2f694b..c72184fde6381549e1437a8e956b3d5bfc400565 100644
--- a/sickbeard/providers/nyaatorrents.py
+++ b/sickbeard/providers/nyaatorrents.py
@@ -44,7 +44,7 @@ class NyaaProvider(TorrentProvider):
         self.minleech = 0
         self.confirmed = False
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):
         if self.show and not self.show.is_anime:
             return []
 
@@ -132,6 +132,6 @@ class NyaaCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_params = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 provider = NyaaProvider()
diff --git a/sickbeard/providers/omgwtfnzbs.py b/sickbeard/providers/omgwtfnzbs.py
index 1b0f82fa319fcdab2888335ab0c310e07942fb5e..67df4f4b2a6921f8989e7e82223d21fd887b387f 100644
--- a/sickbeard/providers/omgwtfnzbs.py
+++ b/sickbeard/providers/omgwtfnzbs.py
@@ -84,7 +84,7 @@ class OmgwtfnzbsProvider(NZBProvider):
     def _get_size(self, item):
         return try_int(item['sizebytes'], -1)
 
-    def _do_search(self, search, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search, age=0, ep_obj=None):
 
         self._check_auth()
 
@@ -123,7 +123,7 @@ class OmgwtfnzbsProvider(NZBProvider):
         results = []
 
         for term in search_terms:
-            for item in self._do_search(term, age=4):
+            for item in self.search(term, age=4):
                 if 'usenetage' in item:
 
                     title, url = self._get_title_and_url(item)
diff --git a/sickbeard/providers/pretome.py b/sickbeard/providers/pretome.py
index 0a258b79e99afef3f925a4f6b14acefbfb6d267e..87430198ee523e70a5c464365490683dd1b92782 100644
--- a/sickbeard/providers/pretome.py
+++ b/sickbeard/providers/pretome.py
@@ -60,7 +60,7 @@ class PretomeProvider(TorrentProvider):
 
         return True
 
-    def _do_login(self):
+    def login(self):
 
         login_params = {'username': self.username,
                         'password': self.password,
@@ -77,12 +77,12 @@ class PretomeProvider(TorrentProvider):
 
         return True
 
-    def _do_search(self, search_params, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_params, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_params.keys():
@@ -194,7 +194,7 @@ class PretomeCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_params = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 
 provider = PretomeProvider()
diff --git a/sickbeard/providers/rarbg.py b/sickbeard/providers/rarbg.py
index eef79bf603a4e67ecce149eb52d4e532eee690be..d334b96425eaebeca6bb61efe217108c7b4d2b23 100644
--- a/sickbeard/providers/rarbg.py
+++ b/sickbeard/providers/rarbg.py
@@ -78,7 +78,7 @@ class RarbgProvider(TorrentProvider):
 
         self.cache = RarbgCache(self)
 
-    def _do_login(self):
+    def login(self):
         if self.token and self.tokenExpireDate and datetime.datetime.now() < self.tokenExpireDate:
             return True
 
@@ -98,12 +98,12 @@ class RarbgProvider(TorrentProvider):
 
         return False
 
-    def _do_search(self, search_params, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_params, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         if ep_obj is not None:
@@ -185,7 +185,7 @@ class RarbgProvider(TorrentProvider):
                             retry = retry - 1
                             self.token = None
                             self.tokenExpireDate = None
-                            if not self._do_login():
+                            if not self.login():
                                 logger.log(u"Failed retrieving new token", logger.DEBUG)
                                 return results
                             logger.log(u"Using new token", logger.DEBUG)
@@ -254,7 +254,7 @@ class RarbgCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_params = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 
 provider = RarbgProvider()
diff --git a/sickbeard/providers/scc.py b/sickbeard/providers/scc.py
index ce9e2cb2667d7d466605bd8bf823ea1b465840a4..1dab41630393e6b8d0b97da431a7e1996c8785af 100644
--- a/sickbeard/providers/scc.py
+++ b/sickbeard/providers/scc.py
@@ -29,7 +29,7 @@ from sickbeard.bs4_parser import BS4Parser
 from sickrage.providers.TorrentProvider import TorrentProvider
 
 
-class SCCProvider(TorrentProvider):
+class SCCProvider(TorrentProvider):  # pylint: disable=too-many-instance-attributes
 
     def __init__(self):
 
@@ -43,22 +43,29 @@ class SCCProvider(TorrentProvider):
 
         self.cache = SCCCache(self)
 
-        self.urls = {'base_url': 'https://sceneaccess.eu',
-                     'login': 'https://sceneaccess.eu/login',
-                     'detail': 'https://www.sceneaccess.eu/details?id=%s',
-                     'search': 'https://sceneaccess.eu/all?search=%s&method=1&%s',
-                     'download': 'https://www.sceneaccess.eu/%s'}
+        self.urls = {
+            'base_url': 'https://sceneaccess.eu',
+            'login': 'https://sceneaccess.eu/login',
+            'detail': 'https://www.sceneaccess.eu/details?id=%s',
+            'search': 'https://sceneaccess.eu/all?search=%s&method=1&%s',
+            'download': 'https://www.sceneaccess.eu/%s'
+        }
 
         self.url = self.urls['base_url']
 
-        self.categories = { 'sponly': 'c26=26&c44=44&c45=45', # Archive, non-scene HD, non-scene SD; need to include non-scene because WEB-DL packs get added to those categories
-                            'eponly': 'c27=27&c17=17&c44=44&c45=45&c33=33&c34=34'} # TV HD, TV SD, non-scene HD, non-scene SD, foreign XviD, foreign x264
+        self.categories = {
+            'Season': 'c26=26&c44=44&c45=45', # Archive, non-scene HD, non-scene SD; need to include non-scene because WEB-DL packs get added to those categories
+            'Episode': 'c17=17&c27=27&c33=33&c34=34&c44=44&c45=45', # TV HD, TV SD, non-scene HD, non-scene SD, foreign XviD, foreign x264
+            'RSS': 'c17=17&c26=26&c27=27&c33=33&c34=34&c44=44&c45=45' # Season + Episode
+        }
 
-    def _do_login(self):
+    def login(self):
 
-        login_params = {'username': self.username,
-                        'password': self.password,
-                        'submit': 'come on in'}
+        login_params = {
+            'username': self.username,
+            'password': self.password,
+            'submit': 'come on in'
+        }
 
         response = self.get_url(self.urls['login'], post_data=login_params, timeout=30)
         if not response:
@@ -72,19 +79,19 @@ class SCCProvider(TorrentProvider):
 
         return True
 
-    def _isSection(self, section, text):
+    @staticmethod
+    def _isSection(section, text):
         title = r'<title>.+? \| %s</title>' % section
         return re.search(title, text, re.IGNORECASE)
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):  # pylint: disable=too-many-locals,too-many-branches
 
+        items = {'Season': [], 'Episode': [], 'RSS': []}
         results = []
 
-        if not self._do_login():
+        if not self.login():
             return results
 
-        items = {'Season': [], 'Episode': [], 'RSS': []}
-
         for mode in search_strings.keys():
             if mode != 'RSS':
                 logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
@@ -92,7 +99,7 @@ class SCCProvider(TorrentProvider):
                 if mode != 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
-                searchURL = self.urls['search'] % (urllib.quote(search_string), self.categories[search_mode])
+                searchURL = self.urls['search'] % (urllib.quote(search_string), self.categories[mode])
 
                 try:
                     logger.log(u"Search URL: %s" % searchURL, logger.DEBUG)
@@ -117,7 +124,7 @@ class SCCProvider(TorrentProvider):
 
                         try:
                             link = result.find('td', attrs={'class': 'ttr_name'}).find('a')
-                            url  = result.find('td', attrs={'class': 'td_dl'}).find('a')
+                            url = result.find('td', attrs={'class': 'td_dl'}).find('a')
 
                             title = link.string
                             if re.search(r'\.\.\.', title):
@@ -157,7 +164,8 @@ class SCCProvider(TorrentProvider):
     def seed_ratio(self):
         return self.ratio
 
-    def _convertSize(self, size):
+    @staticmethod
+    def _convertSize(size):
         size, base = size.split()
         size = float(size)
         if base in 'KB':
@@ -181,6 +189,6 @@ class SCCCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_strings = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_strings)}
+        return {'entries': self.provider.search(search_strings)}
 
 provider = SCCProvider()
diff --git a/sickbeard/providers/scenetime.py b/sickbeard/providers/scenetime.py
index eb05c9a9e87d9284e478198effda6bcc86f0c6c6..c8d7fdd080aa9af734653517b464d77ca4b51368 100644
--- a/sickbeard/providers/scenetime.py
+++ b/sickbeard/providers/scenetime.py
@@ -50,7 +50,7 @@ class SceneTimeProvider(TorrentProvider):
 
         self.categories = "&c2=1&c43=13&c9=1&c63=1&c77=1&c79=1&c100=1&c101=1"
 
-    def _do_login(self):
+    def login(self):
 
         login_params = {'username': self.username,
                         'password': self.password}
@@ -66,12 +66,12 @@ class SceneTimeProvider(TorrentProvider):
 
         return True
 
-    def _do_search(self, search_params, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_params, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_params.keys():
@@ -163,7 +163,7 @@ class SceneTimeCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_params = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 
 provider = SceneTimeProvider()
diff --git a/sickbeard/providers/speedcd.py b/sickbeard/providers/speedcd.py
index eec9a1282c862f2823b92b4f72aee8c89c75932e..622bf9bf0581c57714dd9cf54053b55751c9832c 100644
--- a/sickbeard/providers/speedcd.py
+++ b/sickbeard/providers/speedcd.py
@@ -50,7 +50,7 @@ class SpeedCDProvider(TorrentProvider):
 
         self.cache = SpeedCDCache(self)
 
-    def _do_login(self):
+    def login(self):
 
         login_params = {'username': self.username,
                         'password': self.password}
@@ -66,12 +66,12 @@ class SpeedCDProvider(TorrentProvider):
 
         return True
 
-    def _do_search(self, search_params, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_params, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_params.keys():
@@ -143,6 +143,6 @@ class SpeedCDCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_params = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 provider = SpeedCDProvider()
diff --git a/sickbeard/providers/strike.py b/sickbeard/providers/strike.py
index 0339d1af61e64e940abb969292052fe508f0b4c5..a1d0f4fe30ec65fbf3ec3065918787111ac18e98 100644
--- a/sickbeard/providers/strike.py
+++ b/sickbeard/providers/strike.py
@@ -33,7 +33,7 @@ class STRIKEProvider(TorrentProvider):
         self.cache = StrikeCache(self)
         self.minseed, self.minleech = 2 * [None]
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
@@ -99,6 +99,6 @@ class StrikeCache(tvcache.TVCache):
 
         # Use this hacky way for RSS search since most results will use this codec
         search_params = {'RSS': ['x264']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 provider = STRIKEProvider()
diff --git a/sickbeard/providers/t411.py b/sickbeard/providers/t411.py
index b4f186681a0e2a2dbda999a0afcf331ebe9edc63..afc40063275bde28fc6f6b9a1195491f92d58674 100644
--- a/sickbeard/providers/t411.py
+++ b/sickbeard/providers/t411.py
@@ -52,7 +52,7 @@ class T411Provider(TorrentProvider):
         self.minleech = 0
         self.confirmed = False
 
-    def _do_login(self):
+    def login(self):
 
         if self.token is not None:
             if time.time() < (self.tokenLastUpdate + 30 * 60):
@@ -76,12 +76,12 @@ class T411Provider(TorrentProvider):
             logger.log(u"Token not found in authentication response", logger.WARNING)
             return False
 
-    def _do_search(self, search_params, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_params, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_params.keys():
@@ -179,7 +179,7 @@ class T411Cache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_params = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 
 provider = T411Provider()
diff --git a/sickbeard/providers/thepiratebay.py b/sickbeard/providers/thepiratebay.py
index 8ae17a60664d5e04cc28a432c408b0985c25a10b..ca75537abe61102eebcbb6740c952e7142fea86f 100644
--- a/sickbeard/providers/thepiratebay.py
+++ b/sickbeard/providers/thepiratebay.py
@@ -64,7 +64,7 @@ class ThePirateBayProvider(TorrentProvider):
 
         self.re_title_url = r'/torrent/(?P<id>\d+)/(?P<title>.*?)".+?(?P<url>magnet.*?)".+?Size (?P<size>[\d\.]*&nbsp;[TGKMiB]{2,3}).+?(?P<seeders>\d+)</td>.+?(?P<leechers>\d+)</td>'
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
@@ -152,6 +152,6 @@ class ThePirateBayCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_params = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 provider = ThePirateBayProvider()
diff --git a/sickbeard/providers/titansoftv.py b/sickbeard/providers/titansoftv.py
index e46328f93e08548a9db5329d882fbca539265fb3..5efb5a34b05e72a802c44449ab68e7ebce2f521e 100644
--- a/sickbeard/providers/titansoftv.py
+++ b/sickbeard/providers/titansoftv.py
@@ -54,7 +54,7 @@ class TitansOfTVProvider(TorrentProvider):
 
         return True
 
-    def _do_search(self, search_params, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_params, age=0, ep_obj=None):
         # FIXME ADD MODE
         self._check_auth()
         results = []
@@ -151,7 +151,7 @@ class TitansOfTVCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_params = {'limit': 100}
-        return self.provider._do_search(search_params)
+        return self.provider.search(search_params)
 
 
 provider = TitansOfTVProvider()
diff --git a/sickbeard/providers/tntvillage.py b/sickbeard/providers/tntvillage.py
index 8fe48fdae60ad7d99594fb60c5a03fa6cf5b44e5..e1f598b3c05531272cbe7bf0b5275cc4c3b9ae3a 100644
--- a/sickbeard/providers/tntvillage.py
+++ b/sickbeard/providers/tntvillage.py
@@ -118,7 +118,7 @@ class TNTVillageProvider(TorrentProvider):
 
         return True
 
-    def _do_login(self):
+    def login(self):
 
         login_params = {'UserName': self.username,
                         'PassWord': self.password,
@@ -268,14 +268,14 @@ class TNTVillageProvider(TorrentProvider):
         if int(episodes[0]['count']) == len(parse_result.episode_numbers):
             return True
 
-    def _do_search(self, search_params, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_params, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
         self.categories = "cat=" + str(self.cat)
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_params.keys():
@@ -411,7 +411,7 @@ class TNTVillageCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_params = {'RSS': []}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 
 provider = TNTVillageProvider()
diff --git a/sickbeard/providers/tokyotoshokan.py b/sickbeard/providers/tokyotoshokan.py
index 80e9e65c7b5f4cf33fb6a20baa0ed8084764b1f8..f2cac0fcafd77ebf53a7e57cd8d7c728c57714c1 100644
--- a/sickbeard/providers/tokyotoshokan.py
+++ b/sickbeard/providers/tokyotoshokan.py
@@ -50,7 +50,7 @@ class TokyoToshokanProvider(TorrentProvider):
     def _get_episode_search_strings(self, ep_obj, add_string=''):
         return [x.replace('.', ' ') for x in show_name_helpers.makeSceneSearchString(self.show, ep_obj)]
 
-    def _do_search(self, search_string, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_string, age=0, ep_obj=None):
         # FIXME ADD MODE
         if self.show and not self.show.is_anime:
             return []
diff --git a/sickbeard/providers/torrentbytes.py b/sickbeard/providers/torrentbytes.py
index 91fcace76fc19f233f73b401d14ddbee5ad59b29..7601a7b615f33bc74beeb75c8eba48b28c2ed691 100644
--- a/sickbeard/providers/torrentbytes.py
+++ b/sickbeard/providers/torrentbytes.py
@@ -53,7 +53,7 @@ class TorrentBytesProvider(TorrentProvider):
 
         self.cache = TorrentBytesCache(self)
 
-    def _do_login(self):
+    def login(self):
 
         login_params = {'username': self.username,
                         'password': self.password,
@@ -70,12 +70,12 @@ class TorrentBytesProvider(TorrentProvider):
 
         return True
 
-    def _do_search(self, search_params, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_params, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_params.keys():
@@ -193,7 +193,7 @@ class TorrentBytesCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_params = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 
 provider = TorrentBytesProvider()
diff --git a/sickbeard/providers/torrentday.py b/sickbeard/providers/torrentday.py
index eafec211adab3bab29ae9da018ac2bb6eddba239..a75bc6ac59fec4cc913ba2e3c09976c92cdb5215 100644
--- a/sickbeard/providers/torrentday.py
+++ b/sickbeard/providers/torrentday.py
@@ -53,7 +53,7 @@ class TorrentDayProvider(TorrentProvider):
         self.categories = {'Season': {'c14': 1}, 'Episode': {'c2': 1, 'c26': 1, 'c7': 1, 'c24': 1},
                            'RSS': {'c2': 1, 'c26': 1, 'c7': 1, 'c24': 1, 'c14': 1}}
 
-    def _do_login(self):
+    def login(self):
 
         if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()):
             return True
@@ -92,12 +92,12 @@ class TorrentDayProvider(TorrentProvider):
             logger.log(u"Unable to obtain cookie", logger.WARNING)
             return False
 
-    def _do_search(self, search_params, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_params, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_params.keys():
@@ -171,6 +171,6 @@ class TorrentDayCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_params = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 provider = TorrentDayProvider()
diff --git a/sickbeard/providers/torrentleech.py b/sickbeard/providers/torrentleech.py
index 408b9b7a549b39203c056ca4cb6a3753c037df5e..bf069c022d4e011d173371ccddc1db4f355e0581 100644
--- a/sickbeard/providers/torrentleech.py
+++ b/sickbeard/providers/torrentleech.py
@@ -53,7 +53,7 @@ class TorrentLeechProvider(TorrentProvider):
 
         self.cache = TorrentLeechCache(self)
 
-    def _do_login(self):
+    def login(self):
 
         login_params = {'username': self.username,
                         'password': self.password,
@@ -71,12 +71,12 @@ class TorrentLeechProvider(TorrentProvider):
 
         return True
 
-    def _do_search(self, search_params, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_params, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_params.keys():
@@ -157,7 +157,7 @@ class TorrentLeechCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_params = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 
 provider = TorrentLeechProvider()
diff --git a/sickbeard/providers/torrentproject.py b/sickbeard/providers/torrentproject.py
index f0efceb284ec089464a9a4533c27e68976ff2eea..36e70cf7af91ce6b11ff8574b5f6f1475e4f8907 100644
--- a/sickbeard/providers/torrentproject.py
+++ b/sickbeard/providers/torrentproject.py
@@ -38,7 +38,7 @@ class TORRENTPROJECTProvider(TorrentProvider):
         self.minleech = None
         self.cache = TORRENTPROJECTCache(self)
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
@@ -115,6 +115,6 @@ class TORRENTPROJECTCache(tvcache.TVCache):
     def _getRSSData(self):
 
         search_params = {'RSS': ['0day']}
-        return {'entries': self.provider._do_search(search_params)}
+        return {'entries': self.provider.search(search_params)}
 
 provider = TORRENTPROJECTProvider()
diff --git a/sickbeard/providers/torrentz.py b/sickbeard/providers/torrentz.py
index 79478749d18de8394ce5bc9c24b7df03b031854f..38301b6306cfe188e1e0cf8c223549758a1f9da2 100644
--- a/sickbeard/providers/torrentz.py
+++ b/sickbeard/providers/torrentz.py
@@ -54,7 +54,7 @@ class TORRENTZProvider(TorrentProvider):
         match = re.findall(r'[0-9]+', description)
         return (int(match[0]) * 1024**2, int(match[1]), int(match[2]))
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
@@ -133,6 +133,6 @@ class TORRENTZCache(tvcache.TVCache):
         self.minTime = 15
 
     def _getRSSData(self):
-        return {'entries': self.provider._do_search({'RSS': ['']})}
+        return {'entries': self.provider.search({'RSS': ['']})}
 
 provider = TORRENTZProvider()
diff --git a/sickbeard/providers/transmitthenet.py b/sickbeard/providers/transmitthenet.py
index 421652dff1c418c16a0c2634a290c3f98832d9dc..307a4ca84c6682159d235e530f1b029011f26d69 100644
--- a/sickbeard/providers/transmitthenet.py
+++ b/sickbeard/providers/transmitthenet.py
@@ -54,7 +54,7 @@ class TransmitTheNetProvider(TorrentProvider):
 
         return True
 
-    def _do_login(self):
+    def login(self):
 
         login_params = {
             'username': self.username,
@@ -74,12 +74,12 @@ class TransmitTheNetProvider(TorrentProvider):
 
         return True
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_strings.keys():
@@ -176,7 +176,7 @@ class TransmitTheNetCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_strings = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_strings)}
+        return {'entries': self.provider.search(search_strings)}
 
 
 provider = TransmitTheNetProvider()
diff --git a/sickbeard/providers/tvchaosuk.py b/sickbeard/providers/tvchaosuk.py
index 90b49ee6eca55cb3604d298731a719c4e53082cf..3b265b3dc2e6a6f129516fb3127855d88c7d8ac6 100644
--- a/sickbeard/providers/tvchaosuk.py
+++ b/sickbeard/providers/tvchaosuk.py
@@ -104,7 +104,7 @@ class TVChaosUKProvider(TorrentProvider):
 
         return [search_string]
 
-    def _do_login(self):
+    def login(self):
 
         login_params = {'username': self.username, 'password': self.password}
         response = self.get_url(self.urls['login'], post_data=login_params, timeout=30)
@@ -118,12 +118,12 @@ class TVChaosUKProvider(TorrentProvider):
 
         return True
 
-    def _do_search(self, search_strings, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_strings, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_strings.keys():
@@ -207,7 +207,7 @@ class TVChaosUKCache(tvcache.TVCache):
 
     def _getRSSData(self):
         search_strings = {'RSS': ['']}
-        return {'entries': self.provider._do_search(search_strings)}
+        return {'entries': self.provider.search(search_strings)}
 
 
 provider = TVChaosUKProvider()
diff --git a/sickbeard/providers/xthor.py b/sickbeard/providers/xthor.py
index 14537bc23476c241c3272054b3629d7abee08edf..b026c80b8ec6e3300369f1c2831cb5314d0866e2 100644
--- a/sickbeard/providers/xthor.py
+++ b/sickbeard/providers/xthor.py
@@ -43,7 +43,7 @@ class XthorProvider(TorrentProvider):
         self.password = None
         self.ratio = None
 
-    def _do_login(self):
+    def login(self):
 
         if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()):
             return True
@@ -65,13 +65,13 @@ class XthorProvider(TorrentProvider):
 
         return True
 
-    def _do_search(self, search_params, search_mode='eponly', age=0, ep_obj=None):
+    def search(self, search_params, age=0, ep_obj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
         # check for auth
-        if not self._do_login():
+        if not self.login():
             return results
 
         for mode in search_params.keys():
diff --git a/sickrage/providers/GenericProvider.py b/sickrage/providers/GenericProvider.py
index afccbb658d3e213d93722c3e295b60f1036e1049..a02260f55a6a95cfe3739f87f5fd73773152e5cb 100644
--- a/sickrage/providers/GenericProvider.py
+++ b/sickrage/providers/GenericProvider.py
@@ -77,7 +77,7 @@ class GenericProvider(object):  # pylint: disable=too-many-instance-attributes
         shuffle(self.bt_cache_urls)
 
     def download_result(self, result):
-        if not self._do_login():
+        if not self.login():
             return False
 
         urls, filename = self._make_url(result)
@@ -150,7 +150,7 @@ class GenericProvider(object):  # pylint: disable=too-many-instance-attributes
                 logger.log(u'First search_string has rid', logger.DEBUG)
 
             for search_string in search_strings:
-                items_list += self._do_search(search_string, search_mode=search_mode, ep_obj=episode)
+                items_list += self.search(search_string, ep_obj=episode)
 
                 if first:
                     first = False
@@ -381,10 +381,10 @@ class GenericProvider(object):  # pylint: disable=too-many-instance-attributes
     def _check_auth(self):  # pylint: disable=no-self-use
         return True
 
-    def _do_login(self):  # pylint: disable=no-self-use
+    def login(self):  # pylint: disable=no-self-use
         return True
 
-    def _do_search(self, search_params, search_mode='eponly', age=0, ep_obj=None):  # pylint: disable=unused-argument,no-self-use
+    def search(self, search_params, age=0, ep_obj=None):  # pylint: disable=unused-argument,no-self-use
         return []
 
     def _get_result(self, episodes):  # pylint: disable=no-self-use
diff --git a/sickrage/providers/TorrentProvider.py b/sickrage/providers/TorrentProvider.py
index 747bcaa070977e420e1894ddd5d683814fb6b35a..12fd59fe932ea40aa1729a1f70264ad846f23f35 100644
--- a/sickrage/providers/TorrentProvider.py
+++ b/sickrage/providers/TorrentProvider.py
@@ -58,7 +58,7 @@ class TorrentProvider(GenericProvider):
                 for term in self.proper_strings:
                     search_strings = self._get_episode_search_strings(episode, add_string=term)
 
-                    for item in self._do_search(search_strings[0]):
+                    for item in self.search(search_strings[0]):
                         title, url = self._get_title_and_url(item)
 
                         results.append(Proper(title, url, datetime.today(), show))
diff --git a/tests/search_tests.py b/tests/search_tests.py
index 94eed6f69a52e75e166b5c4c0694d08ce6e634f8..326a4f2f2388c010eeba5bbbf16b26c17c2d5003 100644
--- a/tests/search_tests.py
+++ b/tests/search_tests.py
@@ -117,7 +117,7 @@ def test_generator(cur_data, cur_name, cur_provider):
             if not cur_provider.public:
                 continue
 
-            items = cur_provider._do_search(search_strings)  # pylint: disable=protected-access
+            items = cur_provider.search(search_strings)  # pylint: disable=protected-access
             if not items:
                 print "No results from cur_provider?"
                 continue
diff --git a/tests/sickrage_tests/providers/generic_provider_tests.py b/tests/sickrage_tests/providers/generic_provider_tests.py
index ac1e81e43d2e49417bb5a7de465c8f97d40fdc63..28e9072e82e085610b737807e6c38dc331fe4024 100644
--- a/tests/sickrage_tests/providers/generic_provider_tests.py
+++ b/tests/sickrage_tests/providers/generic_provider_tests.py
@@ -248,15 +248,15 @@ class GenericProviderTests(unittest.TestCase):
         """
         self.assertTrue(GenericProvider('Test Provider')._check_auth())
 
-    def test__do_login(self):
+    def test_login(self):
         """
-        Test _do_login
+        Test login
         """
-        self.assertTrue(GenericProvider('Test Provider')._do_login())
+        self.assertTrue(GenericProvider('Test Provider').login())
 
-    def test__do_search(self):
+    def test_search(self):
         """
-        Test _do_search
+        Test search
         """
         test_cases = {
             None: [],
@@ -281,7 +281,7 @@ class GenericProviderTests(unittest.TestCase):
 
         for test in test_cases, unicode_test_cases:
             for (search_params, result) in test.iteritems():
-                self.assertEqual(GenericProvider('Test Provider')._do_search(search_params), result)
+                self.assertEqual(GenericProvider('Test Provider').search(search_params), result)
 
     def test__get_size(self):
         """
diff --git a/tests/torrent_tests.py b/tests/torrent_tests.py
index 17588377983d96a87c1fc8c9cdf9a1a4cd8da807..665be92ed4083a3243507f76984a4f4a31475804 100644
--- a/tests/torrent_tests.py
+++ b/tests/torrent_tests.py
@@ -69,7 +69,7 @@ class TorrentBasicTests(test.SickbeardTestDBCase):
             # pylint: disable=protected-access
             search_strings_list = bitcannon._get_episode_search_strings(self.shows[0].episodes[0])  # [{'Episode': ['Italian Works S05E10']}]
             for search_strings in search_strings_list:
-                bitcannon._do_search(search_strings)   # {'Episode': ['Italian Works S05E10']} # pylint: disable=protected-access
+                bitcannon.search(search_strings)   # {'Episode': ['Italian Works S05E10']} # pylint: disable=protected-access
 
         return True