diff --git a/data/interfaces/default/config_providers.tmpl b/data/interfaces/default/config_providers.tmpl
index 7ff97f632e21bd22b64cefb4c5a8ca9df2ddb940..439913e3e209769868cdb8bbbf174f4742349f65 100755
--- a/data/interfaces/default/config_providers.tmpl
+++ b/data/interfaces/default/config_providers.tmpl
@@ -143,16 +143,9 @@
                     </div><!-- /nzbs_r_usDiv //-->
 
                     <div class="providerDiv" id="binnewzDiv">
-                        <div class="field-pair">
-                            <label class="clearfix">
-                                <span class="component-title">Language</span>
-                                <select class="component-desc" name="binnewz_language" value="$sickbeard.BINNEWZ_LANGUAGE">
-                                	<option value="vostfr" #if $sickbeard.BINNEWZ_LANGUAGE == "vostfr" then "selected=\"true\"" else ""#>VOSTFR</option>
-                                	<option value="vf" #if $sickbeard.BINNEWZ_LANGUAGE == "vf" then "selected=\"true\"" else ""#>VF</option>
-                                	<option value="vo" #if $sickbeard.BINNEWZ_LANGUAGE == "vo" then "selected=\"true\"" else ""#>VO</option>
-                                </select>
-                            </label>
-                        </div>
+						<p>
+							Nothing to set up for this provider
+						</p>
                     </div><!-- /binnewzDiv //-->
 
                     <div class="providerDiv" id="tvtorrentsDiv">
@@ -183,16 +176,6 @@
                                 <input class="component-desc" type="text" name="t411_password" value="$sickbeard.T411_PASSWORD" size="40" />
                             </label>
                         </div>
-                        <div class="field-pair">
-							<label class="clearfix">
-                                <span class="component-title">T411 Language</span>
-                                <select class="component-desc" name="t411_language" value="$sickbeard.T411_LANGUAGE">
-                                	<option value="vostfr" #if $sickbeard.T411_LANGUAGE == "vostfr" then "selected=\"true\"" else ""#>VOSTFR</option>
-                                	<option value="vf" #if $sickbeard.T411_LANGUAGE == "vf" then "selected=\"true\"" else ""#>VF</option>
-                                	<option value="vo" #if $sickbeard.T411_LANGUAGE == "vo" then "selected=\"true\"" else ""#>VO</option>
-                                </select>
-                            </label>
-                        </div>
                     </div><!-- /t411Div //-->
 
                     <div class="providerDiv" id="btnDiv">
diff --git a/data/interfaces/default/editShow.tmpl b/data/interfaces/default/editShow.tmpl
index a0ce6dd7e778f021fbaadb6141fddc0799def739..be816155fc1a9499982de9cba6e57fb20234d3f4 100644
--- a/data/interfaces/default/editShow.tmpl
+++ b/data/interfaces/default/editShow.tmpl
@@ -59,12 +59,24 @@ Quality:
 #set global $bestQualities = $qualities[1]
 #include $os.path.join($sickbeard.PROG_DIR, "data/interfaces/default/inc_qualityChooser.tmpl")
 <br />
-<br />
-Language: <select name="tvdbLang" id="tvdbLangSelect"></select><br />
+Metadata Language: <select name="tvdbLang" id="tvdbLangSelect"></select><br />
 Note: This will only affect the language of the retrieved metadata file contents and episode filenames.<br />
-This <b>DOES NOT</b> allow Sick Beard to download non-english TV episodes!<br />
 <br />
 <br />
