diff --git a/gui/slick/css/style.css b/gui/slick/css/style.css
index 7f7bef1f1e5663a06e39ed3e769e61ab41102ac3..b4d7e261be368dce1e1ae17700cfb154f6e52155 100644
--- a/gui/slick/css/style.css
+++ b/gui/slick/css/style.css
@@ -2976,7 +2976,7 @@ li.token-input-token {
 }
 
 li.token-input-token img {
-    padding-top: 7px;
+    padding-top: 3px;
     padding-right: 4px;
     float: left;
 }
diff --git a/gui/slick/js/lib/jquery.tokeninput.js b/gui/slick/js/lib/jquery.tokeninput.js
index 5ef1b848253697db47349dbe156fee3a0a2952f5..5eec491e16278debb91c5e53173a7583382b408c 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='"+srRoot+"/images/subtitles/flags/"+item["id"]+".png' /> " + item[this.propertyToSearch]+ "</li>" },
-    tokenFormatter: function(item) { return "<li><img src='"+srRoot+"/images/subtitles/flags/"+item["id"]+".png' /> <p>" + item[this.propertyToSearch] + "</p></li>" },
+    resultsFormatter: function(item){ return "<li><img src='"+srRoot+"/images/subtitles/flags/"+item["id"]+".png' onError=this.onerror=null;this.src='"+srRoot+"/images/flags/unknown.png'; /> " + item[this.propertyToSearch]+ "</li>" },
+    tokenFormatter: function(item) { return "<li><img src='"+srRoot+"/images/subtitles/flags/"+item["id"]+".png' onError=this.onerror=null;this.src='"+srRoot+"/images/flags/unknown.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 a05ff4480d55b3c2d199b24ab3670a784b562cba..228b3f171a3368379f88dce97151b63586483493 100644
--- a/gui/slick/js/manageSubtitleMissed.js
+++ b/gui/slick/js/manageSubtitleMissed.js
@@ -8,12 +8,6 @@ $(document).ready(function() {
         row += '  <td align="center"><input type="checkbox" class="'+indexer_id+'-epcheck" name="'+indexer_id+'-'+season+'x'+episode+'"'+checked+'></td>';
         row += '  <td style="width: 1%;">'+season+'x'+episode+'</td>';
         row += '  <td>'+name+'</td>';
-        row += '  <td style="float: right;">';
-            subtitles = subtitles.split(',');
-            for (var i in subtitles) {
-                row += '   <img src="/images/subtitles/flags/'+subtitles[i]+'.png" width="16" height="11" alt="'+subtitles[i]+'" />&nbsp;';
-            }
-        row += '  </td>';
         row += ' </tr>';
 
         return row;
diff --git a/gui/slick/views/layouts/main.mako b/gui/slick/views/layouts/main.mako
index 3272d7f29957f415773f3be709f7ebcb9049bcc3..73dae7847488b6157ceaabc492e5153f065175f1 100644
--- a/gui/slick/views/layouts/main.mako
+++ b/gui/slick/views/layouts/main.mako
@@ -313,6 +313,7 @@
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.cookiejar.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.json-2.2.min.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.selectboxes.min.js?${sbPID}"></script>
+        <script type="text/javascript" src="${srRoot}/js/lib/jquery.tokeninput.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter-2.17.7.min.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter.widgets-2.17.7.min.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter.widget-columnSelector-2.17.7.js?${sbPID}"></script><!-- Can't be added to bower -->
diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index 82492a048837c48f41097f1c303c0cbff6a80fb5..8b27416b9eaff36d8c3b103274d9189c627cead4 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -137,6 +137,7 @@ def remove_non_release_groups(name):
                        r'\[rarbg\]$':       'searchre',
                        r'\[eztv\]$':        'searchre',
                        r'\[ettv\]$':        'searchre',
+                       r'\[cttv\]$':        'searchre',
                        r'\[vtv\]$':         'searchre',
                        r'\[EtHD\]$':        'searchre',
                        r'\[GloDLS\]$':      'searchre',
@@ -542,7 +543,7 @@ def hardlinkFile(srcFile, destFile):
         fixSetGroupID(destFile)
     except Exception as e:
         logger.log(u"Failed to create hardlink of %s at %s. Error: %r. Copying instead" 
-        % (srcFile, destFile, ex(e)), logger.ERROR)
+        % (srcFile, destFile, ex(e)), logger.WARNING)
         copyFile(srcFile, destFile)
 
 
@@ -576,7 +577,7 @@ def moveAndSymlinkFile(srcFile, destFile):
         ek(symlink, destFile, srcFile)
     except Exception as e:
         logger.log(u"Failed to create symlink of %s at %s. Error: %r. Copying instead" 
-        % (srcFile, destFile, ex(e)), logger.ERROR)
+        % (srcFile, destFile, ex(e)), logger.WARNING)
         copyFile(srcFile, destFile)
 
 
diff --git a/sickbeard/providers/extratorrent.py b/sickbeard/providers/extratorrent.py
index d853b45554108f64a2610f56a92e7239b4760d9a..93542264b21f1b629e25a91b1b337ec9fa090b6d 100644
--- a/sickbeard/providers/extratorrent.py
+++ b/sickbeard/providers/extratorrent.py
@@ -73,7 +73,7 @@ class ExtraTorrentProvider(generic.TorrentProvider):
                         continue
 
                     try:
-                        data = xmltodict.parse(HTMLParser.HTMLParser().unescape(data).replace('&', '&amp;'))
+                        data = xmltodict.parse(HTMLParser.HTMLParser().unescape(data.encode('utf-8')).replace('&', '&amp;'))
                     except ExpatError as e:
                         logger.log(u"Failed parsing provider. Traceback: %r\n%r" % (traceback.format_exc(), data), logger.ERROR)
                         continue
@@ -87,7 +87,7 @@ class ExtraTorrentProvider(generic.TorrentProvider):
                     entries = entries if isinstance(entries, list) else [entries]
 
                     for item in entries:
-                        title = item['title']
+                        title = item['title'].decode('utf-8')
                        # info_hash = item['info_hash']
                         size = int(item['size'])
                         seeders = helpers.tryInt(item['seeders'], 0)
diff --git a/sickbeard/providers/kat.py b/sickbeard/providers/kat.py
index 5200f2c13a10feba1a015ac78afe164575efbf46..a136415e206ecc964b078aa8b7d6e9c506bdd07d 100644
--- a/sickbeard/providers/kat.py
+++ b/sickbeard/providers/kat.py
@@ -92,7 +92,7 @@ class KATProvider(generic.TorrentProvider):
                         continue
 
                     try:
-                        data = xmltodict.parse(HTMLParser.HTMLParser().unescape(data).replace('&', '&amp;'))
+                        data = xmltodict.parse(HTMLParser.HTMLParser().unescape(data.encode('utf-8')).replace('&', '&amp;'))
                     except ExpatError as e:
                         logger.log(u"Failed parsing provider. Traceback: %r\n%r" % (traceback.format_exc(), data), logger.ERROR)
                         continue
@@ -107,7 +107,7 @@ class KATProvider(generic.TorrentProvider):
 
                     for item in entries:
                         try:
-                            title = item['title']
+                            title = item['title'].decode('utf-8')
 
                             # Use the torcache link kat provides,
                             # unless it is not torcache or we are not using blackhole
diff --git a/sickbeard/providers/torrentproject.py b/sickbeard/providers/torrentproject.py
index 228ac0109249063d5ca97e29b5a91624faa448d1..7a8625c8c6ba3d44525b230207dc683de04665f5 100644
--- a/sickbeard/providers/torrentproject.py
+++ b/sickbeard/providers/torrentproject.py
@@ -82,8 +82,12 @@ class TORRENTPROJECTProvider(generic.TorrentProvider):
                             logger.log("Torrent has less than 10 seeds getting dyn trackers: " + title, logger.DEBUG)
                             trackerUrl = self.urls['api'] + "" + t_hash + "/trackers_json"
                             jdata = self.getURL(trackerUrl, json=True)
-                            download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "".join(["&tr=" + s for s in jdata])
-                            logger.log("Dyn Magnet: " + download_url, logger.DEBUG)
+                            if jdata == "maintenance":
+                                download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.coppersurfer.tk:6969&tr=udp://open.demonii.com:1337&tr=udp://tracker.leechers-paradise.org:6969&tr=udp://exodus.desync.com:6969"
+                                logger.log("Tracker url is in " + jdata + " mode, using hardcoded one" , logger.INFO)
+                            else:
+                                download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "".join(["&tr=" + s for s in jdata])
+                                logger.log("Dyn Magnet: " + download_url, logger.DEBUG)
                         else:
                             download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.coppersurfer.tk:6969&tr=udp://open.demonii.com:1337&tr=udp://tracker.leechers-paradise.org:6969&tr=udp://exodus.desync.com:6969"
                             logger.log("Result has less than 10 seeds but not using Dyn Magnet becouse its from RSS" + title, logger.DEBUG)
diff --git a/sickbeard/subtitles.py b/sickbeard/subtitles.py
index 5e6959caa16df430c0e3919ecc89f1c265700d9f..1b5ab9f938d6d63adbe548b8ffa330ab7dc4b5e0 100644
--- a/sickbeard/subtitles.py
+++ b/sickbeard/subtitles.py
@@ -74,7 +74,6 @@ provider_urls = {
     'tvsubtitles': 'http://www.tvsubtitles.net'
 }
 
-SINGLE = 'und'
 
 def sortedServiceList():
     newList = []
@@ -149,13 +148,6 @@ def downloadSubtitles(subtitles_info):
             logger.log(u'%s: No subtitles found for S%02dE%02d on any provider' % (subtitles_info['show.indexerid'], subtitles_info['season'], subtitles_info['episode']), logger.DEBUG)
             return (existing_subtitles, None)
 
-        for subtitle in found_subtitles:
-            # Force subtitle encoding to utf-8 for some languages
-            if subtitle.language.alpha3 == 'pol':
-                setattr(subtitle, 'encoding', 'utf-8')
-            elif subtitle.language.alpha3 == 'bul':
-                setattr(subtitle, 'encoding', 'utf-8')
-
         save_subtitles(video, found_subtitles, directory=subtitles_path, single=not sickbeard.SUBTITLES_MULTI)
 
         if not sickbeard.EMBEDDED_SUBTITLES_ALL and sickbeard.SUBTITLES_EXTRA_SCRIPTS and video_path.endswith(('.mkv', '.mp4')):
@@ -181,12 +173,12 @@ def save_subtitles(video, subtitles, single=False, directory=None):
     for subtitle in subtitles:
         # check content
         if subtitle.content is None:
-            logger.log("Skipping subtitle %r: no content" % subtitle, logger.DEBUG)
+            logger.log("Skipping subtitle for %s: no content" % video.name, logger.DEBUG)
             continue
 
         # check language
         if subtitle.language in set(s.language for s in saved_subtitles):
-            logger.log("Skipping subtitle %r: language already saved" % subtitle, logger.DEBUG)
+            logger.log("Skipping subtitle for %s: language already saved" % video.name, logger.DEBUG)
             continue
 
         # create subtitle path
@@ -195,7 +187,7 @@ def save_subtitles(video, subtitles, single=False, directory=None):
             subtitle_path = os.path.join(directory, os.path.split(subtitle_path)[1])
 
         # save content as is or in the specified encoding
-        logger.log("Saving %r to %r" % (subtitle, subtitle_path), logger.DEBUG)
+        logger.log("Saving subtitle for %s to %s" % (video.name, subtitle_path), logger.DEBUG)
         if subtitle.encoding:
             with io.open(subtitle_path, 'w', encoding=subtitle.encoding) as f:
                 f.write(subtitle.text)
@@ -294,11 +286,6 @@ def subtitlesLanguages(video_path):
         elif hasattr(language, 'alpha2') and language.alpha2:
             resultList.append(language.alpha2)
 
-    defaultLang = wantedLanguages()
-
-    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), should_save_subtitles)
 
 def getEmbeddedLanguages(video_path):
