diff --git a/sickbeard/providers/hd4free.py b/sickbeard/providers/hd4free.py
index faec1a8b9d2daec65eddc73f8f01f01024214b05..8cfe55a8baea806b99fb8e58f6f0821e884fec48 100644
--- a/sickbeard/providers/hd4free.py
+++ b/sickbeard/providers/hd4free.py
@@ -30,12 +30,16 @@ class HD4FreeProvider(TorrentProvider):  # pylint: disable=too-many-instance-att
         TorrentProvider.__init__(self, "HD4Free")
 
         self.url = 'https://hd4free.xyz'
-        self.ratio = 0
-        self.cache = HD4FreeCache(self)
-        self.minseed, self.minleech = 2 * [None]
+        self.urls = {'search': self.url + '/searchapi.php'}
+
+        self.freeleech = None
         self.username = None
         self.api_key = None
-        self.freeleech = None
+        self.minseed = None
+        self.minleech = None
+        self.ratio = 0
+
+        self.cache = HD4FreeCache(self)
 
     def _check_auth(self):
         if self.username and self.api_key:
@@ -55,21 +59,25 @@ class HD4FreeProvider(TorrentProvider):  # pylint: disable=too-many-instance-att
             'apikey': self.api_key
         }
 
-        for mode in search_strings:  # Mode = RSS, Season, Episode
+        for mode in search_strings:
             items = []
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
-                if mode != 'RSS':
-                    search_params['search'] = search_string.encode('utf-8')
-
-                search_params['fl'] = 'true' if self.freeleech else 'false'
+                if self.freeleech:
+                    search_params['fl'] = 'true'
+                else:
+                    search_params.pop('fl', '')
 
                 if mode != 'RSS':
                     logger.log(u"Search string: " + search_string.strip(), logger.DEBUG)
+                    search_params['search'] = search_string.encode('utf-8')
+                else:
+                    search_params.pop('search', '')
+
+                search_url = self.urls['search'] + "?" + urlencode(search_params)
+                logger.log(u"Search URL: %s" % search_url, logger.DEBUG)
 
-                searchURL = self.url + "/searchapi.php?" + urlencode(search_params)
-                logger.log(u"Search URL: %s" % searchURL, logger.DEBUG)
-                jdata = self.get_url(searchURL, json=True)
+                jdata = self.get_url(search_url, json=True)
                 if not jdata:
                     logger.log(u"No data returned from provider", logger.DEBUG)
                     continue
@@ -78,32 +86,33 @@ class HD4FreeProvider(TorrentProvider):  # pylint: disable=too-many-instance-att
                     if jdata['0']['total_results'] == 0:
                         logger.log(u"Provider has no results for this search", logger.DEBUG)
                         continue
-                except (ValueError, KeyError):
-                    pass
+                except StandardError:
+                    continue
 
                 for i in jdata:
-                    seeders = jdata[i]["seeders"]
-                    leechers = jdata[i]["leechers"]
-                    title = jdata[i]["release_name"]
-                    torrent_size = jdata[i]["size"]
-                    download_url = jdata[i]["download_url"]
-
-                    size = convert_size(torrent_size) or -1
+                    try:
+                        title = jdata[i]["release_name"]
+                        download_url = jdata[i]["download_url"]
+                        if not all([title, download_url]):
+                            continue
+
+                        seeders = jdata[i]["seeders"]
+                        leechers = jdata[i]["leechers"]
+                        if seeders < self.minseed or leechers < self.minleech:
+                            if mode != 'RSS':
+                                logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
+                            continue
+
+                        torrent_size = str(jdata[i]["size"]) + ' MB'
+                        size = convert_size(torrent_size) or -1
+                        item = title, download_url, size, seeders, leechers
 
-                    if not all([title, download_url]):
-                        continue
-
-                    # Filter unseeded torrent
-                    if seeders < self.minseed or leechers < self.minleech:
                         if mode != 'RSS':
-                            logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
-                        continue
+                            logger.log(u"Found result: %s " % title, logger.DEBUG)
 
-                    if mode != 'RSS':
-                        logger.log(u"Found result: %s " % title, logger.DEBUG)
-
-                    item = title, download_url, size, seeders, leechers
-                    items.append(item)
+                        items.append(item)
+                    except StandardError:
+                        continue
 
             # For each search mode sort all the items by seeders if available
             items.sort(key=lambda tup: tup[3], reverse=True)