+Desired Audio language: <select name="audio_lang" id="showLangSelect">
+#for $k,$v in $common.showLanguages.iteritems():
+	<option value="$k"
+	#if $show.audio_lang == $k:
+		selected
+	#end if
+	>$v</option>
+#end for
+</select>
+<br />
+<br />
+Custom Search Names: <input type="text" name="custom_search_names" id="custom_search_names" value="$show.custom_search_names" size="50" /><br />
+<strong>Note:</strong> Custom names used to find show. Define some custom names if show can't be found. Custom names should be separated by ",". Keep empty to use default show name (based on metadata language)<br />
+<br />
 Flatten files (no folders): <input type="checkbox" name="flatten_folders" #if $show.flatten_folders == 1 and not $sickbeard.NAMING_FORCE_FOLDERS then "checked=\"checked\"" else ""# #if $sickbeard.NAMING_FORCE_FOLDERS then "disabled=\"disabled\"" else ""#/><br /><br />
 Paused: <input type="checkbox" name="paused" #if $show.paused == 1 then "checked=\"checked\"" else ""# /><br /><br />
 
diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py
index bcb413b61de47cb0236eaffba94800e23ac00380..77d761fef5244ff81a5e35b04b6e6305f83d9331 100755
--- a/sickbeard/__init__.py
+++ b/sickbeard/__init__.py
@@ -182,12 +182,10 @@ NZBSRUS_UID = None
 NZBSRUS_HASH = None
 
 BINNEWZ = False
-BINNEWZ_LANGUAGE = "vostfr"
 
 T411 = False
 T411_USERNAME = None
 T411_PASSWORD = None
-T411_LANGUAGE = "vostfr"
 
 NZBMATRIX = False
 NZBMATRIX_USERNAME = None
@@ -326,8 +324,8 @@ def initialize(consoleLogging=True):
                 PLEX_SERVER_HOST, PLEX_HOST, PLEX_USERNAME, PLEX_PASSWORD, \
                 showUpdateScheduler, __INITIALIZED__, LAUNCH_BROWSER, showList, loadingShowList, \
                 NZBS, NZBS_UID, NZBS_HASH, EZRSS, TVTORRENTS, TVTORRENTS_DIGEST, TVTORRENTS_HASH, BTN, BTN_API_KEY, TORRENT_DIR, USENET_RETENTION, SOCKET_TIMEOUT, \
-				BINNEWZ, BINNEWZ_LANGUAGE, \
-                T411, T411_LANGUAGE, T411_USERNAME, T411_PASSWORD, \
+				BINNEWZ, \
+                T411, T411_USERNAME, T411_PASSWORD, \
                 SEARCH_FREQUENCY, DEFAULT_SEARCH_FREQUENCY, BACKLOG_SEARCH_FREQUENCY, \
                 QUALITY_DEFAULT, FLATTEN_FOLDERS_DEFAULT, STATUS_DEFAULT, \
                 GROWL_NOTIFY_ONSNATCH, GROWL_NOTIFY_ONDOWNLOAD, TWITTER_NOTIFY_ONSNATCH, TWITTER_NOTIFY_ONDOWNLOAD, \
@@ -561,11 +559,9 @@ def initialize(consoleLogging=True):
 
         CheckSection(CFG, 'BinNewz')
         BINNEWZ = bool(check_setting_int(CFG, 'BinNewz', 'binnewz', 0))
-        BINNEWZ_LANGUAGE = check_setting_str(CFG, 'BinNewz', 'language', 'vo')
 
         CheckSection(CFG, 'T411')
         T411 = bool(check_setting_int(CFG, 'T411', 't411', 0))
-        T411_LANGUAGE = check_setting_str(CFG, 'T411', 'language', 'vo')
         T411_USERNAME = check_setting_str(CFG, 'T411', 'username', '')
         T411_PASSWORD = check_setting_str(CFG, 'T411', 'password', '')
 
@@ -1049,13 +1045,11 @@ def save_config():
 
     new_config['BinNewz'] = {}
     new_config['BinNewz']['binnewz'] = int(BINNEWZ)
-    new_config['BinNewz']['language'] = BINNEWZ_LANGUAGE
 
     new_config['T411'] = {}
     new_config['T411']['t411'] = int(T411)
     new_config['T411']['username'] = T411_USERNAME
     new_config['T411']['password'] = T411_PASSWORD