@@ -325,7 +312,7 @@ def getEmbeddedLanguages(video_path):
             else:
                 logger.log('MKV has no subtitle track', logger.DEBUG)
     except MalformedMKVError:
-        logger.log('MKV seems to be malformed, ignoring embedded subtitles', logger.WARNING)
+        logger.log('MKV seems to be malformed, ignoring embedded subtitles', logger.INFO)
 
     return embedded_subtitle_languages
 
@@ -339,6 +326,8 @@ def scan_subtitle_languages(path):
                 subtitles.add(Language.fromopensubtitles(os.path.splitext(p)[0][-2:]))
             elif os.path.splitext(p)[0].endswith(language_extensions) and len(os.path.splitext(p)[0].rsplit('.', 1)[1]) is 3:
                 subtitles.add(Language.fromopensubtitles(os.path.splitext(p)[0][-3:]))
+            elif os.path.splitext(p)[0].endswith('pt-BR') and len(os.path.splitext(p)[0].rsplit('.', 1)[1]) is 5:
+                subtitles.add(Language.fromopensubtitles('pob'))
             else:
                 subtitles.add(Language('und'))
 
@@ -374,7 +363,7 @@ class SubtitlesFinder():
         # get episodes on which we want subtitles
         # criteria is:
         #  - show subtitles = 1
