diff --git a/gui/slick/interfaces/default/config_subtitles.tmpl b/gui/slick/interfaces/default/config_subtitles.tmpl
index 145c847c2f837c177e0d5806d9c6162c609ca84e..75e4434aeedb6fb6faa813af3b5e3ceab0be80d1 100644
--- a/gui/slick/interfaces/default/config_subtitles.tmpl
+++ b/gui/slick/interfaces/default/config_subtitles.tmpl
@@ -18,7 +18,7 @@
   	\$(document).ready(function() {
 		\$("#subtitles_languages").tokenInput(
 				[
-	                <%=",\r\n".join("{id: \"" + lang.alpha3 + "\", name: \"" + lang.name + "\"}" for lang in subtitles.subtitleLanguageFilter())%>
+	                <%=",\r\n".join("{id: \"" + lang.opensubtitles + "\", name: \"" + lang.name + "\"}" for lang in subtitles.subtitleLanguageFilter())%>
 	            ],
 	            {
 					method: "POST",
@@ -28,7 +28,7 @@
 	            		
 		            		[
 		            			<%=
-		            					",\r\n".join("{id: \"" + subtitles.fromietf(lang).alpha3 + "\", name: \"" + subtitles.fromietf(lang).name + "\"}" for lang in subtitles.wantedLanguages()) if subtitles.wantedLanguages() else ''
+		            					",\r\n".join("{id: \"" + subtitles.fromietf(lang).opensubtitles + "\", name: \"" + subtitles.fromietf(lang).name + "\"}" for lang in subtitles.wantedLanguages()) if subtitles.wantedLanguages() else ''
 		            			%>
 		            		]
 	            }
diff --git a/gui/slick/interfaces/default/displayShow.tmpl b/gui/slick/interfaces/default/displayShow.tmpl
index 3af81d411d1235f39e7f5744eae236b2cc549c77..27ae2c46ba94897b80771e4a040a3405af23a46c 100644
--- a/gui/slick/interfaces/default/displayShow.tmpl
+++ b/gui/slick/interfaces/default/displayShow.tmpl
@@ -284,7 +284,7 @@
                 </table>
             
                 <table style="width:180px; float: right; vertical-align: middle; height: 100%;">
-                    #set $info_flag = $subtitles.fromietf($show.lang).alpha3 if $subtitles.isValidLanguage($show.lang) else 'unknown'
+                    #set $info_flag = $subtitles.fromietf($show.lang).alpha3
                     <tr><td class="showLegend">Info Language:</td><td><img src="$sbRoot/images/flags/${info_flag}.png" width="16" height="11" alt="$show.lang" title="$show.lang" onError="this.onerror=null;this.src='$sbRoot/images/flags/unknown.png';"/></td></tr>
                     #if $sickbeard.USE_SUBTITLES
                     <tr><td class="showLegend">Subtitles: </td><td><img src="$sbRoot/images/#if $show.subtitles then "yes16.png\" alt=\"Y" else "no16.png\" alt=\"N"#" width="16" height="16" /></td></tr>
@@ -579,8 +579,8 @@
             </td>
             <td class="col-subtitles" align="center">
             #for $sub_lang in [$subtitles.fromietf(x) for x in $epResult["subtitles"].split(',') if $epResult["subtitles"]]:
-                #set $flag = $sub_lang.alpha3 if $hasattr($sub_lang, 'alpha3') and $sub_lang.alpha3 else $sub_lang.alpha2 if $hasattr($sub_lang, 'alpha2') and $sub_lang.alpha2 else 'unknown'
-                <img src="$sbRoot/images/flags/${flag}.png" width="16" height="11" alt="${sub_lang.name}" onError="this.onerror=null;this.src='$sbRoot/images/flags/unknown.png';" />
+                #set $flag = $sub_lang.opensubtitles
+                <img src="$sbRoot/images/subtitles/flags/${flag}.png" width="16" height="11" alt="${sub_lang.name}" onError="this.onerror=null;this.src='$sbRoot/images/flags/unknown.png';" />
             #end for
             </td>
             #set $curStatus, $curQuality = $Quality.splitCompositeStatus(int($epResult["status"]))
diff --git a/gui/slick/interfaces/default/manage_subtitleMissed.tmpl b/gui/slick/interfaces/default/manage_subtitleMissed.tmpl
index 38d061d6096697317125a4e6c39218d86e8d21a4..f5962e1db98d2a576aaa77fa37cc6eba1707eb09 100644
--- a/gui/slick/interfaces/default/manage_subtitleMissed.tmpl
+++ b/gui/slick/interfaces/default/manage_subtitleMissed.tmpl
@@ -30,7 +30,7 @@
 Manage episodes without <select name="whichSubs" class="form-control form-control-inline input-sm">
 <option value="all">All</option>
 #for $sub_lang in [$subtitles.fromietf(x) for x in $subtitles.wantedLanguages]:
-<option value="$sub_lang.alpha3">$sub_lang.name</option>
+<option value="$sub_lang.opensubtitles">$sub_lang.name</option>
 #end for
 </select>
 subtitles
diff --git a/gui/slick/js/ajaxEpSubtitles.js b/gui/slick/js/ajaxEpSubtitles.js
index c9e769b86564e574263aa8e60d139edcc68cd7a4..3514e7af2ca95bca629012dd5166a93be07e2594 100644
--- a/gui/slick/js/ajaxEpSubtitles.js
+++ b/gui/slick/js/ajaxEpSubtitles.js
@@ -14,9 +14,9 @@
 				$.each(subtitles,function(index, language){
 					if (language != "" && language != "und") {
 						if (index != subtitles.length - 1) {
-							subtitles_td.append($("<img/>").attr({"src": sbRoot+"/images/flags/"+language+".png", "alt": language, "width": 16, "height": 11}));
+							subtitles_td.append($("<img/>").attr({"src": sbRoot+"/images/subtitles/flags/"+language+".png", "alt": language, "width": 16, "height": 11}));
 					  	} else {
-					  		subtitles_td.append($("<img/>").attr({"src": sbRoot+"/images/flags/"+language+".png", "alt": language, "width": 16, "height": 11}));
+					  		subtitles_td.append($("<img/>").attr({"src": sbRoot+"/images/subtitles/flags/"+language+".png", "alt": language, "width": 16, "height": 11}));
 					  	}
 					}
 				});			
diff --git a/gui/slick/js/lib/jquery.tokeninput.js b/gui/slick/js/lib/jquery.tokeninput.js
index 2afcc0f2c4ad5ded5747b8e86353e47904b456d0..bf309d79fd17d3638703f596c3cdcceb25189213 100644
--- a/gui/slick/js/lib/jquery.tokeninput.js
+++ b/gui/slick/js/lib/jquery.tokeninput.js
@@ -43,8 +43,8 @@ var DEFAULT_SETTINGS = {
     idPrefix: "token-input-",
 
 	// Formatters
-    resultsFormatter: function(item){ return "<li><img src='"+sbRoot+"/images/flags/"+item["id"]+".png' /> " + item[this.propertyToSearch]+ "</li>" },
-    tokenFormatter: function(item) { return "<li><img src='"+sbRoot+"/images/flags/"+item["id"]+".png' /> <p>" + item[this.propertyToSearch] + "</p></li>" },
+    resultsFormatter: function(item){ return "<li><img src='"+sbRoot+"/images/subtitles/flags/"+item["id"]+".png' /> " + item[this.propertyToSearch]+ "</li>" },
+    tokenFormatter: function(item) { return "<li><img src='"+sbRoot+"/images/subtitles/flags/"+item["id"]+".png' /> <p>" + item[this.propertyToSearch] + "</p></li>" },
     flag: "flag",
 
 	// Callbacks
diff --git a/gui/slick/js/manageSubtitleMissed.js b/gui/slick/js/manageSubtitleMissed.js
index 18d0844824c3cc8417d6f12b9f2897ac8e6f6c10..262ecbb282e38fbba962c0813ac97ca310d6ae03 100644
--- a/gui/slick/js/manageSubtitleMissed.js
+++ b/gui/slick/js/manageSubtitleMissed.js
@@ -15,7 +15,7 @@ $(document).ready(function() {
         	subtitles = subtitles.split(',')
         	for (i in subtitles)
         	{
-        		row += '   <img src="/images/flags/'+subtitles[i]+'.png" width="16" height="11" alt="'+subtitles[i]+'" />&nbsp;';
+        		row += '   <img src="/images/subtitles/flags/'+subtitles[i]+'.png" width="16" height="11" alt="'+subtitles[i]+'" />&nbsp;';
         	}
         row += '  </td>';
         row += ' </tr>'
@@ -69,4 +69,4 @@ $(document).ready(function() {
         });
     });
 
-});
\ No newline at end of file
+});
diff --git a/sickbeard/history.py b/sickbeard/history.py
index 3f4f042cbbdbb88dd477ac57eefeec10444eb47d..1889af2fdcbf16e2d242440a986ecd6af7c03d07 100644
--- a/sickbeard/history.py
+++ b/sickbeard/history.py
@@ -77,7 +77,7 @@ def logDownload(episode, filename, new_ep_quality, release_group=None, version=-
 
 
 def logSubtitle(showid, season, episode, status, subtitleResult):
-    resource = subtitleResult.language.alpha3
+    resource = subtitleResult.language.opensubtitles
     provider = subtitleResult.provider_name
 
     status, quality = Quality.splitCompositeStatus(status)
diff --git a/sickbeard/subtitles.py b/sickbeard/subtitles.py
index 183af22ca50cb6082ea60514a4b295f8762d50f5..8532b57b967adae3c7dbdeb7ad34806f17d5cc5c 100644
--- a/sickbeard/subtitles.py
+++ b/sickbeard/subtitles.py
@@ -67,7 +67,7 @@ def getEnabledServiceList():
 
 #Hack around this for now.
 def fromietf(language):
-    return babelfish.Language.fromietf(language if language not in 'pb' else 'pt-BR')
+    return babelfish.Language.fromopensubtitles(language)
 
 def isValidLanguage(language):
     try:
@@ -81,7 +81,7 @@ def getLanguageName(language):
 
 # TODO: Filter here for non-languages in sickbeard.SUBTITLES_LANGUAGES
 def wantedLanguages(sqlLike = False):
-    wantedLanguages = sorted(sickbeard.SUBTITLES_LANGUAGES)
+    wantedLanguages = [x for x in sorted(sickbeard.SUBTITLES_LANGUAGES) if x in babelfish.language_converters['opensubtitles'].codes]
     if sqlLike:
         return '%' + ','.join(wantedLanguages) + '%'
     return wantedLanguages
@@ -92,8 +92,10 @@ def subtitlesLanguages(video_path):
     languages = subliminal.video.scan_subtitle_languages(video_path)
 
     for language in languages:
-        if hasattr(language, 'alpha3') and language.alpha3:
-                resultList.append(language.alpha3)
+        if hasattr(language, 'opensubtitles') and language.opensubtitles:
+            resultList.append(language.opensubtitles)
+        elif hasattr(language, 'alpha3') and language.alpha3:
+            resultList.append(language.alpha3)
         elif hasattr(language, 'alpha2') and language.alpha2:
             resultList.append(language.alpha2)
 
@@ -101,11 +103,14 @@ def subtitlesLanguages(video_path):
     if len(resultList) is 1 and len(defaultLang) is 1:
         return defaultLang
 
+    if ('pob' in defaultLang or 'pb' in defaultLang) and ('pt' not in defaultLang and 'por' not in defaultLang):
+            resultList = [x if not x in ['por', 'pt'] else u'pob' for x in resultList]
+
     return sorted(resultList)
 
 # TODO: Return only languages our providers allow
 def subtitleLanguageFilter():
-    return [language for language in babelfish.LANGUAGE_MATRIX if hasattr(language, 'alpha2') and language.alpha2]
+    return [babelfish.Language.fromopensubtitles(language) for language in babelfish.language_converters['opensubtitles'].codes if len(language) == 3]
 
 class SubtitlesFinder():
     """
diff --git a/sickbeard/tv.py b/sickbeard/tv.py
index b2d33fb3a8586360a985402bf3ded8ec6d5f4181..a5230ca80e6e53b7417a69b4aa3a05ba597026b7 100644
--- a/sickbeard/tv.py
+++ b/sickbeard/tv.py
@@ -1517,7 +1517,7 @@ class TVEpisode(object):
         if sickbeard.SUBTITLES_HISTORY:
             for video, subs in foundSubs.iteritems():
                 for sub in subs:
-                    logger.log(u'history.logSubtitle %s, %s' % (sub.provider_name, sub.language.alpha3), logger.DEBUG)
+                    logger.log(u'history.logSubtitle %s, %s' % (sub.provider_name, sub.language.opensubtitles), logger.DEBUG)
                     history.logSubtitle(self.show.indexerid, self.season, self.episode, self.status, sub)
 
         return self.subtitles