-    new_config['T411']['language'] = T411_LANGUAGE
 
     new_config['Womble'] = {}
     new_config['Womble']['womble'] = int(WOMBLE)
diff --git a/sickbeard/common.py b/sickbeard/common.py
index 94819b477d3b8cb3fd2cdade700560fcfb0f94c7..3da19925091fb20a17d1ec7a21519898fcf7ddc3 100644
--- a/sickbeard/common.py
+++ b/sickbeard/common.py
@@ -259,3 +259,11 @@ countryList = {'Australia': 'AU',
                'USA': 'US'
                }
 
+showLanguages = {'en':'english',
+                 'fr':'french',
+				 '':'unknown'
+                 }
+
+languageShortCode = {'english':'en',
+                     'french':'fr'
+                     }
\ No newline at end of file
diff --git a/sickbeard/databases/mainDB.py b/sickbeard/databases/mainDB.py
index 12d25ba337b92a8bd5f9cd9721cdf1815e62700f..2ebf99c2c37dc665722a746ef92d74c5569e72a6 100644
--- a/sickbeard/databases/mainDB.py
+++ b/sickbeard/databases/mainDB.py
@@ -339,7 +339,14 @@ class AddLang (FixSabHostURL):
     def execute(self):
         self.addColumn("tv_shows", "lang", "TEXT", "en")
 
-class PopulateRootDirs (AddLang):
+class AddCustomSearchNames (AddLang):
+    def test(self):
+        return self.hasColumn("tv_shows", "custom_search_names")
+
+    def execute(self):
+        self.addColumn("tv_shows", "custom_search_names", "TEXT", "")
+
+class PopulateRootDirs (AddCustomSearchNames):
     def test(self):
         return self.checkDBVersion() >= 7
     
@@ -413,8 +420,21 @@ class FixAirByDateSetting(SetNzbTorrentSettings):
                 self.connection.action("UPDATE tv_shows SET air_by_date = ? WHERE tvdb_id = ?", [1, cur_show["tvdb_id"]])
         
         self.incDBVersion()
+        
+class AddAudioLang (FixAirByDateSetting):
+    def test(self):
+        return self.hasColumn("tv_shows", "audio_lang")
+
+    def execute(self):
+        self.addColumn("tv_shows", "audio_lang", "TEXT", "en")
+        
+class AddShowLangsToEpisode (AddAudioLang):
+    def test(self):
+        return self.hasColumn("tv_episodes", "audio_langs")
+    def execute(self):
+        self.addColumn("tv_episodes", "audio_langs", "TEXT", "")
 
-class AddSizeAndSceneNameFields(FixAirByDateSetting):
+class AddSizeAndSceneNameFields(AddShowLangsToEpisode):
 
     def test(self):
         return self.checkDBVersion() >= 10
@@ -525,8 +545,8 @@ class RenameSeasonFolders(AddSizeAndSceneNameFields):
         
         # rename the column
         self.connection.action("ALTER TABLE tv_shows RENAME TO tmp_tv_shows")