-        #  - episode subtitles != config wanted languages or SINGLE (depends on config multi)
+        #  - episode subtitles != config wanted languages or 'und' (depends on config multi)
         #  - search count < 2 and diff(airdate, now) > 1 week : now -> 1d
         #  - search count < 7 and diff(airdate, now) <= 1 week : now -> 4h -> 8h -> 16h -> 1d -> 1d -> 1d
 
diff --git a/sickrage/show/ComingEpisodes.py b/sickrage/show/ComingEpisodes.py
index 2f929ec2fb94f51673d802c0dfc38e0d4978f0ea..1411e3f42ce4fe8dec8ae08089ec374d20c43256 100644
--- a/sickrage/show/ComingEpisodes.py
+++ b/sickrage/show/ComingEpisodes.py
@@ -19,7 +19,7 @@
 import sickbeard
 
 from datetime import date, timedelta
-from sickbeard.common import IGNORED, Quality, WANTED
+from sickbeard.common import IGNORED, Quality, WANTED, UNAIRED
 from sickbeard.db import DBConnection
 from sickbeard.network_timezones import parse_date_time
 from sickbeard.sbdatetime import sbdatetime
@@ -108,9 +108,9 @@ class ComingEpisodes:
             'AND s.indexer_id = e.showid '
             'AND airdate < ? '
             'AND airdate >= ? '
-            'AND e.status = ? '
+            'AND e.status IN (?,?) '
             'AND e.status NOT IN (' + ','.join(['?'] * len(qualities_list)) + ')',
-            [today, recently, WANTED] + qualities_list
+            [today, recently, WANTED, UNAIRED] + qualities_list
         )
 
         results = [dict(result) for result in results]