-        self.connection.action("CREATE TABLE tv_shows (show_id INTEGER PRIMARY KEY, location TEXT, show_name TEXT, tvdb_id NUMERIC, network TEXT, genre TEXT, runtime NUMERIC, quality NUMERIC, airs TEXT, status TEXT, flatten_folders NUMERIC, paused NUMERIC, startyear NUMERIC, tvr_id NUMERIC, tvr_name TEXT, air_by_date NUMERIC, lang TEXT)")
-        sql = "INSERT INTO tv_shows(show_id, location, show_name, tvdb_id, network, genre, runtime, quality, airs, status, flatten_folders, paused, startyear, tvr_id, tvr_name, air_by_date, lang) SELECT show_id, location, show_name, tvdb_id, network, genre, runtime, quality, airs, status, seasonfolders, paused, startyear, tvr_id, tvr_name, air_by_date, lang FROM tmp_tv_shows"
+        self.connection.action("CREATE TABLE tv_shows (show_id INTEGER PRIMARY KEY, location TEXT, show_name TEXT, tvdb_id NUMERIC, network TEXT, genre TEXT, runtime NUMERIC, quality NUMERIC, airs TEXT, status TEXT, flatten_folders NUMERIC, paused NUMERIC, startyear NUMERIC, tvr_id NUMERIC, tvr_name TEXT, air_by_date NUMERIC, lang TEXT, custom_search_names TEXT, audio_lang TEXT)")
+        sql = "INSERT INTO tv_shows(show_id, location, show_name, tvdb_id, network, genre, runtime, quality, airs, status, flatten_folders, paused, startyear, tvr_id, tvr_name, air_by_date, lang, custom_search_names, show_lang) SELECT show_id, location, show_name, tvdb_id, network, genre, runtime, quality, airs, status, seasonfolders, paused, startyear, tvr_id, tvr_name, air_by_date, lang, custom_search_names, audio_lang FROM tmp_tv_shows"
         self.connection.action(sql)
         
         # flip the values to be opposite of what they were before
diff --git a/sickbeard/providers/binnewz.py b/sickbeard/providers/binnewz.py
index 4f07efcd60b3c08efbf1cf6e3e91c57086081c60..ab9fe73c3d567a41eae21903baaa4e1334d409ba 100644
--- a/sickbeard/providers/binnewz.py
+++ b/sickbeard/providers/binnewz.py
@@ -28,6 +28,7 @@ import gzip
 import re
 import sickbeard
 import urllib
+import urllib2
 from sickbeard.common import Quality
 
 class BinNewzProvider(generic.NZBProvider):
@@ -53,10 +54,12 @@ class BinNewzProvider(generic.NZBProvider):
 
     def _get_episode_search_strings(self, ep_obj):
         strings = []
-        
-        strings.append("%s S%02dE%02d" % ( ep_obj.show.name, ep_obj.season, ep_obj.episode) )
-        strings.append("%s %dx%d" % ( ep_obj.show.name, ep_obj.season, ep_obj.episode ) )
-        
+
+        showNames = show_name_helpers.allPossibleShowNames(ep_obj.show)
+        for showName in showNames:
+            strings.append("%s S%02dE%02d" % ( showName, ep_obj.season, ep_obj.episode) )
+            strings.append("%s %dx%d" % ( showName, ep_obj.season, ep_obj.episode ) )
+
         return strings
     
     def _get_title_and_url(self, item):
@@ -64,7 +67,7 @@ class BinNewzProvider(generic.NZBProvider):
     
     def getQuality(self, item):
         return item.getQuality()
-    
+
     def doBinSearch(self, filename, minSize, newsgroup=None):
         
         binsearch_results = []
@@ -153,6 +156,10 @@ class BinNewzProvider(generic.NZBProvider):
                     encoder = encoderSpan.contents[0]
                 name = cells[2].text.strip()
                 language = cells[3].find("img").get("src")
+
+                if show.audio_lang == "fr":
+                    if not "_fr" in language:
+                        continue
                 
                 if "_stfr" in language:
                     language = "vostfr"
@@ -160,11 +167,7 @@ class BinNewzProvider(generic.NZBProvider):
                     language = "vf"
                 else:
                     language = "vo"
-    
-                if language != sickbeard.BINNEWZ_LANGUAGE:
-                    print "Skipping download, language found: %s wanted: %s" % (language, sickbeard.BINNEWZ_LANGUAGE)
-                    continue
-                
+               
                 # blacklist_groups = [ "alt.binaries.multimedia" ]
                 blacklist_groups = []                
                 
@@ -262,9 +265,9 @@ class BinNewzProvider(generic.NZBProvider):
                     print "Range detected"
                     
                 binsearch_results = self.doBinSearch( filename, minSize, newsgroup )
+                # binsearch_results = self.doNZBClub( filename, minSize, newsgroup )
                 
                 for binsearch_result in binsearch_results:
-                    print "adding result from %s, quality: %s, size: %8.2f MB" % (binsearch_result.url, qualityStr, binsearch_result.sizeInMegs)
                     results.append( BinNewzSearchResult( name, binsearch_result.nzbdata, binsearch_result.url, quality))
 
         return results
diff --git a/sickbeard/providers/t411.py b/sickbeard/providers/t411.py
index eccce5b71128a4d2cd83c1ce511905c123cae48a..84cf3e71693826d0032e2816245e3a8a67f217cd 100644
--- a/sickbeard/providers/t411.py
+++ b/sickbeard/providers/t411.py
@@ -17,15 +17,10 @@
 # You should have received a copy of the GNU General Public License
 # along with Sick Beard.  If not, see <http://www.gnu.org/licenses/>.
 
-from StringIO import StringIO
 from bs4 import BeautifulSoup
-from sickbeard import helpers, logger, classes, show_name_helpers
+from sickbeard import classes, show_name_helpers
 from sickbeard.common import Quality
-from sickbeard.exceptions import ex
-import datetime
 import generic
-import gzip
-import re
 import cookielib
 import sickbeard
 import urllib
@@ -49,13 +44,21 @@ class T411Provider(generic.TorrentProvider):
         
     def isEnabled(self):
         return sickbeard.T411
+    
+    def getSearchParams(self, searchString, audio_lang):
+        if audio_lang == "en":
+            return urllib.urlencode( {'search': searchString, 'cat' : 210, 'submit' : 'Recherche', 'subcat': 433 } ) + "&term%5B17%5D%5B%5D=540&term%5B17%5D%5B%5D=721"
+        elif audio_lang == "fr":
+            return urllib.urlencode( {'search': searchString, 'cat' : 210, 'submit' : 'Recherche', 'subcat': 433 } ) + "&term%5B17%5D%5B%5D=541&term%5B17%5D%5B%5D=542"
+        else:
+            return urllib.urlencode( {'search': searchString, 'cat' : 210, 'submit' : 'Recherche', 'subcat': 433 } )
 
     def _get_season_search_strings(self, show, season):
 
         showNames = show_name_helpers.allPossibleShowNames(show)
         results = []
         for showName in showNames:
-            results.append( urllib.urlencode( {'search': showName + " S%02d" % season, 'cat' : 210, 'submit' : 'Recherche', 'subcat': 433 } ) )
+            results.append( self.getSearchParams(showName + " S%02d" % season, show.audio_lang ))
         return results
 
     def _get_episode_search_strings(self, ep_obj):
@@ -63,8 +66,8 @@ class T411Provider(generic.TorrentProvider):
         showNames = show_name_helpers.allPossibleShowNames(ep_obj.show)
         results = []
         for showName in showNames:
-            results.append( urllib.urlencode( {'search': "%s S%02dE%02d" % ( showName, ep_obj.season, ep_obj.episode), 'cat' : 210, 'submit' : 'Recherche', 'subcat': 433 } ) )
-            results.append( urllib.urlencode( {'search': "%s %dx%d" % ( showName, ep_obj.season, ep_obj.episode ), 'cat' : 210, 'submit' : 'Recherche', 'subcat': 433 } ) )
+            results.append( self.getSearchParams( "%s S%02dE%02d" % ( showName, ep_obj.season, ep_obj.episode), ep_obj.show.audio_lang ) )
+            results.append( self.getSearchParams( "%s %dx%d" % ( showName, ep_obj.season, ep_obj.episode ), ep_obj.show.audio_lang ) )
         return results
     
     def _get_title_and_url(self, item):
@@ -98,13 +101,9 @@ class T411Provider(generic.TorrentProvider):
                 link = row.find("a", title=True)
                 title = link['title']
                 
-                if sickbeard.T411_LANGUAGE == "vostfr":
-                    if not "vostfr" in title.lower():
-                        continue
-                
                 torrentPage = self.opener.open( link['href'] )
                 torrentSoup = BeautifulSoup( torrentPage )
-                
+               
                 downloadTorrentLink = torrentSoup.find("a", text=u"T�l�charger")
                 if downloadTorrentLink:
                     
diff --git a/sickbeard/show_name_helpers.py b/sickbeard/show_name_helpers.py
index ed2c0a35c8306d4ca7845246f1aafdf7706a9b76..f2971338897a35c4ac0a6adfd75a3114093315bb 100644
--- a/sickbeard/show_name_helpers.py
+++ b/sickbeard/show_name_helpers.py
@@ -239,6 +239,10 @@ def allPossibleShowNames(show):
     if show.tvrname != "" and show.tvrname != None:
         showNames.append(show.tvrname)
 
+    if show.custom_search_names != '':
+        for custom_name in show.custom_search_names.split(','):
+            showNames.append(custom_name)
+
     newShowNames = []
 
     country_list = countryList
diff --git a/sickbeard/tv.py b/sickbeard/tv.py
index e4527cdc06b061c23a371ff592f70489c7dcde4b..a192700d0df769310f8567f2eeaab6a62c6a66fa 100644
--- a/sickbeard/tv.py
+++ b/sickbeard/tv.py
@@ -67,6 +67,8 @@ class TVShow(object):
         self.paused = 0
         self.air_by_date = 0
         self.lang = lang
+        self.audio_lang = ""
+        self.custom_search_names = ""
 
         self.lock = threading.Lock()
         self._isDirGood = False
@@ -613,7 +615,12 @@ class TVShow(object):
 
             if self.lang == "":
                 self.lang = sqlResults[0]["lang"]
+                
+            if self.audio_lang == "":
+                self.audio_lang = sqlResults[0]["audio_lang"]                
 
+            if self.custom_search_names == "":
+                self.custom_search_names = sqlResults[0]["custom_search_names"]                
 
     def loadFromTVDB(self, cache=True, tvapi=None, cachedSeason=None):
 
@@ -656,6 +663,12 @@ class TVShow(object):
 
         if self.status == None:
             self.status = ""
+        
+        if myEp["audio_lang"]:
+            self.audio_lang = myEp["audio_lang"]
+
+        if myEp["custom_search_names"]:
+            self.custom_search_names = myEp["custom_search_names"]   
 
         self.saveToDB()
 
@@ -824,7 +837,9 @@ class TVShow(object):
                         "air_by_date": self.air_by_date,
                         "startyear": self.startyear,
                         "tvr_name": self.tvrname,
-                        "lang": self.lang
+                        "lang": self.lang,
+                        "audio_lang": self.audio_lang,
+                        "custom_search_names": self.custom_search_names
                         }
 
         myDB.upsert("tv_shows", newValueDict, controlValueDict)
diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index bd474b01b1cb16ec5d28f93f8b4ac68fdf853ee0..766da1fc7ac1eea5f9751f8f91870e8006fd8c9b 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -2277,7 +2277,7 @@ class Home:
         return result['description'] if result else 'Episode not found.'
 
     @cherrypy.expose
-    def editShow(self, show=None, location=None, anyQualities=[], bestQualities=[], flatten_folders=None, paused=None, directCall=False, air_by_date=None, tvdbLang=None):
+    def editShow(self, show=None, location=None, anyQualities=[], bestQualities=[], flatten_folders=None, paused=None, directCall=False, air_by_date=None, tvdbLang=None, audio_lang=None, custom_search_names=None):
 
         if show == None:
             errString = "Invalid show ID: "+str(show)
@@ -2354,6 +2354,8 @@ class Home:
             showObj.paused = paused
             showObj.air_by_date = air_by_date
             showObj.lang = tvdb_lang
+            showObj.audio_lang = audio_lang
+            showObj.custom_search_names = custom_search_names
 
             # if we change location clear the db of episodes, change it, write to db, and rescan
             if os.path.normpath(showObj._location) != os.path.normpath(location):